Makefile.in 19.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
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) eccdata$(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 99 100
		 twofish.c twofish-meta.c \
		 yarrow256.c yarrow_key_event.c \
		 buffer.c buffer-init.c realloc.c \
101 102
		 nettle-meta-hashes.c nettle-meta-ciphers.c \
		 nettle-meta-armors.c \
103
		 write-be32.c write-le32.c write-le64.c
104

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

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

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

159 160
SOURCES = $(nettle_SOURCES) $(hogweed_SOURCES) \
	  $(getopt_SOURCES) $(internal_SOURCES) \
161
	  aesdata.c desdata.c twofishdata.c shadata.c gcmdata.c eccdata.c
162

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

178
# Rules building static libraries
179 180 181
nettle_OBJS = $(nettle_SOURCES:.c=.$(OBJEXT)) $(LIBOBJS)
nettle_PURE_OBJS = $(nettle_OBJS:.$(OBJEXT)=.p$(OBJEXT))

182
hogweed_OBJS = $(hogweed_SOURCES:.c=.$(OBJEXT)) $(OPT_ASM_SOURCES:.asm=.$(OBJEXT))
183
hogweed_PURE_OBJS = $(hogweed_OBJS:.$(OBJEXT)=.p$(OBJEXT))
184

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

190 191 192 193 194
libhogweed.a: $(hogweed_OBJS)
	-rm -f $@
	$(AR) $(ARFLAGS) $@ $(hogweed_OBJS)
	$(RANLIB) $@

195 196 197 198
.c.$(OBJEXT):
	$(COMPILE) $(CCPIC_MAYBE) -c $< \
	&& $(DEP_PROCESS)

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

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

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

Niels Möller's avatar
Niels Möller committed
224 225 226 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)

eccdata$(EXEEXT_FOR_BUILD): eccdata.c
	$(CC_FOR_BUILD) `test -f eccdata.c || echo '$(srcdir)/'`eccdata.c -lgmp \
	-o eccdata$(EXEEXT_FOR_BUILD)
250

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

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

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

323 324 325 326 327 328 329 330 331
.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 $@
332

333 334
# Texinfo rules
.texinfo.info:
335
	cd $(srcdir) && $(MAKEINFO) --output $@ `basename "$<"`
336 337

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

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

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

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

354 355
# Configure-related rules, mostly copied from the autoconf manual. No
# $(srcdir) prefixes on the targets, though.
356

357 358
configure: configure.ac aclocal.m4
	cd $(srcdir) && $(AUTOCONF)
359

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

366 367
config.status: configure
	./config.status --recheck
368

369 370 371 372
config.h: stamp-h
stamp-h: config.h.in config.status
	./config.status config.h
	echo timestamp > stamp-h
373

374 375
Makefile: Makefile.in config.status
	./config.status $@
376

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

Niels Möller's avatar
Niels Möller committed
380 381 382
config.m4: config.m4.in config.status
	./config.status $@

383 384 385 386 387 388
nettle.pc: nettle.pc.in config.status
	./config.status $@

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

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

install-static: $(LIBTARGETS)
395
	$(MKDIR_P) $(DESTDIR)$(libdir)
396 397 398 399
	for f in $(LIBTARGETS); do \
	  $(INSTALL_DATA) $$f $(DESTDIR)$(libdir) ; \
	done

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

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

426 427 428 429
# 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.

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

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

451 452 453 454 455 456
install-pkgconfig: $(PKGCONFIG_FILES)
	$(MKDIR_P) $(DESTDIR)$(pkgconfigdir)
	for f in $(PKGCONFIG_FILES) ; do \
	  $(INSTALL_DATA) "$$f" $(DESTDIR)$(pkgconfigdir) ; \
	done

457
# Uninstall
458
uninstall-here: uninstall-info uninstall-headers uninstall-static \
459
		uninstall-pkgconfig @IF_SHARED@ uninstall-shared
460 461

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

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
479 480
uninstall-shared: uninstall-shared-nettle @IF_HOGWEED@ uninstall-shared-hogweed

481 482 483 484
uninstall-dll-nettle:
	rm -f $(DESTDIR)$(bindir)/$(LIBNETTLE_FORLINK)

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

489 490 491 492
uninstall-dll-hogweed:
	rm -f $(DESTDIR)$(bindir)/$(LIBHOGWEED_FORLINK)

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

497 498 499 500 501
uninstall-pkgconfig:
	for f in $(PKGCONFIG_FILES) ; do \
	  rm -f $(DESTDIR)$(pkgconfigdir)/$$f ; \
	done

502 503 504 505
# Distribution
distdir = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
top_distdir = $(distdir)

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

508
distdir: $(DISTFILES)
509 510
	rm -rf "$(distdir)"
	mkdir "$(distdir)"
511
	set -e; for f in $(DISTFILES) ; do \
512
	  if [ -f "$$f" ] ; then cp "$$f" "$(distdir)" ; \
513 514 515
	  else cp "$(srcdir)/$$f" "$(distdir)" ; \
	  fi ; \
	done
516
	set -e; for d in sparc32 sparc64 x86 x86_64; do \
517 518
	  mkdir "$(distdir)/$$d" ; \
	  cp $(srcdir)/$$d/*.asm $(srcdir)/$$d/*.m4 "$(distdir)/$$d" ; \
519
	done
520
	set -e; for d in $(SUBDIRS); do \
521 522
	  sd="$(distdir)/$$d" ; \
	  mkdir "$$sd" && $(MAKE) -C $$d distdir="`cd $$sd && pwd`" $@ ; \
523 524 525 526 527 528 529 530
	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 {} ';' \
531
                 && rm -fr distcheck-tmp; }; 
532 533 534 535

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

clean-here:
572 573
	-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
574
	-rm -rf .lib
575

576
distclean-here: clean-here
577
	-rm -f config.h stamp-h config.log config.status machine.m4 \
578 579 580
	config.make config.m4 Makefile nettle-stdint.h \
	nettle.pc hogweed.pc \
	*.asm *.d
581

582 583 584
maintainer-clean-here:
	-rm -f $(DOCTARGETS) *.dvi *.ps

585
tags-here:	
586
	etags -o $(srcdir)/TAGS $(srcdir)/*.c $(srcdir)/*.h
587

588
DEP_FILES = $(SOURCES:.c=.$(OBJEXT).d) $(SOURCES:.c=.p$(OBJEXT).d) asm.d
589
@DEP_INCLUDE@ $(DEP_FILES)