Makefile.in 18.6 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
131
132
		  ecc-192.c ecc-224.c ecc-256.c ecc-384.c ecc-521.c \
		  ecc-size.c ecc-j-to-a.c ecc-dup-jj.c ecc-add-jja.c \
		  ecc-mul-g.c
133

134
HEADERS = aes.h arcfour.h arctwo.h asn1.h bignum.h blowfish.h \
135
	  base16.h base64.h buffer.h camellia.h cast128.h \
Niels Möller's avatar
Niels Möller committed
136
	  cbc.h ctr.h \
Niels Möller's avatar
Niels Möller committed
137
	  des.h des-compat.h dsa.h ecc-curve.h ecc.h \
Niels Möller's avatar
Niels Möller committed
138
	  gcm.h gosthash94.h hmac.h \
139
140
141
142
143
	  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
144
	  nettle-meta.h nettle-types.h \
Niels Möller's avatar
Niels Möller committed
145
	  pbkdf2.h \
146
	  pgp.h pkcs1.h realloc.h ripemd160.h rsa.h rsa-compat.h \
147
	  salsa20.h sexp.h \
148
	  serpent.h sha.h sha1.h sha2.h sha3.h twofish.h \
149
150
	  yarrow.h

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

153
154
SOURCES = $(nettle_SOURCES) $(hogweed_SOURCES) \
	  $(getopt_SOURCES) $(internal_SOURCES) \
155
	  aesdata.c desdata.c twofishdata.c shadata.c gcmdata.c eccdata.c
156

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

172
# Rules building static libraries
173
174
175
nettle_OBJS = $(nettle_SOURCES:.c=.$(OBJEXT)) $(LIBOBJS)
nettle_PURE_OBJS = $(nettle_OBJS:.$(OBJEXT)=.p$(OBJEXT))

176
hogweed_OBJS = $(hogweed_SOURCES:.c=.$(OBJEXT))
177
178
hogweed_PURE_OBJS = $(hogweed_OBJS:.$(OBJEXT)=.p$(OBJEXT))

179
libnettle.a: $(nettle_OBJS)
180
	-rm -f $@
181
	$(AR) $(ARFLAGS) $@ $(nettle_OBJS)
182
183
	$(RANLIB) $@

184
185
186
187
188
libhogweed.a: $(hogweed_OBJS)
	-rm -f $@
	$(AR) $(ARFLAGS) $@ $(hogweed_OBJS)
	$(RANLIB) $@

189
190
191
192
.c.$(OBJEXT):
	$(COMPILE) $(CCPIC_MAYBE) -c $< \
	&& $(DEP_PROCESS)

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

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

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

218
219
220
221
222
223
# 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)
224

225
226
227
twofishdata$(EXEEXT): twofishdata.$(OBJEXT)
	$(LINK) twofishdata.$(OBJEXT) $(LIBS) -o twofishdata$(EXEEXT)

228
shadata$(EXEEXT): shadata.$(OBJEXT)
229
230
	$(LINK) shadata.$(OBJEXT) $(LIBS) -lm -o shadata$(EXEEXT)

Niels Möller's avatar
Niels Möller committed
231
232
233
gcmdata$(EXEEXT): gcmdata.$(OBJEXT)
	$(LINK) gcmdata.$(OBJEXT) $(LIBS) -o gcmdata$(EXEEXT)

234
235
eccdata$(EXEEXT): eccdata.$(OBJEXT)
	$(LINK) eccdata.$(OBJEXT) $(LIBS) -o eccdata$(EXEEXT)
236

237
238
# desCore rules
# It seems using $(srcdir)/ doesn't work with GNU make 3.79.1
239
240
# des_headers = $(srcdir)/rotors.h $(srcdir)/keymap.h 
des_headers = rotors.h keymap.h 
241
242
243
244

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

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

251
252
253
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
# 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

309
310
311
312
313
314
315
316
317
.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 $@
318

319
320
# Texinfo rules
.texinfo.info:
321
	cd $(srcdir) && $(MAKEINFO) --output $@ `basename "$<"`
322
323

.texinfo.html:
324
	cd $(srcdir) && $(MAKEINFO) --html --no-split \
325
	  --output $@T `basename "$<"` \
326
	  && test -s $@T && mv -f $@T $@
327

328
.texinfo.dvi:
Niels Möller's avatar
Niels Möller committed
329
	cd $(srcdir) && texi2dvi -b `basename "$<"`
330
331

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

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

340
341
# Configure-related rules, mostly copied from the autoconf manual. No
# $(srcdir) prefixes on the targets, though.
342

343
344
configure: configure.ac aclocal.m4
	cd $(srcdir) && $(AUTOCONF)
345

346
347
348
# 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
349
	cd $(srcdir) && $(AUTOHEADER)
350
	echo timestamp > $(srcdir)/stamp-h.in
351

352
353
config.status: configure
	./config.status --recheck
354

355
356
357
358
config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status config.h
	echo timestamp > stamp-h
359

360
361
Makefile: Makefile.in config.status
	./config.status $@
362

363
364
config.make: config.make.in config.status
	./config.status $@
365

Niels Möller's avatar
Niels Möller committed
366
367
368
config.m4: config.m4.in config.status
	./config.status $@

369
370
371
372
373
374
nettle.pc: nettle.pc.in config.status
	./config.status $@

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

375
# Installation
Sam Thursfield's avatar
Sam Thursfield committed
376
377
install-doc: @IF_DOCUMENTATION@ install-info
install-here: install-doc install-headers install-static install-pkgconfig \
378
	@IF_SHARED@ install-shared-nettle @IF_HOGWEED@ install-shared-hogweed
379
380

install-static: $(LIBTARGETS)
381
	$(MKDIR_P) $(DESTDIR)$(libdir)
382
383
384
385
	for f in $(LIBTARGETS); do \
	  $(INSTALL_DATA) $$f $(DESTDIR)$(libdir) ; \
	done

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

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

412
413
414
415
# 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.

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

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

437
438
439
440
441
442
install-pkgconfig: $(PKGCONFIG_FILES)
	$(MKDIR_P) $(DESTDIR)$(pkgconfigdir)
	for f in $(PKGCONFIG_FILES) ; do \
	  $(INSTALL_DATA) "$$f" $(DESTDIR)$(pkgconfigdir) ; \
	done

443
# Uninstall
444
uninstall-here: uninstall-info uninstall-headers uninstall-static \
445
		uninstall-pkgconfig @IF_SHARED@ uninstall-shared
446
447

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

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
465
466
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

467
468
469
470
uninstall-dll-nettle:
	rm -f $(DESTDIR)$(bindir)/$(LIBNETTLE_FORLINK)

uninstall-shared-nettle: @IF_DLL@ uninstall-dll-nettle
471
472
473
474
	rm -f $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
	[ -z "$(LIBNETTLE_SONAME)" ] \
		|| rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK)

475
476
477
478
uninstall-dll-hogweed:
	rm -f $(DESTDIR)$(bindir)/$(LIBHOGWEED_FORLINK)

uninstall-shared-hogweed: @IF_DLL@ uninstall-dll-hogweed
479
480
481
	rm -f $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
	[ -z "$(LIBHOGWEED_SONAME)" ] \
		|| rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK)
482

483
484
485
486
487
uninstall-pkgconfig:
	for f in $(PKGCONFIG_FILES) ; do \
	  rm -f $(DESTDIR)$(pkgconfigdir)/$$f ; \
	done

488
489
490
491
# Distribution
distdir = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
top_distdir = $(distdir)

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

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

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

clean-here:
558
559
	-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
560
	-rm -rf .lib
561

562
distclean-here: clean-here
563
	-rm -f config.h stamp-h config.log config.status machine.m4 \
564
565
566
	config.make config.m4 Makefile nettle-stdint.h \
	nettle.pc hogweed.pc \
	*.asm *.d
567

568
569
570
maintainer-clean-here:
	-rm -f $(DOCTARGETS) *.dvi *.ps

571
tags-here:	
572
	etags -o $(srcdir)/TAGS $(srcdir)/*.c $(srcdir)/*.h
573

574
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d) $(SOURCES:.c=.p$(OBJEXT).d) asm.d
575
@DEP_INCLUDE@ $(DEP_FILES)