~ubuntu-branches/ubuntu/hardy/openssl/hardy-security

« back to all changes in this revision

Viewing changes to Configure

  • Committer: Bazaar Package Importer
  • Author(s): Christoph Martin
  • Date: 2004-05-24 17:02:29 UTC
  • Revision ID: james.westby@ubuntu.com-20040524170229-ixlo08bbbly0xied
Tags: upstream-0.9.7d
ImportĀ upstreamĀ versionĀ 0.9.7d

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-engine] [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
# no-engine     do not compile in any engine code.
 
42
# no-hw-xxx     do not compile support for specific crypto hardware.
 
43
#               Generic OpenSSL-style methods relating to this support
 
44
#               are always compiled but return NULL if the hardware
 
45
#               support isn't compiled.
 
46
# no-hw         do not compile support for any crypto hardware.
 
47
# [no-]threads  [don't] try to create a library that is suitable for
 
48
#               multithreaded applications (default is "threads" if we
 
49
#               know how to do it)
 
50
# [no-]shared   [don't] try to create shared libraries when supported.
 
51
# no-asm        do not use assembler
 
52
# no-dso        do not compile in any native shared-library methods. This
 
53
#               will ensure that all methods just return NULL.
 
54
# no-krb5       do not compile in any KRB5 library or code.
 
55
# [no-]zlib     [don't] compile support for zlib compression.
 
56
# zlib-dynamic  Like "zlib", but the zlib library is expected to be a shared
 
57
#               library and will be loaded in run-time by the OpenSSL library.
 
58
# 386           generate 80386 code
 
59
# no-<cipher>   build without specified algorithm (rsa, idea, rc5, ...)
 
60
# -<xxx> +<xxx> compiler options are passed through 
 
61
#
 
62
# DEBUG_SAFESTACK use type-safe stacks to enforce type-safety on stack items
 
63
#               provided to stack calls. Generates unique stack functions for
 
64
#               each possible stack type.
 
65
# DES_PTR       use pointer lookup vs arrays in the DES in crypto/des/des_locl.h
 
66
# DES_RISC1     use different DES_ENCRYPT macro that helps reduce register
 
67
#               dependancies but needs to more registers, good for RISC CPU's
 
68
# DES_RISC2     A different RISC variant.
 
69
# DES_UNROLL    unroll the inner DES loop, sometimes helps, somtimes hinders.
 
70
# DES_INT       use 'int' instead of 'long' for DES_LONG in crypto/des/des.h
 
71
#               This is used on the DEC Alpha where long is 8 bytes
 
72
#               and int is 4
 
73
# BN_LLONG      use the type 'long long' in crypto/bn/bn.h
 
74
# MD2_CHAR      use 'char' instead of 'int' for MD2_INT in crypto/md2/md2.h
 
75
# MD2_LONG      use 'long' instead of 'int' for MD2_INT in crypto/md2/md2.h
 
76
# IDEA_SHORT    use 'short' instead of 'int' for IDEA_INT in crypto/idea/idea.h
 
77
# IDEA_LONG     use 'long' instead of 'int' for IDEA_INT in crypto/idea/idea.h
 
78
# RC2_SHORT     use 'short' instead of 'int' for RC2_INT in crypto/rc2/rc2.h
 
79
# RC2_LONG      use 'long' instead of 'int' for RC2_INT in crypto/rc2/rc2.h
 
80
# RC4_CHAR      use 'char' instead of 'int' for RC4_INT in crypto/rc4/rc4.h
 
81
# RC4_LONG      use 'long' instead of 'int' for RC4_INT in crypto/rc4/rc4.h
 
82
# RC4_INDEX     define RC4_INDEX in crypto/rc4/rc4_locl.h.  This turns on
 
83
#               array lookups instead of pointer use.
 
84
# RC4_CHUNK     enables code that handles data aligned at long (natural CPU
 
85
#               word) boundary.
 
86
# RC4_CHUNK_LL  enables code that handles data aligned at long long boundary
 
87
#               (intended for 64-bit CPUs running 32-bit OS).
 
88
# BF_PTR        use 'pointer arithmatic' for Blowfish (unsafe on Alpha).
 
89
# BF_PTR2       intel specific version (generic version is more efficient).
 
90
# MD5_ASM       use some extra md5 assember,
 
91
# SHA1_ASM      use some extra sha1 assember, must define L_ENDIAN for x86
 
92
# RMD160_ASM    use some extra ripemd160 assember,
 
93
 
 
94
my $x86_gcc_des="DES_PTR DES_RISC1 DES_UNROLL";
 
95
 
 
96
# MD2_CHAR slags pentium pros
 
97
my $x86_gcc_opts="RC4_INDEX MD2_INT";
 
98
 
 
99
# MODIFY THESE PARAMETERS IF YOU ARE GOING TO USE THE 'util/speed.sh SCRIPT
 
100
# Don't worry about these normally
 
101
 
 
102
my $tcc="cc";
 
103
my $tflags="-fast -Xa";
 
104
my $tbn_mul="";
 
105
my $tlib="-lnsl -lsocket";
 
106
#$bits1="SIXTEEN_BIT ";
 
107
#$bits2="THIRTY_TWO_BIT ";
 
108
my $bits1="THIRTY_TWO_BIT ";
 
109
my $bits2="SIXTY_FOUR_BIT ";
 
110
 
 
111
my $x86_elf_asm="asm/bn86-elf.o asm/co86-elf.o:asm/dx86-elf.o asm/yx86-elf.o:asm/bx86-elf.o:asm/mx86-elf.o:asm/sx86-elf.o:asm/cx86-elf.o:asm/rx86-elf.o:asm/rm86-elf.o:asm/r586-elf.o";
 
112
my $x86_out_asm="asm/bn86-out.o asm/co86-out.o:asm/dx86-out.o asm/yx86-out.o:asm/bx86-out.o:asm/mx86-out.o:asm/sx86-out.o:asm/cx86-out.o:asm/rx86-out.o:asm/rm86-out.o:asm/r586-out.o";
 
113
my $x86_bsdi_asm="asm/bn86bsdi.o asm/co86bsdi.o:asm/dx86bsdi.o asm/yx86bsdi.o:asm/bx86bsdi.o:asm/mx86bsdi.o:asm/sx86bsdi.o:asm/cx86bsdi.o:asm/rx86bsdi.o:asm/rm86bsdi.o:asm/r586bsdi.o";
 
114
 
 
115
my $mips3_irix_asm="asm/mips3.o::::::::";
 
116
# There seems to be boundary faults in asm/alpha.s.
 
117
#my $alpha_asm="asm/alpha.o::::::::";
 
118
my $alpha_asm="::::::::";
 
119
 
 
120
# -DB_ENDIAN slows things down on a sparc for md5, but helps sha1.
 
121
# So the md5_locl.h file has an undef B_ENDIAN if sun is defined
 
122
 
 
123
#config-string  $cc : $cflags : $unistd : $thread_cflag : $sys_id : $lflags : $bn_ops : $bn_obj : $des_obj : $bf_obj : $md5_obj : $sha1_obj : $cast_obj : $rc4_obj : $rmd160_obj : $rc5_obj : $dso_scheme : $shared_target : $shared_cflag : $shared_ldflag : $shared_extension : $ranlib : $arflags
 
124
 
 
125
my %table=(
 
126
# File 'TABLE' (created by 'make TABLE') contains the data from this list,
 
127
# formatted for better readability.
 
128
 
 
129
 
 
130
#"b",           "${tcc}:${tflags}::${tlib}:${bits1}:${tbn_mul}::",
 
131
#"bl-4c-2c",    "${tcc}:${tflags}::${tlib}:${bits1}BN_LLONG RC4_CHAR MD2_CHAR:${tbn_mul}::",
 
132
#"bl-4c-ri",    "${tcc}:${tflags}::${tlib}:${bits1}BN_LLONG RC4_CHAR RC4_INDEX:${tbn_mul}::",
 
133
#"b2-is-ri-dp", "${tcc}:${tflags}::${tlib}:${bits2}IDEA_SHORT RC4_INDEX DES_PTR:${tbn_mul}::",
 
134
 
 
135
# Our development configs
 
136
"purify",       "purify gcc:-g -DPURIFY -Wall::(unknown)::-lsocket -lnsl::::",
 
137
"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::::",
 
138
"debug-ben",    "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown)::::asm/bn86-elf.o asm/co86-elf.o",
 
139
"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)::::",
 
140
"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)::::",
 
141
"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)::::::",
 
142
"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)::::::",
 
143
"debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
 
144
"debug-bodo",   "gcc:-DL_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBIO_PAIR_DEBUG -DPEDANTIC -g -m486 -pedantic -Wshadow -Wall::-D_REENTRANT:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
 
145
"debug-ulf",    "gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -g -O2 -m486 -Wall -Werror -Wshadow -pipe::-D_REENTRANT:::${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
 
146
"debug-steve",  "gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DPEDANTIC -g -mcpu=i486 -pedantic -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
 
147
"debug-steve-linux-pseudo64",   "gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DOPENSSL_NO_ASM -g -mcpu=i486 -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:SIXTY_FOUR_BIT::dlfcn",
 
148
"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wmissing-prototypes -Wno-long-long -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
149
"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wmissing-prototypes -Wno-long-long -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
150
"debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wmissing-prototypes -Wconversion -Wno-long-long -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
151
"debug-levitte-linux-noasm-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wmissing-prototypes -Wconversion -Wno-long-long -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
152
"dist",         "cc:-O::(unknown)::::::",
 
153
 
 
154
# Basic configs that should work on any (32 and less bit) box
 
155
"gcc",          "gcc:-O3::(unknown):::BN_LLONG:::",
 
156
"cc",           "cc:-O::(unknown)::::::",
 
157
 
 
158
#### Solaris x86 with GNU C setups
 
159
# -DOPENSSL_NO_INLINE_ASM switches off inline assembler. We have to do it
 
160
# here because whenever GNU C instantiates an assembler template it
 
161
# surrounds it with #APP #NO_APP comment pair which (at least Solaris
 
162
# 7_x86) /usr/ccs/bin/as fails to assemble with "Illegal mnemonic"
 
163
# error message.
 
164
"solaris-x86-gcc","gcc:-O3 -fomit-frame-pointer -m486 -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)",
 
165
 
 
166
#### Solaris x86 with Sun C setups
 
167
"solaris-x86-cc","cc:-fast -O -Xa::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR::::::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
168
 
 
169
#### SPARC Solaris with GNU C setups
 
170
"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::::::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
171
"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:asm/sparcv8.o:::::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
172
# -m32 should be safe to add as long as driver recognizes -mcpu=ultrasparc
 
173
"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:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
174
"solaris64-sparcv9-gcc31","gcc:-mcpu=ultrasparc -m64 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::asm/md5-sparcv9.o::::::dlfcn:solaris-shared:-fPIC:-m64 -shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
175
# gcc pre-2.8 doesn't understand -mcpu=ultrasparc, so fall down to -mv8
 
176
# but keep the assembler modules.
 
177
"solaris-sparcv9-gcc27","gcc:-mv8 -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:asm/sparcv8plus-gcc27.o:::asm/md5-sparcv8plus-gcc27.o::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
178
"solaris64-sparcv9-gcc","gcc:-m64 -mcpu=ultrasparc -O3 -Wall -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::asm/md5-sparcv9.o::::::dlfcn:solaris-shared:-fPIC:-m64 -shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
179
 
 
180
####
 
181
"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:asm/sparcv8.o:::::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
182
"debug-solaris-sparcv9-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -O -g -mcpu=ultrasparc -Wall -DB_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8plus.o:::::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
183
 
 
184
#### SPARC Solaris with Sun C setups
 
185
# DO NOT use /xO[34] on sparc with SC3.0.  It is broken, and will not pass the tests
 
186
"solaris-sparc-sc3","cc:-fast -O -Xa -DB_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR::::::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
187
# SC4.0 doesn't pass 'make test', upgrade to SC5.0 or SC4.2.
 
188
# SC4.2 is ok, better than gcc even on bn as long as you tell it -xarch=v8
 
189
# SC5.0 note: Compiler common patch 107357-01 or later is required!
 
190
"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::::::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
191
"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:asm/sparcv8.o:::::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
192
"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:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
193
"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::asm/md5-sparcv9.o::::::dlfcn:solaris-shared:-KPIC:-xarch=v9:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):/usr/ccs/bin/ar rs",
 
194
####
 
195
"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:asm/sparcv8.o:::::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
196
"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:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
197
 
 
198
#### SPARC Linux setups
 
199
"linux-sparcv7","gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::",
 
200
# Ray Miller <ray.miller@computing-services.oxford.ac.uk> has patiently
 
201
# assisted with debugging of following two configs.
 
202
"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:asm/sparcv8.o:::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
203
# it's a real mess with -mcpu=ultrasparc option under Linux, but
 
204
# -Wa,-Av8plus should do the trick no matter what.
 
205
"linux-sparcv9","gcc:-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:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
206
# GCC 3.1 is a requirement
 
207
"linux64-sparcv9","gcc:-m64 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:ULTRASPARC:-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::::asm/md5-sparcv9.o::::::dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
208
 
 
209
# Sunos configs, assuming sparc for the gcc one.
 
210
##"sunos-cc", "cc:-O4 -DNOPROTO -DNOCONST::(unknown):SUNOS::DES_UNROLL:::",
 
211
"sunos-gcc","gcc:-O3 -mv8 -Dssize_t=int::(unknown):SUNOS::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL DES_PTR DES_RISC1:::",
 
212
 
 
213
#### IRIX 5.x configs
 
214
# -mips2 flag is added by ./config when appropriate.
 
215
"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::::::::::dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
216
"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::::::::::dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
217
#### IRIX 6.x configs
 
218
# Only N32 and N64 ABIs are supported. If you need O32 ABI build, invoke
 
219
# './Configure irix-cc -o32' manually.
 
220
# -mips4 flag is added by ./config when appropriate.
 
221
"irix-mips3-gcc","gcc:-mabi=n32 -mmips-as -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_irix_asm}:dlfcn:irix-shared::-mabi=n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
222
"irix-mips3-cc", "cc:-n32 -mips3 -O2 -use_readonly_const -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_irix_asm}:dlfcn:irix-shared::-n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
223
# N64 ABI builds.
 
224
"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -mmips-as -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips3_irix_asm}:dlfcn:irix-shared::-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
225
"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips3_irix_asm}:dlfcn:irix-shared::-64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
226
 
 
227
#### Unified HP-UX ANSI C configs.
 
228
# Special notes:
 
229
# - Originally we were optimizing at +O4 level. It should be noted
 
230
#   that the only difference between +O3 and +O4 is global inter-
 
231
#   procedural analysis. As it has to be performed during the link
 
232
#   stage the compiler leaves behind certain pseudo-code in lib*.a
 
233
#   which might be release or even patch level specific. Generating
 
234
#   the machine code for and analyzing the *whole* program appears
 
235
#   to be *extremely* memory demanding while the performance gain is
 
236
#   actually questionable. The situation is intensified by the default
 
237
#   HP-UX data set size limit (infamous 'maxdsiz' tunable) of 64MB
 
238
#   which is way too low for +O4. In other words, doesn't +O3 make
 
239
#   more sense?
 
240
# - Keep in mind that the HP compiler by default generates code
 
241
#   suitable for execution on the host you're currently compiling at.
 
242
#   If the toolkit is ment to be used on various PA-RISC processors
 
243
#   consider './config +DAportable'.
 
244
# - +DD64 is chosen in favour of +DA2.0W because it's ment to be
 
245
#   compatible with *future* releases.
 
246
# - If you run ./Configure hpux-parisc-[g]cc manually don't forget to
 
247
#   pass -D_REENTRANT on HP-UX 10 and later.
 
248
# - -DMD32_XARRAY triggers workaround for compiler bug we ran into in
 
249
#   32-bit message digests. (For the moment of this writing) HP C
 
250
#   doesn't seem to "digest" too many local variables (they make "him"
 
251
#   chew forever:-). For more details look-up MD32_XARRAY comment in
 
252
#   crypto/sha/sha_lcl.h.
 
253
#                                       <appro@fy.chalmers.se>
 
254
#
 
255
#!#"hpux-parisc-cc","cc:-Ae +O3 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
 
256
# Since there is mention of this in shlib/hpux10-cc.sh
 
257
"hpux-parisc-cc-o4","cc:-Ae +O4 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
258
"hpux-parisc-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W::::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl:hpux-shared:-fPIC::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
259
"hpux64-parisc-cc","cc:-Ae +DD64 +O3 +ESlit -z -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dlfcn:hpux64-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
260
# 64bit PARISC for GCC without optimization, which seems to make problems.
 
261
# Submitted by <ross.alexander@uk.neceur.com>
 
262
"hpux64-parisc-gcc","gcc:-DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dlfcn:hpux64-shared:-fpic::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
263
"hpux64-parisc2-gcc","gcc:-O3 -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/pa-risc2W.o:::::::::dlfcn:hpux64-shared:-fpic::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
264
 
 
265
# IA-64 targets
 
266
"hpux-ia64-cc","cc:-Ae +DD32 +O3 +Olit=all -z -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
267
# Frank Geurts <frank.geurts@nl.abnamro.com> has patiently assisted with
 
268
# with debugging of the following config.
 
269
"hpux64-ia64-cc","cc:-Ae +DD64 +O3 +Olit=all -z -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux64-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
270
 
 
271
# More attempts at unified 10.X and 11.X targets for HP C compiler.
 
272
#
 
273
# Chris Ruemmler <ruemmler@cup.hp.com>
 
274
# Kevin Steves <ks@hp.se>
 
275
"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::::::::::dl:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
276
"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:asm/pa-risc2.o:::::::::dl:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
277
"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:asm/pa-risc2W.o:::::::::dlfcn:hpux64-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
278
# Isn't the line below meaningless? HP-UX cc optimizes for host by default.
 
279
# hpux-parisc1_0-cc with +DAportable flag would make more sense. <appro>
 
280
"hpux-parisc1_1-cc","cc:+DA1.1 +DS1.1 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-Wl,+s -ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dl:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
281
 
 
282
# HPUX 9.X config.
 
283
# Don't use the bundled cc.  It is broken.  Use HP ANSI C if possible, or
 
284
# egcs.  gcc 2.8.1 is also broken.
 
285
 
 
286
"hpux-cc",      "cc:-DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY -Ae +ESlit +O3 -z::(unknown)::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
287
# If hpux-cc fails (e.g. during "make test"), try the next one; otherwise,
 
288
# please report your OS and compiler version to the openssl-bugs@openssl.org
 
289
# mailing list.
 
290
"hpux-brokencc",        "cc:-DB_ENDIAN -DBN_DIV2W -Ae +ESlit +O2 -z::(unknown)::-Wl,+s -ldld:DES_PTR DES_UNROLL DES_RISC1::::::::::dl:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
291
 
 
292
"hpux-gcc",     "gcc:-DB_ENDIAN -DBN_DIV2W -O3::(unknown)::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl:hpux-shared:-fPIC::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
293
# If hpux-gcc fails, try this one:
 
294
"hpux-brokengcc",       "gcc:-DB_ENDIAN -DBN_DIV2W -O3::(unknown)::-Wl,+s -ldld:DES_PTR DES_UNROLL DES_RISC1::::::::::dl:hpux-shared:-fPIC::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
295
 
 
296
# HPUX 9.X on Motorola 68k platforms with gcc
 
297
"hpux-m68k-gcc",  "gcc:-DB_ENDIAN -DBN_DIV2W -O3::(unknown):::BN_LLONG DES_PTR DES_UNROLL:::::::::::::",
 
298
 
 
299
# HPUX 10.X config.  Supports threads.
 
300
"hpux10-cc",    "cc:-DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY -Ae +ESlit +O3 -z::-D_REENTRANT::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
301
# If hpux10-cc fails, try this one (if still fails, try deleting BN_LLONG):
 
302
"hpux10-brokencc",      "cc:-DB_ENDIAN -DBN_DIV2W -Ae +ESlit +O2 -z::-D_REENTRANT::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
303
 
 
304
"hpux10-gcc",   "gcc:-DB_ENDIAN -DBN_DIV2W -O3::-D_REENTRANT::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl:hpux-shared:-fPIC::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
305
# If hpux10-gcc fails, try this one:
 
306
"hpux10-brokengcc",     "gcc:-DB_ENDIAN -DBN_DIV2W -O3::-D_REENTRANT::-Wl,+s -ldld:DES_PTR DES_UNROLL DES_RISC1::::::::::dl:hpux-shared:-fPIC::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
307
 
 
308
# HPUX 11.X from www.globus.org.
 
309
# Only works on PA-RISC 2.0 cpus, and not optimized.  Why?
 
310
#"hpux11-32bit-cc","cc:+DA2.0 -DB_ENDIAN -D_HPUX_SOURCE -Aa -Ae +ESlit::-D_REENTRANT:::DES_PTR DES_UNROLL DES_RISC1:::",
 
311
#"hpux11-64bit-cc","cc:+DA2.0W -g -D_HPUX_SOURCE -Aa -Ae +ESlit::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT :::",
 
312
# Use unified settings above instead.
 
313
 
 
314
#### HP MPE/iX http://jazz.external.hp.com/src/openssl/
 
315
"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:::",
 
316
 
 
317
#### PARISC Linux setups
 
318
"linux-parisc","gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT:::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::",
 
319
 
 
320
# Dec Alpha, OSF/1 - the alpha164-cc is historical, for the conversion
 
321
# from the older DEC C Compiler to the newer compiler.  It's now the
 
322
# same as the preferred entry, alpha-cc.  If you are still using the
 
323
# older compiler (you're at 3.x or earlier, or perhaps very early 4.x)
 
324
# you should use `alphaold-cc'.
 
325
#
 
326
#       "What's in a name? That which we call a rose
 
327
#        By any other word would smell as sweet."
 
328
#
 
329
# - William Shakespeare, "Romeo & Juliet", Act II, scene II.
 
330
#
 
331
# For OSF/1 3.2b and earlier, and Digital UNIX 3.2c - 3.2g, with the
 
332
# vendor compiler, use alphaold-cc.
 
333
# For Digital UNIX 4.0 - 4.0e, with the vendor compiler, use alpha-cc.
 
334
# For Tru64 UNIX 4.f - current, with the vendor compiler, use alpha-cc.
 
335
#
 
336
# There's also an alternate target available (which `config' will never
 
337
# select) called alpha-cc-rpath.  This target builds an RPATH into the
 
338
# shared libraries, which is very convenient on Tru64 since binaries
 
339
# linked against that shared library will automatically inherit that RPATH,
 
340
# and hence know where to look for the openssl libraries, even if they're in
 
341
# an odd place.
 
342
#
 
343
# For gcc, the following gave a %50 speedup on a 164 over the 'DES_INT' version
 
344
#
 
345
"alpha-gcc","gcc:-O3::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_RISC1:${alpha_asm}:dlfcn:alpha-osf1-shared:::.so",
 
346
"alphaold-cc", "cc:-std1 -tune host -O4 -readonly_strings::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK:${alpha_asm}:dlfcn:alpha-osf1-shared:::.so",
 
347
"alpha164-cc", "cc:-std1 -tune host -fast -readonly_strings::-pthread:::SIXTY_FOUR_BIT_LONG RC4_CHUNK:${alpha_asm}:dlfcn:tru64-shared:::.so",
 
348
"alpha-cc", "cc:-std1 -tune host -fast -readonly_strings::-pthread:::SIXTY_FOUR_BIT_LONG RC4_CHUNK:${alpha_asm}:dlfcn:tru64-shared:::.so",
 
349
"alpha-cc-rpath", "cc:-std1 -tune host -fast -readonly_strings::-pthread:::SIXTY_FOUR_BIT_LONG RC4_CHUNK:${alpha_asm}:dlfcn:tru64-shared-rpath:::.so",
 
350
#
 
351
# This probably belongs in a different section.
 
352
#
 
353
"FreeBSD-alpha","gcc:-DTERMIOS -O -fomit-frame-pointer::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC2::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
354
 
 
355
#### Alpha Linux with GNU C and Compaq C setups
 
356
# Special notes:
 
357
# - linux-alpha+bwx-gcc is ment to be used from ./config only. If you
 
358
#   ought to run './Configure linux-alpha+bwx-gcc' manually, do
 
359
#   complement the command line with -mcpu=ev56, -mcpu=ev6 or whatever
 
360
#   which is appropriate.
 
361
# - If you use ccc keep in mind that -fast implies -arch host and the
 
362
#   compiler is free to issue instructions which gonna make elder CPU
 
363
#   choke. If you wish to build "blended" toolkit, add -arch generic
 
364
#   *after* -fast and invoke './Configure linux-alpha-ccc' manually.
 
365
#
 
366
#                                       <appro@fy.chalmers.se>
 
367
#
 
368
"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)",
 
369
"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)",
 
370
"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}",
 
371
"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}",
 
372
 
 
373
# assembler versions -- currently defunct:
 
374
##"OpenBSD-alpha","gcc:-DTERMIOS -O3 -fomit-frame-pointer:::(unknown):SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2:${alpha_asm}",
 
375
 
 
376
# The intel boxes :-), It would be worth seeing if bsdi-gcc can use the
 
377
# bn86-elf.o file file since it is hand tweaked assembler.
 
378
"linux-elf",    "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
379
"linux-pentium",        "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -mcpu=pentium -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
380
"linux-ppro",   "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -mcpu=pentiumpro -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
381
"linux-k6",     "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -mcpu=k6 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
382
"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",
 
383
"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",
 
384
"debug-linux-elf","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -m486 -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)",
 
385
"debug-linux-elf-noefence","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -m486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
 
386
"linux-aout",   "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}",
 
387
"linux-mipsel",   "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
388
"linux-mips",   "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
389
"linux-ppc",    "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
390
"linux-m68k",   "gcc:-DB_ENDIAN -DTERMIO -O2 -fomit-frame-pointer -Wall::-D_REENTRANT:::BN_LLONG::",
 
391
"linux-s390",   "gcc:-DB_ENDIAN -DTERMIO -DNO_ASM -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
392
"linux-s390x",  "gcc:-DB_ENDIAN -DTERMIO -DNO_ASM -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
393
"linux-ia64",   "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR:asm/ia64.o:::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
394
"linux-ia64-ecc",   "ecc:-DL_ENDIAN -DTERMIO -O2 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR:asm/ia64.o:::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
395
"linux-x86_64", "gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR BF_PTR2 DES_INT DES_UNROLL:asm/x86_64-gcc.o:::::::::dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
396
"NetBSD-sparc", "gcc:-DTERMIOS -O3 -fomit-frame-pointer -mv8 -Wall -DB_ENDIAN::(unknown):::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
397
"NetBSD-m68",   "gcc:-DTERMIOS -O3 -fomit-frame-pointer -Wall -DB_ENDIAN::(unknown):::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
398
"NetBSD-x86",   "gcc:-DTERMIOS -O3 -fomit-frame-pointer -m486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
399
"FreeBSD-elf",  "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::-pthread -D_REENTRANT -D_THREAD_SAFE -D_THREADSAFE:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
400
"FreeBSD-sparc64","gcc:-DB_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer::-pthread -D_REENTRANT -D_THREAD_SAFE -D_THREADSAFE:::SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2 BF_PTR::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
401
"FreeBSD-ia64","gcc:-DL_ENDIAN -DTERMIOS -O -fomit-frame-pointer::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK RC4_CHAR:asm/ia64-cpp.o:::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
402
"FreeBSD",      "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}",
 
403
"bsdi-gcc",     "gcc:-O3 -ffast-math -DL_ENDIAN -DPERL5 -m486::(unknown):::RSA_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_bsdi_asm}",
 
404
"bsdi-elf-gcc",     "gcc:-DPERL5 -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown)::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
405
"nextstep",     "cc:-O -Wall:<libc.h>:(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::",
 
406
"nextstep3.3",  "cc:-O3 -Wall:<libc.h>:(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::",
 
407
 
 
408
# NCR MP-RAS UNIX ver 02.03.01
 
409
"ncr-scde","cc:-O6 -Xa -Hoff=BEHAVED -686 -Hwide -Hiw::(unknown)::-lsocket -lnsl -lc89:${x86_gcc_des} ${x86_gcc_opts}:::",
 
410
 
 
411
# QNX 4
 
412
"qnx4", "cc:-DL_ENDIAN -DTERMIO::(unknown):::${x86_gcc_des} ${x86_gcc_opts}:",
 
413
 
 
414
# QNX 6
 
415
"qnx6", "cc:-DL_ENDIAN -DTERMIOS::(unknown)::-lsocket:${x86_gcc_des} ${x86_gcc_opts}:",
 
416
 
 
417
# Linux on ARM
 
418
"linux-elf-arm","gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:::BN_LLONG::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
419
 
 
420
# SCO/Caldera targets.
 
421
#
 
422
# Originally we had like unixware-*, unixware-*-pentium, unixware-*-p6, etc.
 
423
# Now we only have blended unixware-* as it's the only one used by ./config.
 
424
# If you want to optimize for particular microarchitecture, bypass ./config
 
425
# and './Configure unixware-7 -Kpentium_pro' or whatever appropriate.
 
426
# Note that not all targets include assembler support. Mostly because of
 
427
# lack of motivation to support out-of-date platforms with out-of-date
 
428
# compiler drivers and assemblers. Tim Rice <tim@multitalents.net> has
 
429
# patiently assisted to debug most of it.
 
430
#
 
431
# UnixWare 2.0x fails destest with -O
 
432
"unixware-2.0","cc:-DFILIO_H -DNO_STRINGS_H::-Kthread::-lsocket -lnsl -lresolv -lx:${x86_gcc_des} ${x86_gcc_opts}:::",
 
433
"unixware-2.1","cc:-O -DFILIO_H::-Kthread::-lsocket -lnsl -lresolv -lx:${x86_gcc_des} ${x86_gcc_opts}:::",
 
434
"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)",
 
435
"unixware-7-gcc","gcc:-DL_ENDIAN -DFILIO_H -O3 -fomit-frame-pointer -m486 -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)",
 
436
"OpenUNIX-8","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)",
 
437
"OpenUNIX-8-gcc","gcc:-O -DFILIO_H -fomit-frame-pointer::-pthread::-lsocket -lnsl:BN_LLONG MD2_CHAR RC4_INDEX ${x86_gcc_des}:${x86_elf_asm}:dlfcn:svr5-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
438
"sco3-gcc",  "gcc:-O3 -fomit-frame-pointer -Dssize_t=int -DNO_SYS_UN_H::(unknown)::-lsocket:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::", # the SCO assembler doesn't seem to like our assembler files ...
 
439
# SCO 5 - Ben Laurie <ben@algroup.co.uk> says the -O breaks the SCO cc.
 
440
"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)",
 
441
"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)",
 
442
 
 
443
 
 
444
# IBM's AIX.
 
445
"aix-cc",   "cc:-O -DB_ENDIAN -qmaxmem=16384::(unknown):AIX::BN_LLONG RC4_CHAR:::",
 
446
"aix-gcc",  "gcc:-O3 -DB_ENDIAN::(unknown):AIX::BN_LLONG RC4_CHAR:::",
 
447
"aix43-cc",   "cc:-O -DAIX -DB_ENDIAN -qmaxmem=16384::(unknown):::BN_LLONG RC4_CHAR::::::::::dlfcn:aix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::",
 
448
"aix43-gcc",  "gcc:-O1 -DAIX -DB_ENDIAN::(unknown):::BN_LLONG RC4_CHAR::::::::::dlfcn:",
 
449
"aix64-cc",   "cc:-O -DAIX -DB_ENDIAN -qmaxmem=16384 -q64::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHAR::::::::::dlfcn:aix-shared::-q64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 64",
 
450
 
 
451
#
 
452
# Cray T90 and similar (SDSC)
 
453
# It's Big-endian, but the algorithms work properly when B_ENDIAN is NOT
 
454
# defined.  The T90 ints and longs are 8 bytes long, and apparently the
 
455
# B_ENDIAN code assumes 4 byte ints.  Fortunately, the non-B_ENDIAN and
 
456
# non L_ENDIAN code aligns the bytes in each word correctly.
 
457
#
 
458
# The BIT_FIELD_LIMITS define is to avoid two fatal compiler errors:
 
459
#'Taking the address of a bit field is not allowed. '
 
460
#'An expression with bit field exists as the operand of "sizeof" '
 
461
# (written by Wayne Schroeder <schroede@SDSC.EDU>)
 
462
#
 
463
# j90 is considered the base machine type for unicos machines,
 
464
# so this configuration is now called "cray-j90" ...
 
465
"cray-j90", "cc: -DBIT_FIELD_LIMITS -DTERMIOS::(unknown):CRAY::SIXTY_FOUR_BIT_LONG DES_INT:::",
 
466
 
 
467
#
 
468
# Cray T3E (Research Center Juelich, beckman@acl.lanl.gov)
 
469
#
 
470
# The BIT_FIELD_LIMITS define was written for the C90 (it seems).  I added
 
471
# another use.  Basically, the problem is that the T3E uses some bit fields
 
472
# for some st_addr stuff, and then sizeof and address-of fails
 
473
# I could not use the ams/alpha.o option because the Cray assembler, 'cam'
 
474
# did not like it.
 
475
"cray-t3e", "cc: -DBIT_FIELD_LIMITS -DTERMIOS::(unknown):CRAY::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT:::",
 
476
 
 
477
# DGUX, 88100.
 
478
"dgux-R3-gcc",  "gcc:-O3 -fomit-frame-pointer::(unknown):::RC4_INDEX DES_UNROLL:::",
 
479
"dgux-R4-gcc",  "gcc:-O3 -fomit-frame-pointer::(unknown)::-lnsl -lsocket:RC4_INDEX DES_UNROLL:::",
 
480
"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}",
 
481
 
 
482
# Sinix/ReliantUNIX RM400
 
483
# NOTE: The CDS++ Compiler up to V2.0Bsomething has the IRIX_CC_BUG optimizer problem. Better use -g  */
 
484
"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::::::::::dlfcn:reliantunix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
485
"SINIX","cc:-O::(unknown):SNI:-lsocket -lnsl -lc -L/usr/ucblib -lucb:RC4_INDEX RC4_CHAR:::",
 
486
"SINIX-N","/usr/ucb/cc:-O2 -misaligned::(unknown)::-lucb:RC4_INDEX RC4_CHAR:::",
 
487
 
 
488
# SIEMENS BS2000/OSD: an EBCDIC-based mainframe
 
489
"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:::",
 
490
 
 
491
# OS/390 Unix an EBCDIC-based Unix system on IBM mainframe
 
492
# You need to compile using the c89.sh wrapper in the tools directory, because the
 
493
# IBM compiler does not like the -L switch after any object modules.
 
494
#
 
495
"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:::",
 
496
 
 
497
# Windows NT, Microsoft Visual C++ 4.0
 
498
 
 
499
"VC-NT","cl::::WINNT::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}::::::::::win32",
 
500
"VC-CE","cl::::WINCE::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}::::::::::win32",
 
501
"VC-WIN32","cl::::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}::::::::::win32",
 
502
"VC-WIN16","cl:::(unknown):WIN16::MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX THIRTY_TWO_BIT:::",
 
503
"VC-W31-16","cl:::(unknown):WIN16::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT:::",
 
504
"VC-W31-32","cl::::WIN16::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX THIRTY_TWO_BIT:::",
 
505
"VC-MSDOS","cl:::(unknown):MSDOS::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT:::",
 
506
 
 
507
# Borland C++ 4.5
 
508
"BC-32","bcc32::::WIN32::BN_LLONG DES_PTR RC4_INDEX EXPORT_VAR_AS_FN::::::::::win32",
 
509
"BC-16","bcc:::(unknown):WIN16::BN_LLONG DES_PTR RC4_INDEX SIXTEEN_BIT:::",
 
510
 
 
511
# MinGW
 
512
"mingw", "gcc:-DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -mno-cygwin -Wall:::MINGW32:-mno-cygwin -lwsock32 -lgdi32:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}:win32::::.dll",
 
513
 
 
514
# UWIN 
 
515
"UWIN", "cc:-DTERMIOS -DL_ENDIAN -O -Wall:::UWIN::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::win32",
 
516
 
 
517
# Cygwin
 
518
"Cygwin-pre1.3", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown):CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::win32",
 
519
"Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall:::CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}:win32:cygwin-shared:::.dll",
 
520
 
 
521
# DJGPP
 
522
"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}::::::::::",
 
523
 
 
524
# Ultrix from Bernhard Simon <simon@zid.tuwien.ac.at>
 
525
"ultrix-cc","cc:-std1 -O -Olimit 2500 -DL_ENDIAN::(unknown):::::::",
 
526
"ultrix-gcc","gcc:-O3 -DL_ENDIAN::(unknown):::::::",
 
527
# K&R C is no longer supported; you need gcc on old Ultrix installations
 
528
##"ultrix","cc:-O2 -DNOPROTO -DNOCONST -DL_ENDIAN::(unknown):::::::",
 
529
 
 
530
# Some OpenBSD from Bob Beck <beck@obtuse.com>
 
531
"OpenBSD",              "gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
532
"OpenBSD-alpha",        "gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
533
"OpenBSD-i386", "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
534
"OpenBSD-m68k",         "gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
535
"OpenBSD-m88k",         "gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
536
"OpenBSD-mips",         "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
537
"OpenBSD-powerpc",      "gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
538
"OpenBSD-sparc",        "gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
539
"OpenBSD-sparc64",      "gcc:-DB_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer::(unknown):::SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2 BF_PTR::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
540
"OpenBSD-vax",          "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
541
"OpenBSD-hppa",         "gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):::BN_LLONG RC2_CHAR RC4_INDEX DES_UNROLL::::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 
542
 
 
543
##### MacOS X (a.k.a. Rhapsody or Darwin) setup
 
544
"rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown):MACOSX_RHAPSODY::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
 
545
"darwin-ppc-cc","cc:-O3 -fomit-frame-pointer -fno-common -DB_ENDIAN::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::::::::::darwin-shared:-fPIC::.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 
546
"darwin-i386-cc","cc:-O3 -fomit-frame-pointer -fno-common -DB_ENDIAN::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::::::::::darwin-shared:-fPIC::.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 
547
 
 
548
##### A/UX
 
549
"aux3-gcc","gcc:-O2 -DTERMIO::(unknown):AUX:-lbsd:RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
 
550
 
 
551
##### Sony NEWS-OS 4.x
 
552
"newsos4-gcc","gcc:-O -DB_ENDIAN::(unknown):NEWS4:-lmld -liberty:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::",
 
553
 
 
554
##### GNU Hurd
 
555
"hurd-x86",  "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -m486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC",
 
556
 
 
557
##### OS/2 EMX
 
558
"OS2-EMX", "gcc::::::::",
 
559
 
 
560
##### VxWorks for various targets
 
561
"vxworks-ppc405","ccppc:-g -msoft-float -mlongcall -DCPU=PPC405 -I\$(WIND_BASE)/target/h:::VXWORKS:-r:::::",
 
562
"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:::::",
 
563
"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:::::",
 
564
"vxworks-ppc860","ccppc:-nostdinc -msoft-float -DCPU=PPC860 -DNO_STRINGS_H -I\$(WIND_BASE)/target/h:::VXWORKS:-r:::::",
 
565
"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::::::::::::::::ranlibmips:",
 
566
 
 
567
##### Compaq Non-Stop Kernel (Tandem)
 
568
"tandem-c89","c89:-Ww -D__TANDEM -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1 -D_TANDEM_SOURCE -DB_ENDIAN::(unknown):::THIRTY_TWO_BIT:::",
 
569
 
 
570
);
 
571
 
 
572
my @WinTargets=qw(VC-NT VC-CE VC-WIN32 VC-WIN16 VC-W31-16 VC-W31-32 VC-MSDOS
 
573
        BC-32 BC-16 Mingw32 OS2-EMX);
 
574
 
 
575
my $idx = 0;
 
576
my $idx_cc = $idx++;
 
577
my $idx_cflags = $idx++;
 
578
my $idx_unistd = $idx++;
 
579
my $idx_thread_cflag = $idx++;
 
580
my $idx_sys_id = $idx++;
 
581
my $idx_lflags = $idx++;
 
582
my $idx_bn_ops = $idx++;
 
583
my $idx_bn_obj = $idx++;
 
584
my $idx_des_obj = $idx++;
 
585
my $idx_bf_obj = $idx++;
 
586
my $idx_md5_obj = $idx++;
 
587
my $idx_sha1_obj = $idx++;
 
588
my $idx_cast_obj = $idx++;
 
589
my $idx_rc4_obj = $idx++;
 
590
my $idx_rmd160_obj = $idx++;
 
591
my $idx_rc5_obj = $idx++;
 
592
my $idx_dso_scheme = $idx++;
 
593
my $idx_shared_target = $idx++;
 
594
my $idx_shared_cflag = $idx++;
 
595
my $idx_shared_ldflag = $idx++;
 
596
my $idx_shared_extension = $idx++;
 
597
my $idx_ranlib = $idx++;
 
598
my $idx_arflags = $idx++;
 
599
 
 
600
my $prefix="";
 
601
my $openssldir="";
 
602
my $exe_ext="";
 
603
my $install_prefix="";
 
604
my $no_threads=0;
 
605
my $no_shared=1;
 
606
my $zlib=0;
 
607
my $no_krb5=0;
 
608
my $threads=0;
 
609
my $no_asm=0;
 
610
my $no_dso=0;
 
611
my @skip=();
 
612
my $Makefile="Makefile.ssl";
 
613
my $des_locl="crypto/des/des_locl.h";
 
614
my $des ="crypto/des/des.h";
 
615
my $bn  ="crypto/bn/bn.h";
 
616
my $md2 ="crypto/md2/md2.h";
 
617
my $rc4 ="crypto/rc4/rc4.h";
 
618
my $rc4_locl="crypto/rc4/rc4_locl.h";
 
619
my $idea        ="crypto/idea/idea.h";
 
620
my $rc2 ="crypto/rc2/rc2.h";
 
621
my $bf  ="crypto/bf/bf_locl.h";
 
622
my $bn_asm      ="bn_asm.o";
 
623
my $des_enc="des_enc.o fcrypt_b.o";
 
624
my $bf_enc      ="bf_enc.o";
 
625
my $cast_enc="c_enc.o";
 
626
my $rc4_enc="rc4_enc.o";
 
627
my $rc5_enc="rc5_enc.o";
 
628
my $md5_obj="";
 
629
my $sha1_obj="";
 
630
my $rmd160_obj="";
 
631
my $processor="";
 
632
my $default_ranlib;
 
633
my $perl;
 
634
 
 
635
my $no_ssl2=0;
 
636
my $no_ssl3=0;
 
637
my $no_tls1=0;
 
638
my $no_md5=0;
 
639
my $no_sha=0;
 
640
my $no_rsa=0;
 
641
my $no_dh=0;
 
642
 
 
643
$default_ranlib= &which("ranlib") or $default_ranlib="true";
 
644
$perl=$ENV{'PERL'} or $perl=&which("perl5") or $perl=&which("perl")
 
645
  or $perl="perl";
 
646
 
 
647
&usage if ($#ARGV < 0);
 
648
 
 
649
my $flags;
 
650
my $depflags;
 
651
my $openssl_algorithm_defines;
 
652
my $openssl_thread_defines;
 
653
my $openssl_sys_defines="";
 
654
my $openssl_other_defines;
 
655
my $libs;
 
656
my $libkrb5="";
 
657
my $target;
 
658
my $options;
 
659
my $symlink;
 
660
my $make_depend=0;
 
661
my %withargs=();
 
662
 
 
663
my @argvcopy=@ARGV;
 
664
my $argvstring="";
 
665
my $argv_unprocessed=1;
 
666
 
 
667
while($argv_unprocessed)
 
668
        {
 
669
        $flags="";
 
670
        $depflags="";
 
671
        $openssl_algorithm_defines="";
 
672
        $openssl_thread_defines="";
 
673
        $openssl_sys_defines="";
 
674
        $openssl_other_defines="";
 
675
        $libs="";
 
676
        $target="";
 
677
        $options="";
 
678
        $symlink=1;
 
679
 
 
680
        $argv_unprocessed=0;
 
681
        $argvstring=join(' ',@argvcopy);
 
682
 
 
683
PROCESS_ARGS:
 
684
        foreach (@argvcopy)
 
685
                {
 
686
                s /^-no-/no-/; # some people just can't read the instructions
 
687
                if (/^--test-sanity$/)
 
688
                        {
 
689
                        exit(&test_sanity());
 
690
                        }
 
691
                elsif (/^no-asm$/)
 
692
                        {
 
693
                        $no_asm=1;
 
694
                        $flags .= "-DOPENSSL_NO_ASM ";
 
695
                        $openssl_other_defines .= "#define OPENSSL_NO_ASM\n";
 
696
                        }
 
697
                elsif (/^no-err$/)
 
698
                        {
 
699
                        $flags .= "-DOPENSSL_NO_ERR ";
 
700
                        $openssl_other_defines .= "#define OPENSSL_NO_ERR\n";
 
701
                        }
 
702
                elsif (/^no-hw-(.+)$/)
 
703
                        {
 
704
                        my $hw=$1;
 
705
                        $hw =~ tr/[a-z]/[A-Z]/;
 
706
                        $flags .= "-DOPENSSL_NO_HW_$hw ";
 
707
                        $openssl_other_defines .= "#define OPENSSL_NO_HW_$hw\n";
 
708
                        }
 
709
                elsif (/^no-hw$/)
 
710
                        {
 
711
                        $flags .= "-DOPENSSL_NO_HW ";
 
712
                        $openssl_other_defines .= "#define OPENSSL_NO_HW\n";
 
713
                        }
 
714
                elsif (/^no-dso$/)
 
715
                        { $no_dso=1; }
 
716
                elsif (/^no-krb5$/)
 
717
                        { $no_krb5=1; }
 
718
                elsif (/^no-threads$/)
 
719
                        { $no_threads=1; }
 
720
                elsif (/^threads$/)
 
721
                        { $threads=1; }
 
722
                elsif (/^no-shared$/)
 
723
                        { $no_shared=1; }
 
724
                elsif (/^shared$/ || /^-shared$/ || /^--shared$/)
 
725
                        { $no_shared=0; }
 
726
                elsif (/^no-zlib$/)
 
727
                        { $zlib=0; }
 
728
                elsif (/^zlib$/)
 
729
                        { $zlib=1; }
 
730
                elsif (/^zlib-dynamic$/)
 
731
                        { $zlib=2; }
 
732
                elsif (/^no-symlinks$/)
 
733
                        { $symlink=0; }
 
734
                elsif (/^no-ssl$/)
 
735
                        { $no_ssl2 = $no_ssl3 = 1; }
 
736
                elsif (/^no-ssl2$/)
 
737
                        { $no_ssl2 = 1; }
 
738
                elsif (/^no-ssl3$/)
 
739
                        { $no_ssl3 = 1; }
 
740
                elsif (/^no-tls1?$/)
 
741
                        { $no_tls1 = 1; }
 
742
                elsif (/^no-(.+)$/)
 
743
                        {
 
744
                        my $algo=$1;
 
745
                        push @skip,$algo;
 
746
                        $algo =~ tr/[a-z]/[A-Z]/;
 
747
                        $flags .= "-DOPENSSL_NO_$algo ";
 
748
                        $depflags .= "-DOPENSSL_NO_$algo ";
 
749
                        $openssl_algorithm_defines .= "#define OPENSSL_NO_$algo\n";
 
750
                        if ($algo eq "RIJNDAEL")
 
751
                                {
 
752
                                push @skip, "aes";
 
753
                                $flags .= "-DOPENSSL_NO_AES ";
 
754
                                $depflags .= "-DOPENSSL_NO_AES ";
 
755
                                $openssl_algorithm_defines .= "#define OPENSSL_NO_AES\n";
 
756
                                }
 
757
                        if ($algo eq "DES")
 
758
                                {
 
759
                                push @skip, "mdc2";
 
760
                                $options .= " no-mdc2";
 
761
                                $flags .= "-DOPENSSL_NO_MDC2 ";
 
762
                                $depflags .= "-DOPENSSL_NO_MDC2 ";
 
763
                                $openssl_algorithm_defines .= "#define OPENSSL_NO_MDC2\n";
 
764
                                }
 
765
                        if ($algo eq "MD5")
 
766
                                {
 
767
                                $no_md5 = 1;
 
768
                                }
 
769
                        if ($algo eq "SHA")
 
770
                                {
 
771
                                $no_sha = 1;
 
772
                                }
 
773
                        if ($algo eq "RSA")
 
774
                                {
 
775
                                $no_rsa = 1;
 
776
                                }
 
777
                        if ($algo eq "DH")
 
778
                                {
 
779
                                $no_dh = 1;
 
780
                                }
 
781
                        }
 
782
                elsif (/^reconfigure/ || /^reconf/)
 
783
                        {
 
784
                        if (open(IN,"<$Makefile"))
 
785
                                {
 
786
                                while (<IN>)
 
787
                                        {
 
788
                                        chop;
 
789
                                        if (/^CONFIGURE_ARGS=(.*)/)
 
790
                                                {
 
791
                                                $argvstring=$1;
 
792
                                                @argvcopy=split(' ',$argvstring);
 
793
                                                die "Incorrect data to reconfigure, please do a normal configuration\n"
 
794
                                                        if (grep(/^reconf/,@argvcopy));
 
795
                                                print "Reconfiguring with: $argvstring\n";
 
796
                                                $argv_unprocessed=1;
 
797
                                                close(IN);
 
798
                                                last PROCESS_ARGS;
 
799
                                                }
 
800
                                        }
 
801
                                close(IN);
 
802
                                }
 
803
                        die "Insufficient data to reconfigure, please do a normal configuration\n";
 
804
                        }
 
805
                elsif (/^386$/)
 
806
                        { $processor=386; }
 
807
                elsif (/^rsaref$/)
 
808
                        {
 
809
                        # No RSAref support any more since it's not needed.
 
810
                        # The check for the option is there so scripts aren't
 
811
                        # broken
 
812
                        }
 
813
                elsif (/^[-+]/)
 
814
                        {
 
815
                        if (/^-[lL](.*)$/)
 
816
                                {
 
817
                                $libs.=$_." ";
 
818
                                }
 
819
                        elsif (/^-[^-]/ or /^\+/)
 
820
                                {
 
821
                                $flags.=$_." ";
 
822
                                }
 
823
                        elsif (/^--prefix=(.*)$/)
 
824
                                {
 
825
                                $prefix=$1;
 
826
                                }
 
827
                        elsif (/^--openssldir=(.*)$/)
 
828
                                {
 
829
                                $openssldir=$1;
 
830
                                }
 
831
                        elsif (/^--install.prefix=(.*)$/)
 
832
                                {
 
833
                                $install_prefix=$1;
 
834
                                }
 
835
                        elsif (/^--with-krb5-(dir|lib|include|flavor)=(.*)$/)
 
836
                                {
 
837
                                $withargs{"krb5-".$1}=$2;
 
838
                                }
 
839
                        else
 
840
                                {
 
841
                                print STDERR $usage;
 
842
                                exit(1);
 
843
                                }
 
844
                        }
 
845
                elsif ($_ =~ /^([^:]+):(.+)$/)
 
846
                        {
 
847
                        eval "\$table{\$1} = \"$2\""; # allow $xxx constructs in the string
 
848
                        $target=$1;
 
849
                        }
 
850
                else
 
851
                        {
 
852
                        die "target already defined - $target\n" if ($target ne "");
 
853
                        $target=$_;
 
854
                        }
 
855
                unless ($_ eq $target) {
 
856
                        if ($options eq "") {
 
857
                                $options = $_;
 
858
                        } else {
 
859
                                $options .= " ".$_;
 
860
                        }
 
861
                }
 
862
        }
 
863
}
 
864
 
 
865
$no_ssl3=1 if ($no_md5 || $no_sha);
 
866
$no_ssl3=1 if ($no_rsa && $no_dh);
 
867
 
 
868
$no_ssl2=1 if ($no_md5);
 
869
$no_ssl2=1 if ($no_rsa);
 
870
 
 
871
$no_tls1=1 if ($no_md5 || $no_sha);
 
872
$no_tls1=1 if ($no_dh);
 
873
 
 
874
if ($no_ssl2)
 
875
        {
 
876
        push @skip,"SSL2";
 
877
        $flags .= "-DOPENSSL_NO_SSL2 ";
 
878
        $depflags .= "-DOPENSSL_NO_SSL2 ";
 
879
        $openssl_algorithm_defines .= "#define OPENSSL_NO_SSL2\n";
 
880
        }
 
881
 
 
882
if ($no_ssl3)
 
883
        {
 
884
        push @skip,"SSL3";
 
885
        $flags .= "-DOPENSSL_NO_SSL3 ";
 
886
        $depflags .= "-DOPENSSL_NO_SSL3 ";
 
887
        $openssl_algorithm_defines .= "#define OPENSSL_NO_SSL3\n";
 
888
        }
 
889
 
 
890
if ($no_tls1)
 
891
        {
 
892
        push @skip,"TLS1";
 
893
        $flags .= "-DOPENSSL_NO_TLS1 ";
 
894
        $depflags .= "-DOPENSSL_NO_TLS1 ";
 
895
        $openssl_algorithm_defines .= "#define OPENSSL_NO_TLS1\n";
 
896
        }
 
897
 
 
898
if ($target eq "TABLE") {
 
899
        foreach $target (sort keys %table) {
 
900
                print_table_entry($target);
 
901
        }
 
902
        exit 0;
 
903
}
 
904
 
 
905
if ($target eq "LIST") {
 
906
        foreach (sort keys %table) {
 
907
                print;
 
908
                print "\n";
 
909
        }
 
910
        exit 0;
 
911
}
 
912
 
 
913
if ($target =~ m/^CygWin32(-.*)$/) {
 
914
        $target = "Cygwin".$1;
 
915
}
 
916
 
 
917
print "Configuring for $target\n";
 
918
 
 
919
&usage if (!defined($table{$target}));
 
920
 
 
921
my $IsWindows=scalar grep /^$target$/,@WinTargets;
 
922
 
 
923
$exe_ext=".exe" if ($target eq "Cygwin");
 
924
$exe_ext=".exe" if ($target eq "DJGPP");
 
925
$openssldir="/usr/local/ssl" if ($openssldir eq "" and $prefix eq "");
 
926
$prefix=$openssldir if $prefix eq "";
 
927
 
 
928
chop $openssldir if $openssldir =~ /\/$/;
 
929
chop $prefix if $prefix =~ /\/$/;
 
930
 
 
931
$openssldir=$prefix . "/ssl" if $openssldir eq "";
 
932
$openssldir=$prefix . "/" . $openssldir if $openssldir !~ /(^\/|^[a-zA-Z]:[\\\/])/;
 
933
 
 
934
 
 
935
print "IsWindows=$IsWindows\n";
 
936
 
 
937
my @fields = split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
 
938
my $cc = $fields[$idx_cc];
 
939
my $cflags = $fields[$idx_cflags];
 
940
my $unistd = $fields[$idx_unistd];
 
941
my $thread_cflag = $fields[$idx_thread_cflag];
 
942
my $sys_id = $fields[$idx_sys_id];
 
943
my $lflags = $fields[$idx_lflags];
 
944
my $bn_ops = $fields[$idx_bn_ops];
 
945
my $bn_obj = $fields[$idx_bn_obj];
 
946
my $des_obj = $fields[$idx_des_obj];
 
947
my $bf_obj = $fields[$idx_bf_obj];
 
948
$md5_obj = $fields[$idx_md5_obj];
 
949
$sha1_obj = $fields[$idx_sha1_obj];
 
950
my $cast_obj = $fields[$idx_cast_obj];
 
951
my $rc4_obj = $fields[$idx_rc4_obj];
 
952
$rmd160_obj = $fields[$idx_rmd160_obj];
 
953
my $rc5_obj = $fields[$idx_rc5_obj];
 
954
my $dso_scheme = $fields[$idx_dso_scheme];
 
955
my $shared_target = $fields[$idx_shared_target];
 
956
my $shared_cflag = $fields[$idx_shared_cflag];
 
957
my $shared_ldflag = $fields[$idx_shared_ldflag];
 
958
my $shared_extension = $fields[$idx_shared_extension];
 
959
my $ranlib = $fields[$idx_ranlib];
 
960
my $arflags = $fields[$idx_arflags];
 
961
 
 
962
my $no_shared_warn=0;
 
963
 
 
964
$cflags="$flags$cflags" if ($flags ne "");
 
965
 
 
966
# Kerberos settings.  The flavor must be provided from outside, either through
 
967
# the script "config" or manually.
 
968
if ($no_krb5
 
969
        || !defined($withargs{"krb5-flavor"})
 
970
        || $withargs{"krb5-flavor"} eq "")
 
971
        {
 
972
        $cflags="-DOPENSSL_NO_KRB5 $cflags";
 
973
        $options.=" no-krb5" unless $no_krb5;
 
974
        $openssl_algorithm_defines .= "#define OPENSSL_NO_KRB5\n";
 
975
        }
 
976
else
 
977
        {
 
978
        my ($lresolv, $lpath, $lext);
 
979
        if ($withargs{"krb5-flavor"} =~ /^[Hh]eimdal$/)
 
980
                {
 
981
                die "Sorry, Heimdal is currently not supported\n";
 
982
                }
 
983
        ##### HACK to force use of Heimdal.
 
984
        ##### WARNING: Since we don't really have adequate support for Heimdal,
 
985
        #####          using this will break the build.  You'll have to make
 
986
        #####          changes to the source, and if you do, please send
 
987
        #####          patches to openssl-dev@openssl.org
 
988
        if ($withargs{"krb5-flavor"} =~ /^force-[Hh]eimdal$/)
 
989
                {
 
990
                warn "Heimdal isn't really supported.  Your build WILL break\n";
 
991
                warn "If you fix the problems, please send a patch to openssl-dev\@openssl.org\n";
 
992
                $withargs{"krb5-dir"} = "/usr/heimdal"
 
993
                        if $withargs{"krb5-dir"} eq "";
 
994
                $withargs{"krb5-lib"} = "-L".$withargs{"krb5-dir"}.
 
995
                        "/lib -lgssapi -lkrb5 -lcom_err"
 
996
                        if $withargs{"krb5-lib"} eq "";
 
997
                $cflags="-DKRB5_HEIMDAL $cflags";
 
998
                }
 
999
        if ($withargs{"krb5-flavor"} =~ /^[Mm][Ii][Tt]/)
 
1000
                {
 
1001
                $withargs{"krb5-dir"} = "/usr/kerberos"
 
1002
                        if $withargs{"krb5-dir"} eq "";
 
1003
                $withargs{"krb5-lib"} = "-L".$withargs{"krb5-dir"}.
 
1004
                        "/lib -lgssapi_krb5 -lkrb5 -lcom_err -lk5crypto"
 
1005
                        if $withargs{"krb5-lib"} eq "";
 
1006
                $cflags="-DKRB5_MIT $cflags";
 
1007
                $withargs{"krb5-flavor"} =~ s/^[Mm][Ii][Tt][._-]*//;
 
1008
                if ($withargs{"krb5-flavor"} =~ /^1[._-]*[01]/)
 
1009
                        {
 
1010
                        $cflags="-DKRB5_MIT_OLD11 $cflags";
 
1011
                        }
 
1012
                }
 
1013
        LRESOLV:
 
1014
        foreach $lpath ("/lib", "/usr/lib")
 
1015
                {
 
1016
                foreach $lext ("a", "so")
 
1017
                        {
 
1018
                        $lresolv = "$lpath/libresolv.$lext";
 
1019
                        last LRESOLV    if (-r "$lresolv");
 
1020
                        $lresolv = "";
 
1021
                        }
 
1022
                }
 
1023
        $withargs{"krb5-lib"} .= " -lresolv"
 
1024
                if ("$lresolv" ne "");
 
1025
        $withargs{"krb5-include"} = "-I".$withargs{"krb5-dir"}."/include"
 
1026
                if $withargs{"krb5-include"} eq "" &&
 
1027
                   $withargs{"krb5-dir"} ne "";
 
1028
        }
 
1029
 
 
1030
# The DSO code currently always implements all functions so that no
 
1031
# applications will have to worry about that from a compilation point
 
1032
# of view. However, the "method"s may return zero unless that platform
 
1033
# has support compiled in for them. Currently each method is enabled
 
1034
# by a define "DSO_<name>" ... we translate the "dso_scheme" config
 
1035
# string entry into using the following logic;
 
1036
my $dso_cflags;
 
1037
if (!$no_dso && $dso_scheme ne "")
 
1038
        {
 
1039
        $dso_scheme =~ tr/[a-z]/[A-Z]/;
 
1040
        if ($dso_scheme eq "DLFCN")
 
1041
                {
 
1042
                $dso_cflags = "-DDSO_DLFCN -DHAVE_DLFCN_H";
 
1043
                }
 
1044
        elsif ($dso_scheme eq "DLFCN_NO_H")
 
1045
                {
 
1046
                $dso_cflags = "-DDSO_DLFCN";
 
1047
                }
 
1048
        else
 
1049
                {
 
1050
                $dso_cflags = "-DDSO_$dso_scheme";
 
1051
                }
 
1052
        $cflags = "$dso_cflags $cflags";
 
1053
        }
 
1054
 
 
1055
my $thread_cflags;
 
1056
my $thread_defines;
 
1057
if ($thread_cflag ne "(unknown)" && !$no_threads)
 
1058
        {
 
1059
        # If we know how to do it, support threads by default.
 
1060
        $threads = 1;
 
1061
        }
 
1062
if ($thread_cflag eq "(unknown)")
 
1063
        {
 
1064
        # If the user asked for "threads", hopefully they also provided
 
1065
        # any system-dependent compiler options that are necessary.
 
1066
        $thread_cflags="-DOPENSSL_THREADS $cflags" ;
 
1067
        $thread_defines .= "#define OPENSSL_THREADS\n";
 
1068
        }
 
1069
else
 
1070
        {
 
1071
        $thread_cflags="-DOPENSSL_THREADS $thread_cflag $cflags";
 
1072
        $thread_defines .= "#define OPENSSL_THREADS\n";
 
1073
#       my $def;
 
1074
#       foreach $def (split ' ',$thread_cflag)
 
1075
#               {
 
1076
#               if ($def =~ s/^-D// && $def !~ /^_/)
 
1077
#                       {
 
1078
#                       $thread_defines .= "#define $def\n";
 
1079
#                       }
 
1080
#               }
 
1081
        }       
 
1082
 
 
1083
$lflags="$libs$lflags" if ($libs ne "");
 
1084
 
 
1085
if ($no_asm)
 
1086
        {
 
1087
        $bn_obj=$des_obj=$bf_obj=$cast_obj=$rc4_obj=$rc5_obj="";
 
1088
        $sha1_obj=$md5_obj=$rmd160_obj="";
 
1089
        }
 
1090
 
 
1091
if (!$no_shared)
 
1092
        {
 
1093
        $cast_obj="";   # CAST assembler is not PIC
 
1094
        }
 
1095
 
 
1096
if ($threads)
 
1097
        {
 
1098
        $cflags=$thread_cflags;
 
1099
        $openssl_thread_defines .= $thread_defines;
 
1100
        }
 
1101
 
 
1102
if ($zlib)
 
1103
        {
 
1104
        $cflags = "-DZLIB $cflags";
 
1105
        $cflags = "-DZLIB_SHARED $cflags" if $zlib == 2;
 
1106
        $lflags = "$lflags -lz" if $zlib == 1;
 
1107
        }
 
1108
 
 
1109
# You will find shlib_mark1 and shlib_mark2 explained in Makefile.org
 
1110
my $shared_mark = "";
 
1111
if ($shared_target eq "")
 
1112
        {
 
1113
        $no_shared_warn = 1 if !$no_shared;
 
1114
        $no_shared = 1;
 
1115
        }
 
1116
if (!$no_shared)
 
1117
        {
 
1118
        if ($shared_cflag ne "")
 
1119
                {
 
1120
                $cflags = "$shared_cflag $cflags";
 
1121
                }
 
1122
        }
 
1123
 
 
1124
if ($sys_id ne "")
 
1125
        {
 
1126
        $cflags="-DOPENSSL_SYSNAME_$sys_id $cflags";
 
1127
        $openssl_sys_defines="#define OPENSSL_SYSNAME_$sys_id\n";
 
1128
        }
 
1129
 
 
1130
if ($ranlib eq "")
 
1131
        {
 
1132
        $ranlib = $default_ranlib;
 
1133
        }
 
1134
 
 
1135
#my ($bn1)=split(/\s+/,$bn_obj);
 
1136
#$bn1 = "" unless defined $bn1;
 
1137
#$bn1=$bn_asm unless ($bn1 =~ /\.o$/);
 
1138
#$bn_obj="$bn1";
 
1139
 
 
1140
$bn_obj = $bn_asm unless $bn_obj ne "";
 
1141
 
 
1142
$des_obj=$des_enc       unless ($des_obj =~ /\.o$/);
 
1143
$bf_obj=$bf_enc         unless ($bf_obj =~ /\.o$/);
 
1144
$cast_obj=$cast_enc     unless ($cast_obj =~ /\.o$/);
 
1145
$rc4_obj=$rc4_enc       unless ($rc4_obj =~ /\.o$/);
 
1146
$rc5_obj=$rc5_enc       unless ($rc5_obj =~ /\.o$/);
 
1147
if ($sha1_obj =~ /\.o$/)
 
1148
        {
 
1149
#       $sha1_obj=$sha1_enc;
 
1150
        $cflags.=" -DSHA1_ASM";
 
1151
        }
 
1152
if ($md5_obj =~ /\.o$/)
 
1153
        {
 
1154
#       $md5_obj=$md5_enc;
 
1155
        $cflags.=" -DMD5_ASM";
 
1156
        }
 
1157
if ($rmd160_obj =~ /\.o$/)
 
1158
        {
 
1159
#       $rmd160_obj=$rmd160_enc;
 
1160
        $cflags.=" -DRMD160_ASM";
 
1161
        }
 
1162
 
 
1163
# "Stringify" the C flags string.  This permits it to be made part of a string
 
1164
# and works as well on command lines.
 
1165
$cflags =~ s/([\\\"])/\\\1/g;
 
1166
 
 
1167
my $version = "unknown";
 
1168
my $major = "unknown";
 
1169
my $minor = "unknown";
 
1170
my $shlib_version_number = "unknown";
 
1171
my $shlib_version_history = "unknown";
 
1172
my $shlib_major = "unknown";
 
1173
my $shlib_minor = "unknown";
 
1174
 
 
1175
open(IN,'<crypto/opensslv.h') || die "unable to read opensslv.h:$!\n";
 
1176
while (<IN>)
 
1177
        {
 
1178
        $version=$1 if /OPENSSL.VERSION.TEXT.*OpenSSL (\S+) /;
 
1179
        $shlib_version_number=$1 if /SHLIB_VERSION_NUMBER *"([^"]+)"/;
 
1180
        $shlib_version_history=$1 if /SHLIB_VERSION_HISTORY *"([^"]*)"/;
 
1181
        }
 
1182
close(IN);
 
1183
if ($shlib_version_history ne "") { $shlib_version_history .= ":"; }
 
1184
 
 
1185
if ($version =~ /(^[0-9]*)\.([0-9\.]*)/)
 
1186
        {
 
1187
        $major=$1;
 
1188
        $minor=$2;
 
1189
        }
 
1190
 
 
1191
if ($shlib_version_number =~ /(^[0-9]*)\.([0-9\.]*)/)
 
1192
        {
 
1193
        $shlib_major=$1;
 
1194
        $shlib_minor=$2;
 
1195
        }
 
1196
 
 
1197
open(IN,'<Makefile.org') || die "unable to read Makefile.org:$!\n";
 
1198
unlink("$Makefile.new") || die "unable to remove old $Makefile.new:$!\n" if -e "$Makefile.new";
 
1199
open(OUT,">$Makefile.new") || die "unable to create $Makefile.new:$!\n";
 
1200
print OUT "### Generated automatically from Makefile.org by Configure.\n\n";
 
1201
my $sdirs=0;
 
1202
while (<IN>)
 
1203
        {
 
1204
        chop;
 
1205
        $sdirs = 1 if /^SDIRS=/;
 
1206
        if ($sdirs) {
 
1207
                my $dir;
 
1208
                foreach $dir (@skip) {
 
1209
                        s/([    ])$dir /\1/;
 
1210
                        }
 
1211
                }
 
1212
        $sdirs = 0 unless /\\$/;
 
1213
        s/^VERSION=.*/VERSION=$version/;
 
1214
        s/^MAJOR=.*/MAJOR=$major/;
 
1215
        s/^MINOR=.*/MINOR=$minor/;
 
1216
        s/^SHLIB_VERSION_NUMBER=.*/SHLIB_VERSION_NUMBER=$shlib_version_number/;
 
1217
        s/^SHLIB_VERSION_HISTORY=.*/SHLIB_VERSION_HISTORY=$shlib_version_history/;
 
1218
        s/^SHLIB_MAJOR=.*/SHLIB_MAJOR=$shlib_major/;
 
1219
        s/^SHLIB_MINOR=.*/SHLIB_MINOR=$shlib_minor/;
 
1220
        s/^SHLIB_EXT=.*/SHLIB_EXT=$shared_extension/;
 
1221
        s/^INSTALLTOP=.*$/INSTALLTOP=$prefix/;
 
1222
        s/^OPENSSLDIR=.*$/OPENSSLDIR=$openssldir/;
 
1223
        s/^INSTALL_PREFIX=.*$/INSTALL_PREFIX=$install_prefix/;
 
1224
        s/^PLATFORM=.*$/PLATFORM=$target/;
 
1225
        s/^OPTIONS=.*$/OPTIONS=$options/;
 
1226
        s/^CONFIGURE_ARGS=.*$/CONFIGURE_ARGS=$argvstring/;
 
1227
        s/^CC=.*$/CC= $cc/;
 
1228
        s/^MAKEDEPPROG=.*$/MAKEDEPPROG= $cc/ if $cc eq "gcc";
 
1229
        s/^CFLAG=.*$/CFLAG= $cflags/;
 
1230
        s/^DEPFLAG=.*$/DEPFLAG= $depflags/;
 
1231
        s/^EX_LIBS=.*$/EX_LIBS= $lflags/;
 
1232
        s/^EXE_EXT=.*$/EXE_EXT= $exe_ext/;
 
1233
        s/^BN_ASM=.*$/BN_ASM= $bn_obj/;
 
1234
        s/^DES_ENC=.*$/DES_ENC= $des_obj/;
 
1235
        s/^BF_ENC=.*$/BF_ENC= $bf_obj/;
 
1236
        s/^CAST_ENC=.*$/CAST_ENC= $cast_obj/;
 
1237
        s/^RC4_ENC=.*$/RC4_ENC= $rc4_obj/;
 
1238
        s/^RC5_ENC=.*$/RC5_ENC= $rc5_obj/;
 
1239
        s/^MD5_ASM_OBJ=.*$/MD5_ASM_OBJ= $md5_obj/;
 
1240
        s/^SHA1_ASM_OBJ=.*$/SHA1_ASM_OBJ= $sha1_obj/;
 
1241
        s/^RMD160_ASM_OBJ=.*$/RMD160_ASM_OBJ= $rmd160_obj/;
 
1242
        s/^PROCESSOR=.*/PROCESSOR= $processor/;
 
1243
        s/^RANLIB=.*/RANLIB= $ranlib/;
 
1244
        s/^ARFLAGS=.*/ARFLAGS= $arflags/;
 
1245
        s/^PERL=.*/PERL= $perl/;
 
1246
        s/^KRB5_INCLUDES=.*/KRB5_INCLUDES=$withargs{"krb5-include"}/;
 
1247
        s/^LIBKRB5=.*/LIBKRB5=$withargs{"krb5-lib"}/;
 
1248
        s/^SHLIB_TARGET=.*/SHLIB_TARGET=$shared_target/;
 
1249
        s/^SHLIB_MARK=.*/SHLIB_MARK=$shared_mark/;
 
1250
        s/^SHARED_LIBS=.*/SHARED_LIBS=\$(SHARED_CRYPTO) \$(SHARED_SSL)/ if (!$no_shared);
 
1251
        if ($shared_extension ne "" && $shared_extension =~ /^\.s([ol])\.[^\.]*$/)
 
1252
                {
 
1253
                my $sotmp = $1;
 
1254
                s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp/;
 
1255
                }
 
1256
        elsif ($shared_extension ne "" && $shared_extension =~ /^\.[^\.]*\.dylib$/)
 
1257
                {
 
1258
                s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.dylib/;
 
1259
                }
 
1260
        elsif ($shared_extension ne "" && $shared_extension =~ /^\.s([ol])\.[^\.]*\.[^\.]*$/)
 
1261
                {
 
1262
                my $sotmp = $1;
 
1263
                s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp.\$(SHLIB_MAJOR) .s$sotmp/;
 
1264
                }
 
1265
        elsif ($shared_extension ne "" && $shared_extension =~ /^\.[^\.]*\.[^\.]*\.dylib$/)
 
1266
                {
 
1267
                s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.\$(SHLIB_MAJOR).dylib .dylib/;
 
1268
                }
 
1269
        s/^SHARED_LDFLAGS=.*/SHARED_LDFLAGS=$shared_ldflag/;
 
1270
        print OUT $_."\n";
 
1271
        }
 
1272
close(IN);
 
1273
close(OUT);
 
1274
rename($Makefile,"$Makefile.bak") || die "unable to rename $Makefile\n" if -e $Makefile;
 
1275
rename("$Makefile.new",$Makefile) || die "unable to rename $Makefile.new\n";
 
1276
 
 
1277
print "CC            =$cc\n";
 
1278
print "CFLAG         =$cflags\n";
 
1279
print "EX_LIBS       =$lflags\n";
 
1280
print "BN_ASM        =$bn_obj\n";
 
1281
print "DES_ENC       =$des_obj\n";
 
1282
print "BF_ENC        =$bf_obj\n";
 
1283
print "CAST_ENC      =$cast_obj\n";
 
1284
print "RC4_ENC       =$rc4_obj\n";
 
1285
print "RC5_ENC       =$rc5_obj\n";
 
1286
print "MD5_OBJ_ASM   =$md5_obj\n";
 
1287
print "SHA1_OBJ_ASM  =$sha1_obj\n";
 
1288
print "RMD160_OBJ_ASM=$rmd160_obj\n";
 
1289
print "PROCESSOR     =$processor\n";
 
1290
print "RANLIB        =$ranlib\n";
 
1291
print "ARFLAGS       =$arflags\n";
 
1292
print "PERL          =$perl\n";
 
1293
print "KRB5_INCLUDES =",$withargs{"krb5-include"},"\n"
 
1294
        if $withargs{"krb5-include"} ne "";
 
1295
 
 
1296
my $des_ptr=0;
 
1297
my $des_risc1=0;
 
1298
my $des_risc2=0;
 
1299
my $des_unroll=0;
 
1300
my $bn_ll=0;
 
1301
my $def_int=2;
 
1302
my $rc4_int=$def_int;
 
1303
my $md2_int=$def_int;
 
1304
my $idea_int=$def_int;
 
1305
my $rc2_int=$def_int;
 
1306
my $rc4_idx=0;
 
1307
my $rc4_chunk=0;
 
1308
my $bf_ptr=0;
 
1309
my @type=("char","short","int","long");
 
1310
my ($b64l,$b64,$b32,$b16,$b8)=(0,0,1,0,0);
 
1311
my $export_var_as_fn=0;
 
1312
 
 
1313
my $des_int;
 
1314
 
 
1315
foreach (sort split(/\s+/,$bn_ops))
 
1316
        {
 
1317
        $des_ptr=1 if /DES_PTR/;
 
1318
        $des_risc1=1 if /DES_RISC1/;
 
1319
        $des_risc2=1 if /DES_RISC2/;
 
1320
        $des_unroll=1 if /DES_UNROLL/;
 
1321
        $des_int=1 if /DES_INT/;
 
1322
        $bn_ll=1 if /BN_LLONG/;
 
1323
        $rc4_int=0 if /RC4_CHAR/;
 
1324
        $rc4_int=3 if /RC4_LONG/;
 
1325
        $rc4_idx=1 if /RC4_INDEX/;
 
1326
        $rc4_chunk=1 if /RC4_CHUNK/;
 
1327
        $rc4_chunk=2 if /RC4_CHUNK_LL/;
 
1328
        $md2_int=0 if /MD2_CHAR/;
 
1329
        $md2_int=3 if /MD2_LONG/;
 
1330
        $idea_int=1 if /IDEA_SHORT/;
 
1331
        $idea_int=3 if /IDEA_LONG/;
 
1332
        $rc2_int=1 if /RC2_SHORT/;
 
1333
        $rc2_int=3 if /RC2_LONG/;
 
1334
        $bf_ptr=1 if $_ eq "BF_PTR";
 
1335
        $bf_ptr=2 if $_ eq "BF_PTR2";
 
1336
        ($b64l,$b64,$b32,$b16,$b8)=(0,1,0,0,0) if /SIXTY_FOUR_BIT/;
 
1337
        ($b64l,$b64,$b32,$b16,$b8)=(1,0,0,0,0) if /SIXTY_FOUR_BIT_LONG/;
 
1338
        ($b64l,$b64,$b32,$b16,$b8)=(0,0,1,0,0) if /THIRTY_TWO_BIT/;
 
1339
        ($b64l,$b64,$b32,$b16,$b8)=(0,0,0,1,0) if /SIXTEEN_BIT/;
 
1340
        ($b64l,$b64,$b32,$b16,$b8)=(0,0,0,0,1) if /EIGHT_BIT/;
 
1341
        $export_var_as_fn=1 if /EXPORT_VAR_AS_FN/;
 
1342
        }
 
1343
 
 
1344
open(IN,'<crypto/opensslconf.h.in') || die "unable to read crypto/opensslconf.h.in:$!\n";
 
1345
unlink("crypto/opensslconf.h.new") || die "unable to remove old crypto/opensslconf.h.new:$!\n" if -e "crypto/opensslconf.h.new";
 
1346
open(OUT,'>crypto/opensslconf.h.new') || die "unable to create crypto/opensslconf.h.new:$!\n";
 
1347
print OUT "/* opensslconf.h */\n";
 
1348
print OUT "/* WARNING: Generated automatically from opensslconf.h.in by Configure. */\n\n";
 
1349
 
 
1350
print OUT "/* OpenSSL was configured with the following options: */\n";
 
1351
my $openssl_algorithm_defines_trans = $openssl_algorithm_defines;
 
1352
$openssl_algorithm_defines_trans =~ s/^\s*#\s*define\s+OPENSSL_(.*)/# if defined(OPENSSL_$1) \&\& !defined($1)\n#  define $1\n# endif/mg;
 
1353
$openssl_algorithm_defines =~ s/^\s*#\s*define\s+(.*)/#ifndef $1\n# define $1\n#endif/mg;
 
1354
$openssl_algorithm_defines = "   /* no ciphers excluded */\n" if $openssl_algorithm_defines eq "";
 
1355
$openssl_thread_defines =~ s/^\s*#\s*define\s+(.*)/#ifndef $1\n# define $1\n#endif/mg;
 
1356
$openssl_sys_defines =~ s/^\s*#\s*define\s+(.*)/#ifndef $1\n# define $1\n#endif/mg;
 
1357
$openssl_other_defines =~ s/^\s*#\s*define\s+(.*)/#ifndef $1\n# define $1\n#endif/mg;
 
1358
print OUT $openssl_sys_defines;
 
1359
print OUT "#ifndef OPENSSL_DOING_MAKEDEPEND\n\n";
 
1360
print OUT $openssl_algorithm_defines;
 
1361
print OUT "\n#endif /* OPENSSL_DOING_MAKEDEPEND */\n";
 
1362
print OUT $openssl_thread_defines;
 
1363
print OUT $openssl_other_defines,"\n";
 
1364
 
 
1365
print OUT "/* The OPENSSL_NO_* macros are also defined as NO_* if the application\n";
 
1366
print OUT "   asks for it.  This is a transient feature that is provided for those\n";
 
1367
print OUT "   who haven't had the time to do the appropriate changes in their\n";
 
1368
print OUT "   applications.  */\n";
 
1369
print OUT "#ifdef OPENSSL_ALGORITHM_DEFINES\n";
 
1370
print OUT $openssl_algorithm_defines_trans;
 
1371
print OUT "#endif\n\n";
 
1372
 
 
1373
while (<IN>)
 
1374
        {
 
1375
        if      (/^#define\s+OPENSSLDIR/)
 
1376
                { print OUT "#define OPENSSLDIR \"$openssldir\"\n"; }
 
1377
        elsif   (/^#((define)|(undef))\s+OPENSSL_EXPORT_VAR_AS_FUNCTION/)
 
1378
                { printf OUT "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION\n"
 
1379
                        if $export_var_as_fn;
 
1380
                  printf OUT "#%s OPENSSL_EXPORT_VAR_AS_FUNCTION\n",
 
1381
                        ($export_var_as_fn)?"define":"undef"; }
 
1382
        elsif   (/^#define\s+OPENSSL_UNISTD/)
 
1383
                {
 
1384
                $unistd = "<unistd.h>" if $unistd eq "";
 
1385
                print OUT "#define OPENSSL_UNISTD $unistd\n";
 
1386
                }
 
1387
        elsif   (/^#((define)|(undef))\s+SIXTY_FOUR_BIT_LONG/)
 
1388
                { printf OUT "#%s SIXTY_FOUR_BIT_LONG\n",($b64l)?"define":"undef"; }
 
1389
        elsif   (/^#((define)|(undef))\s+SIXTY_FOUR_BIT/)
 
1390
                { printf OUT "#%s SIXTY_FOUR_BIT\n",($b64)?"define":"undef"; }
 
1391
        elsif   (/^#((define)|(undef))\s+THIRTY_TWO_BIT/)
 
1392
                { printf OUT "#%s THIRTY_TWO_BIT\n",($b32)?"define":"undef"; }
 
1393
        elsif   (/^#((define)|(undef))\s+SIXTEEN_BIT/)
 
1394
                { printf OUT "#%s SIXTEEN_BIT\n",($b16)?"define":"undef"; }
 
1395
        elsif   (/^#((define)|(undef))\s+EIGHT_BIT/)
 
1396
                { printf OUT "#%s EIGHT_BIT\n",($b8)?"define":"undef"; }
 
1397
        elsif   (/^#((define)|(undef))\s+BN_LLONG\s*$/)
 
1398
                { printf OUT "#%s BN_LLONG\n",($bn_ll)?"define":"undef"; }
 
1399
        elsif   (/^\#define\s+DES_LONG\s+.*/)
 
1400
                { printf OUT "#define DES_LONG unsigned %s\n",
 
1401
                        ($des_int)?'int':'long'; }
 
1402
        elsif   (/^\#(define|undef)\s+DES_PTR/)
 
1403
                { printf OUT "#%s DES_PTR\n",($des_ptr)?'define':'undef'; }
 
1404
        elsif   (/^\#(define|undef)\s+DES_RISC1/)
 
1405
                { printf OUT "#%s DES_RISC1\n",($des_risc1)?'define':'undef'; }
 
1406
        elsif   (/^\#(define|undef)\s+DES_RISC2/)
 
1407
                { printf OUT "#%s DES_RISC2\n",($des_risc2)?'define':'undef'; }
 
1408
        elsif   (/^\#(define|undef)\s+DES_UNROLL/)
 
1409
                { printf OUT "#%s DES_UNROLL\n",($des_unroll)?'define':'undef'; }
 
1410
        elsif   (/^#define\s+RC4_INT\s/)
 
1411
                { printf OUT "#define RC4_INT unsigned %s\n",$type[$rc4_int]; }
 
1412
        elsif   (/^#undef\s+RC4_CHUNK/)
 
1413
                {
 
1414
                printf OUT "#undef RC4_CHUNK\n" if $rc4_chunk==0;
 
1415
                printf OUT "#define RC4_CHUNK unsigned long\n" if $rc4_chunk==1;
 
1416
                printf OUT "#define RC4_CHUNK unsigned long long\n" if $rc4_chunk==2;
 
1417
                }
 
1418
        elsif   (/^#((define)|(undef))\s+RC4_INDEX/)
 
1419
                { printf OUT "#%s RC4_INDEX\n",($rc4_idx)?"define":"undef"; }
 
1420
        elsif (/^#(define|undef)\s+I386_ONLY/)
 
1421
                { printf OUT "#%s I386_ONLY\n", ($processor == 386)?
 
1422
                        "define":"undef"; }
 
1423
        elsif   (/^#define\s+MD2_INT\s/)
 
1424
                { printf OUT "#define MD2_INT unsigned %s\n",$type[$md2_int]; }
 
1425
        elsif   (/^#define\s+IDEA_INT\s/)
 
1426
                {printf OUT "#define IDEA_INT unsigned %s\n",$type[$idea_int];}
 
1427
        elsif   (/^#define\s+RC2_INT\s/)
 
1428
                {printf OUT "#define RC2_INT unsigned %s\n",$type[$rc2_int];}
 
1429
        elsif (/^#(define|undef)\s+BF_PTR/)
 
1430
                {
 
1431
                printf OUT "#undef BF_PTR\n" if $bf_ptr == 0;
 
1432
                printf OUT "#define BF_PTR\n" if $bf_ptr == 1;
 
1433
                printf OUT "#define BF_PTR2\n" if $bf_ptr == 2;
 
1434
                }
 
1435
        else
 
1436
                { print OUT $_; }
 
1437
        }
 
1438
close(IN);
 
1439
close(OUT);
 
1440
rename("crypto/opensslconf.h","crypto/opensslconf.h.bak") || die "unable to rename crypto/opensslconf.h\n" if -e "crypto/opensslconf.h";
 
1441
rename("crypto/opensslconf.h.new","crypto/opensslconf.h") || die "unable to rename crypto/opensslconf.h.new\n";
 
1442
 
 
1443
 
 
1444
# Fix the date
 
1445
 
 
1446
print "SIXTY_FOUR_BIT_LONG mode\n" if $b64l;
 
1447
print "SIXTY_FOUR_BIT mode\n" if $b64;
 
1448
print "THIRTY_TWO_BIT mode\n" if $b32;
 
1449
print "SIXTEEN_BIT mode\n" if $b16;
 
1450
print "EIGHT_BIT mode\n" if $b8;
 
1451
print "DES_PTR used\n" if $des_ptr;
 
1452
print "DES_RISC1 used\n" if $des_risc1;
 
1453
print "DES_RISC2 used\n" if $des_risc2;
 
1454
print "DES_UNROLL used\n" if $des_unroll;
 
1455
print "DES_INT used\n" if $des_int;
 
1456
print "BN_LLONG mode\n" if $bn_ll;
 
1457
print "RC4 uses u$type[$rc4_int]\n" if $rc4_int != $def_int;
 
1458
print "RC4_INDEX mode\n" if $rc4_idx;
 
1459
print "RC4_CHUNK is undefined\n" if $rc4_chunk==0;
 
1460
print "RC4_CHUNK is unsigned long\n" if $rc4_chunk==1;
 
1461
print "RC4_CHUNK is unsigned long long\n" if $rc4_chunk==2;
 
1462
print "MD2 uses u$type[$md2_int]\n" if $md2_int != $def_int;
 
1463
print "IDEA uses u$type[$idea_int]\n" if $idea_int != $def_int;
 
1464
print "RC2 uses u$type[$rc2_int]\n" if $rc2_int != $def_int;
 
1465
print "BF_PTR used\n" if $bf_ptr == 1; 
 
1466
print "BF_PTR2 used\n" if $bf_ptr == 2; 
 
1467
 
 
1468
if($IsWindows) {
 
1469
        open (OUT,">crypto/buildinf.h") || die "Can't open buildinf.h";
 
1470
        printf OUT <<EOF;
 
1471
#ifndef MK1MF_BUILD
 
1472
  /* auto-generated by Configure for crypto/cversion.c:
 
1473
   * for Unix builds, crypto/Makefile.ssl generates functional definitions;
 
1474
   * Windows builds (and other mk1mf builds) compile cversion.c with
 
1475
   * -DMK1MF_BUILD and use definitions added to this file by util/mk1mf.pl. */
 
1476
  #error "Windows builds (PLATFORM=$target) use mk1mf.pl-created Makefiles"
 
1477
#endif
 
1478
EOF
 
1479
        close(OUT);
 
1480
} else {
 
1481
        my $make_command = "make -f Makefile.ssl PERL=\'$perl\'";
 
1482
        my $make_targets = "";
 
1483
        $make_targets .= " links" if $symlink;
 
1484
        $make_targets .= " depend" if $depflags ne "" && $make_depend;
 
1485
        $make_targets .= " gentests" if $symlink;
 
1486
        (system $make_command.$make_targets) == 0 or exit $?
 
1487
                if $make_targets ne "";
 
1488
        if ( $perl =~ m@^/@) {
 
1489
            &dofile("tools/c_rehash",$perl,'^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";');
 
1490
            &dofile("apps/der_chop",$perl,'^#!/', '#!%s');
 
1491
            &dofile("apps/CA.pl",$perl,'^#!/', '#!%s');
 
1492
        } else {
 
1493
            # No path for Perl known ...
 
1494
            &dofile("tools/c_rehash",'/usr/local/bin/perl','^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";');
 
1495
            &dofile("apps/der_chop",'/usr/local/bin/perl','^#!/', '#!%s');
 
1496
            &dofile("apps/CA.pl",'/usr/local/bin/perl','^#!/', '#!%s');
 
1497
        }
 
1498
        if ($depflags ne "" && !$make_depend) {
 
1499
                print <<EOF;
 
1500
 
 
1501
Since you've disabled at least one algorithm, you need to do the following
 
1502
before building:
 
1503
 
 
1504
        make depend
 
1505
EOF
 
1506
        }
 
1507
}
 
1508
 
 
1509
print <<EOF;
 
1510
 
 
1511
Configured for $target.
 
1512
EOF
 
1513
 
 
1514
print <<\EOF if (!$no_threads && !$threads);
 
1515
 
 
1516
The library could not be configured for supporting multi-threaded
 
1517
applications as the compiler options required on this system are not known.
 
1518
See file INSTALL for details if you need multi-threading.
 
1519
EOF
 
1520
 
 
1521
print <<\EOF if ($no_shared_warn);
 
1522
 
 
1523
You gave the option 'shared'.  Normally, that would give you shared libraries.
 
1524
Unfortunately, the OpenSSL configuration doesn't include shared library support
 
1525
for this platform yet, so it will pretend you gave the option 'no-shared'.  If
 
1526
you can inform the developpers (openssl-dev\@openssl.org) how to support shared
 
1527
libraries on this platform, they will at least look at it and try their best
 
1528
(but please first make sure you have tried with a current version of OpenSSL).
 
1529
EOF
 
1530
 
 
1531
exit(0);
 
1532
 
 
1533
sub usage
 
1534
        {
 
1535
        print STDERR $usage;
 
1536
        print STDERR "\npick os/compiler from:\n";
 
1537
        my $j=0;
 
1538
        my $i;
 
1539
        my $k=0;
 
1540
        foreach $i (sort keys %table)
 
1541
                {
 
1542
                next if $i =~ /^debug/;
 
1543
                $k += length($i) + 1;
 
1544
                if ($k > 78)
 
1545
                        {
 
1546
                        print STDERR "\n";
 
1547
                        $k=length($i);
 
1548
                        }
 
1549
                print STDERR $i . " ";
 
1550
                }
 
1551
        foreach $i (sort keys %table)
 
1552
                {
 
1553
                next if $i !~ /^debug/;
 
1554
                $k += length($i) + 1;
 
1555
                if ($k > 78)
 
1556
                        {
 
1557
                        print STDERR "\n";
 
1558
                        $k=length($i);
 
1559
                        }
 
1560
                print STDERR $i . " ";
 
1561
                }
 
1562
        print STDERR "\n\nNOTE: If in doubt, on Unix-ish systems use './config'.\n";
 
1563
        exit(1);
 
1564
        }
 
1565
 
 
1566
sub which
 
1567
        {
 
1568
        my($name)=@_;
 
1569
        my $path;
 
1570
        foreach $path (split /:/, $ENV{PATH})
 
1571
                {
 
1572
                if (-f "$path/$name" and -x _)
 
1573
                        {
 
1574
                        return "$path/$name" unless ($name eq "perl" and
 
1575
                         system("$path/$name -e " . '\'exit($]<5.0);\''));
 
1576
                        }
 
1577
                }
 
1578
        }
 
1579
 
 
1580
sub dofile
 
1581
        {
 
1582
        my $f; my $p; my %m; my @a; my $k; my $ff;
 
1583
        ($f,$p,%m)=@_;
 
1584
 
 
1585
        open(IN,"<$f.in") || open(IN,"<$f") || die "unable to open $f:$!\n";
 
1586
        @a=<IN>;
 
1587
        close(IN);
 
1588
        foreach $k (keys %m)
 
1589
                {
 
1590
                grep(/$k/ && ($_=sprintf($m{$k}."\n",$p)),@a);
 
1591
                }
 
1592
        open(OUT,">$f.new") || die "unable to open $f.new:$!\n";
 
1593
        print OUT @a;
 
1594
        close(OUT);
 
1595
        rename($f,"$f.bak") || die "unable to rename $f\n" if -e $f;
 
1596
        rename("$f.new",$f) || die "unable to rename $f.new\n";
 
1597
        }
 
1598
 
 
1599
sub print_table_entry
 
1600
        {
 
1601
        my $target = shift;
 
1602
 
 
1603
        (my $cc,my $cflags,my $unistd,my $thread_cflag,my $sys_id,my $lflags,
 
1604
        my $bn_ops,my $bn_obj,my $des_obj,my $bf_obj,
 
1605
        my $md5_obj,my $sha1_obj,my $cast_obj,my $rc4_obj,my $rmd160_obj,
 
1606
        my $rc5_obj,my $dso_scheme,my $shared_target,my $shared_cflag,
 
1607
        my $shared_ldflag,my $shared_extension,my $ranlib,my $arflags)=
 
1608
        split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
 
1609
                        
 
1610
        print <<EOF
 
1611
 
 
1612
*** $target
 
1613
\$cc           = $cc
 
1614
\$cflags       = $cflags
 
1615
\$unistd       = $unistd
 
1616
\$thread_cflag = $thread_cflag
 
1617
\$sys_id       = $sys_id
 
1618
\$lflags       = $lflags
 
1619
\$bn_ops       = $bn_ops
 
1620
\$bn_obj       = $bn_obj
 
1621
\$des_obj      = $des_obj
 
1622
\$bf_obj       = $bf_obj
 
1623
\$md5_obj      = $md5_obj
 
1624
\$sha1_obj     = $sha1_obj
 
1625
\$cast_obj     = $cast_obj
 
1626
\$rc4_obj      = $rc4_obj
 
1627
\$rmd160_obj   = $rmd160_obj
 
1628
\$rc5_obj      = $rc5_obj
 
1629
\$dso_scheme   = $dso_scheme
 
1630
\$shared_target= $shared_target
 
1631
\$shared_cflag = $shared_cflag
 
1632
\$shared_ldflag = $shared_ldflag
 
1633
\$shared_extension = $shared_extension
 
1634
\$ranlib       = $ranlib
 
1635
\$arflags      = $arflags
 
1636
EOF
 
1637
        }
 
1638
 
 
1639
sub test_sanity
 
1640
        {
 
1641
        my $errorcnt = 0;
 
1642
 
 
1643
        print STDERR "=" x 70, "\n";
 
1644
        print STDERR "=== SANITY TESTING!\n";
 
1645
        print STDERR "=== No configuration will be done, all other arguments will be ignored!\n";
 
1646
        print STDERR "=" x 70, "\n";
 
1647
 
 
1648
        foreach $target (sort keys %table)
 
1649
                {
 
1650
                @fields = split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
 
1651
 
 
1652
                if ($fields[$idx_dso_scheme-1] =~ /^(dl|dlfcn|win32|vms)$/)
 
1653
                        {
 
1654
                        $errorcnt++;
 
1655
                        print STDERR "SANITY ERROR: '$target' has the dso_scheme [$idx_dso_scheme] values\n";
 
1656
                        print STDERR "              in the previous field\n";
 
1657
                        }
 
1658
                elsif ($fields[$idx_dso_scheme+1] =~ /^(dl|dlfcn|win32|vms)$/)
 
1659
                        {
 
1660
                        $errorcnt++;
 
1661
                        print STDERR "SANITY ERROR: '$target' has the dso_scheme [$idx_dso_scheme] values\n";
 
1662
                        print STDERR "              in the following field\n";
 
1663
                        }
 
1664
                elsif ($fields[$idx_dso_scheme] !~ /^(dl|dlfcn|win32|vms|)$/)
 
1665
                        {
 
1666
                        $errorcnt++;
 
1667
                        print STDERR "SANITY ERROR: '$target' has the dso_scheme [$idx_dso_scheme] field = ",$fields[$idx_dso_scheme],"\n";
 
1668
                        print STDERR "              valid values are 'dl', 'dlfcn', 'win32' and 'vms'\n";
 
1669
                        }
 
1670
                }
 
1671
        print STDERR "No sanity errors detected!\n" if $errorcnt == 0;
 
1672
        return $errorcnt;
 
1673
        }