Makefile.in 22 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
38
39
TARGETS = aesdata$(EXEEXT_FOR_BUILD) desdata$(EXEEXT_FOR_BUILD) \
          twofishdata$(EXEEXT_FOR_BUILD) shadata$(EXEEXT_FOR_BUILD) \
          gcmdata$(EXEEXT_FOR_BUILD) \
40
	  $(getopt_TARGETS) $(internal_TARGETS) \
41
	  $(LIBTARGETS) $(SHLIBTARGETS)
42

Sam Thursfield's avatar
Sam Thursfield committed
43
DOCTARGETS = @IF_DOCUMENTATION@ nettle.info nettle.html nettle.pdf
44

45
46
47
PKGCONFIG_FILES = nettle.pc @IF_HOGWEED@ hogweed.pc
pkgconfigdir = $(libdir)/pkgconfig

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

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

58
59
60
check-here:
	true

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

66
all-here: $(TARGETS) $(DOCTARGETS)
67

68
69
nettle_SOURCES = aes-decrypt-internal.c aes-decrypt.c \
		 aes-encrypt-internal.c aes-encrypt.c aes-encrypt-table.c \
70
		 aes-invert-internal.c aes-set-key-internal.c \
71
		 aes-set-encrypt-key.c aes-set-decrypt-key.c \
Niels Möller's avatar
Niels Möller committed
72
73
		 aes128-set-encrypt-key.c aes128-set-decrypt-key.c \
		 aes128-meta.c \
Niels Möller's avatar
Niels Möller committed
74
75
		 aes192-set-encrypt-key.c aes192-set-decrypt-key.c \
		 aes192-meta.c \
76
77
		 aes256-set-encrypt-key.c aes256-set-decrypt-key.c \
		 aes256-meta.c \
78
		 arcfour.c arcfour-crypt.c \
Niels Möller's avatar
Niels Möller committed
79
		 arctwo.c arctwo-meta.c blowfish.c \
80
		 base16-encode.c base16-decode.c base16-meta.c \
Niels Möller's avatar
Niels Möller committed
81
		 base64-encode.c base64-decode.c base64-meta.c \
82
		 base64url-encode.c base64url-decode.c base64url-meta.c \
Niels Möller's avatar
Niels Möller committed
83
		 buffer.c buffer-init.c \
Niels Möller's avatar
Niels Möller committed
84
85
86
87
88
89
90
91
92
		 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
93
		 cast128.c cast128-meta.c cbc.c \
Owen Kirby's avatar
Owen Kirby committed
94
		 ccm.c ccm-aes128.c ccm-aes192.c ccm-aes256.c \
95
		 chacha-crypt.c chacha-core-internal.c \
Niels Möller's avatar
Niels Möller committed
96
		 chacha-poly1305.c chacha-poly1305-meta.c \
97
		 chacha-set-key.c chacha-set-nonce.c \
98
99
		 ctr.c des.c des3.c des-compat.c \
		 eax.c eax-aes128.c eax-aes128-meta.c \
100
101
102
103
		 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
104
		 gcm-camellia128.c gcm-camellia128-meta.c \
Niels Möller's avatar
Niels Möller committed
105
		 gcm-camellia256.c gcm-camellia256-meta.c \
Niels Möller's avatar
Niels Möller committed
106
		 gosthash94.c gosthash94-meta.c \
107
		 hmac.c hmac-md5.c hmac-ripemd160.c hmac-sha1.c \
108
		 hmac-sha224.c hmac-sha256.c hmac-sha384.c hmac-sha512.c \
109
		 knuth-lfib.c hkdf.c \
110
		 md2.c md2-meta.c md4.c md4-meta.c \
111
		 md5.c md5-compress.c md5-compat.c md5-meta.c \
112
		 memeql-sec.c memxor.c memxor3.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
		 yarrow256.c yarrow_key_event.c
139

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

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

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

207
INSTALL_HEADERS = $(HEADERS) nettle-stdint.h version.h @IF_MINI_GMP@ mini-gmp.h
208

209
210
SOURCES = $(nettle_SOURCES) $(hogweed_SOURCES) \
	  $(getopt_SOURCES) $(internal_SOURCES) \
211
	  $(OPT_SOURCES) \
212
	  aesdata.c desdata.c twofishdata.c shadata.c gcmdata.c eccdata.c
213

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

234
# Rules building static libraries
235
236
nettle_OBJS = $(nettle_SOURCES:.c=.$(OBJEXT)) \
	      $(OPT_NETTLE_SOURCES:.c=.$(OBJEXT)) $(OPT_NETTLE_OBJS)
237

238
239
hogweed_OBJS = $(hogweed_SOURCES:.c=.$(OBJEXT)) \
	       $(OPT_HOGWEED_OBJS) @IF_MINI_GMP@ mini-gmp.$(OBJEXT)
240

241
libnettle.a: $(nettle_OBJS)
242
	-rm -f $@
243
	$(AR) $(ARFLAGS) $@ $(nettle_OBJS)
244
	$(RANLIB) $@
245
	echo nettle > libnettle.stamp
246

247
248
249
250
libhogweed.a: $(hogweed_OBJS)
	-rm -f $@
	$(AR) $(ARFLAGS) $@ $(hogweed_OBJS)
	$(RANLIB) $@
251
	echo hogweed > libhogweed.stamp
252

253
.c.$(OBJEXT):
254
	$(COMPILE) -c $< \
255
256
	&& $(DEP_PROCESS)

257
# Rules building shared libraries.
258
$(LIBNETTLE_FORLINK): $(nettle_OBJS)
259
	$(LIBNETTLE_LINK) $(nettle_OBJS) @EXTRA_LINKER_FLAGS@ -o $@ $(LIBNETTLE_LIBS)
260
	-mkdir .lib 2>/dev/null
261
262
263
	(cd .lib \
          && rm -f $(LIBNETTLE_FORLINK) \
	  && $(LN_S) ../$(LIBNETTLE_FORLINK) $(LIBNETTLE_FORLINK) \
264
	  && [ -z "$(LIBNETTLE_SONAME)" ] \
265
266
	  || { rm -f $(LIBNETTLE_SONAME) \
	       && $(LN_S) $(LIBNETTLE_FORLINK) $(LIBNETTLE_SONAME) ; } )
267
	echo nettle > libnettle.stamp
268

269
$(LIBHOGWEED_FORLINK): $(hogweed_OBJS) $(LIBNETTLE_FORLINK)
270
	$(LIBHOGWEED_LINK) $(hogweed_OBJS) @EXTRA_HOGWEED_LINKER_FLAGS@ -o $@ $(LIBHOGWEED_LIBS)
271
	-mkdir .lib 2>/dev/null
272
273
274
	(cd .lib \
          && rm -f $(LIBHOGWEED_FORLINK) \
	  && $(LN_S) ../$(LIBHOGWEED_FORLINK) $(LIBHOGWEED_FORLINK) \
275
	  && [ -z "$(LIBHOGWEED_SONAME)" ] \
276
277
	  || { rm -f $(LIBHOGWEED_SONAME) \
	       && $(LN_S) $(LIBHOGWEED_FORLINK) $(LIBHOGWEED_SONAME) ; } )
278
	echo hogweed > libhogweed.stamp
279

Niels Möller's avatar
Niels Möller committed
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
# 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)

303
eccdata$(EXEEXT_FOR_BUILD): eccdata.c mini-gmp.c mini-gmp.h
304
	$(CC_FOR_BUILD) `test -f eccdata.c || echo '$(srcdir)/'`eccdata.c \
Niels Möller's avatar
Niels Möller committed
305
	-o eccdata$(EXEEXT_FOR_BUILD)
306

307
308
# desCore rules
# It seems using $(srcdir)/ doesn't work with GNU make 3.79.1
309
310
# des_headers = $(srcdir)/rotors.h $(srcdir)/keymap.h 
des_headers = rotors.h keymap.h 
311
312
313

# Generate DES headers.
$(des_headers): desdata.c
314
	$(MAKE) desdata$(EXEEXT_FOR_BUILD)
315
	f="$(srcdir)/`basename $@`"; \
316
	  ./desdata$(EXEEXT_FOR_BUILD) $(@F) > $${f}T; \
317
	  test -s $${f}T && mv -f $${f}T $$f
318

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

321
322
323
324
325
326
327
328
# Generate ECC files.
# Some possible choices for 192:
#	k = 15, c = 4,  64 entries,  ~3 KB
#	k = 20, c = 6, 128 entries,  ~6 KB
#	k = 10, c = 6, 256 entries, ~12 KB
#	k =  7, c = 6, 320 entries, ~15 KB
#	k =  9, c = 7, 512 entries, ~24 KB
ecc-192.h: eccdata.stamp
329
	./eccdata$(EXEEXT_FOR_BUILD) 192 7 6 $(NUMB_BITS) > $@T && mv $@T $@
330
331
332
333
334
335
336
# Some possible choices for 224:
#	k = 18, c = 4,  64 entries,  ~4 KB
#	k = 24, c = 6, 128 entries,  ~8 KB
#	k = 12, c = 6, 256 entries, ~16 KB
#	k =  8, c = 6, 320 entries, ~20 KB
#	k = 10, c = 7, 512 entries, ~32 KB
ecc-224.h: eccdata.stamp
337
	./eccdata$(EXEEXT_FOR_BUILD) 224 12 6 $(NUMB_BITS) > $@T && mv $@T $@
338
339
340
341
342
343
344
# Some possible choices for 256:
#	k = 20, c = 4,  64 entries,  ~4 KB
#	k = 27, c = 6, 128 entries,  ~8 KB
#	k = 14, c = 6, 256 entries, ~16 KB
#	k =  9, c = 6, 320 entries, ~20 KB
#	k = 12, c = 7, 512 entries, ~32 KB
ecc-256.h: eccdata.stamp
345
	./eccdata$(EXEEXT_FOR_BUILD) 256 14 6 $(NUMB_BITS) > $@T && mv $@T $@
346
347
348
349
350
351
352
# Some possible choices for 384:
#	k = 31, c = 4,  64 entries,  ~6 KB
#	k = 41, c = 6, 128 entries, ~12 KB
#	k = 20, c = 6, 256 entries, ~24 KB
#	k = 14, c = 6, 320 entries, ~30 KB
#	k = 18, c = 7, 512 entries, ~48 KB
ecc-384.h: eccdata.stamp
353
	./eccdata$(EXEEXT_FOR_BUILD) 384 41 6 $(NUMB_BITS) > $@T && mv $@T $@
354
355
356
357
358
359
360
# Some possible choices for 521:
#	k = 42, c = 4,  64 entries,  ~9 KB
#	k = 56, c = 6, 128 entries, ~18 KB
#	k = 28, c = 6, 256 entries, ~35 KB
#	k = 19, c = 6, 320 entries, ~44 KB
#	k = 24, c = 7, 512 entries, ~70 KB
ecc-521.h: eccdata.stamp
361
	./eccdata$(EXEEXT_FOR_BUILD) 521 56 6 $(NUMB_BITS) > $@T && mv $@T $@
362

363
ecc-25519.h: eccdata.stamp
364
	./eccdata$(EXEEXT_FOR_BUILD) 255 14 6 $(NUMB_BITS) > $@T && mv $@T $@
365

366
eccdata.stamp: eccdata.c
367
	$(MAKE) eccdata$(EXEEXT_FOR_BUILD)
368
369
370
371
372
373
374
	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
375
ecc-25519.$(OBJEXT): ecc-25519.h
376

377
378
379
380
.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 
381

382
383
# Texinfo rules
.texinfo.info:
384
	cd $(srcdir) && $(MAKEINFO) --output $@ `basename "$<"`
385
386

.texinfo.html:
387
	cd $(srcdir) && $(MAKEINFO) --html --no-split \
388
	  --output $@T `basename "$<"` \
389
	  && test -s $@T && mv -f $@T $@
390

391
.texinfo.dvi:
Niels Möller's avatar
Niels Möller committed
392
	cd $(srcdir) && texi2dvi -b `basename "$<"`
393
394

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

397
# Avoid rebuilding .dvi and .ps files when the .texinfo source is unchanged.
398
PS2PDFFLAGS=-dCompatibilityLevel=1.3 -dMAxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
399
400
401
.texinfo.pdf:
	$(MAKE) `basename "$<" .texinfo`.ps
	cd $(srcdir) && ps2pdf $(PS2PDFFLAGS) `basename "$<" .texinfo`.ps
402

403
404
# Configure-related rules, mostly copied from the autoconf manual. No
# $(srcdir) prefixes on the targets, though.
405

406
407
configure: configure.ac aclocal.m4
	cd $(srcdir) && $(AUTOCONF)
408

409
410
411
# 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
412
	cd $(srcdir) && $(AUTOHEADER)
413
	echo timestamp > $(srcdir)/stamp-h.in
414

415
416
config.status: configure
	./config.status --recheck
417

418
419
420
421
config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status config.h
	echo timestamp > stamp-h
422

423
424
Makefile: Makefile.in config.status
	./config.status $@
425

426
427
config.make: config.make.in config.status
	./config.status $@
428

Niels Möller's avatar
Niels Möller committed
429
430
431
config.m4: config.m4.in config.status
	./config.status $@

432
433
434
435
436
437
nettle.pc: nettle.pc.in config.status
	./config.status $@

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

438
439
440
version.h: version.h.in config.status
	./config.status $@

441
# Installation
Sam Thursfield's avatar
Sam Thursfield committed
442
443
install-doc: @IF_DOCUMENTATION@ install-info
install-here: install-doc install-headers install-static install-pkgconfig \
444
	@IF_SHARED@ install-shared-nettle @IF_HOGWEED@ install-shared-hogweed
445
446

install-static: $(LIBTARGETS)
447
	$(MKDIR_P) $(DESTDIR)$(libdir)
448
449
450
451
	for f in $(LIBTARGETS); do \
	  $(INSTALL_DATA) $$f $(DESTDIR)$(libdir) ; \
	done

452
453
454
455
456
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
457
	$(MKDIR_P) $(DESTDIR)$(libdir)
458
	$(INSTALL_DATA) $(LIBNETTLE_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
459
460
	[ -z "$(LIBNETTLE_SONAME)" ] \
                || (cd $(DESTDIR)$(libdir) \
461
462
463
		&& rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_SONAME) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_FORLINK))
464

465
466
467
468
469
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
470
	$(MKDIR_P) $(DESTDIR)$(libdir)
471
	$(INSTALL_DATA) $(LIBHOGWEED_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
472
	[ -z "$(LIBHOGWEED_SONAME)" ] \
473
                || (cd $(DESTDIR)$(libdir) \
474
475
476
		&& rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_SONAME) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_FORLINK))
477

478
479
480
481
# 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.

482
install-info: nettle.info
483
	$(MKDIR_P) $(DESTDIR)$(infodir)
484
485
486
	f=nettle.info ; \
	[ -f $$f ] || f="$(srcdir)/$$f" ; \
	$(INSTALL_DATA) "$$f" $(DESTDIR)$(infodir) ; \
487
488
	if (install-info --version && \
	    install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
489
	  install-info --info-dir="$(DESTDIR)$(infodir)" "$$f" ; \
490
491
	else : ; fi

492
493
# NOTE: I'd like to use $^, but that's a GNU extension. $? should be
# more portable, and equivalent for phony targets.
494
install-headers: $(INSTALL_HEADERS)
495
	$(MKDIR_P) $(DESTDIR)$(includedir)/nettle
496
497
498
499
500
501
	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
502

503
504
505
506
507
508
install-pkgconfig: $(PKGCONFIG_FILES)
	$(MKDIR_P) $(DESTDIR)$(pkgconfigdir)
	for f in $(PKGCONFIG_FILES) ; do \
	  $(INSTALL_DATA) "$$f" $(DESTDIR)$(pkgconfigdir) ; \
	done

509
# Uninstall
510
uninstall-here: uninstall-info uninstall-headers uninstall-static \
511
		uninstall-pkgconfig @IF_SHARED@ uninstall-shared
512
513

uninstall-static:
514
	for f in $(LIBTARGETS) ; do \
515
516
	  rm -f $(DESTDIR)$(libdir)/$$f ; \
	done
517
518
519
520
521
522
523
524
525
526
527
528
529
530

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
531
532
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

533
534
535
536
uninstall-dll-nettle:
	rm -f $(DESTDIR)$(bindir)/$(LIBNETTLE_FORLINK)

uninstall-shared-nettle: @IF_DLL@ uninstall-dll-nettle
537
538
539
540
	rm -f $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
	[ -z "$(LIBNETTLE_SONAME)" ] \
		|| rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK)

541
542
543
544
uninstall-dll-hogweed:
	rm -f $(DESTDIR)$(bindir)/$(LIBHOGWEED_FORLINK)

uninstall-shared-hogweed: @IF_DLL@ uninstall-dll-hogweed
545
546
547
	rm -f $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
	[ -z "$(LIBHOGWEED_SONAME)" ] \
		|| rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK)
548

549
550
551
552
553
uninstall-pkgconfig:
	for f in $(PKGCONFIG_FILES) ; do \
	  rm -f $(DESTDIR)$(pkgconfigdir)/$$f ; \
	done

554
555
556
557
# Distribution
distdir = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
top_distdir = $(distdir)

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

560
distdir: $(DISTFILES)
561
562
	rm -rf "$(distdir)"
	mkdir "$(distdir)"
563
	set -e; for f in $(DISTFILES) ; do \
564
	  if [ -f "$$f" ] ; then cp "$$f" "$(distdir)" ; \
565
566
567
	  else cp "$(srcdir)/$$f" "$(distdir)" ; \
	  fi ; \
	done
568
569
570
	set -e; for d in sparc32 sparc64 x86 \
		x86_64 x86_64/aesni x86_64/fat \
		arm arm/neon arm/v6 arm/fat ; do \
571
	  mkdir "$(distdir)/$$d" ; \
Niels Möller's avatar
Niels Möller committed
572
573
	  find "$(srcdir)/$$d" -maxdepth 1 '(' -name '*.asm' -o -name '*.m4' ')' \
	    -exec cp '{}' "$(distdir)/$$d" ';' ; \
574
	done
575
	set -e; for d in $(SUBDIRS); do \
576
577
	  sd="$(distdir)/$$d" ; \
	  mkdir "$$sd" && $(MAKE) -C $$d distdir="`cd $$sd && pwd`" $@ ; \
578
579
580
581
582
583
584
585
	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 {} ';' \
586
                 && rm -fr distcheck-tmp; }; 
587
588
589
590

distcheck: dist
	$(rm_distcheck)
	mkdir distcheck-tmp
591
592
	gzip -d < $(distdir).tar.gz \
	  | { cd distcheck-tmp && tar xf - && chmod -R a-w $(distdir) ; }
593
594
	mkdir distcheck-tmp/build
	mkdir distcheck-tmp/install
595
	cd distcheck-tmp/build && ../$(distdir)/configure --prefix="`cd ../install && pwd`"
596
597
598
	cd distcheck-tmp/build && $(MAKE)
	cd distcheck-tmp/build && $(MAKE) check
	cd distcheck-tmp/build && $(MAKE) install
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
	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; }	
616
617
	cd distcheck-tmp/build && $(MAKE) dist
	cd distcheck-tmp/build && rm *.gz
618
	cd distcheck-tmp/build && $(MAKE) distclean
619
620
	cd distcheck-tmp && find build -type f -print > leftover-build-files
	@test `cat distcheck-tmp/leftover-build-files | wc -l` -eq 0  \
621
	  || { echo "ERROR: files left in build directory after distclean:" ; \
622
	       cat distcheck-tmp/leftover-build-files ; \
623
624
625
626
	       exit 1; }
	$(rm_distcheck)

clean-here:
627
	-rm -f $(TARGETS) *.$(OBJEXT) *.s *.so *.dll *.a \
628
		ecc-192.h ecc-224.h ecc-256.h ecc-384.h ecc-521.h ecc-25519.h \
629
		eccdata$(EXEEXT_FOR_BUILD) eccdata.stamp
630
	-rm -rf .lib libnettle.stamp libhogweed.stamp
631

632
distclean-here: clean-here
633
	-rm -f config.h stamp-h config.log config.status machine.m4 \
634
	config.make config.m4 Makefile nettle-stdint.h version.h \
635
	nettle.pc hogweed.pc libnettle.map libhogweed.map \
636
	*.asm *.d
637

638
639
640
maintainer-clean-here:
	-rm -f $(DOCTARGETS) *.dvi *.ps

641
tags-here:	
642
	etags -o $(srcdir)/TAGS $(srcdir)/*.c $(srcdir)/*.h
643

644
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d)
645
@DEP_INCLUDE@ $(DEP_FILES)