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