Makefile.in 21.9 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 110
		 knuth-lfib.c \
		 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
		  rsa-encrypt.c rsa-decrypt.c rsa-decrypt-tr.c \
155
		  rsa-keygen.c rsa-blind.c \
156
		  rsa2sexp.c sexp2rsa.c \
157
		  dsa.c dsa-compat.c dsa-compat-keygen.c dsa-gen-params.c \
158
		  dsa-sign.c dsa-verify.c dsa-keygen.c dsa-hash.c \
159 160
		  dsa-sha1-sign.c dsa-sha1-verify.c \
		  dsa-sha256-sign.c dsa-sha256-verify.c  \
161
		  dsa2sexp.c sexp2dsa.c \
162
		  pgp-encode.c rsa2openpgp.c \
163
		  der-iterator.c der2rsa.c der2dsa.c \
164
		  sec-add-1.c sec-sub-1.c sec-tabselect.c \
Niels Möller's avatar
Niels Möller committed
165
		  gmp-glue.c cnd-copy.c \
166
		  ecc-mod.c ecc-mod-inv.c \
167
		  ecc-mod-arith.c ecc-pp1-redc.c ecc-pm1-redc.c \
Niels Möller's avatar
Niels Möller committed
168
		  ecc-192.c ecc-224.c ecc-256.c ecc-384.c ecc-521.c \
169
		  ecc-25519.c \
Niels Möller's avatar
Niels Möller committed
170 171
		  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
172
		  ecc-eh-to-a.c \
173 174
		  ecc-dup-eh.c ecc-add-eh.c ecc-add-ehh.c \
		  ecc-mul-g-eh.c ecc-mul-a-eh.c \
175
		  ecc-mul-g.c ecc-mul-a.c ecc-hash.c ecc-random.c \
176
		  ecc-point.c ecc-scalar.c ecc-point-mul.c ecc-point-mul-g.c \
177
		  ecc-ecdsa-sign.c ecdsa-sign.c \
178
		  ecc-ecdsa-verify.c ecdsa-verify.c ecdsa-keygen.c \
179
		  curve25519-mul-g.c curve25519-mul.c curve25519-eh-to-x.c \
180
		  eddsa-compress.c eddsa-decompress.c eddsa-expand.c \
181
		  eddsa-hash.c eddsa-pubkey.c eddsa-sign.c eddsa-verify.c \
182
		  ed25519-sha512-pubkey.c \
183 184 185
		  ed25519-sha512-sign.c ed25519-sha512-verify.c

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

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

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

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

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

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

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

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

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

251
.c.$(OBJEXT):
252
	$(COMPILE) -c $< \
253 254
	&& $(DEP_PROCESS)

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

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

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

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

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

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

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

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

361 362 363
ecc-25519.h: eccdata.stamp
	./eccdata$(EXEEXT_FOR_BUILD) 255 14 6 $(GMP_NUMB_BITS) > $@T && mv $@T $@

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

375 376 377 378
.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 
379

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

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

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

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

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

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

404 405
configure: configure.ac aclocal.m4
	cd $(srcdir) && $(AUTOCONF)
406

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

413 414
config.status: configure
	./config.status --recheck
415

416 417 418 419
config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status config.h
	echo timestamp > stamp-h
420

421 422
Makefile: Makefile.in config.status
	./config.status $@
423

424 425
config.make: config.make.in config.status
	./config.status $@
426

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

430 431 432 433 434 435
nettle.pc: nettle.pc.in config.status
	./config.status $@

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

436 437 438
version.h: version.h.in config.status
	./config.status $@

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

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

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

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

476 477 478 479
# 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.

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

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

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

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

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

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
529 530
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

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

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

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

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

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

552 553 554 555
# Distribution
distdir = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
top_distdir = $(distdir)

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

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

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

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

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

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

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

642
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d)
643
@DEP_INCLUDE@ $(DEP_FILES)