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
		  rsa-encrypt.c rsa-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 \
Niels Möller's avatar
Niels Möller committed
196
	  curve25519.h des.h des-compat.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 201 202
	  macros.h \
	  md2.h md4.h \
	  md5.h md5-compat.h \
203
	  memops.h memxor.h \
Niels Möller's avatar
Niels Möller committed
204
	  nettle-meta.h nettle-types.h \
205
	  pbkdf2.h \
Daiki Ueno's avatar
Daiki Ueno committed
206
	  pgp.h pkcs1.h pss.h pss-mgf1.h realloc.h ripemd160.h rsa.h \
207
	  salsa20.h sexp.h \
208
	  serpent.h sha.h sha1.h sha2.h sha3.h twofish.h \
209
	  umac.h yarrow.h poly1305.h
210

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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