Makefile.in 19.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
OPT_ASM_SOURCES = @OPT_ASM_SOURCES@

19
20
21
22
SUBDIRS = tools testsuite examples

include config.make

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

28
29
30
getopt_SOURCES = getopt.c getopt1.c
getopt_TARGETS = $(getopt_SOURCES:.c=.$(OBJEXT))

31
32
33
internal_SOURCES = nettle-internal.c
internal_TARGETS = $(internal_SOURCES:.c=.$(OBJEXT))

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

Sam Thursfield's avatar
Sam Thursfield committed
40
DOCTARGETS = @IF_DOCUMENTATION@ nettle.info nettle.html nettle.pdf
41

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

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

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

55
56
57
check-here:
	true

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

63
all-here: $(TARGETS) $(DOCTARGETS)
64

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

108
109
hogweed_SOURCES = sexp.c sexp-format.c \
		  sexp-transport.c sexp-transport-format.c \
110
111
112
		  bignum.c bignum-next-prime.c \
		  bignum-random.c bignum-random-prime.c \
		  sexp2bignum.c \
113
		  pkcs1.c pkcs1-encrypt.c pkcs1-decrypt.c \
114
		  pkcs1-rsa-digest.c pkcs1-rsa-md5.c pkcs1-rsa-sha1.c \
115
		  pkcs1-rsa-sha256.c pkcs1-rsa-sha512.c \
116
		  rsa.c rsa-sign.c rsa-verify.c \
117
		  rsa-pkcs1-sign.c rsa-pkcs1-sign-tr.c rsa-pkcs1-verify.c \
118
119
120
		  rsa-md5-sign.c rsa-md5-verify.c \
		  rsa-sha1-sign.c rsa-sha1-verify.c \
		  rsa-sha256-sign.c rsa-sha256-verify.c \
121
		  rsa-sha512-sign.c rsa-sha512-verify.c \
122
		  rsa-encrypt.c rsa-decrypt.c rsa-decrypt-tr.c \
123
		  rsa-keygen.c rsa-compat.c rsa-blind.c \
124
125
		  rsa2sexp.c sexp2rsa.c \
		  dsa.c dsa-sign.c dsa-verify.c dsa-keygen.c \
126
127
		  dsa-sha1-sign.c dsa-sha1-verify.c \
		  dsa-sha256-sign.c dsa-sha256-verify.c  \
128
		  dsa2sexp.c sexp2dsa.c \
129
		  pgp-encode.c rsa2openpgp.c \
130
		  der-iterator.c der2rsa.c der2dsa.c \
Niels Möller's avatar
Niels Möller committed
131
132
133
134
		  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
135
		  ecc-192.c ecc-224.c ecc-256.c ecc-384.c ecc-521.c \
Niels Möller's avatar
Niels Möller committed
136
137
		  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 \
138
		  ecc-mul-g.c ecc-mul-a.c ecc-hash.c ecc-random.c \
139
		  ecc-point.c ecc-scalar.c ecc-point-mul.c ecc-point-mul-g.c \
140
		  ecc-ecdsa-sign.c ecdsa-sign.c \
141
		  ecc-ecdsa-verify.c ecdsa-verify.c ecdsa-keygen.c
142

143
HEADERS = aes.h arcfour.h arctwo.h asn1.h bignum.h blowfish.h \
144
	  base16.h base64.h buffer.h camellia.h cast128.h \
Niels Möller's avatar
Niels Möller committed
145
	  cbc.h ctr.h \
146
	  des.h des-compat.h dsa.h ecc-curve.h ecc.h ecdsa.h \
Niels Möller's avatar
Niels Möller committed
147
	  gcm.h gosthash94.h hmac.h \
148
149
150
151
152
	  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
153
	  nettle-meta.h nettle-types.h \
Niels Möller's avatar
Niels Möller committed
154
	  pbkdf2.h \
155
	  pgp.h pkcs1.h realloc.h ripemd160.h rsa.h rsa-compat.h \
156
	  salsa20.h sexp.h \
157
	  serpent.h sha.h sha1.h sha2.h sha3.h twofish.h \
Niels Möller's avatar
Niels Möller committed
158
	  umac.h yarrow.h
159

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

162
163
SOURCES = $(nettle_SOURCES) $(hogweed_SOURCES) \
	  $(getopt_SOURCES) $(internal_SOURCES) \
164
	  aesdata.c desdata.c twofishdata.c shadata.c gcmdata.c eccdata.c
165

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

181
# Rules building static libraries
182
183
184
nettle_OBJS = $(nettle_SOURCES:.c=.$(OBJEXT)) $(LIBOBJS)
nettle_PURE_OBJS = $(nettle_OBJS:.$(OBJEXT)=.p$(OBJEXT))

185
hogweed_OBJS = $(hogweed_SOURCES:.c=.$(OBJEXT)) $(OPT_ASM_SOURCES:.asm=.$(OBJEXT))
186
hogweed_PURE_OBJS = $(hogweed_OBJS:.$(OBJEXT)=.p$(OBJEXT))
187

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

193
194
195
196
197
libhogweed.a: $(hogweed_OBJS)
	-rm -f $@
	$(AR) $(ARFLAGS) $@ $(hogweed_OBJS)
	$(RANLIB) $@

198
199
200
201
.c.$(OBJEXT):
	$(COMPILE) $(CCPIC_MAYBE) -c $< \
	&& $(DEP_PROCESS)

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

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

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

Niels Möller's avatar
Niels Möller committed
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
# 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)

250
eccdata$(EXEEXT_FOR_BUILD): eccdata.c mini-gmp.c mini-gmp.h
251
	$(CC_FOR_BUILD) `test -f eccdata.c || echo '$(srcdir)/'`eccdata.c \
Niels Möller's avatar
Niels Möller committed
252
	-o eccdata$(EXEEXT_FOR_BUILD)
253

254
255
# desCore rules
# It seems using $(srcdir)/ doesn't work with GNU make 3.79.1
256
257
# des_headers = $(srcdir)/rotors.h $(srcdir)/keymap.h 
des_headers = rotors.h keymap.h 
258
259
260
261

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

Niels Möller's avatar
Niels Möller committed
266
des.$(OBJEXT): des.c des.h $(des_headers)
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
313
314
315
316
317
318
319
320
321
322
323
324
325
# 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

326
327
328
329
330
331
332
333
334
.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 $@
335

336
337
# Texinfo rules
.texinfo.info:
338
	cd $(srcdir) && $(MAKEINFO) --output $@ `basename "$<"`
339
340

.texinfo.html:
341
	cd $(srcdir) && $(MAKEINFO) --html --no-split \
342
	  --output $@T `basename "$<"` \
343
	  && test -s $@T && mv -f $@T $@
344

345
.texinfo.dvi:
Niels Möller's avatar
Niels Möller committed
346
	cd $(srcdir) && texi2dvi -b `basename "$<"`
347
348

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

351
# Avoid rebuilding .dvi and .ps files when the .texinfo source is unchanged.
352
PS2PDFFLAGS=-dCompatibilityLevel=1.3 -dMAxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
353
354
355
.texinfo.pdf:
	$(MAKE) `basename "$<" .texinfo`.ps
	cd $(srcdir) && ps2pdf $(PS2PDFFLAGS) `basename "$<" .texinfo`.ps
356

357
358
# Configure-related rules, mostly copied from the autoconf manual. No
# $(srcdir) prefixes on the targets, though.
359

360
361
configure: configure.ac aclocal.m4
	cd $(srcdir) && $(AUTOCONF)
362

363
364
365
# 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
366
	cd $(srcdir) && $(AUTOHEADER)
367
	echo timestamp > $(srcdir)/stamp-h.in
368

369
370
config.status: configure
	./config.status --recheck
371

372
373
374
375
config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status config.h
	echo timestamp > stamp-h
376

377
378
Makefile: Makefile.in config.status
	./config.status $@
379

380
381
config.make: config.make.in config.status
	./config.status $@
382

Niels Möller's avatar
Niels Möller committed
383
384
385
config.m4: config.m4.in config.status
	./config.status $@

386
387
388
389
390
391
nettle.pc: nettle.pc.in config.status
	./config.status $@

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

392
# Installation
Sam Thursfield's avatar
Sam Thursfield committed
393
394
install-doc: @IF_DOCUMENTATION@ install-info
install-here: install-doc install-headers install-static install-pkgconfig \
395
	@IF_SHARED@ install-shared-nettle @IF_HOGWEED@ install-shared-hogweed
396
397

install-static: $(LIBTARGETS)
398
	$(MKDIR_P) $(DESTDIR)$(libdir)
399
400
401
402
	for f in $(LIBTARGETS); do \
	  $(INSTALL_DATA) $$f $(DESTDIR)$(libdir) ; \
	done

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

416
417
418
419
420
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
421
	$(MKDIR_P) $(DESTDIR)$(libdir)
422
	$(INSTALL_DATA) $(LIBHOGWEED_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
423
	[ -z "$(LIBHOGWEED_SONAME)" ] \
424
                || (cd $(DESTDIR)$(libdir) \
425
426
427
		&& rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_SONAME) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_FORLINK))
428

429
430
431
432
# 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.

433
install-info: nettle.info
434
	$(MKDIR_P) $(DESTDIR)$(infodir)
435
436
437
	f=nettle.info ; \
	[ -f $$f ] || f="$(srcdir)/$$f" ; \
	$(INSTALL_DATA) "$$f" $(DESTDIR)$(infodir) ; \
438
439
	if (install-info --version && \
	    install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
440
	  install-info --info-dir="$(DESTDIR)$(infodir)" "$$f" ; \
441
442
	else : ; fi

443
444
# NOTE: I'd like to use $^, but that's a GNU extension. $? should be
# more portable, and equivalent for phony targets.
445
install-headers: $(INSTALL_HEADERS)
446
	$(MKDIR_P) $(DESTDIR)$(includedir)/nettle
447
448
449
450
451
452
	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
453

454
455
456
457
458
459
install-pkgconfig: $(PKGCONFIG_FILES)
	$(MKDIR_P) $(DESTDIR)$(pkgconfigdir)
	for f in $(PKGCONFIG_FILES) ; do \
	  $(INSTALL_DATA) "$$f" $(DESTDIR)$(pkgconfigdir) ; \
	done

460
# Uninstall
461
uninstall-here: uninstall-info uninstall-headers uninstall-static \
462
		uninstall-pkgconfig @IF_SHARED@ uninstall-shared
463
464

uninstall-static:
465
	for f in $(LIBTARGETS) ; do \
466
467
	  rm -f $(DESTDIR)$(libdir)/$$f ; \
	done
468
469
470
471
472
473
474
475
476
477
478
479
480
481

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
482
483
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

484
485
486
487
uninstall-dll-nettle:
	rm -f $(DESTDIR)$(bindir)/$(LIBNETTLE_FORLINK)

uninstall-shared-nettle: @IF_DLL@ uninstall-dll-nettle
488
489
490
491
	rm -f $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
	[ -z "$(LIBNETTLE_SONAME)" ] \
		|| rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK)

492
493
494
495
uninstall-dll-hogweed:
	rm -f $(DESTDIR)$(bindir)/$(LIBHOGWEED_FORLINK)

uninstall-shared-hogweed: @IF_DLL@ uninstall-dll-hogweed
496
497
498
	rm -f $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
	[ -z "$(LIBHOGWEED_SONAME)" ] \
		|| rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK)
499

500
501
502
503
504
uninstall-pkgconfig:
	for f in $(PKGCONFIG_FILES) ; do \
	  rm -f $(DESTDIR)$(pkgconfigdir)/$$f ; \
	done

505
506
507
508
# Distribution
distdir = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
top_distdir = $(distdir)

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

511
distdir: $(DISTFILES)
512
513
	rm -rf "$(distdir)"
	mkdir "$(distdir)"
514
	set -e; for f in $(DISTFILES) ; do \
515
	  if [ -f "$$f" ] ; then cp "$$f" "$(distdir)" ; \
516
517
518
	  else cp "$(srcdir)/$$f" "$(distdir)" ; \
	  fi ; \
	done
519
	set -e; for d in sparc32 sparc64 x86 x86_64 arm arm/neon ; do \
520
	  mkdir "$(distdir)/$$d" ; \
Niels Möller's avatar
Niels Möller committed
521
522
	  find "$(srcdir)/$$d" -maxdepth 1 '(' -name '*.asm' -o -name '*.m4' ')' \
	    -exec cp '{}' "$(distdir)/$$d" ';' ; \
523
	done
524
	set -e; for d in $(SUBDIRS); do \
525
526
	  sd="$(distdir)/$$d" ; \
	  mkdir "$$sd" && $(MAKE) -C $$d distdir="`cd $$sd && pwd`" $@ ; \
527
528
529
530
531
532
533
534
	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 {} ';' \
535
                 && rm -fr distcheck-tmp; }; 
536
537
538
539

distcheck: dist
	$(rm_distcheck)
	mkdir distcheck-tmp
540
541
	gzip -d < $(distdir).tar.gz \
	  | { cd distcheck-tmp && tar xf - && chmod -R a-w $(distdir) ; }
542
543
	mkdir distcheck-tmp/build
	mkdir distcheck-tmp/install
544
	cd distcheck-tmp/build && ../$(distdir)/configure --prefix="`cd ../install && pwd`"
545
546
547
	cd distcheck-tmp/build && $(MAKE)
	cd distcheck-tmp/build && $(MAKE) check
	cd distcheck-tmp/build && $(MAKE) install
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
	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; }	
565
566
	cd distcheck-tmp/build && $(MAKE) dist
	cd distcheck-tmp/build && rm *.gz
567
	cd distcheck-tmp/build && $(MAKE) distclean
568
569
	cd distcheck-tmp && find build -type f -print > leftover-build-files
	@test `cat distcheck-tmp/leftover-build-files | wc -l` -eq 0  \
570
	  || { echo "ERROR: files left in build directory after distclean:" ; \
571
	       cat distcheck-tmp/leftover-build-files ; \
572
573
574
575
	       exit 1; }
	$(rm_distcheck)

clean-here:
576
	-rm -f $(TARGETS) $(IMPLICIT_TARGETS) *.$(OBJEXT) *.p$(OBJEXT) *.s \
577
578
		ecc-192.h ecc-224.h ecc-256.h ecc-384.h ecc-521.h \
		eccdata$(EXEEXT) eccdata.stamp
579
	-rm -rf .lib
580

581
distclean-here: clean-here
582
	-rm -f config.h stamp-h config.log config.status machine.m4 \
583
584
585
	config.make config.m4 Makefile nettle-stdint.h \
	nettle.pc hogweed.pc \
	*.asm *.d
586

587
588
589
maintainer-clean-here:
	-rm -f $(DOCTARGETS) *.dvi *.ps

590
tags-here:	
591
	etags -o $(srcdir)/TAGS $(srcdir)/*.c $(srcdir)/*.h
592

593
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d) $(SOURCES:.c=.p$(OBJEXT).d) asm.d
594
@DEP_INCLUDE@ $(DEP_FILES)