Makefile.in 19.5 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
	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 521
	  mkdir "$(distdir)/$$d" ; \
	  cp $(srcdir)/$$d/*.asm $(srcdir)/$$d/*.m4 "$(distdir)/$$d" ; \
522
	done
523
	set -e; for d in $(SUBDIRS); do \
524 525
	  sd="$(distdir)/$$d" ; \
	  mkdir "$$sd" && $(MAKE) -C $$d distdir="`cd $$sd && pwd`" $@ ; \
526 527 528 529 530 531 532 533
	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 {} ';' \
534
                 && rm -fr distcheck-tmp; }; 
535 536 537 538

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

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

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

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

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

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