source: trunk/third/openssl/Configure @ 15530

Revision 15530, 48.9 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r15529, which included commits to RCS files with non-trunk default branches.
  • Property svn:executable set to *
Line 
1:
2eval 'exec perl -S $0 ${1+"$@"}'
3    if $running_under_some_shell;
4##
5##  Configure -- OpenSSL source tree configuration script
6##
7
8require 5.000;
9use strict;
10
11# see INSTALL for instructions.
12
13my $usage="Usage: Configure [no-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [rsaref] [no-threads] [no-asm] [no-dso] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] 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# rsaref        use RSAref
27# [no-]threads  [don't] try to create a library that is suitable for
28#               multithreaded applications (default is "threads" if we
29#               know how to do it)
30# [no-]shared   [don't] try to create shared libraries when supported.
31# no-asm        do not use assembler
32# no-dso        do not compile in any native shared-library methods. This
33#               will ensure that all methods just return NULL.
34# 386           generate 80386 code
35# no-<cipher>   build without specified algorithm (rsa, idea, rc5, ...)
36# -<xxx> +<xxx> compiler options are passed through
37#
38# DEBUG_SAFESTACK use type-safe stacks to enforce type-safety on stack items
39#               provided to stack calls. Generates unique stack functions for
40#               each possible stack type.
41# DES_PTR       use pointer lookup vs arrays in the DES in crypto/des/des_locl.h
42# DES_RISC1     use different DES_ENCRYPT macro that helps reduce register
43#               dependancies but needs to more registers, good for RISC CPU's
44# DES_RISC2     A different RISC variant.
45# DES_UNROLL    unroll the inner DES loop, sometimes helps, somtimes hinders.
46# DES_INT       use 'int' instead of 'long' for DES_LONG in crypto/des/des.h
47#               This is used on the DEC Alpha where long is 8 bytes
48#               and int is 4
49# BN_LLONG      use the type 'long long' in crypto/bn/bn.h
50# MD2_CHAR      use 'char' instead of 'int' for MD2_INT in crypto/md2/md2.h
51# MD2_LONG      use 'long' instead of 'int' for MD2_INT in crypto/md2/md2.h
52# IDEA_SHORT    use 'short' instead of 'int' for IDEA_INT in crypto/idea/idea.h
53# IDEA_LONG     use 'long' instead of 'int' for IDEA_INT in crypto/idea/idea.h
54# RC2_SHORT     use 'short' instead of 'int' for RC2_INT in crypto/rc2/rc2.h
55# RC2_LONG      use 'long' instead of 'int' for RC2_INT in crypto/rc2/rc2.h
56# RC4_CHAR      use 'char' instead of 'int' for RC4_INT in crypto/rc4/rc4.h
57# RC4_LONG      use 'long' instead of 'int' for RC4_INT in crypto/rc4/rc4.h
58# RC4_INDEX     define RC4_INDEX in crypto/rc4/rc4_locl.h.  This turns on
59#               array lookups instead of pointer use.
60# RC4_CHUNK     enables code that handles data aligned at long (natural CPU
61#               word) boundary.
62# RC4_CHUNK_LL  enables code that handles data aligned at long long boundary
63#               (intended for 64-bit CPUs running 32-bit OS).
64# BF_PTR        use 'pointer arithmatic' for Blowfish (unsafe on Alpha).
65# BF_PTR2       intel specific version (generic version is more efficient).
66# MD5_ASM       use some extra md5 assember,
67# SHA1_ASM      use some extra sha1 assember, must define L_ENDIAN for x86
68# RMD160_ASM    use some extra ripemd160 assember,
69
70my $x86_gcc_des="DES_PTR DES_RISC1 DES_UNROLL";
71
72# MD2_CHAR slags pentium pros
73my $x86_gcc_opts="RC4_INDEX MD2_INT";
74
75# MODIFY THESE PARAMETERS IF YOU ARE GOING TO USE THE 'util/speed.sh SCRIPT
76# Don't worry about these normally
77
78my $tcc="cc";
79my $tflags="-fast -Xa";
80my $tbn_mul="";
81my $tlib="-lnsl -lsocket";
82#$bits1="SIXTEEN_BIT ";
83#$bits2="THIRTY_TWO_BIT ";
84my $bits1="THIRTY_TWO_BIT ";
85my $bits2="SIXTY_FOUR_BIT ";
86
87my $x86_sol_asm="asm/bn86-sol.o asm/co86-sol.o:asm/dx86-sol.o asm/yx86-sol.o:asm/bx86-sol.o:asm/mx86-sol.o:asm/sx86-sol.o:asm/cx86-sol.o:asm/rx86-sol.o:asm/rm86-sol.o:asm/r586-sol.o";
88my $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";
89my $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";
90my $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";
91
92# -DB_ENDIAN slows things down on a sparc for md5, but helps sha1.
93# So the md5_locl.h file has an undef B_ENDIAN if sun is defined
94
95#config-string  $cc : $cflags : $unistd : $thread_cflag : $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
96
97my %table=(
98# File 'TABLE' (created by 'make TABLE') contains the data from this list,
99# formatted for better readability.
100
101
102#"b",           "${tcc}:${tflags}::${tlib}:${bits1}:${tbn_mul}::",
103#"bl-4c-2c",    "${tcc}:${tflags}::${tlib}:${bits1}BN_LLONG RC4_CHAR MD2_CHAR:${tbn_mul}::",
104#"bl-4c-ri",    "${tcc}:${tflags}::${tlib}:${bits1}BN_LLONG RC4_CHAR RC4_INDEX:${tbn_mul}::",
105#"b2-is-ri-dp", "${tcc}:${tflags}::${tlib}:${bits2}IDEA_SHORT RC4_INDEX DES_PTR:${tbn_mul}::",
106
107# Our development configs
108"purify",       "purify gcc:-g -DPURIFY -Wall::(unknown):-lsocket -lnsl::::",
109"debug",        "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -ggdb -g2 -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror::(unknown):-lefence::::",
110"debug-ben",    "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown):::::",
111"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):::::",
112"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):::::",
113"debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall::(unknown)::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
114"debug-bodo",   "gcc:-DL_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -DBIO_PAIR_DEBUG -g -m486 -pedantic -Wshadow -Wall::-D_REENTRANT::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
115"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}",
116"debug-steve",  "gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DPEDANTIC -g -O2 -m486 -pedantic -Wall -Werror -Wshadow -pipe::-D_REENTRANT::${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
117"debug-levitte-linux-elf","gcc:-DUSE_ALLOCATING_PRINT -DRL_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DNO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -ggdb -g3 -m486 -pedantic -ansi -Wall -Wshadow -Wid-clash-31 -pipe::-D_REENTRANT:-ldl:::::::::::dlfcn",
118"dist",         "cc:-O::(unknown):::::",
119
120# Basic configs that should work on any (32 and less bit) box
121"gcc",          "gcc:-O3::(unknown)::BN_LLONG:::",
122"cc",           "cc:-O::(unknown):::::",
123
124#### Solaris x86 setups
125# -DNO_INLINE_ASM switches off inline assembler. We have to do it
126# here because whenever GNU C instantiates an assembler template it
127# surrounds it with #APP #NO_APP comment pair which (at least Solaris
128# 7_x86) /usr/ccs/bin/as fails to assemble with "Illegal mnemonic"
129# error message.
130"solaris-x86-gcc","gcc:-O3 -fomit-frame-pointer -m486 -Wall -DL_ENDIAN -DNO_INLINE_ASM::-D_REENTRANT:-lsocket -lnsl -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_sol_asm}:dlfcn:solaris-shared:-fPIC",
131
132#### SPARC Solaris with GNU C setups
133"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",
134"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",
135"solaris-sparcv9-gcc","gcc:-mcpu=ultrasparc -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W -DULTRASPARC::-D_REENTRANT:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o::::::dlfcn:solaris-shared:-fPIC",
136# gcc pre-2.8 doesn't understand -mcpu=ultrasparc, so fall down to -mv8
137# but keep the assembler modules.
138"solaris-sparcv9-gcc27","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W -DULTRASPARC::-D_REENTRANT:-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",
139####
140"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",
141"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",
142
143#### SPARC Solaris with Sun C setups
144# DO NOT use /xO[34] on sparc with SC3.0.  It is broken, and will not pass the tests
145"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",
146# SC4.0 doesn't pass 'make test', upgrade to SC5.0 or SC4.2.
147# SC4.2 is ok, better than gcc even on bn as long as you tell it -xarch=v8
148# SC5.0 note: Compiler common patch 107357-01 or later is required!
149"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",
150"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",
151"solaris-sparcv9-cc","cc:-xtarget=ultra -xarch=v8plus -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W -DULTRASPARC::-D_REENTRANT:-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",
152"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DULTRASPARC::-D_REENTRANT:-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",
153####
154"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",
155"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 -DULTRASPARC::-D_REENTRANT:-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",
156
157#### SPARC Linux setups
158"linux-sparcv7","gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::",
159# Ray Miller <ray.miller@computing-services.oxford.ac.uk> has patiently
160# assisted with debugging of following two configs.
161"linux-sparcv8","gcc:-mv8 -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8.o::::",
162# it's a real mess with -mcpu=ultrasparc option under Linux, but
163# -Wa,-Av8plus should do the trick no matter what.
164"linux-sparcv9","gcc:-mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -Wa,-Av8plus -DULTRASPARC -DBN_DIV2W::-D_REENTRANT::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o:",
165# !!!Folowing can't be even tested yet!!!
166#    We have to wait till 64-bit glibc for SPARC is operational!!!
167#"linux64-sparcv9","sparc64-linux-gcc:-m64 -mcpu=v9 -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DULTRASPARC -DBN_DIV2W::-D_REENTRANT::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::::asm/md5-sparcv9.o:",
168
169# Sunos configs, assuming sparc for the gcc one.
170##"sunos-cc", "cc:-O4 -DNOPROTO -DNOCONST::(unknown)::DES_UNROLL:::",
171"sunos-gcc","gcc:-O3 -mv8 -Dssize_t=int::(unknown)::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL DES_PTR DES_RISC1:::",
172
173#### IRIX 5.x configs
174# -mips2 flag is added by ./config when appropriate.
175"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:::",
176"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:::",
177#### IRIX 6.x configs
178# Only N32 and N64 ABIs are supported. If you need O32 ABI build, invoke
179# './Configure irix-[g]cc' manually.
180# -mips4 flag is added by ./config when appropriate.
181"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:asm/mips3.o::",
182"irix-mips3-cc", "cc:-n32 -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:asm/mips3.o::",
183# N64 ABI builds.
184"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:asm/mips3.o::",
185"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:asm/mips3.o::",
186
187#### Unified HP-UX ANSI C configs.
188# Special notes:
189# - Originally we were optimizing at +O4 level. It should be noted
190#   that the only difference between +O3 and +O4 is global inter-
191#   procedural analysis. As it has to be performed during the link
192#   stage the compiler leaves behind certain pseudo-code in lib*.a
193#   which might be release or even patch level specific. Generating
194#   the machine code for and analyzing the *whole* program appears
195#   to be *extremely* memory demanding while the performance gain is
196#   actually questionable. The situation is intensified by the default
197#   HP-UX data set size limit (infamous 'maxdsiz' tunable) of 64MB
198#   which is way too low for +O4. In other words, doesn't +O3 make
199#   more sense?
200# - Keep in mind that the HP compiler by default generates code
201#   suitable for execution on the host you're currently compiling at.
202#   If the toolkit is ment to be used on various PA-RISC processors
203#   consider './config +Dportable'.
204# - +DD64 is chosen in favour of +DA2.0W because it's ment to be
205#   compatible with *future* releases.
206# - If you run ./Configure hpux-parisc-[g]cc manually don't forget to
207#   pass -D_REENTRANT on HP-UX 10 and later.
208# - -DMD32_XARRAY triggers workaround for compiler bug we ran into in
209#   32-bit message digests. (For the moment of this writing) HP C
210#   doesn't seem to "digest" too many local variables (they make "him"
211#   chew forever:-). For more details look-up MD32_XARRAY comment in
212#   crypto/sha/sha_lcl.h.
213#                                       <appro@fy.chalmers.se>
214#
215#!#"hpux-parisc-cc","cc:-Ae +O3 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY:::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
216# Since there is mention of this in shlib/hpux10-cc.sh
217"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",
218"hpux-parisc-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W:::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
219"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",
220
221# More attempts at unified 10.X and 11.X targets for HP C compiler.
222#
223# Chris Ruemmler <ruemmler@cup.hp.com>
224# Kevin Steves <ks@hp.se>
225"hpux-parisc-cc","cc:+O3 +Optrs_strongly_typed +Olibcalls -Ae +ESlit -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::-D_REENTRANT:-ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dl",
226"hpux-parisc2-cc","cc:+DA2.0 +DS2.0 +O3 +Optrs_strongly_typed +Olibcalls -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT:-ldld:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/pa-risc2.o:::::::::dl",
227"hpux64-parisc2-cc","cc:+DD64 +O3 +Optrs_strongly_typed +Olibcalls -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",
228"hpux-parisc1_1-cc","cc:+DA1.1 +DS1.1 +O3 +Optrs_strongly_typed +Olibcalls -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT:-ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dl",
229
230# HPUX 9.X config.
231# Don't use the bundled cc.  It is broken.  Use HP ANSI C if possible, or
232# egcs.  gcc 2.8.1 is also broken.
233
234"hpux-cc",      "cc:-DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY -Ae +ESlit +O3 -z::(unknown):-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
235# If hpux-cc fails (e.g. during "make test"), try the next one; otherwise,
236# please report your OS and compiler version to the openssl-bugs@openssl.org
237# mailing list.
238"hpux-brokencc",        "cc:-DB_ENDIAN -DBN_DIV2W -Ae +ESlit +O2 -z::(unknown):-ldld:DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
239
240"hpux-gcc",     "gcc:-DB_ENDIAN -DBN_DIV2W -O3::(unknown):-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
241# If hpux-gcc fails, try this one:
242"hpux-brokengcc",       "gcc:-DB_ENDIAN -DBN_DIV2W -O3::(unknown):-ldld:DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
243
244# HPUX 10.X config.  Supports threads.
245"hpux10-cc",    "cc:-DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY -Ae +ESlit +O3 -z::-D_REENTRANT:-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
246# If hpux10-cc fails, try this one (if still fails, try deleting BN_LLONG):
247"hpux10-brokencc",      "cc:-DB_ENDIAN -DBN_DIV2W -Ae +ESlit +O2 -z::-D_REENTRANT:-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
248
249"hpux10-gcc",   "gcc:-DB_ENDIAN -DBN_DIV2W -O3::-D_REENTRANT:-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
250# If hpux10-gcc fails, try this one:
251"hpux10-brokengcc",     "gcc:-DB_ENDIAN -DBN_DIV2W -O3::-D_REENTRANT:-ldld:DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
252
253# HPUX 11.X from www.globus.org.
254# Only works on PA-RISC 2.0 cpus, and not optimized.  Why?
255#"hpux11-32bit-cc","cc:+DA2.0 -DB_ENDIAN -D_HPUX_SOURCE -Aa -Ae +ESlit::-D_REENTRANT::DES_PTR DES_UNROLL DES_RISC1:::",
256#"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 :::",
257# Use unified settings above instead.
258
259#### HP MPE/iX http://jazz.external.hp.com/src/openssl/
260"MPE/iX-gcc", "gcc:-D_ENDIAN -DBN_DIV2W -O3 -DMPE -D_POSIX_SOURCE -D_SOCKET_SOURCE -I/SYSLOG/PUB::(unknown):-L/SYSLOG/PUB -lsyslog -lsocket -lcurses:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:::",
261
262# Dec Alpha, OSF/1 - the alpha164-cc is the flags for a 21164A with
263# the new compiler
264# For gcc, the following gave a %50 speedup on a 164 over the 'DES_INT' version
265"alpha-gcc","gcc:-O3::(unknown)::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_RISC1:asm/alpha.o:::::::::dlfcn:true64-shared",
266"alpha-cc", "cc:-std1 -tune host -O4 -readonly_strings::(unknown)::SIXTY_FOUR_BIT_LONG RC4_CHUNK:asm/alpha.o:::::::::dlfcn:true64-shared",
267"alpha164-cc", "cc:-std1 -tune host -fast -readonly_strings::(unknown)::SIXTY_FOUR_BIT_LONG RC4_CHUNK:asm/alpha.o:::::::::dlfcn:true64-shared",
268"FreeBSD-alpha","gcc:-DTERMIOS -O -fomit-frame-pointer::(unknown)::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC2:::",
269
270#### Alpha Linux with GNU C and Compaq C setups
271# Special notes:
272# - linux-alpha+bwx-gcc is ment to be used from ./config only. If you
273#   ought to run './Configure linux-alpha+bwx-gcc' manually, do
274#   complement the command line with -mcpu=ev56, -mcpu=ev6 or whatever
275#   which is appropriate.
276# - If you use ccc keep in mind that -fast implies -arch host and the
277#   compiler is free to issue instructions which gonna make elder CPU
278#   choke. If you wish to build "blended" toolkit, add -arch generic
279#   *after* -fast and invoke './Configure linux-alpha-ccc' manually.
280#
281#                                       <appro@fy.chalmers.se>
282#
283"linux-alpha-gcc","gcc:-O3 -DL_ENDIAN -DTERMIO::-D_REENTRANT::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_UNROLL:asm/alpha.o::",
284"linux-alpha+bwx-gcc","gcc:-O3 -DL_ENDIAN -DTERMIO::-D_REENTRANT::SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:asm/alpha.o::",
285"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:asm/alpha.o::",
286"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:asm/alpha.o::",
287
288# assembler versions -- currently defunct:
289##"OpenBSD-alpha","gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2:asm/alpha.o::",
290
291# The intel boxes :-), It would be worth seeing if bsdi-gcc can use the
292# bn86-elf.o file file since it is hand tweaked assembler.
293"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",
294"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",
295"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",
296"linux-aout",   "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall::(unknown)::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}",
297"linux-mips",   "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::(unknown)::BN_LLONG:::",
298"linux-ppc",    "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::BN_LLONG::",
299"linux-m68k",   "gcc:-DB_ENDIAN -DTERMIO -O2 -fomit-frame-pointer -Wall::-D_REENTRANT::BN_LLONG::",
300"linux-ia64",   "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::(unknown)::SIXTY_FOUR_BIT_LONG::",
301"NetBSD-sparc", "gcc:-DTERMIOS -O3 -fomit-frame-pointer -mv8 -Wall -DB_ENDIAN::(unknown)::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL:::",
302"NetBSD-m68",   "gcc:-DTERMIOS -O3 -fomit-frame-pointer -Wall -DB_ENDIAN::(unknown)::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL:::",
303"NetBSD-x86",   "gcc:-DTERMIOS -O3 -fomit-frame-pointer -m486 -Wall::(unknown)::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:",
304"FreeBSD-elf",  "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown)::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
305"FreeBSD",      "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown)::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}",
306"bsdi-gcc",     "gcc:-O3 -ffast-math -DL_ENDIAN -DPERL5 -m486::(unknown)::RSA_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_bsdi_asm}",
307"bsdi-elf-gcc",     "gcc:-DPERL5 -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown)::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
308"nextstep",     "cc:-O -Wall:<libc.h>:(unknown)::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::",
309"nextstep3.3",  "cc:-O3 -Wall:<libc.h>:(unknown)::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::",
310# NCR MP-RAS UNIX ver 02.03.01
311"ncr-scde","cc:-O6 -Xa -Hoff=BEHAVED -686 -Hwide -Hiw::(unknown):-lsocket -lnsl:${x86_gcc_des} ${x86_gcc_opts}:::",
312
313# QNX 4
314"qnx4", "cc:-DL_ENDIAN -DTERMIO::(unknown)::${x86_gcc_des} ${x86_gcc_opts}:",
315
316# Linux on ARM
317"linux-elf-arm","gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::BN_LLONG::::::::::dlfcn:linux-shared:-fPIC",
318
319# UnixWare 2.0
320"unixware-2.0","cc:-O -DFILIO_H::(unknown):-lsocket -lnsl:${x86_gcc_des} ${x86_gcc_opts}:::",
321"unixware-2.0-pentium","cc:-O -DFILIO_H -Kpentium -Kthread::(unknown):-lsocket -lnsl:MD2_CHAR RC4_INDEX ${x86_gcc_des}::",
322
323# UnixWare 7
324"unixware-7","cc:-O -DFILIO_H -Kalloca::-Kthread:-lsocket -lnsl:MD2_CHAR RC4_INDEX ${x86_gcc_des}::",
325
326# IBM's AIX.
327"aix-cc",   "cc:-O -DAIX -DB_ENDIAN -qmaxmem=16384::(unknown)::BN_LLONG RC4_CHAR:::",
328"aix-gcc",  "gcc:-O3 -DAIX -DB_ENDIAN::(unknown)::BN_LLONG RC4_CHAR:::",
329
330#
331# Cray T90 (SDSC)
332# It's Big-endian, but the algorithms work properly when B_ENDIAN is NOT
333# defined.  The T90 ints and longs are 8 bytes long, and apparently the
334# B_ENDIAN code assumes 4 byte ints.  Fortunately, the non-B_ENDIAN and
335# non L_ENDIAN code aligns the bytes in each word correctly.
336#
337# The BIT_FIELD_LIMITS define is to avoid two fatal compiler errors:
338#'Taking the address of a bit field is not allowed. '
339#'An expression with bit field exists as the operand of "sizeof" '
340# (written by Wayne Schroeder <schroede@SDSC.EDU>)
341"cray-t90-cc", "cc: -DBIT_FIELD_LIMITS -DTERMIOS::(unknown)::SIXTY_FOUR_BIT_LONG DES_INT:::",
342
343#
344# Cray T3E (Research Center Juelich, beckman@acl.lanl.gov)
345#
346# The BIT_FIELD_LIMITS define was written for the C90 (it seems).  I added
347# another use.  Basically, the problem is that the T3E uses some bit fields
348# for some st_addr stuff, and then sizeof and address-of fails
349# I could not use the ams/alpha.o option because the Cray assembler, 'cam'
350# did not like it.
351"cray-t3e", "cc: -DBIT_FIELD_LIMITS -DTERMIOS::(unknown)::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT:::",
352
353# DGUX, 88100.
354"dgux-R3-gcc",  "gcc:-O3 -fomit-frame-pointer::(unknown)::RC4_INDEX DES_UNROLL:::",
355"dgux-R4-gcc",  "gcc:-O3 -fomit-frame-pointer::(unknown):-lnsl -lsocket:RC4_INDEX:RC4_INDEX DES_UNROLL:::",
356"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}",
357
358# SCO 5 - Ben Laurie <ben@algroup.co.uk> says the -O breaks the
359# SCO cc.
360"sco5-cc",  "cc:::(unknown):-lsocket:${x86_gcc_des} ${x86_gcc_opts}:::", # des options?
361"sco5-gcc",  "gcc:-O3 -fomit-frame-pointer::(unknown):-lsocket:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::", # the SCO assembler doesn't seem to like our assembler files ...
362
363# Sinix/ReliantUNIX RM400
364# NOTE: The CDS++ Compiler up to V2.0Bsomething has the IRIX_CC_BUG optimizer problem. Better use -g  */
365"ReliantUNIX","cc:-KPIC -g -DSNI -DTERMIOS -DB_ENDIAN::-Kthread:-lsocket -lnsl -lc -L/usr/ucblib -lucb:BN_LLONG DES_PTR DES_RISC2 DES_UNROLL BF_PTR:::",
366"SINIX","cc:-O -DSNI::(unknown):-lsocket -lnsl -lc -L/usr/ucblib -lucb:RC4_INDEX RC4_CHAR:::",
367"SINIX-N","/usr/ucb/cc:-O2 -misaligned::(unknown):-lucb:RC4_INDEX RC4_CHAR:::",
368
369# SIEMENS BS2000/OSD: an EBCDIC-based mainframe
370"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:::",
371
372# Windows NT, Microsoft Visual C++ 4.0
373
374"VC-NT","cl:::::BN_LLONG RC4_INDEX ${x86_gcc_opts}::::::::::win32",
375"VC-WIN32","cl:::::BN_LLONG RC4_INDEX ${x86_gcc_opts}::::::::::win32",
376"VC-WIN16","cl:::(unknown)::MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX THIRTY_TWO_BIT:::",
377"VC-W31-16","cl:::(unknown)::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT:::",
378"VC-W31-32","cl:::::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX THIRTY_TWO_BIT:::",
379"VC-MSDOS","cl:::(unknown)::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT:::",
380
381# Borland C++ 4.5
382"BC-32","bcc32:::::BN_LLONG DES_PTR RC4_INDEX::::::::::win32",
383"BC-16","bcc:::(unknown)::BN_LLONG DES_PTR RC4_INDEX SIXTEEN_BIT:::",
384
385# Mingw32
386# (Note: the real CFLAGS for Windows builds are defined by util/mk1mf.pl
387# and its library files in util/pl/*)
388"Mingw32", "gcc:-DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::win32",
389
390# CygWin32
391"CygWin32", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::win32",
392
393# Ultrix from Bernhard Simon <simon@zid.tuwien.ac.at>
394"ultrix-cc","cc:-std1 -O -Olimit 1000 -DL_ENDIAN::(unknown)::::::",
395"ultrix-gcc","gcc:-O3 -DL_ENDIAN::(unknown)::::::",
396# K&R C is no longer supported; you need gcc on old Ultrix installations
397##"ultrix","cc:-O2 -DNOPROTO -DNOCONST -DL_ENDIAN::(unknown)::::::",
398
399# Some OpenBSD from Bob Beck <beck@obtuse.com>
400"OpenBSD-alpha","gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown)::SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2:::",
401"OpenBSD-x86",  "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -m486::(unknown)::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}:dlfcn",
402"OpenBSD",      "gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown)::BN_LLONG RC2_CHAR RC4_INDEX DES_UNROLL:::",
403"OpenBSD-mips","gcc:-O2 -DL_ENDIAN::(unknown):BN_LLONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC2 DES_PTR BF_PTR::::",
404
405##### MacOS X (a.k.a. Rhapsody) setup
406"rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown)::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
407
408##### Sony NEWS-OS 4.x
409"newsos4-gcc","gcc:-O -DB_ENDIAN -DNEWS4::(unknown):-lmld -liberty:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::",
410
411);
412
413my @WinTargets=qw(VC-NT VC-WIN32 VC-WIN16 VC-W31-16 VC-W31-32 VC-MSDOS BC-32
414        BC-16 Mingw32);
415
416my $prefix="";
417my $openssldir="";
418my $install_prefix="";
419my $no_threads=0;
420my $no_shared=1;
421my $threads=0;
422my $no_asm=0;
423my $no_dso=0;
424my @skip=();
425my $Makefile="Makefile.ssl";
426my $des_locl="crypto/des/des_locl.h";
427my $des ="crypto/des/des.h";
428my $bn  ="crypto/bn/bn.h";
429my $md2 ="crypto/md2/md2.h";
430my $rc4 ="crypto/rc4/rc4.h";
431my $rc4_locl="crypto/rc4/rc4_locl.h";
432my $idea        ="crypto/idea/idea.h";
433my $rc2 ="crypto/rc2/rc2.h";
434my $bf  ="crypto/bf/bf_locl.h";
435my $bn_asm      ="bn_asm.o";
436my $des_enc="des_enc.o fcrypt_b.o";
437my $bf_enc      ="bf_enc.o";
438my $cast_enc="c_enc.o";
439my $rc4_enc="rc4_enc.o";
440my $rc5_enc="rc5_enc.o";
441my $md5_obj="";
442my $sha1_obj="";
443my $rmd160_obj="";
444my $processor="";
445my $ranlib;
446my $perl;
447
448$ranlib=&which("ranlib") or $ranlib="true";
449$perl=$ENV{'PERL'} or $perl=&which("perl5") or $perl=&which("perl")
450  or $perl="perl";
451
452&usage if ($#ARGV < 0);
453
454my $flags;
455my $depflags;
456my $openssl_algorithm_defines;
457my $openssl_thread_defines;
458my $openssl_other_defines;
459my $libs;
460my $target;
461my $options;
462my $symlink;
463
464my @argvcopy=@ARGV;
465my $argvstring="";
466my $argv_unprocessed=1;
467
468while($argv_unprocessed)
469        {
470        $flags="";
471        $depflags="";
472        $openssl_algorithm_defines="";
473        $openssl_thread_defines="";
474        $openssl_other_defines="";
475        $libs="";
476        $target="";
477        $options="";
478        $symlink=1;
479
480        $argv_unprocessed=0;
481        $argvstring=join(' ',@argvcopy);
482
483PROCESS_ARGS:
484        foreach (@argvcopy)
485                {
486                s /^-no-/no-/; # some people just can't read the instructions
487                if (/^no-asm$/)
488                        {
489                        $no_asm=1;
490                        $flags .= "-DNO_ASM ";
491                        $openssl_other_defines .= "#define NO_ASM\n";
492                        }
493                elsif (/^no-dso$/)
494                        { $no_dso=1; }
495                elsif (/^no-threads$/)
496                        { $no_threads=1; }
497                elsif (/^threads$/)
498                        { $threads=1; }
499                elsif (/^no-shared$/)
500                        { $no_shared=1; }
501                elsif (/^shared$/)
502                        { $no_shared=0; }
503                elsif (/^no-symlinks$/)
504                        { $symlink=0; }
505                elsif (/^no-(.+)$/)
506                        {
507                        my $algo=$1;
508                        push @skip,$algo;
509                        $algo =~ tr/[a-z]/[A-Z]/;
510                        $flags .= "-DNO_$algo ";
511                        $depflags .= "-DNO_$algo ";
512                        $openssl_algorithm_defines .= "#define NO_$algo\n";
513                        if ($algo eq "DES")
514                                {
515                                push @skip, "mdc2";
516                                $options .= " no-mdc2";
517                                $flags .= "-DNO_MDC2 ";
518                                $depflags .= "-DNO_MDC2 ";
519                                $openssl_algorithm_defines .= "#define NO_MDC2\n";
520                                }
521                        }
522                elsif (/^reconfigure/ || /^reconf/)
523                        {
524                        if (open(IN,"<$Makefile"))
525                                {
526                                while (<IN>)
527                                        {
528                                        chop;
529                                        if (/^CONFIGURE_ARGS=(.*)/)
530                                                {
531                                                $argvstring=$1;
532                                                @argvcopy=split(' ',$argvstring);
533                                                die "Incorrect data to reconfigure, please do a normal configuration\n"
534                                                        if (grep(/^reconf/,@argvcopy));
535                                                print "Reconfiguring with: $argvstring\n";
536                                                $argv_unprocessed=1;
537                                                close(IN);
538                                                last PROCESS_ARGS;
539                                                }
540                                        }
541                                close(IN);
542                                }
543                        die "Insufficient data to reconfigure, please do a normal configuration\n";
544                        }
545                elsif (/^386$/)
546                        { $processor=386; }
547                elsif (/^rsaref$/)
548                        {
549                        $libs.= "-lRSAglue -lrsaref ";
550                        $flags.= "-DRSAref ";
551                        $openssl_other_defines .= "#define RSAref\n";
552                        }
553                elsif (/^[-+]/)
554                        {
555                        if (/^-[lL](.*)$/)
556                                {
557                                $libs.=$_." ";
558                                }
559                        elsif (/^-[^-]/ or /^\+/)
560                                {
561                                $flags.=$_." ";
562                                }
563                        elsif (/^--prefix=(.*)$/)
564                                {
565                                $prefix=$1;
566                                }
567                        elsif (/^--openssldir=(.*)$/)
568                                {
569                                $openssldir=$1;
570                                }
571                        elsif (/^--install.prefix=(.*)$/)
572                                {
573                                $install_prefix=$1;
574                                }
575                        else
576                                {
577                                print STDERR $usage;
578                                exit(1);
579                                }
580                        }
581                elsif ($_ =~ /^([^:]+):(.+)$/)
582                        {
583                        eval "\$table{\$1} = \"$2\""; # allow $xxx constructs in the string
584                        $target=$1;
585                        }
586                else
587                        {
588                        die "target already defined - $target\n" if ($target ne "");
589                        $target=$_;
590                        }
591                unless ($_ eq $target) {
592                        if ($options eq "") {
593                                $options = $_;
594                        } else {
595                                $options .= " ".$_;
596                        }
597                }
598        }
599}
600
601if ($target eq "TABLE") {
602        foreach $target (sort keys %table) {
603                print_table_entry($target);
604        }
605        exit 0;
606}
607
608if ($target eq "LIST") {
609        foreach (sort keys %table) {
610                print;
611                print "\n";
612        }
613        exit 0;
614}
615
616print "Configuring for $target\n";
617
618&usage if (!defined($table{$target}));
619
620my $IsWindows=scalar grep /^$target$/,@WinTargets;
621
622$openssldir="/usr/local/ssl" if ($openssldir eq "" and $prefix eq "");
623$prefix=$openssldir if $prefix eq "";
624
625chop $openssldir if $openssldir =~ /\/$/;
626chop $prefix if $prefix =~ /\/$/;
627
628$openssldir=$prefix . "/ssl" if $openssldir eq "";
629$openssldir=$prefix . "/" . $openssldir if $openssldir !~ /^\//;
630
631
632print "IsWindows=$IsWindows\n";
633
634(my $cc,my $cflags,my $unistd,my $thread_cflag,my $lflags,my $bn_ops,my $bn_obj,my $des_obj,my $bf_obj,
635 $md5_obj,$sha1_obj,my $cast_obj,my $rc4_obj,$rmd160_obj,my $rc5_obj,my $dso_scheme,my $shared_target,my $shared_cflag)=
636        split(/\s*:\s*/,$table{$target} . ":" x 22 , -1);
637$cflags="$flags$cflags" if ($flags ne "");
638
639# The DSO code currently always implements all functions so that no
640# applications will have to worry about that from a compilation point
641# of view. However, the "method"s may return zero unless that platform
642# has support compiled in for them. Currently each method is enabled
643# by a define "DSO_<name>" ... we translate the "dso_scheme" config
644# string entry into using the following logic;
645my $dso_cflags;
646if (!$no_dso && $dso_scheme ne "")
647        {
648        $dso_scheme =~ tr/[a-z]/[A-Z]/;
649        if ($dso_scheme eq "DLFCN")
650                {
651                $dso_cflags = "-DDSO_DLFCN -DHAVE_DLFCN_H";
652                $openssl_other_defines .= "#define DSO_DLFCN\n";
653                $openssl_other_defines .= "#define HAVE_DLFCN_H\n";
654                }
655        elsif ($dso_scheme eq "DLFCN_NO_H")
656                {
657                $dso_cflags = "-DDSO_DLFCN";
658                $openssl_other_defines .= "#define DSO_DLFCN\n";
659                }
660        else
661                {
662                $dso_cflags = "-DDSO_$dso_scheme";
663                $openssl_other_defines .= "#define DSO_$dso_scheme\n";
664                }
665        $cflags = "$dso_cflags $cflags";
666        }
667
668my $thread_cflags;
669my $thread_defines;
670if ($thread_cflag ne "(unknown)" && !$no_threads)
671        {
672        # If we know how to do it, support threads by default.
673        $threads = 1;
674        }
675if ($thread_cflag eq "(unknown)")
676        {
677        # If the user asked for "threads", hopefully they also provided
678        # any system-dependent compiler options that are necessary.
679        $thread_cflags="-DTHREADS $cflags" ;
680        $thread_defines .= "#define THREADS\n";
681        }
682else
683        {
684        $thread_cflags="-DTHREADS $thread_cflag $cflags";
685        $thread_defines .= "#define THREADS\n";
686#       my $def;
687#       foreach $def (split ' ',$thread_cflag)
688#               {
689#               if ($def =~ s/^-D// && $def !~ /^_/)
690#                       {
691#                       $thread_defines .= "#define $def\n";
692#                       }
693#               }
694        }       
695
696$lflags="$libs$lflags"if ($libs ne "");
697
698if ($no_asm)
699        {
700        $bn_obj=$des_obj=$bf_obj=$cast_obj=$rc4_obj=$rc5_obj="";
701        $sha1_obj=$md5_obj=$rmd160_obj="";
702        }
703
704if ($threads)
705        {
706                $cflags=$thread_cflags;
707                $openssl_thread_defines .= $thread_defines;
708        }
709
710# You will find shlib_mark1 and shlib_mark2 explained in Makefile.org
711my $shared_mark1 = "";
712my $shared_mark2 = "";
713if ($shared_cflag ne "")
714        {
715        $cflags = "$shared_cflag $cflags";
716        if (!$no_shared)
717                {
718                $shared_mark1 = ".shlib-clean.";
719                $shared_mark2 = ".shlib.";
720                }
721        }
722
723#my ($bn1)=split(/\s+/,$bn_obj);
724#$bn1 = "" unless defined $bn1;
725#$bn1=$bn_asm unless ($bn1 =~ /\.o$/);
726#$bn_obj="$bn1";
727
728$bn_obj = $bn_asm unless $bn_obj ne "";
729
730$des_obj=$des_enc       unless ($des_obj =~ /\.o$/);
731$bf_obj=$bf_enc         unless ($bf_obj =~ /\.o$/);
732$cast_obj=$cast_enc     unless ($cast_obj =~ /\.o$/);
733$rc4_obj=$rc4_enc       unless ($rc4_obj =~ /\.o$/);
734$rc5_obj=$rc5_enc       unless ($rc5_obj =~ /\.o$/);
735if ($sha1_obj =~ /\.o$/)
736        {
737#       $sha1_obj=$sha1_enc;
738        $cflags.=" -DSHA1_ASM";
739        }
740if ($md5_obj =~ /\.o$/)
741        {
742#       $md5_obj=$md5_enc;
743        $cflags.=" -DMD5_ASM";
744        }
745if ($rmd160_obj =~ /\.o$/)
746        {
747#       $rmd160_obj=$rmd160_enc;
748        $cflags.=" -DRMD160_ASM";
749        }
750
751my $version = "unknown";
752my $major = "unknown";
753my $minor = "unknown";
754my $shlib_version_number = "unknown";
755my $shlib_version_history = "unknown";
756my $shlib_major = "unknown";
757my $shlib_minor = "unknown";
758
759open(IN,'<crypto/opensslv.h') || die "unable to read opensslv.h:$!\n";
760while (<IN>)
761        {
762        $version=$1 if /OPENSSL.VERSION.TEXT.*OpenSSL (\S+) /;
763        $shlib_version_number=$1 if /SHLIB_VERSION_NUMBER *"([^"]+)"/;
764        $shlib_version_history=$1 if /SHLIB_VERSION_HISTORY *"([^"]*)"/;
765        }
766close(IN);
767if ($shlib_version_history ne "") { $shlib_version_history .= ":"; }
768
769if ($version =~ /(^[0-9]*)\.([0-9\.]*)/)
770        {
771        $major=$1;
772        $minor=$2;
773        }
774
775if ($shlib_version_number =~ /(^[0-9]*)\.([0-9\.]*)/)
776        {
777        $shlib_major=$1;
778        $shlib_minor=$2;
779        }
780
781open(IN,'<Makefile.org') || die "unable to read Makefile.org:$!\n";
782open(OUT,">$Makefile") || die "unable to create $Makefile:$!\n";
783print OUT "### Generated automatically from Makefile.org by Configure.\n\n";
784my $sdirs=0;
785while (<IN>)
786        {
787        chop;
788        $sdirs = 1 if /^SDIRS=/;
789        if ($sdirs) {
790                my $dir;
791                foreach $dir (@skip) {
792                        s/$dir//;
793                        }
794                }
795        $sdirs = 0 unless /\\$/;
796        s/^VERSION=.*/VERSION=$version/;
797        s/^MAJOR=.*/MAJOR=$major/;
798        s/^MINOR=.*/MINOR=$minor/;
799        s/^SHLIB_VERSION_NUMBER=.*/SHLIB_VERSION_NUMBER=$shlib_version_number/;
800        s/^SHLIB_VERSION_HISTORY=.*/SHLIB_VERSION_HISTORY=$shlib_version_history/;
801        s/^SHLIB_MAJOR=.*/SHLIB_MAJOR=$shlib_major/;
802        s/^SHLIB_MINOR=.*/SHLIB_MINOR=$shlib_minor/;
803        s/^INSTALLTOP=.*$/INSTALLTOP=$prefix/;
804        s/^OPENSSLDIR=.*$/OPENSSLDIR=$openssldir/;
805        s/^INSTALL_PREFIX=.*$/INSTALL_PREFIX=$install_prefix/;
806        s/^PLATFORM=.*$/PLATFORM=$target/;
807        s/^OPTIONS=.*$/OPTIONS=$options/;
808        s/^CONFIGURE_ARGS=.*$/CONFIGURE_ARGS=$argvstring/;
809        s/^CC=.*$/CC= $cc/;
810        s/^CFLAG=.*$/CFLAG= $cflags/;
811        s/^DEPFLAG=.*$/DEPFLAG= $depflags/;
812        s/^EX_LIBS=.*$/EX_LIBS= $lflags/;
813        s/^BN_ASM=.*$/BN_ASM= $bn_obj/;
814        s/^DES_ENC=.*$/DES_ENC= $des_obj/;
815        s/^BF_ENC=.*$/BF_ENC= $bf_obj/;
816        s/^CAST_ENC=.*$/CAST_ENC= $cast_obj/;
817        s/^RC4_ENC=.*$/RC4_ENC= $rc4_obj/;
818        s/^RC5_ENC=.*$/RC5_ENC= $rc5_obj/;
819        s/^MD5_ASM_OBJ=.*$/MD5_ASM_OBJ= $md5_obj/;
820        s/^SHA1_ASM_OBJ=.*$/SHA1_ASM_OBJ= $sha1_obj/;
821        s/^RMD160_ASM_OBJ=.*$/RMD160_ASM_OBJ= $rmd160_obj/;
822        s/^PROCESSOR=.*/PROCESSOR= $processor/;
823        s/^RANLIB=.*/RANLIB= $ranlib/;
824        s/^PERL=.*/PERL= $perl/;
825        s/^SHLIB_TARGET=.*/SHLIB_TARGET=$shared_target/;
826        s/^SHLIB_MARK1=.*/SHLIB_MARK1=$shared_mark1/;
827        s/^SHLIB_MARK2=.*/SHLIB_MARK2=$shared_mark2/;
828        s/^LIBS=.*/LIBS=libcrypto\.so\* libssl\.so\*/ if (!$no_shared);
829        print OUT $_."\n";
830        }
831close(IN);
832close(OUT);
833
834print "CC            =$cc\n";
835print "CFLAG         =$cflags\n";
836print "EX_LIBS       =$lflags\n";
837print "BN_ASM        =$bn_obj\n";
838print "DES_ENC       =$des_obj\n";
839print "BF_ENC        =$bf_obj\n";
840print "CAST_ENC      =$cast_obj\n";
841print "RC4_ENC       =$rc4_obj\n";
842print "RC5_ENC       =$rc5_obj\n";
843print "MD5_OBJ_ASM   =$md5_obj\n";
844print "SHA1_OBJ_ASM  =$sha1_obj\n";
845print "RMD160_OBJ_ASM=$rmd160_obj\n";
846print "PROCESSOR     =$processor\n";
847print "RANLIB        =$ranlib\n";
848print "PERL          =$perl\n";
849
850my $des_ptr=0;
851my $des_risc1=0;
852my $des_risc2=0;
853my $des_unroll=0;
854my $bn_ll=0;
855my $def_int=2;
856my $rc4_int=$def_int;
857my $md2_int=$def_int;
858my $idea_int=$def_int;
859my $rc2_int=$def_int;
860my $rc4_idx=0;
861my $rc4_chunk=0;
862my $bf_ptr=0;
863my @type=("char","short","int","long");
864my ($b64l,$b64,$b32,$b16,$b8)=(0,0,1,0,0);
865
866my $des_int;
867
868foreach (sort split(/\s+/,$bn_ops))
869        {
870        $des_ptr=1 if /DES_PTR/;
871        $des_risc1=1 if /DES_RISC1/;
872        $des_risc2=1 if /DES_RISC2/;
873        $des_unroll=1 if /DES_UNROLL/;
874        $des_int=1 if /DES_INT/;
875        $bn_ll=1 if /BN_LLONG/;
876        $rc4_int=0 if /RC4_CHAR/;
877        $rc4_int=3 if /RC4_LONG/;
878        $rc4_idx=1 if /RC4_INDEX/;
879        $rc4_chunk=1 if /RC4_CHUNK/;
880        $rc4_chunk=2 if /RC4_CHUNK_LL/;
881        $md2_int=0 if /MD2_CHAR/;
882        $md2_int=3 if /MD2_LONG/;
883        $idea_int=1 if /IDEA_SHORT/;
884        $idea_int=3 if /IDEA_LONG/;
885        $rc2_int=1 if /RC2_SHORT/;
886        $rc2_int=3 if /RC2_LONG/;
887        $bf_ptr=1 if $_ eq "BF_PTR";
888        $bf_ptr=2 if $_ eq "BF_PTR2";
889        ($b64l,$b64,$b32,$b16,$b8)=(0,1,0,0,0) if /SIXTY_FOUR_BIT/;
890        ($b64l,$b64,$b32,$b16,$b8)=(1,0,0,0,0) if /SIXTY_FOUR_BIT_LONG/;
891        ($b64l,$b64,$b32,$b16,$b8)=(0,0,1,0,0) if /THIRTY_TWO_BIT/;
892        ($b64l,$b64,$b32,$b16,$b8)=(0,0,0,1,0) if /SIXTEEN_BIT/;
893        ($b64l,$b64,$b32,$b16,$b8)=(0,0,0,0,1) if /EIGHT_BIT/;
894        }
895
896open(IN,'<crypto/opensslconf.h.in') || die "unable to read crypto/opensslconf.h.in:$!\n";
897open(OUT,'>crypto/opensslconf.h') || die "unable to create crypto/opensslconf.h:$!\n";
898print OUT "/* opensslconf.h */\n";
899print OUT "/* WARNING: Generated automatically from opensslconf.h.in by Configure. */\n\n";
900
901print OUT "/* OpenSSL was configured with the following options: */\n";
902$openssl_algorithm_defines =~ s/^\s*#\s*define\s+(.*)/# ifndef $1\n#  define $1\n# endif/mg;
903$openssl_algorithm_defines = "   /* no ciphers excluded */\n" if $openssl_algorithm_defines eq "";
904$openssl_thread_defines =~ s/^\s*#\s*define\s+(.*)/# ifndef $1\n#  define $1\n# endif/mg;
905$openssl_other_defines =~ s/^\s*#\s*define\s+(.*)/# ifndef $1\n#  define $1\n# endif/mg;
906print OUT "#ifdef OPENSSL_ALGORITHM_DEFINES\n$openssl_algorithm_defines#endif\n";
907print OUT "#ifdef OPENSSL_THREAD_DEFINES\n$openssl_thread_defines#endif\n";
908print OUT "#ifdef OPENSSL_OTHER_DEFINES\n$openssl_other_defines#endif\n\n";
909
910while (<IN>)
911        {
912        if      (/^#define\s+OPENSSLDIR/)
913                { print OUT "#define OPENSSLDIR \"$openssldir\"\n"; }
914        elsif   (/^#define\s+OPENSSL_UNISTD/)
915                {
916                $unistd = "<unistd.h>" if $unistd eq "";
917                print OUT "#define OPENSSL_UNISTD $unistd\n";
918                }
919        elsif   (/^#((define)|(undef))\s+SIXTY_FOUR_BIT_LONG/)
920                { printf OUT "#%s SIXTY_FOUR_BIT_LONG\n",($b64l)?"define":"undef"; }
921        elsif   (/^#((define)|(undef))\s+SIXTY_FOUR_BIT/)
922                { printf OUT "#%s SIXTY_FOUR_BIT\n",($b64)?"define":"undef"; }
923        elsif   (/^#((define)|(undef))\s+THIRTY_TWO_BIT/)
924                { printf OUT "#%s THIRTY_TWO_BIT\n",($b32)?"define":"undef"; }
925        elsif   (/^#((define)|(undef))\s+SIXTEEN_BIT/)
926                { printf OUT "#%s SIXTEEN_BIT\n",($b16)?"define":"undef"; }
927        elsif   (/^#((define)|(undef))\s+EIGHT_BIT/)
928                { printf OUT "#%s EIGHT_BIT\n",($b8)?"define":"undef"; }
929        elsif   (/^#((define)|(undef))\s+BN_LLONG\s*$/)
930                { printf OUT "#%s BN_LLONG\n",($bn_ll)?"define":"undef"; }
931        elsif   (/^\#define\s+DES_LONG\s+.*/)
932                { printf OUT "#define DES_LONG unsigned %s\n",
933                        ($des_int)?'int':'long'; }
934        elsif   (/^\#(define|undef)\s+DES_PTR/)
935                { printf OUT "#%s DES_PTR\n",($des_ptr)?'define':'undef'; }
936        elsif   (/^\#(define|undef)\s+DES_RISC1/)
937                { printf OUT "#%s DES_RISC1\n",($des_risc1)?'define':'undef'; }
938        elsif   (/^\#(define|undef)\s+DES_RISC2/)
939                { printf OUT "#%s DES_RISC2\n",($des_risc2)?'define':'undef'; }
940        elsif   (/^\#(define|undef)\s+DES_UNROLL/)
941                { printf OUT "#%s DES_UNROLL\n",($des_unroll)?'define':'undef'; }
942        elsif   (/^#define\s+RC4_INT\s/)
943                { printf OUT "#define RC4_INT unsigned %s\n",$type[$rc4_int]; }
944        elsif   (/^#undef\s+RC4_CHUNK/)
945                {
946                printf OUT "#undef RC4_CHUNK\n" if $rc4_chunk==0;
947                printf OUT "#define RC4_CHUNK unsigned long\n" if $rc4_chunk==1;
948                printf OUT "#define RC4_CHUNK unsigned long long\n" if $rc4_chunk==2;
949                }
950        elsif   (/^#((define)|(undef))\s+RC4_INDEX/)
951                { printf OUT "#%s RC4_INDEX\n",($rc4_idx)?"define":"undef"; }
952        elsif (/^#(define|undef)\s+I386_ONLY/)
953                { printf OUT "#%s I386_ONLY\n", ($processor == 386)?
954                        "define":"undef"; }
955        elsif   (/^#define\s+MD2_INT\s/)
956                { printf OUT "#define MD2_INT unsigned %s\n",$type[$md2_int]; }
957        elsif   (/^#define\s+IDEA_INT\s/)
958                {printf OUT "#define IDEA_INT unsigned %s\n",$type[$idea_int];}
959        elsif   (/^#define\s+RC2_INT\s/)
960                {printf OUT "#define RC2_INT unsigned %s\n",$type[$rc2_int];}
961        elsif (/^#(define|undef)\s+BF_PTR/)
962                {
963                printf OUT "#undef BF_PTR\n" if $bf_ptr == 0;
964                printf OUT "#define BF_PTR\n" if $bf_ptr == 1;
965                printf OUT "#define BF_PTR2\n" if $bf_ptr == 2;
966                }
967        else
968                { print OUT $_; }
969        }
970close(IN);
971close(OUT);
972
973
974# Fix the date
975
976print "SIXTY_FOUR_BIT_LONG mode\n" if $b64l;
977print "SIXTY_FOUR_BIT mode\n" if $b64;
978print "THIRTY_TWO_BIT mode\n" if $b32;
979print "SIXTEEN_BIT mode\n" if $b16;
980print "EIGHT_BIT mode\n" if $b8;
981print "DES_PTR used\n" if $des_ptr;
982print "DES_RISC1 used\n" if $des_risc1;
983print "DES_RISC2 used\n" if $des_risc2;
984print "DES_UNROLL used\n" if $des_unroll;
985print "DES_INT used\n" if $des_int;
986print "BN_LLONG mode\n" if $bn_ll;
987print "RC4 uses u$type[$rc4_int]\n" if $rc4_int != $def_int;
988print "RC4_INDEX mode\n" if $rc4_idx;
989print "RC4_CHUNK is undefined\n" if $rc4_chunk==0;
990print "RC4_CHUNK is unsigned long\n" if $rc4_chunk==1;
991print "RC4_CHUNK is unsigned long long\n" if $rc4_chunk==2;
992print "MD2 uses u$type[$md2_int]\n" if $md2_int != $def_int;
993print "IDEA uses u$type[$idea_int]\n" if $idea_int != $def_int;
994print "RC2 uses u$type[$rc2_int]\n" if $rc2_int != $def_int;
995print "BF_PTR used\n" if $bf_ptr == 1;
996print "BF_PTR2 used\n" if $bf_ptr == 2;
997
998if($IsWindows) {
999        open (OUT,">crypto/buildinf.h") || die "Can't open buildinf.h";
1000        printf OUT <<EOF;
1001#ifndef MK1MF_BUILD
1002  /* auto-generated by Configure for crypto/cversion.c:
1003   * for Unix builds, crypto/Makefile.ssl generates functional definitions;
1004   * Windows builds (and other mk1mf builds) compile cversion.c with
1005   * -DMK1MF_BUILD and use definitions added to this file by util/mk1mf.pl. */
1006  #error "Windows builds (PLATFORM=$target) use mk1mf.pl-created Makefiles"
1007#endif
1008EOF
1009        close(OUT);
1010} else {
1011        (system "make -f Makefile.ssl PERL=\'$perl\' links") == 0 or exit $?
1012                if $symlink;
1013        ### (system 'make depend') == 0 or exit $? if $depflags ne "";
1014        # Run "make depend" manually if you want to be able to delete
1015        # the source code files of ciphers you left out.
1016        if ( $perl =~ m@^/@) {
1017            &dofile("tools/c_rehash",$perl,'^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";');
1018            &dofile("apps/der_chop",$perl,'^#!/', '#!%s');
1019            &dofile("apps/CA.pl",$perl,'^#!/', '#!%s');
1020        } else {
1021            # No path for Perl known ...
1022            &dofile("tools/c_rehash",'/usr/local/bin/perl','^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";');
1023            &dofile("apps/der_chop",'/usr/local/bin/perl','^#!/', '#!%s');
1024            &dofile("apps/CA.pl",'/usr/local/bin/perl','^#!/', '#!%s');
1025        }           
1026}
1027
1028print <<EOF;
1029
1030Configured for $target.
1031EOF
1032
1033print <<\EOF if (!$no_threads && !$threads);
1034
1035The library could not be configured for supporting multi-threaded
1036applications as the compiler options required on this system are not known.
1037See file INSTALL for details if you need multi-threading.
1038EOF
1039
1040exit(0);
1041
1042sub usage
1043        {
1044        print STDERR $usage;
1045        print STDERR "\npick os/compiler from:\n";
1046        my $j=0;
1047        my $i;
1048        my $k=0;
1049        foreach $i (sort keys %table)
1050                {
1051                next if $i =~ /^debug/;
1052                $k += length($i) + 1;
1053                if ($k > 78)
1054                        {
1055                        print STDERR "\n";
1056                        $k=length($i);
1057                        }
1058                print STDERR $i . " ";
1059                }
1060        foreach $i (sort keys %table)
1061                {
1062                next if $i !~ /^debug/;
1063                $k += length($i) + 1;
1064                if ($k > 78)
1065                        {
1066                        print STDERR "\n";
1067                        $k=length($i);
1068                        }
1069                print STDERR $i . " ";
1070                }
1071        print STDERR "\n\nNOTE: If in doubt, on Unix-ish systems use './config'.\n";
1072        exit(1);
1073        }
1074
1075sub which
1076        {
1077        my($name)=@_;
1078        my $path;
1079        foreach $path (split /:/, $ENV{PATH})
1080                {
1081                if (-f "$path/$name" and -x _)
1082                        {
1083                        return "$path/$name" unless ($name eq "perl" and
1084                         system("$path/$name -e " . '\'exit($]<5.0);\''));
1085                        }
1086                }
1087        }
1088
1089sub dofile
1090        {
1091        my $f; my $p; my %m; my @a; my $k; my $ff;
1092        ($f,$p,%m)=@_;
1093
1094        open(IN,"<$f.in") || open(IN,"<$f") || die "unable to open $f:$!\n";
1095        @a=<IN>;
1096        close(IN);
1097        foreach $k (keys %m)
1098                {
1099                grep(/$k/ && ($_=sprintf($m{$k}."\n",$p)),@a);
1100                }
1101        open(OUT,">$f.new") || die "unable to open $f.new:$!\n";
1102        print OUT @a;
1103        close(OUT);
1104        rename($f,"$f.bak") || die "unable to rename $f\n" if -e $f;
1105        rename("$f.new",$f) || die "unable to rename $f.new\n";
1106        }
1107
1108sub print_table_entry
1109        {
1110        my $target = shift;
1111
1112        (my $cc,my $cflags,my $unistd,my $thread_cflag,my $lflags,my $bn_ops,
1113        my $bn_obj,my $des_obj,my $bf_obj,
1114        my $md5_obj,my $sha1_obj,my $cast_obj,my $rc4_obj,my $rmd160_obj,
1115        my $rc5_obj,my $dso_scheme,my $shared_target,my $shared_cflag)=
1116        split(/\s*:\s*/,$table{$target} . ":" x 22 , -1);
1117                       
1118        print <<EOF
1119
1120*** $target
1121\$cc           = $cc
1122\$cflags       = $cflags
1123\$unistd       = $unistd
1124\$thread_cflag = $thread_cflag
1125\$lflags       = $lflags
1126\$bn_ops       = $bn_ops
1127\$bn_obj       = $bn_obj
1128\$des_obj      = $des_obj
1129\$bf_obj       = $bf_obj
1130\$md5_obj      = $md5_obj
1131\$sha1_obj     = $sha1_obj
1132\$cast_obj     = $cast_obj
1133\$rc4_obj      = $rc4_obj
1134\$rmd160_obj   = $rmd160_obj
1135\$rc5_obj      = $rc5_obj
1136\$dso_scheme   = $dso_scheme
1137\$shared_target= $shared_target
1138\$shared_cflag = $shared_cflag
1139EOF
1140        }
Note: See TracBrowser for help on using the repository browser.