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 130
		  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 \
		  ecc-192.c ecc-224.c ecc-256.c ecc-384.c ecc-521.c
131

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

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

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

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

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

174
hogweed_OBJS = $(hogweed_SOURCES:.c=.$(OBJEXT))
175 176
hogweed_PURE_OBJS = $(hogweed_OBJS:.$(OBJEXT)=.p$(OBJEXT))

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

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

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

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

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

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

216 217 218 219 220 221
# 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)
222

223 224 225
twofishdata$(EXEEXT): twofishdata.$(OBJEXT)
	$(LINK) twofishdata.$(OBJEXT) $(LIBS) -o twofishdata$(EXEEXT)

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

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

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

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

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

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

249 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
# 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

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

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

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

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

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

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

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

341 342
configure: configure.ac aclocal.m4
	cd $(srcdir) && $(AUTOCONF)
343

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

350 351
config.status: configure
	./config.status --recheck
352

353 354 355 356
config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status config.h
	echo timestamp > stamp-h
357

358 359
Makefile: Makefile.in config.status
	./config.status $@
360

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

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

367 368 369 370 371 372
nettle.pc: nettle.pc.in config.status
	./config.status $@

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

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

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

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

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

410 411 412 413
# 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.

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

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

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

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

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

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
463 464
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

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

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

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

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

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

486 487 488 489
# Distribution
distdir = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
top_distdir = $(distdir)

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

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

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

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

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

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

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

572
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d) $(SOURCES:.c=.p$(OBJEXT).d) asm.d
573
@DEP_INCLUDE@ $(DEP_FILES)