Makefile.org 25.1 KB
Newer Older
1 2 3 4
##
## Makefile for OpenSSL
##

U
Ulf Möller 已提交
5 6 7
VERSION=
MAJOR=
MINOR=
8 9 10 11
SHLIB_VERSION_NUMBER=
SHLIB_VERSION_HISTORY=
SHLIB_MAJOR=
SHLIB_MINOR=
12
SHLIB_EXT=
13
PLATFORM=dist
14
OPTIONS=
15
CONFIGURE_ARGS=
16 17
SHLIB_TARGET=

18 19 20 21 22
# HERE indicates where this Makefile lives.  This can be used to indicate
# where sub-Makefiles are expected to be.  Currently has very limited usage,
# and should probably not be bothered with at all.
HERE=.

23 24 25 26
# INSTALL_PREFIX is for package builders so that they can configure
# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
# Normally it is left empty.
INSTALL_PREFIX=
27 28 29 30
INSTALLTOP=/usr/local/ssl

# Do not edit this manually. Use Configure --openssldir=DIR do change this!
OPENSSLDIR=/usr/local/ssl
31

32 33 34 35
# NO_IDEA - Define to build without the IDEA algorithm
# NO_RC4  - Define to build without the RC4 algorithm
# NO_RC2  - Define to build without the RC2 algorithm
# THREADS - Define when building with threads, you will probably also need any
36
#           system defines as well, i.e. _REENTERANT for Solaris 2.[34]
37 38 39 40
# TERMIO  - Define the termio terminal subsystem, needed if sgtty is missing.
# TERMIOS - Define the termios terminal subsystem, Silicon Graphics.
# LONGCRYPT - Define to use HPUX 10.x's long password modification to crypt(3).
# DEVRANDOM - Give this the value of the 'random device' if your OS supports
41 42
#           one.  32 bytes will be read from this when the random
#           number generator is initalised.
43
# SSL_FORBID_ENULL - define if you want the server to be not able to use the
44
#           NULL encryption ciphers.
45 46 47
#
# LOCK_DEBUG - turns on lots of lock debug output :-)
# REF_CHECK - turn on some xyz_free() assertions.
48
# REF_PRINT - prints some stuff on structure free.
49 50
# CRYPTO_MDEBUG - turns on my 'memory leak' detecting stuff
# MFUNC - Make all Malloc/Free/Realloc calls call
51 52 53 54 55
#       CRYPTO_malloc/CRYPTO_free/CRYPTO_realloc which can be setup to
#       call application defined callbacks via CRYPTO_set_mem_functions()
# MD5_ASM needs to be defined to use the x86 assembler for MD5
# SHA1_ASM needs to be defined to use the x86 assembler for SHA1
# RMD160_ASM needs to be defined to use the x86 assembler for RIPEMD160
56 57 58
# Do not define B_ENDIAN or L_ENDIAN if 'unsigned long' == 8.  It must
# equal 4.
# PKCS1_CHECK - pkcs1 tests.
59

60 61
CC= cc
CFLAG= -O
62
DEPFLAG= 
63
PEX_LIBS= 
64
EX_LIBS= 
65
EXE_EXT= 
66 67
ARFLAGS=
AR=ar $(ARFLAGS) r
68
RANLIB= ranlib
69
NM= nm
70
PERL= perl
71
TAR= tar
R
Richard Levitte 已提交
72
TARFLAGS= --no-recursion
73
MAKEDEPPROG=makedepend
D
Dr. Stephen Henson 已提交
74
LIBDIR=lib
75

76 77 78 79 80 81
# We let the C compiler driver to take care of .s files. This is done in
# order to be excused from maintaining a separate set of architecture
# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
# gcc, then the driver will automatically translate it to -xarch=v8plus
# and pass it down to assembler.
AS=$(CC) -c
82
ASFLAG=$(CFLAG)
83

84 85 86 87 88 89
# For x86 assembler: Set PROCESSOR to 386 if you want to support
# the 80386.
PROCESSOR=

# CPUID module collects small commonly used assembler snippets
CPUID_OBJ= 
90
BN_ASM= bn_asm.o
91
DES_ENC= des_enc.o fcrypt_b.o
A
Andy Polyakov 已提交
92
AES_ENC= aes_core.o aes_cbc.o
93 94 95 96 97 98 99
BF_ENC= bf_enc.o
CAST_ENC= c_enc.o
RC4_ENC= rc4_enc.o
RC5_ENC= rc5_enc.o
MD5_ASM_OBJ= 
SHA1_ASM_OBJ= 
RMD160_ASM_OBJ= 
100
WP_ASM_OBJ=
101
CMLL_ENC=
102
MODES_ASM_OBJ=
A
Andy Polyakov 已提交
103
PERLASM_SCHEME=
104

105 106
# KRB5 stuff
KRB5_INCLUDES=
107
LIBKRB5=
108

D
Dr. Stephen Henson 已提交
109 110 111 112
# Zlib stuff
ZLIB_INCLUDE=
LIBZLIB=

113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
# This is the location of fipscanister.o and friends.
# The FIPS module build will place it $(INSTALLTOP)/lib
# but since $(INSTALLTOP) can only take the default value
# when the module is built it will be in /usr/local/ssl/lib
# $(INSTALLTOP) for this build make be different so hard
# code the path.

FIPSLIBDIR=/usr/local/ssl/$(LIBDIR)/

# This is set to "y" if fipscanister.o is compiled internally as
# opposed to coming from an external validated location.

FIPSCANISTERINTERNAL=n

# The location of the library which contains fipscanister.o
# normally it will be libcrypto unless fipsdso is set in which
# case it will be libfips. If not compiling in FIPS mode at all
# this is empty making it a useful test for a FIPS compile.

FIPSCANLIB=

# Shared library base address. Currently only used on Windows.
#

BASEADDR=

DIRS=   crypto fips ssl engines apps test tools
140
ENGDIRS= ccgost
U
Ulf Möller 已提交
141 142
SHLIBDIRS= crypto ssl

143 144
# dirs in crypto to build
SDIRS=  \
145
	objects \
146
	md2 md4 md5 sha mdc2 hmac ripemd whrlpool \
A
Andy Polyakov 已提交
147
	des aes rc2 rc4 rc5 idea bf cast camellia seed modes \
148
	bn ec rsa dsa ecdsa dh ecdh dso engine \
149
	buffer bio stack lhash rand err \
150
	evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 \
151
	cms pqueue ts jpake store cmac
A
Andy Polyakov 已提交
152 153
# keep in mind that the above list is adjusted by ./Configure
# according to no-xxx arguments...
154

155 156 157 158
# tests to perform.  "alltests" is a special word indicating that all tests
# should be performed.
TESTS = alltests

B
Ben Laurie 已提交
159
MAKEFILE= Makefile
160

161
MANDIR=$(OPENSSLDIR)/man
162 163
MAN1=1
MAN3=3
164
MANSUFFIX=
U
Ulf Möller 已提交
165 166
HTMLSUFFIX=html
HTMLDIR=$(OPENSSLDIR)/html
167 168
SHELL=/bin/sh

169
TOP=    .
170
ONEDIRS=out tmp
U
Ulf Möller 已提交
171
EDIRS=  times doc bugs util include certs ms shlib mt demos perl sf dep VMS
172
WDIRS=  windows
173
LIBS=   libcrypto.a libssl.a
174 175 176 177
SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
SHARED_SSL=libssl$(SHLIB_EXT)
SHARED_LIBS=
SHARED_LIBS_LINK_EXTS=
178
SHARED_LDFLAGS=
179 180

GENERAL=        Makefile
R
Ralf S. Engelschall 已提交
181
BASENAME=       openssl
182 183 184
NAME=           $(BASENAME)-$(VERSION)
TARFILE=        $(NAME).tar
WTARFILE=       $(NAME)-win.tar
185
EXHEADER=       e_os2.h
186
HEADER=         e_os.h
187

188
all: Makefile build_all openssl.pc libssl.pc libcrypto.pc
189

A
Andy Polyakov 已提交
190
# as we stick to -e, CLEARENV ensures that local variables in lower
191 192 193 194 195
# Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn
# shell, which [annoyingly enough] terminates unset with error if VAR
# is not present:-( TOP= && unset TOP is tribute to HP-UX /bin/sh,
# which terminates unset with error if no variable was present:-(
CLEARENV=	TOP= && unset TOP $${LIB+LIB} $${LIBS+LIBS}	\
A
Andy Polyakov 已提交
196 197 198 199 200 201
		$${INCLUDE+INCLUDE} $${INCLUDES+INCLUDES}	\
		$${DIR+DIR} $${DIRS+DIRS} $${SRC+SRC}		\
		$${LIBSRC+LIBSRC} $${LIBOBJ+LIBOBJ} $${ALL+ALL}	\
		$${EXHEADER+EXHEADER} $${HEADER+HEADER}		\
		$${GENERAL+GENERAL} $${CFLAGS+CFLAGS}		\
		$${ASFLAGS+ASFLAGS} $${AFLAGS+AFLAGS}		\
A
Andy Polyakov 已提交
202 203
		$${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS}		\
		$${SHAREDCMD+SHAREDCMD} $${SHAREDFLAGS+SHAREDFLAGS}	\
A
Andy Polyakov 已提交
204 205
		$${SHARED_LIB+SHARED_LIB} $${LIBEXTRAS+LIBEXTRAS}

206 207 208 209
BUILDENV=	PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
		CC='$(CC)' CFLAG='$(CFLAG)' 			\
		AS='$(CC)' ASFLAG='$(CFLAG) -c'			\
		AR='$(AR)' NM='$(NM)' RANLIB='$(RANLIB)'	\
210
		CROSS_COMPILE='$(CROSS_COMPILE)'	\
211
		PERL='$(PERL)' ENGDIRS='$(ENGDIRS)'		\
D
Dr. Stephen Henson 已提交
212
		SDIRS='$(SDIRS)' LIBRPATH='$(INSTALLTOP)/$(LIBDIR)'	\
213 214
		INSTALL_PREFIX='$(INSTALL_PREFIX)'		\
		INSTALLTOP='$(INSTALLTOP)' OPENSSLDIR='$(OPENSSLDIR)'	\
D
Dr. Stephen Henson 已提交
215
		LIBDIR='$(LIBDIR)'				\
216 217 218 219 220
		MAKEDEPEND='$$$${TOP}/util/domd $$$${TOP} -MD $(MAKEDEPPROG)' \
		DEPFLAG='-DOPENSSL_NO_DEPRECATED $(DEPFLAG)'	\
		MAKEDEPPROG='$(MAKEDEPPROG)'			\
		SHARED_LDFLAGS='$(SHARED_LDFLAGS)'		\
		KRB5_INCLUDES='$(KRB5_INCLUDES)' LIBKRB5='$(LIBKRB5)'	\
D
Dr. Stephen Henson 已提交
221
		ZLIB_INCLUDE='$(ZLIB_INCLUDE)' LIBZLIB='$(LIBZLIB)'	\
222 223 224 225 226 227 228 229 230 231 232 233
		EXE_EXT='$(EXE_EXT)' SHARED_LIBS='$(SHARED_LIBS)'	\
		SHLIB_EXT='$(SHLIB_EXT)' SHLIB_TARGET='$(SHLIB_TARGET)'	\
		PEX_LIBS='$(PEX_LIBS)' EX_LIBS='$(EX_LIBS)'	\
		CPUID_OBJ='$(CPUID_OBJ)'			\
		BN_ASM='$(BN_ASM)' DES_ENC='$(DES_ENC)' 	\
		AES_ENC='$(AES_ENC)' CMLL_ENC='$(CMLL_ENC)'	\
		BF_ENC='$(BF_ENC)' CAST_ENC='$(CAST_ENC)'	\
		RC4_ENC='$(RC4_ENC)' RC5_ENC='$(RC5_ENC)'	\
		SHA1_ASM_OBJ='$(SHA1_ASM_OBJ)'			\
		MD5_ASM_OBJ='$(MD5_ASM_OBJ)'			\
		RMD160_ASM_OBJ='$(RMD160_ASM_OBJ)'		\
		WP_ASM_OBJ='$(WP_ASM_OBJ)'			\
234
		MODES_ASM_OBJ='$(MODES_ASM_OBJ)'		\
235
		PERLASM_SCHEME='$(PERLASM_SCHEME)'		\
236 237 238 239
		FIPSLIBDIR='${FIPSLIBDIR}'			\
		FIPSCANLIB="$${FIPSCANLIB:-$(FIPSCANLIB)}"	\
		FIPSCANISTERINTERNAL='${FIPSCANISTERINTERNAL}'	\
		FIPS_EX_OBJ='${FIPS_EX_OBJ}'	\
A
Andy Polyakov 已提交
240 241 242
		THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
# MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors,
# which in turn eliminates ambiguities in variable treatment with -e.
243

R
Richard Levitte 已提交
244 245 246 247 248 249 250 251 252 253 254 255 256
# BUILD_CMD is a generic macro to build a given target in a given
# subdirectory.  The target must be given through the shell variable
# `target' and the subdirectory to build in must be given through `dir'.
# This macro shouldn't be used directly, use RECURSIVE_BUILD_CMD or
# BUILD_ONE_CMD instead.
#
# BUILD_ONE_CMD is a macro to build a given target in a given
# subdirectory if that subdirectory is part of $(DIRS).  It requires
# exactly the same shell variables as BUILD_CMD.
#
# RECURSIVE_BUILD_CMD is a macro to build a given target in all
# subdirectories defined in $(DIRS).  It requires that the target
# is given through the shell variable `target'.
A
Andy Polyakov 已提交
257 258 259 260 261 262
BUILD_CMD=  if [ -d "$$dir" ]; then \
	    (	cd $$dir && echo "making $$target in $$dir..." && \
		$(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. DIR=$$dir $$target \
	    ) || exit 1; \
	    fi
RECURSIVE_BUILD_CMD=for dir in $(DIRS); do $(BUILD_CMD); done
263
BUILD_ONE_CMD=\
264
	if expr " $(DIRS) " : ".* $$dir " >/dev/null 2>&1; then \
265 266
		$(BUILD_CMD); \
	fi
267

268
reflect:
A
Andy Polyakov 已提交
269
	@[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)
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 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340

# FIXME

FIPS_EX_OBJ= ../crypto/aes/aes_cfb.o \
	../crypto/aes/aes_ecb.o \
	../crypto/aes/aes_ofb.o \
	../crypto/bn/bn_add.o \
	../crypto/bn/bn_blind.o \
	../crypto/bn/bn_ctx.o \
	../crypto/bn/bn_div.o \
	../crypto/bn/bn_exp2.o \
	../crypto/bn/bn_exp.o \
	../crypto/bn/bn_gcd.o \
	../crypto/bn/bn_lib.o \
	../crypto/bn/bn_mod.o \
	../crypto/bn/bn_mont.o \
	../crypto/bn/bn_mul.o \
	../crypto/bn/bn_prime.o \
	../crypto/bn/bn_rand.o \
	../crypto/bn/bn_recp.o \
	../crypto/bn/bn_shift.o \
	../crypto/bn/bn_sqr.o \
	../crypto/bn/bn_word.o \
	../crypto/bn/bn_x931p.o \
	../crypto/buffer/buf_str.o \
	../crypto/cryptlib.o \
	../crypto/des/cfb64ede.o \
	../crypto/des/cfb64enc.o \
	../crypto/des/cfb_enc.o \
	../crypto/des/ecb3_enc.o \
	../crypto/des/ofb64ede.o \
	../crypto/des/fcrypt.o \
	../crypto/des/set_key.o \
	../crypto/dh/dh_check.o \
	../crypto/dh/dh_gen.o \
	../crypto/dh/dh_key.o \
	../crypto/dsa/dsa_gen.o \
	../crypto/dsa/dsa_key.o \
	../crypto/dsa/dsa_ossl.o \
	../crypto/dsa/dsa_sign.o \
	../crypto/dsa/dsa_vrf.o \
	../crypto/evp/e_aes.o \
	../crypto/evp/e_des3.o \
	../crypto/evp/m_sha1.o \
	../crypto/hmac/hmac.o \
	../crypto/mem.o \
	../crypto/modes/cfb128.o \
	../crypto/modes/ctr128.o \
	../crypto/modes/ofb128.o \
	../crypto/rand/md_rand.o \
	../crypto/rand/rand_egd.o \
	../crypto/rand/randfile.o \
	../crypto/rand/rand_lib.o \
	../crypto/rand/rand_os2.o \
	../crypto/rand/rand_unix.o \
	../crypto/rand/rand_win.o \
	../crypto/rsa/rsa_eay.o \
	../crypto/rsa/rsa_gen.o \
	../crypto/rsa/rsa_crpt.o \
	../crypto/rsa/rsa_none.o \
	../crypto/rsa/rsa_oaep.o \
	../crypto/rsa/rsa_pk1.o \
	../crypto/rsa/rsa_pss.o \
	../crypto/rsa/rsa_ssl.o \
	../crypto/rsa/rsa_x931.o \
	../crypto/sha/sha1dgst.o \
	../crypto/sha/sha256.o \
	../crypto/sha/sha512.o \
	../crypto/uid.o

341
sub_all: build_all
342 343
build_all: build_libs build_apps build_tests build_tools

344 345 346 347
build_libs: build_crypto build_fips build_ssl build_engines

build_fips:
	@dir=fips; target=all; [ -z "$(FIPSCANLIB)" ] || $(BUILD_ONE_CMD)
348 349

build_crypto:
350 351 352 353 354 355 356
	if [ -n "$(FIPSCANLIB)" ]; then \
		EXCL_OBJ='$(AES_ENC) $(BN_ASM) $(DES_ENC) $(CPUID_OBJ) $(SHA1_ASM_OBJ) $(FIPS_EX_OBJ)' ; export EXCL_OBJ ; \
		ARX='$(PERL) $${TOP}/util/arx.pl $(AR)' ; \
	else \
		ARX='${AR}' ; \
	fi ; export ARX ; \
		dir=crypto; target=all; $(BUILD_ONE_CMD)
357
build_ssl:
358
	@dir=ssl; target=all; $(BUILD_ONE_CMD)
359
build_engines:
360
	@dir=engines; target=all; $(BUILD_ONE_CMD)
361
build_apps:
362
	@dir=apps; target=all; $(BUILD_ONE_CMD)
363
build_tests:
364
	@dir=test; target=all; $(BUILD_ONE_CMD)
365
build_tools:
366
	@dir=tools; target=all; $(BUILD_ONE_CMD)
367 368 369

all_testapps: build_libs build_testapps
build_testapps:
370
	@dir=crypto; target=testapps; $(BUILD_ONE_CMD)
371

372
libcrypto$(SHLIB_EXT): libcrypto.a
373
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
374
		$(MAKE) SHLIBDIRS=crypto build-shared; \
375 376
	else \
		echo "There's no support for shared libraries on this platform" >&2; \
377
		exit 1; \
378
	fi
379

380
libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a
381
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
382
		$(MAKE) SHLIBDIRS=ssl SHLIBDEPS='-lcrypto' build-shared; \
383 384
	else \
		echo "There's no support for shared libraries on this platform" >&2; \
385
		exit 1; \
386
	fi
387 388

clean-shared:
389
	@set -e; for i in $(SHLIBDIRS); do \
390 391 392 393 394 395 396
		if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
			tmp="$(SHARED_LIBS_LINK_EXTS)"; \
			for j in $${tmp:-x}; do \
				( set -x; rm -f lib$$i$$j ); \
			done; \
		fi; \
		( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
397
		if [ "$(PLATFORM)" = "Cygwin" ]; then \
398 399
			( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
		fi; \
400
	done
401

402
link-shared:
403
	@ set -e; for i in $(SHLIBDIRS); do \
404
		$(MAKE) -f $(HERE)/Makefile.shared -e $(BUILDENV) \
405 406
			LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \
			LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \
407
			symlink.$(SHLIB_TARGET); \
408
		libs="$$libs -l$$i"; \
409 410
	done

411 412 413
build-shared: do_$(SHLIB_TARGET) link-shared

do_$(SHLIB_TARGET):
414
	@ set -e; libs='-L. $(SHLIBDEPS)'; for i in $(SHLIBDIRS); do \
D
Dr. Stephen Henson 已提交
415
		if [ "$$i" = "ssl" -a -n "$(LIBKRB5)" ]; then \
416 417
			libs="$(LIBKRB5) $$libs"; \
		fi; \
A
Andy Polyakov 已提交
418
		$(CLEARENV) && $(MAKE) -f Makefile.shared -e $(BUILDENV) \
419 420
			LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \
			LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \
421 422
			LIBDEPS="$$libs $(EX_LIBS)" \
			link_a.$(SHLIB_TARGET); \
423
		libs="-l$$i $$libs"; \
424 425
	done

426 427 428
libcrypto.pc: Makefile
	@ ( echo 'prefix=$(INSTALLTOP)'; \
	    echo 'exec_prefix=$${prefix}'; \
D
Dr. Stephen Henson 已提交
429
	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
430 431 432 433 434 435 436 437 438 439 440 441
	    echo 'includedir=$${prefix}/include'; \
	    echo ''; \
	    echo 'Name: OpenSSL-libcrypto'; \
	    echo 'Description: OpenSSL cryptography library'; \
	    echo 'Version: '$(VERSION); \
	    echo 'Requires: '; \
	    echo 'Libs: -L$${libdir} -lcrypto $(EX_LIBS)'; \
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc

libssl.pc: Makefile
	@ ( echo 'prefix=$(INSTALLTOP)'; \
	    echo 'exec_prefix=$${prefix}'; \
D
Dr. Stephen Henson 已提交
442
	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
443 444 445 446 447 448 449 450 451
	    echo 'includedir=$${prefix}/include'; \
	    echo ''; \
	    echo 'Name: OpenSSL'; \
	    echo 'Description: Secure Sockets Layer and cryptography libraries'; \
	    echo 'Version: '$(VERSION); \
	    echo 'Requires: '; \
	    echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc

B
Ben Laurie 已提交
452
openssl.pc: Makefile
453 454
	@ ( echo 'prefix=$(INSTALLTOP)'; \
	    echo 'exec_prefix=$${prefix}'; \
D
Dr. Stephen Henson 已提交
455
	    echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
456 457 458 459 460 461 462
	    echo 'includedir=$${prefix}/include'; \
	    echo ''; \
	    echo 'Name: OpenSSL'; \
	    echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
	    echo 'Version: '$(VERSION); \
	    echo 'Requires: '; \
	    echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
463
	    echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
464

465 466
Makefile: Makefile.org Configure config
	@echo "Makefile is older than Makefile.org, Configure or config."
467
	@echo "Reconfigure the source tree (via './config' or 'perl Configure'), please."
468 469
	@false

470
libclean:
471
	rm -f *.map *.so *.so.* *.dll engines/*.so engines/*.dll *.a engines/*.a */lib */*/lib
472

473
clean:	libclean
474
	rm -f shlib/*.o *.o core a.out fluff rehash.time testlog make.log cctest cctest.c
A
Andy Polyakov 已提交
475 476
	@set -e; target=clean; $(RECURSIVE_BUILD_CMD)
	rm -f $(LIBS)
477
	rm -f openssl.pc libssl.pc libcrypto.pc
478
	rm -f speed.* .pure
479
	rm -f $(TARFILE)
480
	@set -e; for i in $(ONEDIRS) ;\
481
	do \
482
	rm -fr $$i/*; \
483 484 485
	done

makefile.one: files
486
	$(PERL) util/mk1mf.pl >makefile.one; \
487 488
	sh util/do_ms.sh

U
Ulf Möller 已提交
489
files:
B
Ben Laurie 已提交
490
	$(PERL) $(TOP)/util/files.pl Makefile > $(TOP)/MINFO
A
Andy Polyakov 已提交
491
	@set -e; target=files; $(RECURSIVE_BUILD_CMD)
492 493

links:
494
	@$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
495
	@$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
A
Andy Polyakov 已提交
496
	@set -e; target=links; $(RECURSIVE_BUILD_CMD)
497

498 499
gentests:
	@(cd test && echo "generating dummy tests (if needed)..." && \
500
	$(CLEARENV) && $(MAKE) -e $(BUILDENV) TESTS='$(TESTS)' OPENSSL_DEBUG_MEMORY=on generate );
501

502
dclean:
503
	rm -rf *.bak include/openssl certs/.0
A
Andy Polyakov 已提交
504
	@set -e; target=dclean; $(RECURSIVE_BUILD_CMD)
505

506 507
rehash: rehash.time
rehash.time: certs apps
508
	@if [ -z "$(CROSS_COMPILE)" ]; then \
509 510 511 512 513 514 515 516
		(OPENSSL="`pwd`/util/opensslwrap.sh"; \
		[ -x "apps/openssl.exe" ] && OPENSSL="apps/openssl.exe" || :; \
		OPENSSL_DEBUG_MEMORY=on; \
		export OPENSSL OPENSSL_DEBUG_MEMORY; \
		$(PERL) tools/c_rehash certs) && \
		touch rehash.time; \
	else :; fi

517
test:   tests
518

519
tests: rehash
520
	@(cd test && echo "testing..." && \
D
Dr. Stephen Henson 已提交
521 522
	$(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. TESTS='$(TESTS)' OPENSSL_DEBUG_MEMORY=on OPENSSL_CONF=../apps/openssl.cnf tests );
	OPENSSL_CONF=apps/openssl.cnf util/opensslwrap.sh version -a
523

524 525 526
report:
	@$(PERL) util/selftest.pl

527
depend:
A
Andy Polyakov 已提交
528
	@set -e; target=depend; $(RECURSIVE_BUILD_CMD)
529 530

lint:
A
Andy Polyakov 已提交
531
	@set -e; target=lint; $(RECURSIVE_BUILD_CMD)
532 533

tags:
B
Ben Laurie 已提交
534 535
	rm -f TAGS
	find . -name '[^.]*.[ch]' | xargs etags -a
536 537

errors:
538
	$(PERL) util/mkerr.pl -recurse -write
539
	(cd engines; $(MAKE) PERL=$(PERL) errors)
540
	$(PERL) util/ck_errf.pl -strict */*.c */*/*.c
541

542 543 544
stacks:
	$(PERL) util/mkstack.pl -write

545
util/libeay.num::
546
	$(PERL) util/mkdef.pl crypto update
547 548

util/ssleay.num::
549
	$(PERL) util/mkdef.pl ssl update
550

551
crypto/objects/obj_dat.h: crypto/objects/obj_dat.pl crypto/objects/obj_mac.h
552
	$(PERL) crypto/objects/obj_dat.pl crypto/objects/obj_mac.h crypto/objects/obj_dat.h
B
typo  
Bodo Möller 已提交
553
crypto/objects/obj_mac.h: crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num
554
	$(PERL) crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num crypto/objects/obj_mac.h
555
crypto/objects/obj_xref.h: crypto/objects/objxref.pl crypto/objects/obj_xref.txt crypto/objects/obj_mac.num
556
	$(PERL) crypto/objects/objxref.pl crypto/objects/obj_mac.num crypto/objects/obj_xref.txt >crypto/objects/obj_xref.h
557

558 559 560
apps/openssl-vms.cnf: apps/openssl.cnf
	$(PERL) VMS/VMSify-conf.pl < apps/openssl.cnf > apps/openssl-vms.cnf

561 562 563 564
crypto/bn/bn_prime.h: crypto/bn/bn_prime.pl
	$(PERL) crypto/bn/bn_prime.pl >crypto/bn/bn_prime.h


565
TABLE: Configure
B
Bodo Möller 已提交
566
	(echo 'Output of `Configure TABLE'"':"; \
567
	$(PERL) Configure TABLE) > TABLE
568

569
update: errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h crypto/objects/obj_xref.h apps/openssl-vms.cnf crypto/bn/bn_prime.h TABLE depend
570

571 572 573 574 575
# Build distribution tar-file. As the list of files returned by "find" is
# pretty long, on several platforms a "too many arguments" error or similar
# would occur. Therefore the list of files is temporarily stored into a file
# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal
# tar does not support the --files-from option.
576
tar:
577 578 579
	find . -type d -print | xargs chmod 755
	find . -type f -print | xargs chmod a+r
	find . -type f -perm -0100 -print | xargs chmod a+x
580 581
	find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE | sort > ../$(TARFILE).list; \
	$(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list -cvf - | \
582
	tardy --user_number=0  --user_name=openssl \
R
Ralf S. Engelschall 已提交
583 584
	      --group_number=0 --group_name=openssl \
	      --prefix=openssl-$(VERSION) - |\
585
	gzip --best >../$(TARFILE).gz; \
586
	rm -f ../$(TARFILE).list; \
587
	ls -l ../$(TARFILE).gz
588

589 590
tar-snap:
	@$(TAR) $(TARFLAGS) -cvf - \
591
		`find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \! -name '*.so' \! -name '*.so.*'  \! -name 'openssl' \! -name '*test' \! -name '.#*' \! -name '*~' | sort` |\
592 593 594 595 596
	tardy --user_number=0  --user_name=openssl \
	      --group_number=0 --group_name=openssl \
	      --prefix=openssl-$(VERSION) - > ../$(TARFILE);\
	ls -l ../$(TARFILE)

597
dist:   
598
	$(PERL) Configure dist
599
	@$(MAKE) dist_pem_h
600 601
	@$(MAKE) SDIRS='$(SDIRS)' clean
	@$(MAKE) TAR='$(TAR)' TARFLAGS='$(TARFLAGS)' tar
602 603

dist_pem_h:
A
Andy Polyakov 已提交
604
	(cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
605

606 607 608
install: all install_docs install_sw

install_sw:
B
Bodo Möller 已提交
609
	@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
D
Dr. Stephen Henson 已提交
610 611 612
		$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \
		$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines \
		$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig \
B
Bodo Möller 已提交
613 614 615
		$(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
		$(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
		$(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
616
		$(INSTALL_PREFIX)$(OPENSSLDIR)/private
617
	@set -e; headerlist="$(EXHEADER)"; for i in $$headerlist;\
B
Bodo Möller 已提交
618 619 620 621
	do \
	(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
	done;
A
Andy Polyakov 已提交
622
	@set -e; target=install; $(RECURSIVE_BUILD_CMD)
623
	@set -e; for i in $(LIBS) ;\
624
	do \
625 626
		if [ -f "$$i" ]; then \
		(       echo installing $$i; \
D
Dr. Stephen Henson 已提交
627 628 629 630
			cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
			$(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
			chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
			mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i ); \
L
Lutz Jänicke 已提交
631 632
		fi; \
	done;
633
	@set -e; if [ -n "$(SHARED_LIBS)" ]; then \
634 635 636
		tmp="$(SHARED_LIBS)"; \
		for i in $${tmp:-x}; \
		do \
637
			if [ -f "$$i" -o -f "$$i.a" ]; then \
638
			(       echo installing $$i; \
639
				if [ "$(PLATFORM)" != "Cygwin" ]; then \
D
Dr. Stephen Henson 已提交
640 641 642
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
					chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
643
				else \
644
					c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \
645 646
					cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
					chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
647
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \
D
Dr. Stephen Henson 已提交
648 649 650
					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
					chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
					mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
651
				fi ); \
652 653 654 655 656 657 658 659 660 661
				if expr $(PLATFORM) : 'mingw' > /dev/null; then \
				(	case $$i in \
						*crypto*) i=libeay32.dll;; \
						*ssl*)    i=ssleay32.dll;; \
					esac; \
					echo installing $$i; \
	 				cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \
	 				chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \
	 				mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i ); \
				fi; \
L
Lutz Jänicke 已提交
662
			fi; \
663 664
		done; \
		(	here="`pwd`"; \
D
Dr. Stephen Henson 已提交
665
			cd $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR); \
666
			$(MAKE) -f $$here/Makefile HERE="$$here" link-shared ); \
667 668 669 670
		if [ "$(INSTALLTOP)" != "/usr" ]; then \
			echo 'OpenSSL shared libraries have been installed in:'; \
			echo '  $(INSTALLTOP)'; \
			echo ''; \
671
			sed -e '1,/^$$/d' doc/openssl-shared.txt; \
672
		fi; \
673
	fi
D
Dr. Stephen Henson 已提交
674 675 676 677 678 679
	cp libcrypto.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libcrypto.pc
	cp libssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libssl.pc
	cp openssl.pc $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig
	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc
680

U
Ulf Möller 已提交
681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696
install_html_docs:
	here="`pwd`"; \
	for subdir in apps crypto ssl; do \
		mkdir -p $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \
		for i in doc/$$subdir/*.pod; do \
			fn=`basename $$i .pod`; \
			echo "installing html/$$fn.$(HTMLSUFFIX)"; \
			cat $$i \
			| sed -r 's/L<([^)]*)(\([0-9]\))?\|([^)]*)(\([0-9]\))?>/L<\1|\3>/g' \
			| pod2html --podroot=doc --htmlroot=.. --podpath=apps:crypto:ssl \
			| sed -r 's/<!DOCTYPE.*//g' \
			> $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir/$$fn.$(HTMLSUFFIX); \
			$(PERL) util/extract-names.pl < $$i | \
				grep -v $$filecase "^$$fn\$$" | \
				(cd $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \
				 while read n; do \
D
Dr. Stephen Henson 已提交
697
					PLATFORM=$(PLATFORM) $$here/util/point.sh $$fn.$(HTMLSUFFIX) "$$n".$(HTMLSUFFIX); \
U
Ulf Möller 已提交
698 699 700 701
				 done); \
		done; \
	done

702 703
install_docs:
	@$(PERL) $(TOP)/util/mkdir-p.pl \
704 705 706 707
		$(INSTALL_PREFIX)$(MANDIR)/man1 \
		$(INSTALL_PREFIX)$(MANDIR)/man3 \
		$(INSTALL_PREFIX)$(MANDIR)/man5 \
		$(INSTALL_PREFIX)$(MANDIR)/man7
708
	@pod2man="`cd ./util; ./pod2mantest $(PERL)`"; \
709 710
	here="`pwd`"; \
	filecase=; \
A
Andy Polyakov 已提交
711
	if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" -o "$(PLATFORM)" = "mingw" ]; then \
712 713
		filecase=-i; \
	fi; \
714
	set -e; for i in doc/apps/*.pod; do \
715
		fn=`basename $$i .pod`; \
716
		sec=`$(PERL) util/extract-section.pl 1 < $$i`; \
717
		echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
718
		(cd `$(PERL) util/dirname.pl $$i`; \
719
		sh -c "$$pod2man \
720 721
			--section=$$sec --center=OpenSSL \
			--release=$(VERSION) `basename $$i`") \
722
			>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
723
		$(PERL) util/extract-names.pl < $$i | \
724 725
			(grep -v $$filecase "^$$fn\$$"; true) | \
			(grep -v "[	]"; true) | \
726 727
			(cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \
			 while read n; do \
D
Dr. Stephen Henson 已提交
728
				PLATFORM=$(PLATFORM) $$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \
729
			 done); \
730
	done; \
731
	set -e; for i in doc/crypto/*.pod doc/ssl/*.pod; do \
732
		fn=`basename $$i .pod`; \
733
		sec=`$(PERL) util/extract-section.pl 3 < $$i`; \
734
		echo "installing man$$sec/$$fn.$${sec}$(MANSUFFIX)"; \
735
		(cd `$(PERL) util/dirname.pl $$i`; \
736
		sh -c "$$pod2man \
737 738
			--section=$$sec --center=OpenSSL \
			--release=$(VERSION) `basename $$i`") \
739
			>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/$$fn.$${sec}$(MANSUFFIX); \
740
		$(PERL) util/extract-names.pl < $$i | \
741 742
			(grep -v $$filecase "^$$fn\$$"; true) | \
			(grep -v "[	]"; true) | \
743 744
			(cd $(INSTALL_PREFIX)$(MANDIR)/man$$sec/; \
			 while read n; do \
D
Dr. Stephen Henson 已提交
745
				PLATFORM=$(PLATFORM) $$here/util/point.sh $$fn.$${sec}$(MANSUFFIX) "$$n".$${sec}$(MANSUFFIX); \
746
			 done); \
747
	done
748 749

# DO NOT DELETE THIS LINE -- make depend depends on it.