Makefile.in 18.3 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
126

127
HEADERS = aes.h arcfour.h arctwo.h asn1.h bignum.h blowfish.h \
128
	  base16.h base64.h buffer.h camellia.h cast128.h \
Niels Möller's avatar
Niels Möller committed
129
	  cbc.h ctr.h gcm.h \
130 131
	  des.h des-compat.h dsa.h \
	  hmac.h \
Simon Josefsson's avatar
Simon Josefsson committed
132
	  pbkdf2.h \
133 134 135
	  knuth-lfib.h \
	  macros.h \
	  md2.h md4.h \
136
	  gosthash94.h \
137 138
	  md5.h md5-compat.h \
	  memxor.h \
Niels Möller's avatar
Niels Möller committed
139
	  nettle-meta.h nettle-types.h \
140
	  pgp.h pkcs1.h realloc.h ripemd160.h rsa.h rsa-compat.h \
141
	  salsa20.h sexp.h \
142
	  serpent.h sha.h sha1.h sha2.h sha3.h twofish.h \
143 144
	  yarrow.h

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

147 148
SOURCES = $(nettle_SOURCES) $(hogweed_SOURCES) \
	  $(getopt_SOURCES) $(internal_SOURCES) \
149
	  aesdata.c desdata.c twofishdata.c shadata.c gcmdata.c eccdata.c
150

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

165
# Rules building static libraries
166 167 168
nettle_OBJS = $(nettle_SOURCES:.c=.$(OBJEXT)) $(LIBOBJS)
nettle_PURE_OBJS = $(nettle_OBJS:.$(OBJEXT)=.p$(OBJEXT))

169
hogweed_OBJS = $(hogweed_SOURCES:.c=.$(OBJEXT))
170 171
hogweed_PURE_OBJS = $(hogweed_OBJS:.$(OBJEXT)=.p$(OBJEXT))

172
libnettle.a: $(nettle_OBJS)
173
	-rm -f $@
174
	$(AR) $(ARFLAGS) $@ $(nettle_OBJS)
175 176
	$(RANLIB) $@

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

182 183 184 185
.c.$(OBJEXT):
	$(COMPILE) $(CCPIC_MAYBE) -c $< \
	&& $(DEP_PROCESS)

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

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

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

211 212 213 214 215 216
# 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)
217

218 219 220
twofishdata$(EXEEXT): twofishdata.$(OBJEXT)
	$(LINK) twofishdata.$(OBJEXT) $(LIBS) -o twofishdata$(EXEEXT)

221
shadata$(EXEEXT): shadata.$(OBJEXT)
222 223
	$(LINK) shadata.$(OBJEXT) $(LIBS) -lm -o shadata$(EXEEXT)

Niels Möller's avatar
Niels Möller committed
224 225 226
gcmdata$(EXEEXT): gcmdata.$(OBJEXT)
	$(LINK) gcmdata.$(OBJEXT) $(LIBS) -o gcmdata$(EXEEXT)

227 228
eccdata$(EXEEXT): eccdata.$(OBJEXT)
	$(LINK) eccdata.$(OBJEXT) $(LIBS) -o eccdata$(EXEEXT)
229

230 231
# desCore rules
# It seems using $(srcdir)/ doesn't work with GNU make 3.79.1
232 233
# des_headers = $(srcdir)/rotors.h $(srcdir)/keymap.h 
des_headers = rotors.h keymap.h 
234 235 236 237

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

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

244 245 246 247 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
# 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

302 303 304 305 306 307 308 309 310
.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 $@
311

312 313
# Texinfo rules
.texinfo.info:
314
	cd $(srcdir) && $(MAKEINFO) --output $@ `basename "$<"`
315 316

.texinfo.html:
317
	cd $(srcdir) && $(MAKEINFO) --html --no-split \
318
	  --output $@T `basename "$<"` \
319
	  && test -s $@T && mv -f $@T $@
320

321
.texinfo.dvi:
Niels Möller's avatar
Niels Möller committed
322
	cd $(srcdir) && texi2dvi -b `basename "$<"`
323 324

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

327
# Avoid rebuilding .dvi and .ps files when the .texinfo source is unchanged.
328
PS2PDFFLAGS=-dCompatibilityLevel=1.3 -dMAxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
329 330 331
.texinfo.pdf:
	$(MAKE) `basename "$<" .texinfo`.ps
	cd $(srcdir) && ps2pdf $(PS2PDFFLAGS) `basename "$<" .texinfo`.ps
332

333 334
# Configure-related rules, mostly copied from the autoconf manual. No
# $(srcdir) prefixes on the targets, though.
335

336 337
configure: configure.ac aclocal.m4
	cd $(srcdir) && $(AUTOCONF)
338

339 340 341
# 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
342
	cd $(srcdir) && $(AUTOHEADER)
343
	echo timestamp > $(srcdir)/stamp-h.in
344

345 346
config.status: configure
	./config.status --recheck
347

348 349 350 351
config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status config.h
	echo timestamp > stamp-h
352

353 354
Makefile: Makefile.in config.status
	./config.status $@
355

356 357
config.make: config.make.in config.status
	./config.status $@
358

Niels Möller's avatar
Niels Möller committed
359 360 361
config.m4: config.m4.in config.status
	./config.status $@

362 363 364 365 366 367
nettle.pc: nettle.pc.in config.status
	./config.status $@

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

368
# Installation
Sam Thursfield's avatar
Sam Thursfield committed
369 370
install-doc: @IF_DOCUMENTATION@ install-info
install-here: install-doc install-headers install-static install-pkgconfig \
371
	@IF_SHARED@ install-shared-nettle @IF_HOGWEED@ install-shared-hogweed
372 373

install-static: $(LIBTARGETS)
374
	$(MKDIR_P) $(DESTDIR)$(libdir)
375 376 377 378
	for f in $(LIBTARGETS); do \
	  $(INSTALL_DATA) $$f $(DESTDIR)$(libdir) ; \
	done

379 380 381 382 383
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
384
	$(MKDIR_P) $(DESTDIR)$(libdir)
385
	$(INSTALL_DATA) $(LIBNETTLE_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
386 387
	[ -z "$(LIBNETTLE_SONAME)" ] \
                || (cd $(DESTDIR)$(libdir) \
388 389 390
		&& rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_SONAME) \
		&& $(LN_S) $(LIBNETTLE_FILE) $(LIBNETTLE_FORLINK))
391

392 393 394 395 396
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
397
	$(MKDIR_P) $(DESTDIR)$(libdir)
398
	$(INSTALL_DATA) $(LIBHOGWEED_FILE_SRC) $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
399
	[ -z "$(LIBHOGWEED_SONAME)" ] \
400
                || (cd $(DESTDIR)$(libdir) \
401 402 403
		&& rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_SONAME) \
		&& $(LN_S) $(LIBHOGWEED_FILE) $(LIBHOGWEED_FORLINK))
404

405 406 407 408
# 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.

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

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

430 431 432 433 434 435
install-pkgconfig: $(PKGCONFIG_FILES)
	$(MKDIR_P) $(DESTDIR)$(pkgconfigdir)
	for f in $(PKGCONFIG_FILES) ; do \
	  $(INSTALL_DATA) "$$f" $(DESTDIR)$(pkgconfigdir) ; \
	done

436
# Uninstall
437
uninstall-here: uninstall-info uninstall-headers uninstall-static \
438
		uninstall-pkgconfig @IF_SHARED@ uninstall-shared
439 440

uninstall-static:
441
	for f in $(LIBTARGETS) ; do \
442 443
	  rm -f $(DESTDIR)$(libdir)/$$f ; \
	done
444 445 446 447 448 449 450 451 452 453 454 455 456 457

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
458 459
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

460 461 462 463
uninstall-dll-nettle:
	rm -f $(DESTDIR)$(bindir)/$(LIBNETTLE_FORLINK)

uninstall-shared-nettle: @IF_DLL@ uninstall-dll-nettle
464 465 466 467
	rm -f $(DESTDIR)$(libdir)/$(LIBNETTLE_FILE)
	[ -z "$(LIBNETTLE_SONAME)" ] \
		|| rm -f $(LIBNETTLE_SONAME) $(LIBNETTLE_FORLINK)

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

uninstall-shared-hogweed: @IF_DLL@ uninstall-dll-hogweed
472 473 474
	rm -f $(DESTDIR)$(libdir)/$(LIBHOGWEED_FILE)
	[ -z "$(LIBHOGWEED_SONAME)" ] \
		|| rm -f $(LIBHOGWEED_SONAME) $(LIBHOGWEED_FORLINK)
475

476 477 478 479 480
uninstall-pkgconfig:
	for f in $(PKGCONFIG_FILES) ; do \
	  rm -f $(DESTDIR)$(pkgconfigdir)/$$f ; \
	done

481 482 483 484
# Distribution
distdir = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
top_distdir = $(distdir)

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

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

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

clean-here:
551 552
	-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
553
	-rm -rf .lib
554

555
distclean-here: clean-here
556
	-rm -f config.h stamp-h config.log config.status machine.m4 \
557 558 559
	config.make config.m4 Makefile nettle-stdint.h \
	nettle.pc hogweed.pc \
	*.asm *.d
560

561 562 563
maintainer-clean-here:
	-rm -f $(DOCTARGETS) *.dvi *.ps

564
tags-here:	
565
	etags -o $(srcdir)/TAGS $(srcdir)/*.c $(srcdir)/*.h
566

567
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d) $(SOURCES:.c=.p$(OBJEXT).d) asm.d
568
@DEP_INCLUDE@ $(DEP_FILES)