Makefile.in 23.1 KB
Newer Older
1 2 3 4 5 6 7
# Nettle Makefile

@SET_MAKE@

srcdir = @srcdir@
VPATH = @srcdir@

8 9 10 11 12
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = $(INSTALL_PROGRAM) -s
13
MKDIR_P = @MKDIR_P@
14

15 16
OPT_NETTLE_OBJS = @OPT_NETTLE_OBJS@
OPT_HOGWEED_OBJS = @OPT_HOGWEED_OBJS@
17

18
OPT_NETTLE_SOURCES = @OPT_NETTLE_SOURCES@
19

20 21 22 23
SUBDIRS = tools testsuite examples

include config.make

24
PRE_CPPFLAGS = -I.
25
EXTRA_CFLAGS = $(CCPIC)
26

27
# FIXME: Add configuration of LIBEXT?
28 29
LIBTARGETS = @IF_STATIC@ libnettle.a @IF_HOGWEED@ libhogweed.a
SHLIBTARGETS = @IF_SHARED@ $(LIBNETTLE_FORLINK) @IF_HOGWEED@ $(LIBHOGWEED_FORLINK)
30

31 32 33
getopt_SOURCES = getopt.c getopt1.c
getopt_TARGETS = $(getopt_SOURCES:.c=.$(OBJEXT))

34 35 36
internal_SOURCES = nettle-internal.c
internal_TARGETS = $(internal_SOURCES:.c=.$(OBJEXT))

37
TARGETS = $(getopt_TARGETS) $(internal_TARGETS) \
38
	  $(LIBTARGETS) $(SHLIBTARGETS)
39

Sam Thursfield's avatar
Sam Thursfield committed
40
DOCTARGETS = @IF_DOCUMENTATION@ nettle.info nettle.html nettle.pdf
41

42 43 44
PKGCONFIG_FILES = nettle.pc @IF_HOGWEED@ hogweed.pc
pkgconfigdir = $(libdir)/pkgconfig

45
all check install uninstall:
46
	$(MAKE) $@-here
Niels Möller's avatar
Niels Möller committed
47 48
	set -e; for d in $(SUBDIRS); do \
	  echo "Making $@ in $$d" ; (cd $$d && $(MAKE) $@); done
49

50
clean distclean mostlyclean maintainer-clean tags:
Niels Möller's avatar
Niels Möller committed
51 52
	set -e; for d in $(SUBDIRS); do \
	  echo "Making $@ in $$d" ; (cd $$d && $(MAKE) $@); done
53 54
	$(MAKE) $@-here

55 56 57
check-here:
	true

58
# FIXME: Remove. These targets aren't supported, but they are expected by the
59 60 61 62
# automake generated Makefiles in the lsh build.
dvi installcheck uninstallcheck:
	true

63
all-here: $(TARGETS) $(DOCTARGETS)
64

65 66
nettle_SOURCES = aes-decrypt-internal.c aes-decrypt.c \
		 aes-encrypt-internal.c aes-encrypt.c aes-encrypt-table.c \
67
		 aes-invert-internal.c aes-set-key-internal.c \
68
		 aes-set-encrypt-key.c aes-set-decrypt-key.c \
Niels Möller's avatar
Niels Möller committed
69 70
		 aes128-set-encrypt-key.c aes128-set-decrypt-key.c \
		 aes128-meta.c \
Niels Möller's avatar
Niels Möller committed
71 72
		 aes192-set-encrypt-key.c aes192-set-decrypt-key.c \
		 aes192-meta.c \
73 74
		 aes256-set-encrypt-key.c aes256-set-decrypt-key.c \
		 aes256-meta.c \
75
		 arcfour.c arcfour-crypt.c \
Niels Möller's avatar
Niels Möller committed
76
		 arctwo.c arctwo-meta.c blowfish.c \
77
		 base16-encode.c base16-decode.c base16-meta.c \
Niels Möller's avatar
Niels Möller committed
78
		 base64-encode.c base64-decode.c base64-meta.c \
79
		 base64url-encode.c base64url-decode.c base64url-meta.c \
Niels Möller's avatar
Niels Möller committed
80
		 buffer.c buffer-init.c \
Niels Möller's avatar
Niels Möller committed
81 82 83 84 85 86 87 88 89
		 camellia-crypt-internal.c camellia-table.c \
		 camellia-absorb.c camellia-invert-key.c \
		 camellia128-set-encrypt-key.c camellia128-crypt.c \
		 camellia128-set-decrypt-key.c \
		 camellia128-meta.c \
		 camellia192-meta.c \
		 camellia256-set-encrypt-key.c camellia256-crypt.c \
		 camellia256-set-decrypt-key.c \
		 camellia256-meta.c \
Niels Möller's avatar
Niels Möller committed
90
		 cast128.c cast128-meta.c cbc.c \
Dmitry Baryshkov's avatar
Dmitry Baryshkov committed
91
		 ccm.c ccm-aes128.c ccm-aes192.c ccm-aes256.c cfb.c \
92
		 cnd-memcpy.c \
93
		 chacha-crypt.c chacha-core-internal.c \
Niels Möller's avatar
Niels Möller committed
94
		 chacha-poly1305.c chacha-poly1305-meta.c \
95
		 chacha-set-key.c chacha-set-nonce.c \
96
		 ctr.c ctr16.c des.c des3.c \
97
		 eax.c eax-aes128.c eax-aes128-meta.c \
98 99 100 101
		 gcm.c gcm-aes.c \
		 gcm-aes128.c gcm-aes128-meta.c \
		 gcm-aes192.c gcm-aes192-meta.c \
		 gcm-aes256.c gcm-aes256-meta.c \
Niels Möller's avatar
Niels Möller committed
102
		 gcm-camellia128.c gcm-camellia128-meta.c \
Niels Möller's avatar
Niels Möller committed
103
		 gcm-camellia256.c gcm-camellia256-meta.c \
104
		 cmac.c cmac-aes128.c cmac-aes256.c \
Niels Möller's avatar
Niels Möller committed
105
		 gosthash94.c gosthash94-meta.c \
106
		 hmac.c hmac-md5.c hmac-ripemd160.c hmac-sha1.c \
107
		 hmac-sha224.c hmac-sha256.c hmac-sha384.c hmac-sha512.c \
108
		 knuth-lfib.c hkdf.c \
109
		 md2.c md2-meta.c md4.c md4-meta.c \
110
		 md5.c md5-compress.c md5-compat.c md5-meta.c \
111
		 memeql-sec.c memxor.c memxor3.c \
112
		 nettle-lookup-hash.c \
113 114
		 nettle-meta-aeads.c nettle-meta-armors.c \
		 nettle-meta-ciphers.c nettle-meta-hashes.c \
Niels Möller's avatar
Niels Möller committed
115 116 117
		 pbkdf2.c pbkdf2-hmac-sha1.c pbkdf2-hmac-sha256.c \
		 poly1305-aes.c poly1305-internal.c \
		 realloc.c \
118
		 ripemd160.c ripemd160-compress.c ripemd160-meta.c \
119
		 salsa20-core-internal.c \
120
		 salsa20-crypt.c salsa20r12-crypt.c salsa20-set-key.c \
121 122
		 salsa20-set-nonce.c \
		 salsa20-128-set-key.c salsa20-256-set-key.c \
123 124
		 sha1.c sha1-compress.c sha1-meta.c \
		 sha256.c sha256-compress.c sha224-meta.c sha256-meta.c \
125
		 sha512.c sha512-compress.c sha384-meta.c sha512-meta.c \
126
		 sha512-224-meta.c sha512-256-meta.c \
127 128 129
		 sha3.c sha3-permute.c \
		 sha3-224.c sha3-224-meta.c sha3-256.c sha3-256-meta.c \
		 sha3-384.c sha3-384-meta.c sha3-512.c sha3-512-meta.c\
130 131
		 serpent-set-key.c serpent-encrypt.c serpent-decrypt.c \
		 serpent-meta.c \
132
		 twofish.c twofish-meta.c \
Niels Möller's avatar
Niels Möller committed
133 134 135
		 umac-nh.c umac-nh-n.c umac-l2.c umac-l3.c \
		 umac-poly64.c umac-poly128.c umac-set-key.c \
		 umac32.c umac64.c umac96.c umac128.c \
136
		 version.c \
Niels Möller's avatar
Niels Möller committed
137
		 write-be32.c write-le32.c write-le64.c \
138 139
		 yarrow256.c yarrow_key_event.c \
		 xts.c xts-aes128.c xts-aes256.c
140

141 142
hogweed_SOURCES = sexp.c sexp-format.c \
		  sexp-transport.c sexp-transport-format.c \
143
		  bignum.c bignum-random.c bignum-random-prime.c \
144
		  sexp2bignum.c \
145
		  pkcs1.c pkcs1-encrypt.c pkcs1-decrypt.c \
146
		  pkcs1-sec-decrypt.c \
147
		  pkcs1-rsa-digest.c pkcs1-rsa-md5.c pkcs1-rsa-sha1.c \
148
		  pkcs1-rsa-sha256.c pkcs1-rsa-sha512.c \
Daiki Ueno's avatar
Daiki Ueno committed
149
		  pss.c pss-mgf1.c \
150
		  rsa.c rsa-sign.c rsa-sign-tr.c rsa-verify.c \
151
		  rsa-sec-compute-root.c \
152
		  rsa-pkcs1-sign.c rsa-pkcs1-sign-tr.c rsa-pkcs1-verify.c \
153 154 155 156
		  rsa-md5-sign.c rsa-md5-sign-tr.c rsa-md5-verify.c \
		  rsa-sha1-sign.c rsa-sha1-sign-tr.c rsa-sha1-verify.c \
		  rsa-sha256-sign.c rsa-sha256-sign-tr.c rsa-sha256-verify.c \
		  rsa-sha512-sign.c rsa-sha512-sign-tr.c rsa-sha512-verify.c \
157 158
		  rsa-pss-sha256-sign-tr.c rsa-pss-sha256-verify.c \
		  rsa-pss-sha512-sign-tr.c rsa-pss-sha512-verify.c \
159 160
		  rsa-encrypt.c rsa-decrypt.c \
		  rsa-sec-decrypt.c rsa-decrypt-tr.c \
161
		  rsa-keygen.c rsa-blind.c \
162
		  rsa2sexp.c sexp2rsa.c \
163
		  dsa.c dsa-compat.c dsa-compat-keygen.c dsa-gen-params.c \
164
		  dsa-sign.c dsa-verify.c dsa-keygen.c dsa-hash.c \
165 166
		  dsa-sha1-sign.c dsa-sha1-verify.c \
		  dsa-sha256-sign.c dsa-sha256-verify.c  \
167
		  dsa2sexp.c sexp2dsa.c \
168
		  pgp-encode.c rsa2openpgp.c \
169
		  der-iterator.c der2rsa.c der2dsa.c \
170
		  sec-add-1.c sec-sub-1.c sec-tabselect.c \
Niels Möller's avatar
Niels Möller committed
171
		  gmp-glue.c cnd-copy.c \
172
		  ecc-mod.c ecc-mod-inv.c \
173
		  ecc-mod-arith.c ecc-pp1-redc.c ecc-pm1-redc.c \
Niels Möller's avatar
Niels Möller committed
174
		  ecc-192.c ecc-224.c ecc-256.c ecc-384.c ecc-521.c \
175
		  ecc-25519.c \
Niels Möller's avatar
Niels Möller committed
176 177
		  ecc-size.c ecc-j-to-a.c ecc-a-to-j.c \
		  ecc-dup-jj.c ecc-add-jja.c ecc-add-jjj.c \
Niels Möller's avatar
Niels Möller committed
178
		  ecc-eh-to-a.c \
179 180
		  ecc-dup-eh.c ecc-add-eh.c ecc-add-ehh.c \
		  ecc-mul-g-eh.c ecc-mul-a-eh.c \
181
		  ecc-mul-g.c ecc-mul-a.c ecc-hash.c ecc-random.c \
182
		  ecc-point.c ecc-scalar.c ecc-point-mul.c ecc-point-mul-g.c \
183
		  ecc-ecdsa-sign.c ecdsa-sign.c \
184
		  ecc-ecdsa-verify.c ecdsa-verify.c ecdsa-keygen.c \
185
		  curve25519-mul-g.c curve25519-mul.c curve25519-eh-to-x.c \
186
		  eddsa-compress.c eddsa-decompress.c eddsa-expand.c \
187
		  eddsa-hash.c eddsa-pubkey.c eddsa-sign.c eddsa-verify.c \
188
		  ed25519-sha512-pubkey.c \
189 190 191
		  ed25519-sha512-sign.c ed25519-sha512-verify.c

OPT_SOURCES = fat-x86_64.c fat-arm.c mini-gmp.c
192

193
HEADERS = aes.h arcfour.h arctwo.h asn1.h blowfish.h \
194
	  base16.h base64.h bignum.h buffer.h camellia.h cast128.h \
Dmitry Baryshkov's avatar
Dmitry Baryshkov committed
195
	  cbc.h ccm.h cfb.h chacha.h chacha-poly1305.h ctr.h \
196
	  curve25519.h des.h dsa.h dsa-compat.h eax.h \
197
	  ecc-curve.h ecc.h ecdsa.h eddsa.h \
Niels Möller's avatar
Niels Möller committed
198
	  gcm.h gosthash94.h hmac.h \
199
	  knuth-lfib.h hkdf.h \
200
	  macros.h \
201
	  cmac.h \
202 203
	  md2.h md4.h \
	  md5.h md5-compat.h \
204
	  memops.h memxor.h \
Niels Möller's avatar
Niels Möller committed
205
	  nettle-meta.h nettle-types.h \
206
	  pbkdf2.h \
Daiki Ueno's avatar
Daiki Ueno committed
207
	  pgp.h pkcs1.h pss.h pss-mgf1.h realloc.h ripemd160.h rsa.h \
208
	  salsa20.h sexp.h \
209
	  serpent.h sha.h sha1.h sha2.h sha3.h twofish.h \
210
	  umac.h yarrow.h xts.h poly1305.h
211

Niels Möller's avatar
Niels Möller committed
212
INSTALL_HEADERS = $(HEADERS) version.h @IF_MINI_GMP@ mini-gmp.h
213

214 215
SOURCES = $(nettle_SOURCES) $(hogweed_SOURCES) \
	  $(getopt_SOURCES) $(internal_SOURCES) \
216
	  $(OPT_SOURCES) \
217
	  aesdata.c desdata.c twofishdata.c shadata.c gcmdata.c eccdata.c
218

219 220
# NOTE: This list must include all source files, with no duplicates,
# independently of which source files are included in the build.
221 222
DISTFILES = $(SOURCES) $(HEADERS) getopt.h getopt_int.h \
	.bootstrap run-tests \
223
	aclocal.m4 configure.ac \
224
	configure stamp-h.in version.h.in \
225
	libnettle.map.in libhogweed.map.in \
226
	config.guess config.sub install-sh texinfo.tex \
227
	config.h.in config.m4.in config.make.in	Makefile.in \
228
	README CONTRIBUTING.md AUTHORS COPYING.LESSERv3 COPYINGv2 COPYINGv3 \
Niels Möller's avatar
Niels Möller committed
229
	INSTALL NEWS ChangeLog \
230
	nettle.pc.in hogweed.pc.in \
231
	$(des_headers) descore.README desdata.stamp \
232 233
	aes-internal.h camellia-internal.h serpent-internal.h \
	cast128_sboxes.h desinfo.h desCode.h \
234
	ripemd160-internal.h sha2-internal.h \
235
	memxor-internal.h nettle-internal.h nettle-write.h \
236 237
	ctr-internal.h chacha-internal.h sha3-internal.h \
	salsa20-internal.h umac-internal.h hogweed-internal.h \
238
	rsa-internal.h pkcs1-internal.h dsa-internal.h eddsa-internal.h \
239
	gmp-glue.h ecc-internal.h fat-setup.h \
240
	mini-gmp.h asm.m4 \
241
	nettle.texinfo nettle.info nettle.html nettle.pdf sha-example.c
242

243
# Rules building static libraries
244 245
nettle_OBJS = $(nettle_SOURCES:.c=.$(OBJEXT)) \
	      $(OPT_NETTLE_SOURCES:.c=.$(OBJEXT)) $(OPT_NETTLE_OBJS)
246

247 248
hogweed_OBJS = $(hogweed_SOURCES:.c=.$(OBJEXT)) \
	       $(OPT_HOGWEED_OBJS) @IF_MINI_GMP@ mini-gmp.$(OBJEXT)
249

250
libnettle.a: $(nettle_OBJS)
251
	-rm -f $@
252
	$(AR) $(ARFLAGS) $@ $(nettle_OBJS)
253
	$(RANLIB) $@
254
	echo nettle > libnettle.stamp
255

256 257 258 259
libhogweed.a: $(hogweed_OBJS)
	-rm -f $@
	$(AR) $(ARFLAGS) $@ $(hogweed_OBJS)
	$(RANLIB) $@
260
	echo hogweed > libhogweed.stamp
261

262
.c.$(OBJEXT):
263
	$(COMPILE) -c $< \
264 265
	&& $(DEP_PROCESS)

266
# Rules building shared libraries.
267
$(LIBNETTLE_FORLINK): $(nettle_OBJS)
268
	$(LIBNETTLE_LINK) $(nettle_OBJS) @EXTRA_LINKER_FLAGS@ -o $@ $(LIBNETTLE_LIBS)
269
	-mkdir .lib 2>/dev/null
270 271 272
	(cd .lib \
          && rm -f $(LIBNETTLE_FORLINK) \
	  && $(LN_S) ../$(LIBNETTLE_FORLINK) $(LIBNETTLE_FORLINK) \
273
	  && [ -z "$(LIBNETTLE_SONAME)" ] \
274 275
	  || { rm -f $(LIBNETTLE_SONAME) \
	       && $(LN_S) $(LIBNETTLE_FORLINK) $(LIBNETTLE_SONAME) ; } )
276
	echo nettle > libnettle.stamp
277

278
$(LIBHOGWEED_FORLINK): $(hogweed_OBJS) $(LIBNETTLE_FORLINK)
279
	$(LIBHOGWEED_LINK) $(hogweed_OBJS) @EXTRA_HOGWEED_LINKER_FLAGS@ -o $@ $(LIBHOGWEED_LIBS)
280
	-mkdir .lib 2>/dev/null
281 282 283
	(cd .lib \
          && rm -f $(LIBHOGWEED_FORLINK) \
	  && $(LN_S) ../$(LIBHOGWEED_FORLINK) $(LIBHOGWEED_FORLINK) \
284
	  && [ -z "$(LIBHOGWEED_SONAME)" ] \
285 286
	  || { rm -f $(LIBHOGWEED_SONAME) \
	       && $(LN_S) $(LIBHOGWEED_FORLINK) $(LIBHOGWEED_SONAME) ; } )
287
	echo hogweed > libhogweed.stamp
288

Niels Möller's avatar
Niels Möller committed
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311
# For Solaris and BSD make, we have to use an explicit rule for each
# executable. Avoid object file targets to make it easy to run the
# right compiler.
aesdata$(EXEEXT_FOR_BUILD): aesdata.c
	$(CC_FOR_BUILD) `test -f aesdata.c || echo '$(srcdir)/'`aesdata.c \
	-o aesdata$(EXEEXT_FOR_BUILD)

desdata$(EXEEXT_FOR_BUILD): desdata.c
	$(CC_FOR_BUILD) `test -f desdata.c || echo '$(srcdir)/'`desdata.c \
	-o desdata$(EXEEXT_FOR_BUILD)

twofishdata$(EXEEXT_FOR_BUILD): twofishdata.c
	$(CC_FOR_BUILD) `test -f twofishdata.c || echo '$(srcdir)/'`twofishdata.c \
	-o twofishdata$(EXEEXT_FOR_BUILD)

shadata$(EXEEXT_FOR_BUILD): shadata.c
	$(CC_FOR_BUILD) `test -f shadata.c || echo '$(srcdir)/'`shadata.c -lm \
	-o shadata$(EXEEXT_FOR_BUILD)

gcmdata$(EXEEXT_FOR_BUILD): gcmdata.c
	$(CC_FOR_BUILD) `test -f gcmdata.c || echo '$(srcdir)/'`gcmdata.c \
	-o gcmdata$(EXEEXT_FOR_BUILD)

312
eccdata$(EXEEXT_FOR_BUILD): eccdata.c mini-gmp.c mini-gmp.h
313
	$(CC_FOR_BUILD) `test -f eccdata.c || echo '$(srcdir)/'`eccdata.c \
Niels Möller's avatar
Niels Möller committed
314
	-o eccdata$(EXEEXT_FOR_BUILD)
315

Niels Möller's avatar
Niels Möller committed
316 317 318 319
eccparams$(EXEEXT_FOR_BUILD): eccparams.c
	$(CC_FOR_BUILD) `test -f eccparams.c || echo '$(srcdir)/'`eccparams.c \
	-o eccparams$(EXEEXT_FOR_BUILD)

320 321
# desCore rules
# It seems using $(srcdir)/ doesn't work with GNU make 3.79.1
322 323
# des_headers = $(srcdir)/rotors.h $(srcdir)/keymap.h 
des_headers = rotors.h keymap.h 
324 325

# Generate DES headers.
326
$(des_headers): desdata.stamp
327
	f="$(srcdir)/`basename $@`"; \
328
	  ./desdata$(EXEEXT_FOR_BUILD) $(@F) > $${f}T; \
329
	  test -s $${f}T && mv -f $${f}T $$f
330

331 332 333 334
desdata.stamp: desdata.c
	$(MAKE) desdata$(EXEEXT_FOR_BUILD)
	echo stamp > desdata.stamp

Niels Möller's avatar
Niels Möller committed
335
des.$(OBJEXT): des.c des.h $(des_headers)
336

337 338 339 340 341 342 343
# Generate ECC files, with roughly 16 KB of tables per curve.

# Some reasonable choices for 192:
# k =  8, c =  6, S = 256, T =  40 ( 32 A +  8 D) 12 KB
# k = 14, c =  7, S = 256, T =  42 ( 28 A + 14 D) 12 KB
# k = 11, c =  6, S = 192, T =  44 ( 33 A + 11 D)  9 KB
# k = 16, c =  6, S = 128, T =  48 ( 32 A + 16 D)  6 KB
344
ecc-192.h: eccdata.stamp
345 346 347 348 349 350 351
	./eccdata$(EXEEXT_FOR_BUILD) 192 8 6 $(NUMB_BITS) > $@T && mv $@T $@

# Some reasonable choices for 224:
# k = 16, c =  7, S = 256, T =  48 ( 32 A + 16 D) ~16 KB
# k = 10, c =  6, S = 256, T =  50 ( 40 A + 10 D) ~16 KB
# k = 13, c =  6, S = 192, T =  52 ( 39 A + 13 D) ~12 KB
# k =  9, c =  5, S = 160, T =  54 ( 45 A +  9 D) ~10 KB
352
ecc-224.h: eccdata.stamp
353 354 355 356 357 358 359
	./eccdata$(EXEEXT_FOR_BUILD) 224 16 7 $(NUMB_BITS) > $@T && mv $@T $@

# Some reasonable choices for 256:
# k =  9, c =  6, S = 320, T =  54 ( 45 A +  9 D) 20 KB
# k = 11, c =  6, S = 256, T =  55 ( 44 A + 11 D) 16 KB
# k = 19, c =  7, S = 256, T =  57 ( 38 A + 19 D) 16 KB
# k = 15, c =  6, S = 192, T =  60 ( 45 A + 15 D) 12 KB
360
ecc-256.h: eccdata.stamp
361 362 363 364 365 366 367 368 369 370
	./eccdata$(EXEEXT_FOR_BUILD) 256 11 6 $(NUMB_BITS) > $@T && mv $@T $@

# Some reasonable choices for 384:
# k = 16, c =  6, S = 256, T =  80 ( 64 A + 16 D) 24 KB
# k = 28, c =  7, S = 256, T =  84 ( 56 A + 28 D) 24 KB
# k = 11, c =  5, S = 224, T =  88 ( 77 A + 11 D) 21 KB
# k = 22, c =  6, S = 192, T =  88 ( 66 A + 22 D) 18 KB
# k = 13, c =  5, S = 192, T =  91 ( 78 A + 13 D) 18 KB
# k = 16, c =  5, S = 160, T =  96 ( 80 A + 16 D) 15 KB
# k = 32, c =  6, S = 128, T =  96 ( 64 A + 32 D) 12 KB
371
ecc-384.h: eccdata.stamp
372 373 374 375 376 377 378
	./eccdata$(EXEEXT_FOR_BUILD) 384 32 6 $(NUMB_BITS) > $@T && mv $@T $@

# Some reasonable choices for 521:
# k = 29, c =  6, S = 192, T = 116 ( 87 A + 29 D) ~27 KB
# k = 21, c =  5, S = 160, T = 126 (105 A + 21 D) ~23 KB
# k = 44, c =  6, S = 128, T = 132 ( 88 A + 44 D) ~18 KB
# k = 35, c =  5, S =  96, T = 140 (105 A + 35 D) ~14 KB
379
ecc-521.h: eccdata.stamp
380
	./eccdata$(EXEEXT_FOR_BUILD) 521 44 6 $(NUMB_BITS) > $@T && mv $@T $@
381

382
# Parameter choices mostly the same as for ecc-256.h.
383
ecc-25519.h: eccdata.stamp
384
	./eccdata$(EXEEXT_FOR_BUILD) 255 11 6 $(NUMB_BITS) > $@T && mv $@T $@
385

386
eccdata.stamp: eccdata.c
387
	$(MAKE) eccdata$(EXEEXT_FOR_BUILD)
388 389 390 391 392 393 394
	echo stamp > eccdata.stamp

ecc-192.$(OBJEXT): ecc-192.h
ecc-224.$(OBJEXT): ecc-224.h
ecc-256.$(OBJEXT): ecc-256.h
ecc-384.$(OBJEXT): ecc-384.h
ecc-521.$(OBJEXT): ecc-521.h
395
ecc-25519.$(OBJEXT): ecc-25519.h
396

397 398 399 400
.asm.$(OBJEXT): $(srcdir)/asm.m4 machine.m4 config.m4
	$(M4) $(srcdir)/asm.m4 machine.m4 config.m4 $< >$*.s
	$(COMPILE) -c $*.s
	@echo "$@ : $< $(srcdir)/asm.m4 machine.m4 config.m4" >$@.d 
401

402 403
# Texinfo rules
.texinfo.info:
404
	cd $(srcdir) && $(MAKEINFO) --output $@ `basename "$<"`
405 406

.texinfo.html:
407
	cd $(srcdir) && $(MAKEINFO) --html --no-split \
408
	  --output $@T `basename "$<"` \
409
	  && test -s $@T && mv -f $@T $@
410

411
.texinfo.dvi:
Niels Möller's avatar
Niels Möller committed
412
	cd $(srcdir) && texi2dvi -b `basename "$<"`
413 414

.dvi.ps:
415
	cd $(srcdir) && dvips -Ppdf -G0 -o `basename "$<" .dvi`.ps `basename "$<"`
416

417
# Avoid rebuilding .dvi and .ps files when the .texinfo source is unchanged.
418
PS2PDFFLAGS=-dCompatibilityLevel=1.3 -dMAxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
419 420 421
.texinfo.pdf:
	$(MAKE) `basename "$<" .texinfo`.ps
	cd $(srcdir) && ps2pdf $(PS2PDFFLAGS) `basename "$<" .texinfo`.ps
422

423 424
# Configure-related rules, mostly copied from the autoconf manual. No
# $(srcdir) prefixes on the targets, though.
425

426 427
configure: configure.ac aclocal.m4
	cd $(srcdir) && $(AUTOCONF)
428

429 430 431
# autoheader might not change config.h.in, so touch a stamp file.
config.h.in: stamp-h.in
stamp-h.in: configure.ac aclocal.m4
432
	cd $(srcdir) && $(AUTOHEADER)
433
	echo timestamp > $(srcdir)/stamp-h.in
434

435 436
config.status: configure
	./config.status --recheck
437

438 439 440 441
config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status config.h
	echo timestamp > stamp-h
442

443 444
Makefile: Makefile.in config.status
	./config.status $@
445

446 447
config.make: config.make.in config.status
	./config.status $@
448

Niels Möller's avatar
Niels Möller committed
449 450 451
config.m4: config.m4.in config.status
	./config.status $@

452 453 454 455 456 457
nettle.pc: nettle.pc.in config.status
	./config.status $@

hogweed.pc: hogweed.pc.in config.status
	./config.status $@

458 459 460
version.h: version.h.in config.status
	./config.status $@

461
# Installation
Sam Thursfield's avatar
Sam Thursfield committed
462 463
install-doc: @IF_DOCUMENTATION@ install-info
install-here: install-doc install-headers install-static install-pkgconfig \
464
	@IF_SHARED@ install-shared-nettle @IF_HOGWEED@ install-shared-hogweed
465 466

install-static: $(LIBTARGETS)
467
	$(MKDIR_P) $(DESTDIR)$(libdir)
468 469 470 471
	for f in $(LIBTARGETS); do \
	  $(INSTALL_DATA) $$f $(DESTDIR)$(libdir) ; \
	done

472 473 474 475 476
install-dll-nettle:
	$(MKDIR_P) $(DESTDIR)$(bindir)
	$(INSTALL_DATA) $(LIBNETTLE_FORLINK) $(DESTDIR)$(bindir)/$(LIBNETTLE_FORLINK)

install-shared-nettle: $(LIBNETTLE_FORLINK) @IF_DLL@ install-dll-nettle
477
	$(MKDIR_P) $(DESTDIR)$(libdir)
478
	$(INSTALL_DATA) $(LIBNETTLE_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
479 480
	[ -z "$(LIBNETTLE_SONAME)" ] \
                || (cd $(DESTDIR)$(libdir) \
481 482 483
		&& rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_SONAME) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_FORLINK))
484

485 486 487 488 489
install-dll-hogweed:
	$(MKDIR_P) $(DESTDIR)$(bindir)
	$(INSTALL_DATA) $(LIBHOGWEED_FORLINK) $(DESTDIR)$(bindir)/$(LIBHOGWEED_FORLINK)

install-shared-hogweed: $(LIBHOGWEED_FORLINK) @IF_DLL@ install-dll-hogweed
490
	$(MKDIR_P) $(DESTDIR)$(libdir)
491
	$(INSTALL_DATA) $(LIBHOGWEED_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
492
	[ -z "$(LIBHOGWEED_SONAME)" ] \
493
                || (cd $(DESTDIR)$(libdir) \
494 495 496
		&& rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_SONAME) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_FORLINK))
497

498 499 500 501
# I'd like to use makes VPATH search to locate the files to be
# installed. But it seems most make programs don't set $<, $^, $? and
# friends for ordinary explicit rules.

502
install-info: nettle.info
503
	$(MKDIR_P) $(DESTDIR)$(infodir)
504 505 506
	f=nettle.info ; \
	[ -f $$f ] || f="$(srcdir)/$$f" ; \
	$(INSTALL_DATA) "$$f" $(DESTDIR)$(infodir) ; \
507 508
	if (install-info --version && \
	    install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
509
	  install-info --info-dir="$(DESTDIR)$(infodir)" "$$f" ; \
510 511
	else : ; fi

512 513
# NOTE: I'd like to use $^, but that's a GNU extension. $? should be
# more portable, and equivalent for phony targets.
514
install-headers: $(INSTALL_HEADERS)
515
	$(MKDIR_P) $(DESTDIR)$(includedir)/nettle
516 517 518 519 520 521
	for f in $(INSTALL_HEADERS) ; do \
	  if [ -f "$$f" ] ; then \
	    $(INSTALL_DATA) "$$f" $(DESTDIR)$(includedir)/nettle ; \
	  else \
	    $(INSTALL_DATA) "$(srcdir)/$$f" $(DESTDIR)$(includedir)/nettle ; \
	  fi ; done
522

523 524 525 526 527 528
install-pkgconfig: $(PKGCONFIG_FILES)
	$(MKDIR_P) $(DESTDIR)$(pkgconfigdir)
	for f in $(PKGCONFIG_FILES) ; do \
	  $(INSTALL_DATA) "$$f" $(DESTDIR)$(pkgconfigdir) ; \
	done

529
# Uninstall
530
uninstall-here: uninstall-info uninstall-headers uninstall-static \
531
		uninstall-pkgconfig @IF_SHARED@ uninstall-shared
532 533

uninstall-static:
534
	for f in $(LIBTARGETS) ; do \
535 536
	  rm -f $(DESTDIR)$(libdir)/$$f ; \
	done
537 538 539 540 541 542 543 544 545 546 547 548 549 550

uninstall-headers:
	for f in $(INSTALL_HEADERS) ; do \
	  rm -f $(DESTDIR)$(includedir)/nettle/$$f ; \
	done

uninstall-info:
	if (install-info --version && \
	    install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
	  install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)"/nettle.info ; \
	else : ; fi
	-rm -f $(DESTDIR)$(infodir)/nettle.info

# FIXME: Leaves the links around
551 552
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

553 554 555 556
uninstall-dll-nettle:
	rm -f $(DESTDIR)$(bindir)/$(LIBNETTLE_FORLINK)

uninstall-shared-nettle: @IF_DLL@ uninstall-dll-nettle
557 558 559 560
	rm -f $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
	[ -z "$(LIBNETTLE_SONAME)" ] \
		|| rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK)

561 562 563 564
uninstall-dll-hogweed:
	rm -f $(DESTDIR)$(bindir)/$(LIBHOGWEED_FORLINK)

uninstall-shared-hogweed: @IF_DLL@ uninstall-dll-hogweed
565 566 567
	rm -f $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
	[ -z "$(LIBHOGWEED_SONAME)" ] \
		|| rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK)
568

569 570 571 572 573
uninstall-pkgconfig:
	for f in $(PKGCONFIG_FILES) ; do \
	  rm -f $(DESTDIR)$(pkgconfigdir)/$$f ; \
	done

574 575 576 577
# Distribution
distdir = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
top_distdir = $(distdir)

Niels Möller's avatar
Niels Möller committed
578
# NOTE: We should handle both absolute and relative $destdir.
579

580
distdir: $(DISTFILES)
581 582
	rm -rf "$(distdir)"
	mkdir "$(distdir)"
583
	set -e; for f in $(DISTFILES) ; do \
584
	  if [ -f "$$f" ] ; then cp "$$f" "$(distdir)" ; \
585 586 587
	  else cp "$(srcdir)/$$f" "$(distdir)" ; \
	  fi ; \
	done
588 589 590
	set -e; for d in sparc32 sparc64 x86 \
		x86_64 x86_64/aesni x86_64/fat \
		arm arm/neon arm/v6 arm/fat ; do \
591
	  mkdir "$(distdir)/$$d" ; \
Niels Möller's avatar
Niels Möller committed
592 593
	  find "$(srcdir)/$$d" -maxdepth 1 '(' -name '*.asm' -o -name '*.m4' ')' \
	    -exec cp '{}' "$(distdir)/$$d" ';' ; \
594
	done
595
	set -e; for d in $(SUBDIRS); do \
596 597
	  sd="$(distdir)/$$d" ; \
	  mkdir "$$sd" && $(MAKE) -C $$d distdir="`cd $$sd && pwd`" $@ ; \
598 599 600 601 602 603 604 605
	done

dist: distdir
	tar cf - $(distdir) | gzip -c >$(distdir).tar.gz	
	rm -rf $(distdir)

rm_distcheck = test ! -d distcheck-tmp \
	    || { find distcheck-tmp -type d ! -perm -200 -exec chmod u+w {} ';' \
606
                 && rm -fr distcheck-tmp; }; 
607 608 609 610

distcheck: dist
	$(rm_distcheck)
	mkdir distcheck-tmp
611 612
	gzip -d < $(distdir).tar.gz \
	  | { cd distcheck-tmp && tar xf - && chmod -R a-w $(distdir) ; }
613 614
	mkdir distcheck-tmp/build
	mkdir distcheck-tmp/install
615
	cd distcheck-tmp/build && ../$(distdir)/configure --prefix="`cd ../install && pwd`"
616 617 618
	cd distcheck-tmp/build && $(MAKE)
	cd distcheck-tmp/build && $(MAKE) check
	cd distcheck-tmp/build && $(MAKE) install
619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635
	cd distcheck-tmp/build && $(MAKE) uninstall
	cd distcheck-tmp && find install -type f -print > leftover-install-files
	@test `cat distcheck-tmp/leftover-install-files | wc -l` -le 1  \
	  || { echo "ERROR: files left after uninstall:" ; \
	       cat distcheck-tmp/leftover-install-files ; \
	       exit 1; }
	chmod -R a-w distcheck-tmp/install
	mkdir distcheck-tmp/destdir
	destdir="`cd distcheck-tmp/destdir && pwd`" \
	  && cd distcheck-tmp/build \
	  && $(MAKE) install DESTDIR="$$destdir" \
	  && $(MAKE) uninstall DESTDIR="$$destdir"
	cd distcheck-tmp && find destdir -type f -print > leftover-destdir-files
	@test `cat distcheck-tmp/leftover-destdir-files | wc -l` -le 1  \
	  || { echo "ERROR: destdir files left after uninstall:" ; \
	       cat distcheck-tmp/leftover-destdir-files ; \
	       exit 1; }	
636 637
	cd distcheck-tmp/build && $(MAKE) dist
	cd distcheck-tmp/build && rm *.gz
638
	cd distcheck-tmp/build && $(MAKE) distclean
639 640
	cd distcheck-tmp && find build -type f -print > leftover-build-files
	@test `cat distcheck-tmp/leftover-build-files | wc -l` -eq 0  \
641
	  || { echo "ERROR: files left in build directory after distclean:" ; \
642
	       cat distcheck-tmp/leftover-build-files ; \
643 644 645 646
	       exit 1; }
	$(rm_distcheck)

clean-here:
647
	-rm -f $(TARGETS) *.$(OBJEXT) *.s *.so *.dll *.a \
648
		ecc-192.h ecc-224.h ecc-256.h ecc-384.h ecc-521.h ecc-25519.h \
649
		aesdata$(EXEEXT_FOR_BUILD) \
650
		desdata$(EXEEXT_FOR_BUILD) \
651 652 653
		twofishdata$(EXEEXT_FOR_BUILD) \
		shadata$(EXEEXT_FOR_BUILD) \
		gcmdata$(EXEEXT_FOR_BUILD) \
654
		eccdata$(EXEEXT_FOR_BUILD) eccdata.stamp
655
	-rm -rf .lib libnettle.stamp libhogweed.stamp
656

657
distclean-here: clean-here
658
	-rm -f config.h stamp-h config.log config.status machine.m4 \
Niels Möller's avatar
Niels Möller committed
659
	config.make config.m4 Makefile version.h \
660
	nettle.pc hogweed.pc libnettle.map libhogweed.map \
661
	*.asm *.d
662

663 664 665
maintainer-clean-here:
	-rm -f $(DOCTARGETS) *.dvi *.ps

666
tags-here:	
667
	etags -o $(srcdir)/TAGS $(srcdir)/*.c $(srcdir)/*.h
668

669
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d)
670
@DEP_INCLUDE@ $(DEP_FILES)