Configure revision 55714
155714Skris: 255714Skriseval 'exec perl -S $0 ${1+"$@"}' 355714Skris if $running_under_some_shell; 455714Skris## 555714Skris## Configure -- OpenSSL source tree configuration script 655714Skris## 755714Skris 855714Skrisrequire 5.000; 955714Skrisuse strict; 1055714Skris 1155714Skris# see INSTALL for instructions. 1255714Skris 1355714Skrismy $usage="Usage: Configure [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [rsaref] [no-threads] [no-asm] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] os/compiler[:flags]\n"; 1455714Skris 1555714Skris# Options: 1655714Skris# 1755714Skris# --openssldir install OpenSSL in OPENSSLDIR (Default: DIR/ssl if the 1855714Skris# --prefix option is given; /usr/local/ssl otherwise) 1955714Skris# --prefix prefix for the OpenSSL include, lib and bin directories 2055714Skris# (Default: the OPENSSLDIR directory) 2155714Skris# 2255714Skris# --install_prefix Additional prefix for package builders (empty by 2355714Skris# default). This needn't be set in advance, you can 2455714Skris# just as well use "make INSTALL_PREFIX=/whatever install". 2555714Skris# 2655714Skris# rsaref use RSAref 2755714Skris# [no-]threads [don't] try to create a library that is suitable for 2855714Skris# multithreaded applications (default is "threads" if we 2955714Skris# know how to do it) 3055714Skris# no-asm do not use assembler 3155714Skris# 386 generate 80386 code 3255714Skris# no-<cipher> build without specified algorithm (rsa, idea, rc5, ...) 3355714Skris# -<xxx> +<xxx> compiler options are passed through 3455714Skris# 3555714Skris# DES_PTR use pointer lookup vs arrays in the DES in crypto/des/des_locl.h 3655714Skris# DES_RISC1 use different DES_ENCRYPT macro that helps reduce register 3755714Skris# dependancies but needs to more registers, good for RISC CPU's 3855714Skris# DES_RISC2 A different RISC variant. 3955714Skris# DES_UNROLL unroll the inner DES loop, sometimes helps, somtimes hinders. 4055714Skris# DES_INT use 'int' instead of 'long' for DES_LONG in crypto/des/des.h 4155714Skris# This is used on the DEC Alpha where long is 8 bytes 4255714Skris# and int is 4 4355714Skris# BN_LLONG use the type 'long long' in crypto/bn/bn.h 4455714Skris# MD2_CHAR use 'char' instead of 'int' for MD2_INT in crypto/md2/md2.h 4555714Skris# MD2_LONG use 'long' instead of 'int' for MD2_INT in crypto/md2/md2.h 4655714Skris# IDEA_SHORT use 'short' instead of 'int' for IDEA_INT in crypto/idea/idea.h 4755714Skris# IDEA_LONG use 'long' instead of 'int' for IDEA_INT in crypto/idea/idea.h 4855714Skris# RC2_SHORT use 'short' instead of 'int' for RC2_INT in crypto/rc2/rc2.h 4955714Skris# RC2_LONG use 'long' instead of 'int' for RC2_INT in crypto/rc2/rc2.h 5055714Skris# RC4_CHAR use 'char' instead of 'int' for RC4_INT in crypto/rc4/rc4.h 5155714Skris# RC4_LONG use 'long' instead of 'int' for RC4_INT in crypto/rc4/rc4.h 5255714Skris# RC4_INDEX define RC4_INDEX in crypto/rc4/rc4_locl.h. This turns on 5355714Skris# array lookups instead of pointer use. 5455714Skris# BF_PTR use 'pointer arithmatic' for Blowfish (unsafe on Alpha). 5555714Skris# BF_PTR2 intel specific version (generic version is more efficient). 5655714Skris# MD5_ASM use some extra md5 assember, 5755714Skris# SHA1_ASM use some extra sha1 assember, must define L_ENDIAN for x86 5855714Skris# RMD160_ASM use some extra ripemd160 assember, 5955714Skris 6055714Skrismy $x86_gcc_des="DES_PTR DES_RISC1 DES_UNROLL"; 6155714Skris 6255714Skris# MD2_CHAR slags pentium pros 6355714Skrismy $x86_gcc_opts="RC4_INDEX MD2_INT"; 6455714Skris 6555714Skris# MODIFY THESE PARAMETERS IF YOU ARE GOING TO USE THE 'util/speed.sh SCRIPT 6655714Skris# Don't worry about these normally 6755714Skris 6855714Skrismy $tcc="cc"; 6955714Skrismy $tflags="-fast -Xa"; 7055714Skrismy $tbn_mul=""; 7155714Skrismy $tlib="-lnsl -lsocket"; 7255714Skris#$bits1="SIXTEEN_BIT "; 7355714Skris#$bits2="THIRTY_TWO_BIT "; 7455714Skrismy $bits1="THIRTY_TWO_BIT "; 7555714Skrismy $bits2="SIXTY_FOUR_BIT "; 7655714Skris 7755714Skrismy $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"; 7855714Skrismy $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"; 7955714Skrismy $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"; 8055714Skrismy $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"; 8155714Skris 8255714Skris# -DB_ENDIAN slows things down on a sparc for md5, but helps sha1. 8355714Skris# So the md5_locl.h file has an undef B_ENDIAN if sun is defined 8455714Skris 8555714Skris#config-string CC : CFLAGS : LDFLAGS : special header file mods:bn_asm \ 8655714Skris# des_asm:bf_asm 8755714Skrismy %table=( 8855714Skris#"b", "$tcc:$tflags::$tlib:$bits1:$tbn_mul::", 8955714Skris#"bl-4c-2c", "$tcc:$tflags::$tlib:${bits1}BN_LLONG RC4_CHAR MD2_CHAR:$tbn_mul::", 9055714Skris#"bl-4c-ri", "$tcc:$tflags::$tlib:${bits1}BN_LLONG RC4_CHAR RC4_INDEX:$tbn_mul::", 9155714Skris#"b2-is-ri-dp", "$tcc:$tflags::$tlib:${bits2}IDEA_SHORT RC4_INDEX DES_PTR:$tbn_mul::", 9255714Skris 9355714Skris# Our development configs 9455714Skris"purify", "purify gcc:-g -DPURIFY -Wall::(unknown):-lsocket -lnsl::::", 9555714Skris"debug", "gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -ggdb -g2 -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror::(unknown):-lefence::::", 9655714Skris"debug-ben", "gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -DPEDANTIC -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown):::::", 9755714Skris"debug-ben-debug", "gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -g3 -O2 -pedantic -Wall -Wshadow -Werror -pipe::(unknown):::::", 9855714Skris"debug-ben-strict", "gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -DCONST_STRICT -O2 -Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings -pipe::(unknown):::::", 9955714Skris"debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall::(unknown)::BN_LLONG $x86_gcc_des $x86_gcc_opts:$x86_elf_asm", 10055714Skris"debug-bodo", "gcc:-DBIO_PAIR_DEBUG -DL_ENDIAN -DREF_CHECK -DCRYPTO_MDEBUG_ALL -g -m486 -Wall::-D_REENTRANT::BN_LLONG $x86_gcc_des $x86_gcc_opts:$x86_elf_asm", 10155714Skris"dist", "cc:-O::(unknown):::::", 10255714Skris 10355714Skris# Basic configs that should work on any box 10455714Skris"gcc", "gcc:-O3::(unknown)::BN_LLONG:::", 10555714Skris"cc", "cc:-O::(unknown):::::", 10655714Skris 10755714Skris#### Solaris x86 setups 10855714Skris"solaris-x86-gcc","gcc:-O3 -fomit-frame-pointer -m486 -Wall -DL_ENDIAN::-D_REENTRANT:-lsocket -lnsl:BN_LLONG $x86_gcc_des $x86_gcc_opts:$x86_sol_asm", 10955714Skris 11055714Skris#### SPARC Solaris with GNU C setups 11155714Skris"solaris-sparcv7-gcc","gcc:-O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_UNROLL BF_PTR:::", 11255714Skris"solaris-sparcv8-gcc","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_UNROLL BF_PTR:asm/sparcv8.o::", 11355714Skris"solaris-sparcv9-gcc","gcc:-mcpu=ultrasparc -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W -DULTRASPARC::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_UNROLL BF_PTR:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o:", 11455714Skris# gcc pre-2.8 doesn't understand -mcpu=ultrasparc, so fall down to -mv8 11555714Skris# but keep the assembler modules. 11655714Skris"solaris-sparcv9-gcc27","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W -DULTRASPARC::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_UNROLL BF_PTR:asm/sparcv8plus-gcc27.o:::asm/md5-sparcv8plus-gcc27.o:", 11755714Skris#### 11855714Skris"debug-solaris-sparcv8-gcc","gcc:-DREF_CHECK -DCRYPTO_MDEBUG_ALL -O -g -mv8 -Wall -DB_ENDIAN::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_UNROLL BF_PTR:::", 11955714Skris"debug-solaris-sparcv9-gcc","gcc:-DREF_CHECK -DCRYPTO_MDEBUG_ALL -O -g -mcpu=ultrasparc -Wall -DB_ENDIAN::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_UNROLL BF_PTR:asm/sparcv8plus.o::", 12055714Skris 12155714Skris#### SPARC Solaris with Sun C setups 12255714Skris# DO NOT use /xO[34] on sparc with SC3.0. It is broken, and will not pass the tests 12355714Skris"solaris-sparc-sc3","cc:-fast -O -Xa -DB_ENDIAN::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_PTR DES_UNROLL BF_PTR:::", 12455714Skris# SC4.0 doesn't pass 'make test', upgrade to SC5.0 or SC4.2. 12555714Skris# SC4.2 is ok, better than gcc even on bn as long as you tell it -xarch=v8 12655714Skris# SC5.0 note: Compiler common patch 107357-01 or later is required! 12755714Skris"solaris-sparcv7-cc","cc:-xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_PTR DES_RISC1 DES_UNROLL BF_PTR:::", 12855714Skris"solaris-sparcv8-cc","cc:-xarch=v8 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_PTR DES_RISC1 DES_UNROLL BF_PTR:asm/sparcv8.o::", 12955714Skris"solaris-sparcv9-cc","cc:-xtarget=ultra -xarch=v8plus -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W -DULTRASPARC::-D_REENTRANT:-lsocket -lnsl:BN_LLONG RC4_CHAR DES_PTR DES_RISC1 DES_UNROLL BF_PTR:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o:", 13055714Skris"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DULTRASPARC::-D_REENTRANT:-lsocket -lnsl:SIXTY_FOUR_BIT_LONG RC4_CHAR DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::asm/md5-sparcv9.o:", 13155714Skris 13255714Skris#### SPARC Linux setups 13355714Skris"linux-sparcv7","gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::BN_LLONG RC4_CHAR DES_UNROLL BF_PTR::", 13455714Skris# Ray Miller <ray.miller@computing-services.oxford.ac.uk> has patiently 13555714Skris# assisted with debugging of following two configs. 13655714Skris"linux-sparcv8","gcc:-mv8 -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT::BN_LLONG RC4_CHAR DES_UNROLL BF_PTR:asm/sparcv8.o::::", 13755714Skris# it's a real mess with -mcpu=ultrasparc option under Linux, but 13855714Skris# -Wa,-Av8plus should do the trick no matter what. 13955714Skris"linux-sparcv9","gcc:-mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -Wa,-Av8plus -DULTRASPARC -DBN_DIV2W::-D_REENTRANT::BN_LLONG RC4_CHAR DES_UNROLL BF_PTR:asm/sparcv8plus.o:::asm/md5-sparcv8plus.o:", 14055714Skris# !!!Folowing can't be even tested yet!!! 14155714Skris# We have to wait till 64-bit glibc for SPARC is operational!!! 14255714Skris#"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 DES_UNROLL BF_PTR::::asm/md5-sparcv9.o:", 14355714Skris 14455714Skris# Sunos configs, assuming sparc for the gcc one. 14555714Skris##"sunos-cc", "cc:-O4 -DNOPROTO -DNOCONST::(unknown)::DES_UNROLL:::", 14655714Skris"sunos-gcc","gcc:-O3 -mv8::(unknown)::BN_LLONG RC4_CHAR DES_UNROLL DES_PTR DES_RISC1:::", 14755714Skris 14855714Skris#### IRIX 5.x configs 14955714Skris# -mips2 flag is added by ./config when appropriate. 15055714Skris"irix-gcc","gcc:-O3 -DTERMIOS -DB_ENDIAN::(unknown)::BN_LLONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC2 DES_PTR BF_PTR:::", 15155714Skris"irix-cc", "cc:-O2 -use_readonly_const -DTERMIOS -DB_ENDIAN::(unknown)::BN_LLONG DES_PTR DES_RISC2 DES_UNROLL BF_PTR:::", 15255714Skris#### IRIX 6.x configs 15355714Skris# Only N32 and N64 ABIs are supported. If you need O32 ABI build, invoke 15455714Skris# './Configure irix-[g]cc' manually. 15555714Skris# -mips4 flag is added by ./config when appropriate. 15655714Skris"irix-mips3-gcc","gcc:-mabi=n32 -mmips-as -O3 -DTERMIOS -DB_ENDIAN::(unknown)::MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC2 DES_PTR BF_PTR SIXTY_FOUR_BIT:asm/mips3.o::", 15755714Skris"irix-mips3-cc", "cc:-n32 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN::(unknown)::DES_PTR DES_RISC2 DES_UNROLL BF_PTR SIXTY_FOUR_BIT:asm/mips3.o::", 15855714Skris# N64 ABI builds. 15955714Skris"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -mmips-as -O3 -DTERMIOS -DB_ENDIAN::(unknown)::DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:asm/mips3.o::", 16055714Skris"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN::(unknown)::DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:asm/mips3.o::", 16155714Skris 16255714Skris# HPUX 9.X config. 16355714Skris# Don't use the bundled cc. It is broken. Use HP ANSI C if possible, or 16455714Skris# egcs. gcc 2.8.1 is also broken. 16555714Skris 16655714Skris"hpux-cc", "cc:-DB_ENDIAN -DBN_DIV2W -Ae +ESlit +O4 -z::(unknown)::BN_LLONG DES_PTR DES_UNROLL DES_RISC1:::", 16755714Skris# If hpux-cc fails (e.g. during "make test"), try the next one; otherwise, 16855714Skris# please report your OS and compiler version to the bugs@openssl.org 16955714Skris# mailing list. 17055714Skris"hpux-brokencc", "cc:-DB_ENDIAN -DBN_DIV2W -Ae +ESlit +O2 -z::(unknown)::DES_PTR DES_UNROLL DES_RISC1:::", 17155714Skris 17255714Skris"hpux-gcc", "gcc:-DB_ENDIAN -DBN_DIV2W -O3::(unknown)::BN_LLONG DES_PTR DES_UNROLL DES_RISC1:::", 17355714Skris# If hpux-gcc fails, try this one: 17455714Skris"hpux-brokengcc", "gcc:-DB_ENDIAN -DBN_DIV2W -O3::(unknown)::DES_PTR DES_UNROLL DES_RISC1:::", 17555714Skris 17655714Skris# HPUX 10.X config. Supports threads. 17755714Skris"hpux10-cc", "cc:-DB_ENDIAN -DBN_DIV2W -Ae +ESlit +O4 -z::-D_REENTRANT::BN_LLONG DES_PTR DES_UNROLL DES_RISC1:::", 17855714Skris# If hpux10-cc fails, try this one (if still fails, try deleting BN_LLONG): 17955714Skris"hpux10-brokencc", "cc:-DB_ENDIAN -DBN_DIV2W -Ae +ESlit +O2 -z::-D_REENTRANT::BN_LLONG DES_PTR DES_UNROLL DES_RISC1:::", 18055714Skris 18155714Skris"hpux10-gcc", "gcc:-DB_ENDIAN -DBN_DIV2W -O3::-D_REENTRANT::BN_LLONG DES_PTR DES_UNROLL DES_RISC1:::", 18255714Skris# If hpux10-gcc fails, try this one: 18355714Skris"hpux10-brokengcc", "gcc:-DB_ENDIAN -DBN_DIV2W -O3::-D_REENTRANT::DES_PTR DES_UNROLL DES_RISC1:::", 18455714Skris 18555714Skris# HPUX 11.X from www.globus.org. 18655714Skris# Only works on PA-RISC 2.0 cpus, and not optimized. Why? 18755714Skris"hpux11-32bit-cc","cc:+DA2.0 -DB_ENDIAN -D_HPUX_SOURCE -Aa -Ae +ESlit::-D_REENTRANT::DES_PTR DES_UNROLL DES_RISC1:::", 18855714Skris"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 :::", 18955714Skris 19055714Skris# Dec Alpha, OSF/1 - the alpha164-cc is the flags for a 21164A with 19155714Skris# the new compiler 19255714Skris# For gcc, the following gave a %50 speedup on a 164 over the 'DES_INT' version 19355714Skris"alpha-gcc","gcc:-O3::(unknown)::SIXTY_FOUR_BIT_LONG DES_UNROLL DES_RISC1:::", 19455714Skris"alpha-cc", "cc:-std1 -tune host -O4 -readonly_strings::(unknown)::SIXTY_FOUR_BIT_LONG:::", 19555714Skris"alpha164-cc", "cc:-std1 -tune host -fast -readonly_strings::(unknown)::SIXTY_FOUR_BIT_LONG:::", 19655714Skris"FreeBSD-alpha","gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown)::SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2:::", 19755714Skris 19855714Skris# assembler versions -- currently defunct: 19955714Skris##"alpha-gcc","gcc:-O3::(unknown)::SIXTY_FOUR_BIT_LONG DES_UNROLL DES_RISC1:asm/alpha.o::", 20055714Skris##"alpha-cc", "cc:-tune host -O4 -readonly_strings::(unknown)::SIXTY_FOUR_BIT_LONG:asm/alpha.o::", 20155714Skris##"alpha164-cc", "cc:-tune host -fast -readonly_strings::(unknown)::SIXTY_FOUR_BIT_LONG:asm/alpha.o::", 20255714Skris##"OpenBSD-alpha","gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown):SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2:asm/alpha.o::", 20355714Skris 20455714Skris# The intel boxes :-), It would be worth seeing if bsdi-gcc can use the 20555714Skris# bn86-elf.o file file since it is hand tweaked assembler. 20655714Skris"linux-elf", "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall::-D_REENTRANT::BN_LLONG $x86_gcc_des $x86_gcc_opts:$x86_elf_asm", 20755714Skris"debug-linux-elf","gcc:-DREF_CHECK -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -m486 -Wall::-D_REENTRANT:-lefence:BN_LLONG $x86_gcc_des $x86_gcc_opts:$x86_elf_asm", 20855714Skris"linux-aout", "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -m486 -Wall::(unknown)::BN_LLONG $x86_gcc_des $x86_gcc_opts:$x86_out_asm", 20955714Skris"linux-mips", "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::(unknown)::BN_LLONG:::", 21055714Skris"linux-ppc", "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::(unknown)::::", 21155714Skris"NetBSD-sparc", "gcc:-DTERMIOS -O3 -fomit-frame-pointer -mv8 -Wall -DB_ENDIAN::(unknown)::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL:::", 21255714Skris"NetBSD-m68", "gcc:-DTERMIOS -O3 -fomit-frame-pointer -Wall -DB_ENDIAN::(unknown)::BN_LLONG MD2_CHAR RC4_INDEX DES_UNROLL:::", 21355714Skris"NetBSD-x86", "gcc:-DTERMIOS -O3 -fomit-frame-pointer -m486 -Wall::(unknown)::BN_LLONG $x86_gcc_des $x86_gcc_opts:", 21455714Skris"FreeBSD-elf", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown)::BN_LLONG $x86_gcc_des $x86_gcc_opts:$x86_elf_asm", 21555714Skris"FreeBSD", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown)::BN_LLONG $x86_gcc_des $x86_gcc_opts:$x86_out_asm", 21655714Skris"bsdi-gcc", "gcc:-O3 -ffast-math -DL_ENDIAN -DPERL5 -m486::(unknown)::RSA_LLONG $x86_gcc_des $x86_gcc_opts:$x86_bsdi_asm", 21755714Skris"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", 21855714Skris"nextstep", "cc:-O -Wall:<libc.h>:(unknown)::BN_LLONG $x86_gcc_des ${x86_gcc_opts}:::", 21955714Skris"nextstep3.3", "cc:-O3 -Wall:<libc.h>:(unknown)::BN_LLONG $x86_gcc_des ${x86_gcc_opts}:::", 22055714Skris# NCR MP-RAS UNIX ver 02.03.01 22155714Skris"ncr-scde","cc:-O6 -Xa -Hoff=BEHAVED -686 -Hwide -Hiw::(unknown):-lsocket -lnsl:$x86_gcc_des ${x86_gcc_opts}:::", 22255714Skris 22355714Skris# UnixWare 2.0 22455714Skris"unixware-2.0","cc:-O -DFILIO_H::(unknown):-lsocket -lnsl:$x86_gcc_des ${x86_gcc_opts}:::", 22555714Skris"unixware-2.0-pentium","cc:-O -DFILIO_H -Kpentium -Kthread::(unknown):-lsocket -lnsl:MD2_CHAR RC4_INDEX ${x86_gcc_des}::", 22655714Skris 22755714Skris# IBM's AIX. 22855714Skris"aix-cc", "cc:-O -DAIX -DB_ENDIAN::(unknown)::BN_LLONG RC4_CHAR:::", 22955714Skris"aix-gcc", "gcc:-O3 -DAIX -DB_ENDIAN::(unknown)::BN_LLONG RC4_CHAR:::", 23055714Skris 23155714Skris# 23255714Skris# Cray T90 (SDSC) 23355714Skris# It's Big-endian, but the algorithms work properly when B_ENDIAN is NOT 23455714Skris# defined. The T90 ints and longs are 8 bytes long, and apparently the 23555714Skris# B_ENDIAN code assumes 4 byte ints. Fortunately, the non-B_ENDIAN and 23655714Skris# non L_ENDIAN code aligns the bytes in each word correctly. 23755714Skris# 23855714Skris# The BIT_FIELD_LIMITS define is to avoid two fatal compiler errors: 23955714Skris#'Taking the address of a bit field is not allowed. ' 24055714Skris#'An expression with bit field exists as the operand of "sizeof" ' 24155714Skris# (written by Wayne Schroeder <schroede@SDSC.EDU>) 24255714Skris"cray-t90-cc", "cc: -DBIT_FIELD_LIMITS -DTERMIOS::(unknown)::SIXTY_FOUR_BIT_LONG DES_INT:::", 24355714Skris 24455714Skris# 24555714Skris# Cray T3E (Research Center Juelich, beckman@acl.lanl.gov) 24655714Skris# 24755714Skris# The BIT_FIELD_LIMITS define was written for the C90 (it seems). I added 24855714Skris# another use. Basically, the problem is that the T3E uses some bit fields 24955714Skris# for some st_addr stuff, and then sizeof and address-of fails 25055714Skris# I could not use the ams/alpha.o option because the Cray assembler, 'cam' 25155714Skris# did not like it. 25255714Skris"cray-t3e", "cc: -DBIT_FIELD_LIMITS -DTERMIOS::(unknown)::SIXTY_FOUR_BIT_LONG DES_INT:::", 25355714Skris 25455714Skris# DGUX, 88100. 25555714Skris"dgux-R3-gcc", "gcc:-O3 -fomit-frame-pointer::(unknown)::RC4_INDEX DES_UNROLL:::", 25655714Skris"dgux-R4-gcc", "gcc:-O3 -fomit-frame-pointer::(unknown):-lnsl -lsocket:RC4_INDEX:RC4_INDEX DES_UNROLL:::", 25755714Skris"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", 25855714Skris 25955714Skris# SCO 5 - Ben Laurie <ben@algroup.co.uk> says the -O breaks the 26055714Skris# SCO cc. 26155714Skris"sco5-cc", "cc:::(unknown):-lsocket:$x86_gcc_des ${x86_gcc_opts}:::", # des options? 26255714Skris"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 ... 26355714Skris 26455714Skris# Sinix/ReliantUNIX RM400 26555714Skris# NOTE: The CDS++ Compiler up to V2.0Bsomething has the IRIX_CC_BUG optimizer problem. Better use -g */ 26655714Skris"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:::", 26755714Skris"SINIX","cc:-O -DSNI::(unknown):-lsocket -lnsl -lc -L/usr/ucblib -lucb:RC4_INDEX RC4_CHAR:::", 26855714Skris"SINIX-N","/usr/ucb/cc:-O2 -misaligned::(unknown):-lucb:RC4_INDEX RC4_CHAR:::", 26955714Skris 27055714Skris# SIEMENS BS2000/OSD: an EBCDIC-based mainframe 27155714Skris"BS2000-OSD","c89:-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:::", 27255714Skris 27355714Skris# Windows NT, Microsoft Visual C++ 4.0 27455714Skris 27555714Skris"VC-NT","cl:::::BN_LLONG RC4_INDEX ${x86_gcc_opts}:::", 27655714Skris"VC-WIN32","cl:::::BN_LLONG RC4_INDEX ${x86_gcc_opts}:::", 27755714Skris"VC-WIN16","cl:::(unknown)::MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX THIRTY_TWO_BIT:::", 27855714Skris"VC-W31-16","cl:::(unknown)::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT:::", 27955714Skris"VC-W31-32","cl:::::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX THIRTY_TWO_BIT:::", 28055714Skris"VC-MSDOS","cl:::(unknown)::BN_LLONG MD2_CHAR DES_UNROLL DES_PTR RC4_INDEX SIXTEEN_BIT:::", 28155714Skris 28255714Skris# Borland C++ 4.5 28355714Skris"BC-32","bcc32:::::BN_LLONG DES_PTR RC4_INDEX:::", 28455714Skris"BC-16","bcc:::(unknown)::BN_LLONG DES_PTR RC4_INDEX SIXTEEN_BIT:::", 28555714Skris 28655714Skris# CygWin32 28755714Skris# (Note: the real CFLAGS for Windows builds are defined by util/mk1mf.pl 28855714Skris# and its library files in util/pl/*) 28955714Skris"CygWin32", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::::BN_LLONG $x86_gcc_des $x86_gcc_opts:", 29055714Skris"Mingw32", "gcc:-DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::::BN_LLONG $x86_gcc_des $x86_gcc_opts:", 29155714Skris 29255714Skris# Ultrix from Bernhard Simon <simon@zid.tuwien.ac.at> 29355714Skris"ultrix-cc","cc:-std1 -O -Olimit 1000 -DL_ENDIAN::(unknown)::::::", 29455714Skris"ultrix-gcc","gcc:-O3 -DL_ENDIAN::(unknown)::::::", 29555714Skris# K&R C is no longer supported; you need gcc on old Ultrix installations 29655714Skris##"ultrix","cc:-O2 -DNOPROTO -DNOCONST -DL_ENDIAN::(unknown)::::::", 29755714Skris 29855714Skris# Some OpenBSD from Bob Beck <beck@obtuse.com> 29955714Skris"OpenBSD-alpha","gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown)::SIXTY_FOUR_BIT_LONG DES_INT DES_PTR DES_RISC2:::", 30055714Skris"OpenBSD-x86", "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -m486::(unknown)::BN_LLONG $x86_gcc_des $x86_gcc_opts:$x86_out_asm", 30155714Skris"OpenBSD", "gcc:-DTERMIOS -O3 -fomit-frame-pointer::(unknown)::BN_LLONG RC2_CHAR RC4_INDEX DES_UNROLL:::", 30255714Skris"OpenBSD-mips","gcc:-O2 -DL_ENDIAN::(unknown):BN_LLONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC2 DES_PTR BF_PTR::::", 30355714Skris 30455714Skris); 30555714Skris 30655714Skrismy @WinTargets=qw(VC-NT VC-WIN32 VC-WIN16 VC-W31-16 VC-W31-32 VC-MSDOS BC-32 30755714Skris BC-16 CygWin32 Mingw32); 30855714Skris 30955714Skrismy $prefix=""; 31055714Skrismy $openssldir=""; 31155714Skrismy $install_prefix=""; 31255714Skrismy $no_threads=0; 31355714Skrismy $threads=0; 31455714Skrismy $no_asm=0; 31555714Skrismy @skip=(); 31655714Skrismy $Makefile="Makefile.ssl"; 31755714Skrismy $des_locl="crypto/des/des_locl.h"; 31855714Skrismy $des ="crypto/des/des.h"; 31955714Skrismy $bn ="crypto/bn/bn.h"; 32055714Skrismy $md2 ="crypto/md2/md2.h"; 32155714Skrismy $rc4 ="crypto/rc4/rc4.h"; 32255714Skrismy $rc4_locl="crypto/rc4/rc4_locl.h"; 32355714Skrismy $idea ="crypto/idea/idea.h"; 32455714Skrismy $rc2 ="crypto/rc2/rc2.h"; 32555714Skrismy $bf ="crypto/bf/bf_locl.h"; 32655714Skrismy $bn_asm ="bn_asm.o"; 32755714Skrismy $des_enc="des_enc.o fcrypt_b.o"; 32855714Skrismy $bf_enc ="bf_enc.o"; 32955714Skrismy $cast_enc="c_enc.o"; 33055714Skrismy $rc4_enc="rc4_enc.o"; 33155714Skrismy $rc5_enc="rc5_enc.o"; 33255714Skrismy $md5_obj=""; 33355714Skrismy $sha1_obj=""; 33455714Skrismy $rmd160_obj=""; 33555714Skrismy $processor=""; 33655714Skrismy $ranlib; 33755714Skrismy $perl; 33855714Skris 33955714Skris$ranlib=&which("ranlib") or $ranlib="true"; 34055714Skris$perl=&which("perl5") or $perl=&which("perl") or $perl="perl"; 34155714Skris 34255714Skris&usage if ($#ARGV < 0); 34355714Skris 34455714Skrismy $flags=""; 34555714Skrismy $depflags=""; 34655714Skrismy $libs=""; 34755714Skrismy $target=""; 34855714Skrismy $options=""; 34955714Skrisforeach (@ARGV) 35055714Skris { 35155714Skris if (/^no-asm$/) 35255714Skris { 35355714Skris $no_asm=1; 35455714Skris $flags .= "-DNO_ASM "; 35555714Skris } 35655714Skris elsif (/^no-threads$/) 35755714Skris { $no_threads=1; } 35855714Skris elsif (/^threads$/) 35955714Skris { $threads=1; } 36055714Skris elsif (/^no-(.+)$/) 36155714Skris { 36255714Skris my $algo=$1; 36355714Skris push @skip,$algo; 36455714Skris $algo =~ tr/[a-z]/[A-Z]/; 36555714Skris $flags .= "-DNO_$algo "; 36655714Skris $depflags .= "-DNO_$algo "; 36755714Skris if ($algo eq "DES") 36855714Skris { 36955714Skris $options .= " no-mdc2"; 37055714Skris $flags .= "-DNO_MDC2 "; 37155714Skris $depflags .= "-DNO_MDC2 "; 37255714Skris } 37355714Skris } 37455714Skris elsif (/^386$/) 37555714Skris { $processor=386; } 37655714Skris elsif (/^rsaref$/) 37755714Skris { 37855714Skris $libs.= "-lRSAglue -lrsaref "; 37955714Skris $flags.= "-DRSAref "; 38055714Skris } 38155714Skris elsif (/^[-+]/) 38255714Skris { 38355714Skris if (/^-[lL](.*)$/) 38455714Skris { 38555714Skris $libs.=$_." "; 38655714Skris } 38755714Skris elsif (/^-[^-]/ or /^\+/) 38855714Skris { 38955714Skris $flags.=$_." "; 39055714Skris } 39155714Skris elsif (/^--prefix=(.*)$/) 39255714Skris { 39355714Skris $prefix=$1; 39455714Skris } 39555714Skris elsif (/^--openssldir=(.*)$/) 39655714Skris { 39755714Skris $openssldir=$1; 39855714Skris } 39955714Skris elsif (/^--install.prefix=(.*)$/) 40055714Skris { 40155714Skris $install_prefix=$1; 40255714Skris } 40355714Skris else 40455714Skris { 40555714Skris print STDERR $usage; 40655714Skris exit(1); 40755714Skris } 40855714Skris } 40955714Skris elsif ($_ =~ /^([^:]+):(.+)$/) 41055714Skris { 41155714Skris eval "\$table{\$1} = \"$2\""; # allow $xxx constructs in the string 41255714Skris $target=$1; 41355714Skris } 41455714Skris else 41555714Skris { 41655714Skris die "target already defined - $target\n" if ($target ne ""); 41755714Skris $target=$_; 41855714Skris } 41955714Skris unless ($_ eq $target) { 42055714Skris if ($options eq "") { 42155714Skris $options = $_; 42255714Skris } else { 42355714Skris $options .= " ".$_; 42455714Skris } 42555714Skris } 42655714Skris} 42755714Skris 42855714Skrisif ($target eq "TABLE") { 42955714Skris foreach $target (sort keys %table) { 43055714Skris print_table_entry($target); 43155714Skris } 43255714Skris exit 0; 43355714Skris} 43455714Skris 43555714Skris&usage if (!defined($table{$target})); 43655714Skris 43755714Skrismy $IsWindows=scalar grep /^$target$/,@WinTargets; 43855714Skris 43955714Skris$openssldir="/usr/local/ssl" if ($openssldir eq "" and $prefix eq ""); 44055714Skris$prefix=$openssldir if $prefix eq ""; 44155714Skris 44255714Skrischop $openssldir if $openssldir =~ /\/$/; 44355714Skrischop $prefix if $prefix =~ /\/$/; 44455714Skris 44555714Skris$openssldir=$prefix . "/ssl" if $openssldir eq ""; 44655714Skris$openssldir=$prefix . "/" . $openssldir if $openssldir !~ /^\//; 44755714Skris 44855714Skris 44955714Skrisprint "IsWindows=$IsWindows\n"; 45055714Skris 45155714Skris(my $cc,my $cflags,my $unistd,my $thread_cflag,my $lflags,my $bn_ops,my $bn_obj,my $des_obj,my $bf_obj, 45255714Skris $md5_obj,$sha1_obj,my $cast_obj,my $rc4_obj,$rmd160_obj,my $rc5_obj)= 45355714Skris split(/\s*:\s*/,$table{$target} . ":" x 20 , -1); 45455714Skris$cflags="$flags$cflags" if ($flags ne ""); 45555714Skris 45655714Skrismy $thread_cflags; 45755714Skrisif ($thread_cflag ne "(unknown)" && !$no_threads) 45855714Skris { 45955714Skris # If we know how to do it, support threads by default. 46055714Skris $threads = 1; 46155714Skris } 46255714Skrisif ($thread_cflag eq "(unknown)") 46355714Skris { 46455714Skris # If the user asked for "threads", hopefully they also provided 46555714Skris # any system-dependent compiler options that are necessary. 46655714Skris $thread_cflags="-DTHREADS $cflags" 46755714Skris } 46855714Skriselse 46955714Skris { 47055714Skris $thread_cflags="-DTHREADS $thread_cflag $cflags" 47155714Skris } 47255714Skris 47355714Skris$lflags="$libs$lflags"if ($libs ne ""); 47455714Skris 47555714Skrisif ($no_asm) 47655714Skris { 47755714Skris $bn_obj=$des_obj=$bf_obj=$cast_obj=$rc4_obj=$rc5_obj=""; 47855714Skris $sha1_obj=$md5_obj=$rmd160_obj=""; 47955714Skris } 48055714Skris 48155714Skrisif ($threads) 48255714Skris { 48355714Skris $cflags=$thread_cflags; 48455714Skris } 48555714Skris 48655714Skris#my ($bn1)=split(/\s+/,$bn_obj); 48755714Skris#$bn1 = "" unless defined $bn1; 48855714Skris#$bn1=$bn_asm unless ($bn1 =~ /\.o$/); 48955714Skris#$bn_obj="$bn1"; 49055714Skris 49155714Skris$bn_obj = $bn_asm unless $bn_obj ne ""; 49255714Skris 49355714Skris$des_obj=$des_enc unless ($des_obj =~ /\.o$/); 49455714Skris$bf_obj=$bf_enc unless ($bf_obj =~ /\.o$/); 49555714Skris$cast_obj=$cast_enc unless ($cast_obj =~ /\.o$/); 49655714Skris$rc4_obj=$rc4_enc unless ($rc4_obj =~ /\.o$/); 49755714Skris$rc5_obj=$rc5_enc unless ($rc5_obj =~ /\.o$/); 49855714Skrisif ($sha1_obj =~ /\.o$/) 49955714Skris { 50055714Skris# $sha1_obj=$sha1_enc; 50155714Skris $cflags.=" -DSHA1_ASM"; 50255714Skris } 50355714Skrisif ($md5_obj =~ /\.o$/) 50455714Skris { 50555714Skris# $md5_obj=$md5_enc; 50655714Skris $cflags.=" -DMD5_ASM"; 50755714Skris } 50855714Skrisif ($rmd160_obj =~ /\.o$/) 50955714Skris { 51055714Skris# $rmd160_obj=$rmd160_enc; 51155714Skris $cflags.=" -DRMD160_ASM"; 51255714Skris } 51355714Skris 51455714Skrismy $version = "unknown"; 51555714Skrismy $major = "unknown"; 51655714Skrismy $minor = "unknown"; 51755714Skris 51855714Skrisopen(IN,'<crypto/opensslv.h') || die "unable to read opensslv.h:$!\n"; 51955714Skriswhile (<IN>) 52055714Skris { 52155714Skris $version=$1 if /OPENSSL.VERSION.TEXT.*OpenSSL (\S+) /; 52255714Skris } 52355714Skrisclose(IN); 52455714Skris 52555714Skrisif ($version =~ /(^[0-9]*)\.([0-9\.]*)/) 52655714Skris { 52755714Skris $major=$1; 52855714Skris $minor=$2; 52955714Skris } 53055714Skris 53155714Skrisopen(IN,'<Makefile.org') || die "unable to read Makefile.org:$!\n"; 53255714Skrisopen(OUT,">$Makefile") || die "unable to create $Makefile:$!\n"; 53355714Skrismy $sdirs=0; 53455714Skriswhile (<IN>) 53555714Skris { 53655714Skris chop; 53755714Skris $sdirs = 1 if /^SDIRS=/; 53855714Skris if ($sdirs) { 53955714Skris my $dir; 54055714Skris foreach $dir (@skip) { 54155714Skris s/$dir//; 54255714Skris } 54355714Skris } 54455714Skris $sdirs = 0 unless /\\$/; 54555714Skris s/^VERSION=.*/VERSION=$version/; 54655714Skris s/^MAJOR=.*/MAJOR=$major/; 54755714Skris s/^MINOR=.*/MINOR=$minor/; 54855714Skris s/^INSTALLTOP=.*$/INSTALLTOP=$prefix/; 54955714Skris s/^OPENSSLDIR=.*$/OPENSSLDIR=$openssldir/; 55055714Skris s/^INSTALL_PREFIX=.*$/INSTALL_PREFIX=$install_prefix/; 55155714Skris s/^PLATFORM=.*$/PLATFORM=$target/; 55255714Skris s/^OPTIONS=.*$/OPTIONS=$options/; 55355714Skris s/^CC=.*$/CC= $cc/; 55455714Skris s/^CFLAG=.*$/CFLAG= $cflags/; 55555714Skris s/^DEPFLAG=.*$/DEPFLAG= $depflags/; 55655714Skris s/^EX_LIBS=.*$/EX_LIBS= $lflags/; 55755714Skris s/^BN_ASM=.*$/BN_ASM= $bn_obj/; 55855714Skris s/^DES_ENC=.*$/DES_ENC= $des_obj/; 55955714Skris s/^BF_ENC=.*$/BF_ENC= $bf_obj/; 56055714Skris s/^CAST_ENC=.*$/CAST_ENC= $cast_obj/; 56155714Skris s/^RC4_ENC=.*$/RC4_ENC= $rc4_obj/; 56255714Skris s/^RC5_ENC=.*$/RC5_ENC= $rc5_obj/; 56355714Skris s/^MD5_ASM_OBJ=.*$/MD5_ASM_OBJ= $md5_obj/; 56455714Skris s/^SHA1_ASM_OBJ=.*$/SHA1_ASM_OBJ= $sha1_obj/; 56555714Skris s/^RMD160_ASM_OBJ=.*$/RMD160_ASM_OBJ= $rmd160_obj/; 56655714Skris s/^PROCESSOR=.*/PROCESSOR= $processor/; 56755714Skris s/^RANLIB=.*/RANLIB= $ranlib/; 56855714Skris s/^PERL=.*/PERL= $perl/; 56955714Skris print OUT $_."\n"; 57055714Skris } 57155714Skrisclose(IN); 57255714Skrisclose(OUT); 57355714Skris 57455714Skrisprint "CC =$cc\n"; 57555714Skrisprint "CFLAG =$cflags\n"; 57655714Skrisprint "EX_LIBS =$lflags\n"; 57755714Skrisprint "BN_ASM =$bn_obj\n"; 57855714Skrisprint "DES_ENC =$des_obj\n"; 57955714Skrisprint "BF_ENC =$bf_obj\n"; 58055714Skrisprint "CAST_ENC =$cast_obj\n"; 58155714Skrisprint "RC4_ENC =$rc4_obj\n"; 58255714Skrisprint "RC5_ENC =$rc5_obj\n"; 58355714Skrisprint "MD5_OBJ_ASM =$md5_obj\n"; 58455714Skrisprint "SHA1_OBJ_ASM =$sha1_obj\n"; 58555714Skrisprint "RMD160_OBJ_ASM=$rmd160_obj\n"; 58655714Skrisprint "PROCESSOR =$processor\n"; 58755714Skrisprint "RANLIB =$ranlib\n"; 58855714Skrisprint "PERL =$perl\n"; 58955714Skris 59055714Skrismy $des_ptr=0; 59155714Skrismy $des_risc1=0; 59255714Skrismy $des_risc2=0; 59355714Skrismy $des_unroll=0; 59455714Skrismy $bn_ll=0; 59555714Skrismy $def_int=2; 59655714Skrismy $rc4_int=$def_int; 59755714Skrismy $md2_int=$def_int; 59855714Skrismy $idea_int=$def_int; 59955714Skrismy $rc2_int=$def_int; 60055714Skrismy $rc4_idx=0; 60155714Skrismy $bf_ptr=0; 60255714Skrismy @type=("char","short","int","long"); 60355714Skrismy ($b64l,$b64,$b32,$b16,$b8)=(0,0,1,0,0); 60455714Skris 60555714Skrismy $des_int; 60655714Skris 60755714Skrisforeach (sort split(/\s+/,$bn_ops)) 60855714Skris { 60955714Skris $des_ptr=1 if /DES_PTR/; 61055714Skris $des_risc1=1 if /DES_RISC1/; 61155714Skris $des_risc2=1 if /DES_RISC2/; 61255714Skris $des_unroll=1 if /DES_UNROLL/; 61355714Skris $des_int=1 if /DES_INT/; 61455714Skris $bn_ll=1 if /BN_LLONG/; 61555714Skris $rc4_int=0 if /RC4_CHAR/; 61655714Skris $rc4_int=3 if /RC4_LONG/; 61755714Skris $rc4_idx=1 if /RC4_INDEX/; 61855714Skris $md2_int=0 if /MD2_CHAR/; 61955714Skris $md2_int=3 if /MD2_LONG/; 62055714Skris $idea_int=1 if /IDEA_SHORT/; 62155714Skris $idea_int=3 if /IDEA_LONG/; 62255714Skris $rc2_int=1 if /RC2_SHORT/; 62355714Skris $rc2_int=3 if /RC2_LONG/; 62455714Skris $bf_ptr=1 if $_ eq "BF_PTR"; 62555714Skris $bf_ptr=2 if $_ eq "BF_PTR2"; 62655714Skris ($b64l,$b64,$b32,$b16,$b8)=(0,1,0,0,0) if /SIXTY_FOUR_BIT/; 62755714Skris ($b64l,$b64,$b32,$b16,$b8)=(1,0,0,0,0) if /SIXTY_FOUR_BIT_LONG/; 62855714Skris ($b64l,$b64,$b32,$b16,$b8)=(0,0,1,0,0) if /THIRTY_TWO_BIT/; 62955714Skris ($b64l,$b64,$b32,$b16,$b8)=(0,0,0,1,0) if /SIXTEEN_BIT/; 63055714Skris ($b64l,$b64,$b32,$b16,$b8)=(0,0,0,0,1) if /EIGHT_BIT/; 63155714Skris } 63255714Skris 63355714Skrisopen(IN,'<crypto/opensslconf.h.in') || die "unable to read crypto/opensslconf.h.in:$!\n"; 63455714Skrisopen(OUT,'>crypto/opensslconf.h') || die "unable to create crypto/opensslconf.h:$!\n"; 63555714Skriswhile (<IN>) 63655714Skris { 63755714Skris if (/^#define\s+OPENSSLDIR/) 63855714Skris { print OUT "#define OPENSSLDIR \"$openssldir\"\n"; } 63955714Skris elsif (/^#define\s+OPENSSL_UNISTD/) 64055714Skris { 64155714Skris $unistd = "<unistd.h>" if $unistd eq ""; 64255714Skris print OUT "#define OPENSSL_UNISTD $unistd\n"; 64355714Skris } 64455714Skris elsif (/^#((define)|(undef))\s+SIXTY_FOUR_BIT_LONG/) 64555714Skris { printf OUT "#%s SIXTY_FOUR_BIT_LONG\n",($b64l)?"define":"undef"; } 64655714Skris elsif (/^#((define)|(undef))\s+SIXTY_FOUR_BIT/) 64755714Skris { printf OUT "#%s SIXTY_FOUR_BIT\n",($b64)?"define":"undef"; } 64855714Skris elsif (/^#((define)|(undef))\s+THIRTY_TWO_BIT/) 64955714Skris { printf OUT "#%s THIRTY_TWO_BIT\n",($b32)?"define":"undef"; } 65055714Skris elsif (/^#((define)|(undef))\s+SIXTEEN_BIT/) 65155714Skris { printf OUT "#%s SIXTEEN_BIT\n",($b16)?"define":"undef"; } 65255714Skris elsif (/^#((define)|(undef))\s+EIGHT_BIT/) 65355714Skris { printf OUT "#%s EIGHT_BIT\n",($b8)?"define":"undef"; } 65455714Skris elsif (/^#((define)|(undef))\s+BN_LLONG\s*$/) 65555714Skris { printf OUT "#%s BN_LLONG\n",($bn_ll)?"define":"undef"; } 65655714Skris elsif (/^\#define\s+DES_LONG\s+.*/) 65755714Skris { printf OUT "#define DES_LONG unsigned %s\n", 65855714Skris ($des_int)?'int':'long'; } 65955714Skris elsif (/^\#(define|undef)\s+DES_PTR/) 66055714Skris { printf OUT "#%s DES_PTR\n",($des_ptr)?'define':'undef'; } 66155714Skris elsif (/^\#(define|undef)\s+DES_RISC1/) 66255714Skris { printf OUT "#%s DES_RISC1\n",($des_risc1)?'define':'undef'; } 66355714Skris elsif (/^\#(define|undef)\s+DES_RISC2/) 66455714Skris { printf OUT "#%s DES_RISC2\n",($des_risc2)?'define':'undef'; } 66555714Skris elsif (/^\#(define|undef)\s+DES_UNROLL/) 66655714Skris { printf OUT "#%s DES_UNROLL\n",($des_unroll)?'define':'undef'; } 66755714Skris elsif (/^#define\s+RC4_INT\s/) 66855714Skris { printf OUT "#define RC4_INT unsigned %s\n",$type[$rc4_int]; } 66955714Skris elsif (/^#((define)|(undef))\s+RC4_INDEX/) 67055714Skris { printf OUT "#%s RC4_INDEX\n",($rc4_idx)?"define":"undef"; } 67155714Skris elsif (/^#(define|undef)\s+I386_ONLY/) 67255714Skris { printf OUT "#%s I386_ONLY\n", ($processor == 386)? 67355714Skris "define":"undef"; } 67455714Skris elsif (/^#define\s+MD2_INT\s/) 67555714Skris { printf OUT "#define MD2_INT unsigned %s\n",$type[$md2_int]; } 67655714Skris elsif (/^#define\s+IDEA_INT\s/) 67755714Skris {printf OUT "#define IDEA_INT unsigned %s\n",$type[$idea_int];} 67855714Skris elsif (/^#define\s+RC2_INT\s/) 67955714Skris {printf OUT "#define RC2_INT unsigned %s\n",$type[$rc2_int];} 68055714Skris elsif (/^#(define|undef)\s+BF_PTR/) 68155714Skris { 68255714Skris printf OUT "#undef BF_PTR\n" if $bf_ptr == 0; 68355714Skris printf OUT "#define BF_PTR\n" if $bf_ptr == 1; 68455714Skris printf OUT "#define BF_PTR2\n" if $bf_ptr == 2; 68555714Skris } 68655714Skris else 68755714Skris { print OUT $_; } 68855714Skris } 68955714Skrisclose(IN); 69055714Skrisclose(OUT); 69155714Skris 69255714Skris 69355714Skris# Fix the date 69455714Skris 69555714Skrisprint "SIXTY_FOUR_BIT_LONG mode\n" if $b64l; 69655714Skrisprint "SIXTY_FOUR_BIT mode\n" if $b64; 69755714Skrisprint "THIRTY_TWO_BIT mode\n" if $b32; 69855714Skrisprint "SIXTEEN_BIT mode\n" if $b16; 69955714Skrisprint "EIGHT_BIT mode\n" if $b8; 70055714Skrisprint "DES_PTR used\n" if $des_ptr; 70155714Skrisprint "DES_RISC1 used\n" if $des_risc1; 70255714Skrisprint "DES_RISC2 used\n" if $des_risc2; 70355714Skrisprint "DES_UNROLL used\n" if $des_unroll; 70455714Skrisprint "DES_INT used\n" if $des_int; 70555714Skrisprint "BN_LLONG mode\n" if $bn_ll; 70655714Skrisprint "RC4 uses u$type[$rc4_int]\n" if $rc4_int != $def_int; 70755714Skrisprint "RC4_INDEX mode\n" if $rc4_idx; 70855714Skrisprint "MD2 uses u$type[$md2_int]\n" if $md2_int != $def_int; 70955714Skrisprint "IDEA uses u$type[$idea_int]\n" if $idea_int != $def_int; 71055714Skrisprint "RC2 uses u$type[$rc2_int]\n" if $rc2_int != $def_int; 71155714Skrisprint "BF_PTR used\n" if $bf_ptr == 1; 71255714Skrisprint "BF_PTR2 used\n" if $bf_ptr == 2; 71355714Skris 71455714Skrisif($IsWindows) { 71555714Skris open (OUT,">crypto/buildinf.h") || die "Can't open buildinf.h"; 71655714Skris printf OUT <<EOF; 71755714Skris#ifndef MK1MF_BUILD 71855714Skris /* auto-generated by Configure for crypto/cversion.c: 71955714Skris * for Unix builds, crypto/Makefile.ssl generates functional definitions; 72055714Skris * Windows builds (and other mk1mf builds) compile cversion.c with 72155714Skris * -DMK1MF_BUILD and use definitions added to this file by util/mk1mf.pl. */ 72255714Skris #error "Windows builds (PLATFORM=$target) use mk1mf.pl-created Makefiles" 72355714Skris#endif 72455714SkrisEOF 72555714Skris close(OUT); 72655714Skris 72755714Skris system "perl crypto/objects/obj_dat.pl <crypto\\objects\\objects.h >crypto\\objects\\obj_dat.h"; 72855714Skris} else { 72955714Skris (system "make -f Makefile.ssl PERL=\'$perl\' links") == 0 or exit $?; 73055714Skris ### (system 'make depend') == 0 or exit $? if $depflags ne ""; 73155714Skris # Run "make depend" manually if you want to be able to delete 73255714Skris # the source code files of ciphers you left out. 73355714Skris &dofile("tools/c_rehash",$openssldir,'^DIR=', 'DIR=%s',); 73455714Skris if ( $perl =~ m@^/@) { 73555714Skris &dofile("apps/der_chop",$perl,'^#!/', '#!%s'); 73655714Skris } else { 73755714Skris # No path for Perl known ... 73855714Skris &dofile("apps/der_chop",'/usr/local/bin/perl','^#!/', '#!%s'); 73955714Skris } 74055714Skris} 74155714Skris 74255714Skrismy $pwd; 74355714Skris 74455714Skrisif($IsWindows) { 74555714Skris $pwd="(current directory)"; 74655714Skris} else { 74755714Skris $pwd =`pwd`; 74855714Skris chop($pwd); 74955714Skris} 75055714Skrisprint <<EOF; 75155714Skris 75255714SkrisNOTE: The OpenSSL header files have been moved from include/*.h 75355714Skristo include/openssl/*.h. To include OpenSSL header files, now 75455714Skrisdirectives of the form 75555714Skris #include <openssl/foo.h> 75655714Skrisshould be used instead of #include <foo.h>. 75755714SkrisThese new file locations allow installing the OpenSSL header 75855714Skrisfiles in /usr/local/include/openssl/ and should help avoid 75955714Skrisconflicts with other libraries. 76055714Skris 76155714SkrisTo compile programs that use the old form <foo.h>, 76255714Skrisusually an additional compiler option will suffice: E.g., add 76355714Skris -I$prefix/include/openssl 76455714Skrisor 76555714Skris -I$pwd/include/openssl 76655714Skristo the CFLAGS in the Makefile of the program that you want to compile 76755714Skris(and leave all the original -I...'s in place!). 76855714Skris 76955714SkrisPlease make sure that no old OpenSSL header files are around: 77055714SkrisThe include directory should now be empty except for the openssl 77155714Skrissubdirectory. 77255714Skris 77355714SkrisEOF 77455714Skris 77555714Skrisprint <<\EOF if (!$no_threads && !$threads); 77655714Skris 77755714SkrisThe library could not be configured for supporting multi-threaded 77855714Skrisapplications as the compiler options required on this system are not known. 77955714SkrisSee file INSTALL for details if you need multi-threading. 78055714Skris 78155714SkrisEOF 78255714Skris 78355714Skrisexit(0); 78455714Skris 78555714Skrissub usage 78655714Skris { 78755714Skris print STDERR $usage; 78855714Skris print STDERR "pick os/compiler from:"; 78955714Skris my $j=0; 79055714Skris my $i; 79155714Skris foreach $i (sort keys %table) 79255714Skris { 79355714Skris next if $i =~ /^debug/; 79455714Skris print STDERR "\n" if ($j++ % 4) == 0; 79555714Skris printf(STDERR "%-18s ",$i); 79655714Skris } 79755714Skris foreach $i (sort keys %table) 79855714Skris { 79955714Skris next if $i !~ /^debug/; 80055714Skris print STDERR "\n" if ($j++ % 4) == 0; 80155714Skris printf(STDERR "%-18s ",$i); 80255714Skris } 80355714Skris print STDERR "\n"; 80455714Skris exit(1); 80555714Skris } 80655714Skris 80755714Skrissub which 80855714Skris { 80955714Skris my($name)=@_; 81055714Skris my $path; 81155714Skris foreach $path (split /:/, $ENV{PATH}) 81255714Skris { 81355714Skris if (-f "$path/$name" and -x _) 81455714Skris { 81555714Skris return "$path/$name" unless ($name eq "perl" and 81655714Skris system("$path/$name -e " . '\'exit($]<5.0);\'')); 81755714Skris } 81855714Skris } 81955714Skris } 82055714Skris 82155714Skrissub dofile 82255714Skris { 82355714Skris my $f; my $p; my %m; my @a; my $k; my $ff; 82455714Skris ($f,$p,%m)=@_; 82555714Skris 82655714Skris open(IN,"<$f.in") || open(IN,"<$f") || die "unable to open $f:$!\n"; 82755714Skris @a=<IN>; 82855714Skris close(IN); 82955714Skris foreach $k (keys %m) 83055714Skris { 83155714Skris grep(/$k/ && ($_=sprintf($m{$k}."\n",$p)),@a); 83255714Skris } 83355714Skris ($ff=$f) =~ s/\..*$//; 83455714Skris open(OUT,">$ff.new") || die "unable to open $f:$!\n"; 83555714Skris print OUT @a; 83655714Skris close(OUT); 83755714Skris rename($f,"$ff.bak") || die "unable to rename $f\n" if -e $f; 83855714Skris rename("$ff.new",$f) || die "unable to rename $ff.new\n"; 83955714Skris } 84055714Skris 84155714Skrissub print_table_entry 84255714Skris { 84355714Skris my $target = shift; 84455714Skris 84555714Skris (my $cc,my $cflags,my $unistd,my $thread_cflag,my $lflags,my $bn_ops, 84655714Skris my $bn_obj,my $des_obj,my $bf_obj, 84755714Skris $md5_obj,$sha1_obj,my $cast_obj,my $rc4_obj,$rmd160_obj,my $rc5_obj)= 84855714Skris split(/\s*:\s*/,$table{$target} . ":" x 20 , -1); 84955714Skris 85055714Skris print <<EOF 85155714Skris 85255714Skris*** $target 85355714Skris\$cc = $cc 85455714Skris\$cflags = $cflags 85555714Skris\$unistd = $unistd 85655714Skris\$thread_cflag = $thread_cflag 85755714Skris\$lflags = $lflags 85855714Skris\$bn_ops = $bn_ops 85955714Skris\$bn_obj = $bn_obj 86055714Skris\$des_obj = $des_obj 86155714Skris\$bf_obj = $bf_obj 86255714Skris\$md5_obj = $md5_obj 86355714Skris\$sha1_obj = $sha1_obj 86455714Skris\$cast_obj = $cast_obj 86555714Skris\$rc4_obj = $rc4_obj 86655714Skris\$rmd160_obj = $rmd160_obj 86755714Skris\$rc5_obj = $rc5_obj 86855714SkrisEOF 86955714Skris } 870