Makefile.in 18.8 KB
Newer Older
1
2
3
4
5
6
7
8
9
# Nettle Makefile

@SET_MAKE@

srcdir = @srcdir@
VPATH = @srcdir@

LIBOBJS = @LIBOBJS@

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

17
18
19
20
SUBDIRS = tools testsuite examples

include config.make

21
PRE_CPPFLAGS = -I.
22
# FIXME: Add configuration of LIBEXT?
23
24
LIBTARGETS = @IF_STATIC@ libnettle.a @IF_HOGWEED@ libhogweed.a
SHLIBTARGETS = @IF_SHARED@ $(LIBNETTLE_FORLINK) @IF_HOGWEED@ $(LIBHOGWEED_FORLINK)
25

26
27
28
getopt_SOURCES = getopt.c getopt1.c
getopt_TARGETS = $(getopt_SOURCES:.c=.$(OBJEXT))

29
30
31
internal_SOURCES = nettle-internal.c
internal_TARGETS = $(internal_SOURCES:.c=.$(OBJEXT))

32
TARGETS = aesdata$(EXEEXT) desdata$(EXEEXT) twofishdata$(EXEEXT) \
33
	  shadata$(EXEEXT) gcmdata$(EXEEXT) eccdata$(EXEEXT) \
34
	  $(getopt_TARGETS) $(internal_TARGETS) \
35
	  $(LIBTARGETS) $(SHLIBTARGETS)
36
IMPLICIT_TARGETS = @IF_DLL@ $(LIBNETTLE_FILE) $(LIBHOGWEED_FILE)
37

Sam Thursfield's avatar
Sam Thursfield committed
38
DOCTARGETS = @IF_DOCUMENTATION@ nettle.info nettle.html nettle.pdf
39

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

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

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

53
54
55
check-here:
	true

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

61
all-here: $(TARGETS) $(DOCTARGETS)
62

63
64
nettle_SOURCES = aes-decrypt-internal.c aes-decrypt.c \
		 aes-encrypt-internal.c aes-encrypt.c aes-encrypt-table.c \
65
66
		 aes-set-encrypt-key.c aes-set-decrypt-key.c aes-meta.c \
		 arcfour.c arcfour-crypt.c arcfour-meta.c \
67
		 arctwo.c arctwo-meta.c gosthash94-meta.c \
68
69
		 base16-encode.c base16-decode.c base16-meta.c \
                 base64-encode.c base64-decode.c base64-meta.c \
70
71
72
73
		 camellia-crypt.c camellia-crypt-internal.c \
		 camellia-set-encrypt-key.c camellia-set-decrypt-key.c \
		 camellia-table.c camellia-meta.c \
		 cast128.c cast128-meta.c \
74
		 blowfish.c \
75
		 cbc.c ctr.c gcm.c gcm-aes.c \
76
77
		 des.c \
		 des3.c des-compat.c \
78
		 hmac.c hmac-md5.c hmac-ripemd160.c hmac-sha1.c \
79
		 hmac-sha224.c hmac-sha256.c hmac-sha384.c hmac-sha512.c \
80
		 pbkdf2.c pbkdf2-hmac-sha1.c pbkdf2-hmac-sha256.c \
81
82
		 knuth-lfib.c \
		 md2.c md2-meta.c md4.c md4-meta.c \
83
		 md5.c md5-compress.c md5-compat.c md5-meta.c \
84
		 gosthash94.c \
85
		 ripemd160.c ripemd160-compress.c ripemd160-meta.c \
86
		 salsa20-core-internal.c \
87
		 salsa20-crypt.c salsa20-set-key.c \
88
89
		 sha1.c sha1-compress.c sha1-meta.c \
		 sha256.c sha256-compress.c sha224-meta.c sha256-meta.c \
90
		 sha512.c sha512-compress.c sha384-meta.c sha512-meta.c \
91
92
93
		 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\
94
95
		 serpent-set-key.c serpent-encrypt.c serpent-decrypt.c \
		 serpent-meta.c \
96
97
98
		 twofish.c twofish-meta.c \
		 yarrow256.c yarrow_key_event.c \
		 buffer.c buffer-init.c realloc.c \
99
100
		 nettle-meta-hashes.c nettle-meta-ciphers.c \
		 nettle-meta-armors.c \
101
		 write-be32.c write-le32.c write-le64.c
102

103
104
hogweed_SOURCES = sexp.c sexp-format.c \
		  sexp-transport.c sexp-transport-format.c \
105
106
107
		  bignum.c bignum-next-prime.c \
		  bignum-random.c bignum-random-prime.c \
		  sexp2bignum.c \
108
		  pkcs1.c pkcs1-encrypt.c pkcs1-decrypt.c \
109
		  pkcs1-rsa-digest.c pkcs1-rsa-md5.c pkcs1-rsa-sha1.c \
110
		  pkcs1-rsa-sha256.c pkcs1-rsa-sha512.c \
111
		  rsa.c rsa-sign.c rsa-verify.c \
112
		  rsa-pkcs1-sign.c rsa-pkcs1-sign-tr.c rsa-pkcs1-verify.c \
113
114
115
		  rsa-md5-sign.c rsa-md5-verify.c \
		  rsa-sha1-sign.c rsa-sha1-verify.c \
		  rsa-sha256-sign.c rsa-sha256-verify.c \
116
		  rsa-sha512-sign.c rsa-sha512-verify.c \
117
		  rsa-encrypt.c rsa-decrypt.c rsa-decrypt-tr.c \
118
		  rsa-keygen.c rsa-compat.c rsa-blind.c \
119
120
		  rsa2sexp.c sexp2rsa.c \
		  dsa.c dsa-sign.c dsa-verify.c dsa-keygen.c \
121
122
		  dsa-sha1-sign.c dsa-sha1-verify.c \
		  dsa-sha256-sign.c dsa-sha256-verify.c  \
123
		  dsa2sexp.c sexp2dsa.c \
124
		  pgp-encode.c rsa2openpgp.c \
125
		  der-iterator.c der2rsa.c der2dsa.c \
Niels Möller's avatar
Niels Möller committed
126
127
128
129
		  sec-add-1.c sec-sub-1.c sec-modinv.c sec-tabselect.c \
		  gmp-glue.c cnd-copy.c \
		  ecc-mod.c ecc-generic-modp.c ecc-generic-modq.c \
		  ecc-modp.c ecc-modq.c ecc-generic-redc.c \
Niels Möller's avatar
Niels Möller committed
130
		  ecc-192.c ecc-224.c ecc-256.c ecc-384.c ecc-521.c \
Niels Möller's avatar
Niels Möller committed
131
132
		  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 \
133
134
135
136
		  ecc-mul-g.c ecc-mul-a.c ecc-hash.c ecc-random.c \
		  ecc-point.c ecc-scalar.c \
		  ecc-ecdsa-sign.c ecdsa-sign.c \
		  ecc-ecdsa-verify.c ecdsa-verify.c
137

138
HEADERS = aes.h arcfour.h arctwo.h asn1.h bignum.h blowfish.h \
139
	  base16.h base64.h buffer.h camellia.h cast128.h \
Niels Möller's avatar
Niels Möller committed
140
	  cbc.h ctr.h \
141
	  des.h des-compat.h dsa.h ecc-curve.h ecc.h ecdsa.h \
Niels Möller's avatar
Niels Möller committed
142
	  gcm.h gosthash94.h hmac.h \
143
144
145
146
147
	  knuth-lfib.h \
	  macros.h \
	  md2.h md4.h \
	  md5.h md5-compat.h \
	  memxor.h \
Niels Möller's avatar
Niels Möller committed
148
	  nettle-meta.h nettle-types.h \
Niels Möller's avatar
Niels Möller committed
149
	  pbkdf2.h \
150
	  pgp.h pkcs1.h realloc.h ripemd160.h rsa.h rsa-compat.h \
151
	  salsa20.h sexp.h \
152
	  serpent.h sha.h sha1.h sha2.h sha3.h twofish.h \
153
154
	  yarrow.h

Niels Möller's avatar
Niels Möller committed
155
INSTALL_HEADERS = $(HEADERS) nettle-stdint.h
156

157
158
SOURCES = $(nettle_SOURCES) $(hogweed_SOURCES) \
	  $(getopt_SOURCES) $(internal_SOURCES) \
159
	  aesdata.c desdata.c twofishdata.c shadata.c gcmdata.c eccdata.c
160

161
162
DISTFILES = $(SOURCES) $(HEADERS) getopt.h .bootstrap run-tests \
	aclocal.m4 configure.ac \
163
	configure stamp-h.in \
164
	config.guess config.sub install-sh texinfo.tex \
165
	config.h.in config.m4.in config.make.in	Makefile.in \
166
	README AUTHORS COPYING.LIB INSTALL NEWS TODO ChangeLog \
167
	nettle.pc.in hogweed.pc.in \
168
	memxor.c $(des_headers) descore.README \
169
170
	aes-internal.h camellia-internal.h serpent-internal.h \
	cast128_sboxes.h desinfo.h desCode.h \
Simon Josefsson's avatar
Simon Josefsson committed
171
	nettle-internal.h nettle-write.h prime-list.h \
Niels Möller's avatar
Niels Möller committed
172
	gmp-glue.h ecc-internal.h \
Niels Möller's avatar
Niels Möller committed
173
	asm.m4 \
174
	nettle.texinfo nettle.info nettle.html nettle.pdf sha-example.c
175

176
# Rules building static libraries
177
178
179
nettle_OBJS = $(nettle_SOURCES:.c=.$(OBJEXT)) $(LIBOBJS)
nettle_PURE_OBJS = $(nettle_OBJS:.$(OBJEXT)=.p$(OBJEXT))

180
hogweed_OBJS = $(hogweed_SOURCES:.c=.$(OBJEXT))
181
182
hogweed_PURE_OBJS = $(hogweed_OBJS:.$(OBJEXT)=.p$(OBJEXT))

183
libnettle.a: $(nettle_OBJS)
184
	-rm -f $@
185
	$(AR) $(ARFLAGS) $@ $(nettle_OBJS)
186
187
	$(RANLIB) $@

188
189
190
191
192
libhogweed.a: $(hogweed_OBJS)
	-rm -f $@
	$(AR) $(ARFLAGS) $@ $(hogweed_OBJS)
	$(RANLIB) $@

193
194
195
196
.c.$(OBJEXT):
	$(COMPILE) $(CCPIC_MAYBE) -c $< \
	&& $(DEP_PROCESS)

197
# Rules building shared libraries.
198
$(LIBNETTLE_FORLINK): $(nettle_PURE_OBJS)
199
	$(LIBNETTLE_LINK) $(nettle_PURE_OBJS) -o $@ $(LIBNETTLE_LIBS)
200
	-mkdir .lib 2>/dev/null
201
202
203
	(cd .lib \
          && rm -f $(LIBNETTLE_FORLINK) \
	  && $(LN_S) ../$(LIBNETTLE_FORLINK) $(LIBNETTLE_FORLINK) \
204
	  && [ -z "$(LIBNETTLE_SONAME)" ] \
205
206
	  || { rm -f $(LIBNETTLE_SONAME) \
	       && $(LN_S) $(LIBNETTLE_FORLINK) $(LIBNETTLE_SONAME) ; } )
207

208
$(LIBHOGWEED_FORLINK): $(hogweed_PURE_OBJS) $(LIBNETTLE_FORLINK)
209
	$(LIBHOGWEED_LINK) $(hogweed_PURE_OBJS) -o $@ $(LIBHOGWEED_LIBS)
210
	-mkdir .lib 2>/dev/null
211
212
213
	(cd .lib \
          && rm -f $(LIBHOGWEED_FORLINK) \
	  && $(LN_S) ../$(LIBHOGWEED_FORLINK) $(LIBHOGWEED_FORLINK) \
214
	  && [ -z "$(LIBHOGWEED_SONAME)" ] \
215
216
	  || { rm -f $(LIBHOGWEED_SONAME) \
	       && $(LN_S) $(LIBHOGWEED_FORLINK) $(LIBHOGWEED_SONAME) ; } )
217
218
219
220
221

.c.p$(OBJEXT):
	$(COMPILE) $(SHLIBCFLAGS) -c $< -o $@ \
	&& $(DEP_PROCESS)

222
223
224
225
226
227
# For Solaris and BSD make, we have to use an explicit rule for each executable
aesdata$(EXEEXT): aesdata.$(OBJEXT)
	$(LINK) aesdata.$(OBJEXT) $(LIBS) -o aesdata$(EXEEXT)

desdata$(EXEEXT): desdata.$(OBJEXT)
	$(LINK) desdata.$(OBJEXT) $(LIBS) -o desdata$(EXEEXT)
228

229
230
231
twofishdata$(EXEEXT): twofishdata.$(OBJEXT)
	$(LINK) twofishdata.$(OBJEXT) $(LIBS) -o twofishdata$(EXEEXT)

232
shadata$(EXEEXT): shadata.$(OBJEXT)
233
234
	$(LINK) shadata.$(OBJEXT) $(LIBS) -lm -o shadata$(EXEEXT)

Niels Möller's avatar
Niels Möller committed
235
236
237
gcmdata$(EXEEXT): gcmdata.$(OBJEXT)
	$(LINK) gcmdata.$(OBJEXT) $(LIBS) -o gcmdata$(EXEEXT)

238
239
eccdata$(EXEEXT): eccdata.$(OBJEXT)
	$(LINK) eccdata.$(OBJEXT) $(LIBS) -o eccdata$(EXEEXT)
240

241
242
# desCore rules
# It seems using $(srcdir)/ doesn't work with GNU make 3.79.1
243
244
# des_headers = $(srcdir)/rotors.h $(srcdir)/keymap.h 
des_headers = rotors.h keymap.h 
245
246
247
248

# Generate DES headers.
$(des_headers): desdata.c
	$(MAKE) desdata$(EXEEXT)
249
250
251
	f="$(srcdir)/`basename $@`"; \
	  ./desdata$(EXEEXT) $(@F) > $${f}T; \
	  test -s $${f}T && mv -f $${f}T $$f
252

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

255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
# 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
	./eccdata$(EXEEXT) 192 7 6 $(GMP_NUMB_BITS) > $@T && mv $@T $@
# 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
	./eccdata$(EXEEXT) 224 12 6 $(GMP_NUMB_BITS) > $@T && mv $@T $@
# 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
	./eccdata$(EXEEXT) 256 14 6 $(GMP_NUMB_BITS) > $@T && mv $@T $@
# 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
	./eccdata$(EXEEXT) 384 41 6 $(GMP_NUMB_BITS) > $@T && mv $@T $@
# 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
	./eccdata$(EXEEXT) 521 56 6 $(GMP_NUMB_BITS) > $@T && mv $@T $@

eccdata.stamp: eccdata.c
	$(MAKE) eccdata$(EXEEXT)
	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

ecc-192.p$(OBJEXT): ecc-192.h
ecc-224.p$(OBJEXT): ecc-224.h
ecc-256.p$(OBJEXT): ecc-256.h
ecc-384.p$(OBJEXT): ecc-384.h
ecc-521.p$(OBJEXT): ecc-521.h

313
314
315
316
317
318
319
320
321
.asm.s:
	$(M4) $(srcdir)/asm.m4 machine.m4 config.m4 $< >$@T \
	&& test -s $@T && mv -f $@T $@

.s.$(OBJEXT):
	$(COMPILE) $(CCPIC_MAYBE) -c $<

.s.p$(OBJEXT):
	$(COMPILE) $(SHLIBCFLAGS) -c $< -o $@
322

323
324
# Texinfo rules
.texinfo.info:
325
	cd $(srcdir) && $(MAKEINFO) --output $@ `basename "$<"`
326
327

.texinfo.html:
328
	cd $(srcdir) && $(MAKEINFO) --html --no-split \
329
	  --output $@T `basename "$<"` \
330
	  && test -s $@T && mv -f $@T $@
331

332
.texinfo.dvi:
Niels Möller's avatar
Niels Möller committed
333
	cd $(srcdir) && texi2dvi -b `basename "$<"`
334
335

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

338
# Avoid rebuilding .dvi and .ps files when the .texinfo source is unchanged.
339
PS2PDFFLAGS=-dCompatibilityLevel=1.3 -dMAxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
340
341
342
.texinfo.pdf:
	$(MAKE) `basename "$<" .texinfo`.ps
	cd $(srcdir) && ps2pdf $(PS2PDFFLAGS) `basename "$<" .texinfo`.ps
343

344
345
# Configure-related rules, mostly copied from the autoconf manual. No
# $(srcdir) prefixes on the targets, though.
346

347
348
configure: configure.ac aclocal.m4
	cd $(srcdir) && $(AUTOCONF)
349

350
351
352
# 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
353
	cd $(srcdir) && $(AUTOHEADER)
354
	echo timestamp > $(srcdir)/stamp-h.in
355

356
357
config.status: configure
	./config.status --recheck
358

359
360
361
362
config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status config.h
	echo timestamp > stamp-h
363

364
365
Makefile: Makefile.in config.status
	./config.status $@
366

367
368
config.make: config.make.in config.status
	./config.status $@
369

Niels Möller's avatar
Niels Möller committed
370
371
372
config.m4: config.m4.in config.status
	./config.status $@

373
374
375
376
377
378
nettle.pc: nettle.pc.in config.status
	./config.status $@

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

379
# Installation
Sam Thursfield's avatar
Sam Thursfield committed
380
381
install-doc: @IF_DOCUMENTATION@ install-info
install-here: install-doc install-headers install-static install-pkgconfig \
382
	@IF_SHARED@ install-shared-nettle @IF_HOGWEED@ install-shared-hogweed
383
384

install-static: $(LIBTARGETS)
385
	$(MKDIR_P) $(DESTDIR)$(libdir)
386
387
388
389
	for f in $(LIBTARGETS); do \
	  $(INSTALL_DATA) $$f $(DESTDIR)$(libdir) ; \
	done

390
391
392
393
394
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
395
	$(MKDIR_P) $(DESTDIR)$(libdir)
396
	$(INSTALL_DATA) $(LIBNETTLE_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
397
398
	[ -z "$(LIBNETTLE_SONAME)" ] \
                || (cd $(DESTDIR)$(libdir) \
399
400
401
		&& rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_SONAME) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_FORLINK))
402

403
404
405
406
407
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
408
	$(MKDIR_P) $(DESTDIR)$(libdir)
409
	$(INSTALL_DATA) $(LIBHOGWEED_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
410
	[ -z "$(LIBHOGWEED_SONAME)" ] \
411
                || (cd $(DESTDIR)$(libdir) \
412
413
414
		&& rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_SONAME) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_FORLINK))
415

416
417
418
419
# 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.

420
install-info: nettle.info
421
	$(MKDIR_P) $(DESTDIR)$(infodir)
422
423
424
	f=nettle.info ; \
	[ -f $$f ] || f="$(srcdir)/$$f" ; \
	$(INSTALL_DATA) "$$f" $(DESTDIR)$(infodir) ; \
425
426
	if (install-info --version && \
	    install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
427
	  install-info --info-dir="$(DESTDIR)$(infodir)" "$$f" ; \
428
429
	else : ; fi

430
431
# NOTE: I'd like to use $^, but that's a GNU extension. $? should be
# more portable, and equivalent for phony targets.
432
install-headers: $(INSTALL_HEADERS)
433
	$(MKDIR_P) $(DESTDIR)$(includedir)/nettle
434
435
436
437
438
439
	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
440

441
442
443
444
445
446
install-pkgconfig: $(PKGCONFIG_FILES)
	$(MKDIR_P) $(DESTDIR)$(pkgconfigdir)
	for f in $(PKGCONFIG_FILES) ; do \
	  $(INSTALL_DATA) "$$f" $(DESTDIR)$(pkgconfigdir) ; \
	done

447
# Uninstall
448
uninstall-here: uninstall-info uninstall-headers uninstall-static \
449
		uninstall-pkgconfig @IF_SHARED@ uninstall-shared
450
451

uninstall-static:
452
	for f in $(LIBTARGETS) ; do \
453
454
	  rm -f $(DESTDIR)$(libdir)/$$f ; \
	done
455
456
457
458
459
460
461
462
463
464
465
466
467
468

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
469
470
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

471
472
473
474
uninstall-dll-nettle:
	rm -f $(DESTDIR)$(bindir)/$(LIBNETTLE_FORLINK)

uninstall-shared-nettle: @IF_DLL@ uninstall-dll-nettle
475
476
477
478
	rm -f $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
	[ -z "$(LIBNETTLE_SONAME)" ] \
		|| rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK)

479
480
481
482
uninstall-dll-hogweed:
	rm -f $(DESTDIR)$(bindir)/$(LIBHOGWEED_FORLINK)

uninstall-shared-hogweed: @IF_DLL@ uninstall-dll-hogweed
483
484
485
	rm -f $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
	[ -z "$(LIBHOGWEED_SONAME)" ] \
		|| rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK)
486

487
488
489
490
491
uninstall-pkgconfig:
	for f in $(PKGCONFIG_FILES) ; do \
	  rm -f $(DESTDIR)$(pkgconfigdir)/$$f ; \
	done

492
493
494
495
# Distribution
distdir = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
top_distdir = $(distdir)

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

498
distdir: $(DISTFILES)
499
500
	rm -rf "$(distdir)"
	mkdir "$(distdir)"
501
	set -e; for f in $(DISTFILES) ; do \
502
	  if [ -f "$$f" ] ; then cp "$$f" "$(distdir)" ; \
503
504
505
	  else cp "$(srcdir)/$$f" "$(distdir)" ; \
	  fi ; \
	done
506
	set -e; for d in sparc32 sparc64 x86 x86_64; do \
507
508
	  mkdir "$(distdir)/$$d" ; \
	  cp $(srcdir)/$$d/*.asm $(srcdir)/$$d/*.m4 "$(distdir)/$$d" ; \
509
	done
510
	set -e; for d in $(SUBDIRS); do \
511
512
	  sd="$(distdir)/$$d" ; \
	  mkdir "$$sd" && $(MAKE) -C $$d distdir="`cd $$sd && pwd`" $@ ; \
513
514
515
516
517
518
519
520
	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 {} ';' \
521
                 && rm -fr distcheck-tmp; }; 
522
523
524
525

distcheck: dist
	$(rm_distcheck)
	mkdir distcheck-tmp
526
527
	gzip -d < $(distdir).tar.gz \
	  | { cd distcheck-tmp && tar xf - && chmod -R a-w $(distdir) ; }
528
529
	mkdir distcheck-tmp/build
	mkdir distcheck-tmp/install
530
	cd distcheck-tmp/build && ../$(distdir)/configure --prefix="`cd ../install && pwd`"
531
532
533
	cd distcheck-tmp/build && $(MAKE)
	cd distcheck-tmp/build && $(MAKE) check
	cd distcheck-tmp/build && $(MAKE) install
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
	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; }	
551
552
	cd distcheck-tmp/build && $(MAKE) dist
	cd distcheck-tmp/build && rm *.gz
553
	cd distcheck-tmp/build && $(MAKE) distclean
554
555
	cd distcheck-tmp && find build -type f -print > leftover-build-files
	@test `cat distcheck-tmp/leftover-build-files | wc -l` -eq 0  \
556
	  || { echo "ERROR: files left in build directory after distclean:" ; \
557
	       cat distcheck-tmp/leftover-build-files ; \
558
559
560
561
	       exit 1; }
	$(rm_distcheck)

clean-here:
562
563
	-rm -f $(TARGETS) $(IMPLICIT_TARGETS) *.$(OBJEXT) *.p$(OBJEXT) *.s \
		ecc-192.h ecc-224.h ecc-256.h ecc-384.h ecc-521.h eccdata.stamp
564
	-rm -rf .lib
565

566
distclean-here: clean-here
567
	-rm -f config.h stamp-h config.log config.status machine.m4 \
568
569
570
	config.make config.m4 Makefile nettle-stdint.h \
	nettle.pc hogweed.pc \
	*.asm *.d
571

572
573
574
maintainer-clean-here:
	-rm -f $(DOCTARGETS) *.dvi *.ps

575
tags-here:	
576
	etags -o $(srcdir)/TAGS $(srcdir)/*.c $(srcdir)/*.h
577

578
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d) $(SOURCES:.c=.p$(OBJEXT).d) asm.d
579
@DEP_INCLUDE@ $(DEP_FILES)