xref: /minix/crypto/external/bsd/openssl/dist/Configure (revision 0a6a1f1d)
1ebfedea0SLionel Sambuc:
2ebfedea0SLionel Sambuceval 'exec perl -S $0 ${1+"$@"}'
3ebfedea0SLionel Sambuc    if $running_under_some_shell;
4ebfedea0SLionel Sambuc##
5ebfedea0SLionel Sambuc##  Configure -- OpenSSL source tree configuration script
6ebfedea0SLionel Sambuc##
7ebfedea0SLionel Sambuc
8ebfedea0SLionel Sambucrequire 5.000;
9ebfedea0SLionel Sambucuse strict;
10ebfedea0SLionel Sambuc
11ebfedea0SLionel Sambuc# see INSTALL for instructions.
12ebfedea0SLionel Sambuc
13ebfedea0SLionel Sambucmy $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimental-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-dso] [no-krb5] [sctp] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] os/compiler[:flags]\n";
14ebfedea0SLionel Sambuc
15ebfedea0SLionel Sambuc# Options:
16ebfedea0SLionel Sambuc#
17ebfedea0SLionel Sambuc# --openssldir  install OpenSSL in OPENSSLDIR (Default: DIR/ssl if the
18ebfedea0SLionel Sambuc#               --prefix option is given; /usr/local/ssl otherwise)
19ebfedea0SLionel Sambuc# --prefix      prefix for the OpenSSL include, lib and bin directories
20ebfedea0SLionel Sambuc#               (Default: the OPENSSLDIR directory)
21ebfedea0SLionel Sambuc#
22ebfedea0SLionel Sambuc# --install_prefix  Additional prefix for package builders (empty by
23ebfedea0SLionel Sambuc#               default).  This needn't be set in advance, you can
24ebfedea0SLionel Sambuc#               just as well use "make INSTALL_PREFIX=/whatever install".
25ebfedea0SLionel Sambuc#
26ebfedea0SLionel Sambuc# --with-krb5-dir  Declare where Kerberos 5 lives.  The libraries are expected
27ebfedea0SLionel Sambuc#		to live in the subdirectory lib/ and the header files in
28ebfedea0SLionel Sambuc#		include/.  A value is required.
29ebfedea0SLionel Sambuc# --with-krb5-lib  Declare where the Kerberos 5 libraries live.  A value is
30ebfedea0SLionel Sambuc#		required.
31ebfedea0SLionel Sambuc#		(Default: KRB5_DIR/lib)
32ebfedea0SLionel Sambuc# --with-krb5-include  Declare where the Kerberos 5 header files live.  A
33ebfedea0SLionel Sambuc#		value is required.
34ebfedea0SLionel Sambuc#		(Default: KRB5_DIR/include)
35ebfedea0SLionel Sambuc# --with-krb5-flavor  Declare what flavor of Kerberos 5 is used.  Currently
36ebfedea0SLionel Sambuc#		supported values are "MIT" and "Heimdal".  A value is required.
37ebfedea0SLionel Sambuc#
38ebfedea0SLionel Sambuc# --test-sanity Make a number of sanity checks on the data in this file.
39ebfedea0SLionel Sambuc#               This is a debugging tool for OpenSSL developers.
40ebfedea0SLionel Sambuc#
41ebfedea0SLionel Sambuc# --cross-compile-prefix Add specified prefix to binutils components.
42ebfedea0SLionel Sambuc#
43ebfedea0SLionel Sambuc# no-hw-xxx     do not compile support for specific crypto hardware.
44ebfedea0SLionel Sambuc#               Generic OpenSSL-style methods relating to this support
45ebfedea0SLionel Sambuc#               are always compiled but return NULL if the hardware
46ebfedea0SLionel Sambuc#               support isn't compiled.
47ebfedea0SLionel Sambuc# no-hw         do not compile support for any crypto hardware.
48ebfedea0SLionel Sambuc# [no-]threads  [don't] try to create a library that is suitable for
49ebfedea0SLionel Sambuc#               multithreaded applications (default is "threads" if we
50ebfedea0SLionel Sambuc#               know how to do it)
51ebfedea0SLionel Sambuc# [no-]shared	[don't] try to create shared libraries when supported.
52ebfedea0SLionel Sambuc# no-asm        do not use assembler
53ebfedea0SLionel Sambuc# no-dso        do not compile in any native shared-library methods. This
54ebfedea0SLionel Sambuc#               will ensure that all methods just return NULL.
55ebfedea0SLionel Sambuc# no-krb5       do not compile in any KRB5 library or code.
56ebfedea0SLionel Sambuc# [no-]zlib     [don't] compile support for zlib compression.
57ebfedea0SLionel Sambuc# zlib-dynamic	Like "zlib", but the zlib library is expected to be a shared
58ebfedea0SLionel Sambuc#		library and will be loaded in run-time by the OpenSSL library.
59ebfedea0SLionel Sambuc# sctp          include SCTP support
60ebfedea0SLionel Sambuc# 386           generate 80386 code
61ebfedea0SLionel Sambuc# no-sse2	disables IA-32 SSE2 code, above option implies no-sse2
62ebfedea0SLionel Sambuc# no-<cipher>   build without specified algorithm (rsa, idea, rc5, ...)
63ebfedea0SLionel Sambuc# -<xxx> +<xxx> compiler options are passed through
64ebfedea0SLionel Sambuc#
65ebfedea0SLionel Sambuc# DEBUG_SAFESTACK use type-safe stacks to enforce type-safety on stack items
66ebfedea0SLionel Sambuc#		provided to stack calls. Generates unique stack functions for
67ebfedea0SLionel Sambuc#		each possible stack type.
68ebfedea0SLionel Sambuc# DES_PTR	use pointer lookup vs arrays in the DES in crypto/des/des_locl.h
69ebfedea0SLionel Sambuc# DES_RISC1	use different DES_ENCRYPT macro that helps reduce register
70ebfedea0SLionel Sambuc#		dependancies but needs to more registers, good for RISC CPU's
71ebfedea0SLionel Sambuc# DES_RISC2	A different RISC variant.
72ebfedea0SLionel Sambuc# DES_UNROLL	unroll the inner DES loop, sometimes helps, somtimes hinders.
73ebfedea0SLionel Sambuc# DES_INT	use 'int' instead of 'long' for DES_LONG in crypto/des/des.h
74ebfedea0SLionel Sambuc#		This is used on the DEC Alpha where long is 8 bytes
75ebfedea0SLionel Sambuc#		and int is 4
76ebfedea0SLionel Sambuc# BN_LLONG	use the type 'long long' in crypto/bn/bn.h
77ebfedea0SLionel Sambuc# MD2_CHAR	use 'char' instead of 'int' for MD2_INT in crypto/md2/md2.h
78ebfedea0SLionel Sambuc# MD2_LONG	use 'long' instead of 'int' for MD2_INT in crypto/md2/md2.h
79ebfedea0SLionel Sambuc# IDEA_SHORT	use 'short' instead of 'int' for IDEA_INT in crypto/idea/idea.h
80ebfedea0SLionel Sambuc# IDEA_LONG	use 'long' instead of 'int' for IDEA_INT in crypto/idea/idea.h
81ebfedea0SLionel Sambuc# RC2_SHORT	use 'short' instead of 'int' for RC2_INT in crypto/rc2/rc2.h
82ebfedea0SLionel Sambuc# RC2_LONG	use 'long' instead of 'int' for RC2_INT in crypto/rc2/rc2.h
83ebfedea0SLionel Sambuc# RC4_CHAR	use 'char' instead of 'int' for RC4_INT in crypto/rc4/rc4.h
84ebfedea0SLionel Sambuc# RC4_LONG	use 'long' instead of 'int' for RC4_INT in crypto/rc4/rc4.h
85ebfedea0SLionel Sambuc# RC4_INDEX	define RC4_INDEX in crypto/rc4/rc4_locl.h.  This turns on
86ebfedea0SLionel Sambuc#		array lookups instead of pointer use.
87ebfedea0SLionel Sambuc# RC4_CHUNK	enables code that handles data aligned at long (natural CPU
88ebfedea0SLionel Sambuc#		word) boundary.
89ebfedea0SLionel Sambuc# RC4_CHUNK_LL	enables code that handles data aligned at long long boundary
90ebfedea0SLionel Sambuc#		(intended for 64-bit CPUs running 32-bit OS).
91ebfedea0SLionel Sambuc# BF_PTR	use 'pointer arithmatic' for Blowfish (unsafe on Alpha).
92ebfedea0SLionel Sambuc# BF_PTR2	intel specific version (generic version is more efficient).
93ebfedea0SLionel Sambuc#
94ebfedea0SLionel Sambuc# Following are set automatically by this script
95ebfedea0SLionel Sambuc#
96ebfedea0SLionel Sambuc# MD5_ASM	use some extra md5 assember,
97ebfedea0SLionel Sambuc# SHA1_ASM	use some extra sha1 assember, must define L_ENDIAN for x86
98ebfedea0SLionel Sambuc# RMD160_ASM	use some extra ripemd160 assember,
99ebfedea0SLionel Sambuc# SHA256_ASM	sha256_block is implemented in assembler
100ebfedea0SLionel Sambuc# SHA512_ASM	sha512_block is implemented in assembler
101ebfedea0SLionel Sambuc# AES_ASM	ASE_[en|de]crypt is implemented in assembler
102ebfedea0SLionel Sambuc
103ebfedea0SLionel Sambuc# Minimum warning options... any contributions to OpenSSL should at least get
104ebfedea0SLionel Sambuc# past these.
105ebfedea0SLionel Sambuc
106ebfedea0SLionel Sambucmy $gcc_devteam_warn = "-Wall -pedantic -DPEDANTIC -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wshadow -Wformat -Werror -DCRYPTO_MDEBUG_ALL -DCRYPTO_MDEBUG_ABORT -DREF_CHECK -DOPENSSL_NO_DEPRECATED";
107ebfedea0SLionel Sambuc
108ebfedea0SLionel Sambucmy $strict_warnings = 0;
109ebfedea0SLionel Sambuc
110ebfedea0SLionel Sambucmy $x86_gcc_des="DES_PTR DES_RISC1 DES_UNROLL";
111ebfedea0SLionel Sambuc
112ebfedea0SLionel Sambuc# MD2_CHAR slags pentium pros
113ebfedea0SLionel Sambucmy $x86_gcc_opts="RC4_INDEX MD2_INT";
114ebfedea0SLionel Sambuc
115ebfedea0SLionel Sambuc# MODIFY THESE PARAMETERS IF YOU ARE GOING TO USE THE 'util/speed.sh SCRIPT
116ebfedea0SLionel Sambuc# Don't worry about these normally
117ebfedea0SLionel Sambuc
118ebfedea0SLionel Sambucmy $tcc="cc";
119ebfedea0SLionel Sambucmy $tflags="-fast -Xa";
120ebfedea0SLionel Sambucmy $tbn_mul="";
121ebfedea0SLionel Sambucmy $tlib="-lnsl -lsocket";
122ebfedea0SLionel Sambuc#$bits1="SIXTEEN_BIT ";
123ebfedea0SLionel Sambuc#$bits2="THIRTY_TWO_BIT ";
124ebfedea0SLionel Sambucmy $bits1="THIRTY_TWO_BIT ";
125ebfedea0SLionel Sambucmy $bits2="SIXTY_FOUR_BIT ";
126ebfedea0SLionel Sambuc
127ebfedea0SLionel Sambucmy $x86_asm="x86cpuid.o:bn-586.o co-586.o x86-mont.o x86-gf2m.o:des-586.o crypt586.o:aes-586.o vpaes-x86.o aesni-x86.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o:cmll-x86.o:ghash-x86.o:";
128ebfedea0SLionel Sambuc
129ebfedea0SLionel Sambucmy $x86_elf_asm="$x86_asm:elf";
130ebfedea0SLionel Sambuc
131ebfedea0SLionel Sambucmy $x86_64_asm="x86_64cpuid.o:x86_64-gcc.o x86_64-mont.o x86_64-mont5.o x86_64-gf2m.o modexp512-x86_64.o::aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o rc4-md5-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o:ghash-x86_64.o:";
132ebfedea0SLionel Sambucmy $ia64_asm="ia64cpuid.o:bn-ia64.o ia64-mont.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o::rc4-ia64.o rc4_skey.o:::::ghash-ia64.o::void";
133ebfedea0SLionel Sambucmy $sparcv9_asm="sparcv9cap.o sparccpuid.o:bn-sparcv9.o sparcv9-mont.o sparcv9a-mont.o:des_enc-sparc.o fcrypt_b.o:aes_core.o aes_cbc.o aes-sparcv9.o:::sha1-sparcv9.o sha256-sparcv9.o sha512-sparcv9.o:::::::ghash-sparcv9.o::void";
134ebfedea0SLionel Sambucmy $sparcv8_asm=":sparcv8.o:des_enc-sparc.o fcrypt_b.o:::::::::::::void";
135ebfedea0SLionel Sambucmy $alpha_asm="alphacpuid.o:bn_asm.o alpha-mont.o:::::sha1-alpha.o:::::::ghash-alpha.o::void";
136ebfedea0SLionel Sambucmy $mips32_asm=":bn-mips.o::aes_cbc.o aes-mips.o:::sha1-mips.o sha256-mips.o::::::::";
137ebfedea0SLionel Sambucmy $mips64_asm=":bn-mips.o mips-mont.o::aes_cbc.o aes-mips.o:::sha1-mips.o sha256-mips.o sha512-mips.o::::::::";
138ebfedea0SLionel Sambucmy $s390x_asm="s390xcap.o s390xcpuid.o:bn-s390x.o s390x-mont.o s390x-gf2m.o::aes-s390x.o aes-ctr.o aes-xts.o:::sha1-s390x.o sha256-s390x.o sha512-s390x.o::rc4-s390x.o:::::ghash-s390x.o:";
139ebfedea0SLionel Sambucmy $armv4_asm="armcap.o armv4cpuid.o:bn_asm.o armv4-mont.o armv4-gf2m.o::aes_cbc.o aes-armv4.o:::sha1-armv4-large.o sha256-armv4.o sha512-armv4.o:::::::ghash-armv4.o::void";
140ebfedea0SLionel Sambucmy $parisc11_asm="pariscid.o:bn_asm.o parisc-mont.o::aes_core.o aes_cbc.o aes-parisc.o:::sha1-parisc.o sha256-parisc.o sha512-parisc.o::rc4-parisc.o:::::ghash-parisc.o::32";
141ebfedea0SLionel Sambucmy $parisc20_asm="pariscid.o:pa-risc2W.o parisc-mont.o::aes_core.o aes_cbc.o aes-parisc.o:::sha1-parisc.o sha256-parisc.o sha512-parisc.o::rc4-parisc.o:::::ghash-parisc.o::64";
142ebfedea0SLionel Sambucmy $ppc32_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o::::::::";
143ebfedea0SLionel Sambucmy $ppc64_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o sha512-ppc.o::::::::";
144ebfedea0SLionel Sambucmy $no_asm=":::::::::::::::void";
145ebfedea0SLionel Sambuc
146ebfedea0SLionel Sambuc# As for $BSDthreads. Idea is to maintain "collective" set of flags,
147ebfedea0SLionel Sambuc# which would cover all BSD flavors. -pthread applies to them all,
148ebfedea0SLionel Sambuc# but is treated differently. OpenBSD expands is as -D_POSIX_THREAD
149ebfedea0SLionel Sambuc# -lc_r, which is sufficient. FreeBSD 4.x expands it as -lc_r,
150ebfedea0SLionel Sambuc# which has to be accompanied by explicit -D_THREAD_SAFE and
151ebfedea0SLionel Sambuc# sometimes -D_REENTRANT. FreeBSD 5.x expands it as -lc_r, which
152ebfedea0SLionel Sambuc# seems to be sufficient?
153ebfedea0SLionel Sambucmy $BSDthreads="-pthread -D_THREAD_SAFE -D_REENTRANT";
154ebfedea0SLionel Sambuc
155ebfedea0SLionel Sambuc#config-string	$cc : $cflags : $unistd : $thread_cflag : $sys_id : $lflags : $bn_ops : $cpuid_obj : $bn_obj : $des_obj : $aes_obj : $bf_obj : $md5_obj : $sha1_obj : $cast_obj : $rc4_obj : $rmd160_obj : $rc5_obj : $wp_obj : $cmll_obj : $modes_obj : $engines_obj : $dso_scheme : $shared_target : $shared_cflag : $shared_ldflag : $shared_extension : $ranlib : $arflags : $multilib
156ebfedea0SLionel Sambuc
157ebfedea0SLionel Sambucmy %table=(
158ebfedea0SLionel Sambuc# File 'TABLE' (created by 'make TABLE') contains the data from this list,
159ebfedea0SLionel Sambuc# formatted for better readability.
160ebfedea0SLionel Sambuc
161ebfedea0SLionel Sambuc
162ebfedea0SLionel Sambuc#"b",		"${tcc}:${tflags}::${tlib}:${bits1}:${tbn_mul}::",
163ebfedea0SLionel Sambuc#"bl-4c-2c",	"${tcc}:${tflags}::${tlib}:${bits1}BN_LLONG RC4_CHAR MD2_CHAR:${tbn_mul}::",
164ebfedea0SLionel Sambuc#"bl-4c-ri",	"${tcc}:${tflags}::${tlib}:${bits1}BN_LLONG RC4_CHAR RC4_INDEX:${tbn_mul}::",
165ebfedea0SLionel Sambuc#"b2-is-ri-dp",	"${tcc}:${tflags}::${tlib}:${bits2}IDEA_SHORT RC4_INDEX DES_PTR:${tbn_mul}::",
166ebfedea0SLionel Sambuc
167ebfedea0SLionel Sambuc# Our development configs
168ebfedea0SLionel Sambuc"purify",	"purify gcc:-g -DPURIFY -Wall::(unknown)::-lsocket -lnsl::::",
169ebfedea0SLionel Sambuc"debug",	"gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -ggdb -g2 -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror::(unknown)::-lefence::::",
170ebfedea0SLionel Sambuc"debug-ben",	"gcc:$gcc_devteam_warn -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DDEBUG_SAFESTACK -O2 -pipe::(unknown):::::",
171ebfedea0SLionel Sambuc"debug-ben-openbsd","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::",
172ebfedea0SLionel Sambuc"debug-ben-openbsd-debug","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -g3 -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::",
173ebfedea0SLionel Sambuc"debug-ben-debug",	"gcc44:$gcc_devteam_warn -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O2 -pipe::(unknown)::::::",
174ebfedea0SLionel Sambuc"debug-ben-debug-64",	"gcc:$gcc_devteam_warn -Wno-error=overlength-strings -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
175ebfedea0SLionel Sambuc"debug-ben-macos",	"cc:$gcc_devteam_warn -arch i386 -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -O3 -DL_ENDIAN -g3 -pipe::(unknown)::-Wl,-search_paths_first::::",
176ebfedea0SLionel Sambuc"debug-ben-macos-gcc46",	"gcc-mp-4.6:$gcc_devteam_warn -Wconversion -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -O3 -DL_ENDIAN -g3 -pipe::(unknown)::::::",
177ebfedea0SLionel Sambuc"debug-ben-darwin64","cc:$gcc_devteam_warn -Wno-language-extension-token -Wno-extended-offsetof -arch x86_64 -O3 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
178ebfedea0SLionel Sambuc"debug-ben-no-opt",	"gcc: -Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG -Werror -DL_ENDIAN -DTERMIOS -Wall -g3::(unknown)::::::",
179ebfedea0SLionel Sambuc"debug-ben-strict",	"gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DCONST_STRICT -O2 -Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings -pipe::(unknown)::::::",
180ebfedea0SLionel Sambuc"debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
181*0a6a1f1dSLionel Sambuc"debug-bodo",	"gcc:$gcc_devteam_warn -Wno-error=overlength-strings -DBN_DEBUG -DBN_DEBUG_RAND -DCONF_DEBUG -DBIO_PAIR_DEBUG -m64 -DL_ENDIAN -DTERMIO -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
182ebfedea0SLionel Sambuc"debug-ulf", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DBN_DEBUG_RAND -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations:::CYGWIN32:::${no_asm}:win32:cygwin-shared:::.dll",
183ebfedea0SLionel Sambuc"debug-steve64", "gcc:$gcc_devteam_warn -m64 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -Wno-overlength-strings -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
184ebfedea0SLionel Sambuc"debug-steve32", "gcc:$gcc_devteam_warn -m32 -DL_ENDIAN -DCONF_DEBUG -DDEBUG_SAFESTACK -g -pipe::-D_REENTRANT::-rdynamic -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
185ebfedea0SLionel Sambuc"debug-steve-opt", "gcc:$gcc_devteam_warn -m64 -O3 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
186ebfedea0SLionel Sambuc"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -ggdb -g3 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
187ebfedea0SLionel Sambuc"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -ggdb -g3 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
188*0a6a1f1dSLionel Sambuc"debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
189*0a6a1f1dSLionel Sambuc"debug-levitte-linux-noasm-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
190ebfedea0SLionel Sambuc"debug-geoff32","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:BN_LLONG:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
191ebfedea0SLionel Sambuc"debug-geoff64","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
192*0a6a1f1dSLionel Sambuc"debug-linux-pentium","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -mcpu=pentium -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
193*0a6a1f1dSLionel Sambuc"debug-linux-ppro","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -mcpu=pentiumpro -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
194*0a6a1f1dSLionel Sambuc"debug-linux-elf","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -march=i486 -Wall::-D_REENTRANT::-lefence -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
195*0a6a1f1dSLionel Sambuc"debug-linux-elf-noefence","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -march=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
196*0a6a1f1dSLionel Sambuc"debug-linux-ia32-aes", "gcc:-DAES_EXPERIMENTAL -DL_ENDIAN -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:x86cpuid.o:bn-586.o co-586.o x86-mont.o:des-586.o crypt586.o:aes_x86core.o aes_cbc.o aesni-x86.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o::ghash-x86.o::elf:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
197*0a6a1f1dSLionel Sambuc"debug-linux-generic32","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -g -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
198*0a6a1f1dSLionel Sambuc"debug-linux-generic64","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
199*0a6a1f1dSLionel Sambuc"debug-linux-x86_64","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -m64 -DL_ENDIAN -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
200ebfedea0SLionel Sambuc"dist",		"cc:-O::(unknown)::::::",
201ebfedea0SLionel Sambuc
202ebfedea0SLionel Sambuc# Basic configs that should work on any (32 and less bit) box
203ebfedea0SLionel Sambuc"gcc",		"gcc:-O3::(unknown):::BN_LLONG:::",
204ebfedea0SLionel Sambuc"cc",		"cc:-O::(unknown)::::::",
205ebfedea0SLionel Sambuc
206ebfedea0SLionel Sambuc####VOS Configurations
207ebfedea0SLionel Sambuc"vos-gcc","gcc:-O3 -Wall -DOPENSSL_SYSNAME_VOS -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
208ebfedea0SLionel Sambuc"debug-vos-gcc","gcc:-O0 -g -Wall -DOPENSSL_SYSNAME_VOS -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
209ebfedea0SLionel Sambuc
210ebfedea0SLionel Sambuc#### Solaris x86 with GNU C setups
211ebfedea0SLionel Sambuc# -DOPENSSL_NO_INLINE_ASM switches off inline assembler. We have to do it
212ebfedea0SLionel Sambuc# here because whenever GNU C instantiates an assembler template it
213ebfedea0SLionel Sambuc# surrounds it with #APP #NO_APP comment pair which (at least Solaris
214ebfedea0SLionel Sambuc# 7_x86) /usr/ccs/bin/as fails to assemble with "Illegal mnemonic"
215ebfedea0SLionel Sambuc# error message.
216ebfedea0SLionel Sambuc"solaris-x86-gcc","gcc:-O3 -fomit-frame-pointer -march=pentium -Wall -DL_ENDIAN -DOPENSSL_NO_INLINE_ASM::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
217ebfedea0SLionel Sambuc# -shared -static-libgcc might appear controversial, but modules taken
218ebfedea0SLionel Sambuc# from static libgcc do not have relocations and linking them into our
219ebfedea0SLionel Sambuc# shared objects doesn't have any negative side-effects. On the contrary,
220ebfedea0SLionel Sambuc# doing so makes it possible to use gcc shared build with Sun C. Given
221ebfedea0SLionel Sambuc# that gcc generates faster code [thanks to inline assembler], I would
222ebfedea0SLionel Sambuc# actually recommend to consider using gcc shared build even with vendor
223ebfedea0SLionel Sambuc# compiler:-)
224ebfedea0SLionel Sambuc#						<appro@fy.chalmers.se>
225ebfedea0SLionel Sambuc"solaris64-x86_64-gcc","gcc:-m64 -O3 -Wall -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:solaris-shared:-fPIC:-m64 -shared -static-libgcc:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
226ebfedea0SLionel Sambuc
227ebfedea0SLionel Sambuc#### Solaris x86 with Sun C setups
228ebfedea0SLionel Sambuc"solaris-x86-cc","cc:-fast -O -Xa::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
229ebfedea0SLionel Sambuc"solaris64-x86_64-cc","cc:-fast -xarch=amd64 -xstrconst -Xa -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:solaris-shared:-KPIC:-xarch=amd64 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
230ebfedea0SLionel Sambuc
231ebfedea0SLionel Sambuc#### SPARC Solaris with GNU C setups
232ebfedea0SLionel Sambuc"solaris-sparcv7-gcc","gcc:-O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
233*0a6a1f1dSLionel Sambuc"solaris-sparcv8-gcc","gcc:-mcpu=v8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
234ebfedea0SLionel Sambuc# -m32 should be safe to add as long as driver recognizes -mcpu=ultrasparc
235ebfedea0SLionel Sambuc"solaris-sparcv9-gcc","gcc:-m32 -mcpu=ultrasparc -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
236ebfedea0SLionel Sambuc"solaris64-sparcv9-gcc","gcc:-m64 -mcpu=ultrasparc -O3 -Wall -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-fPIC:-m64 -shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
237ebfedea0SLionel Sambuc####
238*0a6a1f1dSLionel Sambuc"debug-solaris-sparcv8-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -O -g -mcpu=v8 -Wall -DB_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
239ebfedea0SLionel Sambuc"debug-solaris-sparcv9-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -DPEDANTIC -O -g -mcpu=ultrasparc -pedantic -ansi -Wall -Wshadow -Wno-long-long -D__EXTENSIONS__ -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
240ebfedea0SLionel Sambuc
241ebfedea0SLionel Sambuc#### SPARC Solaris with Sun C setups
242ebfedea0SLionel Sambuc# SC4.0 doesn't pass 'make test', upgrade to SC5.0 or SC4.2.
243ebfedea0SLionel Sambuc# SC4.2 is ok, better than gcc even on bn as long as you tell it -xarch=v8
244ebfedea0SLionel Sambuc# SC5.0 note: Compiler common patch 107357-01 or later is required!
245ebfedea0SLionel Sambuc"solaris-sparcv7-cc","cc:-xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
246ebfedea0SLionel Sambuc"solaris-sparcv8-cc","cc:-xarch=v8 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
247ebfedea0SLionel Sambuc"solaris-sparcv9-cc","cc:-xtarget=ultra -xarch=v8plus -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
248ebfedea0SLionel Sambuc"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-xarch=v9 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
249ebfedea0SLionel Sambuc####
250ebfedea0SLionel Sambuc"debug-solaris-sparcv8-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xarch=v8 -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
251ebfedea0SLionel Sambuc"debug-solaris-sparcv9-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xtarget=ultra -xarch=v8plus -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
252ebfedea0SLionel Sambuc
253ebfedea0SLionel Sambuc#### SunOS configs, assuming sparc for the gcc one.
254ebfedea0SLionel Sambuc#"sunos-cc", "cc:-O4 -DNOPROTO -DNOCONST::(unknown):SUNOS::DES_UNROLL:${no_asm}::",
255*0a6a1f1dSLionel Sambuc"sunos-gcc","gcc:-O3 -mcpu=v8 -Dssize_t=int::(unknown):SUNOS::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL DES_PTR DES_RISC1:${no_asm}::",
256ebfedea0SLionel Sambuc
257ebfedea0SLionel Sambuc#### IRIX 5.x configs
258ebfedea0SLionel Sambuc# -mips2 flag is added by ./config when appropriate.
259*0a6a1f1dSLionel Sambuc"irix-gcc","gcc:-O3 -DB_ENDIAN::(unknown):::BN_LLONG MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK DES_UNROLL DES_RISC2 DES_PTR BF_PTR:${mips32_asm}:o32:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
260*0a6a1f1dSLionel Sambuc"irix-cc", "cc:-O2 -use_readonly_const -DB_ENDIAN::(unknown):::BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC2 DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
261ebfedea0SLionel Sambuc#### IRIX 6.x configs
262ebfedea0SLionel Sambuc# Only N32 and N64 ABIs are supported. If you need O32 ABI build, invoke
263ebfedea0SLionel Sambuc# './Configure irix-cc -o32' manually.
264*0a6a1f1dSLionel Sambuc"irix-mips3-gcc","gcc:-mabi=n32 -O3 -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK_LL DES_UNROLL DES_RISC2 DES_PTR BF_PTR SIXTY_FOUR_BIT:${mips64_asm}:n32:dlfcn:irix-shared::-mabi=n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::32",
265*0a6a1f1dSLionel Sambuc"irix-mips3-cc", "cc:-n32 -mips3 -O2 -use_readonly_const -G0 -rdata_shared -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::DES_PTR RC4_CHAR RC4_CHUNK_LL DES_RISC2 DES_UNROLL BF_PTR SIXTY_FOUR_BIT:${mips64_asm}:n32:dlfcn:irix-shared::-n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::32",
266ebfedea0SLionel Sambuc# N64 ABI builds.
267*0a6a1f1dSLionel Sambuc"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -O3 -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips64_asm}:64:dlfcn:irix-shared::-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
268*0a6a1f1dSLionel Sambuc"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -G0 -rdata_shared -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips64_asm}:64:dlfcn:irix-shared::-64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
269ebfedea0SLionel Sambuc
270ebfedea0SLionel Sambuc#### Unified HP-UX ANSI C configs.
271ebfedea0SLionel Sambuc# Special notes:
272ebfedea0SLionel Sambuc# - Originally we were optimizing at +O4 level. It should be noted
273ebfedea0SLionel Sambuc#   that the only difference between +O3 and +O4 is global inter-
274ebfedea0SLionel Sambuc#   procedural analysis. As it has to be performed during the link
275ebfedea0SLionel Sambuc#   stage the compiler leaves behind certain pseudo-code in lib*.a
276ebfedea0SLionel Sambuc#   which might be release or even patch level specific. Generating
277ebfedea0SLionel Sambuc#   the machine code for and analyzing the *whole* program appears
278ebfedea0SLionel Sambuc#   to be *extremely* memory demanding while the performance gain is
279ebfedea0SLionel Sambuc#   actually questionable. The situation is intensified by the default
280ebfedea0SLionel Sambuc#   HP-UX data set size limit (infamous 'maxdsiz' tunable) of 64MB
281ebfedea0SLionel Sambuc#   which is way too low for +O4. In other words, doesn't +O3 make
282ebfedea0SLionel Sambuc#   more sense?
283ebfedea0SLionel Sambuc# - Keep in mind that the HP compiler by default generates code
284ebfedea0SLionel Sambuc#   suitable for execution on the host you're currently compiling at.
285ebfedea0SLionel Sambuc#   If the toolkit is ment to be used on various PA-RISC processors
286ebfedea0SLionel Sambuc#   consider './config +DAportable'.
287ebfedea0SLionel Sambuc# - +DD64 is chosen in favour of +DA2.0W because it's meant to be
288ebfedea0SLionel Sambuc#   compatible with *future* releases.
289ebfedea0SLionel Sambuc# - If you run ./Configure hpux-parisc-[g]cc manually don't forget to
290ebfedea0SLionel Sambuc#   pass -D_REENTRANT on HP-UX 10 and later.
291ebfedea0SLionel Sambuc# - -DMD32_XARRAY triggers workaround for compiler bug we ran into in
292ebfedea0SLionel Sambuc#   32-bit message digests. (For the moment of this writing) HP C
293ebfedea0SLionel Sambuc#   doesn't seem to "digest" too many local variables (they make "him"
294ebfedea0SLionel Sambuc#   chew forever:-). For more details look-up MD32_XARRAY comment in
295ebfedea0SLionel Sambuc#   crypto/sha/sha_lcl.h.
296ebfedea0SLionel Sambuc#					<appro@fy.chalmers.se>
297ebfedea0SLionel Sambuc#
298ebfedea0SLionel Sambuc# Since there is mention of this in shlib/hpux10-cc.sh
299ebfedea0SLionel Sambuc"hpux-parisc-cc-o4","cc:-Ae +O4 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::-D_REENTRANT::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
300ebfedea0SLionel Sambuc"hpux-parisc-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:${no_asm}:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
301ebfedea0SLionel Sambuc"hpux-parisc1_1-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:${parisc11_asm}:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa1.1",
302ebfedea0SLionel Sambuc"hpux-parisc2-gcc","gcc:-march=2.0 -O3 -DB_ENDIAN -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL DES_RISC1:".eval{my $asm=$parisc20_asm;$asm=~s/2W\./2\./;$asm=~s/:64/:32/;$asm}.":dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_32",
303ebfedea0SLionel Sambuc"hpux64-parisc2-gcc","gcc:-O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::pa-risc2W.o::::::::::::::void:dlfcn:hpux-shared:-fpic:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_64",
304ebfedea0SLionel Sambuc
305ebfedea0SLionel Sambuc# More attempts at unified 10.X and 11.X targets for HP C compiler.
306ebfedea0SLionel Sambuc#
307ebfedea0SLionel Sambuc# Chris Ruemmler <ruemmler@cup.hp.com>
308ebfedea0SLionel Sambuc# Kevin Steves <ks@hp.se>
309ebfedea0SLionel Sambuc"hpux-parisc-cc","cc:+O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::-D_REENTRANT::-Wl,+s -ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
310ebfedea0SLionel Sambuc"hpux-parisc1_1-cc","cc:+DA1.1 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-Wl,+s -ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${parisc11_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa1.1",
311ebfedea0SLionel Sambuc"hpux-parisc2-cc","cc:+DA2.0 +DS2.0 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:".eval{my $asm=$parisc20_asm;$asm=~s/2W\./2\./;$asm=~s/:64/:32/;$asm}.":dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_32",
312ebfedea0SLionel Sambuc"hpux64-parisc2-cc","cc:+DD64 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${parisc20_asm}:dlfcn:hpux-shared:+Z:+DD64 -b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_64",
313ebfedea0SLionel Sambuc
314ebfedea0SLionel Sambuc# HP/UX IA-64 targets
315ebfedea0SLionel Sambuc"hpux-ia64-cc","cc:-Ae +DD32 +O2 +Olit=all -z -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX DES_UNROLL DES_RISC1 DES_INT:${ia64_asm}:dlfcn:hpux-shared:+Z:+DD32 -b:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/hpux32",
316ebfedea0SLionel Sambuc# Frank Geurts <frank.geurts@nl.abnamro.com> has patiently assisted with
317ebfedea0SLionel Sambuc# with debugging of the following config.
318ebfedea0SLionel Sambuc"hpux64-ia64-cc","cc:-Ae +DD64 +O3 +Olit=all -z -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX DES_UNROLL DES_RISC1 DES_INT:${ia64_asm}:dlfcn:hpux-shared:+Z:+DD64 -b:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/hpux64",
319ebfedea0SLionel Sambuc# GCC builds...
320ebfedea0SLionel Sambuc"hpux-ia64-gcc","gcc:-O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX DES_UNROLL DES_RISC1 DES_INT:${ia64_asm}:dlfcn:hpux-shared:-fpic:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/hpux32",
321ebfedea0SLionel Sambuc"hpux64-ia64-gcc","gcc:-mlp64 -O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX DES_UNROLL DES_RISC1 DES_INT:${ia64_asm}:dlfcn:hpux-shared:-fpic:-mlp64 -shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/hpux64",
322ebfedea0SLionel Sambuc
323ebfedea0SLionel Sambuc# Legacy HPUX 9.X configs...
324ebfedea0SLionel Sambuc"hpux-cc",	"cc:-DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY -Ae +ESlit +O2 -z::(unknown)::-Wl,+s -ldld:DES_PTR DES_UNROLL DES_RISC1:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
325ebfedea0SLionel Sambuc"hpux-gcc",	"gcc:-DB_ENDIAN -DBN_DIV2W -O3::(unknown)::-Wl,+s -ldld:DES_PTR DES_UNROLL DES_RISC1:${no_asm}:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
326ebfedea0SLionel Sambuc
327ebfedea0SLionel Sambuc#### HP MPE/iX http://jazz.external.hp.com/src/openssl/
328ebfedea0SLionel Sambuc"MPE/iX-gcc",	"gcc:-D_ENDIAN -DBN_DIV2W -O3 -D_POSIX_SOURCE -D_SOCKET_SOURCE -I/SYSLOG/PUB::(unknown):MPE:-L/SYSLOG/PUB -lsyslog -lsocket -lcurses:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:::",
329ebfedea0SLionel Sambuc
330ebfedea0SLionel Sambuc# DEC Alpha OSF/1/Tru64 targets.
331ebfedea0SLionel Sambuc#
332ebfedea0SLionel Sambuc#	"What's in a name? That which we call a rose
333ebfedea0SLionel Sambuc#	 By any other word would smell as sweet."
334ebfedea0SLionel Sambuc#
335ebfedea0SLionel Sambuc# - William Shakespeare, "Romeo & Juliet", Act II, scene II.
336ebfedea0SLionel Sambuc#
337ebfedea0SLionel Sambuc# For gcc, the following gave a %50 speedup on a 164 over the 'DES_INT' version
338ebfedea0SLionel Sambuc#
339ebfedea0SLionel Sambuc"osf1-alpha-gcc", "gcc:-O3::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_RISC1:${alpha_asm}:dlfcn:alpha-osf1-shared:::.so",
340ebfedea0SLionel Sambuc"osf1-alpha-cc",  "cc:-std1 -tune host -O4 -readonly_strings::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK:${alpha_asm}:dlfcn:alpha-osf1-shared:::.so",
341ebfedea0SLionel Sambuc"tru64-alpha-cc", "cc:-std1 -tune host -fast -readonly_strings::-pthread:::SIXTY_FOUR_BIT_LONG RC4_CHUNK:${alpha_asm}:dlfcn:alpha-osf1-shared::-msym:.so",
342ebfedea0SLionel Sambuc
343ebfedea0SLionel Sambuc####
344ebfedea0SLionel Sambuc#### Variety of LINUX:-)
345ebfedea0SLionel Sambuc####
346ebfedea0SLionel Sambuc# *-generic* is endian-neutral target, but ./config is free to
347ebfedea0SLionel Sambuc# throw in -D[BL]_ENDIAN, whichever appropriate...
348*0a6a1f1dSLionel Sambuc"linux-generic32","gcc:-O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
349*0a6a1f1dSLionel Sambuc"linux-ppc",	"gcc:-DB_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc32_asm}:linux32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
350ebfedea0SLionel Sambuc# It's believed that majority of ARM toolchains predefine appropriate -march.
351ebfedea0SLionel Sambuc# If you compiler does not, do complement config command line with one!
352*0a6a1f1dSLionel Sambuc"linux-armv4",	"gcc:-O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
353ebfedea0SLionel Sambuc#### IA-32 targets...
354*0a6a1f1dSLionel Sambuc"linux-ia32-icc",	"icc:-DL_ENDIAN -O2 -no_cpprt::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
355*0a6a1f1dSLionel Sambuc"linux-elf",	"gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
356*0a6a1f1dSLionel Sambuc"linux-aout",	"gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -march=i486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out",
357ebfedea0SLionel Sambuc####
358*0a6a1f1dSLionel Sambuc"linux-generic64","gcc:-O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
359*0a6a1f1dSLionel Sambuc"linux-ppc64",	"gcc:-m64 -DB_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc64_asm}:linux64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
360*0a6a1f1dSLionel Sambuc"linux-ia64",	"gcc:-DL_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
361*0a6a1f1dSLionel Sambuc"linux-ia64-ecc","ecc:-DL_ENDIAN -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
362*0a6a1f1dSLionel Sambuc"linux-ia64-icc","icc:-DL_ENDIAN -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
363*0a6a1f1dSLionel Sambuc"linux-x86_64",	"gcc:-m64 -DL_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
364*0a6a1f1dSLionel Sambuc"linux64-s390x",	"gcc:-m64 -DB_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${s390x_asm}:64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
365ebfedea0SLionel Sambuc#### So called "highgprs" target for z/Architecture CPUs
366ebfedea0SLionel Sambuc# "Highgprs" is kernel feature first implemented in Linux 2.6.32, see
367ebfedea0SLionel Sambuc# /proc/cpuinfo. The idea is to preserve most significant bits of
368ebfedea0SLionel Sambuc# general purpose registers not only upon 32-bit process context
369ebfedea0SLionel Sambuc# switch, but even on asynchronous signal delivery to such process.
370ebfedea0SLionel Sambuc# This makes it possible to deploy 64-bit instructions even in legacy
371ebfedea0SLionel Sambuc# application context and achieve better [or should we say adequate]
372ebfedea0SLionel Sambuc# performance. The build is binary compatible with linux-generic32,
373ebfedea0SLionel Sambuc# and the idea is to be able to install the resulting libcrypto.so
374ebfedea0SLionel Sambuc# alongside generic one, e.g. as /lib/highgprs/libcrypto.so.x.y, for
375ebfedea0SLionel Sambuc# ldconfig and run-time linker to autodiscover. Unfortunately it
376ebfedea0SLionel Sambuc# doesn't work just yet, because of couple of bugs in glibc
377ebfedea0SLionel Sambuc# sysdeps/s390/dl-procinfo.c affecting ldconfig and ld.so.1...
378*0a6a1f1dSLionel Sambuc"linux32-s390x",	"gcc:-m31 -Wa,-mzarch -DB_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$s390x_asm;$asm=~s/bn\-s390x\.o/bn_asm.o/;$asm}.":31:dlfcn:linux-shared:-fPIC:-m31:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/highgprs",
379ebfedea0SLionel Sambuc#### SPARC Linux setups
380ebfedea0SLionel Sambuc# Ray Miller <ray.miller@computing-services.oxford.ac.uk> has patiently
381ebfedea0SLionel Sambuc# assisted with debugging of following two configs.
382*0a6a1f1dSLionel Sambuc"linux-sparcv8","gcc:-mcpu=v8 -DB_ENDIAN -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
383ebfedea0SLionel Sambuc# it's a real mess with -mcpu=ultrasparc option under Linux, but
384ebfedea0SLionel Sambuc# -Wa,-Av8plus should do the trick no matter what.
385*0a6a1f1dSLionel Sambuc"linux-sparcv9","gcc:-m32 -mcpu=ultrasparc -DB_ENDIAN -O3 -fomit-frame-pointer -Wall -Wa,-Av8plus -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
386ebfedea0SLionel Sambuc# GCC 3.1 is a requirement
387*0a6a1f1dSLionel Sambuc"linux64-sparcv9","gcc:-m64 -mcpu=ultrasparc -DB_ENDIAN -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
388ebfedea0SLionel Sambuc#### Alpha Linux with GNU C and Compaq C setups
389ebfedea0SLionel Sambuc# Special notes:
390ebfedea0SLionel Sambuc# - linux-alpha+bwx-gcc is ment to be used from ./config only. If you
391ebfedea0SLionel Sambuc#   ought to run './Configure linux-alpha+bwx-gcc' manually, do
392ebfedea0SLionel Sambuc#   complement the command line with -mcpu=ev56, -mcpu=ev6 or whatever
393ebfedea0SLionel Sambuc#   which is appropriate.
394ebfedea0SLionel Sambuc# - If you use ccc keep in mind that -fast implies -arch host and the
395ebfedea0SLionel Sambuc#   compiler is free to issue instructions which gonna make elder CPU
396ebfedea0SLionel Sambuc#   choke. If you wish to build "blended" toolkit, add -arch generic
397ebfedea0SLionel Sambuc#   *after* -fast and invoke './Configure linux-alpha-ccc' manually.
398ebfedea0SLionel Sambuc#
399ebfedea0SLionel Sambuc#					<appro@fy.chalmers.se>
400ebfedea0SLionel Sambuc#
401*0a6a1f1dSLionel Sambuc"linux-alpha-gcc","gcc:-O3 -DL_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_UNROLL:${alpha_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
402*0a6a1f1dSLionel Sambuc"linux-alpha+bwx-gcc","gcc:-O3 -DL_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${alpha_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
403*0a6a1f1dSLionel Sambuc"linux-alpha-ccc","ccc:-fast -readonly_strings -DL_ENDIAN::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
404*0a6a1f1dSLionel Sambuc"linux-alpha+bwx-ccc","ccc:-fast -readonly_strings -DL_ENDIAN::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
405ebfedea0SLionel Sambuc
406*0a6a1f1dSLionel Sambuc# Android: linux-* but without pointers to headers and libs.
407ebfedea0SLionel Sambuc"android","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
408ebfedea0SLionel Sambuc"android-x86","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:".eval{my $asm=${x86_elf_asm};$asm=~s/:elf/:android/;$asm}.":dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
409ebfedea0SLionel Sambuc"android-armv7","gcc:-march=armv7-a -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
410ebfedea0SLionel Sambuc
411ebfedea0SLionel Sambuc#### *BSD [do see comment about ${BSDthreads} above!]
412*0a6a1f1dSLionel Sambuc"BSD-generic32","gcc:-O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
413*0a6a1f1dSLionel Sambuc"BSD-x86",	"gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out:dlfcn:bsd-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
414*0a6a1f1dSLionel Sambuc"BSD-x86-elf",	"gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
415*0a6a1f1dSLionel Sambuc"debug-BSD-x86-elf",	"gcc:-DL_ENDIAN -O3 -Wall -g::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
416*0a6a1f1dSLionel Sambuc"BSD-sparcv8",	"gcc:-DB_ENDIAN -O3 -mcpu=v8 -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${sparcv8_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
417ebfedea0SLionel Sambuc
418*0a6a1f1dSLionel Sambuc"BSD-generic64","gcc:-O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
419ebfedea0SLionel Sambuc# -DMD32_REG_T=int doesn't actually belong in sparc64 target, it
420ebfedea0SLionel Sambuc# simply *happens* to work around a compiler bug in gcc 3.3.3,
421ebfedea0SLionel Sambuc# triggered by RIPEMD160 code.
422*0a6a1f1dSLionel Sambuc"BSD-sparc64",	"gcc:-DB_ENDIAN -O3 -DMD32_REG_T=int -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC2 BF_PTR:${sparcv9_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
423*0a6a1f1dSLionel Sambuc"BSD-ia64",	"gcc:-DL_ENDIAN -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
424*0a6a1f1dSLionel Sambuc"BSD-x86_64",	"gcc:-DL_ENDIAN -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
425ebfedea0SLionel Sambuc
426ebfedea0SLionel Sambuc"bsdi-elf-gcc",     "gcc:-DPERL5 -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall::(unknown)::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
427ebfedea0SLionel Sambuc
428ebfedea0SLionel Sambuc"nextstep",	"cc:-O -Wall:<libc.h>:(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::",
429ebfedea0SLionel Sambuc"nextstep3.3",	"cc:-O3 -Wall:<libc.h>:(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::",
430ebfedea0SLionel Sambuc
431ebfedea0SLionel Sambuc# NCR MP-RAS UNIX ver 02.03.01
432ebfedea0SLionel Sambuc"ncr-scde","cc:-O6 -Xa -Hoff=BEHAVED -686 -Hwide -Hiw::(unknown)::-lsocket -lnsl -lc89:${x86_gcc_des} ${x86_gcc_opts}:::",
433ebfedea0SLionel Sambuc
434ebfedea0SLionel Sambuc# QNX
435ebfedea0SLionel Sambuc"qnx4",	"cc:-DL_ENDIAN -DTERMIO::(unknown):::${x86_gcc_des} ${x86_gcc_opts}:",
436*0a6a1f1dSLionel Sambuc"QNX6",       "gcc:::::-lsocket::${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
437*0a6a1f1dSLionel Sambuc"QNX6-i386",  "gcc:-DL_ENDIAN -O2 -Wall::::-lsocket:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
438ebfedea0SLionel Sambuc
439ebfedea0SLionel Sambuc# BeOS
440ebfedea0SLionel Sambuc"beos-x86-r5",   "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall::-D_REENTRANT:BEOS:-lbe -lnet:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:beos:beos-shared:-fPIC -DPIC:-shared:.so",
441ebfedea0SLionel Sambuc"beos-x86-bone", "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall::-D_REENTRANT:BEOS:-lbe -lbind -lsocket:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:beos:beos-shared:-fPIC:-shared:.so",
442ebfedea0SLionel Sambuc
443ebfedea0SLionel Sambuc#### SCO/Caldera targets.
444ebfedea0SLionel Sambuc#
445ebfedea0SLionel Sambuc# Originally we had like unixware-*, unixware-*-pentium, unixware-*-p6, etc.
446ebfedea0SLionel Sambuc# Now we only have blended unixware-* as it's the only one used by ./config.
447ebfedea0SLionel Sambuc# If you want to optimize for particular microarchitecture, bypass ./config
448ebfedea0SLionel Sambuc# and './Configure unixware-7 -Kpentium_pro' or whatever appropriate.
449ebfedea0SLionel Sambuc# Note that not all targets include assembler support. Mostly because of
450ebfedea0SLionel Sambuc# lack of motivation to support out-of-date platforms with out-of-date
451ebfedea0SLionel Sambuc# compiler drivers and assemblers. Tim Rice <tim@multitalents.net> has
452ebfedea0SLionel Sambuc# patiently assisted to debug most of it.
453ebfedea0SLionel Sambuc#
454ebfedea0SLionel Sambuc# UnixWare 2.0x fails destest with -O.
455ebfedea0SLionel Sambuc"unixware-2.0","cc:-DFILIO_H -DNO_STRINGS_H::-Kthread::-lsocket -lnsl -lresolv -lx:${x86_gcc_des} ${x86_gcc_opts}:::",
456ebfedea0SLionel Sambuc"unixware-2.1","cc:-O -DFILIO_H::-Kthread::-lsocket -lnsl -lresolv -lx:${x86_gcc_des} ${x86_gcc_opts}:::",
457ebfedea0SLionel Sambuc"unixware-7","cc:-O -DFILIO_H -Kalloca::-Kthread::-lsocket -lnsl:BN_LLONG MD2_CHAR RC4_INDEX ${x86_gcc_des}:${x86_elf_asm}:dlfcn:svr5-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
458ebfedea0SLionel Sambuc"unixware-7-gcc","gcc:-DL_ENDIAN -DFILIO_H -O3 -fomit-frame-pointer -march=pentium -Wall::-D_REENTRANT::-lsocket -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:gnu-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
459ebfedea0SLionel Sambuc# SCO 5 - Ben Laurie <ben@algroup.co.uk> says the -O breaks the SCO cc.
460ebfedea0SLionel Sambuc"sco5-cc",  "cc:-belf::(unknown)::-lsocket -lnsl:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:svr3-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
461ebfedea0SLionel Sambuc"sco5-gcc",  "gcc:-O3 -fomit-frame-pointer::(unknown)::-lsocket -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:svr3-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
462ebfedea0SLionel Sambuc
463ebfedea0SLionel Sambuc#### IBM's AIX.
464ebfedea0SLionel Sambuc"aix3-cc",  "cc:-O -DB_ENDIAN -qmaxmem=16384::(unknown):AIX::BN_LLONG RC4_CHAR:::",
465ebfedea0SLionel Sambuc"aix-gcc",  "gcc:-O -DB_ENDIAN::-pthread:AIX::BN_LLONG RC4_CHAR:${ppc32_asm}:aix32:dlfcn:aix-shared::-shared -Wl,-G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X32",
466ebfedea0SLionel Sambuc"aix64-gcc","gcc:-maix64 -O -DB_ENDIAN::-pthread:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:${ppc64_asm}:aix64:dlfcn:aix-shared::-maix64 -shared -Wl,-G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X64",
467ebfedea0SLionel Sambuc# Below targets assume AIX 5. Idea is to effectively disregard $OBJECT_MODE
468ebfedea0SLionel Sambuc# at build time. $OBJECT_MODE is respected at ./config stage!
469ebfedea0SLionel Sambuc"aix-cc",   "cc:-q32 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded -D_THREAD_SAFE:AIX::BN_LLONG RC4_CHAR:${ppc32_asm}:aix32:dlfcn:aix-shared::-q32 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 32",
470ebfedea0SLionel Sambuc"aix64-cc", "cc:-q64 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded -D_THREAD_SAFE:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:${ppc64_asm}:aix64:dlfcn:aix-shared::-q64 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 64",
471ebfedea0SLionel Sambuc
472ebfedea0SLionel Sambuc#
473ebfedea0SLionel Sambuc# Cray T90 and similar (SDSC)
474ebfedea0SLionel Sambuc# It's Big-endian, but the algorithms work properly when B_ENDIAN is NOT
475ebfedea0SLionel Sambuc# defined.  The T90 ints and longs are 8 bytes long, and apparently the
476ebfedea0SLionel Sambuc# B_ENDIAN code assumes 4 byte ints.  Fortunately, the non-B_ENDIAN and
477ebfedea0SLionel Sambuc# non L_ENDIAN code aligns the bytes in each word correctly.
478ebfedea0SLionel Sambuc#
479ebfedea0SLionel Sambuc# The BIT_FIELD_LIMITS define is to avoid two fatal compiler errors:
480ebfedea0SLionel Sambuc#'Taking the address of a bit field is not allowed. '
481ebfedea0SLionel Sambuc#'An expression with bit field exists as the operand of "sizeof" '
482ebfedea0SLionel Sambuc# (written by Wayne Schroeder <schroede@SDSC.EDU>)
483ebfedea0SLionel Sambuc#
484ebfedea0SLionel Sambuc# j90 is considered the base machine type for unicos machines,
485ebfedea0SLionel Sambuc# so this configuration is now called "cray-j90" ...
486ebfedea0SLionel Sambuc"cray-j90", "cc: -DBIT_FIELD_LIMITS -DTERMIOS::(unknown):CRAY::SIXTY_FOUR_BIT_LONG DES_INT:::",
487ebfedea0SLionel Sambuc
488ebfedea0SLionel Sambuc#
489ebfedea0SLionel Sambuc# Cray T3E (Research Center Juelich, beckman@acl.lanl.gov)
490ebfedea0SLionel Sambuc#
491ebfedea0SLionel Sambuc# The BIT_FIELD_LIMITS define was written for the C90 (it seems).  I added
492ebfedea0SLionel Sambuc# another use.  Basically, the problem is that the T3E uses some bit fields
493ebfedea0SLionel Sambuc# for some st_addr stuff, and then sizeof and address-of fails
494ebfedea0SLionel Sambuc# I could not use the ams/alpha.o option because the Cray assembler, 'cam'
495ebfedea0SLionel Sambuc# did not like it.
496ebfedea0SLionel Sambuc"cray-t3e", "cc: -DBIT_FIELD_LIMITS -DTERMIOS::(unknown):CRAY::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT:::",
497ebfedea0SLionel Sambuc
498ebfedea0SLionel Sambuc# DGUX, 88100.
499ebfedea0SLionel Sambuc"dgux-R3-gcc",	"gcc:-O3 -fomit-frame-pointer::(unknown):::RC4_INDEX DES_UNROLL:::",
500ebfedea0SLionel Sambuc"dgux-R4-gcc",	"gcc:-O3 -fomit-frame-pointer::(unknown)::-lnsl -lsocket:RC4_INDEX DES_UNROLL:::",
501ebfedea0SLionel Sambuc"dgux-R4-x86-gcc",	"gcc:-O3 -fomit-frame-pointer -DL_ENDIAN::(unknown)::-lnsl -lsocket:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
502ebfedea0SLionel Sambuc
503ebfedea0SLionel Sambuc# Sinix/ReliantUNIX RM400
504ebfedea0SLionel Sambuc# NOTE: The CDS++ Compiler up to V2.0Bsomething has the IRIX_CC_BUG optimizer problem. Better use -g  */
505ebfedea0SLionel Sambuc"ReliantUNIX","cc:-KPIC -g -DTERMIOS -DB_ENDIAN::-Kthread:SNI:-lsocket -lnsl -lc -L/usr/ucblib -lucb:BN_LLONG DES_PTR DES_RISC2 DES_UNROLL BF_PTR:${no_asm}:dlfcn:reliantunix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
506ebfedea0SLionel Sambuc"SINIX","cc:-O::(unknown):SNI:-lsocket -lnsl -lc -L/usr/ucblib -lucb:RC4_INDEX RC4_CHAR:::",
507ebfedea0SLionel Sambuc"SINIX-N","/usr/ucb/cc:-O2 -misaligned::(unknown)::-lucb:RC4_INDEX RC4_CHAR:::",
508ebfedea0SLionel Sambuc
509ebfedea0SLionel Sambuc# SIEMENS BS2000/OSD: an EBCDIC-based mainframe
510*0a6a1f1dSLionel Sambuc"BS2000-OSD","c89:-O -XLLML -XLLMK -XL -DB_ENDIAN -DCHARSET_EBCDIC::(unknown)::-lsocket -lnsl:THIRTY_TWO_BIT DES_PTR DES_UNROLL MD2_CHAR RC4_INDEX RC4_CHAR BF_PTR:::",
511ebfedea0SLionel Sambuc
512ebfedea0SLionel Sambuc# OS/390 Unix an EBCDIC-based Unix system on IBM mainframe
513ebfedea0SLionel Sambuc# You need to compile using the c89.sh wrapper in the tools directory, because the
514ebfedea0SLionel Sambuc# IBM compiler does not like the -L switch after any object modules.
515ebfedea0SLionel Sambuc#
516ebfedea0SLionel Sambuc"OS390-Unix","c89.sh:-O -DB_ENDIAN -DCHARSET_EBCDIC -DNO_SYS_PARAM_H  -D_ALL_SOURCE::(unknown):::THIRTY_TWO_BIT DES_PTR DES_UNROLL MD2_CHAR RC4_INDEX RC4_CHAR BF_PTR:::",
517ebfedea0SLionel Sambuc
518ebfedea0SLionel Sambuc# Visual C targets
519ebfedea0SLionel Sambuc#
520ebfedea0SLionel Sambuc# Win64 targets, WIN64I denotes IA-64 and WIN64A - AMD64
521ebfedea0SLionel Sambuc"VC-WIN64I","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o ia64-mont.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ghash-ia64.o::ias:win32",
522ebfedea0SLionel Sambuc"VC-WIN64A","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64A::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:".eval{my $asm=$x86_64_asm;$asm=~s/x86_64-gcc\.o/bn_asm.o/;$asm}.":auto:win32",
523ebfedea0SLionel Sambuc"debug-VC-WIN64I","cl:-W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ghash-ia64.o::ias:win32",
524ebfedea0SLionel Sambuc"debug-VC-WIN64A","cl:-W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64A::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:".eval{my $asm=$x86_64_asm;$asm=~s/x86_64-gcc\.o/bn_asm.o/;$asm}.":auto:win32",
525ebfedea0SLionel Sambuc# x86 Win32 target defaults to ANSI API, if you want UNICODE, complement
526ebfedea0SLionel Sambuc# 'perl Configure VC-WIN32' with '-DUNICODE -D_UNICODE'
527ebfedea0SLionel Sambuc"VC-WIN32","cl:-W3 -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32",
528ebfedea0SLionel Sambuc# Unified CE target
529*0a6a1f1dSLionel Sambuc"debug-VC-WIN32","cl:-W3 -Gs0 -GF -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32",
530ebfedea0SLionel Sambuc"VC-CE","cl::::WINCE::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${no_asm}:win32",
531ebfedea0SLionel Sambuc
532ebfedea0SLionel Sambuc# Borland C++ 4.5
533ebfedea0SLionel Sambuc"BC-32","bcc32::::WIN32::BN_LLONG DES_PTR RC4_INDEX EXPORT_VAR_AS_FN:${no_asm}:win32",
534ebfedea0SLionel Sambuc
535ebfedea0SLionel Sambuc# MinGW
536ebfedea0SLionel Sambuc"mingw", "gcc:-mno-cygwin -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -fomit-frame-pointer -O3 -march=i486 -Wall::-D_MT:MINGW32:-lws2_32 -lgdi32 -lcrypt32:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts} EXPORT_VAR_AS_FN:${x86_asm}:coff:win32:cygwin-shared:-D_WINDLL -DOPENSSL_USE_APPLINK:-mno-cygwin:.dll.a",
537ebfedea0SLionel Sambuc# As for OPENSSL_USE_APPLINK. Applink makes it possible to use .dll
538ebfedea0SLionel Sambuc# compiled with one compiler with application compiled with another
539ebfedea0SLionel Sambuc# compiler. It's possible to engage Applink support in mingw64 build,
540ebfedea0SLionel Sambuc# but it's not done, because till mingw64 supports structured exception
541ebfedea0SLionel Sambuc# handling, one can't seriously consider its binaries for using with
542ebfedea0SLionel Sambuc# non-mingw64 run-time environment. And as mingw64 is always consistent
543ebfedea0SLionel Sambuc# with itself, Applink is never engaged and can as well be omitted.
544ebfedea0SLionel Sambuc"mingw64", "gcc:-mno-cygwin -DL_ENDIAN -O3 -Wall -DWIN32_LEAN_AND_MEAN -DUNICODE -D_UNICODE::-D_MT:MINGW64:-lws2_32 -lgdi32 -lcrypt32:SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:${x86_64_asm}:mingw64:win32:cygwin-shared:-D_WINDLL:-mno-cygwin:.dll.a",
545ebfedea0SLionel Sambuc
546ebfedea0SLionel Sambuc# UWIN
547ebfedea0SLionel Sambuc"UWIN", "cc:-DTERMIOS -DL_ENDIAN -O -Wall:::UWIN::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:win32",
548ebfedea0SLionel Sambuc
549ebfedea0SLionel Sambuc# Cygwin
550ebfedea0SLionel Sambuc"Cygwin-pre1.3", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown):CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:win32",
551ebfedea0SLionel Sambuc"Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall:::CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:coff:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
552ebfedea0SLionel Sambuc"debug-Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror:::CYGWIN32:::${no_asm}:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
553ebfedea0SLionel Sambuc
554ebfedea0SLionel Sambuc# NetWare from David Ward (dsward@novell.com)
555ebfedea0SLionel Sambuc# requires either MetroWerks NLM development tools, or gcc / nlmconv
556ebfedea0SLionel Sambuc# NetWare defaults socket bio to WinSock sockets. However,
557ebfedea0SLionel Sambuc# the builds can be configured to use BSD sockets instead.
558ebfedea0SLionel Sambuc# netware-clib => legacy CLib c-runtime support
559ebfedea0SLionel Sambuc"netware-clib", "mwccnlm::::::${x86_gcc_opts}::",
560ebfedea0SLionel Sambuc"netware-clib-bsdsock", "mwccnlm::::::${x86_gcc_opts}::",
561ebfedea0SLionel Sambuc"netware-clib-gcc", "i586-netware-gcc:-nostdinc -I/ndk/nwsdk/include/nlm -I/ndk/ws295sdk/include -DL_ENDIAN -DNETWARE_CLIB -DOPENSSL_SYSNAME_NETWARE -O2 -Wall:::::${x86_gcc_opts}::",
562ebfedea0SLionel Sambuc"netware-clib-bsdsock-gcc", "i586-netware-gcc:-nostdinc -I/ndk/nwsdk/include/nlm -DNETWARE_BSDSOCK -DNETDB_USE_INTERNET -DL_ENDIAN -DNETWARE_CLIB -DOPENSSL_SYSNAME_NETWARE -O2 -Wall:::::${x86_gcc_opts}::",
563ebfedea0SLionel Sambuc# netware-libc => LibC/NKS support
564ebfedea0SLionel Sambuc"netware-libc", "mwccnlm::::::BN_LLONG ${x86_gcc_opts}::",
565ebfedea0SLionel Sambuc"netware-libc-bsdsock", "mwccnlm::::::BN_LLONG ${x86_gcc_opts}::",
566ebfedea0SLionel Sambuc"netware-libc-gcc", "i586-netware-gcc:-nostdinc -I/ndk/libc/include -I/ndk/libc/include/winsock -DL_ENDIAN -DNETWARE_LIBC -DOPENSSL_SYSNAME_NETWARE -DTERMIO -O2 -Wall:::::BN_LLONG ${x86_gcc_opts}::",
567ebfedea0SLionel Sambuc"netware-libc-bsdsock-gcc", "i586-netware-gcc:-nostdinc -I/ndk/libc/include -DNETWARE_BSDSOCK -DL_ENDIAN -DNETWARE_LIBC -DOPENSSL_SYSNAME_NETWARE -DTERMIO -O2 -Wall:::::BN_LLONG ${x86_gcc_opts}::",
568ebfedea0SLionel Sambuc
569ebfedea0SLionel Sambuc# DJGPP
570*0a6a1f1dSLionel Sambuc"DJGPP", "gcc:-I/dev/env/WATT_ROOT/inc -DTERMIO -DL_ENDIAN -fomit-frame-pointer -O2 -Wall:::MSDOS:-L/dev/env/WATT_ROOT/lib -lwatt:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out:",
571ebfedea0SLionel Sambuc
572ebfedea0SLionel Sambuc# Ultrix from Bernhard Simon <simon@zid.tuwien.ac.at>
573ebfedea0SLionel Sambuc"ultrix-cc","cc:-std1 -O -Olimit 2500 -DL_ENDIAN::(unknown):::::::",
574ebfedea0SLionel Sambuc"ultrix-gcc","gcc:-O3 -DL_ENDIAN::(unknown):::BN_LLONG::::",
575ebfedea0SLionel Sambuc# K&R C is no longer supported; you need gcc on old Ultrix installations
576ebfedea0SLionel Sambuc##"ultrix","cc:-O2 -DNOPROTO -DNOCONST -DL_ENDIAN::(unknown):::::::",
577ebfedea0SLionel Sambuc
578ebfedea0SLionel Sambuc##### MacOS X (a.k.a. Rhapsody or Darwin) setup
579ebfedea0SLionel Sambuc"rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown):MACOSX_RHAPSODY::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}::",
580ebfedea0SLionel Sambuc"darwin-ppc-cc","cc:-arch ppc -O3 -DB_ENDIAN -Wa,-force_cpusubtype_ALL::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
581ebfedea0SLionel Sambuc"darwin64-ppc-cc","cc:-arch ppc64 -O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc64_asm}:osx64:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
582ebfedea0SLionel Sambuc"darwin-i386-cc","cc:-arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:".eval{my $asm=$x86_asm;$asm=~s/cast\-586\.o//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
583ebfedea0SLionel Sambuc"debug-darwin-i386-cc","cc:-arch i386 -g3 -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
584ebfedea0SLionel Sambuc"darwin64-x86_64-cc","cc:-arch x86_64 -O3 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
585ebfedea0SLionel Sambuc"debug-darwin-ppc-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DB_ENDIAN -g -Wall -O::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
586ebfedea0SLionel Sambuc# iPhoneOS/iOS
587ebfedea0SLionel Sambuc"iphoneos-cross","llvm-gcc:-O3 -isysroot \$(CROSS_TOP)/SDKs/\$(CROSS_SDK) -fomit-frame-pointer -fno-common::-D_REENTRANT:iOS:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
588ebfedea0SLionel Sambuc
589ebfedea0SLionel Sambuc##### A/UX
590ebfedea0SLionel Sambuc"aux3-gcc","gcc:-O2 -DTERMIO::(unknown):AUX:-lbsd:RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
591ebfedea0SLionel Sambuc
592ebfedea0SLionel Sambuc##### Sony NEWS-OS 4.x
593ebfedea0SLionel Sambuc"newsos4-gcc","gcc:-O -DB_ENDIAN::(unknown):NEWS4:-lmld -liberty:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::",
594ebfedea0SLionel Sambuc
595ebfedea0SLionel Sambuc##### GNU Hurd
596*0a6a1f1dSLionel Sambuc"hurd-x86",  "gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -march=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC",
597ebfedea0SLionel Sambuc
598ebfedea0SLionel Sambuc##### OS/2 EMX
599ebfedea0SLionel Sambuc"OS2-EMX", "gcc::::::::",
600ebfedea0SLionel Sambuc
601ebfedea0SLionel Sambuc##### VxWorks for various targets
602ebfedea0SLionel Sambuc"vxworks-ppc60x","ccppc:-D_REENTRANT -mrtp -mhard-float -mstrict-align -fno-implicit-fp -DPPC32_fp60x -O2 -fstrength-reduce -fno-builtin -fno-strict-aliasing -Wall -DCPU=PPC32 -DTOOL_FAMILY=gnu -DTOOL=gnu -I\$(WIND_BASE)/target/usr/h -I\$(WIND_BASE)/target/usr/h/wrn/coreip:::VXWORKS:-Wl,--defsym,__wrs_rtp_base=0xe0000000 -L \$(WIND_BASE)/target/usr/lib/ppc/PPC32/common:::::",
603ebfedea0SLionel Sambuc"vxworks-ppcgen","ccppc:-D_REENTRANT -mrtp -msoft-float -mstrict-align -O1 -fno-builtin -fno-strict-aliasing -Wall -DCPU=PPC32 -DTOOL_FAMILY=gnu -DTOOL=gnu -I\$(WIND_BASE)/target/usr/h -I\$(WIND_BASE)/target/usr/h/wrn/coreip:::VXWORKS:-Wl,--defsym,__wrs_rtp_base=0xe0000000 -L \$(WIND_BASE)/target/usr/lib/ppc/PPC32/sfcommon:::::",
604ebfedea0SLionel Sambuc"vxworks-ppc405","ccppc:-g -msoft-float -mlongcall -DCPU=PPC405 -I\$(WIND_BASE)/target/h:::VXWORKS:-r:::::",
605ebfedea0SLionel Sambuc"vxworks-ppc750","ccppc:-ansi -nostdinc -DPPC750 -D_REENTRANT -fvolatile -fno-builtin -fno-for-scope -fsigned-char -Wall -msoft-float -mlongcall -DCPU=PPC604 -I\$(WIND_BASE)/target/h \$(DEBUG_FLAG):::VXWORKS:-r:::::",
606ebfedea0SLionel Sambuc"vxworks-ppc750-debug","ccppc:-ansi -nostdinc -DPPC750 -D_REENTRANT -fvolatile -fno-builtin -fno-for-scope -fsigned-char -Wall -msoft-float -mlongcall -DCPU=PPC604 -I\$(WIND_BASE)/target/h -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DDEBUG -g:::VXWORKS:-r:::::",
607ebfedea0SLionel Sambuc"vxworks-ppc860","ccppc:-nostdinc -msoft-float -DCPU=PPC860 -DNO_STRINGS_H -I\$(WIND_BASE)/target/h:::VXWORKS:-r:::::",
608ebfedea0SLionel Sambuc"vxworks-simlinux","ccpentium:-B\$(WIND_BASE)/host/\$(WIND_HOST_TYPE)/lib/gcc-lib/ -D_VSB_CONFIG_FILE=\"\$(WIND_BASE)/target/lib/h/config/vsbConfig.h\" -DL_ENDIAN -DCPU=SIMLINUX -DTOOL_FAMILY=gnu -DTOOL=gnu -fno-builtin -fno-defer-pop -DNO_STRINGS_H -I\$(WIND_BASE)/target/h -I\$(WIND_BASE)/target/h/wrn/coreip -DOPENSSL_NO_HW_PADLOCK:::VXWORKS:-r::${no_asm}::::::ranlibpentium:",
609ebfedea0SLionel Sambuc"vxworks-mips","ccmips:-mrtp -mips2 -O -G 0 -B\$(WIND_BASE)/host/\$(WIND_HOST_TYPE)/lib/gcc-lib/ -D_VSB_CONFIG_FILE=\"\$(WIND_BASE)/target/lib/h/config/vsbConfig.h\" -DCPU=MIPS32 -msoft-float -mno-branch-likely -DTOOL_FAMILY=gnu -DTOOL=gnu -fno-builtin -fno-defer-pop -DNO_STRINGS_H -I\$(WIND_BASE)/target/usr/h -I\$(WIND_BASE)/target/h/wrn/coreip::-D_REENTRANT:VXWORKS:-Wl,--defsym,__wrs_rtp_base=0xe0000000 -L \$(WIND_BASE)/target/usr/lib/mips/MIPSI32/sfcommon::${mips32_asm}:o32::::::ranlibmips:",
610ebfedea0SLionel Sambuc
611ebfedea0SLionel Sambuc##### Compaq Non-Stop Kernel (Tandem)
612ebfedea0SLionel Sambuc"tandem-c89","c89:-Ww -D__TANDEM -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1 -D_TANDEM_SOURCE -DB_ENDIAN::(unknown):::THIRTY_TWO_BIT:::",
613ebfedea0SLionel Sambuc
614ebfedea0SLionel Sambuc# uClinux
615ebfedea0SLionel Sambuc"uClinux-dist","$ENV{'CC'}:\$(CFLAGS)::-D_REENTRANT::\$(LDFLAGS) \$(LDLIBS):BN_LLONG:${no_asm}:$ENV{'LIBSSL_dlfcn'}:linux-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):$ENV{'RANLIB'}::",
616ebfedea0SLionel Sambuc"uClinux-dist64","$ENV{'CC'}:\$(CFLAGS)::-D_REENTRANT::\$(LDFLAGS) \$(LDLIBS):SIXTY_FOUR_BIT_LONG:${no_asm}:$ENV{'LIBSSL_dlfcn'}:linux-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):$ENV{'RANLIB'}::",
617ebfedea0SLionel Sambuc
618ebfedea0SLionel Sambuc);
619ebfedea0SLionel Sambuc
620ebfedea0SLionel Sambucmy @MK1MF_Builds=qw(VC-WIN64I VC-WIN64A
621ebfedea0SLionel Sambuc		    debug-VC-WIN64I debug-VC-WIN64A
622ebfedea0SLionel Sambuc		    VC-NT VC-CE VC-WIN32 debug-VC-WIN32
623ebfedea0SLionel Sambuc		    BC-32
624ebfedea0SLionel Sambuc		    netware-clib netware-clib-bsdsock
625ebfedea0SLionel Sambuc		    netware-libc netware-libc-bsdsock);
626ebfedea0SLionel Sambuc
627ebfedea0SLionel Sambucmy $idx = 0;
628ebfedea0SLionel Sambucmy $idx_cc = $idx++;
629ebfedea0SLionel Sambucmy $idx_cflags = $idx++;
630ebfedea0SLionel Sambucmy $idx_unistd = $idx++;
631ebfedea0SLionel Sambucmy $idx_thread_cflag = $idx++;
632ebfedea0SLionel Sambucmy $idx_sys_id = $idx++;
633ebfedea0SLionel Sambucmy $idx_lflags = $idx++;
634ebfedea0SLionel Sambucmy $idx_bn_ops = $idx++;
635ebfedea0SLionel Sambucmy $idx_cpuid_obj = $idx++;
636ebfedea0SLionel Sambucmy $idx_bn_obj = $idx++;
637ebfedea0SLionel Sambucmy $idx_des_obj = $idx++;
638ebfedea0SLionel Sambucmy $idx_aes_obj = $idx++;
639ebfedea0SLionel Sambucmy $idx_bf_obj = $idx++;
640ebfedea0SLionel Sambucmy $idx_md5_obj = $idx++;
641ebfedea0SLionel Sambucmy $idx_sha1_obj = $idx++;
642ebfedea0SLionel Sambucmy $idx_cast_obj = $idx++;
643ebfedea0SLionel Sambucmy $idx_rc4_obj = $idx++;
644ebfedea0SLionel Sambucmy $idx_rmd160_obj = $idx++;
645ebfedea0SLionel Sambucmy $idx_rc5_obj = $idx++;
646ebfedea0SLionel Sambucmy $idx_wp_obj = $idx++;
647ebfedea0SLionel Sambucmy $idx_cmll_obj = $idx++;
648ebfedea0SLionel Sambucmy $idx_modes_obj = $idx++;
649ebfedea0SLionel Sambucmy $idx_engines_obj = $idx++;
650ebfedea0SLionel Sambucmy $idx_perlasm_scheme = $idx++;
651ebfedea0SLionel Sambucmy $idx_dso_scheme = $idx++;
652ebfedea0SLionel Sambucmy $idx_shared_target = $idx++;
653ebfedea0SLionel Sambucmy $idx_shared_cflag = $idx++;
654ebfedea0SLionel Sambucmy $idx_shared_ldflag = $idx++;
655ebfedea0SLionel Sambucmy $idx_shared_extension = $idx++;
656ebfedea0SLionel Sambucmy $idx_ranlib = $idx++;
657ebfedea0SLionel Sambucmy $idx_arflags = $idx++;
658ebfedea0SLionel Sambucmy $idx_multilib = $idx++;
659ebfedea0SLionel Sambuc
660ebfedea0SLionel Sambucmy $prefix="";
661ebfedea0SLionel Sambucmy $libdir="";
662ebfedea0SLionel Sambucmy $openssldir="";
663ebfedea0SLionel Sambucmy $exe_ext="";
664ebfedea0SLionel Sambucmy $install_prefix= "$ENV{'INSTALL_PREFIX'}";
665ebfedea0SLionel Sambucmy $cross_compile_prefix="";
666ebfedea0SLionel Sambucmy $fipsdir="/usr/local/ssl/fips-2.0";
667ebfedea0SLionel Sambucmy $fipslibdir="";
668ebfedea0SLionel Sambucmy $baseaddr="0xFB00000";
669ebfedea0SLionel Sambucmy $no_threads=0;
670ebfedea0SLionel Sambucmy $threads=0;
671ebfedea0SLionel Sambucmy $no_shared=0; # but "no-shared" is default
672ebfedea0SLionel Sambucmy $zlib=1;      # but "no-zlib" is default
673ebfedea0SLionel Sambucmy $no_krb5=0;   # but "no-krb5" is implied unless "--with-krb5-..." is used
674ebfedea0SLionel Sambucmy $no_rfc3779=1; # but "no-rfc3779" is default
675ebfedea0SLionel Sambucmy $no_asm=0;
676ebfedea0SLionel Sambucmy $no_dso=0;
677ebfedea0SLionel Sambucmy $no_gmp=0;
678ebfedea0SLionel Sambucmy @skip=();
679ebfedea0SLionel Sambucmy $Makefile="Makefile";
680ebfedea0SLionel Sambucmy $des_locl="crypto/des/des_locl.h";
681ebfedea0SLionel Sambucmy $des	="crypto/des/des.h";
682ebfedea0SLionel Sambucmy $bn	="crypto/bn/bn.h";
683ebfedea0SLionel Sambucmy $md2	="crypto/md2/md2.h";
684ebfedea0SLionel Sambucmy $rc4	="crypto/rc4/rc4.h";
685ebfedea0SLionel Sambucmy $rc4_locl="crypto/rc4/rc4_locl.h";
686ebfedea0SLionel Sambucmy $idea	="crypto/idea/idea.h";
687ebfedea0SLionel Sambucmy $rc2	="crypto/rc2/rc2.h";
688ebfedea0SLionel Sambucmy $bf	="crypto/bf/bf_locl.h";
689ebfedea0SLionel Sambucmy $bn_asm	="bn_asm.o";
690ebfedea0SLionel Sambucmy $des_enc="des_enc.o fcrypt_b.o";
691ebfedea0SLionel Sambucmy $aes_enc="aes_core.o aes_cbc.o";
692ebfedea0SLionel Sambucmy $bf_enc	="bf_enc.o";
693ebfedea0SLionel Sambucmy $cast_enc="c_enc.o";
694ebfedea0SLionel Sambucmy $rc4_enc="rc4_enc.o rc4_skey.o";
695ebfedea0SLionel Sambucmy $rc5_enc="rc5_enc.o";
696ebfedea0SLionel Sambucmy $md5_obj="";
697ebfedea0SLionel Sambucmy $sha1_obj="";
698ebfedea0SLionel Sambucmy $rmd160_obj="";
699ebfedea0SLionel Sambucmy $cmll_enc="camellia.o cmll_misc.o cmll_cbc.o";
700ebfedea0SLionel Sambucmy $processor="";
701ebfedea0SLionel Sambucmy $default_ranlib;
702ebfedea0SLionel Sambucmy $perl;
703ebfedea0SLionel Sambucmy $fips=0;
704ebfedea0SLionel Sambuc
705ebfedea0SLionel Sambucif (exists $ENV{FIPSDIR})
706ebfedea0SLionel Sambuc	{
707ebfedea0SLionel Sambuc	$fipsdir = $ENV{FIPSDIR};
708ebfedea0SLionel Sambuc	$fipsdir =~ s/\/$//;
709ebfedea0SLionel Sambuc	}
710ebfedea0SLionel Sambuc
711ebfedea0SLionel Sambuc# All of the following is disabled by default (RC5 was enabled before 0.9.8):
712ebfedea0SLionel Sambuc
713ebfedea0SLionel Sambucmy %disabled = ( # "what"         => "comment" [or special keyword "experimental"]
714ebfedea0SLionel Sambuc		 "ec_nistp_64_gcc_128" => "default",
715ebfedea0SLionel Sambuc		 "gmp"		  => "default",
716ebfedea0SLionel Sambuc		 "jpake"          => "experimental",
717ebfedea0SLionel Sambuc		 "md2"            => "default",
718ebfedea0SLionel Sambuc		 "rc5"            => "default",
719ebfedea0SLionel Sambuc		 "rfc3779"	  => "default",
720ebfedea0SLionel Sambuc		 "sctp"       => "default",
721ebfedea0SLionel Sambuc		 "shared"         => "default",
722ebfedea0SLionel Sambuc		 "store"	  => "experimental",
723*0a6a1f1dSLionel Sambuc		 "unit-test"	  => "default",
724ebfedea0SLionel Sambuc		 "zlib"           => "default",
725ebfedea0SLionel Sambuc		 "zlib-dynamic"   => "default"
726ebfedea0SLionel Sambuc	       );
727ebfedea0SLionel Sambucmy @experimental = ();
728ebfedea0SLionel Sambuc
729ebfedea0SLionel Sambuc# This is what $depflags will look like with the above defaults
730ebfedea0SLionel Sambuc# (we need this to see if we should advise the user to run "make depend"):
731*0a6a1f1dSLionel Sambucmy $default_depflags = " -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST";
732ebfedea0SLionel Sambuc
733ebfedea0SLionel Sambuc# Explicit "no-..." options will be collected in %disabled along with the defaults.
734ebfedea0SLionel Sambuc# To remove something from %disabled, use "enable-foo" (unless it's experimental).
735ebfedea0SLionel Sambuc# For symmetry, "disable-foo" is a synonym for "no-foo".
736ebfedea0SLionel Sambuc
737ebfedea0SLionel Sambuc# For features called "experimental" here, a more explicit "experimental-foo" is needed to enable.
738ebfedea0SLionel Sambuc# We will collect such requests in @experimental.
739ebfedea0SLionel Sambuc# To avoid accidental use of experimental features, applications will have to use -DOPENSSL_EXPERIMENTAL_FOO.
740ebfedea0SLionel Sambuc
741ebfedea0SLionel Sambuc
742ebfedea0SLionel Sambucmy $no_sse2=0;
743ebfedea0SLionel Sambuc
744ebfedea0SLionel Sambuc&usage if ($#ARGV < 0);
745ebfedea0SLionel Sambuc
746ebfedea0SLionel Sambucmy $flags;
747ebfedea0SLionel Sambucmy $depflags;
748ebfedea0SLionel Sambucmy $openssl_experimental_defines;
749ebfedea0SLionel Sambucmy $openssl_algorithm_defines;
750ebfedea0SLionel Sambucmy $openssl_thread_defines;
751ebfedea0SLionel Sambucmy $openssl_sys_defines="";
752ebfedea0SLionel Sambucmy $openssl_other_defines;
753ebfedea0SLionel Sambucmy $libs;
754ebfedea0SLionel Sambucmy $libkrb5="";
755ebfedea0SLionel Sambucmy $target;
756ebfedea0SLionel Sambucmy $options;
757ebfedea0SLionel Sambucmy $symlink;
758ebfedea0SLionel Sambucmy $make_depend=0;
759ebfedea0SLionel Sambucmy %withargs=();
760ebfedea0SLionel Sambuc
761ebfedea0SLionel Sambucmy @argvcopy=@ARGV;
762ebfedea0SLionel Sambucmy $argvstring="";
763ebfedea0SLionel Sambucmy $argv_unprocessed=1;
764ebfedea0SLionel Sambuc
765ebfedea0SLionel Sambucwhile($argv_unprocessed)
766ebfedea0SLionel Sambuc	{
767ebfedea0SLionel Sambuc	$flags="";
768ebfedea0SLionel Sambuc	$depflags="";
769ebfedea0SLionel Sambuc	$openssl_experimental_defines="";
770ebfedea0SLionel Sambuc	$openssl_algorithm_defines="";
771ebfedea0SLionel Sambuc	$openssl_thread_defines="";
772ebfedea0SLionel Sambuc	$openssl_sys_defines="";
773ebfedea0SLionel Sambuc	$openssl_other_defines="";
774ebfedea0SLionel Sambuc	$libs="";
775ebfedea0SLionel Sambuc	$target="";
776ebfedea0SLionel Sambuc	$options="";
777ebfedea0SLionel Sambuc	$symlink=1;
778ebfedea0SLionel Sambuc
779ebfedea0SLionel Sambuc	$argv_unprocessed=0;
780ebfedea0SLionel Sambuc	$argvstring=join(' ',@argvcopy);
781ebfedea0SLionel Sambuc
782ebfedea0SLionel SambucPROCESS_ARGS:
783ebfedea0SLionel Sambuc	foreach (@argvcopy)
784ebfedea0SLionel Sambuc		{
785ebfedea0SLionel Sambuc		s /^-no-/no-/; # some people just can't read the instructions
786ebfedea0SLionel Sambuc
787ebfedea0SLionel Sambuc		# rewrite some options in "enable-..." form
788ebfedea0SLionel Sambuc		s /^-?-?shared$/enable-shared/;
789ebfedea0SLionel Sambuc		s /^sctp$/enable-sctp/;
790ebfedea0SLionel Sambuc		s /^threads$/enable-threads/;
791ebfedea0SLionel Sambuc		s /^zlib$/enable-zlib/;
792ebfedea0SLionel Sambuc		s /^zlib-dynamic$/enable-zlib-dynamic/;
793ebfedea0SLionel Sambuc
794ebfedea0SLionel Sambuc		if (/^no-(.+)$/ || /^disable-(.+)$/)
795ebfedea0SLionel Sambuc			{
796ebfedea0SLionel Sambuc			if (!($disabled{$1} eq "experimental"))
797ebfedea0SLionel Sambuc				{
798ebfedea0SLionel Sambuc				if ($1 eq "ssl")
799ebfedea0SLionel Sambuc					{
800ebfedea0SLionel Sambuc					$disabled{"ssl2"} = "option(ssl)";
801ebfedea0SLionel Sambuc					$disabled{"ssl3"} = "option(ssl)";
802ebfedea0SLionel Sambuc					}
803ebfedea0SLionel Sambuc				elsif ($1 eq "tls")
804ebfedea0SLionel Sambuc					{
805ebfedea0SLionel Sambuc					$disabled{"tls1"} = "option(tls)"
806ebfedea0SLionel Sambuc					}
807*0a6a1f1dSLionel Sambuc				elsif ($1 eq "ssl3-method")
808*0a6a1f1dSLionel Sambuc					{
809*0a6a1f1dSLionel Sambuc					$disabled{"ssl3-method"} = "option(ssl)";
810*0a6a1f1dSLionel Sambuc					$disabled{"ssl3"} = "option(ssl)";
811*0a6a1f1dSLionel Sambuc					}
812ebfedea0SLionel Sambuc				else
813ebfedea0SLionel Sambuc					{
814ebfedea0SLionel Sambuc					$disabled{$1} = "option";
815ebfedea0SLionel Sambuc					}
816ebfedea0SLionel Sambuc				}
817ebfedea0SLionel Sambuc			}
818ebfedea0SLionel Sambuc		elsif (/^enable-(.+)$/ || /^experimental-(.+)$/)
819ebfedea0SLionel Sambuc			{
820ebfedea0SLionel Sambuc			my $algo = $1;
821ebfedea0SLionel Sambuc			if ($disabled{$algo} eq "experimental")
822ebfedea0SLionel Sambuc				{
823ebfedea0SLionel Sambuc				die "You are requesting an experimental feature; please say 'experimental-$algo' if you are sure\n"
824ebfedea0SLionel Sambuc					unless (/^experimental-/);
825ebfedea0SLionel Sambuc				push @experimental, $algo;
826ebfedea0SLionel Sambuc				}
827ebfedea0SLionel Sambuc			delete $disabled{$algo};
828ebfedea0SLionel Sambuc
829ebfedea0SLionel Sambuc			$threads = 1 if ($algo eq "threads");
830ebfedea0SLionel Sambuc			}
831ebfedea0SLionel Sambuc		elsif (/^--test-sanity$/)
832ebfedea0SLionel Sambuc			{
833ebfedea0SLionel Sambuc			exit(&test_sanity());
834ebfedea0SLionel Sambuc			}
835ebfedea0SLionel Sambuc		elsif (/^--strict-warnings/)
836ebfedea0SLionel Sambuc			{
837ebfedea0SLionel Sambuc			$strict_warnings = 1;
838ebfedea0SLionel Sambuc			}
839ebfedea0SLionel Sambuc		elsif (/^reconfigure/ || /^reconf/)
840ebfedea0SLionel Sambuc			{
841ebfedea0SLionel Sambuc			if (open(IN,"<$Makefile"))
842ebfedea0SLionel Sambuc				{
843ebfedea0SLionel Sambuc				while (<IN>)
844ebfedea0SLionel Sambuc					{
845ebfedea0SLionel Sambuc					chomp;
846ebfedea0SLionel Sambuc					if (/^CONFIGURE_ARGS=(.*)/)
847ebfedea0SLionel Sambuc						{
848ebfedea0SLionel Sambuc						$argvstring=$1;
849ebfedea0SLionel Sambuc						@argvcopy=split(' ',$argvstring);
850ebfedea0SLionel Sambuc						die "Incorrect data to reconfigure, please do a normal configuration\n"
851ebfedea0SLionel Sambuc							if (grep(/^reconf/,@argvcopy));
852ebfedea0SLionel Sambuc						print "Reconfiguring with: $argvstring\n";
853ebfedea0SLionel Sambuc						$argv_unprocessed=1;
854ebfedea0SLionel Sambuc						close(IN);
855ebfedea0SLionel Sambuc						last PROCESS_ARGS;
856ebfedea0SLionel Sambuc						}
857ebfedea0SLionel Sambuc					}
858ebfedea0SLionel Sambuc				close(IN);
859ebfedea0SLionel Sambuc				}
860ebfedea0SLionel Sambuc			die "Insufficient data to reconfigure, please do a normal configuration\n";
861ebfedea0SLionel Sambuc			}
862ebfedea0SLionel Sambuc		elsif (/^386$/)
863ebfedea0SLionel Sambuc			{ $processor=386; }
864ebfedea0SLionel Sambuc		elsif (/^fips$/)
865ebfedea0SLionel Sambuc			{
866ebfedea0SLionel Sambuc			$fips=1;
867ebfedea0SLionel Sambuc			}
868ebfedea0SLionel Sambuc		elsif (/^rsaref$/)
869ebfedea0SLionel Sambuc			{
870ebfedea0SLionel Sambuc			# No RSAref support any more since it's not needed.
871ebfedea0SLionel Sambuc			# The check for the option is there so scripts aren't
872ebfedea0SLionel Sambuc			# broken
873ebfedea0SLionel Sambuc			}
874ebfedea0SLionel Sambuc		elsif (/^[-+]/)
875ebfedea0SLionel Sambuc			{
876ebfedea0SLionel Sambuc			if (/^-[lL](.*)$/ or /^-Wl,/)
877ebfedea0SLionel Sambuc				{
878ebfedea0SLionel Sambuc				$libs.=$_." ";
879ebfedea0SLionel Sambuc				}
880ebfedea0SLionel Sambuc			elsif (/^-[^-]/ or /^\+/)
881ebfedea0SLionel Sambuc				{
882ebfedea0SLionel Sambuc				$_ =~ s/%([0-9a-f]{1,2})/chr(hex($1))/gei;
883ebfedea0SLionel Sambuc				$flags.=$_." ";
884ebfedea0SLionel Sambuc				}
885ebfedea0SLionel Sambuc			elsif (/^--prefix=(.*)$/)
886ebfedea0SLionel Sambuc				{
887ebfedea0SLionel Sambuc				$prefix=$1;
888ebfedea0SLionel Sambuc				}
889ebfedea0SLionel Sambuc			elsif (/^--libdir=(.*)$/)
890ebfedea0SLionel Sambuc				{
891ebfedea0SLionel Sambuc				$libdir=$1;
892ebfedea0SLionel Sambuc				}
893ebfedea0SLionel Sambuc			elsif (/^--openssldir=(.*)$/)
894ebfedea0SLionel Sambuc				{
895ebfedea0SLionel Sambuc				$openssldir=$1;
896ebfedea0SLionel Sambuc				}
897ebfedea0SLionel Sambuc			elsif (/^--install.prefix=(.*)$/)
898ebfedea0SLionel Sambuc				{
899ebfedea0SLionel Sambuc				$install_prefix=$1;
900ebfedea0SLionel Sambuc				}
901ebfedea0SLionel Sambuc			elsif (/^--with-krb5-(dir|lib|include|flavor)=(.*)$/)
902ebfedea0SLionel Sambuc				{
903ebfedea0SLionel Sambuc				$withargs{"krb5-".$1}=$2;
904ebfedea0SLionel Sambuc				}
905ebfedea0SLionel Sambuc			elsif (/^--with-zlib-lib=(.*)$/)
906ebfedea0SLionel Sambuc				{
907ebfedea0SLionel Sambuc				$withargs{"zlib-lib"}=$1;
908ebfedea0SLionel Sambuc				}
909ebfedea0SLionel Sambuc			elsif (/^--with-zlib-include=(.*)$/)
910ebfedea0SLionel Sambuc				{
911ebfedea0SLionel Sambuc				$withargs{"zlib-include"}="-I$1";
912ebfedea0SLionel Sambuc				}
913ebfedea0SLionel Sambuc			elsif (/^--with-fipsdir=(.*)$/)
914ebfedea0SLionel Sambuc				{
915ebfedea0SLionel Sambuc				$fipsdir="$1";
916ebfedea0SLionel Sambuc				}
917ebfedea0SLionel Sambuc			elsif (/^--with-fipslibdir=(.*)$/)
918ebfedea0SLionel Sambuc				{
919ebfedea0SLionel Sambuc				$fipslibdir="$1";
920ebfedea0SLionel Sambuc				}
921ebfedea0SLionel Sambuc			elsif (/^--with-baseaddr=(.*)$/)
922ebfedea0SLionel Sambuc				{
923ebfedea0SLionel Sambuc				$baseaddr="$1";
924ebfedea0SLionel Sambuc				}
925ebfedea0SLionel Sambuc			elsif (/^--cross-compile-prefix=(.*)$/)
926ebfedea0SLionel Sambuc				{
927ebfedea0SLionel Sambuc				$cross_compile_prefix=$1;
928ebfedea0SLionel Sambuc				}
929ebfedea0SLionel Sambuc			else
930ebfedea0SLionel Sambuc				{
931ebfedea0SLionel Sambuc				print STDERR $usage;
932ebfedea0SLionel Sambuc				exit(1);
933ebfedea0SLionel Sambuc				}
934ebfedea0SLionel Sambuc			}
935ebfedea0SLionel Sambuc		elsif ($_ =~ /^([^:]+):(.+)$/)
936ebfedea0SLionel Sambuc			{
937ebfedea0SLionel Sambuc			eval "\$table{\$1} = \"$2\""; # allow $xxx constructs in the string
938ebfedea0SLionel Sambuc			$target=$1;
939ebfedea0SLionel Sambuc			}
940ebfedea0SLionel Sambuc		else
941ebfedea0SLionel Sambuc			{
942ebfedea0SLionel Sambuc			die "target already defined - $target (offending arg: $_)\n" if ($target ne "");
943ebfedea0SLionel Sambuc			$target=$_;
944ebfedea0SLionel Sambuc			}
945ebfedea0SLionel Sambuc
946ebfedea0SLionel Sambuc		unless ($_ eq $target || /^no-/ || /^disable-/)
947ebfedea0SLionel Sambuc			{
948ebfedea0SLionel Sambuc			# "no-..." follows later after implied disactivations
949ebfedea0SLionel Sambuc			# have been derived.  (Don't take this too seroiusly,
950ebfedea0SLionel Sambuc			# we really only write OPTIONS to the Makefile out of
951ebfedea0SLionel Sambuc			# nostalgia.)
952ebfedea0SLionel Sambuc
953ebfedea0SLionel Sambuc			if ($options eq "")
954ebfedea0SLionel Sambuc				{ $options = $_; }
955ebfedea0SLionel Sambuc			else
956ebfedea0SLionel Sambuc				{ $options .= " ".$_; }
957ebfedea0SLionel Sambuc			}
958ebfedea0SLionel Sambuc		}
959ebfedea0SLionel Sambuc	}
960ebfedea0SLionel Sambuc
961ebfedea0SLionel Sambuc
962ebfedea0SLionel Sambuc
963ebfedea0SLionel Sambucif ($processor eq "386")
964ebfedea0SLionel Sambuc	{
965ebfedea0SLionel Sambuc	$disabled{"sse2"} = "forced";
966ebfedea0SLionel Sambuc	}
967ebfedea0SLionel Sambuc
968ebfedea0SLionel Sambucif (!defined($withargs{"krb5-flavor"}) || $withargs{"krb5-flavor"} eq "")
969ebfedea0SLionel Sambuc	{
970ebfedea0SLionel Sambuc	$disabled{"krb5"} = "krb5-flavor not specified";
971ebfedea0SLionel Sambuc	}
972ebfedea0SLionel Sambuc
973ebfedea0SLionel Sambucif (!defined($disabled{"zlib-dynamic"}))
974ebfedea0SLionel Sambuc	{
975ebfedea0SLionel Sambuc	# "zlib-dynamic" was specifically enabled, so enable "zlib"
976ebfedea0SLionel Sambuc	delete $disabled{"zlib"};
977ebfedea0SLionel Sambuc	}
978ebfedea0SLionel Sambuc
979ebfedea0SLionel Sambucif (defined($disabled{"rijndael"}))
980ebfedea0SLionel Sambuc	{
981ebfedea0SLionel Sambuc	$disabled{"aes"} = "forced";
982ebfedea0SLionel Sambuc	}
983ebfedea0SLionel Sambucif (defined($disabled{"des"}))
984ebfedea0SLionel Sambuc	{
985ebfedea0SLionel Sambuc	$disabled{"mdc2"} = "forced";
986ebfedea0SLionel Sambuc	}
987ebfedea0SLionel Sambucif (defined($disabled{"ec"}))
988ebfedea0SLionel Sambuc	{
989ebfedea0SLionel Sambuc	$disabled{"ecdsa"} = "forced";
990ebfedea0SLionel Sambuc	$disabled{"ecdh"} = "forced";
991ebfedea0SLionel Sambuc	}
992ebfedea0SLionel Sambuc
993ebfedea0SLionel Sambuc# SSL 2.0 requires MD5 and RSA
994ebfedea0SLionel Sambucif (defined($disabled{"md5"}) || defined($disabled{"rsa"}))
995ebfedea0SLionel Sambuc	{
996ebfedea0SLionel Sambuc	$disabled{"ssl2"} = "forced";
997ebfedea0SLionel Sambuc	}
998ebfedea0SLionel Sambuc
999ebfedea0SLionel Sambucif ($fips && $fipslibdir eq "")
1000ebfedea0SLionel Sambuc	{
1001ebfedea0SLionel Sambuc	$fipslibdir = $fipsdir . "/lib/";
1002ebfedea0SLionel Sambuc	}
1003ebfedea0SLionel Sambuc
1004ebfedea0SLionel Sambuc# RSAX ENGINE sets default non-FIPS RSA method.
1005ebfedea0SLionel Sambucif ($fips)
1006ebfedea0SLionel Sambuc	{
1007ebfedea0SLionel Sambuc	$disabled{"rsax"} = "forced";
1008ebfedea0SLionel Sambuc	}
1009ebfedea0SLionel Sambuc
1010ebfedea0SLionel Sambuc# SSL 3.0 and TLS requires MD5 and SHA and either RSA or DSA+DH
1011ebfedea0SLionel Sambucif (defined($disabled{"md5"}) || defined($disabled{"sha"})
1012ebfedea0SLionel Sambuc    || (defined($disabled{"rsa"})
1013ebfedea0SLionel Sambuc        && (defined($disabled{"dsa"}) || defined($disabled{"dh"}))))
1014ebfedea0SLionel Sambuc	{
1015ebfedea0SLionel Sambuc	$disabled{"ssl3"} = "forced";
1016ebfedea0SLionel Sambuc	$disabled{"tls1"} = "forced";
1017ebfedea0SLionel Sambuc	}
1018ebfedea0SLionel Sambuc
1019ebfedea0SLionel Sambucif (defined($disabled{"tls1"}))
1020ebfedea0SLionel Sambuc	{
1021ebfedea0SLionel Sambuc	$disabled{"tlsext"} = "forced";
1022ebfedea0SLionel Sambuc	}
1023ebfedea0SLionel Sambuc
1024ebfedea0SLionel Sambucif (defined($disabled{"ec"}) || defined($disabled{"dsa"})
1025ebfedea0SLionel Sambuc    || defined($disabled{"dh"}))
1026ebfedea0SLionel Sambuc	{
1027ebfedea0SLionel Sambuc	$disabled{"gost"} = "forced";
1028ebfedea0SLionel Sambuc	}
1029ebfedea0SLionel Sambuc
1030ebfedea0SLionel Sambuc# SRP and HEARTBEATS require TLSEXT
1031ebfedea0SLionel Sambucif (defined($disabled{"tlsext"}))
1032ebfedea0SLionel Sambuc	{
1033ebfedea0SLionel Sambuc	$disabled{"srp"} = "forced";
1034ebfedea0SLionel Sambuc	$disabled{"heartbeats"} = "forced";
1035ebfedea0SLionel Sambuc	}
1036ebfedea0SLionel Sambuc
1037ebfedea0SLionel Sambucif ($target eq "TABLE") {
1038ebfedea0SLionel Sambuc	foreach $target (sort keys %table) {
1039ebfedea0SLionel Sambuc		print_table_entry($target);
1040ebfedea0SLionel Sambuc	}
1041ebfedea0SLionel Sambuc	exit 0;
1042ebfedea0SLionel Sambuc}
1043ebfedea0SLionel Sambuc
1044ebfedea0SLionel Sambucif ($target eq "LIST") {
1045ebfedea0SLionel Sambuc	foreach (sort keys %table) {
1046ebfedea0SLionel Sambuc		print;
1047ebfedea0SLionel Sambuc		print "\n";
1048ebfedea0SLionel Sambuc	}
1049ebfedea0SLionel Sambuc	exit 0;
1050ebfedea0SLionel Sambuc}
1051ebfedea0SLionel Sambuc
1052ebfedea0SLionel Sambucif ($target =~ m/^CygWin32(-.*)$/) {
1053ebfedea0SLionel Sambuc	$target = "Cygwin".$1;
1054ebfedea0SLionel Sambuc}
1055ebfedea0SLionel Sambuc
1056ebfedea0SLionel Sambucprint "Configuring for $target\n";
1057ebfedea0SLionel Sambuc
1058ebfedea0SLionel Sambuc&usage if (!defined($table{$target}));
1059ebfedea0SLionel Sambuc
1060ebfedea0SLionel Sambuc
1061ebfedea0SLionel Sambucforeach (sort (keys %disabled))
1062ebfedea0SLionel Sambuc	{
1063ebfedea0SLionel Sambuc	$options .= " no-$_";
1064ebfedea0SLionel Sambuc
1065ebfedea0SLionel Sambuc	printf "    no-%-12s %-10s", $_, "[$disabled{$_}]";
1066ebfedea0SLionel Sambuc
1067ebfedea0SLionel Sambuc	if (/^dso$/)
1068ebfedea0SLionel Sambuc		{ $no_dso = 1; }
1069ebfedea0SLionel Sambuc	elsif (/^threads$/)
1070ebfedea0SLionel Sambuc		{ $no_threads = 1; }
1071ebfedea0SLionel Sambuc	elsif (/^shared$/)
1072ebfedea0SLionel Sambuc		{ $no_shared = 1; }
1073ebfedea0SLionel Sambuc	elsif (/^zlib$/)
1074ebfedea0SLionel Sambuc		{ $zlib = 0; }
1075ebfedea0SLionel Sambuc	elsif (/^static-engine$/)
1076ebfedea0SLionel Sambuc		{ }
1077ebfedea0SLionel Sambuc	elsif (/^zlib-dynamic$/)
1078ebfedea0SLionel Sambuc		{ }
1079ebfedea0SLionel Sambuc	elsif (/^symlinks$/)
1080ebfedea0SLionel Sambuc		{ $symlink = 0; }
1081ebfedea0SLionel Sambuc	elsif (/^sse2$/)
1082ebfedea0SLionel Sambuc		{ $no_sse2 = 1; }
1083ebfedea0SLionel Sambuc	else
1084ebfedea0SLionel Sambuc		{
1085ebfedea0SLionel Sambuc		my ($ALGO, $algo);
1086ebfedea0SLionel Sambuc		($ALGO = $algo = $_) =~ tr/[\-a-z]/[_A-Z]/;
1087ebfedea0SLionel Sambuc
1088ebfedea0SLionel Sambuc		if (/^asm$/ || /^err$/ || /^hw$/ || /^hw-/)
1089ebfedea0SLionel Sambuc			{
1090ebfedea0SLionel Sambuc			$openssl_other_defines .= "#define OPENSSL_NO_$ALGO\n";
1091ebfedea0SLionel Sambuc			print " OPENSSL_NO_$ALGO";
1092ebfedea0SLionel Sambuc
1093ebfedea0SLionel Sambuc			if (/^err$/)	{ $flags .= "-DOPENSSL_NO_ERR "; }
1094ebfedea0SLionel Sambuc			elsif (/^asm$/)	{ $no_asm = 1; }
1095ebfedea0SLionel Sambuc			}
1096ebfedea0SLionel Sambuc		else
1097ebfedea0SLionel Sambuc			{
1098ebfedea0SLionel Sambuc			$openssl_algorithm_defines .= "#define OPENSSL_NO_$ALGO\n";
1099ebfedea0SLionel Sambuc			print " OPENSSL_NO_$ALGO";
1100ebfedea0SLionel Sambuc
1101ebfedea0SLionel Sambuc			if (/^krb5$/)
1102ebfedea0SLionel Sambuc				{ $no_krb5 = 1; }
1103ebfedea0SLionel Sambuc			else
1104ebfedea0SLionel Sambuc				{
1105ebfedea0SLionel Sambuc				push @skip, $algo;
1106ebfedea0SLionel Sambuc				# fix-up crypto/directory name(s)
1107ebfedea0SLionel Sambuc				@skip[$#skip]="whrlpool" if $algo eq "whirlpool";
1108ebfedea0SLionel Sambuc				print " (skip dir)";
1109ebfedea0SLionel Sambuc
1110ebfedea0SLionel Sambuc				$depflags .= " -DOPENSSL_NO_$ALGO";
1111ebfedea0SLionel Sambuc				}
1112ebfedea0SLionel Sambuc			}
1113ebfedea0SLionel Sambuc		}
1114ebfedea0SLionel Sambuc
1115ebfedea0SLionel Sambuc	print "\n";
1116ebfedea0SLionel Sambuc	}
1117ebfedea0SLionel Sambuc
1118ebfedea0SLionel Sambucmy $exp_cflags = "";
1119ebfedea0SLionel Sambucforeach (sort @experimental)
1120ebfedea0SLionel Sambuc	{
1121ebfedea0SLionel Sambuc	my $ALGO;
1122ebfedea0SLionel Sambuc	($ALGO = $_) =~ tr/[a-z]/[A-Z]/;
1123ebfedea0SLionel Sambuc
1124ebfedea0SLionel Sambuc	# opensslconf.h will set OPENSSL_NO_... unless OPENSSL_EXPERIMENTAL_... is defined
1125ebfedea0SLionel Sambuc	$openssl_experimental_defines .= "#define OPENSSL_NO_$ALGO\n";
1126ebfedea0SLionel Sambuc	$exp_cflags .= " -DOPENSSL_EXPERIMENTAL_$ALGO";
1127ebfedea0SLionel Sambuc	}
1128ebfedea0SLionel Sambuc
1129ebfedea0SLionel Sambucmy $IsMK1MF=scalar grep /^$target$/,@MK1MF_Builds;
1130ebfedea0SLionel Sambuc
1131ebfedea0SLionel Sambuc$exe_ext=".exe" if ($target eq "Cygwin" || $target eq "DJGPP" || $target =~ /^mingw/);
1132ebfedea0SLionel Sambuc$exe_ext=".nlm" if ($target =~ /netware/);
1133ebfedea0SLionel Sambuc$exe_ext=".pm"  if ($target =~ /vos/);
1134ebfedea0SLionel Sambuc$openssldir="/usr/local/ssl" if ($openssldir eq "" and $prefix eq "");
1135ebfedea0SLionel Sambuc$prefix=$openssldir if $prefix eq "";
1136ebfedea0SLionel Sambuc
1137ebfedea0SLionel Sambuc$default_ranlib= &which("ranlib") or $default_ranlib="true";
1138ebfedea0SLionel Sambuc$perl=$ENV{'PERL'} or $perl=&which("perl5") or $perl=&which("perl")
1139ebfedea0SLionel Sambuc  or $perl="perl";
1140ebfedea0SLionel Sambucmy $make = $ENV{'MAKE'} || "make";
1141ebfedea0SLionel Sambuc
1142ebfedea0SLionel Sambuc$cross_compile_prefix=$ENV{'CROSS_COMPILE'} if $cross_compile_prefix eq "";
1143ebfedea0SLionel Sambuc
1144ebfedea0SLionel Sambucchop $openssldir if $openssldir =~ /\/$/;
1145ebfedea0SLionel Sambucchop $prefix if $prefix =~ /.\/$/;
1146ebfedea0SLionel Sambuc
1147ebfedea0SLionel Sambuc$openssldir=$prefix . "/ssl" if $openssldir eq "";
1148ebfedea0SLionel Sambuc$openssldir=$prefix . "/" . $openssldir if $openssldir !~ /(^\/|^[a-zA-Z]:[\\\/])/;
1149ebfedea0SLionel Sambuc
1150ebfedea0SLionel Sambuc
1151ebfedea0SLionel Sambucprint "IsMK1MF=$IsMK1MF\n";
1152ebfedea0SLionel Sambuc
1153ebfedea0SLionel Sambucmy @fields = split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
1154ebfedea0SLionel Sambucmy $cc = $fields[$idx_cc];
1155ebfedea0SLionel Sambuc# Allow environment CC to override compiler...
1156ebfedea0SLionel Sambucif($ENV{CC}) {
1157ebfedea0SLionel Sambuc    $cc = $ENV{CC};
1158ebfedea0SLionel Sambuc}
1159ebfedea0SLionel Sambucmy $cflags = $fields[$idx_cflags];
1160ebfedea0SLionel Sambucmy $unistd = $fields[$idx_unistd];
1161ebfedea0SLionel Sambucmy $thread_cflag = $fields[$idx_thread_cflag];
1162ebfedea0SLionel Sambucmy $sys_id = $fields[$idx_sys_id];
1163ebfedea0SLionel Sambucmy $lflags = $fields[$idx_lflags];
1164ebfedea0SLionel Sambucmy $bn_ops = $fields[$idx_bn_ops];
1165ebfedea0SLionel Sambucmy $cpuid_obj = $fields[$idx_cpuid_obj];
1166ebfedea0SLionel Sambucmy $bn_obj = $fields[$idx_bn_obj];
1167ebfedea0SLionel Sambucmy $des_obj = $fields[$idx_des_obj];
1168ebfedea0SLionel Sambucmy $aes_obj = $fields[$idx_aes_obj];
1169ebfedea0SLionel Sambucmy $bf_obj = $fields[$idx_bf_obj];
1170ebfedea0SLionel Sambucmy $md5_obj = $fields[$idx_md5_obj];
1171ebfedea0SLionel Sambucmy $sha1_obj = $fields[$idx_sha1_obj];
1172ebfedea0SLionel Sambucmy $cast_obj = $fields[$idx_cast_obj];
1173ebfedea0SLionel Sambucmy $rc4_obj = $fields[$idx_rc4_obj];
1174ebfedea0SLionel Sambucmy $rmd160_obj = $fields[$idx_rmd160_obj];
1175ebfedea0SLionel Sambucmy $rc5_obj = $fields[$idx_rc5_obj];
1176ebfedea0SLionel Sambucmy $wp_obj = $fields[$idx_wp_obj];
1177ebfedea0SLionel Sambucmy $cmll_obj = $fields[$idx_cmll_obj];
1178ebfedea0SLionel Sambucmy $modes_obj = $fields[$idx_modes_obj];
1179ebfedea0SLionel Sambucmy $engines_obj = $fields[$idx_engines_obj];
1180ebfedea0SLionel Sambucmy $perlasm_scheme = $fields[$idx_perlasm_scheme];
1181ebfedea0SLionel Sambucmy $dso_scheme = $fields[$idx_dso_scheme];
1182ebfedea0SLionel Sambucmy $shared_target = $fields[$idx_shared_target];
1183ebfedea0SLionel Sambucmy $shared_cflag = $fields[$idx_shared_cflag];
1184ebfedea0SLionel Sambucmy $shared_ldflag = $fields[$idx_shared_ldflag];
1185ebfedea0SLionel Sambucmy $shared_extension = $fields[$idx_shared_extension];
1186ebfedea0SLionel Sambucmy $ranlib = $ENV{'RANLIB'} || $fields[$idx_ranlib];
1187ebfedea0SLionel Sambucmy $ar = $ENV{'AR'} || "ar";
1188ebfedea0SLionel Sambucmy $arflags = $fields[$idx_arflags];
1189ebfedea0SLionel Sambucmy $multilib = $fields[$idx_multilib];
1190ebfedea0SLionel Sambuc
1191ebfedea0SLionel Sambuc# if $prefix/lib$multilib is not an existing directory, then
1192ebfedea0SLionel Sambuc# assume that it's not searched by linker automatically, in
1193ebfedea0SLionel Sambuc# which case adding $multilib suffix causes more grief than
1194ebfedea0SLionel Sambuc# we're ready to tolerate, so don't...
1195ebfedea0SLionel Sambuc$multilib="" if !-d "$prefix/lib$multilib";
1196ebfedea0SLionel Sambuc
1197ebfedea0SLionel Sambuc$libdir="lib$multilib" if $libdir eq "";
1198ebfedea0SLionel Sambuc
1199ebfedea0SLionel Sambuc$cflags = "$cflags$exp_cflags";
1200ebfedea0SLionel Sambuc
1201ebfedea0SLionel Sambuc# '%' in $lflags is used to split flags to "pre-" and post-flags
1202ebfedea0SLionel Sambucmy ($prelflags,$postlflags)=split('%',$lflags);
1203ebfedea0SLionel Sambucif (defined($postlflags))	{ $lflags=$postlflags;	}
1204ebfedea0SLionel Sambucelse				{ $lflags=$prelflags; undef $prelflags;	}
1205ebfedea0SLionel Sambuc
1206ebfedea0SLionel Sambucif ($target =~ /^mingw/ && `$cc --target-help 2>&1` !~ m/\-mno\-cygwin/m)
1207ebfedea0SLionel Sambuc	{
1208ebfedea0SLionel Sambuc	$cflags =~ s/\-mno\-cygwin\s*//;
1209ebfedea0SLionel Sambuc	$shared_ldflag =~ s/\-mno\-cygwin\s*//;
1210ebfedea0SLionel Sambuc	}
1211ebfedea0SLionel Sambuc
1212ebfedea0SLionel Sambucmy $no_shared_warn=0;
1213ebfedea0SLionel Sambucmy $no_user_cflags=0;
1214ebfedea0SLionel Sambuc
1215ebfedea0SLionel Sambucif ($flags ne "")	{ $cflags="$flags$cflags"; }
1216ebfedea0SLionel Sambucelse			{ $no_user_cflags=1;       }
1217ebfedea0SLionel Sambuc
1218ebfedea0SLionel Sambuc# Kerberos settings.  The flavor must be provided from outside, either through
1219ebfedea0SLionel Sambuc# the script "config" or manually.
1220ebfedea0SLionel Sambucif (!$no_krb5)
1221ebfedea0SLionel Sambuc	{
1222ebfedea0SLionel Sambuc	my ($lresolv, $lpath, $lext);
1223ebfedea0SLionel Sambuc	if ($withargs{"krb5-flavor"} =~ /^[Hh]eimdal$/)
1224ebfedea0SLionel Sambuc		{
1225ebfedea0SLionel Sambuc		die "Sorry, Heimdal is currently not supported\n";
1226ebfedea0SLionel Sambuc		}
1227ebfedea0SLionel Sambuc	##### HACK to force use of Heimdal.
1228ebfedea0SLionel Sambuc	##### WARNING: Since we don't really have adequate support for Heimdal,
1229ebfedea0SLionel Sambuc	#####          using this will break the build.  You'll have to make
1230ebfedea0SLionel Sambuc	#####          changes to the source, and if you do, please send
1231ebfedea0SLionel Sambuc	#####          patches to openssl-dev@openssl.org
1232ebfedea0SLionel Sambuc	if ($withargs{"krb5-flavor"} =~ /^force-[Hh]eimdal$/)
1233ebfedea0SLionel Sambuc		{
1234ebfedea0SLionel Sambuc		warn "Heimdal isn't really supported.  Your build WILL break\n";
1235ebfedea0SLionel Sambuc		warn "If you fix the problems, please send a patch to openssl-dev\@openssl.org\n";
1236ebfedea0SLionel Sambuc		$withargs{"krb5-dir"} = "/usr/heimdal"
1237ebfedea0SLionel Sambuc			if $withargs{"krb5-dir"} eq "";
1238ebfedea0SLionel Sambuc		$withargs{"krb5-lib"} = "-L".$withargs{"krb5-dir"}.
1239ebfedea0SLionel Sambuc			"/lib -lgssapi -lkrb5 -lcom_err"
1240ebfedea0SLionel Sambuc			if $withargs{"krb5-lib"} eq "" && !$IsMK1MF;
1241ebfedea0SLionel Sambuc		$cflags="-DKRB5_HEIMDAL $cflags";
1242ebfedea0SLionel Sambuc		}
1243ebfedea0SLionel Sambuc	if ($withargs{"krb5-flavor"} =~ /^[Mm][Ii][Tt]/)
1244ebfedea0SLionel Sambuc		{
1245ebfedea0SLionel Sambuc		$withargs{"krb5-dir"} = "/usr/kerberos"
1246ebfedea0SLionel Sambuc			if $withargs{"krb5-dir"} eq "";
1247ebfedea0SLionel Sambuc		$withargs{"krb5-lib"} = "-L".$withargs{"krb5-dir"}.
1248ebfedea0SLionel Sambuc			"/lib -lgssapi_krb5 -lkrb5 -lcom_err -lk5crypto"
1249ebfedea0SLionel Sambuc			if $withargs{"krb5-lib"} eq "" && !$IsMK1MF;
1250ebfedea0SLionel Sambuc		$cflags="-DKRB5_MIT $cflags";
1251ebfedea0SLionel Sambuc		$withargs{"krb5-flavor"} =~ s/^[Mm][Ii][Tt][._-]*//;
1252ebfedea0SLionel Sambuc		if ($withargs{"krb5-flavor"} =~ /^1[._-]*[01]/)
1253ebfedea0SLionel Sambuc			{
1254ebfedea0SLionel Sambuc			$cflags="-DKRB5_MIT_OLD11 $cflags";
1255ebfedea0SLionel Sambuc			}
1256ebfedea0SLionel Sambuc		}
1257ebfedea0SLionel Sambuc	LRESOLV:
1258ebfedea0SLionel Sambuc	foreach $lpath ("/lib", "/usr/lib")
1259ebfedea0SLionel Sambuc		{
1260ebfedea0SLionel Sambuc		foreach $lext ("a", "so")
1261ebfedea0SLionel Sambuc			{
1262ebfedea0SLionel Sambuc			$lresolv = "$lpath/libresolv.$lext";
1263ebfedea0SLionel Sambuc			last LRESOLV	if (-r "$lresolv");
1264ebfedea0SLionel Sambuc			$lresolv = "";
1265ebfedea0SLionel Sambuc			}
1266ebfedea0SLionel Sambuc		}
1267ebfedea0SLionel Sambuc	$withargs{"krb5-lib"} .= " -lresolv"
1268ebfedea0SLionel Sambuc		if ("$lresolv" ne "");
1269ebfedea0SLionel Sambuc	$withargs{"krb5-include"} = "-I".$withargs{"krb5-dir"}."/include"
1270ebfedea0SLionel Sambuc		if $withargs{"krb5-include"} eq "" &&
1271ebfedea0SLionel Sambuc		   $withargs{"krb5-dir"} ne "";
1272ebfedea0SLionel Sambuc	}
1273ebfedea0SLionel Sambuc
1274ebfedea0SLionel Sambuc# The DSO code currently always implements all functions so that no
1275ebfedea0SLionel Sambuc# applications will have to worry about that from a compilation point
1276ebfedea0SLionel Sambuc# of view. However, the "method"s may return zero unless that platform
1277ebfedea0SLionel Sambuc# has support compiled in for them. Currently each method is enabled
1278ebfedea0SLionel Sambuc# by a define "DSO_<name>" ... we translate the "dso_scheme" config
1279ebfedea0SLionel Sambuc# string entry into using the following logic;
1280ebfedea0SLionel Sambucmy $dso_cflags;
1281ebfedea0SLionel Sambucif (!$no_dso && $dso_scheme ne "")
1282ebfedea0SLionel Sambuc	{
1283ebfedea0SLionel Sambuc	$dso_scheme =~ tr/[a-z]/[A-Z]/;
1284ebfedea0SLionel Sambuc	if ($dso_scheme eq "DLFCN")
1285ebfedea0SLionel Sambuc		{
1286ebfedea0SLionel Sambuc		$dso_cflags = "-DDSO_DLFCN -DHAVE_DLFCN_H";
1287ebfedea0SLionel Sambuc		}
1288ebfedea0SLionel Sambuc	elsif ($dso_scheme eq "DLFCN_NO_H")
1289ebfedea0SLionel Sambuc		{
1290ebfedea0SLionel Sambuc		$dso_cflags = "-DDSO_DLFCN";
1291ebfedea0SLionel Sambuc		}
1292ebfedea0SLionel Sambuc	else
1293ebfedea0SLionel Sambuc		{
1294ebfedea0SLionel Sambuc		$dso_cflags = "-DDSO_$dso_scheme";
1295ebfedea0SLionel Sambuc		}
1296ebfedea0SLionel Sambuc	$cflags = "$dso_cflags $cflags";
1297ebfedea0SLionel Sambuc	}
1298ebfedea0SLionel Sambuc
1299ebfedea0SLionel Sambucmy $thread_cflags;
1300ebfedea0SLionel Sambucmy $thread_defines;
1301ebfedea0SLionel Sambucif ($thread_cflag ne "(unknown)" && !$no_threads)
1302ebfedea0SLionel Sambuc	{
1303ebfedea0SLionel Sambuc	# If we know how to do it, support threads by default.
1304ebfedea0SLionel Sambuc	$threads = 1;
1305ebfedea0SLionel Sambuc	}
1306ebfedea0SLionel Sambucif ($thread_cflag eq "(unknown)" && $threads)
1307ebfedea0SLionel Sambuc	{
1308ebfedea0SLionel Sambuc	# If the user asked for "threads", [s]he is also expected to
1309ebfedea0SLionel Sambuc	# provide any system-dependent compiler options that are
1310ebfedea0SLionel Sambuc	# necessary.
1311ebfedea0SLionel Sambuc	if ($no_user_cflags)
1312ebfedea0SLionel Sambuc		{
1313ebfedea0SLionel Sambuc		print "You asked for multi-threading support, but didn't\n";
1314ebfedea0SLionel Sambuc		print "provide any system-specific compiler options\n";
1315ebfedea0SLionel Sambuc		exit(1);
1316ebfedea0SLionel Sambuc		}
1317ebfedea0SLionel Sambuc	$thread_cflags="-DOPENSSL_THREADS $cflags" ;
1318ebfedea0SLionel Sambuc	$thread_defines .= "#define OPENSSL_THREADS\n";
1319ebfedea0SLionel Sambuc	}
1320ebfedea0SLionel Sambucelse
1321ebfedea0SLionel Sambuc	{
1322ebfedea0SLionel Sambuc	$thread_cflags="-DOPENSSL_THREADS $thread_cflag $cflags";
1323ebfedea0SLionel Sambuc	$thread_defines .= "#define OPENSSL_THREADS\n";
1324ebfedea0SLionel Sambuc#	my $def;
1325ebfedea0SLionel Sambuc#	foreach $def (split ' ',$thread_cflag)
1326ebfedea0SLionel Sambuc#		{
1327ebfedea0SLionel Sambuc#		if ($def =~ s/^-D// && $def !~ /^_/)
1328ebfedea0SLionel Sambuc#			{
1329ebfedea0SLionel Sambuc#			$thread_defines .= "#define $def\n";
1330ebfedea0SLionel Sambuc#			}
1331ebfedea0SLionel Sambuc#		}
1332ebfedea0SLionel Sambuc	}
1333ebfedea0SLionel Sambuc
1334ebfedea0SLionel Sambuc$lflags="$libs$lflags" if ($libs ne "");
1335ebfedea0SLionel Sambuc
1336ebfedea0SLionel Sambucif ($no_asm)
1337ebfedea0SLionel Sambuc	{
1338ebfedea0SLionel Sambuc	$cpuid_obj=$bn_obj=
1339ebfedea0SLionel Sambuc	$des_obj=$aes_obj=$bf_obj=$cast_obj=$rc4_obj=$rc5_obj=$cmll_obj=
1340ebfedea0SLionel Sambuc	$modes_obj=$sha1_obj=$md5_obj=$rmd160_obj=$wp_obj=$engines_obj="";
1341ebfedea0SLionel Sambuc	}
1342ebfedea0SLionel Sambuc
1343ebfedea0SLionel Sambucif (!$no_shared)
1344ebfedea0SLionel Sambuc	{
1345ebfedea0SLionel Sambuc	$cast_obj="";	# CAST assembler is not PIC
1346ebfedea0SLionel Sambuc	}
1347ebfedea0SLionel Sambuc
1348ebfedea0SLionel Sambucif ($threads)
1349ebfedea0SLionel Sambuc	{
1350ebfedea0SLionel Sambuc	$cflags=$thread_cflags;
1351ebfedea0SLionel Sambuc	$openssl_thread_defines .= $thread_defines;
1352ebfedea0SLionel Sambuc	}
1353ebfedea0SLionel Sambuc
1354ebfedea0SLionel Sambucif ($zlib)
1355ebfedea0SLionel Sambuc	{
1356ebfedea0SLionel Sambuc	$cflags = "-DZLIB $cflags";
1357ebfedea0SLionel Sambuc	if (defined($disabled{"zlib-dynamic"}))
1358ebfedea0SLionel Sambuc		{
1359ebfedea0SLionel Sambuc		if (defined($withargs{"zlib-lib"}))
1360ebfedea0SLionel Sambuc			{
1361ebfedea0SLionel Sambuc			$lflags = "$lflags -L" . $withargs{"zlib-lib"} . " -lz";
1362ebfedea0SLionel Sambuc			}
1363ebfedea0SLionel Sambuc		else
1364ebfedea0SLionel Sambuc			{
1365ebfedea0SLionel Sambuc			$lflags = "$lflags -lz";
1366ebfedea0SLionel Sambuc			}
1367ebfedea0SLionel Sambuc		}
1368ebfedea0SLionel Sambuc	else
1369ebfedea0SLionel Sambuc		{
1370ebfedea0SLionel Sambuc		$cflags = "-DZLIB_SHARED $cflags";
1371ebfedea0SLionel Sambuc		}
1372ebfedea0SLionel Sambuc	}
1373ebfedea0SLionel Sambuc
1374ebfedea0SLionel Sambuc# You will find shlib_mark1 and shlib_mark2 explained in Makefile.org
1375ebfedea0SLionel Sambucmy $shared_mark = "";
1376ebfedea0SLionel Sambucif ($shared_target eq "")
1377ebfedea0SLionel Sambuc	{
1378ebfedea0SLionel Sambuc	$no_shared_warn = 1 if !$no_shared;
1379ebfedea0SLionel Sambuc	$no_shared = 1;
1380ebfedea0SLionel Sambuc	}
1381ebfedea0SLionel Sambucif (!$no_shared)
1382ebfedea0SLionel Sambuc	{
1383ebfedea0SLionel Sambuc	if ($shared_cflag ne "")
1384ebfedea0SLionel Sambuc		{
1385ebfedea0SLionel Sambuc		$cflags = "$shared_cflag -DOPENSSL_PIC $cflags";
1386ebfedea0SLionel Sambuc		}
1387ebfedea0SLionel Sambuc	}
1388ebfedea0SLionel Sambuc
1389ebfedea0SLionel Sambucif (!$IsMK1MF)
1390ebfedea0SLionel Sambuc	{
1391ebfedea0SLionel Sambuc	# add {no-}static-engine to options to allow mkdef.pl to work without extra arguments
1392ebfedea0SLionel Sambuc	if ($no_shared)
1393ebfedea0SLionel Sambuc		{
1394ebfedea0SLionel Sambuc		$openssl_other_defines.="#define OPENSSL_NO_DYNAMIC_ENGINE\n";
1395ebfedea0SLionel Sambuc		$options.=" static-engine";
1396ebfedea0SLionel Sambuc		}
1397ebfedea0SLionel Sambuc	else
1398ebfedea0SLionel Sambuc		{
1399ebfedea0SLionel Sambuc		$openssl_other_defines.="#define OPENSSL_NO_STATIC_ENGINE\n";
1400ebfedea0SLionel Sambuc		$options.=" no-static-engine";
1401ebfedea0SLionel Sambuc		}
1402ebfedea0SLionel Sambuc	}
1403ebfedea0SLionel Sambuc
1404ebfedea0SLionel Sambuc$cpuid_obj.=" uplink.o uplink-x86.o" if ($cflags =~ /\-DOPENSSL_USE_APPLINK/);
1405ebfedea0SLionel Sambuc
1406ebfedea0SLionel Sambuc#
1407ebfedea0SLionel Sambuc# Platform fix-ups
1408ebfedea0SLionel Sambuc#
1409ebfedea0SLionel Sambucif ($target =~ /\-icc$/)	# Intel C compiler
1410ebfedea0SLionel Sambuc	{
1411ebfedea0SLionel Sambuc	my $iccver=0;
1412ebfedea0SLionel Sambuc	if (open(FD,"$cc -V 2>&1 |"))
1413ebfedea0SLionel Sambuc		{
1414ebfedea0SLionel Sambuc		while(<FD>) { $iccver=$1 if (/Version ([0-9]+)\./); }
1415ebfedea0SLionel Sambuc		close(FD);
1416ebfedea0SLionel Sambuc		}
1417ebfedea0SLionel Sambuc	if ($iccver>=8)
1418ebfedea0SLionel Sambuc		{
1419ebfedea0SLionel Sambuc		# Eliminate unnecessary dependency from libirc.a. This is
1420ebfedea0SLionel Sambuc		# essential for shared library support, as otherwise
1421ebfedea0SLionel Sambuc		# apps/openssl can end up in endless loop upon startup...
1422ebfedea0SLionel Sambuc		$cflags.=" -Dmemcpy=__builtin_memcpy -Dmemset=__builtin_memset";
1423ebfedea0SLionel Sambuc		}
1424ebfedea0SLionel Sambuc	if ($iccver>=9)
1425ebfedea0SLionel Sambuc		{
1426ebfedea0SLionel Sambuc		$cflags.=" -i-static";
1427ebfedea0SLionel Sambuc		$cflags=~s/\-no_cpprt/-no-cpprt/;
1428ebfedea0SLionel Sambuc		}
1429ebfedea0SLionel Sambuc	if ($iccver>=10)
1430ebfedea0SLionel Sambuc		{
1431ebfedea0SLionel Sambuc		$cflags=~s/\-i\-static/-static-intel/;
1432ebfedea0SLionel Sambuc		}
1433ebfedea0SLionel Sambuc	}
1434ebfedea0SLionel Sambuc
1435ebfedea0SLionel Sambuc# Unlike other OSes (like Solaris, Linux, Tru64, IRIX) BSD run-time
1436ebfedea0SLionel Sambuc# linkers (tested OpenBSD, NetBSD and FreeBSD) "demand" RPATH set on
1437ebfedea0SLionel Sambuc# .so objects. Apparently application RPATH is not global and does
1438ebfedea0SLionel Sambuc# not apply to .so linked with other .so. Problem manifests itself
1439ebfedea0SLionel Sambuc# when libssl.so fails to load libcrypto.so. One can argue that we
1440ebfedea0SLionel Sambuc# should engrave this into Makefile.shared rules or into BSD-* config
1441ebfedea0SLionel Sambuc# lines above. Meanwhile let's try to be cautious and pass -rpath to
1442ebfedea0SLionel Sambuc# linker only when --prefix is not /usr.
1443ebfedea0SLionel Sambucif ($target =~ /^BSD\-/)
1444ebfedea0SLionel Sambuc	{
1445ebfedea0SLionel Sambuc	$shared_ldflag.=" -Wl,-rpath,\$(LIBRPATH)" if ($prefix !~ m|^/usr[/]*$|);
1446ebfedea0SLionel Sambuc	}
1447ebfedea0SLionel Sambuc
1448ebfedea0SLionel Sambucif ($sys_id ne "")
1449ebfedea0SLionel Sambuc	{
1450ebfedea0SLionel Sambuc	#$cflags="-DOPENSSL_SYSNAME_$sys_id $cflags";
1451ebfedea0SLionel Sambuc	$openssl_sys_defines="#define OPENSSL_SYSNAME_$sys_id\n";
1452ebfedea0SLionel Sambuc	}
1453ebfedea0SLionel Sambuc
1454ebfedea0SLionel Sambucif ($ranlib eq "")
1455ebfedea0SLionel Sambuc	{
1456ebfedea0SLionel Sambuc	$ranlib = $default_ranlib;
1457ebfedea0SLionel Sambuc	}
1458ebfedea0SLionel Sambuc
1459ebfedea0SLionel Sambuc#my ($bn1)=split(/\s+/,$bn_obj);
1460ebfedea0SLionel Sambuc#$bn1 = "" unless defined $bn1;
1461ebfedea0SLionel Sambuc#$bn1=$bn_asm unless ($bn1 =~ /\.o$/);
1462ebfedea0SLionel Sambuc#$bn_obj="$bn1";
1463ebfedea0SLionel Sambuc
1464ebfedea0SLionel Sambuc$cpuid_obj="" if ($processor eq "386");
1465ebfedea0SLionel Sambuc
1466ebfedea0SLionel Sambuc$bn_obj = $bn_asm unless $bn_obj ne "";
1467ebfedea0SLionel Sambuc# bn-586 is the only one implementing bn_*_part_words
1468ebfedea0SLionel Sambuc$cflags.=" -DOPENSSL_BN_ASM_PART_WORDS" if ($bn_obj =~ /bn-586/);
1469ebfedea0SLionel Sambuc$cflags.=" -DOPENSSL_IA32_SSE2" if (!$no_sse2 && $bn_obj =~ /86/);
1470ebfedea0SLionel Sambuc
1471ebfedea0SLionel Sambuc$cflags.=" -DOPENSSL_BN_ASM_MONT" if ($bn_obj =~ /-mont/);
1472ebfedea0SLionel Sambuc$cflags.=" -DOPENSSL_BN_ASM_MONT5" if ($bn_obj =~ /-mont5/);
1473ebfedea0SLionel Sambuc$cflags.=" -DOPENSSL_BN_ASM_GF2m" if ($bn_obj =~ /-gf2m/);
1474ebfedea0SLionel Sambuc
1475ebfedea0SLionel Sambucif ($fips)
1476ebfedea0SLionel Sambuc	{
1477ebfedea0SLionel Sambuc	$openssl_other_defines.="#define OPENSSL_FIPS\n";
1478ebfedea0SLionel Sambuc	$cflags .= " -I\$(FIPSDIR)/include";
1479ebfedea0SLionel Sambuc	}
1480ebfedea0SLionel Sambuc
1481ebfedea0SLionel Sambuc$cpuid_obj="mem_clr.o"	unless ($cpuid_obj =~ /\.o$/);
1482ebfedea0SLionel Sambuc$des_obj=$des_enc	unless ($des_obj =~ /\.o$/);
1483ebfedea0SLionel Sambuc$bf_obj=$bf_enc		unless ($bf_obj =~ /\.o$/);
1484ebfedea0SLionel Sambuc$cast_obj=$cast_enc	unless ($cast_obj =~ /\.o$/);
1485ebfedea0SLionel Sambuc$rc4_obj=$rc4_enc	unless ($rc4_obj =~ /\.o$/);
1486ebfedea0SLionel Sambuc$rc5_obj=$rc5_enc	unless ($rc5_obj =~ /\.o$/);
1487ebfedea0SLionel Sambucif ($sha1_obj =~ /\.o$/)
1488ebfedea0SLionel Sambuc	{
1489ebfedea0SLionel Sambuc#	$sha1_obj=$sha1_enc;
1490ebfedea0SLionel Sambuc	$cflags.=" -DSHA1_ASM"   if ($sha1_obj =~ /sx86/ || $sha1_obj =~ /sha1/);
1491ebfedea0SLionel Sambuc	$cflags.=" -DSHA256_ASM" if ($sha1_obj =~ /sha256/);
1492ebfedea0SLionel Sambuc	$cflags.=" -DSHA512_ASM" if ($sha1_obj =~ /sha512/);
1493ebfedea0SLionel Sambuc	if ($sha1_obj =~ /sse2/)
1494ebfedea0SLionel Sambuc	    {	if ($no_sse2)
1495ebfedea0SLionel Sambuc		{   $sha1_obj =~ s/\S*sse2\S+//;        }
1496ebfedea0SLionel Sambuc		elsif ($cflags !~ /OPENSSL_IA32_SSE2/)
1497ebfedea0SLionel Sambuc		{   $cflags.=" -DOPENSSL_IA32_SSE2";    }
1498ebfedea0SLionel Sambuc	    }
1499ebfedea0SLionel Sambuc	}
1500ebfedea0SLionel Sambucif ($md5_obj =~ /\.o$/)
1501ebfedea0SLionel Sambuc	{
1502ebfedea0SLionel Sambuc#	$md5_obj=$md5_enc;
1503ebfedea0SLionel Sambuc	$cflags.=" -DMD5_ASM";
1504ebfedea0SLionel Sambuc	}
1505ebfedea0SLionel Sambucif ($rmd160_obj =~ /\.o$/)
1506ebfedea0SLionel Sambuc	{
1507ebfedea0SLionel Sambuc#	$rmd160_obj=$rmd160_enc;
1508ebfedea0SLionel Sambuc	$cflags.=" -DRMD160_ASM";
1509ebfedea0SLionel Sambuc	}
1510ebfedea0SLionel Sambucif ($aes_obj =~ /\.o$/)
1511ebfedea0SLionel Sambuc	{
1512ebfedea0SLionel Sambuc	$cflags.=" -DAES_ASM";
1513ebfedea0SLionel Sambuc	# aes-ctr.o is not a real file, only indication that assembler
1514ebfedea0SLionel Sambuc	# module implements AES_ctr32_encrypt...
1515ebfedea0SLionel Sambuc	$cflags.=" -DAES_CTR_ASM" if ($aes_obj =~ s/\s*aes\-ctr\.o//);
1516ebfedea0SLionel Sambuc	# aes-xts.o indicates presense of AES_xts_[en|de]crypt...
1517ebfedea0SLionel Sambuc	$cflags.=" -DAES_XTS_ASM" if ($aes_obj =~ s/\s*aes\-xts\.o//);
1518ebfedea0SLionel Sambuc	$aes_obj =~ s/\s*(vpaes|aesni)\-x86\.o//g if ($no_sse2);
1519ebfedea0SLionel Sambuc	$cflags.=" -DVPAES_ASM" if ($aes_obj =~ m/vpaes/);
1520ebfedea0SLionel Sambuc	$cflags.=" -DBSAES_ASM" if ($aes_obj =~ m/bsaes/);
1521ebfedea0SLionel Sambuc	}
1522ebfedea0SLionel Sambucelse	{
1523ebfedea0SLionel Sambuc	$aes_obj=$aes_enc;
1524ebfedea0SLionel Sambuc	}
1525ebfedea0SLionel Sambuc$wp_obj="" if ($wp_obj =~ /mmx/ && $processor eq "386");
1526ebfedea0SLionel Sambucif ($wp_obj =~ /\.o$/ && !$disabled{"whirlpool"})
1527ebfedea0SLionel Sambuc	{
1528ebfedea0SLionel Sambuc	$cflags.=" -DWHIRLPOOL_ASM";
1529ebfedea0SLionel Sambuc	}
1530ebfedea0SLionel Sambucelse	{
1531ebfedea0SLionel Sambuc	$wp_obj="wp_block.o";
1532ebfedea0SLionel Sambuc	}
1533ebfedea0SLionel Sambuc$cmll_obj=$cmll_enc	unless ($cmll_obj =~ /.o$/);
1534ebfedea0SLionel Sambucif ($modes_obj =~ /ghash/)
1535ebfedea0SLionel Sambuc	{
1536ebfedea0SLionel Sambuc	$cflags.=" -DGHASH_ASM";
1537ebfedea0SLionel Sambuc	}
1538ebfedea0SLionel Sambuc
1539ebfedea0SLionel Sambuc# "Stringify" the C flags string.  This permits it to be made part of a string
1540ebfedea0SLionel Sambuc# and works as well on command lines.
1541ebfedea0SLionel Sambuc$cflags =~ s/([\\\"])/\\\1/g;
1542ebfedea0SLionel Sambuc
1543ebfedea0SLionel Sambucmy $version = "unknown";
1544ebfedea0SLionel Sambucmy $version_num = "unknown";
1545ebfedea0SLionel Sambucmy $major = "unknown";
1546ebfedea0SLionel Sambucmy $minor = "unknown";
1547ebfedea0SLionel Sambucmy $shlib_version_number = "unknown";
1548ebfedea0SLionel Sambucmy $shlib_version_history = "unknown";
1549ebfedea0SLionel Sambucmy $shlib_major = "unknown";
1550ebfedea0SLionel Sambucmy $shlib_minor = "unknown";
1551ebfedea0SLionel Sambuc
1552ebfedea0SLionel Sambucopen(IN,'<crypto/opensslv.h') || die "unable to read opensslv.h:$!\n";
1553ebfedea0SLionel Sambucwhile (<IN>)
1554ebfedea0SLionel Sambuc	{
1555ebfedea0SLionel Sambuc	$version=$1 if /OPENSSL.VERSION.TEXT.*OpenSSL (\S+) /;
1556ebfedea0SLionel Sambuc	$version_num=$1 if /OPENSSL.VERSION.NUMBER.*0x(\S+)/;
1557ebfedea0SLionel Sambuc	$shlib_version_number=$1 if /SHLIB_VERSION_NUMBER *"([^"]+)"/;
1558ebfedea0SLionel Sambuc	$shlib_version_history=$1 if /SHLIB_VERSION_HISTORY *"([^"]*)"/;
1559ebfedea0SLionel Sambuc	}
1560ebfedea0SLionel Sambucclose(IN);
1561ebfedea0SLionel Sambucif ($shlib_version_history ne "") { $shlib_version_history .= ":"; }
1562ebfedea0SLionel Sambuc
1563ebfedea0SLionel Sambucif ($version =~ /(^[0-9]*)\.([0-9\.]*)/)
1564ebfedea0SLionel Sambuc	{
1565ebfedea0SLionel Sambuc	$major=$1;
1566ebfedea0SLionel Sambuc	$minor=$2;
1567ebfedea0SLionel Sambuc	}
1568ebfedea0SLionel Sambuc
1569ebfedea0SLionel Sambucif ($shlib_version_number =~ /(^[0-9]*)\.([0-9\.]*)/)
1570ebfedea0SLionel Sambuc	{
1571ebfedea0SLionel Sambuc	$shlib_major=$1;
1572ebfedea0SLionel Sambuc	$shlib_minor=$2;
1573ebfedea0SLionel Sambuc	}
1574ebfedea0SLionel Sambuc
1575ebfedea0SLionel Sambucif ($strict_warnings)
1576ebfedea0SLionel Sambuc	{
1577ebfedea0SLionel Sambuc	my $wopt;
1578ebfedea0SLionel Sambuc	die "ERROR --strict-warnings requires gcc" unless ($cc =~ /gcc$/);
1579ebfedea0SLionel Sambuc	foreach $wopt (split /\s+/, $gcc_devteam_warn)
1580ebfedea0SLionel Sambuc		{
1581ebfedea0SLionel Sambuc		$cflags .= " $wopt" unless ($cflags =~ /$wopt/)
1582ebfedea0SLionel Sambuc		}
1583ebfedea0SLionel Sambuc	}
1584ebfedea0SLionel Sambuc
1585ebfedea0SLionel Sambucopen(IN,'<Makefile.org') || die "unable to read Makefile.org:$!\n";
1586ebfedea0SLionel Sambucunlink("$Makefile.new") || die "unable to remove old $Makefile.new:$!\n" if -e "$Makefile.new";
1587ebfedea0SLionel Sambucopen(OUT,">$Makefile.new") || die "unable to create $Makefile.new:$!\n";
1588ebfedea0SLionel Sambucprint OUT "### Generated automatically from Makefile.org by Configure.\n\n";
1589ebfedea0SLionel Sambucmy $sdirs=0;
1590ebfedea0SLionel Sambucwhile (<IN>)
1591ebfedea0SLionel Sambuc	{
1592ebfedea0SLionel Sambuc	chomp;
1593ebfedea0SLionel Sambuc	$sdirs = 1 if /^SDIRS=/;
1594ebfedea0SLionel Sambuc	if ($sdirs) {
1595ebfedea0SLionel Sambuc		my $dir;
1596ebfedea0SLionel Sambuc		foreach $dir (@skip) {
1597ebfedea0SLionel Sambuc			s/(\s)$dir /$1/;
1598ebfedea0SLionel Sambuc			s/\s$dir$//;
1599ebfedea0SLionel Sambuc			}
1600ebfedea0SLionel Sambuc		}
1601ebfedea0SLionel Sambuc	$sdirs = 0 unless /\\$/;
1602ebfedea0SLionel Sambuc        s/engines // if (/^DIRS=/ && $disabled{"engine"});
1603ebfedea0SLionel Sambuc	s/ccgost// if (/^ENGDIRS=/ && $disabled{"gost"});
1604ebfedea0SLionel Sambuc	s/^VERSION=.*/VERSION=$version/;
1605ebfedea0SLionel Sambuc	s/^MAJOR=.*/MAJOR=$major/;
1606ebfedea0SLionel Sambuc	s/^MINOR=.*/MINOR=$minor/;
1607ebfedea0SLionel Sambuc	s/^SHLIB_VERSION_NUMBER=.*/SHLIB_VERSION_NUMBER=$shlib_version_number/;
1608ebfedea0SLionel Sambuc	s/^SHLIB_VERSION_HISTORY=.*/SHLIB_VERSION_HISTORY=$shlib_version_history/;
1609ebfedea0SLionel Sambuc	s/^SHLIB_MAJOR=.*/SHLIB_MAJOR=$shlib_major/;
1610ebfedea0SLionel Sambuc	s/^SHLIB_MINOR=.*/SHLIB_MINOR=$shlib_minor/;
1611ebfedea0SLionel Sambuc	s/^SHLIB_EXT=.*/SHLIB_EXT=$shared_extension/;
1612ebfedea0SLionel Sambuc	s/^INSTALLTOP=.*$/INSTALLTOP=$prefix/;
1613ebfedea0SLionel Sambuc	s/^MULTILIB=.*$/MULTILIB=$multilib/;
1614ebfedea0SLionel Sambuc	s/^OPENSSLDIR=.*$/OPENSSLDIR=$openssldir/;
1615ebfedea0SLionel Sambuc	s/^LIBDIR=.*$/LIBDIR=$libdir/;
1616ebfedea0SLionel Sambuc	s/^INSTALL_PREFIX=.*$/INSTALL_PREFIX=$install_prefix/;
1617ebfedea0SLionel Sambuc	s/^PLATFORM=.*$/PLATFORM=$target/;
1618ebfedea0SLionel Sambuc	s/^OPTIONS=.*$/OPTIONS=$options/;
1619ebfedea0SLionel Sambuc	s/^CONFIGURE_ARGS=.*$/CONFIGURE_ARGS=$argvstring/;
1620ebfedea0SLionel Sambuc	if ($cross_compile_prefix)
1621ebfedea0SLionel Sambuc		{
1622ebfedea0SLionel Sambuc		s/^CC=.*$/CROSS_COMPILE= $cross_compile_prefix\nCC= \$\(CROSS_COMPILE\)$cc/;
1623ebfedea0SLionel Sambuc		s/^AR=\s*/AR= \$\(CROSS_COMPILE\)/;
1624ebfedea0SLionel Sambuc		s/^NM=\s*/NM= \$\(CROSS_COMPILE\)/;
1625ebfedea0SLionel Sambuc		s/^RANLIB=\s*/RANLIB= \$\(CROSS_COMPILE\)/;
1626ebfedea0SLionel Sambuc		s/^MAKEDEPPROG=.*$/MAKEDEPPROG= \$\(CROSS_COMPILE\)$cc/ if $cc eq "gcc";
1627ebfedea0SLionel Sambuc		}
1628ebfedea0SLionel Sambuc	else	{
1629ebfedea0SLionel Sambuc		s/^CC=.*$/CC= $cc/;
1630ebfedea0SLionel Sambuc		s/^AR=\s*ar/AR= $ar/;
1631ebfedea0SLionel Sambuc		s/^RANLIB=.*/RANLIB= $ranlib/;
1632ebfedea0SLionel Sambuc		s/^MAKEDEPPROG=.*$/MAKEDEPPROG= $cc/ if $cc eq "gcc";
1633ebfedea0SLionel Sambuc		}
1634ebfedea0SLionel Sambuc	s/^CFLAG=.*$/CFLAG= $cflags/;
1635ebfedea0SLionel Sambuc	s/^DEPFLAG=.*$/DEPFLAG=$depflags/;
1636ebfedea0SLionel Sambuc	s/^PEX_LIBS=.*$/PEX_LIBS= $prelflags/;
1637ebfedea0SLionel Sambuc	s/^EX_LIBS=.*$/EX_LIBS= $lflags/;
1638ebfedea0SLionel Sambuc	s/^EXE_EXT=.*$/EXE_EXT= $exe_ext/;
1639ebfedea0SLionel Sambuc	s/^CPUID_OBJ=.*$/CPUID_OBJ= $cpuid_obj/;
1640ebfedea0SLionel Sambuc	s/^BN_ASM=.*$/BN_ASM= $bn_obj/;
1641ebfedea0SLionel Sambuc	s/^DES_ENC=.*$/DES_ENC= $des_obj/;
1642ebfedea0SLionel Sambuc	s/^AES_ENC=.*$/AES_ENC= $aes_obj/;
1643ebfedea0SLionel Sambuc	s/^BF_ENC=.*$/BF_ENC= $bf_obj/;
1644ebfedea0SLionel Sambuc	s/^CAST_ENC=.*$/CAST_ENC= $cast_obj/;
1645ebfedea0SLionel Sambuc	s/^RC4_ENC=.*$/RC4_ENC= $rc4_obj/;
1646ebfedea0SLionel Sambuc	s/^RC5_ENC=.*$/RC5_ENC= $rc5_obj/;
1647ebfedea0SLionel Sambuc	s/^MD5_ASM_OBJ=.*$/MD5_ASM_OBJ= $md5_obj/;
1648ebfedea0SLionel Sambuc	s/^SHA1_ASM_OBJ=.*$/SHA1_ASM_OBJ= $sha1_obj/;
1649ebfedea0SLionel Sambuc	s/^RMD160_ASM_OBJ=.*$/RMD160_ASM_OBJ= $rmd160_obj/;
1650ebfedea0SLionel Sambuc	s/^WP_ASM_OBJ=.*$/WP_ASM_OBJ= $wp_obj/;
1651ebfedea0SLionel Sambuc	s/^CMLL_ENC=.*$/CMLL_ENC= $cmll_obj/;
1652ebfedea0SLionel Sambuc	s/^MODES_ASM_OBJ.=*$/MODES_ASM_OBJ= $modes_obj/;
1653ebfedea0SLionel Sambuc	s/^ENGINES_ASM_OBJ.=*$/ENGINES_ASM_OBJ= $engines_obj/;
1654ebfedea0SLionel Sambuc	s/^PERLASM_SCHEME=.*$/PERLASM_SCHEME= $perlasm_scheme/;
1655ebfedea0SLionel Sambuc	s/^PROCESSOR=.*/PROCESSOR= $processor/;
1656ebfedea0SLionel Sambuc	s/^ARFLAGS=.*/ARFLAGS= $arflags/;
1657ebfedea0SLionel Sambuc	s/^PERL=.*/PERL= $perl/;
1658ebfedea0SLionel Sambuc	s/^KRB5_INCLUDES=.*/KRB5_INCLUDES=$withargs{"krb5-include"}/;
1659ebfedea0SLionel Sambuc	s/^LIBKRB5=.*/LIBKRB5=$withargs{"krb5-lib"}/;
1660ebfedea0SLionel Sambuc	s/^LIBZLIB=.*/LIBZLIB=$withargs{"zlib-lib"}/;
1661ebfedea0SLionel Sambuc	s/^ZLIB_INCLUDE=.*/ZLIB_INCLUDE=$withargs{"zlib-include"}/;
1662ebfedea0SLionel Sambuc
1663ebfedea0SLionel Sambuc	s/^FIPSDIR=.*/FIPSDIR=$fipsdir/;
1664ebfedea0SLionel Sambuc	s/^FIPSLIBDIR=.*/FIPSLIBDIR=$fipslibdir/;
1665ebfedea0SLionel Sambuc	s/^FIPSCANLIB=.*/FIPSCANLIB=libcrypto/ if $fips;
1666ebfedea0SLionel Sambuc	s/^BASEADDR=.*/BASEADDR=$baseaddr/;
1667ebfedea0SLionel Sambuc
1668ebfedea0SLionel Sambuc	s/^SHLIB_TARGET=.*/SHLIB_TARGET=$shared_target/;
1669ebfedea0SLionel Sambuc	s/^SHLIB_MARK=.*/SHLIB_MARK=$shared_mark/;
1670ebfedea0SLionel Sambuc	s/^SHARED_LIBS=.*/SHARED_LIBS=\$(SHARED_CRYPTO) \$(SHARED_SSL)/ if (!$no_shared);
1671ebfedea0SLionel Sambuc	if ($shared_extension ne "" && $shared_extension =~ /^\.s([ol])\.[^\.]*$/)
1672ebfedea0SLionel Sambuc		{
1673ebfedea0SLionel Sambuc		my $sotmp = $1;
1674ebfedea0SLionel Sambuc		s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp/;
1675ebfedea0SLionel Sambuc		}
1676ebfedea0SLionel Sambuc	elsif ($shared_extension ne "" && $shared_extension =~ /^\.[^\.]*\.dylib$/)
1677ebfedea0SLionel Sambuc		{
1678ebfedea0SLionel Sambuc		s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.dylib/;
1679ebfedea0SLionel Sambuc		}
1680ebfedea0SLionel Sambuc	elsif ($shared_extension ne "" && $shared_extension =~ /^\.s([ol])\.[^\.]*\.[^\.]*$/)
1681ebfedea0SLionel Sambuc		{
1682ebfedea0SLionel Sambuc		my $sotmp = $1;
1683ebfedea0SLionel Sambuc		s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp.\$(SHLIB_MAJOR) .s$sotmp/;
1684ebfedea0SLionel Sambuc		}
1685ebfedea0SLionel Sambuc	elsif ($shared_extension ne "" && $shared_extension =~ /^\.[^\.]*\.[^\.]*\.dylib$/)
1686ebfedea0SLionel Sambuc		{
1687ebfedea0SLionel Sambuc		s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.\$(SHLIB_MAJOR).dylib .dylib/;
1688ebfedea0SLionel Sambuc		}
1689ebfedea0SLionel Sambuc	s/^SHARED_LDFLAGS=.*/SHARED_LDFLAGS=$shared_ldflag/;
1690ebfedea0SLionel Sambuc	print OUT $_."\n";
1691ebfedea0SLionel Sambuc	}
1692ebfedea0SLionel Sambucclose(IN);
1693ebfedea0SLionel Sambucclose(OUT);
1694ebfedea0SLionel Sambucrename($Makefile,"$Makefile.bak") || die "unable to rename $Makefile\n" if -e $Makefile;
1695ebfedea0SLionel Sambucrename("$Makefile.new",$Makefile) || die "unable to rename $Makefile.new\n";
1696ebfedea0SLionel Sambuc
1697ebfedea0SLionel Sambucprint "CC            =$cc\n";
1698ebfedea0SLionel Sambucprint "CFLAG         =$cflags\n";
1699ebfedea0SLionel Sambucprint "EX_LIBS       =$lflags\n";
1700ebfedea0SLionel Sambucprint "CPUID_OBJ     =$cpuid_obj\n";
1701ebfedea0SLionel Sambucprint "BN_ASM        =$bn_obj\n";
1702ebfedea0SLionel Sambucprint "DES_ENC       =$des_obj\n";
1703ebfedea0SLionel Sambucprint "AES_ENC       =$aes_obj\n";
1704ebfedea0SLionel Sambucprint "BF_ENC        =$bf_obj\n";
1705ebfedea0SLionel Sambucprint "CAST_ENC      =$cast_obj\n";
1706ebfedea0SLionel Sambucprint "RC4_ENC       =$rc4_obj\n";
1707ebfedea0SLionel Sambucprint "RC5_ENC       =$rc5_obj\n";
1708ebfedea0SLionel Sambucprint "MD5_OBJ_ASM   =$md5_obj\n";
1709ebfedea0SLionel Sambucprint "SHA1_OBJ_ASM  =$sha1_obj\n";
1710ebfedea0SLionel Sambucprint "RMD160_OBJ_ASM=$rmd160_obj\n";
1711ebfedea0SLionel Sambucprint "CMLL_ENC      =$cmll_obj\n";
1712ebfedea0SLionel Sambucprint "MODES_OBJ     =$modes_obj\n";
1713ebfedea0SLionel Sambucprint "ENGINES_OBJ   =$engines_obj\n";
1714ebfedea0SLionel Sambucprint "PROCESSOR     =$processor\n";
1715ebfedea0SLionel Sambucprint "RANLIB        =$ranlib\n";
1716ebfedea0SLionel Sambucprint "ARFLAGS       =$arflags\n";
1717ebfedea0SLionel Sambucprint "PERL          =$perl\n";
1718ebfedea0SLionel Sambucprint "KRB5_INCLUDES =",$withargs{"krb5-include"},"\n"
1719ebfedea0SLionel Sambuc	if $withargs{"krb5-include"} ne "";
1720ebfedea0SLionel Sambuc
1721ebfedea0SLionel Sambucmy $des_ptr=0;
1722ebfedea0SLionel Sambucmy $des_risc1=0;
1723ebfedea0SLionel Sambucmy $des_risc2=0;
1724ebfedea0SLionel Sambucmy $des_unroll=0;
1725ebfedea0SLionel Sambucmy $bn_ll=0;
1726ebfedea0SLionel Sambucmy $def_int=2;
1727ebfedea0SLionel Sambucmy $rc4_int=$def_int;
1728ebfedea0SLionel Sambucmy $md2_int=$def_int;
1729ebfedea0SLionel Sambucmy $idea_int=$def_int;
1730ebfedea0SLionel Sambucmy $rc2_int=$def_int;
1731ebfedea0SLionel Sambucmy $rc4_idx=0;
1732ebfedea0SLionel Sambucmy $rc4_chunk=0;
1733ebfedea0SLionel Sambucmy $bf_ptr=0;
1734ebfedea0SLionel Sambucmy @type=("char","short","int","long");
1735ebfedea0SLionel Sambucmy ($b64l,$b64,$b32,$b16,$b8)=(0,0,1,0,0);
1736ebfedea0SLionel Sambucmy $export_var_as_fn=0;
1737ebfedea0SLionel Sambuc
1738ebfedea0SLionel Sambucmy $des_int;
1739ebfedea0SLionel Sambuc
1740ebfedea0SLionel Sambucforeach (sort split(/\s+/,$bn_ops))
1741ebfedea0SLionel Sambuc	{
1742ebfedea0SLionel Sambuc	$des_ptr=1 if /DES_PTR/;
1743ebfedea0SLionel Sambuc	$des_risc1=1 if /DES_RISC1/;
1744ebfedea0SLionel Sambuc	$des_risc2=1 if /DES_RISC2/;
1745ebfedea0SLionel Sambuc	$des_unroll=1 if /DES_UNROLL/;
1746ebfedea0SLionel Sambuc	$des_int=1 if /DES_INT/;
1747ebfedea0SLionel Sambuc	$bn_ll=1 if /BN_LLONG/;
1748ebfedea0SLionel Sambuc	$rc4_int=0 if /RC4_CHAR/;
1749ebfedea0SLionel Sambuc	$rc4_int=3 if /RC4_LONG/;
1750ebfedea0SLionel Sambuc	$rc4_idx=1 if /RC4_INDEX/;
1751ebfedea0SLionel Sambuc	$rc4_chunk=1 if /RC4_CHUNK/;
1752ebfedea0SLionel Sambuc	$rc4_chunk=2 if /RC4_CHUNK_LL/;
1753ebfedea0SLionel Sambuc	$md2_int=0 if /MD2_CHAR/;
1754ebfedea0SLionel Sambuc	$md2_int=3 if /MD2_LONG/;
1755ebfedea0SLionel Sambuc	$idea_int=1 if /IDEA_SHORT/;
1756ebfedea0SLionel Sambuc	$idea_int=3 if /IDEA_LONG/;
1757ebfedea0SLionel Sambuc	$rc2_int=1 if /RC2_SHORT/;
1758ebfedea0SLionel Sambuc	$rc2_int=3 if /RC2_LONG/;
1759ebfedea0SLionel Sambuc	$bf_ptr=1 if $_ eq "BF_PTR";
1760ebfedea0SLionel Sambuc	$bf_ptr=2 if $_ eq "BF_PTR2";
1761ebfedea0SLionel Sambuc	($b64l,$b64,$b32,$b16,$b8)=(0,1,0,0,0) if /SIXTY_FOUR_BIT/;
1762ebfedea0SLionel Sambuc	($b64l,$b64,$b32,$b16,$b8)=(1,0,0,0,0) if /SIXTY_FOUR_BIT_LONG/;
1763ebfedea0SLionel Sambuc	($b64l,$b64,$b32,$b16,$b8)=(0,0,1,0,0) if /THIRTY_TWO_BIT/;
1764ebfedea0SLionel Sambuc	($b64l,$b64,$b32,$b16,$b8)=(0,0,0,1,0) if /SIXTEEN_BIT/;
1765ebfedea0SLionel Sambuc	($b64l,$b64,$b32,$b16,$b8)=(0,0,0,0,1) if /EIGHT_BIT/;
1766ebfedea0SLionel Sambuc	$export_var_as_fn=1 if /EXPORT_VAR_AS_FN/;
1767ebfedea0SLionel Sambuc	}
1768ebfedea0SLionel Sambuc
1769ebfedea0SLionel Sambucopen(IN,'<crypto/opensslconf.h.in') || die "unable to read crypto/opensslconf.h.in:$!\n";
1770ebfedea0SLionel Sambucunlink("crypto/opensslconf.h.new") || die "unable to remove old crypto/opensslconf.h.new:$!\n" if -e "crypto/opensslconf.h.new";
1771ebfedea0SLionel Sambucopen(OUT,'>crypto/opensslconf.h.new') || die "unable to create crypto/opensslconf.h.new:$!\n";
1772ebfedea0SLionel Sambucprint OUT "/* opensslconf.h */\n";
1773ebfedea0SLionel Sambucprint OUT "/* WARNING: Generated automatically from opensslconf.h.in by Configure. */\n\n";
1774ebfedea0SLionel Sambuc
1775*0a6a1f1dSLionel Sambucprint OUT "#ifdef  __cplusplus\n";
1776*0a6a1f1dSLionel Sambucprint OUT "extern \"C\" {\n";
1777*0a6a1f1dSLionel Sambucprint OUT "#endif\n";
1778ebfedea0SLionel Sambucprint OUT "/* OpenSSL was configured with the following options: */\n";
1779ebfedea0SLionel Sambucmy $openssl_algorithm_defines_trans = $openssl_algorithm_defines;
1780ebfedea0SLionel Sambuc$openssl_experimental_defines =~ s/^\s*#\s*define\s+OPENSSL_NO_(.*)/#ifndef OPENSSL_EXPERIMENTAL_$1\n# ifndef OPENSSL_NO_$1\n#  define OPENSSL_NO_$1\n# endif\n#endif/mg;
1781ebfedea0SLionel Sambuc$openssl_algorithm_defines_trans =~ s/^\s*#\s*define\s+OPENSSL_(.*)/# if defined(OPENSSL_$1) \&\& !defined($1)\n#  define $1\n# endif/mg;
1782ebfedea0SLionel Sambuc$openssl_algorithm_defines =~ s/^\s*#\s*define\s+(.*)/#ifndef $1\n# define $1\n#endif/mg;
1783ebfedea0SLionel Sambuc$openssl_algorithm_defines = "   /* no ciphers excluded */\n" if $openssl_algorithm_defines eq "";
1784ebfedea0SLionel Sambuc$openssl_thread_defines =~ s/^\s*#\s*define\s+(.*)/#ifndef $1\n# define $1\n#endif/mg;
1785ebfedea0SLionel Sambuc$openssl_sys_defines =~ s/^\s*#\s*define\s+(.*)/#ifndef $1\n# define $1\n#endif/mg;
1786ebfedea0SLionel Sambuc$openssl_other_defines =~ s/^\s*#\s*define\s+(.*)/#ifndef $1\n# define $1\n#endif/mg;
1787ebfedea0SLionel Sambucprint OUT $openssl_sys_defines;
1788ebfedea0SLionel Sambucprint OUT "#ifndef OPENSSL_DOING_MAKEDEPEND\n\n";
1789ebfedea0SLionel Sambucprint OUT $openssl_experimental_defines;
1790ebfedea0SLionel Sambucprint OUT "\n";
1791ebfedea0SLionel Sambucprint OUT $openssl_algorithm_defines;
1792ebfedea0SLionel Sambucprint OUT "\n#endif /* OPENSSL_DOING_MAKEDEPEND */\n\n";
1793ebfedea0SLionel Sambucprint OUT $openssl_thread_defines;
1794ebfedea0SLionel Sambucprint OUT $openssl_other_defines,"\n";
1795ebfedea0SLionel Sambuc
1796ebfedea0SLionel Sambucprint OUT "/* The OPENSSL_NO_* macros are also defined as NO_* if the application\n";
1797ebfedea0SLionel Sambucprint OUT "   asks for it.  This is a transient feature that is provided for those\n";
1798ebfedea0SLionel Sambucprint OUT "   who haven't had the time to do the appropriate changes in their\n";
1799ebfedea0SLionel Sambucprint OUT "   applications.  */\n";
1800ebfedea0SLionel Sambucprint OUT "#ifdef OPENSSL_ALGORITHM_DEFINES\n";
1801ebfedea0SLionel Sambucprint OUT $openssl_algorithm_defines_trans;
1802ebfedea0SLionel Sambucprint OUT "#endif\n\n";
1803ebfedea0SLionel Sambuc
1804ebfedea0SLionel Sambucprint OUT "#define OPENSSL_CPUID_OBJ\n\n" if ($cpuid_obj ne "mem_clr.o");
1805ebfedea0SLionel Sambuc
1806ebfedea0SLionel Sambucwhile (<IN>)
1807ebfedea0SLionel Sambuc	{
1808ebfedea0SLionel Sambuc	if	(/^#define\s+OPENSSLDIR/)
1809ebfedea0SLionel Sambuc		{
1810ebfedea0SLionel Sambuc		my $foo = $openssldir;
1811ebfedea0SLionel Sambuc		$foo =~ s/\\/\\\\/g;
1812ebfedea0SLionel Sambuc		print OUT "#define OPENSSLDIR \"$foo\"\n";
1813ebfedea0SLionel Sambuc		}
1814ebfedea0SLionel Sambuc	elsif	(/^#define\s+ENGINESDIR/)
1815ebfedea0SLionel Sambuc		{
1816ebfedea0SLionel Sambuc		my $foo = "$prefix/$libdir/engines";
1817ebfedea0SLionel Sambuc		$foo =~ s/\\/\\\\/g;
1818ebfedea0SLionel Sambuc		print OUT "#define ENGINESDIR \"$foo\"\n";
1819ebfedea0SLionel Sambuc		}
1820ebfedea0SLionel Sambuc	elsif	(/^#((define)|(undef))\s+OPENSSL_EXPORT_VAR_AS_FUNCTION/)
1821ebfedea0SLionel Sambuc		{ printf OUT "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION\n"
1822ebfedea0SLionel Sambuc			if $export_var_as_fn;
1823ebfedea0SLionel Sambuc		  printf OUT "#%s OPENSSL_EXPORT_VAR_AS_FUNCTION\n",
1824ebfedea0SLionel Sambuc			($export_var_as_fn)?"define":"undef"; }
1825ebfedea0SLionel Sambuc	elsif	(/^#define\s+OPENSSL_UNISTD/)
1826ebfedea0SLionel Sambuc		{
1827ebfedea0SLionel Sambuc		$unistd = "<unistd.h>" if $unistd eq "";
1828ebfedea0SLionel Sambuc		print OUT "#define OPENSSL_UNISTD $unistd\n";
1829ebfedea0SLionel Sambuc		}
1830ebfedea0SLionel Sambuc	elsif	(/^#((define)|(undef))\s+SIXTY_FOUR_BIT_LONG/)
1831ebfedea0SLionel Sambuc		{ printf OUT "#%s SIXTY_FOUR_BIT_LONG\n",($b64l)?"define":"undef"; }
1832ebfedea0SLionel Sambuc	elsif	(/^#((define)|(undef))\s+SIXTY_FOUR_BIT/)
1833ebfedea0SLionel Sambuc		{ printf OUT "#%s SIXTY_FOUR_BIT\n",($b64)?"define":"undef"; }
1834ebfedea0SLionel Sambuc	elsif	(/^#((define)|(undef))\s+THIRTY_TWO_BIT/)
1835ebfedea0SLionel Sambuc		{ printf OUT "#%s THIRTY_TWO_BIT\n",($b32)?"define":"undef"; }
1836ebfedea0SLionel Sambuc	elsif	(/^#((define)|(undef))\s+SIXTEEN_BIT/)
1837ebfedea0SLionel Sambuc		{ printf OUT "#%s SIXTEEN_BIT\n",($b16)?"define":"undef"; }
1838ebfedea0SLionel Sambuc	elsif	(/^#((define)|(undef))\s+EIGHT_BIT/)
1839ebfedea0SLionel Sambuc		{ printf OUT "#%s EIGHT_BIT\n",($b8)?"define":"undef"; }
1840ebfedea0SLionel Sambuc	elsif	(/^#((define)|(undef))\s+BN_LLONG\s*$/)
1841ebfedea0SLionel Sambuc		{ printf OUT "#%s BN_LLONG\n",($bn_ll)?"define":"undef"; }
1842ebfedea0SLionel Sambuc	elsif	(/^\#define\s+DES_LONG\s+.*/)
1843ebfedea0SLionel Sambuc		{ printf OUT "#define DES_LONG unsigned %s\n",
1844ebfedea0SLionel Sambuc			($des_int)?'int':'long'; }
1845ebfedea0SLionel Sambuc	elsif	(/^\#(define|undef)\s+DES_PTR/)
1846ebfedea0SLionel Sambuc		{ printf OUT "#%s DES_PTR\n",($des_ptr)?'define':'undef'; }
1847ebfedea0SLionel Sambuc	elsif	(/^\#(define|undef)\s+DES_RISC1/)
1848ebfedea0SLionel Sambuc		{ printf OUT "#%s DES_RISC1\n",($des_risc1)?'define':'undef'; }
1849ebfedea0SLionel Sambuc	elsif	(/^\#(define|undef)\s+DES_RISC2/)
1850ebfedea0SLionel Sambuc		{ printf OUT "#%s DES_RISC2\n",($des_risc2)?'define':'undef'; }
1851ebfedea0SLionel Sambuc	elsif	(/^\#(define|undef)\s+DES_UNROLL/)
1852ebfedea0SLionel Sambuc		{ printf OUT "#%s DES_UNROLL\n",($des_unroll)?'define':'undef'; }
1853ebfedea0SLionel Sambuc	elsif	(/^#define\s+RC4_INT\s/)
1854ebfedea0SLionel Sambuc		{ printf OUT "#define RC4_INT unsigned %s\n",$type[$rc4_int]; }
1855ebfedea0SLionel Sambuc	elsif	(/^#undef\s+RC4_CHUNK/)
1856ebfedea0SLionel Sambuc		{
1857ebfedea0SLionel Sambuc		printf OUT "#undef RC4_CHUNK\n" if $rc4_chunk==0;
1858ebfedea0SLionel Sambuc		printf OUT "#define RC4_CHUNK unsigned long\n" if $rc4_chunk==1;
1859ebfedea0SLionel Sambuc		printf OUT "#define RC4_CHUNK unsigned long long\n" if $rc4_chunk==2;
1860ebfedea0SLionel Sambuc		}
1861ebfedea0SLionel Sambuc	elsif	(/^#((define)|(undef))\s+RC4_INDEX/)
1862ebfedea0SLionel Sambuc		{ printf OUT "#%s RC4_INDEX\n",($rc4_idx)?"define":"undef"; }
1863ebfedea0SLionel Sambuc	elsif (/^#(define|undef)\s+I386_ONLY/)
1864ebfedea0SLionel Sambuc		{ printf OUT "#%s I386_ONLY\n", ($processor eq "386")?
1865ebfedea0SLionel Sambuc			"define":"undef"; }
1866ebfedea0SLionel Sambuc	elsif	(/^#define\s+MD2_INT\s/)
1867ebfedea0SLionel Sambuc		{ printf OUT "#define MD2_INT unsigned %s\n",$type[$md2_int]; }
1868ebfedea0SLionel Sambuc	elsif	(/^#define\s+IDEA_INT\s/)
1869ebfedea0SLionel Sambuc		{printf OUT "#define IDEA_INT unsigned %s\n",$type[$idea_int];}
1870ebfedea0SLionel Sambuc	elsif	(/^#define\s+RC2_INT\s/)
1871ebfedea0SLionel Sambuc		{printf OUT "#define RC2_INT unsigned %s\n",$type[$rc2_int];}
1872ebfedea0SLionel Sambuc	elsif (/^#(define|undef)\s+BF_PTR/)
1873ebfedea0SLionel Sambuc		{
1874ebfedea0SLionel Sambuc		printf OUT "#undef BF_PTR\n" if $bf_ptr == 0;
1875ebfedea0SLionel Sambuc		printf OUT "#define BF_PTR\n" if $bf_ptr == 1;
1876ebfedea0SLionel Sambuc		printf OUT "#define BF_PTR2\n" if $bf_ptr == 2;
1877ebfedea0SLionel Sambuc	        }
1878ebfedea0SLionel Sambuc	else
1879ebfedea0SLionel Sambuc		{ print OUT $_; }
1880ebfedea0SLionel Sambuc	}
1881ebfedea0SLionel Sambucclose(IN);
1882*0a6a1f1dSLionel Sambucprint OUT "#ifdef  __cplusplus\n";
1883*0a6a1f1dSLionel Sambucprint OUT "}\n";
1884*0a6a1f1dSLionel Sambucprint OUT "#endif\n";
1885ebfedea0SLionel Sambucclose(OUT);
1886ebfedea0SLionel Sambucrename("crypto/opensslconf.h","crypto/opensslconf.h.bak") || die "unable to rename crypto/opensslconf.h\n" if -e "crypto/opensslconf.h";
1887ebfedea0SLionel Sambucrename("crypto/opensslconf.h.new","crypto/opensslconf.h") || die "unable to rename crypto/opensslconf.h.new\n";
1888ebfedea0SLionel Sambuc
1889ebfedea0SLionel Sambuc
1890ebfedea0SLionel Sambuc# Fix the date
1891ebfedea0SLionel Sambuc
1892ebfedea0SLionel Sambucprint "SIXTY_FOUR_BIT_LONG mode\n" if $b64l;
1893ebfedea0SLionel Sambucprint "SIXTY_FOUR_BIT mode\n" if $b64;
1894ebfedea0SLionel Sambucprint "THIRTY_TWO_BIT mode\n" if $b32;
1895ebfedea0SLionel Sambucprint "SIXTEEN_BIT mode\n" if $b16;
1896ebfedea0SLionel Sambucprint "EIGHT_BIT mode\n" if $b8;
1897ebfedea0SLionel Sambucprint "DES_PTR used\n" if $des_ptr;
1898ebfedea0SLionel Sambucprint "DES_RISC1 used\n" if $des_risc1;
1899ebfedea0SLionel Sambucprint "DES_RISC2 used\n" if $des_risc2;
1900ebfedea0SLionel Sambucprint "DES_UNROLL used\n" if $des_unroll;
1901ebfedea0SLionel Sambucprint "DES_INT used\n" if $des_int;
1902ebfedea0SLionel Sambucprint "BN_LLONG mode\n" if $bn_ll;
1903ebfedea0SLionel Sambucprint "RC4 uses u$type[$rc4_int]\n" if $rc4_int != $def_int;
1904ebfedea0SLionel Sambucprint "RC4_INDEX mode\n" if $rc4_idx;
1905ebfedea0SLionel Sambucprint "RC4_CHUNK is undefined\n" if $rc4_chunk==0;
1906ebfedea0SLionel Sambucprint "RC4_CHUNK is unsigned long\n" if $rc4_chunk==1;
1907ebfedea0SLionel Sambucprint "RC4_CHUNK is unsigned long long\n" if $rc4_chunk==2;
1908ebfedea0SLionel Sambucprint "MD2 uses u$type[$md2_int]\n" if $md2_int != $def_int;
1909ebfedea0SLionel Sambucprint "IDEA uses u$type[$idea_int]\n" if $idea_int != $def_int;
1910ebfedea0SLionel Sambucprint "RC2 uses u$type[$rc2_int]\n" if $rc2_int != $def_int;
1911ebfedea0SLionel Sambucprint "BF_PTR used\n" if $bf_ptr == 1;
1912ebfedea0SLionel Sambucprint "BF_PTR2 used\n" if $bf_ptr == 2;
1913ebfedea0SLionel Sambuc
1914ebfedea0SLionel Sambucif($IsMK1MF) {
1915ebfedea0SLionel Sambuc	open (OUT,">crypto/buildinf.h") || die "Can't open buildinf.h";
1916ebfedea0SLionel Sambuc	printf OUT <<EOF;
1917ebfedea0SLionel Sambuc#ifndef MK1MF_BUILD
1918ebfedea0SLionel Sambuc  /* auto-generated by Configure for crypto/cversion.c:
1919ebfedea0SLionel Sambuc   * for Unix builds, crypto/Makefile.ssl generates functional definitions;
1920ebfedea0SLionel Sambuc   * Windows builds (and other mk1mf builds) compile cversion.c with
1921ebfedea0SLionel Sambuc   * -DMK1MF_BUILD and use definitions added to this file by util/mk1mf.pl. */
1922ebfedea0SLionel Sambuc  #error "Windows builds (PLATFORM=$target) use mk1mf.pl-created Makefiles"
1923ebfedea0SLionel Sambuc#endif
1924ebfedea0SLionel SambucEOF
1925ebfedea0SLionel Sambuc	close(OUT);
1926ebfedea0SLionel Sambuc} else {
1927ebfedea0SLionel Sambuc	my $make_command = "$make PERL=\'$perl\'";
1928ebfedea0SLionel Sambuc	my $make_targets = "";
1929ebfedea0SLionel Sambuc	$make_targets .= " links" if $symlink;
1930ebfedea0SLionel Sambuc	$make_targets .= " depend" if $depflags ne $default_depflags && $make_depend;
1931ebfedea0SLionel Sambuc	$make_targets .= " gentests" if $symlink;
1932ebfedea0SLionel Sambuc	(system $make_command.$make_targets) == 0 or exit $?
1933ebfedea0SLionel Sambuc		if $make_targets ne "";
1934ebfedea0SLionel Sambuc	if ( $perl =~ m@^/@) {
1935ebfedea0SLionel Sambuc	    &dofile("tools/c_rehash",$perl,'^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";', '^my \$prefix;$', 'my $prefix = "' . $prefix . '";');
1936ebfedea0SLionel Sambuc	    &dofile("apps/CA.pl",$perl,'^#!/', '#!%s');
1937ebfedea0SLionel Sambuc	} else {
1938ebfedea0SLionel Sambuc	    # No path for Perl known ...
1939ebfedea0SLionel Sambuc	    &dofile("tools/c_rehash",'/usr/local/bin/perl','^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";',  '^my \$prefix;$', 'my $prefix = "' . $prefix . '";');
1940ebfedea0SLionel Sambuc	    &dofile("apps/CA.pl",'/usr/local/bin/perl','^#!/', '#!%s');
1941ebfedea0SLionel Sambuc	}
1942ebfedea0SLionel Sambuc	if ($depflags ne $default_depflags && !$make_depend) {
1943ebfedea0SLionel Sambuc		print <<EOF;
1944ebfedea0SLionel Sambuc
1945ebfedea0SLionel SambucSince you've disabled or enabled at least one algorithm, you need to do
1946ebfedea0SLionel Sambucthe following before building:
1947ebfedea0SLionel Sambuc
1948ebfedea0SLionel Sambuc	make depend
1949ebfedea0SLionel SambucEOF
1950ebfedea0SLionel Sambuc	}
1951ebfedea0SLionel Sambuc}
1952ebfedea0SLionel Sambuc
1953ebfedea0SLionel Sambuc# create the ms/version32.rc file if needed
1954ebfedea0SLionel Sambucif ($IsMK1MF && ($target !~ /^netware/)) {
1955ebfedea0SLionel Sambuc	my ($v1, $v2, $v3, $v4);
1956ebfedea0SLionel Sambuc	if ($version_num =~ /(^[0-9a-f]{1})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i) {
1957ebfedea0SLionel Sambuc		$v1=hex $1;
1958ebfedea0SLionel Sambuc		$v2=hex $2;
1959ebfedea0SLionel Sambuc		$v3=hex $3;
1960ebfedea0SLionel Sambuc		$v4=hex $4;
1961ebfedea0SLionel Sambuc	}
1962ebfedea0SLionel Sambuc	open (OUT,">ms/version32.rc") || die "Can't open ms/version32.rc";
1963ebfedea0SLionel Sambuc	print OUT <<EOF;
1964ebfedea0SLionel Sambuc#include <winver.h>
1965ebfedea0SLionel Sambuc
1966ebfedea0SLionel SambucLANGUAGE 0x09,0x01
1967ebfedea0SLionel Sambuc
1968ebfedea0SLionel Sambuc1 VERSIONINFO
1969ebfedea0SLionel Sambuc  FILEVERSION $v1,$v2,$v3,$v4
1970ebfedea0SLionel Sambuc  PRODUCTVERSION $v1,$v2,$v3,$v4
1971ebfedea0SLionel Sambuc  FILEFLAGSMASK 0x3fL
1972ebfedea0SLionel Sambuc#ifdef _DEBUG
1973ebfedea0SLionel Sambuc  FILEFLAGS 0x01L
1974ebfedea0SLionel Sambuc#else
1975ebfedea0SLionel Sambuc  FILEFLAGS 0x00L
1976ebfedea0SLionel Sambuc#endif
1977ebfedea0SLionel Sambuc  FILEOS VOS__WINDOWS32
1978ebfedea0SLionel Sambuc  FILETYPE VFT_DLL
1979ebfedea0SLionel Sambuc  FILESUBTYPE 0x0L
1980ebfedea0SLionel SambucBEGIN
1981ebfedea0SLionel Sambuc    BLOCK "StringFileInfo"
1982ebfedea0SLionel Sambuc    BEGIN
1983ebfedea0SLionel Sambuc	BLOCK "040904b0"
1984ebfedea0SLionel Sambuc	BEGIN
1985ebfedea0SLionel Sambuc	    // Required:
1986ebfedea0SLionel Sambuc	    VALUE "CompanyName", "The OpenSSL Project, http://www.openssl.org/\\0"
1987ebfedea0SLionel Sambuc	    VALUE "FileDescription", "OpenSSL Shared Library\\0"
1988ebfedea0SLionel Sambuc	    VALUE "FileVersion", "$version\\0"
1989ebfedea0SLionel Sambuc#if defined(CRYPTO)
1990ebfedea0SLionel Sambuc	    VALUE "InternalName", "libeay32\\0"
1991ebfedea0SLionel Sambuc	    VALUE "OriginalFilename", "libeay32.dll\\0"
1992ebfedea0SLionel Sambuc#elif defined(SSL)
1993ebfedea0SLionel Sambuc	    VALUE "InternalName", "ssleay32\\0"
1994ebfedea0SLionel Sambuc	    VALUE "OriginalFilename", "ssleay32.dll\\0"
1995ebfedea0SLionel Sambuc#endif
1996ebfedea0SLionel Sambuc	    VALUE "ProductName", "The OpenSSL Toolkit\\0"
1997ebfedea0SLionel Sambuc	    VALUE "ProductVersion", "$version\\0"
1998ebfedea0SLionel Sambuc	    // Optional:
1999ebfedea0SLionel Sambuc	    //VALUE "Comments", "\\0"
2000ebfedea0SLionel Sambuc	    VALUE "LegalCopyright", "Copyright � 1998-2005 The OpenSSL Project. Copyright � 1995-1998 Eric A. Young, Tim J. Hudson. All rights reserved.\\0"
2001ebfedea0SLionel Sambuc	    //VALUE "LegalTrademarks", "\\0"
2002ebfedea0SLionel Sambuc	    //VALUE "PrivateBuild", "\\0"
2003ebfedea0SLionel Sambuc	    //VALUE "SpecialBuild", "\\0"
2004ebfedea0SLionel Sambuc	END
2005ebfedea0SLionel Sambuc    END
2006ebfedea0SLionel Sambuc    BLOCK "VarFileInfo"
2007ebfedea0SLionel Sambuc    BEGIN
2008ebfedea0SLionel Sambuc        VALUE "Translation", 0x409, 0x4b0
2009ebfedea0SLionel Sambuc    END
2010ebfedea0SLionel SambucEND
2011ebfedea0SLionel SambucEOF
2012ebfedea0SLionel Sambuc	close(OUT);
2013ebfedea0SLionel Sambuc  }
2014ebfedea0SLionel Sambuc
2015ebfedea0SLionel Sambucprint <<EOF;
2016ebfedea0SLionel Sambuc
2017ebfedea0SLionel SambucConfigured for $target.
2018ebfedea0SLionel SambucEOF
2019ebfedea0SLionel Sambuc
2020ebfedea0SLionel Sambucprint <<\EOF if (!$no_threads && !$threads);
2021ebfedea0SLionel Sambuc
2022ebfedea0SLionel SambucThe library could not be configured for supporting multi-threaded
2023ebfedea0SLionel Sambucapplications as the compiler options required on this system are not known.
2024ebfedea0SLionel SambucSee file INSTALL for details if you need multi-threading.
2025ebfedea0SLionel SambucEOF
2026ebfedea0SLionel Sambuc
2027ebfedea0SLionel Sambucprint <<\EOF if ($no_shared_warn);
2028ebfedea0SLionel Sambuc
2029ebfedea0SLionel SambucYou gave the option 'shared'.  Normally, that would give you shared libraries.
2030ebfedea0SLionel SambucUnfortunately, the OpenSSL configuration doesn't include shared library support
2031ebfedea0SLionel Sambucfor this platform yet, so it will pretend you gave the option 'no-shared'.  If
2032ebfedea0SLionel Sambucyou can inform the developpers (openssl-dev\@openssl.org) how to support shared
2033ebfedea0SLionel Sambuclibraries on this platform, they will at least look at it and try their best
2034ebfedea0SLionel Sambuc(but please first make sure you have tried with a current version of OpenSSL).
2035ebfedea0SLionel SambucEOF
2036ebfedea0SLionel Sambuc
2037ebfedea0SLionel Sambucexit(0);
2038ebfedea0SLionel Sambuc
2039ebfedea0SLionel Sambucsub usage
2040ebfedea0SLionel Sambuc	{
2041ebfedea0SLionel Sambuc	print STDERR $usage;
2042ebfedea0SLionel Sambuc	print STDERR "\npick os/compiler from:\n";
2043ebfedea0SLionel Sambuc	my $j=0;
2044ebfedea0SLionel Sambuc	my $i;
2045ebfedea0SLionel Sambuc        my $k=0;
2046ebfedea0SLionel Sambuc	foreach $i (sort keys %table)
2047ebfedea0SLionel Sambuc		{
2048ebfedea0SLionel Sambuc		next if $i =~ /^debug/;
2049ebfedea0SLionel Sambuc		$k += length($i) + 1;
2050ebfedea0SLionel Sambuc		if ($k > 78)
2051ebfedea0SLionel Sambuc			{
2052ebfedea0SLionel Sambuc			print STDERR "\n";
2053ebfedea0SLionel Sambuc			$k=length($i);
2054ebfedea0SLionel Sambuc			}
2055ebfedea0SLionel Sambuc		print STDERR $i . " ";
2056ebfedea0SLionel Sambuc		}
2057ebfedea0SLionel Sambuc	foreach $i (sort keys %table)
2058ebfedea0SLionel Sambuc		{
2059ebfedea0SLionel Sambuc		next if $i !~ /^debug/;
2060ebfedea0SLionel Sambuc		$k += length($i) + 1;
2061ebfedea0SLionel Sambuc		if ($k > 78)
2062ebfedea0SLionel Sambuc			{
2063ebfedea0SLionel Sambuc			print STDERR "\n";
2064ebfedea0SLionel Sambuc			$k=length($i);
2065ebfedea0SLionel Sambuc			}
2066ebfedea0SLionel Sambuc		print STDERR $i . " ";
2067ebfedea0SLionel Sambuc		}
2068ebfedea0SLionel Sambuc	print STDERR "\n\nNOTE: If in doubt, on Unix-ish systems use './config'.\n";
2069ebfedea0SLionel Sambuc	exit(1);
2070ebfedea0SLionel Sambuc	}
2071ebfedea0SLionel Sambuc
2072ebfedea0SLionel Sambucsub which
2073ebfedea0SLionel Sambuc	{
2074ebfedea0SLionel Sambuc	my($name)=@_;
2075ebfedea0SLionel Sambuc	my $path;
2076ebfedea0SLionel Sambuc	foreach $path (split /:/, $ENV{PATH})
2077ebfedea0SLionel Sambuc		{
2078ebfedea0SLionel Sambuc		if (-f "$path/$name$exe_ext" and -x _)
2079ebfedea0SLionel Sambuc			{
2080ebfedea0SLionel Sambuc			return "$path/$name$exe_ext" unless ($name eq "perl" and
2081ebfedea0SLionel Sambuc			 system("$path/$name$exe_ext -e " . '\'exit($]<5.0);\''));
2082ebfedea0SLionel Sambuc			}
2083ebfedea0SLionel Sambuc		}
2084ebfedea0SLionel Sambuc	}
2085ebfedea0SLionel Sambuc
2086ebfedea0SLionel Sambucsub dofile
2087ebfedea0SLionel Sambuc	{
2088ebfedea0SLionel Sambuc	my $f; my $p; my %m; my @a; my $k; my $ff;
2089ebfedea0SLionel Sambuc	($f,$p,%m)=@_;
2090ebfedea0SLionel Sambuc
2091ebfedea0SLionel Sambuc	open(IN,"<$f.in") || open(IN,"<$f") || die "unable to open $f:$!\n";
2092ebfedea0SLionel Sambuc	@a=<IN>;
2093ebfedea0SLionel Sambuc	close(IN);
2094ebfedea0SLionel Sambuc	foreach $k (keys %m)
2095ebfedea0SLionel Sambuc		{
2096ebfedea0SLionel Sambuc		grep(/$k/ && ($_=sprintf($m{$k}."\n",$p)),@a);
2097ebfedea0SLionel Sambuc		}
2098ebfedea0SLionel Sambuc	open(OUT,">$f.new") || die "unable to open $f.new:$!\n";
2099ebfedea0SLionel Sambuc	print OUT @a;
2100ebfedea0SLionel Sambuc	close(OUT);
2101ebfedea0SLionel Sambuc	rename($f,"$f.bak") || die "unable to rename $f\n" if -e $f;
2102ebfedea0SLionel Sambuc	rename("$f.new",$f) || die "unable to rename $f.new\n";
2103ebfedea0SLionel Sambuc	}
2104ebfedea0SLionel Sambuc
2105ebfedea0SLionel Sambucsub print_table_entry
2106ebfedea0SLionel Sambuc	{
2107ebfedea0SLionel Sambuc	my $target = shift;
2108ebfedea0SLionel Sambuc
2109ebfedea0SLionel Sambuc	(my $cc,my $cflags,my $unistd,my $thread_cflag,my $sys_id,my $lflags,
2110ebfedea0SLionel Sambuc	my $bn_ops,my $cpuid_obj,my $bn_obj,my $des_obj,my $aes_obj, my $bf_obj,
2111ebfedea0SLionel Sambuc	my $md5_obj,my $sha1_obj,my $cast_obj,my $rc4_obj,my $rmd160_obj,
2112ebfedea0SLionel Sambuc	my $rc5_obj,my $wp_obj,my $cmll_obj,my $modes_obj, my $engines_obj,
2113ebfedea0SLionel Sambuc	my $perlasm_scheme,my $dso_scheme,my $shared_target,my $shared_cflag,
2114ebfedea0SLionel Sambuc	my $shared_ldflag,my $shared_extension,my $ranlib,my $arflags,my $multilib)=
2115ebfedea0SLionel Sambuc	split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
2116ebfedea0SLionel Sambuc
2117ebfedea0SLionel Sambuc	print <<EOF
2118ebfedea0SLionel Sambuc
2119ebfedea0SLionel Sambuc*** $target
2120ebfedea0SLionel Sambuc\$cc           = $cc
2121ebfedea0SLionel Sambuc\$cflags       = $cflags
2122ebfedea0SLionel Sambuc\$unistd       = $unistd
2123ebfedea0SLionel Sambuc\$thread_cflag = $thread_cflag
2124ebfedea0SLionel Sambuc\$sys_id       = $sys_id
2125ebfedea0SLionel Sambuc\$lflags       = $lflags
2126ebfedea0SLionel Sambuc\$bn_ops       = $bn_ops
2127ebfedea0SLionel Sambuc\$cpuid_obj    = $cpuid_obj
2128ebfedea0SLionel Sambuc\$bn_obj       = $bn_obj
2129ebfedea0SLionel Sambuc\$des_obj      = $des_obj
2130ebfedea0SLionel Sambuc\$aes_obj      = $aes_obj
2131ebfedea0SLionel Sambuc\$bf_obj       = $bf_obj
2132ebfedea0SLionel Sambuc\$md5_obj      = $md5_obj
2133ebfedea0SLionel Sambuc\$sha1_obj     = $sha1_obj
2134ebfedea0SLionel Sambuc\$cast_obj     = $cast_obj
2135ebfedea0SLionel Sambuc\$rc4_obj      = $rc4_obj
2136ebfedea0SLionel Sambuc\$rmd160_obj   = $rmd160_obj
2137ebfedea0SLionel Sambuc\$rc5_obj      = $rc5_obj
2138ebfedea0SLionel Sambuc\$wp_obj       = $wp_obj
2139ebfedea0SLionel Sambuc\$cmll_obj     = $cmll_obj
2140ebfedea0SLionel Sambuc\$modes_obj    = $modes_obj
2141ebfedea0SLionel Sambuc\$engines_obj  = $engines_obj
2142ebfedea0SLionel Sambuc\$perlasm_scheme = $perlasm_scheme
2143ebfedea0SLionel Sambuc\$dso_scheme   = $dso_scheme
2144ebfedea0SLionel Sambuc\$shared_target= $shared_target
2145ebfedea0SLionel Sambuc\$shared_cflag = $shared_cflag
2146ebfedea0SLionel Sambuc\$shared_ldflag = $shared_ldflag
2147ebfedea0SLionel Sambuc\$shared_extension = $shared_extension
2148ebfedea0SLionel Sambuc\$ranlib       = $ranlib
2149ebfedea0SLionel Sambuc\$arflags      = $arflags
2150ebfedea0SLionel Sambuc\$multilib     = $multilib
2151ebfedea0SLionel SambucEOF
2152ebfedea0SLionel Sambuc	}
2153ebfedea0SLionel Sambuc
2154ebfedea0SLionel Sambucsub test_sanity
2155ebfedea0SLionel Sambuc	{
2156ebfedea0SLionel Sambuc	my $errorcnt = 0;
2157ebfedea0SLionel Sambuc
2158ebfedea0SLionel Sambuc	print STDERR "=" x 70, "\n";
2159ebfedea0SLionel Sambuc	print STDERR "=== SANITY TESTING!\n";
2160ebfedea0SLionel Sambuc	print STDERR "=== No configuration will be done, all other arguments will be ignored!\n";
2161ebfedea0SLionel Sambuc	print STDERR "=" x 70, "\n";
2162ebfedea0SLionel Sambuc
2163ebfedea0SLionel Sambuc	foreach $target (sort keys %table)
2164ebfedea0SLionel Sambuc		{
2165ebfedea0SLionel Sambuc		@fields = split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
2166ebfedea0SLionel Sambuc
2167ebfedea0SLionel Sambuc		if ($fields[$idx_dso_scheme-1] =~ /^(beos|dl|dlfcn|win32|vms)$/)
2168ebfedea0SLionel Sambuc			{
2169ebfedea0SLionel Sambuc			$errorcnt++;
2170ebfedea0SLionel Sambuc			print STDERR "SANITY ERROR: '$target' has the dso_scheme [$idx_dso_scheme] values\n";
2171ebfedea0SLionel Sambuc			print STDERR "              in the previous field\n";
2172ebfedea0SLionel Sambuc			}
2173ebfedea0SLionel Sambuc		elsif ($fields[$idx_dso_scheme+1] =~ /^(beos|dl|dlfcn|win32|vms)$/)
2174ebfedea0SLionel Sambuc			{
2175ebfedea0SLionel Sambuc			$errorcnt++;
2176ebfedea0SLionel Sambuc			print STDERR "SANITY ERROR: '$target' has the dso_scheme [$idx_dso_scheme] values\n";
2177ebfedea0SLionel Sambuc			print STDERR "              in the following field\n";
2178ebfedea0SLionel Sambuc			}
2179ebfedea0SLionel Sambuc		elsif ($fields[$idx_dso_scheme] !~ /^(beos|dl|dlfcn|win32|vms|)$/)
2180ebfedea0SLionel Sambuc			{
2181ebfedea0SLionel Sambuc			$errorcnt++;
2182ebfedea0SLionel Sambuc			print STDERR "SANITY ERROR: '$target' has the dso_scheme [$idx_dso_scheme] field = ",$fields[$idx_dso_scheme],"\n";
2183ebfedea0SLionel Sambuc			print STDERR "              valid values are 'beos', 'dl', 'dlfcn', 'win32' and 'vms'\n";
2184ebfedea0SLionel Sambuc			}
2185ebfedea0SLionel Sambuc		}
2186ebfedea0SLionel Sambuc	print STDERR "No sanity errors detected!\n" if $errorcnt == 0;
2187ebfedea0SLionel Sambuc	return $errorcnt;
2188ebfedea0SLionel Sambuc	}
2189