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