Makefile.org revision 101613
1##
2## Makefile for OpenSSL
3##
4
5VERSION=
6MAJOR=
7MINOR=
8SHLIB_VERSION_NUMBER=
9SHLIB_VERSION_HISTORY=
10SHLIB_MAJOR=
11SHLIB_MINOR=
12SHLIB_EXT=
13PLATFORM=dist
14OPTIONS=
15CONFIGURE_ARGS=
16SHLIB_TARGET=
17
18# INSTALL_PREFIX is for package builders so that they can configure
19# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
20# Normally it is left empty.
21INSTALL_PREFIX=
22INSTALLTOP=/usr/local/ssl
23
24# Do not edit this manually. Use Configure --openssldir=DIR do change this!
25OPENSSLDIR=/usr/local/ssl
26
27# RSAref  - Define if we are to link with RSAref.
28# NO_IDEA - Define to build without the IDEA algorithm
29# NO_RC4  - Define to build without the RC4 algorithm
30# NO_RC2  - Define to build without the RC2 algorithm
31# THREADS - Define when building with threads, you will probably also need any
32#           system defines as well, i.e. _REENTERANT for Solaris 2.[34]
33# TERMIO  - Define the termio terminal subsystem, needed if sgtty is missing.
34# TERMIOS - Define the termios terminal subsystem, Silicon Graphics.
35# LONGCRYPT - Define to use HPUX 10.x's long password modification to crypt(3).
36# DEVRANDOM - Give this the value of the 'random device' if your OS supports
37#           one.  32 bytes will be read from this when the random
38#           number generator is initalised.
39# SSL_FORBID_ENULL - define if you want the server to be not able to use the
40#           NULL encryption ciphers.
41#
42# LOCK_DEBUG - turns on lots of lock debug output :-)
43# REF_CHECK - turn on some xyz_free() assertions.
44# REF_PRINT - prints some stuff on structure free.
45# CRYPTO_MDEBUG - turns on my 'memory leak' detecting stuff
46# MFUNC - Make all Malloc/Free/Realloc calls call
47#       CRYPTO_malloc/CRYPTO_free/CRYPTO_realloc which can be setup to
48#       call application defined callbacks via CRYPTO_set_mem_functions()
49# MD5_ASM needs to be defined to use the x86 assembler for MD5
50# SHA1_ASM needs to be defined to use the x86 assembler for SHA1
51# RMD160_ASM needs to be defined to use the x86 assembler for RIPEMD160
52# Do not define B_ENDIAN or L_ENDIAN if 'unsigned long' == 8.  It must
53# equal 4.
54# PKCS1_CHECK - pkcs1 tests.
55
56CC= gcc
57#CFLAG= -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall -Wuninitialized -DSHA1_ASM -DMD5_ASM -DRMD160_ASM
58CFLAG= -DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall -DSHA1_ASM -DMD5_ASM -DRMD160_ASM
59DEPFLAG= 
60PEX_LIBS= 
61EX_LIBS= 
62EXE_EXT= 
63AR=ar r
64RANLIB= ranlib
65PERL= perl
66TAR= tar
67TARFLAGS= --no-recursion
68
69# Set BN_ASM to bn_asm.o if you want to use the C version
70BN_ASM= bn_asm.o
71#BN_ASM= bn_asm.o
72#BN_ASM= asm/bn86-elf.o	# elf, linux-elf
73#BN_ASM= asm/bn86-sol.o # solaris
74#BN_ASM= asm/bn86-out.o # a.out, FreeBSD
75#BN_ASM= asm/bn86bsdi.o # bsdi
76#BN_ASM= asm/alpha.o    # DEC Alpha
77#BN_ASM= asm/pa-risc2.o # HP-UX PA-RISC
78#BN_ASM= asm/r3000.o    # SGI MIPS cpu
79#BN_ASM= asm/sparc.o    # Sun solaris/SunOS
80#BN_ASM= asm/bn-win32.o # Windows 95/NT
81#BN_ASM= asm/x86w16.o   # 16 bit code for Windows 3.1/DOS
82#BN_ASM= asm/x86w32.o   # 32 bit code for Windows 3.1
83
84# For x86 assembler: Set PROCESSOR to 386 if you want to support
85# the 80386.
86PROCESSOR=
87
88# Set DES_ENC to des_enc.o if you want to use the C version
89#There are 4 x86 assember options.
90DES_ENC= asm/dx86-out.o asm/yx86-out.o
91#DES_ENC= des_enc.o fcrypt_b.o          # C
92#DES_ENC= asm/dx86-elf.o asm/yx86-elf.o # elf
93#DES_ENC= asm/dx86-sol.o asm/yx86-sol.o # solaris
94#DES_ENC= asm/dx86-out.o asm/yx86-out.o # a.out, FreeBSD
95#DES_ENC= asm/dx86bsdi.o asm/yx86bsdi.o # bsdi
96
97# Set BF_ENC to bf_enc.o if you want to use the C version
98#There are 4 x86 assember options.
99BF_ENC= asm/bx86-out.o
100#BF_ENC= bf_enc.o
101#BF_ENC= asm/bx86-elf.o # elf
102#BF_ENC= asm/bx86-sol.o # solaris
103#BF_ENC= asm/bx86-out.o # a.out, FreeBSD
104#BF_ENC= asm/bx86bsdi.o # bsdi
105
106# Set CAST_ENC to c_enc.o if you want to use the C version
107#There are 4 x86 assember options.
108CAST_ENC= asm/cx86-out.o
109#CAST_ENC= c_enc.o
110#CAST_ENC= asm/cx86-elf.o # elf
111#CAST_ENC= asm/cx86-sol.o # solaris
112#CAST_ENC= asm/cx86-out.o # a.out, FreeBSD
113#CAST_ENC= asm/cx86bsdi.o # bsdi
114
115# Set RC4_ENC to rc4_enc.o if you want to use the C version
116#There are 4 x86 assember options.
117RC4_ENC= asm/rx86-out.o
118#RC4_ENC= rc4_enc.o
119#RC4_ENC= asm/rx86-elf.o # elf
120#RC4_ENC= asm/rx86-sol.o # solaris
121#RC4_ENC= asm/rx86-out.o # a.out, FreeBSD
122#RC4_ENC= asm/rx86bsdi.o # bsdi
123
124# Set RC5_ENC to rc5_enc.o if you want to use the C version
125#There are 4 x86 assember options.
126RC5_ENC= asm/r586-out.o
127#RC5_ENC= rc5_enc.o
128#RC5_ENC= asm/r586-elf.o # elf
129#RC5_ENC= asm/r586-sol.o # solaris
130#RC5_ENC= asm/r586-out.o # a.out, FreeBSD
131#RC5_ENC= asm/r586bsdi.o # bsdi
132
133# Also need MD5_ASM defined
134MD5_ASM_OBJ= asm/mx86-out.o
135#MD5_ASM_OBJ= asm/mx86-elf.o        # elf
136#MD5_ASM_OBJ= asm/mx86-sol.o        # solaris
137#MD5_ASM_OBJ= asm/mx86-out.o        # a.out, FreeBSD
138#MD5_ASM_OBJ= asm/mx86bsdi.o        # bsdi
139
140# Also need SHA1_ASM defined
141SHA1_ASM_OBJ= asm/sx86-out.o
142#SHA1_ASM_OBJ= asm/sx86-elf.o       # elf
143#SHA1_ASM_OBJ= asm/sx86-sol.o       # solaris
144#SHA1_ASM_OBJ= asm/sx86-out.o       # a.out, FreeBSD
145#SHA1_ASM_OBJ= asm/sx86bsdi.o       # bsdi
146
147# Also need RMD160_ASM defined
148RMD160_ASM_OBJ= asm/rm86-out.o
149#RMD160_ASM_OBJ= asm/rm86-elf.o       # elf
150#RMD160_ASM_OBJ= asm/rm86-sol.o       # solaris
151#RMD160_ASM_OBJ= asm/rm86-out.o       # a.out, FreeBSD
152#RMD160_ASM_OBJ= asm/rm86bsdi.o       # bsdi
153
154# When we're prepared to use shared libraries in the programs we link here
155# we might set SHLIB_MARK to '$(SHARED_LIBS)'.
156SHLIB_MARK=
157
158DIRS=   crypto ssl rsaref $(SHLIB_MARK) apps test tools
159SHLIBDIRS= crypto ssl
160
161# dirs in crypto to build
162SDIRS=  \
163	md2 md4 md5 sha mdc2 hmac ripemd \
164	des rc2 rc4 rc5 idea bf cast \
165	bn rsa dsa dh dso \
166	buffer bio stack lhash rand err objects \
167	evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp
168
169MAKEFILE= Makefile.ssl
170MAKE=     make -f Makefile.ssl
171
172MANDIR=$(OPENSSLDIR)/man
173MAN1=1
174MAN3=3
175SHELL=/bin/sh
176
177TOP=    .
178ONEDIRS=out tmp
179EDIRS=  times doc bugs util include certs ms shlib mt demos perl sf dep VMS
180WDIRS=  windows
181LIBS=   libcrypto.a libssl.a
182SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
183SHARED_SSL=libssl$(SHLIB_EXT)
184SHARED_LIBS=
185SHARED_LIBS_LINK_EXTS=
186SHARED_LDFLAGS=
187
188GENERAL=        Makefile
189BASENAME=       openssl
190NAME=           $(BASENAME)-$(VERSION)
191TARFILE=        $(NAME).tar
192WTARFILE=       $(NAME)-win.tar
193EXHEADER=       e_os.h e_os2.h
194HEADER=         e_os.h
195
196# When we're prepared to use shared libraries in the programs we link here
197# we might remove 'clean-shared' from the targets to perform at this stage
198
199all: clean-shared Makefile.ssl sub_all
200
201sub_all:
202	@for i in $(DIRS); \
203	do \
204	if [ -d "$$i" ]; then \
205		(cd $$i && echo "making all in $$i..." && \
206		$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_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}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' EXE_EXT='${EXE_EXT}' all ) || exit 1; \
207	else \
208		$(MAKE) $$i; \
209	fi; \
210	done; \
211	if echo "$(DIRS)" | \
212	    egrep '(^| )(crypto|ssl)( |$$)' > /dev/null 2>&1 && \
213	   [ -n "$(SHARED_LIBS)" ]; then \
214		$(MAKE) $(SHARED_LIBS); \
215	fi
216
217libcrypto$(SHLIB_EXT): libcrypto.a
218	@if [ "$(SHLIB_TARGET)" != "" ]; then \
219		$(MAKE) SHLIBDIRS=crypto build-shared; \
220	else \
221		echo "There's no support for shared libraries on this platform" >&2; \
222	fi
223libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a
224	@if [ "$(SHLIB_TARGET)" != "" ]; then \
225		$(MAKE) SHLIBDIRS=ssl SHLIBDEPS='-lcrypto' build-shared; \
226	else \
227		echo "There's no support for shared libraries on this platform" >&2; \
228	fi
229
230clean-shared:
231	@for i in $(SHLIBDIRS); do \
232		if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
233			tmp="$(SHARED_LIBS_LINK_EXTS)"; \
234			for j in $${tmp:-x}; do \
235				( set -x; rm -f lib$$i$$j ); \
236			done; \
237		fi; \
238		( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
239		if [ "$(PLATFORM)" = "Cygwin" ]; then \
240			( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
241		fi; \
242	done
243
244link-shared:
245	@if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
246		tmp="$(SHARED_LIBS_LINK_EXTS)"; \
247		for i in $(SHLIBDIRS); do \
248			prev=lib$$i$(SHLIB_EXT); \
249			for j in $${tmp:-x}; do \
250				( set -x; \
251				rm -f lib$$i$$j; ln -s $$prev lib$$i$$j ); \
252				prev=lib$$i$$j; \
253			done; \
254		done; \
255	fi
256
257build-shared: clean-shared do_$(SHLIB_TARGET) link-shared
258
259do_bsd-gcc-shared: do_gnu-shared
260do_linux-shared: do_gnu-shared
261do_gnu-shared:
262	libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
263	( set -x; ${CC} ${SHARED_LDFLAGS} \
264		-shared -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
265		-Wl,-soname=lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
266		-Wl,-Bsymbolic \
267		-Wl,--whole-archive lib$$i.a \
268		-Wl,--no-whole-archive $$libs ${EX_LIBS} -lc ) || exit 1; \
269	libs="$$libs -l$$i"; \
270	done
271
272DETECT_GNU_LD=${CC} -v 2>&1 | grep '^gcc' >/dev/null 2>&1 && \
273	collect2=`gcc -print-prog-name=collect2 2>&1` && \
274	[ -n "$$collect2" ] && \
275	my_ld=`$$collect2 --help 2>&1 | grep Usage: | sed 's/^Usage: *\([^ ][^ ]*\).*/\1/'` && \
276	[ -n "$$my_ld" ] && \
277	$$my_ld -v 2>&1 | grep 'GNU ld' >/dev/null 2>&1
278
279# For Darwin AKA Mac OS/X (dyld)
280do_darwin-shared: 
281	libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
282	( set -x ; ${CC} --verbose -dynamiclib -o lib$$i${SHLIB_EXT} \
283		lib$$i.a $$libs -all_load -current_version ${SHLIB_MAJOR}.${SHLIB_MINOR} \
284		-compatibility_version ${SHLIB_MAJOR}.`echo ${SHLIB_MINOR} | cut -d. -f1` \
285		-install_name ${INSTALLTOP}/lib/lib$$i${SHLIB_EXT} ) || exit 1; \
286	libs="$$libs -l`basename $$i${SHLIB_EXT} .dylib`"; \
287	echo "" ; \
288	done
289
290do_cygwin-shared:
291	libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
292	( set -x; ${CC}  -shared -o cyg$$i.dll \
293		-Wl,-Bsymbolic \
294		-Wl,--whole-archive lib$$i.a \
295		-Wl,--out-implib,lib$$i.dll.a \
296		-Wl,--no-whole-archive $$libs ) || exit 1; \
297	libs="$$libs -l$$i"; \
298	done
299
300# This assumes that GNU utilities are *not* used
301do_alpha-osf1-shared:
302	if ${DETECT_GNU_LD}; then \
303		$(MAKE) do_gnu-shared; \
304	else \
305		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
306		( set -x; ${CC} ${SHARED_LDFLAGS} \
307			-shared -o lib$$i.so \
308			-set_version "${SHLIB_VERSION_HISTORY}${SHLIB_VERSION_NUMBER}" \
309			-all lib$$i.a -none $$libs ${EX_LIBS} -lc ) || exit 1; \
310		libs="$$libs -l$$i"; \
311		done; \
312	fi
313
314# This assumes that GNU utilities are *not* used
315# The difference between alpha-osf1-shared and tru64-shared is the `-msym'
316# option passed to the linker.
317do_tru64-shared:
318	if ${DETECT_GNU_LD}; then \
319		$(MAKE) do_gnu-shared; \
320	else \
321		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
322		( set -x; ${CC} ${SHARED_LDFLAGS} \
323			-shared -msym -o lib$$i.so \
324			-set_version "${SHLIB_VERSION_HISTORY}${SHLIB_VERSION_NUMBER}" \
325			-all lib$$i.a -none $$libs ${EX_LIBS} -lc ) || exit 1; \
326		libs="$$libs -l$$i"; \
327		done; \
328	fi
329
330# This assumes that GNU utilities are *not* used
331# The difference between tru64-shared and tru64-shared-rpath is the
332# -rpath ${INSTALLTOP}/lib passed to the linker.
333do_tru64-shared-rpath:
334	if ${DETECT_GNU_LD}; then \
335		$(MAKE) do_gnu-shared; \
336	else \
337		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
338		( set -x; ${CC} ${SHARED_LDFLAGS} \
339			-shared -msym -o lib$$i.so \
340			-rpath  ${INSTALLTOP}/lib \
341			-set_version "${SHLIB_VERSION_HISTORY}${SHLIB_VERSION_NUMBER}" \
342			-all lib$$i.a -none $$libs ${EX_LIBS} -lc ) || exit 1; \
343		libs="$$libs -l$$i"; \
344		done; \
345	fi
346
347
348# This assumes that GNU utilities are *not* used
349do_solaris-shared:
350	if ${DETECT_GNU_LD}; then \
351		$(MAKE) do_gnu-shared; \
352	else \
353		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
354		( PATH=/usr/ccs/bin:$$PATH ; export PATH; \
355		  set -x; ${CC} ${SHARED_LDFLAGS} \
356			-G -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
357			-h lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
358			-z allextract lib$$i.a $$libs ${EX_LIBS} -lc ) || exit 1; \
359		libs="$$libs -l$$i"; \
360		done; \
361	fi
362
363# OpenServer 5 native compilers used
364do_svr3-shared:
365	if ${DETECT_GNU_LD}; then \
366		$(MAKE) do_gnu-shared; \
367	else \
368		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
369		( PATH=/usr/ccs/bin:$$PATH ; export PATH; \
370		  find . -name "*.o" -print > allobjs ; \
371		  OBJS= ; export OBJS ; \
372		  for obj in `ar t lib$$i.a` ; do \
373		    OBJS="$${OBJS} `grep $$obj allobjs`" ; \
374		  done ; \
375		  set -x; ${CC}  -G -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
376			-h lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
377			$${OBJS} $$libs ${EX_LIBS} ) || exit 1; \
378		libs="$$libs -l$$i"; \
379		done; \
380	fi
381
382# UnixWare 7 and OpenUNIX 8 native compilers used
383do_svr5-shared:
384	if ${DETECT_GNU_LD}; then \
385		$(MAKE) do_gnu-shared; \
386	else \
387		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
388		( PATH=/usr/ccs/bin:$$PATH ; export PATH; \
389		  find . -name "*.o" -print > allobjs ; \
390		  OBJS= ; export OBJS ; \
391		  for obj in `ar t lib$$i.a` ; do \
392		    OBJS="$${OBJS} `grep $$obj allobjs`" ; \
393		  done ; \
394		  set -x; ${CC} ${SHARED_LDFLAGS} \
395			-G -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
396			-h lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
397			$${OBJS} $$libs ${EX_LIBS} ) || exit 1; \
398		libs="$$libs -l$$i"; \
399		done; \
400	fi
401
402# This assumes that GNU utilities are *not* used
403do_irix-shared:
404	if ${DETECT_GNU_LD}; then \
405		$(MAKE) do_gnu-shared; \
406	else \
407		libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
408		( set -x; ${CC} ${SHARED_LDFLAGS} \
409			-shared -o lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
410			-Wl,-soname,lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
411			-all lib$$i.a $$libs ${EX_LIBS} -lc) || exit 1; \
412		libs="$$libs -l$$i"; \
413		done; \
414	fi
415
416# This assumes that GNU utilities are *not* used
417do_hpux-shared:
418	libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
419	( set -x; /usr/ccs/bin/ld ${SHARED_LDFLAGS} \
420		+vnocompatwarnings \
421		-b -z -o lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
422		+h lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
423		-Fl lib$$i.a $$libs ${EX_LIBS} -lc ) || exit 1; \
424	chmod a=rx lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} ; \
425	libs="$$libs -L. -l$$i"; \
426	done
427
428# This assumes that GNU utilities are *not* used
429do_hpux64-shared:
430	libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
431	( set -x; /usr/ccs/bin/ld ${SHARED_LDFLAGS} \
432		-b -z -o lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
433		+h lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} \
434		+forceload lib$$i.a $$libs ${EX_LIBS} -lc ) || exit 1; \
435	chmod a=rx lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR} ; \
436	libs="$$libs -L. -l$$i"; \
437	done
438
439# The following method is said to work on all platforms.  Tests will
440# determine if that's how it's gong to be used.
441# This assumes that for all but GNU systems, GNU utilities are *not* used.
442# ALLSYMSFLAGS would be:
443#  GNU systems: --whole-archive
444#  Tru64 Unix:  -all
445#  Solaris:     -z allextract
446#  Irix:        -all
447#  HP/UX-32bit: -Fl
448#  HP/UX-64bit: +forceload
449#  AIX:		-bnogc
450# SHAREDFLAGS would be:
451#  GNU systems: -shared -Wl,-soname=lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
452#  Tru64 Unix:  -shared \
453#		-set_version "${SHLIB_VERSION_HISTORY}${SHLIB_VERSION_NUMBER}"
454#  Solaris:     -G -h lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
455#  Irix:        -shared -Wl,-soname,lib$$i.so.${SHLIB_MAJOR}.${SHLIB_MINOR}
456#  HP/UX-32bit: +vnocompatwarnings -b -z +s \
457#		+h lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR}
458#  HP/UX-64bit: -b -z +h lib$$i.sl.${SHLIB_MAJOR}.${SHLIB_MINOR}
459#  AIX:		-G -bE:lib$$i.exp -bM:SRE
460# SHAREDCMD would be:
461#  GNU systems: $(CC)
462#  Tru64 Unix:  $(CC)
463#  Solaris:     $(CC)
464#  Irix:        $(CC)
465#  HP/UX-32bit: /usr/ccs/bin/ld
466#  HP/UX-64bit: /usr/ccs/bin/ld
467#  AIX:		$(CC)
468ALLSYMSFLAG=-bnogc
469SHAREDFLAGS=${SHARED_LDFLAGS} -G -bE:lib$$i.exp -bM:SRE
470SHAREDCMD=$(CC)
471do_aix-shared:
472	libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \
473	( set -x; \
474	  ld -r -o $$i.o $(ALLSYMSFLAG) lib$$i.a && \
475	  ( nm -Pg lib$$i.o | grep ' [BD] ' | cut -f1 -d' ' > lib$$i.exp; \
476	    $(SHAREDCMD) $(SHAREDFLAG) -o lib$$i.so lib$$i.o \
477		$$libs ${EX_LIBS} ) ) \
478	|| exit 1; \
479	libs="$$libs -l$$i"; \
480	done
481
482Makefile.ssl: Makefile.org
483	@echo "Makefile.ssl is older than Makefile.org."
484	@echo "Reconfigure the source tree (via './config' or 'perl Configure'), please."
485	@false
486
487libclean:
488	rm -f *.a */lib */*/lib
489
490clean:
491	rm -f shlib/*.o *.o core a.out fluff *.map rehash.time testlog make.log cctest cctest.c
492	@for i in $(DIRS) ;\
493	do \
494	if [ -d "$$i" ]; then \
495		(cd $$i && echo "making clean in $$i..." && \
496		$(MAKE) SDIRS='${SDIRS}' clean ) || exit 1; \
497		rm -f $(LIBS); \
498	fi; \
499	done;
500	rm -f *.a *.o speed.* *.map *.so .pure core
501	rm -f $(TARFILE)
502	@for i in $(ONEDIRS) ;\
503	do \
504	rm -fr $$i/*; \
505	done
506
507makefile.one: files
508	$(PERL) util/mk1mf.pl >makefile.one; \
509	sh util/do_ms.sh
510
511files:
512	$(PERL) $(TOP)/util/files.pl Makefile.ssl > $(TOP)/MINFO
513	@for i in $(DIRS) ;\
514	do \
515	if [ -d "$$i" ]; then \
516		(cd $$i && echo "making 'files' in $$i..." && \
517		$(MAKE) SDIRS='${SDIRS}' PERL='${PERL}' files ) || exit 1; \
518	fi; \
519	done;
520
521links:
522	@$(TOP)/util/point.sh Makefile.ssl Makefile
523	@$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
524	@$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
525	@for i in $(DIRS); do \
526	if [ -d "$$i" ]; then \
527		(cd $$i && echo "making links in $$i..." && \
528		$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_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}' AR='${AR}' PERL='${PERL}' links ) || exit 1; \
529	fi; \
530	done;
531
532dclean:
533	rm -f *.bak
534	@for i in $(DIRS) ;\
535	do \
536	if [ -d "$$i" ]; then \
537		(cd $$i && echo "making dclean in $$i..." && \
538		$(MAKE) SDIRS='${SDIRS}' PERL='${PERL}' dclean ) || exit 1; \
539	fi; \
540	done;
541
542rehash: rehash.time
543rehash.time: certs
544	@(OPENSSL="`pwd`/apps/openssl"; export OPENSSL; $(PERL) tools/c_rehash certs)
545	touch rehash.time
546
547test:   tests
548
549tests: rehash
550	@(cd test && echo "testing..." && \
551	$(MAKE) CC='${CC}' PLATFORM='${PLATFORM}' CFLAG='${CFLAG}' SDIRS='$(SDIRS)' INSTALLTOP='${INSTALLTOP}' PEX_LIBS='${PEX_LIBS}' EX_LIBS='${EX_LIBS}' BN_ASM='${BN_ASM}' DES_ENC='${DES_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}' AR='${AR}' PROCESSOR='${PROCESSOR}' PERL='${PERL}' RANLIB='${RANLIB}' TESTS='${TESTS}' EXE_EXT='${EXE_EXT}' SHARED_LIBS='${SHARED_LIBS}' SHLIB_EXT='${SHLIB_EXT}' SHLIB_TARGET='${SHLIB_TARGET}' OPENSSL_DEBUG_MEMORY=on tests );
552	@apps/openssl version -a
553
554report:
555	@$(PERL) util/selftest.pl
556
557depend:
558	@for i in $(DIRS) ;\
559	do \
560	if [ -d "$$i" ]; then \
561		(cd $$i && echo "making dependencies $$i..." && \
562		$(MAKE) SDIRS='${SDIRS}' DEPFLAG='${DEPFLAG}' PERL='${PERL}' depend ) || exit 1; \
563	fi; \
564	done;
565
566lint:
567	@for i in $(DIRS) ;\
568	do \
569	if [ -d "$$i" ]; then \
570		(cd $$i && echo "making lint $$i..." && \
571		$(MAKE) SDIRS='${SDIRS}' lint ) || exit 1; \
572	fi; \
573	done;
574
575tags:
576	@for i in $(DIRS) ;\
577	do \
578	if [ -d "$$i" ]; then \
579		(cd $$i && echo "making tags $$i..." && \
580		$(MAKE) SDIRS='${SDIRS}' tags ) || exit 1; \
581	fi; \
582	done;
583
584errors:
585	$(PERL) util/mkerr.pl -recurse -write
586
587stacks:
588	$(PERL) util/mkstack.pl -write
589
590util/libeay.num::
591	$(PERL) util/mkdef.pl crypto update
592
593util/ssleay.num::
594	$(PERL) util/mkdef.pl ssl update
595
596crypto/objects/obj_dat.h: crypto/objects/obj_mac.h crypto/objects/obj_dat.pl
597	$(PERL) crypto/objects/obj_dat.pl crypto/objects/obj_mac.h crypto/objects/obj_dat.h
598crypto/objects/obj_mac.h: crypto/objects/objects.pl crypto/objects/objects.txt 
599	$(PERL) crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num crypto/objects/obj_mac.h
600
601TABLE: Configure
602	(echo 'Output of `Configure TABLE'"':"; \
603	$(PERL) Configure TABLE) > TABLE
604
605update: depend errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h TABLE
606
607# Build distribution tar-file. As the list of files returned by "find" is
608# pretty long, on several platforms a "too many arguments" error or similar
609# would occur. Therefore the list of files is temporarily stored into a file
610# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal
611# tar does not support the --files-from option.
612tar:
613	find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE | sort > ../$(TARFILE).list; \
614	$(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list -cvf - | \
615	tardy --user_number=0  --user_name=openssl \
616	      --group_number=0 --group_name=openssl \
617	      --prefix=openssl-$(VERSION) - |\
618	gzip --best >../$(TARFILE).gz; \
619	rm -f ../$(TARFILE).list; \
620	ls -l ../$(TARFILE).gz
621
622dist:   
623	$(PERL) Configure dist
624	@$(MAKE) dist_pem_h
625	@$(MAKE) SDIRS='${SDIRS}' clean
626	@$(MAKE) TAR='${TAR}' TARFLAGS='${TARFLAGS}' tar
627
628dist_pem_h:
629	(cd crypto/pem; $(MAKE) CC='${CC}' SDIRS='${SDIRS}' CFLAG='${CFLAG}' pem.h; $(MAKE) clean)
630
631install: all install_docs
632	@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
633		$(INSTALL_PREFIX)$(INSTALLTOP)/lib \
634		$(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl \
635		$(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
636		$(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
637		$(INSTALL_PREFIX)$(OPENSSLDIR)/private \
638		$(INSTALL_PREFIX)$(OPENSSLDIR)/lib
639	@for i in $(EXHEADER) ;\
640	do \
641	(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
642	chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
643	done;
644	@for i in $(DIRS) ;\
645	do \
646	if [ -d "$$i" ]; then \
647		(cd $$i; echo "installing $$i..."; \
648		$(MAKE) CC='${CC}' CFLAG='${CFLAG}' INSTALL_PREFIX='${INSTALL_PREFIX}' INSTALLTOP='${INSTALLTOP}' OPENSSLDIR='${OPENSSLDIR}' EX_LIBS='${EX_LIBS}' SDIRS='${SDIRS}' RANLIB='${RANLIB}' EXE_EXT='${EXE_EXT}' install ); \
649	fi; \
650	done
651	@for i in $(LIBS) ;\
652	do \
653		if [ -f "$$i" ]; then \
654		(       echo installing $$i; \
655			cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
656			$(RANLIB) $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \
657			chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i ); \
658		fi; \
659	done
660	@if [ -n "$(SHARED_LIBS)" ]; then \
661		tmp="$(SHARED_LIBS)"; \
662		for i in $${tmp:-x}; \
663		do \
664			if [ -f "$$i" -o -f "$$i.a" ]; then \
665			(       echo installing $$i; \
666				if [ "$(PLATFORM)" != "Cygwin" ]; then \
667					cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
668					chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \
669				else \
670					c=`echo $$i | sed 's/^lib/cyg/'`; \
671					cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \
672					chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \
673					cp $$i.a $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a; \
674					chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a; \
675				fi ); \
676			fi; \
677		done; \
678		(	here="`pwd`"; \
679			cd $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \
680			$(MAKE) -f $$here/Makefile link-shared ); \
681	fi
682
683install_docs:
684	@$(PERL) $(TOP)/util/mkdir-p.pl \
685		$(INSTALL_PREFIX)$(MANDIR)/man1 \
686		$(INSTALL_PREFIX)$(MANDIR)/man3 \
687		$(INSTALL_PREFIX)$(MANDIR)/man5 \
688		$(INSTALL_PREFIX)$(MANDIR)/man7
689	@pod2man=`cd ../../util; ./pod2mantest ignore`; \
690	for i in doc/apps/*.pod; do \
691		fn=`basename $$i .pod`; \
692		if [ "$$fn" = "config" ]; then sec=5; else sec=1; fi; \
693		echo "installing man$$sec/`basename $$i .pod`.$$sec"; \
694		(cd `$(PERL) util/dirname.pl $$i`; \
695		sh -c "$(PERL) $$pod2man \
696			--section=$$sec --center=OpenSSL \
697			--release=$(VERSION) `basename $$i`") \
698			>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/`basename $$i .pod`.$$sec; \
699	done; \
700	@for i in doc/crypto/*.pod doc/ssl/*.pod; do \
701		fn=`basename $$i .pod`; \
702		if [ "$$fn" = "des_modes" ]; then sec=7; else sec=3; fi; \
703		echo "installing man$$sec/`basename $$i .pod`.$$sec"; \
704		(cd `$(PERL) util/dirname.pl $$i`; \
705		sh -c "$(PERL) $$pod2man \
706			--section=$$sec --center=OpenSSL \
707			--release=$(VERSION) `basename $$i`") \
708			>  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/`basename $$i .pod`.$$sec; \
709	done
710
711# DO NOT DELETE THIS LINE -- make depend depends on it.
712