Makefile.in 22.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
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 \
Dmitry Baryshkov's avatar
Dmitry Baryshkov committed
94
		 ccm.c ccm-aes128.c ccm-aes192.c ccm-aes256.c cfb.c \
95
		 cnd-memcpy.c \
96
		 chacha-crypt.c chacha-core-internal.c \
Niels Möller's avatar
Niels Möller committed
97
		 chacha-poly1305.c chacha-poly1305-meta.c \
98
		 chacha-set-key.c chacha-set-nonce.c \
99
100
		 ctr.c des.c des3.c des-compat.c \
		 eax.c eax-aes128.c eax-aes128-meta.c \
101
102
103
104
		 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
105
		 gcm-camellia128.c gcm-camellia128-meta.c \
Niels Möller's avatar
Niels Möller committed
106
		 gcm-camellia256.c gcm-camellia256-meta.c \
Niels Möller's avatar
Niels Möller committed
107
		 gosthash94.c gosthash94-meta.c \
108
		 hmac.c hmac-md5.c hmac-ripemd160.c hmac-sha1.c \
109
		 hmac-sha224.c hmac-sha256.c hmac-sha384.c hmac-sha512.c \
110
		 knuth-lfib.c hkdf.c \
111
		 md2.c md2-meta.c md4.c md4-meta.c \
112
		 md5.c md5-compress.c md5-compat.c md5-meta.c \
113
		 memeql-sec.c memxor.c memxor3.c \
114
		 nettle-lookup-hash.c \
115
116
		 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
117
118
119
		 pbkdf2.c pbkdf2-hmac-sha1.c pbkdf2-hmac-sha256.c \
		 poly1305-aes.c poly1305-internal.c \
		 realloc.c \
120
		 ripemd160.c ripemd160-compress.c ripemd160-meta.c \
121
		 salsa20-core-internal.c \
122
		 salsa20-crypt.c salsa20r12-crypt.c salsa20-set-key.c \
123
124
		 salsa20-set-nonce.c \
		 salsa20-128-set-key.c salsa20-256-set-key.c \
125
126
		 sha1.c sha1-compress.c sha1-meta.c \
		 sha256.c sha256-compress.c sha224-meta.c sha256-meta.c \
127
		 sha512.c sha512-compress.c sha384-meta.c sha512-meta.c \
128
		 sha512-224-meta.c sha512-256-meta.c \
129
130
131
		 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\
132
133
		 serpent-set-key.c serpent-encrypt.c serpent-decrypt.c \
		 serpent-meta.c \
134
		 twofish.c twofish-meta.c \
Niels Möller's avatar
Niels Möller committed
135
136
137
		 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 \
138
		 version.c \
Niels Möller's avatar
Niels Möller committed
139
		 write-be32.c write-le32.c write-le64.c \
140
		 yarrow256.c yarrow_key_event.c
141

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

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

194
HEADERS = aes.h arcfour.h arctwo.h asn1.h blowfish.h \
195
	  base16.h base64.h bignum.h buffer.h camellia.h cast128.h \
Dmitry Baryshkov's avatar
Dmitry Baryshkov committed
196
	  cbc.h ccm.h cfb.h chacha.h chacha-poly1305.h ctr.h \
Niels Möller's avatar
Niels Möller committed
197
	  curve25519.h des.h des-compat.h dsa.h dsa-compat.h eax.h \
198
	  ecc-curve.h ecc.h ecdsa.h eddsa.h \
Niels Möller's avatar
Niels Möller committed
199
	  gcm.h gosthash94.h hmac.h \
200
	  knuth-lfib.h hkdf.h \
201
202
203
	  macros.h \
	  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 poly1305.h
211

212
INSTALL_HEADERS = $(HEADERS) nettle-stdint.h 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 TODO ChangeLog \
230
	nettle.pc.in hogweed.pc.in \
Niels Möller's avatar
Niels Möller committed
231
	$(des_headers) descore.README \
232
233
	aes-internal.h camellia-internal.h serpent-internal.h \
	cast128_sboxes.h desinfo.h desCode.h \
234
	memxor-internal.h nettle-internal.h nettle-write.h \
235
	gmp-glue.h ecc-internal.h fat-setup.h \
236
	mini-gmp.h asm.m4 \
237
	nettle.texinfo nettle.info nettle.html nettle.pdf sha-example.c
238

239
# Rules building static libraries
240
241
nettle_OBJS = $(nettle_SOURCES:.c=.$(OBJEXT)) \
	      $(OPT_NETTLE_SOURCES:.c=.$(OBJEXT)) $(OPT_NETTLE_OBJS)
242

243
244
hogweed_OBJS = $(hogweed_SOURCES:.c=.$(OBJEXT)) \
	       $(OPT_HOGWEED_OBJS) @IF_MINI_GMP@ mini-gmp.$(OBJEXT)
245

246
libnettle.a: $(nettle_OBJS)
247
	-rm -f $@
248
	$(AR) $(ARFLAGS) $@ $(nettle_OBJS)
249
	$(RANLIB) $@
250
	echo nettle > libnettle.stamp
251

252
253
254
255
libhogweed.a: $(hogweed_OBJS)
	-rm -f $@
	$(AR) $(ARFLAGS) $@ $(hogweed_OBJS)
	$(RANLIB) $@
256
	echo hogweed > libhogweed.stamp
257

258
.c.$(OBJEXT):
259
	$(COMPILE) -c $< \
260
261
	&& $(DEP_PROCESS)

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

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

Niels Möller's avatar
Niels Möller committed
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
# 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)

308
eccdata$(EXEEXT_FOR_BUILD): eccdata.c mini-gmp.c mini-gmp.h
309
	$(CC_FOR_BUILD) `test -f eccdata.c || echo '$(srcdir)/'`eccdata.c \
Niels Möller's avatar
Niels Möller committed
310
	-o eccdata$(EXEEXT_FOR_BUILD)
311

312
313
# desCore rules
# It seems using $(srcdir)/ doesn't work with GNU make 3.79.1
314
315
# des_headers = $(srcdir)/rotors.h $(srcdir)/keymap.h 
des_headers = rotors.h keymap.h 
316
317
318

# Generate DES headers.
$(des_headers): desdata.c
319
	$(MAKE) desdata$(EXEEXT_FOR_BUILD)
320
	f="$(srcdir)/`basename $@`"; \
321
	  ./desdata$(EXEEXT_FOR_BUILD) $(@F) > $${f}T; \
322
	  test -s $${f}T && mv -f $${f}T $$f
323

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

326
327
328
329
330
331
332
333
# 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
334
	./eccdata$(EXEEXT_FOR_BUILD) 192 7 6 $(NUMB_BITS) > $@T && mv $@T $@
335
336
337
338
339
340
341
# 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
342
	./eccdata$(EXEEXT_FOR_BUILD) 224 12 6 $(NUMB_BITS) > $@T && mv $@T $@
343
344
345
346
347
348
349
# 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
350
	./eccdata$(EXEEXT_FOR_BUILD) 256 14 6 $(NUMB_BITS) > $@T && mv $@T $@
351
352
353
354
355
356
357
# 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
358
	./eccdata$(EXEEXT_FOR_BUILD) 384 41 6 $(NUMB_BITS) > $@T && mv $@T $@
359
360
361
362
363
364
365
# 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
366
	./eccdata$(EXEEXT_FOR_BUILD) 521 56 6 $(NUMB_BITS) > $@T && mv $@T $@
367

368
ecc-25519.h: eccdata.stamp
369
	./eccdata$(EXEEXT_FOR_BUILD) 255 14 6 $(NUMB_BITS) > $@T && mv $@T $@
370

371
eccdata.stamp: eccdata.c
372
	$(MAKE) eccdata$(EXEEXT_FOR_BUILD)
373
374
375
376
377
378
379
	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
380
ecc-25519.$(OBJEXT): ecc-25519.h
381

382
383
384
385
.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 
386

387
388
# Texinfo rules
.texinfo.info:
389
	cd $(srcdir) && $(MAKEINFO) --output $@ `basename "$<"`
390
391

.texinfo.html:
392
	cd $(srcdir) && $(MAKEINFO) --html --no-split \
393
	  --output $@T `basename "$<"` \
394
	  && test -s $@T && mv -f $@T $@
395

396
.texinfo.dvi:
Niels Möller's avatar
Niels Möller committed
397
	cd $(srcdir) && texi2dvi -b `basename "$<"`
398
399

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

402
# Avoid rebuilding .dvi and .ps files when the .texinfo source is unchanged.
403
PS2PDFFLAGS=-dCompatibilityLevel=1.3 -dMAxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
404
405
406
.texinfo.pdf:
	$(MAKE) `basename "$<" .texinfo`.ps
	cd $(srcdir) && ps2pdf $(PS2PDFFLAGS) `basename "$<" .texinfo`.ps
407

408
409
# Configure-related rules, mostly copied from the autoconf manual. No
# $(srcdir) prefixes on the targets, though.
410

411
412
configure: configure.ac aclocal.m4
	cd $(srcdir) && $(AUTOCONF)
413

414
415
416
# 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
417
	cd $(srcdir) && $(AUTOHEADER)
418
	echo timestamp > $(srcdir)/stamp-h.in
419

420
421
config.status: configure
	./config.status --recheck
422

423
424
425
426
config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status config.h
	echo timestamp > stamp-h
427

428
429
Makefile: Makefile.in config.status
	./config.status $@
430

431
432
config.make: config.make.in config.status
	./config.status $@
433

Niels Möller's avatar
Niels Möller committed
434
435
436
config.m4: config.m4.in config.status
	./config.status $@

437
438
439
440
441
442
nettle.pc: nettle.pc.in config.status
	./config.status $@

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

443
444
445
version.h: version.h.in config.status
	./config.status $@

446
# Installation
Sam Thursfield's avatar
Sam Thursfield committed
447
448
install-doc: @IF_DOCUMENTATION@ install-info
install-here: install-doc install-headers install-static install-pkgconfig \
449
	@IF_SHARED@ install-shared-nettle @IF_HOGWEED@ install-shared-hogweed
450
451

install-static: $(LIBTARGETS)
452
	$(MKDIR_P) $(DESTDIR)$(libdir)
453
454
455
456
	for f in $(LIBTARGETS); do \
	  $(INSTALL_DATA) $$f $(DESTDIR)$(libdir) ; \
	done

457
458
459
460
461
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
462
	$(MKDIR_P) $(DESTDIR)$(libdir)
463
	$(INSTALL_DATA) $(LIBNETTLE_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
464
465
	[ -z "$(LIBNETTLE_SONAME)" ] \
                || (cd $(DESTDIR)$(libdir) \
466
467
468
		&& rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_SONAME) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_FORLINK))
469

470
471
472
473
474
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
475
	$(MKDIR_P) $(DESTDIR)$(libdir)
476
	$(INSTALL_DATA) $(LIBHOGWEED_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
477
	[ -z "$(LIBHOGWEED_SONAME)" ] \
478
                || (cd $(DESTDIR)$(libdir) \
479
480
481
		&& rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_SONAME) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_FORLINK))
482

483
484
485
486
# 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.

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

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

508
509
510
511
512
513
install-pkgconfig: $(PKGCONFIG_FILES)
	$(MKDIR_P) $(DESTDIR)$(pkgconfigdir)
	for f in $(PKGCONFIG_FILES) ; do \
	  $(INSTALL_DATA) "$$f" $(DESTDIR)$(pkgconfigdir) ; \
	done

514
# Uninstall
515
uninstall-here: uninstall-info uninstall-headers uninstall-static \
516
		uninstall-pkgconfig @IF_SHARED@ uninstall-shared
517
518

uninstall-static:
519
	for f in $(LIBTARGETS) ; do \
520
521
	  rm -f $(DESTDIR)$(libdir)/$$f ; \
	done
522
523
524
525
526
527
528
529
530
531
532
533
534
535

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
536
537
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

538
539
540
541
uninstall-dll-nettle:
	rm -f $(DESTDIR)$(bindir)/$(LIBNETTLE_FORLINK)

uninstall-shared-nettle: @IF_DLL@ uninstall-dll-nettle
542
543
544
545
	rm -f $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
	[ -z "$(LIBNETTLE_SONAME)" ] \
		|| rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK)

546
547
548
549
uninstall-dll-hogweed:
	rm -f $(DESTDIR)$(bindir)/$(LIBHOGWEED_FORLINK)

uninstall-shared-hogweed: @IF_DLL@ uninstall-dll-hogweed
550
551
552
	rm -f $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
	[ -z "$(LIBHOGWEED_SONAME)" ] \
		|| rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK)
553

554
555
556
557
558
uninstall-pkgconfig:
	for f in $(PKGCONFIG_FILES) ; do \
	  rm -f $(DESTDIR)$(pkgconfigdir)/$$f ; \
	done

559
560
561
562
# Distribution
distdir = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
top_distdir = $(distdir)

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

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

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

clean-here:
632
	-rm -f $(TARGETS) *.$(OBJEXT) *.s *.so *.dll *.a \
633
		ecc-192.h ecc-224.h ecc-256.h ecc-384.h ecc-521.h ecc-25519.h \
634
		eccdata$(EXEEXT_FOR_BUILD) eccdata.stamp
635
	-rm -rf .lib libnettle.stamp libhogweed.stamp
636

637
distclean-here: clean-here
638
	-rm -f config.h stamp-h config.log config.status machine.m4 \
639
	config.make config.m4 Makefile nettle-stdint.h version.h \
640
	nettle.pc hogweed.pc libnettle.map libhogweed.map \
641
	*.asm *.d
642

643
644
645
maintainer-clean-here:
	-rm -f $(DOCTARGETS) *.dvi *.ps

646
tags-here:	
647
	etags -o $(srcdir)/TAGS $(srcdir)/*.c $(srcdir)/*.h
648

649
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d)
650
@DEP_INCLUDE@ $(DEP_FILES)