Makefile.in 18.7 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
133
		  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 \
		  ecc-mul-g.c ecc-mul-a.c
134

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Niels Möller's avatar
Niels Möller committed
250
des.$(OBJEXT): des.c des.h $(des_headers)
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
309
# 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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