blob: 80b4555d08116f96a1ae7097dd8d6b707033ecc3 [file] [log] [blame]
Ralf S. Engelschalla4ed5531999-02-25 08:48:52 +00001:
Ben Laurie4f9b3061999-02-25 09:43:26 +00002eval 'exec perl -S $0 ${1+"$@"}'
Ralf S. Engelschalla4ed5531999-02-25 08:48:52 +00003 if $running_under_some_shell;
4##
5## Configure -- OpenSSL source tree configuration script
6##
Ben Laurie1641cb61998-12-28 17:08:48 +00007
Ben Laurie448cb8b1998-12-28 17:37:17 +00008require 5.000;
Ben Laurie1641cb61998-12-28 17:08:48 +00009use strict;
10
Ulf Möller22a4f961999-04-19 13:54:11 +000011# see INSTALL for instructions.
Ulf Möller462ba4f1999-04-24 22:59:36 +000012
Bodo Möller7a762192008-12-02 01:21:39 +000013my $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] [no-asm] [no-dso] [no-krb5] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] os/compiler[:flags]\n";
Ulf Möller462ba4f1999-04-24 22:59:36 +000014
Ulf Möller434c5dd1999-04-19 15:19:58 +000015# Options:
Bodo Möllere5f30451999-04-29 21:52:08 +000016#
Ulf Möller462ba4f1999-04-24 22:59:36 +000017# --openssldir install OpenSSL in OPENSSLDIR (Default: DIR/ssl if the
18# --prefix option is given; /usr/local/ssl otherwise)
19# --prefix prefix for the OpenSSL include, lib and bin directories
20# (Default: the OPENSSLDIR directory)
Bodo Möllere5f30451999-04-29 21:52:08 +000021#
22# --install_prefix Additional prefix for package builders (empty by
23# default). This needn't be set in advance, you can
24# just as well use "make INSTALL_PREFIX=/whatever install".
25#
Richard Levittef9b3bff2000-11-30 22:53:34 +000026# --with-krb5-dir Declare where Kerberos 5 lives. The libraries are expected
27# to live in the subdirectory lib/ and the header files in
Richard Levittee452de92001-07-12 09:11:14 +000028# include/. A value is required.
29# --with-krb5-lib Declare where the Kerberos 5 libraries live. A value is
30# required.
Richard Levittef9b3bff2000-11-30 22:53:34 +000031# (Default: KRB5_DIR/lib)
Richard Levittee452de92001-07-12 09:11:14 +000032# --with-krb5-include Declare where the Kerberos 5 header files live. A
33# value is required.
Richard Levittef9b3bff2000-11-30 22:53:34 +000034# (Default: KRB5_DIR/include)
35# --with-krb5-flavor Declare what flavor of Kerberos 5 is used. Currently
Richard Levittee452de92001-07-12 09:11:14 +000036# supported values are "MIT" and "Heimdal". A value is required.
Richard Levittef9b3bff2000-11-30 22:53:34 +000037#
Richard Levitted0d046e2002-01-27 15:52:37 +000038# --test-sanity Make a number of sanity checks on the data in this file.
39# This is a debugging tool for OpenSSL developers.
40#
Andy Polyakovcbfb39d2006-10-21 13:38:16 +000041# --cross-compile-prefix Add specified prefix to binutils components.
42#
Richard Levitte5270e702000-10-26 21:07:28 +000043# 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.
Bodo Möller5f8d5c91999-04-29 16:10:09 +000048# [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)
Richard Levittefcc6a1c2000-08-02 04:19:50 +000051# [no-]shared [don't] try to create shared libraries when supported.
Ulf Möllera7239791999-04-19 14:55:56 +000052# no-asm do not use assembler
Geoff Thorpebc2aada2000-04-06 07:09:45 +000053# no-dso do not compile in any native shared-library methods. This
54# will ensure that all methods just return NULL.
Richard Levittef9b3bff2000-11-30 22:53:34 +000055# no-krb5 do not compile in any KRB5 library or code.
Richard Levittee452de92001-07-12 09:11:14 +000056# [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.
Ulf Möller22a4f961999-04-19 13:54:11 +000059# 386 generate 80386 code
Andy Polyakovd0590fe2004-07-18 16:19:34 +000060# no-sse2 disables IA-32 SSE2 code, above option implies no-sse2
Ulf Möller79df9d61999-04-27 03:19:12 +000061# no-<cipher> build without specified algorithm (rsa, idea, rc5, ...)
Ulf Möllerafd1f9e1999-05-04 11:52:26 +000062# -<xxx> +<xxx> compiler options are passed through
Geoff Thorpee41c8d62000-06-01 05:13:52 +000063#
64# DEBUG_SAFESTACK use type-safe stacks to enforce type-safety on stack items
65# provided to stack calls. Generates unique stack functions for
66# each possible stack type.
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000067# DES_PTR use pointer lookup vs arrays in the DES in crypto/des/des_locl.h
68# DES_RISC1 use different DES_ENCRYPT macro that helps reduce register
69# dependancies but needs to more registers, good for RISC CPU's
70# DES_RISC2 A different RISC variant.
71# DES_UNROLL unroll the inner DES loop, sometimes helps, somtimes hinders.
72# DES_INT use 'int' instead of 'long' for DES_LONG in crypto/des/des.h
73# This is used on the DEC Alpha where long is 8 bytes
74# and int is 4
75# BN_LLONG use the type 'long long' in crypto/bn/bn.h
Ralf S. Engelschall58964a41998-12-21 10:56:39 +000076# MD2_CHAR use 'char' instead of 'int' for MD2_INT in crypto/md2/md2.h
77# MD2_LONG use 'long' instead of 'int' for MD2_INT in crypto/md2/md2.h
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000078# IDEA_SHORT use 'short' instead of 'int' for IDEA_INT in crypto/idea/idea.h
79# IDEA_LONG use 'long' instead of 'int' for IDEA_INT in crypto/idea/idea.h
80# RC2_SHORT use 'short' instead of 'int' for RC2_INT in crypto/rc2/rc2.h
81# RC2_LONG use 'long' instead of 'int' for RC2_INT in crypto/rc2/rc2.h
82# RC4_CHAR use 'char' instead of 'int' for RC4_INT in crypto/rc4/rc4.h
83# RC4_LONG use 'long' instead of 'int' for RC4_INT in crypto/rc4/rc4.h
Ralf S. Engelschall58964a41998-12-21 10:56:39 +000084# RC4_INDEX define RC4_INDEX in crypto/rc4/rc4_locl.h. This turns on
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000085# array lookups instead of pointer use.
Andy Polyakov2dae04d1999-10-07 12:03:59 +000086# RC4_CHUNK enables code that handles data aligned at long (natural CPU
87# word) boundary.
88# RC4_CHUNK_LL enables code that handles data aligned at long long boundary
89# (intended for 64-bit CPUs running 32-bit OS).
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +000090# BF_PTR use 'pointer arithmatic' for Blowfish (unsafe on Alpha).
Ulf Möller995e79e1999-04-23 21:29:45 +000091# BF_PTR2 intel specific version (generic version is more efficient).
Andy Polyakovd0590fe2004-07-18 16:19:34 +000092#
93# Following are set automatically by this script
94#
Ralf S. Engelschall58964a41998-12-21 10:56:39 +000095# MD5_ASM use some extra md5 assember,
96# SHA1_ASM use some extra sha1 assember, must define L_ENDIAN for x86
97# RMD160_ASM use some extra ripemd160 assember,
Andy Polyakovd0590fe2004-07-18 16:19:34 +000098# SHA256_ASM sha256_block is implemented in assembler
99# SHA512_ASM sha512_block is implemented in assembler
100# AES_ASM ASE_[en|de]crypt is implemented in assembler
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000101
Dr. Stephen Henson363bd0b2009-01-11 15:56:32 +0000102# Minimum warning options... any contributions to OpenSSL should at least get
103# past these.
104
Dr. Stephen Henson8e6925b2009-01-11 20:36:50 +0000105my $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";
Dr. Stephen Henson363bd0b2009-01-11 15:56:32 +0000106
Dr. Stephen Henson0c28f272009-09-09 16:31:32 +0000107my $strict_warnings = 0;
108
Ben Laurie1641cb61998-12-28 17:08:48 +0000109my $x86_gcc_des="DES_PTR DES_RISC1 DES_UNROLL";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000110
111# MD2_CHAR slags pentium pros
Ulf Möller995e79e1999-04-23 21:29:45 +0000112my $x86_gcc_opts="RC4_INDEX MD2_INT";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000113
114# MODIFY THESE PARAMETERS IF YOU ARE GOING TO USE THE 'util/speed.sh SCRIPT
115# Don't worry about these normally
116
Ben Laurie1641cb61998-12-28 17:08:48 +0000117my $tcc="cc";
118my $tflags="-fast -Xa";
119my $tbn_mul="";
120my $tlib="-lnsl -lsocket";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000121#$bits1="SIXTEEN_BIT ";
122#$bits2="THIRTY_TWO_BIT ";
Ben Laurie1641cb61998-12-28 17:08:48 +0000123my $bits1="THIRTY_TWO_BIT ";
124my $bits2="SIXTY_FOUR_BIT ";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000125
Andy Polyakovd64a7232009-04-27 05:55:13 +0000126my $x86_asm="x86cpuid.o:bn-586.o co-586.o x86-mont.o:des-586.o crypt586.o:aes-586.o aesni-x86.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o:cmll-x86.o";
Andy Polyakovbc3e7fa2004-11-26 15:12:17 +0000127
Andy Polyakovfa8e9212008-01-11 13:15:11 +0000128my $x86_elf_asm="$x86_asm:elf";
Dr. Stephen Henson73980532008-01-06 00:36:22 +0000129
Andy Polyakovd64a7232009-04-27 05:55:13 +0000130my $x86_64_asm="x86_64cpuid.o:x86_64-gcc.o x86_64-mont.o::aes-x86_64.o aesni-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o";
Andy Polyakovdacdcf32010-01-06 10:57:55 +0000131my $ia64_asm="ia64cpuid.o:bn-ia64.o ia64-mont.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o::rc4-ia64.o rc4_skey.o:::::void";
Andy Polyakovfa8e9212008-01-11 13:15:11 +0000132my $sparcv9_asm="sparcv9cap.o sparccpuid.o:bn-sparcv9.o sparcv9-mont.o sparcv9a-mont.o:des_enc-sparc.o fcrypt_b.o:aes_core.o aes_cbc.o aes-sparcv9.o:::sha1-sparcv9.o sha256-sparcv9.o sha512-sparcv9.o:::::::void";
133my $sparcv8_asm=":sparcv8.o:des_enc-sparc.o fcrypt_b.o:::::::::::void";
134my $alpha_asm="alphacpuid.o:bn_asm.o alpha-mont.o::::::::::::void";
135my $mips3_asm=":bn-mips3.o::::::::::::void";
Andy Polyakov91fdacb2010-01-19 12:24:59 +0000136my $s390x_asm="s390xcap.o s390xcpuid.o:bn-s390x.o s390x-mont.o::aes-s390x.o:::sha1-s390x.o sha256-s390x.o sha512-s390x.o::rc4-s390x.o:::::void";
Andy Polyakovfa8e9212008-01-11 13:15:11 +0000137my $armv4_asm=":bn_asm.o armv4-mont.o::aes_cbc.o aes-armv4.o:::sha1-armv4-large.o sha256-armv4.o sha512-armv4.o:::::::void";
Andy Polyakovb4b48a12009-12-26 21:30:13 +0000138my $ppc32_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o::::::";
139my $ppc64_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o sha512-ppc.o::::::";
Andy Polyakovfa8e9212008-01-11 13:15:11 +0000140my $no_asm=":::::::::::::void";
Richard Levittea77e0232001-03-26 16:16:12 +0000141
Andy Polyakovb7efa562005-01-24 14:38:14 +0000142# As for $BSDthreads. Idea is to maintain "collective" set of flags,
143# which would cover all BSD flavors. -pthread applies to them all,
144# but is treated differently. OpenBSD expands is as -D_POSIX_THREAD
145# -lc_r, which is sufficient. FreeBSD 4.x expands it as -lc_r,
146# which has to be accompanied by explicit -D_THREAD_SAFE and
147# sometimes -D_REENTRANT. FreeBSD 5.x expands it as -lc_r, which
148# seems to be sufficient?
149my $BSDthreads="-pthread -D_THREAD_SAFE -D_REENTRANT";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000150
Andy Polyakovc23632d2009-02-09 15:11:22 +0000151#config-string $cc : $cflags : $unistd : $thread_cflag : $sys_id : $lflags : $bn_ops : $cpuid_obj : $bn_obj : $des_obj : $aes_obj : $bf_obj : $md5_obj : $sha1_obj : $cast_obj : $rc4_obj : $rmd160_obj : $rc5_obj : $wp_obj : $cmll_obj : $dso_scheme : $shared_target : $shared_cflag : $shared_ldflag : $shared_extension : $ranlib : $arflags : $multilib
Ulf Möller99e812c2000-01-22 21:26:01 +0000152
Ben Laurie1641cb61998-12-28 17:08:48 +0000153my %table=(
Bodo Möller36124b12000-09-06 12:25:58 +0000154# File 'TABLE' (created by 'make TABLE') contains the data from this list,
155# formatted for better readability.
156
157
Richard Levitteb7e16362000-03-07 23:17:48 +0000158#"b", "${tcc}:${tflags}::${tlib}:${bits1}:${tbn_mul}::",
159#"bl-4c-2c", "${tcc}:${tflags}::${tlib}:${bits1}BN_LLONG RC4_CHAR MD2_CHAR:${tbn_mul}::",
160#"bl-4c-ri", "${tcc}:${tflags}::${tlib}:${bits1}BN_LLONG RC4_CHAR RC4_INDEX:${tbn_mul}::",
161#"b2-is-ri-dp", "${tcc}:${tflags}::${tlib}:${bits2}IDEA_SHORT RC4_INDEX DES_PTR:${tbn_mul}::",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000162
Ulf Möller22a4f961999-04-19 13:54:11 +0000163# Our development configs
Richard Levittecf1b7d92001-02-19 16:06:34 +0000164"purify", "purify gcc:-g -DPURIFY -Wall::(unknown)::-lsocket -lnsl::::",
Richard Levitte34ab17b2002-06-27 09:13:44 +0000165"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::::",
Andy Polyakov67ea9992005-02-06 13:23:34 +0000166"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",
Ben Lauriec518ade2001-07-21 10:24:07 +0000167"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)::::",
Ben Laurie9dd5ae62002-01-18 16:51:05 +0000168"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)::::",
Ben Laurieb3f34072009-02-15 14:08:51 +0000169"debug-ben-debug", "gcc:$gcc_devteam_warn -DBN_DEBUG -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -g3 -O2 -pipe::(unknown)::::::",
Ben Lauriebabb3792008-10-12 14:32:47 +0000170"debug-ben-no-opt", "gcc: -Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG -Werror -DL_ENDIAN -DTERMIOS -Wall -g3::(unknown)::::::",
Richard Levittecf1b7d92001-02-19 16:06:34 +0000171"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)::::::",
172"debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
Bodo Möller36d46232008-11-14 00:22:02 +0000173"debug-bodo", "gcc:-DL_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBIO_PAIR_DEBUG -DPEDANTIC -g -march=i486 -pedantic -Wshadow -Wall -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion::-D_REENTRANT:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000174"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",
Dr. Stephen Henson89408582009-12-09 15:56:24 +0000175"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}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
176"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)",
Dr. Stephen Henson9acc6502009-11-09 14:13:23 +0000177"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}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Richard Levitte1dc2d652004-04-20 11:53:33 +0000178"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000179"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Richard Levitte1dc2d652004-04-20 11:53:33 +0000180"debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000181"debug-levitte-linux-noasm-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Geoff Thorpeceee5382008-03-19 23:05:48 +0000182"debug-geoff32","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -DMD32_REG_T=int -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:BN_LLONG:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
183"debug-geoff64","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -DMD32_REG_T=int -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakovb7efa562005-01-24 14:38:14 +0000184"debug-linux-pentium","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -mcpu=pentium -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
185"debug-linux-ppro","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -mcpu=pentiumpro -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
Nils Larscha1368622005-06-12 10:34:42 +0000186"debug-linux-elf","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -march=i486 -Wall::-D_REENTRANT::-lefence -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
187"debug-linux-elf-noefence","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -march=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakovf63e4be2008-01-13 17:56:02 +0000188"debug-linux-ia32-aes", "gcc:-DAES_EXPERIMENTAL -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:x86cpuid.o:bn-586.o co-586.o x86-mont.o:des-586.o crypt586.o:aes_x86core.o aes_cbc.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o::elf:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Dr. Stephen Henson3ca16bf2009-07-24 13:37:18 +0000189"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)",
190"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)",
Dr. Stephen Henson9acc6502009-11-09 14:13:23 +0000191"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}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
Richard Levittecf1b7d92001-02-19 16:06:34 +0000192"dist", "cc:-O::(unknown)::::::",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000193
Andy Polyakovf8bbcf32000-02-15 17:31:12 +0000194# Basic configs that should work on any (32 and less bit) box
Richard Levittecf1b7d92001-02-19 16:06:34 +0000195"gcc", "gcc:-O3::(unknown):::BN_LLONG:::",
196"cc", "cc:-O::(unknown)::::::",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000197
Richard Levitte28a80032004-06-28 22:01:37 +0000198####VOS Configurations
Dr. Stephen Henson8bbe29f2009-05-15 22:50:33 +0000199"vos-gcc","gcc:-O3 -Wall -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
200"debug-vos-gcc","gcc:-O0 -g -Wall -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
Richard Levitte28a80032004-06-28 22:01:37 +0000201
Richard Levittecf2d9e02001-05-03 06:14:47 +0000202#### Solaris x86 with GNU C setups
Richard Levittecf1b7d92001-02-19 16:06:34 +0000203# -DOPENSSL_NO_INLINE_ASM switches off inline assembler. We have to do it
Andy Polyakovf8bbcf32000-02-15 17:31:12 +0000204# here because whenever GNU C instantiates an assembler template it
205# surrounds it with #APP #NO_APP comment pair which (at least Solaris
206# 7_x86) /usr/ccs/bin/as fails to assemble with "Illegal mnemonic"
207# error message.
Andy Polyakovc5de8b22005-06-26 17:17:11 +0000208"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)",
Andy Polyakov0abfd602005-04-04 17:10:53 +0000209# -shared -static-libgcc might appear controversial, but modules taken
210# from static libgcc do not have relocations and linking them into our
211# shared objects doesn't have any negative side-effects. On the contrary,
212# doing so makes it possible to use gcc shared build with Sun C. Given
213# that gcc generates faster code [thanks to inline assembler], I would
214# actually recommend to consider using gcc shared build even with vendor
215# compiler:-)
216# <appro@fy.chalmers.se>
Dr. Stephen Henson9acc6502009-11-09 14:13:23 +0000217"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}:elf:dlfcn:solaris-shared:-fPIC:-m64 -shared -static-libgcc:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
Andy Polyakov0abfd602005-04-04 17:10:53 +0000218
Richard Levittecf2d9e02001-05-03 06:14:47 +0000219#### Solaris x86 with Sun C setups
Andy Polyakov8861ba32005-04-13 07:22:41 +0000220"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)",
Dr. Stephen Henson9acc6502009-11-09 14:13:23 +0000221"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}:elf:dlfcn:solaris-shared:-KPIC:-xarch=amd64 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
Richard Levittecf2d9e02001-05-03 06:14:47 +0000222
Andy Polyakov1656ef21999-07-25 22:25:12 +0000223#### SPARC Solaris with GNU C setups
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000224"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)",
Andy Polyakov6a8517f2007-08-28 20:45:25 +0000225"solaris-sparcv8-gcc","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakovac7b4262001-07-25 15:58:57 +0000226# -m32 should be safe to add as long as driver recognizes -mcpu=ultrasparc
Andy Polyakova00e4142005-12-16 17:39:57 +0000227"solaris-sparcv9-gcc","gcc:-m32 -mcpu=ultrasparc -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakovc23632d2009-02-09 15:11:22 +0000228"solaris64-sparcv9-gcc","gcc:-m64 -mcpu=ultrasparc -O3 -Wall -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-fPIC:-m64 -shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
Andy Polyakov1656ef21999-07-25 22:25:12 +0000229####
Andy Polyakov6a8517f2007-08-28 20:45:25 +0000230"debug-solaris-sparcv8-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -O -g -mv8 -Wall -DB_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakova00e4142005-12-16 17:39:57 +0000231"debug-solaris-sparcv9-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -DPEDANTIC -O -g -mcpu=ultrasparc -pedantic -ansi -Wall -Wshadow -Wno-long-long -D__EXTENSIONS__ -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakov1656ef21999-07-25 22:25:12 +0000232
233#### SPARC Solaris with Sun C setups
Andy Polyakov1656ef21999-07-25 22:25:12 +0000234# SC4.0 doesn't pass 'make test', upgrade to SC5.0 or SC4.2.
235# SC4.2 is ok, better than gcc even on bn as long as you tell it -xarch=v8
Ulf Möller5a2e24b1999-06-09 23:29:23 +0000236# SC5.0 note: Compiler common patch 107357-01 or later is required!
Andy Polyakov8861ba32005-04-13 07:22:41 +0000237"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)",
Andy Polyakov6a8517f2007-08-28 20:45:25 +0000238"solaris-sparcv8-cc","cc:-xarch=v8 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakov3b4a0222005-12-19 09:10:06 +0000239"solaris-sparcv9-cc","cc:-xtarget=ultra -xarch=v8plus -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakovc23632d2009-02-09 15:11:22 +0000240"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-xarch=v9 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):/usr/ccs/bin/ar rs::/64",
Bodo Möllerd0f28761999-09-14 15:05:45 +0000241####
Andy Polyakov6a8517f2007-08-28 20:45:25 +0000242"debug-solaris-sparcv8-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xarch=v8 -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakova00e4142005-12-16 17:39:57 +0000243"debug-solaris-sparcv9-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -xtarget=ultra -xarch=v8plus -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000244
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000245#### SunOS configs, assuming sparc for the gcc one.
246#"sunos-cc", "cc:-O4 -DNOPROTO -DNOCONST::(unknown):SUNOS::DES_UNROLL:${no_asm}::",
247"sunos-gcc","gcc:-O3 -mv8 -Dssize_t=int::(unknown):SUNOS::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL DES_PTR DES_RISC1:${no_asm}::",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000248
Andy Polyakovda8fa721999-07-25 20:40:58 +0000249#### IRIX 5.x configs
250# -mips2 flag is added by ./config when appropriate.
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000251"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)",
252"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)",
Andy Polyakovda8fa721999-07-25 20:40:58 +0000253#### IRIX 6.x configs
254# Only N32 and N64 ABIs are supported. If you need O32 ABI build, invoke
Andy Polyakov30fbcaa2004-03-12 21:52:54 +0000255# './Configure irix-cc -o32' manually.
Andy Polyakovc23632d2009-02-09 15:11:22 +0000256"irix-mips3-gcc","gcc:-mabi=n32 -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK_LL DES_UNROLL DES_RISC2 DES_PTR BF_PTR SIXTY_FOUR_BIT:${mips3_asm}:dlfcn:irix-shared::-mabi=n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::32",
257"irix-mips3-cc", "cc:-n32 -mips3 -O2 -use_readonly_const -G0 -rdata_shared -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::DES_PTR RC4_CHAR RC4_CHUNK_LL DES_RISC2 DES_UNROLL BF_PTR SIXTY_FOUR_BIT:${mips3_asm}:dlfcn:irix-shared::-n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::32",
Andy Polyakovda8fa721999-07-25 20:40:58 +0000258# N64 ABI builds.
Andy Polyakovc23632d2009-02-09 15:11:22 +0000259"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips3_asm}:dlfcn:irix-shared::-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
260"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -G0 -rdata_shared -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips3_asm}:dlfcn:irix-shared::-64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000261
Andy Polyakovbcba6cc2000-02-12 23:33:01 +0000262#### Unified HP-UX ANSI C configs.
263# Special notes:
264# - Originally we were optimizing at +O4 level. It should be noted
265# that the only difference between +O3 and +O4 is global inter-
266# procedural analysis. As it has to be performed during the link
267# stage the compiler leaves behind certain pseudo-code in lib*.a
268# which might be release or even patch level specific. Generating
Andy Polyakovf8bbcf32000-02-15 17:31:12 +0000269# the machine code for and analyzing the *whole* program appears
270# to be *extremely* memory demanding while the performance gain is
Andy Polyakovbcba6cc2000-02-12 23:33:01 +0000271# actually questionable. The situation is intensified by the default
272# HP-UX data set size limit (infamous 'maxdsiz' tunable) of 64MB
273# which is way too low for +O4. In other words, doesn't +O3 make
274# more sense?
Andy Polyakovf8bbcf32000-02-15 17:31:12 +0000275# - Keep in mind that the HP compiler by default generates code
276# suitable for execution on the host you're currently compiling at.
277# If the toolkit is ment to be used on various PA-RISC processors
Andy Polyakov6d03b732001-07-30 16:42:15 +0000278# consider './config +DAportable'.
Andy Polyakovad5f0ed2003-11-20 19:10:36 +0000279# - +DD64 is chosen in favour of +DA2.0W because it's meant to be
Andy Polyakovbcba6cc2000-02-12 23:33:01 +0000280# compatible with *future* releases.
281# - If you run ./Configure hpux-parisc-[g]cc manually don't forget to
282# pass -D_REENTRANT on HP-UX 10 and later.
283# - -DMD32_XARRAY triggers workaround for compiler bug we ran into in
284# 32-bit message digests. (For the moment of this writing) HP C
285# doesn't seem to "digest" too many local variables (they make "him"
286# chew forever:-). For more details look-up MD32_XARRAY comment in
287# crypto/sha/sha_lcl.h.
288# <appro@fy.chalmers.se>
289#
Richard Levitte3bead952000-03-24 16:06:22 +0000290# Since there is mention of this in shlib/hpux10-cc.sh
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000291"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)",
292"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)",
Andy Polyakovfa8e9212008-01-11 13:15:11 +0000293"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::::::::::::void:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakovc23632d2009-02-09 15:11:22 +0000294"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::::::::::::void:dlfcn:hpux-shared:-fpic:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_64",
Andy Polyakovbcba6cc2000-02-12 23:33:01 +0000295
Richard Levitted0c2ebf2000-09-17 20:04:42 +0000296# More attempts at unified 10.X and 11.X targets for HP C compiler.
297#
298# Chris Ruemmler <ruemmler@cup.hp.com>
299# Kevin Steves <ks@hp.se>
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000300"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)",
301"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)",
Andy Polyakovfa8e9212008-01-11 13:15:11 +0000302"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::::::::::::void:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakovc23632d2009-02-09 15:11:22 +0000303"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::::::::::::void:dlfcn:hpux-shared:+Z:+DD64 -b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_64",
Richard Levitted0c2ebf2000-09-17 20:04:42 +0000304
Andy Polyakov12470922004-01-29 22:16:08 +0000305# HP/UX IA-64 targets
Andy Polyakovc23632d2009-02-09 15:11:22 +0000306"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):::/hpux32",
Andy Polyakov12470922004-01-29 22:16:08 +0000307# Frank Geurts <frank.geurts@nl.abnamro.com> has patiently assisted with
308# with debugging of the following config.
Andy Polyakovc23632d2009-02-09 15:11:22 +0000309"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):::/hpux64",
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000310# GCC builds...
Andy Polyakovc23632d2009-02-09 15:11:22 +0000311"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):::/hpux32",
312"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):::/hpux64",
Andy Polyakov12470922004-01-29 22:16:08 +0000313
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000314# Legacy HPUX 9.X configs...
315"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)",
316"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)",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000317
Richard Levittec5f8bbb2000-09-21 05:42:01 +0000318#### HP MPE/iX http://jazz.external.hp.com/src/openssl/
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000319"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:::",
Richard Levittec5f8bbb2000-09-21 05:42:01 +0000320
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000321# DEC Alpha OSF/1/Tru64 targets.
Richard Levitte6bc847e2001-08-10 15:26:21 +0000322#
323# "What's in a name? That which we call a rose
324# By any other word would smell as sweet."
325#
326# - William Shakespeare, "Romeo & Juliet", Act II, scene II.
327#
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000328# For gcc, the following gave a %50 speedup on a 164 over the 'DES_INT' version
Richard Levitte6bc847e2001-08-10 15:26:21 +0000329#
Andy Polyakov98c15092006-12-08 14:42:19 +0000330"osf1-alpha-gcc", "gcc:-O3::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_RISC1:${alpha_asm}:dlfcn:alpha-osf1-shared:::.so",
331"osf1-alpha-cc", "cc:-std1 -tune host -O4 -readonly_strings::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK:${alpha_asm}:dlfcn:alpha-osf1-shared:::.so",
332"tru64-alpha-cc", "cc:-std1 -tune host -fast -readonly_strings::-pthread:::SIXTY_FOUR_BIT_LONG RC4_CHUNK:${alpha_asm}:dlfcn:alpha-osf1-shared::-msym:.so",
Ulf Möllera2b21731999-05-18 16:04:03 +0000333
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000334####
335#### Variety of LINUX:-)
336####
Andy Polyakovb7efa562005-01-24 14:38:14 +0000337# *-generic* is endian-neutral target, but ./config is free to
338# throw in -D[BL]_ENDIAN, whichever appropriate...
339"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)",
Andy Polyakovaddd6412008-01-13 22:01:30 +0000340"linux-ppc", "gcc:-DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc32_asm}:linux32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakov7722e532007-09-27 16:27:03 +0000341# It's believed that majority of ARM toolchains predefine appropriate -march.
342# If you compiler does not, do complement config command line with one!
Andy Polyakov2c3ee162007-09-27 07:43:58 +0000343"linux-armv4", "gcc:-DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000344#### IA-32 targets...
345"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)",
Andy Polyakovb7efa562005-01-24 14:38:14 +0000346"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)",
Andy Polyakovdab62932008-11-12 08:21:20 +0000347"linux-aout", "gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -march=i486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out",
Andy Polyakovb7efa562005-01-24 14:38:14 +0000348####
349"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)",
Andy Polyakovc23632d2009-02-09 15:11:22 +0000350"linux-ppc64", "gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc64_asm}:linux64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
Andy Polyakova7ad2af2005-07-19 22:37:57 +0000351"linux-ia64", "gcc:-DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
352"linux-ia64-ecc","ecc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
353"linux-ia64-icc","icc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Dr. Stephen Henson9acc6502009-11-09 14:13:23 +0000354"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}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
Andy Polyakovc23632d2009-02-09 15:11:22 +0000355"linux-s390x", "gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${s390x_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000356#### SPARC Linux setups
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000357# Ray Miller <ray.miller@computing-services.oxford.ac.uk> has patiently
358# assisted with debugging of following two configs.
Andy Polyakov6a8517f2007-08-28 20:45:25 +0000359"linux-sparcv8","gcc:-mv8 -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000360# it's a real mess with -mcpu=ultrasparc option under Linux, but
361# -Wa,-Av8plus should do the trick no matter what.
Andy Polyakov3b4a0222005-12-19 09:10:06 +0000362"linux-sparcv9","gcc:-m32 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -Wa,-Av8plus -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000363# GCC 3.1 is a requirement
Andy Polyakovc23632d2009-02-09 15:11:22 +0000364"linux64-sparcv9","gcc:-m64 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
Andy Polyakovbdf5e182000-01-02 20:46:58 +0000365#### Alpha Linux with GNU C and Compaq C setups
Andy Polyakovf8bbcf32000-02-15 17:31:12 +0000366# Special notes:
367# - linux-alpha+bwx-gcc is ment to be used from ./config only. If you
368# ought to run './Configure linux-alpha+bwx-gcc' manually, do
369# complement the command line with -mcpu=ev56, -mcpu=ev6 or whatever
370# which is appropriate.
371# - If you use ccc keep in mind that -fast implies -arch host and the
372# compiler is free to issue instructions which gonna make elder CPU
373# choke. If you wish to build "blended" toolkit, add -arch generic
374# *after* -fast and invoke './Configure linux-alpha-ccc' manually.
375#
376# <appro@fy.chalmers.se>
377#
Andy Polyakov98c15092006-12-08 14:42:19 +0000378"linux-alpha-gcc","gcc:-O3 -DL_ENDIAN -DTERMIO::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_UNROLL:${alpha_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
379"linux-alpha+bwx-gcc","gcc:-O3 -DL_ENDIAN -DTERMIO::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${alpha_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
380"linux-alpha-ccc","ccc:-fast -readonly_strings -DL_ENDIAN -DTERMIO::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
381"linux-alpha+bwx-ccc","ccc:-fast -readonly_strings -DL_ENDIAN -DTERMIO::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
Andy Polyakovbdf5e182000-01-02 20:46:58 +0000382
Andy Polyakovb7efa562005-01-24 14:38:14 +0000383#### *BSD [do see comment about ${BSDthreads} above!]
384"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)",
Andy Polyakovdab62932008-11-12 08:21:20 +0000385"BSD-x86", "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out:dlfcn:bsd-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakovb7efa562005-01-24 14:38:14 +0000386"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)",
Ben Lauriee9ad6662005-04-23 06:05:24 +0000387"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)",
Andy Polyakov6a8517f2007-08-28 20:45:25 +0000388"BSD-sparcv8", "gcc:-DB_ENDIAN -DTERMIOS -O3 -mv8 -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${sparcv8_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000389
Andy Polyakovb7efa562005-01-24 14:38:14 +0000390"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)",
391# -DMD32_REG_T=int doesn't actually belong in sparc64 target, it
392# simply *happens* to work around a compiler bug in gcc 3.3.3,
393# triggered by RIPEMD160 code.
Andy Polyakova00e4142005-12-16 17:39:57 +0000394"BSD-sparc64", "gcc:-DB_ENDIAN -DTERMIOS -O3 -DMD32_REG_T=int -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC2 BF_PTR:${sparcv9_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakov63999e52005-07-20 12:10:41 +0000395"BSD-ia64", "gcc:-DL_ENDIAN -DTERMIOS -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakovdab62932008-11-12 08:21:20 +0000396"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}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000397
Nils Larscha1368622005-06-12 10:34:42 +0000398"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)",
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000399
Richard Levittecf1b7d92001-02-19 16:06:34 +0000400"nextstep", "cc:-O -Wall:<libc.h>:(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::",
401"nextstep3.3", "cc:-O3 -Wall:<libc.h>:(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::",
402
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000403# NCR MP-RAS UNIX ver 02.03.01
Lutz Jänickeacad5752003-01-16 07:54:52 +0000404"ncr-scde","cc:-O6 -Xa -Hoff=BEHAVED -686 -Hwide -Hiw::(unknown)::-lsocket -lnsl -lc89:${x86_gcc_des} ${x86_gcc_opts}:::",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000405
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000406# QNX
Richard Levittecf1b7d92001-02-19 16:06:34 +0000407"qnx4", "cc:-DL_ENDIAN -DTERMIO::(unknown):::${x86_gcc_des} ${x86_gcc_opts}:",
Dr. Stephen Henson4f335342009-06-17 11:37:44 +0000408"QNX6", "gcc:-DTERMIOS::::-lsocket::${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
409"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)",
Lutz Jänicke6a9af682001-11-30 09:38:57 +0000410
Ulf Möller4700aea2006-04-11 21:34:21 +0000411# BeOS
412"beos-x86-r5", "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall::-D_REENTRANT:BEOS:-lbe -lnet:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:beos:beos-shared:-fPIC -DPIC:-shared:.so",
413"beos-x86-bone", "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall::-D_REENTRANT:BEOS:-lbe -lbind -lsocket:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:beos:beos-shared:-fPIC:-shared:.so",
414
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000415#### SCO/Caldera targets.
Andy Polyakovfda20f02003-01-12 15:50:59 +0000416#
Andy Polyakov699543e2003-01-09 08:42:04 +0000417# Originally we had like unixware-*, unixware-*-pentium, unixware-*-p6, etc.
418# Now we only have blended unixware-* as it's the only one used by ./config.
Andy Polyakovfda20f02003-01-12 15:50:59 +0000419# If you want to optimize for particular microarchitecture, bypass ./config
Andy Polyakov699543e2003-01-09 08:42:04 +0000420# and './Configure unixware-7 -Kpentium_pro' or whatever appropriate.
Andy Polyakovfda20f02003-01-12 15:50:59 +0000421# Note that not all targets include assembler support. Mostly because of
422# lack of motivation to support out-of-date platforms with out-of-date
423# compiler drivers and assemblers. Tim Rice <tim@multitalents.net> has
424# patiently assisted to debug most of it.
Andy Polyakov699543e2003-01-09 08:42:04 +0000425#
426# UnixWare 2.0x fails destest with -O.
Richard Levitte9335a5f2002-07-18 07:47:30 +0000427"unixware-2.0","cc:-DFILIO_H -DNO_STRINGS_H::-Kthread::-lsocket -lnsl -lresolv -lx:${x86_gcc_des} ${x86_gcc_opts}:::",
Richard Levitte9335a5f2002-07-18 07:47:30 +0000428"unixware-2.1","cc:-O -DFILIO_H::-Kthread::-lsocket -lnsl -lresolv -lx:${x86_gcc_des} ${x86_gcc_opts}:::",
Andy Polyakov699543e2003-01-09 08:42:04 +0000429"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)",
Andy Polyakov14cc0aa2005-06-26 18:06:38 +0000430"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)",
Andy Polyakovfda20f02003-01-12 15:50:59 +0000431# SCO 5 - Ben Laurie <ben@algroup.co.uk> says the -O breaks the SCO cc.
Andy Polyakov42bf2a52003-01-18 21:57:30 +0000432"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)",
433"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)",
Andy Polyakovfda20f02003-01-12 15:50:59 +0000434
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000435#### IBM's AIX.
Andy Polyakov76ef6ac2004-12-20 13:44:34 +0000436"aix3-cc", "cc:-O -DB_ENDIAN -qmaxmem=16384::(unknown):AIX::BN_LLONG RC4_CHAR:::",
Andy Polyakov492279f2008-09-12 14:45:54 +0000437"aix-gcc", "gcc:-O -DB_ENDIAN::-pthread:AIX::BN_LLONG RC4_CHAR:${ppc32_asm}:aix32:dlfcn:aix-shared::-shared -Wl,-G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X32",
438"aix64-gcc","gcc:-maix64 -O -DB_ENDIAN::-pthread:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:${ppc64_asm}:aix64:dlfcn:aix-shared::-maix64 -shared -Wl,-G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X64",
Andy Polyakovdd558802004-04-27 22:05:50 +0000439# Below targets assume AIX 5. Idea is to effectively disregard $OBJECT_MODE
440# at build time. $OBJECT_MODE is respected at ./config stage!
Andy Polyakov492279f2008-09-12 14:45:54 +0000441"aix-cc", "cc:-q32 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded:AIX::BN_LLONG RC4_CHAR:${ppc32_asm}:aix32:dlfcn:aix-shared::-q32 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 32",
442"aix64-cc", "cc:-q64 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:${ppc64_asm}:aix64:dlfcn:aix-shared::-q64 -G:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 64",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000443
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000444#
Bodo Möllerc46acba2002-03-15 16:46:41 +0000445# Cray T90 and similar (SDSC)
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000446# It's Big-endian, but the algorithms work properly when B_ENDIAN is NOT
447# defined. The T90 ints and longs are 8 bytes long, and apparently the
448# B_ENDIAN code assumes 4 byte ints. Fortunately, the non-B_ENDIAN and
449# non L_ENDIAN code aligns the bytes in each word correctly.
450#
451# The BIT_FIELD_LIMITS define is to avoid two fatal compiler errors:
452#'Taking the address of a bit field is not allowed. '
453#'An expression with bit field exists as the operand of "sizeof" '
454# (written by Wayne Schroeder <schroede@SDSC.EDU>)
Bodo Möllerc46acba2002-03-15 16:46:41 +0000455#
456# j90 is considered the base machine type for unicos machines,
457# so this configuration is now called "cray-j90" ...
458"cray-j90", "cc: -DBIT_FIELD_LIMITS -DTERMIOS::(unknown):CRAY::SIXTY_FOUR_BIT_LONG DES_INT:::",
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000459
Ralf S. Engelschall13e91dd1998-12-22 15:59:57 +0000460#
461# Cray T3E (Research Center Juelich, beckman@acl.lanl.gov)
462#
463# The BIT_FIELD_LIMITS define was written for the C90 (it seems). I added
464# another use. Basically, the problem is that the T3E uses some bit fields
465# for some st_addr stuff, and then sizeof and address-of fails
466# I could not use the ams/alpha.o option because the Cray assembler, 'cam'
467# did not like it.
Richard Levittecf1b7d92001-02-19 16:06:34 +0000468"cray-t3e", "cc: -DBIT_FIELD_LIMITS -DTERMIOS::(unknown):CRAY::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT:::",
Ralf S. Engelschall13e91dd1998-12-22 15:59:57 +0000469
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000470# DGUX, 88100.
Richard Levittecf1b7d92001-02-19 16:06:34 +0000471"dgux-R3-gcc", "gcc:-O3 -fomit-frame-pointer::(unknown):::RC4_INDEX DES_UNROLL:::",
Richard Levitte0da945b2001-04-03 08:05:03 +0000472"dgux-R4-gcc", "gcc:-O3 -fomit-frame-pointer::(unknown)::-lnsl -lsocket:RC4_INDEX DES_UNROLL:::",
Richard Levittecf1b7d92001-02-19 16:06:34 +0000473"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}",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000474
Ulf Möller1fac96e1999-05-20 17:28:19 +0000475# Sinix/ReliantUNIX RM400
476# NOTE: The CDS++ Compiler up to V2.0Bsomething has the IRIX_CC_BUG optimizer problem. Better use -g */
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000477"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)",
Richard Levittecf1b7d92001-02-19 16:06:34 +0000478"SINIX","cc:-O::(unknown):SNI:-lsocket -lnsl -lc -L/usr/ucblib -lucb:RC4_INDEX RC4_CHAR:::",
479"SINIX-N","/usr/ucb/cc:-O2 -misaligned::(unknown)::-lucb:RC4_INDEX RC4_CHAR:::",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000480
Ulf Möllera53955d1999-06-04 21:35:58 +0000481# SIEMENS BS2000/OSD: an EBCDIC-based mainframe
Richard Levittecf1b7d92001-02-19 16:06:34 +0000482"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:::",
Ulf Möllera53955d1999-06-04 21:35:58 +0000483
Bodo Möller1d4581c2001-11-22 11:09:42 +0000484# OS/390 Unix an EBCDIC-based Unix system on IBM mainframe
485# You need to compile using the c89.sh wrapper in the tools directory, because the
486# IBM compiler does not like the -L switch after any object modules.
487#
488"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:::",
489
Andy Polyakovbafcc7e2004-07-23 19:18:20 +0000490# Visual C targets
Andy Polyakovf63e4be2008-01-13 17:56:02 +0000491#
492# Win64 targets, WIN64I denotes IA-64 and WIN64A - AMD64
Andy Polyakovdacdcf32010-01-06 10:57:55 +0000493"VC-WIN64I","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o ia64-mont.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ias:win32",
Dr. Stephen Hensoneed15a82009-05-06 10:28:37 +0000494"VC-WIN64A","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64A::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:x86_64cpuid.o:bn_asm.o x86_64-mont.o::aes-x86_64.o aesni-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o:auto:win32",
Andy Polyakovf63e4be2008-01-13 17:56:02 +0000495# x86 Win32 target defaults to ANSI API, if you want UNICODE, complement
496# 'perl Configure VC-WIN32' with '-DUNICODE -D_UNICODE'
Dr. Stephen Hensoneed15a82009-05-06 10:28:37 +0000497"VC-WIN32","cl:-W3 -WX -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32",
Andy Polyakovf63e4be2008-01-13 17:56:02 +0000498# Unified CE target
Dr. Stephen Henson71b7858b2009-05-06 16:55:55 +0000499"debug-VC-WIN32","cl:-W3 -WX -Gs0 -GF -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE:::WIN32::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${x86_asm}:win32n:win32",
Andy Polyakovf63e4be2008-01-13 17:56:02 +0000500"VC-CE","cl::::WINCE::BN_LLONG RC4_INDEX EXPORT_VAR_AS_FN ${x86_gcc_opts}:${no_asm}:win32",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000501
502# Borland C++ 4.5
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000503"BC-32","bcc32::::WIN32::BN_LLONG DES_PTR RC4_INDEX EXPORT_VAR_AS_FN:${no_asm}:win32",
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000504
Ulf Möller66ecdf32003-02-22 18:00:14 +0000505# MinGW
Andy Polyakovf87e3072009-12-30 11:46:54 +0000506"mingw", "gcc:-mno-cygwin -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -fomit-frame-pointer -O3 -march=i486 -Wall:::MINGW32:-lws2_32 -lgdi32 -lcrypt32:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts} EXPORT_VAR_AS_FN:${x86_asm}:coff:win32:cygwin-shared:-D_WINDLL -DOPENSSL_USE_APPLINK:-mno-cygwin:.dll.a",
Andy Polyakov93c4ba02008-11-14 16:40:37 +0000507# As for OPENSSL_USE_APPLINK. Applink makes it possible to use .dll
508# compiled with one compiler with application compiled with another
509# compiler. It's possible to engage Applink support in mingw64 build,
510# but it's not done, because till mingw64 supports structured exception
511# handling, one can't seriously consider its binaries for using with
512# non-mingw64 run-time environment. And as mingw64 is always consistent
513# with itself, Applink is never engaged and can as well be omitted.
Andy Polyakov7752d342009-05-03 13:54:01 +0000514"mingw64", "gcc:-mno-cygwin -DL_ENDIAN -O3 -Wall -DWIN32_LEAN_AND_MEAN -DUNICODE -D_UNICODE:::MINGW64:-lws2_32 -lgdi32 -lcrypt32:SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:${x86_64_asm}:mingw64:win32:cygwin-shared:-D_WINDLL:-mno-cygwin:.dll.a",
Ralf S. Engelschalle04a6c21999-01-30 11:50:48 +0000515
Richard Levittec69d1032002-06-13 21:44:23 +0000516# UWIN
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000517"UWIN", "cc:-DTERMIOS -DL_ENDIAN -O -Wall:::UWIN::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:win32",
Richard Levittec69d1032002-06-13 21:44:23 +0000518
Richard Levitte49e04542002-02-14 12:28:24 +0000519# Cygwin
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000520"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",
Andy Polyakovdab62932008-11-12 08:21:20 +0000521"Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall:::CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:coff:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
Andy Polyakov13344622005-04-13 21:08:39 +0000522"debug-Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror:::CYGWIN32:::${no_asm}:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
Bodo Möller349b2932002-05-24 20:39:31 +0000523
Dr. Stephen Hensoneef0c1f2008-01-03 22:43:04 +0000524# NetWare from David Ward (dsward@novell.com)
525# requires either MetroWerks NLM development tools, or gcc / nlmconv
526# NetWare defaults socket bio to WinSock sockets. However,
527# the builds can be configured to use BSD sockets instead.
Richard Levitte4d8743f2003-11-28 13:10:58 +0000528# netware-clib => legacy CLib c-runtime support
Dr. Stephen Hensoneef0c1f2008-01-03 22:43:04 +0000529"netware-clib", "mwccnlm::::::${x86_gcc_opts}::",
530"netware-clib-bsdsock", "mwccnlm::::::${x86_gcc_opts}::",
531"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}::",
532"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}::",
Richard Levitte4d8743f2003-11-28 13:10:58 +0000533# netware-libc => LibC/NKS support
Richard Levitte9e5b3782005-06-05 21:47:19 +0000534"netware-libc", "mwccnlm::::::BN_LLONG ${x86_gcc_opts}::",
Richard Levitteb764ab92005-06-13 03:23:50 +0000535"netware-libc-bsdsock", "mwccnlm::::::BN_LLONG ${x86_gcc_opts}::",
Richard Levitte9e5b3782005-06-05 21:47:19 +0000536"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}::",
Dr. Stephen Hensoneef0c1f2008-01-03 22:43:04 +0000537"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}::",
Richard Levitte4d8743f2003-11-28 13:10:58 +0000538
Richard Levitte451dc182002-06-13 20:42:35 +0000539# DJGPP
Andy Polyakovdab62932008-11-12 08:21:20 +0000540"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_asm}:a.out:",
Richard Levitte451dc182002-06-13 20:42:35 +0000541
Ulf Möller22a4f961999-04-19 13:54:11 +0000542# Ultrix from Bernhard Simon <simon@zid.tuwien.ac.at>
Lutz Jänicke9314e362002-12-10 18:48:14 +0000543"ultrix-cc","cc:-std1 -O -Olimit 2500 -DL_ENDIAN::(unknown):::::::",
Richard Levittee774a322005-06-05 22:19:24 +0000544"ultrix-gcc","gcc:-O3 -DL_ENDIAN::(unknown):::BN_LLONG::::",
Ulf Möller22a4f961999-04-19 13:54:11 +0000545# K&R C is no longer supported; you need gcc on old Ultrix installations
Richard Levittecf1b7d92001-02-19 16:06:34 +0000546##"ultrix","cc:-O2 -DNOPROTO -DNOCONST -DL_ENDIAN::(unknown):::::::",
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000547
Richard Levitte9b7a5522000-12-01 01:11:54 +0000548##### MacOS X (a.k.a. Rhapsody or Darwin) setup
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000549"rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown):MACOSX_RHAPSODY::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}::",
Andy Polyakovb4b48a12009-12-26 21:30:13 +0000550"darwin-ppc-cc","cc:-arch ppc -O3 -DB_ENDIAN -Wa,-force_cpusubtype_ALL::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
Andy Polyakovaddd6412008-01-13 22:01:30 +0000551"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:${ppc64_asm}:osx64:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
Andy Polyakovdab62932008-11-12 08:21:20 +0000552"darwin-i386-cc","cc:-arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
553"debug-darwin-i386-cc","cc:-arch i386 -g3 -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
Dr. Stephen Henson9acc6502009-11-09 14:13:23 +0000554"darwin64-x86_64-cc","cc:-arch x86_64 -O3 -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:${x86_64_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
Andy Polyakovaddd6412008-01-13 22:01:30 +0000555"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:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
Andy Polyakov0fad6cb2000-02-06 11:15:20 +0000556
Richard Levitte729f0a22002-10-11 14:39:03 +0000557##### A/UX
558"aux3-gcc","gcc:-O2 -DTERMIO::(unknown):AUX:-lbsd:RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
559
Richard Levitte72660f52000-09-14 12:48:48 +0000560##### Sony NEWS-OS 4.x
Richard Levittecf1b7d92001-02-19 16:06:34 +0000561"newsos4-gcc","gcc:-O -DB_ENDIAN::(unknown):NEWS4:-lmld -liberty:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::",
Richard Levitte72660f52000-09-14 12:48:48 +0000562
Richard Levitte10a29752001-01-11 12:58:37 +0000563##### GNU Hurd
Nils Larscha1368622005-06-12 10:34:42 +0000564"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",
Richard Levitte10a29752001-01-11 12:58:37 +0000565
Richard Levittedc01b6b2001-07-01 22:39:46 +0000566##### OS/2 EMX
567"OS2-EMX", "gcc::::::::",
568
Richard Levitte3e83e682002-02-14 15:37:38 +0000569##### VxWorks for various targets
570"vxworks-ppc405","ccppc:-g -msoft-float -mlongcall -DCPU=PPC405 -I\$(WIND_BASE)/target/h:::VXWORKS:-r:::::",
Richard Levitte6a89a252002-10-09 13:40:48 +0000571"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:::::",
572"vxworks-ppc750-debug","ccppc:-ansi -nostdinc -DPPC750 -D_REENTRANT -fvolatile -fno-builtin -fno-for-scope -fsigned-char -Wall -msoft-float -mlongcall -DCPU=PPC604 -I\$(WIND_BASE)/target/h -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DDEBUG -g:::VXWORKS:-r:::::",
Richard Levittec7988682003-09-28 14:06:57 +0000573"vxworks-ppc860","ccppc:-nostdinc -msoft-float -DCPU=PPC860 -DNO_STRINGS_H -I\$(WIND_BASE)/target/h:::VXWORKS:-r:::::",
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000574"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:",
Richard Levitte3e83e682002-02-14 15:37:38 +0000575
Richard Levitteb9c23cc2002-11-14 16:30:11 +0000576##### Compaq Non-Stop Kernel (Tandem)
577"tandem-c89","c89:-Ww -D__TANDEM -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1 -D_TANDEM_SOURCE -DB_ENDIAN::(unknown):::THIRTY_TWO_BIT:::",
578
Dr. Stephen Henson15c7adb2009-07-01 11:46:03 +0000579# uClinux
580"uClinux-dist","$ENV{'CC'}:\$(CFLAGS)::-D_REENTRANT::\$(LDFLAGS) \$(LDLIBS):BN_LLONG:::::::::::::::$ENV{'LIBSSL_dlfcn'}:linux-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):$ENV{'RANLIB'}::",
581"uClinux-dist64","$ENV{'CC'}:\$(CFLAGS)::-D_REENTRANT::\$(LDFLAGS) \$(LDLIBS):SIXTY_FOUR_BIT_LONG:::::::::::::::$ENV{'LIBSSL_dlfcn'}:linux-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):$ENV{'RANLIB'}::",
582
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000583);
584
Andy Polyakov33c3ecf2004-07-23 23:27:10 +0000585my @MK1MF_Builds=qw(VC-WIN64I VC-WIN64A
Dr. Stephen Henson71b7858b2009-05-06 16:55:55 +0000586 VC-NT VC-CE VC-WIN32 debug-VC-WIN32
Dr. Stephen Hensonef236ec2009-04-23 16:32:42 +0000587 BC-32
Dr. Stephen Hensoneef0c1f2008-01-03 22:43:04 +0000588 netware-clib netware-clib-bsdsock
589 netware-libc netware-libc-bsdsock);
Ben Laurieefadf601999-03-07 15:21:08 +0000590
Richard Levitted0d046e2002-01-27 15:52:37 +0000591my $idx = 0;
592my $idx_cc = $idx++;
593my $idx_cflags = $idx++;
594my $idx_unistd = $idx++;
595my $idx_thread_cflag = $idx++;
596my $idx_sys_id = $idx++;
597my $idx_lflags = $idx++;
598my $idx_bn_ops = $idx++;
Andy Polyakov14e21f82004-07-26 20:18:55 +0000599my $idx_cpuid_obj = $idx++;
Richard Levitted0d046e2002-01-27 15:52:37 +0000600my $idx_bn_obj = $idx++;
601my $idx_des_obj = $idx++;
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000602my $idx_aes_obj = $idx++;
Richard Levitted0d046e2002-01-27 15:52:37 +0000603my $idx_bf_obj = $idx++;
604my $idx_md5_obj = $idx++;
605my $idx_sha1_obj = $idx++;
606my $idx_cast_obj = $idx++;
607my $idx_rc4_obj = $idx++;
608my $idx_rmd160_obj = $idx++;
609my $idx_rc5_obj = $idx++;
Andy Polyakov0fbd4bf2005-12-16 11:53:31 +0000610my $idx_wp_obj = $idx++;
Andy Polyakov6a8517f2007-08-28 20:45:25 +0000611my $idx_cmll_obj = $idx++;
Andy Polyakovfa8e9212008-01-11 13:15:11 +0000612my $idx_perlasm_scheme = $idx++;
Richard Levitted0d046e2002-01-27 15:52:37 +0000613my $idx_dso_scheme = $idx++;
614my $idx_shared_target = $idx++;
615my $idx_shared_cflag = $idx++;
616my $idx_shared_ldflag = $idx++;
617my $idx_shared_extension = $idx++;
618my $idx_ranlib = $idx++;
Richard Levitte179add22002-08-01 20:28:16 +0000619my $idx_arflags = $idx++;
Andy Polyakovc23632d2009-02-09 15:11:22 +0000620my $idx_multilib = $idx++;
Richard Levitted0d046e2002-01-27 15:52:37 +0000621
Bodo Möllere5f30451999-04-29 21:52:08 +0000622my $prefix="";
Dr. Stephen Henson67275652009-08-10 14:48:40 +0000623my $libdir="";
Ulf Möller462ba4f1999-04-24 22:59:36 +0000624my $openssldir="";
Richard Levitte967d95f2001-04-04 15:50:30 +0000625my $exe_ext="";
Dr. Stephen Henson122276a2009-10-18 14:27:01 +0000626my $install_prefix= "$ENV{'INSTALL_PREFIX'}";
Andy Polyakovcbfb39d2006-10-21 13:38:16 +0000627my $cross_compile_prefix="";
Bodo Möller5f8d5c91999-04-29 16:10:09 +0000628my $no_threads=0;
629my $threads=0;
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000630my $no_shared=0; # but "no-shared" is default
631my $zlib=1; # but "no-zlib" is default
632my $no_krb5=0; # but "no-krb5" is implied unless "--with-krb5-..." is used
Dr. Stephen Hensond137b562006-11-30 13:39:34 +0000633my $no_rfc3779=1; # but "no-rfc3779" is default
Ben Laurie1641cb61998-12-28 17:08:48 +0000634my $no_asm=0;
Geoff Thorpebc2aada2000-04-06 07:09:45 +0000635my $no_dso=0;
Dr. Stephen Henson987beba2005-04-19 13:24:44 +0000636my $no_gmp=0;
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000637my @skip=();
Ben Laurie42ba5d22005-03-30 13:05:57 +0000638my $Makefile="Makefile";
Ben Laurie1641cb61998-12-28 17:08:48 +0000639my $des_locl="crypto/des/des_locl.h";
640my $des ="crypto/des/des.h";
641my $bn ="crypto/bn/bn.h";
642my $md2 ="crypto/md2/md2.h";
643my $rc4 ="crypto/rc4/rc4.h";
644my $rc4_locl="crypto/rc4/rc4_locl.h";
645my $idea ="crypto/idea/idea.h";
646my $rc2 ="crypto/rc2/rc2.h";
647my $bf ="crypto/bf/bf_locl.h";
648my $bn_asm ="bn_asm.o";
649my $des_enc="des_enc.o fcrypt_b.o";
Andy Polyakoved65fab2005-01-18 00:43:32 +0000650my $aes_enc="aes_core.o aes_cbc.o";
Ben Laurie1641cb61998-12-28 17:08:48 +0000651my $bf_enc ="bf_enc.o";
652my $cast_enc="c_enc.o";
Andy Polyakov28754622007-04-01 17:01:12 +0000653my $rc4_enc="rc4_enc.o rc4_skey.o";
Ben Laurie1641cb61998-12-28 17:08:48 +0000654my $rc5_enc="rc5_enc.o";
655my $md5_obj="";
656my $sha1_obj="";
657my $rmd160_obj="";
Andy Polyakov6a8517f2007-08-28 20:45:25 +0000658my $cmll_enc="camellia.o cmll_misc.o cmll_cbc.o";
Ulf Möller2613c1f1999-03-31 12:38:27 +0000659my $processor="";
Bodo Möller03964792001-03-09 13:04:06 +0000660my $default_ranlib;
Ulf Möller99aab161999-04-01 12:34:33 +0000661my $perl;
662
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000663
664# All of the following is disabled by default (RC5 was enabled before 0.9.8):
665
Bodo Möller7a762192008-12-02 01:21:39 +0000666my %disabled = ( # "what" => "comment" [or special keyword "experimental"]
Dr. Stephen Henson987beba2005-04-19 13:24:44 +0000667 "gmp" => "default",
Bodo Möller7a762192008-12-02 01:21:39 +0000668 "jpake" => "experimental",
Dr. Stephen Henson4e9de7a2009-07-08 08:49:17 +0000669 "md2" => "default",
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000670 "rc5" => "default",
Ben Laurie96ea4ae2006-11-27 14:18:05 +0000671 "rfc3779" => "default",
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000672 "shared" => "default",
Richard Levitteae3b4f22009-02-19 09:43:18 +0000673 "store" => "experimental",
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000674 "zlib" => "default",
675 "zlib-dynamic" => "default"
676 );
Bodo Möller7a762192008-12-02 01:21:39 +0000677my @experimental = ();
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000678
Bodo Möller7a762192008-12-02 01:21:39 +0000679# This is what $depflags will look like with the above defaults
680# (we need this to see if we should advise the user to run "make depend"):
Dr. Stephen Henson3ed36032009-08-12 17:30:37 +0000681my $default_depflags = " -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_STORE";
Bodo Möller7a762192008-12-02 01:21:39 +0000682
683# Explicit "no-..." options will be collected in %disabled along with the defaults.
684# To remove something from %disabled, use "enable-foo" (unless it's experimental).
685# For symmetry, "disable-foo" is a synonym for "no-foo".
686
687# For features called "experimental" here, a more explicit "experimental-foo" is needed to enable.
688# We will collect such requests in @experimental.
689# To avoid accidental use of experimental features, applications will have to use -DOPENSSL_EXPERIMENTAL_FOO.
Bodo Möllerab185b62005-03-13 19:46:58 +0000690
691
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000692my $no_sse2=0;
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000693
Ulf Möller462ba4f1999-04-24 22:59:36 +0000694&usage if ($#ARGV < 0);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000695
Richard Levittec59cb512000-08-17 10:23:45 +0000696my $flags;
697my $depflags;
Bodo Möller7a762192008-12-02 01:21:39 +0000698my $openssl_experimental_defines;
Richard Levittec59cb512000-08-17 10:23:45 +0000699my $openssl_algorithm_defines;
700my $openssl_thread_defines;
Richard Levittecf1b7d92001-02-19 16:06:34 +0000701my $openssl_sys_defines="";
Richard Levittec59cb512000-08-17 10:23:45 +0000702my $openssl_other_defines;
703my $libs;
Richard Levittec1269c82003-02-14 13:12:00 +0000704my $libkrb5="";
Richard Levittec59cb512000-08-17 10:23:45 +0000705my $target;
706my $options;
707my $symlink;
Richard Levitte451dc182002-06-13 20:42:35 +0000708my $make_depend=0;
Richard Levittef9b3bff2000-11-30 22:53:34 +0000709my %withargs=();
Richard Levittec59cb512000-08-17 10:23:45 +0000710
711my @argvcopy=@ARGV;
712my $argvstring="";
713my $argv_unprocessed=1;
714
715while($argv_unprocessed)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000716 {
Richard Levittec59cb512000-08-17 10:23:45 +0000717 $flags="";
718 $depflags="";
Bodo Möller7a762192008-12-02 01:21:39 +0000719 $openssl_experimental_defines="";
Richard Levittec59cb512000-08-17 10:23:45 +0000720 $openssl_algorithm_defines="";
721 $openssl_thread_defines="";
Richard Levittecf1b7d92001-02-19 16:06:34 +0000722 $openssl_sys_defines="";
Richard Levittec59cb512000-08-17 10:23:45 +0000723 $openssl_other_defines="";
724 $libs="";
725 $target="";
726 $options="";
727 $symlink=1;
728
729 $argv_unprocessed=0;
730 $argvstring=join(' ',@argvcopy);
731
732PROCESS_ARGS:
733 foreach (@argvcopy)
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000734 {
Richard Levittec59cb512000-08-17 10:23:45 +0000735 s /^-no-/no-/; # some people just can't read the instructions
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000736
737 # rewrite some options in "enable-..." form
738 s /^-?-?shared$/enable-shared/;
739 s /^threads$/enable-threads/;
740 s /^zlib$/enable-zlib/;
741 s /^zlib-dynamic$/enable-zlib-dynamic/;
742
743 if (/^no-(.+)$/ || /^disable-(.+)$/)
744 {
Bodo Möller7a762192008-12-02 01:21:39 +0000745 if (!($disabled{$1} eq "experimental"))
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000746 {
Bodo Möller7a762192008-12-02 01:21:39 +0000747 if ($1 eq "ssl")
748 {
749 $disabled{"ssl2"} = "option(ssl)";
750 $disabled{"ssl3"} = "option(ssl)";
751 }
752 elsif ($1 eq "tls")
753 {
754 $disabled{"tls1"} = "option(tls)"
755 }
756 else
757 {
758 $disabled{$1} = "option";
759 }
760 }
761 }
762 elsif (/^enable-(.+)$/ || /^experimental-(.+)$/)
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000763 {
Bodo Möller7a762192008-12-02 01:21:39 +0000764 my $algo = $1;
765 if ($disabled{$algo} eq "experimental")
766 {
767 die "You are requesting an experimental feature; please say 'experimental-$algo' if you are sure\n"
768 unless (/^experimental-/);
769 push @experimental, $algo;
770 }
771 delete $disabled{$algo};
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000772
Bodo Möller7a762192008-12-02 01:21:39 +0000773 $threads = 1 if ($algo eq "threads");
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000774 }
775 elsif (/^--test-sanity$/)
Richard Levitted0d046e2002-01-27 15:52:37 +0000776 {
777 exit(&test_sanity());
778 }
Dr. Stephen Henson0c28f272009-09-09 16:31:32 +0000779 elsif (/^--strict-warnings/)
780 {
781 $strict_warnings = 1;
782 }
Richard Levittec59cb512000-08-17 10:23:45 +0000783 elsif (/^reconfigure/ || /^reconf/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000784 {
Richard Levittec59cb512000-08-17 10:23:45 +0000785 if (open(IN,"<$Makefile"))
786 {
787 while (<IN>)
788 {
Richard Levitte67475a72006-04-03 09:15:15 +0000789 chomp;
Richard Levittec59cb512000-08-17 10:23:45 +0000790 if (/^CONFIGURE_ARGS=(.*)/)
791 {
792 $argvstring=$1;
793 @argvcopy=split(' ',$argvstring);
794 die "Incorrect data to reconfigure, please do a normal configuration\n"
795 if (grep(/^reconf/,@argvcopy));
796 print "Reconfiguring with: $argvstring\n";
797 $argv_unprocessed=1;
798 close(IN);
799 last PROCESS_ARGS;
800 }
801 }
802 close(IN);
803 }
804 die "Insufficient data to reconfigure, please do a normal configuration\n";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000805 }
Richard Levittec59cb512000-08-17 10:23:45 +0000806 elsif (/^386$/)
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000807 { $processor=386; }
Richard Levittec59cb512000-08-17 10:23:45 +0000808 elsif (/^rsaref$/)
Ralf S. Engelschall3eb0ed61999-03-06 14:35:03 +0000809 {
Richard Levitteccb96432000-11-08 17:51:37 +0000810 # No RSAref support any more since it's not needed.
811 # The check for the option is there so scripts aren't
812 # broken
Ulf Möller462ba4f1999-04-24 22:59:36 +0000813 }
Richard Levittec59cb512000-08-17 10:23:45 +0000814 elsif (/^[-+]/)
Ulf Möller462ba4f1999-04-24 22:59:36 +0000815 {
Andy Polyakovd719e602005-12-16 11:29:19 +0000816 if (/^-[lL](.*)$/ or /^-Wl,/)
Richard Levittec59cb512000-08-17 10:23:45 +0000817 {
818 $libs.=$_." ";
819 }
820 elsif (/^-[^-]/ or /^\+/)
821 {
822 $flags.=$_." ";
823 }
824 elsif (/^--prefix=(.*)$/)
825 {
826 $prefix=$1;
827 }
Dr. Stephen Henson67275652009-08-10 14:48:40 +0000828 elsif (/^--libdir=(.*)$/)
829 {
830 $libdir=$1;
831 }
Richard Levittec59cb512000-08-17 10:23:45 +0000832 elsif (/^--openssldir=(.*)$/)
833 {
834 $openssldir=$1;
835 }
836 elsif (/^--install.prefix=(.*)$/)
837 {
838 $install_prefix=$1;
839 }
Richard Levittef9b3bff2000-11-30 22:53:34 +0000840 elsif (/^--with-krb5-(dir|lib|include|flavor)=(.*)$/)
841 {
842 $withargs{"krb5-".$1}=$2;
843 }
Dr. Stephen Henson1291dfd2005-12-06 13:36:59 +0000844 elsif (/^--with-zlib-lib=(.*)$/)
Dr. Stephen Hensonad2695b2005-12-05 13:46:46 +0000845 {
Dr. Stephen Henson1291dfd2005-12-06 13:36:59 +0000846 $withargs{"zlib-lib"}=$1;
847 }
848 elsif (/^--with-zlib-include=(.*)$/)
849 {
850 $withargs{"zlib-include"}="-I$1";
Dr. Stephen Hensonad2695b2005-12-05 13:46:46 +0000851 }
Andy Polyakovcbfb39d2006-10-21 13:38:16 +0000852 elsif (/^--cross-compile-prefix=(.*)$/)
853 {
854 $cross_compile_prefix=$1;
855 }
Richard Levittec59cb512000-08-17 10:23:45 +0000856 else
857 {
858 print STDERR $usage;
859 exit(1);
860 }
Ralf S. Engelschall3eb0ed61999-03-06 14:35:03 +0000861 }
Richard Levittec59cb512000-08-17 10:23:45 +0000862 elsif ($_ =~ /^([^:]+):(.+)$/)
Bodo Möllere5f30451999-04-29 21:52:08 +0000863 {
Richard Levittec59cb512000-08-17 10:23:45 +0000864 eval "\$table{\$1} = \"$2\""; # allow $xxx constructs in the string
865 $target=$1;
Bodo Möllere5f30451999-04-29 21:52:08 +0000866 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000867 else
868 {
Richard Levittea761b892005-06-13 02:39:05 +0000869 die "target already defined - $target (offending arg: $_)\n" if ($target ne "");
Richard Levittec59cb512000-08-17 10:23:45 +0000870 $target=$_;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000871 }
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000872
873 unless ($_ eq $target || /^no-/ || /^disable-/)
874 {
875 # "no-..." follows later after implied disactivations
876 # have been derived. (Don't take this too seroiusly,
877 # we really only write OPTIONS to the Makefile out of
878 # nostalgia.)
879
880 if ($options eq "")
881 { $options = $_; }
882 else
883 { $options .= " ".$_; }
Richard Levittec59cb512000-08-17 10:23:45 +0000884 }
Bodo Möllerfbabb751999-07-09 12:00:34 +0000885 }
886 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000887
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000888
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000889
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000890if ($processor eq "386")
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000891 {
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000892 $disabled{"sse2"} = "forced";
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000893 }
894
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000895if (!defined($withargs{"krb5-flavor"}) || $withargs{"krb5-flavor"} eq "")
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000896 {
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000897 $disabled{"krb5"} = "krb5-flavor not specified";
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000898 }
899
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000900if (!defined($disabled{"zlib-dynamic"}))
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000901 {
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000902 # "zlib-dynamic" was specifically enabled, so enable "zlib"
903 delete $disabled{"zlib"};
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000904 }
905
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000906if (defined($disabled{"rijndael"}))
907 {
908 $disabled{"aes"} = "forced";
909 }
910if (defined($disabled{"des"}))
911 {
912 $disabled{"mdc2"} = "forced";
913 }
914if (defined($disabled{"ec"}))
915 {
916 $disabled{"ecdsa"} = "forced";
917 $disabled{"ecdh"} = "forced";
918 }
919
920# SSL 2.0 requires MD5 and RSA
921if (defined($disabled{"md5"}) || defined($disabled{"rsa"}))
922 {
923 $disabled{"ssl2"} = "forced";
924 }
925
926# SSL 3.0 and TLS requires MD5 and SHA and either RSA or DSA+DH
927if (defined($disabled{"md5"}) || defined($disabled{"sha"})
928 || (defined($disabled{"rsa"})
929 && (defined($disabled{"dsa"}) || defined($disabled{"dh"}))))
930 {
931 $disabled{"ssl3"} = "forced";
932 $disabled{"tls1"} = "forced";
933 }
934
Bodo Möllerf1fd4542006-01-03 03:27:19 +0000935if (defined($disabled{"tls1"}))
936 {
937 $disabled{"tlsext"} = "forced";
938 }
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000939
Dr. Stephen Hensond4f03392009-04-26 22:18:22 +0000940if (defined($disabled{"ec"}) || defined($disabled{"dsa"})
941 || defined($disabled{"dh"}))
Dr. Stephen Hensonef236ec2009-04-23 16:32:42 +0000942 {
943 $disabled{"gost"} = "forced";
944 }
945
Bodo Möller436a3761999-05-28 23:18:51 +0000946if ($target eq "TABLE") {
947 foreach $target (sort keys %table) {
948 print_table_entry($target);
949 }
Bodo Möller436a3761999-05-28 23:18:51 +0000950 exit 0;
951}
952
Ulf Möller10a926c2000-02-21 00:55:45 +0000953if ($target eq "LIST") {
954 foreach (sort keys %table) {
955 print;
956 print "\n";
957 }
958 exit 0;
959}
960
Richard Levitte49e04542002-02-14 12:28:24 +0000961if ($target =~ m/^CygWin32(-.*)$/) {
962 $target = "Cygwin".$1;
963}
964
Richard Levittec59cb512000-08-17 10:23:45 +0000965print "Configuring for $target\n";
966
Ulf Möller462ba4f1999-04-24 22:59:36 +0000967&usage if (!defined($table{$target}));
968
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000969
970foreach (sort (keys %disabled))
971 {
972 $options .= " no-$_";
973
974 printf " no-%-12s %-10s", $_, "[$disabled{$_}]";
975
976 if (/^dso$/)
977 { $no_dso = 1; }
978 elsif (/^threads$/)
979 { $no_threads = 1; }
980 elsif (/^shared$/)
981 { $no_shared = 1; }
982 elsif (/^zlib$/)
983 { $zlib = 0; }
Dr. Stephen Hensonfbf002b2005-11-06 17:58:26 +0000984 elsif (/^static-engine$/)
985 { }
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000986 elsif (/^zlib-dynamic$/)
987 { }
988 elsif (/^symlinks$/)
989 { $symlink = 0; }
990 elsif (/^sse2$/)
991 { $no_sse2 = 1; }
992 else
993 {
994 my ($ALGO, $algo);
995 ($ALGO = $algo = $_) =~ tr/[a-z]/[A-Z]/;
996
997 if (/^asm$/ || /^err$/ || /^hw$/ || /^hw-/)
998 {
999 $openssl_other_defines .= "#define OPENSSL_NO_$ALGO\n";
1000 print " OPENSSL_NO_$ALGO";
1001
Andy Polyakov5df70a92005-06-22 23:44:44 +00001002 if (/^err$/) { $flags .= "-DOPENSSL_NO_ERR "; }
1003 elsif (/^asm$/) { $no_asm = 1; }
Bodo Möllerc9a112f2005-02-22 10:29:51 +00001004 }
1005 else
1006 {
1007 $openssl_algorithm_defines .= "#define OPENSSL_NO_$ALGO\n";
1008 print " OPENSSL_NO_$ALGO";
1009
1010 if (/^krb5$/)
1011 { $no_krb5 = 1; }
1012 else
1013 {
1014 push @skip, $algo;
1015 print " (skip dir)";
Bodo Möllerab185b62005-03-13 19:46:58 +00001016
Bodo Möller7a762192008-12-02 01:21:39 +00001017 $depflags .= " -DOPENSSL_NO_$ALGO";
Bodo Möllerc9a112f2005-02-22 10:29:51 +00001018 }
1019 }
1020 }
1021
1022 print "\n";
1023 }
1024
Bodo Möller7a762192008-12-02 01:21:39 +00001025my $exp_cflags = "";
1026foreach (sort @experimental)
1027 {
1028 my $ALGO;
1029 ($ALGO = $_) =~ tr/[a-z]/[A-Z]/;
1030
1031 # opensslconf.h will set OPENSSL_NO_... unless OPENSSL_EXPERIMENTAL_... is defined
1032 $openssl_experimental_defines .= "#define OPENSSL_NO_$ALGO\n";
1033 $exp_cflags .= " -DOPENSSL_EXPERIMENTAL_$ALGO";
1034 }
Bodo Möllerc9a112f2005-02-22 10:29:51 +00001035
Richard Levitte4d8743f2003-11-28 13:10:58 +00001036my $IsMK1MF=scalar grep /^$target$/,@MK1MF_Builds;
Dr. Stephen Hensona1e464f1999-04-25 20:57:09 +00001037
Andy Polyakov9be54812008-11-03 21:15:07 +00001038$exe_ext=".exe" if ($target eq "Cygwin" || $target eq "DJGPP" || $target =~ /^mingw/);
Dr. Stephen Hensoneef0c1f2008-01-03 22:43:04 +00001039$exe_ext=".nlm" if ($target =~ /netware/);
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001040$exe_ext=".pm" if ($target =~ /vos/);
Bodo Möllere5f30451999-04-29 21:52:08 +00001041$openssldir="/usr/local/ssl" if ($openssldir eq "" and $prefix eq "");
1042$prefix=$openssldir if $prefix eq "";
Ulf Möller462ba4f1999-04-24 22:59:36 +00001043
Richard Levitte28a80032004-06-28 22:01:37 +00001044$default_ranlib= &which("ranlib") or $default_ranlib="true";
1045$perl=$ENV{'PERL'} or $perl=&which("perl5") or $perl=&which("perl")
1046 or $perl="perl";
Dr. Stephen Hensondafd8332009-10-28 13:55:44 +00001047my $make = $ENV{'MAKE'} || "make";
Richard Levitte28a80032004-06-28 22:01:37 +00001048
Dr. Stephen Henson34775922009-10-15 23:43:54 +00001049$cross_compile_prefix=$ENV{'CROSS_COMPILE'} if $cross_compile_prefix eq "";
Dr. Stephen Hensonf99f41c2009-10-07 16:41:14 +00001050
Ulf Möller462ba4f1999-04-24 22:59:36 +00001051chop $openssldir if $openssldir =~ /\/$/;
Dr. Stephen Hensonbc645192008-11-11 10:17:54 +00001052chop $prefix if $prefix =~ /.\/$/;
Ulf Möller462ba4f1999-04-24 22:59:36 +00001053
Bodo Möllere5f30451999-04-29 21:52:08 +00001054$openssldir=$prefix . "/ssl" if $openssldir eq "";
Richard Levitte451dc182002-06-13 20:42:35 +00001055$openssldir=$prefix . "/" . $openssldir if $openssldir !~ /(^\/|^[a-zA-Z]:[\\\/])/;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001056
Ben Laurieefadf601999-03-07 15:21:08 +00001057
Richard Levitte4d8743f2003-11-28 13:10:58 +00001058print "IsMK1MF=$IsMK1MF\n";
Ben Laurieefadf601999-03-07 15:21:08 +00001059
Richard Levitted0d046e2002-01-27 15:52:37 +00001060my @fields = split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
1061my $cc = $fields[$idx_cc];
Ben Laurie7f625322009-01-18 12:06:37 +00001062# Allow environment CC to override compiler...
1063if($ENV{CC}) {
1064 $cc = $ENV{CC};
1065}
Richard Levitted0d046e2002-01-27 15:52:37 +00001066my $cflags = $fields[$idx_cflags];
1067my $unistd = $fields[$idx_unistd];
1068my $thread_cflag = $fields[$idx_thread_cflag];
1069my $sys_id = $fields[$idx_sys_id];
1070my $lflags = $fields[$idx_lflags];
1071my $bn_ops = $fields[$idx_bn_ops];
Andy Polyakov14e21f82004-07-26 20:18:55 +00001072my $cpuid_obj = $fields[$idx_cpuid_obj];
Richard Levitted0d046e2002-01-27 15:52:37 +00001073my $bn_obj = $fields[$idx_bn_obj];
1074my $des_obj = $fields[$idx_des_obj];
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001075my $aes_obj = $fields[$idx_aes_obj];
Richard Levitted0d046e2002-01-27 15:52:37 +00001076my $bf_obj = $fields[$idx_bf_obj];
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001077my $md5_obj = $fields[$idx_md5_obj];
1078my $sha1_obj = $fields[$idx_sha1_obj];
Richard Levitted0d046e2002-01-27 15:52:37 +00001079my $cast_obj = $fields[$idx_cast_obj];
1080my $rc4_obj = $fields[$idx_rc4_obj];
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001081my $rmd160_obj = $fields[$idx_rmd160_obj];
Richard Levitted0d046e2002-01-27 15:52:37 +00001082my $rc5_obj = $fields[$idx_rc5_obj];
Andy Polyakov0fbd4bf2005-12-16 11:53:31 +00001083my $wp_obj = $fields[$idx_wp_obj];
Andy Polyakov6a8517f2007-08-28 20:45:25 +00001084my $cmll_obj = $fields[$idx_cmll_obj];
Andy Polyakovfa8e9212008-01-11 13:15:11 +00001085my $perlasm_scheme = $fields[$idx_perlasm_scheme];
Richard Levitted0d046e2002-01-27 15:52:37 +00001086my $dso_scheme = $fields[$idx_dso_scheme];
1087my $shared_target = $fields[$idx_shared_target];
1088my $shared_cflag = $fields[$idx_shared_cflag];
1089my $shared_ldflag = $fields[$idx_shared_ldflag];
1090my $shared_extension = $fields[$idx_shared_extension];
Dr. Stephen Henson970097a2009-10-28 14:00:29 +00001091my $ranlib = $ENV{'RANLIB'} || $fields[$idx_ranlib];
1092my $ar = $ENV{'AR'} || "ar";
Richard Levitte179add22002-08-01 20:28:16 +00001093my $arflags = $fields[$idx_arflags];
Andy Polyakovc23632d2009-02-09 15:11:22 +00001094my $multilib = $fields[$idx_multilib];
Richard Levitted0d046e2002-01-27 15:52:37 +00001095
Andy Polyakov6a9d28f2009-12-29 10:33:37 +00001096$libdir="lib$multilib" if $libdir eq "";
1097
Bodo Möller7a762192008-12-02 01:21:39 +00001098$cflags = "$cflags$exp_cflags";
1099
Andy Polyakovd6c76452007-07-31 18:24:41 +00001100# '%' in $lflags is used to split flags to "pre-" and post-flags
1101my ($prelflags,$postlflags)=split('%',$lflags);
1102if (defined($postlflags)) { $lflags=$postlflags; }
1103else { $lflags=$prelflags; undef $prelflags; }
1104
Richard Levitte2964ba82003-01-11 11:40:39 +00001105my $no_shared_warn=0;
Andy Polyakov14bcdb02005-01-24 15:58:25 +00001106my $no_user_cflags=0;
Richard Levitte2964ba82003-01-11 11:40:39 +00001107
Andy Polyakov14bcdb02005-01-24 15:58:25 +00001108if ($flags ne "") { $cflags="$flags$cflags"; }
1109else { $no_user_cflags=1; }
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001110
Richard Levittef9b3bff2000-11-30 22:53:34 +00001111# Kerberos settings. The flavor must be provided from outside, either through
1112# the script "config" or manually.
Bodo Möllerc9a112f2005-02-22 10:29:51 +00001113if (!$no_krb5)
Richard Levittef9b3bff2000-11-30 22:53:34 +00001114 {
Richard Levitte2a1ef752001-07-09 21:46:58 +00001115 my ($lresolv, $lpath, $lext);
Richard Levittef9b3bff2000-11-30 22:53:34 +00001116 if ($withargs{"krb5-flavor"} =~ /^[Hh]eimdal$/)
1117 {
Richard Levittede868e02002-11-26 09:19:17 +00001118 die "Sorry, Heimdal is currently not supported\n";
1119 }
1120 ##### HACK to force use of Heimdal.
1121 ##### WARNING: Since we don't really have adequate support for Heimdal,
1122 ##### using this will break the build. You'll have to make
1123 ##### changes to the source, and if you do, please send
1124 ##### patches to openssl-dev@openssl.org
1125 if ($withargs{"krb5-flavor"} =~ /^force-[Hh]eimdal$/)
1126 {
1127 warn "Heimdal isn't really supported. Your build WILL break\n";
Richard Levitteec716412002-11-26 15:27:05 +00001128 warn "If you fix the problems, please send a patch to openssl-dev\@openssl.org\n";
Richard Levittef9b3bff2000-11-30 22:53:34 +00001129 $withargs{"krb5-dir"} = "/usr/heimdal"
1130 if $withargs{"krb5-dir"} eq "";
1131 $withargs{"krb5-lib"} = "-L".$withargs{"krb5-dir"}.
1132 "/lib -lgssapi -lkrb5 -lcom_err"
Dr. Stephen Hensonbf2336f2005-04-21 00:46:28 +00001133 if $withargs{"krb5-lib"} eq "" && !$IsMK1MF;
Richard Levittef9b3bff2000-11-30 22:53:34 +00001134 $cflags="-DKRB5_HEIMDAL $cflags";
1135 }
Richard Levitte2a1ef752001-07-09 21:46:58 +00001136 if ($withargs{"krb5-flavor"} =~ /^[Mm][Ii][Tt]/)
Richard Levittef9b3bff2000-11-30 22:53:34 +00001137 {
1138 $withargs{"krb5-dir"} = "/usr/kerberos"
1139 if $withargs{"krb5-dir"} eq "";
1140 $withargs{"krb5-lib"} = "-L".$withargs{"krb5-dir"}.
1141 "/lib -lgssapi_krb5 -lkrb5 -lcom_err -lk5crypto"
Dr. Stephen Hensonbf2336f2005-04-21 00:46:28 +00001142 if $withargs{"krb5-lib"} eq "" && !$IsMK1MF;
Richard Levittef9b3bff2000-11-30 22:53:34 +00001143 $cflags="-DKRB5_MIT $cflags";
Richard Levitte2a1ef752001-07-09 21:46:58 +00001144 $withargs{"krb5-flavor"} =~ s/^[Mm][Ii][Tt][._-]*//;
1145 if ($withargs{"krb5-flavor"} =~ /^1[._-]*[01]/)
1146 {
1147 $cflags="-DKRB5_MIT_OLD11 $cflags";
1148 }
Richard Levittef9b3bff2000-11-30 22:53:34 +00001149 }
Richard Levitte2a1ef752001-07-09 21:46:58 +00001150 LRESOLV:
1151 foreach $lpath ("/lib", "/usr/lib")
1152 {
1153 foreach $lext ("a", "so")
1154 {
1155 $lresolv = "$lpath/libresolv.$lext";
1156 last LRESOLV if (-r "$lresolv");
1157 $lresolv = "";
1158 }
1159 }
1160 $withargs{"krb5-lib"} .= " -lresolv"
Richard Levitte95649972002-12-19 21:55:48 +00001161 if ("$lresolv" ne "");
Richard Levittef9b3bff2000-11-30 22:53:34 +00001162 $withargs{"krb5-include"} = "-I".$withargs{"krb5-dir"}."/include"
Richard Levitte2a1ef752001-07-09 21:46:58 +00001163 if $withargs{"krb5-include"} eq "" &&
1164 $withargs{"krb5-dir"} ne "";
Richard Levittef9b3bff2000-11-30 22:53:34 +00001165 }
1166
Geoff Thorpebc2aada2000-04-06 07:09:45 +00001167# The DSO code currently always implements all functions so that no
1168# applications will have to worry about that from a compilation point
1169# of view. However, the "method"s may return zero unless that platform
1170# has support compiled in for them. Currently each method is enabled
1171# by a define "DSO_<name>" ... we translate the "dso_scheme" config
1172# string entry into using the following logic;
Geoff Thorpeeca57e92000-04-06 11:56:45 +00001173my $dso_cflags;
Geoff Thorpebc2aada2000-04-06 07:09:45 +00001174if (!$no_dso && $dso_scheme ne "")
1175 {
Geoff Thorpe9ec01262000-04-04 22:32:19 +00001176 $dso_scheme =~ tr/[a-z]/[A-Z]/;
Geoff Thorpebc2aada2000-04-06 07:09:45 +00001177 if ($dso_scheme eq "DLFCN")
1178 {
Geoff Thorpeeca57e92000-04-06 11:56:45 +00001179 $dso_cflags = "-DDSO_DLFCN -DHAVE_DLFCN_H";
Geoff Thorpebc2aada2000-04-06 07:09:45 +00001180 }
1181 elsif ($dso_scheme eq "DLFCN_NO_H")
1182 {
Geoff Thorpeeca57e92000-04-06 11:56:45 +00001183 $dso_cflags = "-DDSO_DLFCN";
Geoff Thorpebc2aada2000-04-06 07:09:45 +00001184 }
1185 else
1186 {
Geoff Thorpeeca57e92000-04-06 11:56:45 +00001187 $dso_cflags = "-DDSO_$dso_scheme";
Geoff Thorpebc2aada2000-04-06 07:09:45 +00001188 }
Geoff Thorpeeca57e92000-04-06 11:56:45 +00001189 $cflags = "$dso_cflags $cflags";
Geoff Thorpebc2aada2000-04-06 07:09:45 +00001190 }
Geoff Thorpe9ec01262000-04-04 22:32:19 +00001191
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001192my $thread_cflags;
Richard Levittefb044c52000-02-18 09:11:37 +00001193my $thread_defines;
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001194if ($thread_cflag ne "(unknown)" && !$no_threads)
1195 {
1196 # If we know how to do it, support threads by default.
1197 $threads = 1;
1198 }
Andy Polyakov14bcdb02005-01-24 15:58:25 +00001199if ($thread_cflag eq "(unknown)" && $threads)
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001200 {
Andy Polyakov14bcdb02005-01-24 15:58:25 +00001201 # If the user asked for "threads", [s]he is also expected to
1202 # provide any system-dependent compiler options that are
1203 # necessary.
1204 if ($no_user_cflags)
1205 {
1206 print "You asked for multi-threading support, but didn't\n";
1207 print "provide any system-specific compiler options\n";
1208 exit(1);
1209 }
Richard Levittecf1b7d92001-02-19 16:06:34 +00001210 $thread_cflags="-DOPENSSL_THREADS $cflags" ;
1211 $thread_defines .= "#define OPENSSL_THREADS\n";
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001212 }
1213else
1214 {
Richard Levittecf1b7d92001-02-19 16:06:34 +00001215 $thread_cflags="-DOPENSSL_THREADS $thread_cflag $cflags";
1216 $thread_defines .= "#define OPENSSL_THREADS\n";
Bodo Möllera7b991b2000-02-24 18:19:50 +00001217# my $def;
1218# foreach $def (split ' ',$thread_cflag)
1219# {
1220# if ($def =~ s/^-D// && $def !~ /^_/)
1221# {
1222# $thread_defines .= "#define $def\n";
1223# }
1224# }
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001225 }
1226
Richard Levitte95649972002-12-19 21:55:48 +00001227$lflags="$libs$lflags" if ($libs ne "");
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001228
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +00001229if ($no_asm)
1230 {
Andy Polyakovac71d812008-12-16 07:26:53 +00001231 $cpuid_obj=$bn_obj=
1232 $des_obj=$aes_obj=$bf_obj=$cast_obj=$rc4_obj=$rc5_obj=$cmll_obj=
1233 $sha1_obj=$md5_obj=$rmd160_obj=$wp_obj="";
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +00001234 }
1235
Andy Polyakov6f7ac8e2002-12-13 17:56:14 +00001236if (!$no_shared)
1237 {
1238 $cast_obj=""; # CAST assembler is not PIC
1239 }
1240
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001241if ($threads)
1242 {
Andy Polyakov14bcdb02005-01-24 15:58:25 +00001243 $cflags=$thread_cflags;
Richard Levittee452de92001-07-12 09:11:14 +00001244 $openssl_thread_defines .= $thread_defines;
1245 }
1246
1247if ($zlib)
1248 {
1249 $cflags = "-DZLIB $cflags";
Bodo Möllerc9a112f2005-02-22 10:29:51 +00001250 if (defined($disabled{"zlib-dynamic"}))
1251 {
Dr. Stephen Hensoncc7399e2009-04-07 16:33:26 +00001252 if (defined($withargs{"zlib-lib"}))
1253 {
1254 $lflags = "$lflags -L" . $withargs{"zlib-lib"} . " -lz";
1255 }
1256 else
1257 {
1258 $lflags = "$lflags -lz";
1259 }
Bodo Möllerc9a112f2005-02-22 10:29:51 +00001260 }
1261 else
1262 {
1263 $cflags = "-DZLIB_SHARED $cflags";
1264 }
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001265 }
1266
Richard Levittef4316c32000-07-24 20:36:46 +00001267# You will find shlib_mark1 and shlib_mark2 explained in Makefile.org
Richard Levittea22fb392000-10-13 15:25:06 +00001268my $shared_mark = "";
Andy Polyakov6f7ac8e2002-12-13 17:56:14 +00001269if ($shared_target eq "")
1270 {
Richard Levitte2964ba82003-01-11 11:40:39 +00001271 $no_shared_warn = 1 if !$no_shared;
Andy Polyakov6f7ac8e2002-12-13 17:56:14 +00001272 $no_shared = 1;
1273 }
1274if (!$no_shared)
Richard Levitteb436a982000-07-21 15:08:53 +00001275 {
Richard Levittea22fb392000-10-13 15:25:06 +00001276 if ($shared_cflag ne "")
1277 {
Andy Polyakov28e276f2003-01-02 23:26:46 +00001278 $cflags = "$shared_cflag -DOPENSSL_PIC $cflags";
Richard Levittea22fb392000-10-13 15:25:06 +00001279 }
Richard Levitted2dcf4f2000-10-09 00:48:30 +00001280 }
Richard Levitteb436a982000-07-21 15:08:53 +00001281
Dr. Stephen Hensonfbf002b2005-11-06 17:58:26 +00001282if (!$IsMK1MF)
Richard Levitteecd45312002-10-11 18:06:08 +00001283 {
Lutz Jänicke4c1a6e02008-04-17 10:19:16 +00001284 # add {no-}static-engine to options to allow mkdef.pl to work without extra arguments
Dr. Stephen Hensonfbf002b2005-11-06 17:58:26 +00001285 if ($no_shared)
1286 {
1287 $openssl_other_defines.="#define OPENSSL_NO_DYNAMIC_ENGINE\n";
Lutz Jänicke4c1a6e02008-04-17 10:19:16 +00001288 $options.=" static-engine";
Dr. Stephen Hensonfbf002b2005-11-06 17:58:26 +00001289 }
1290 else
1291 {
1292 $openssl_other_defines.="#define OPENSSL_NO_STATIC_ENGINE\n";
Lutz Jänicke4c1a6e02008-04-17 10:19:16 +00001293 $options.=" no-static-engine";
Dr. Stephen Hensonfbf002b2005-11-06 17:58:26 +00001294 }
Richard Levitte6cb68622002-10-24 19:09:03 +00001295 }
Richard Levitteecd45312002-10-11 18:06:08 +00001296
Andy Polyakovbeef7142009-12-27 20:38:32 +00001297$cpuid_obj.=" uplink.o uplink-x86.o" if ($cflags =~ /\-DOPENSSL_USE_APPLINK/);
Andy Polyakov1187ee72007-09-14 19:32:33 +00001298
Andy Polyakovc313e322007-09-16 12:23:47 +00001299#
1300# Platform fix-ups
1301#
1302if ($target =~ /\-icc$/) # Intel C compiler
Andy Polyakov1a979202004-03-28 21:27:47 +00001303 {
Andy Polyakov1187ee72007-09-14 19:32:33 +00001304 my $iccver=0;
1305 if (open(FD,"$cc -V 2>&1 |"))
1306 {
1307 while(<FD>) { $iccver=$1 if (/Version ([0-9]+)\./); }
1308 close(FD);
1309 }
Andy Polyakov1a979202004-03-28 21:27:47 +00001310 if ($iccver>=8)
1311 {
1312 # Eliminate unnecessary dependency from libirc.a. This is
1313 # essential for shared library support, as otherwise
1314 # apps/openssl can end up in endless loop upon startup...
1315 $cflags.=" -Dmemcpy=__builtin_memcpy -Dmemset=__builtin_memset";
1316 }
Andy Polyakov1187ee72007-09-14 19:32:33 +00001317 if ($iccver>=9)
1318 {
1319 $cflags.=" -i-static";
1320 $cflags=~s/\-no_cpprt/-no-cpprt/;
1321 }
1322 if ($iccver>=10)
1323 {
1324 $cflags=~s/\-i\-static/-static-intel/;
1325 }
Andy Polyakov1a979202004-03-28 21:27:47 +00001326 }
1327
Andy Polyakovc313e322007-09-16 12:23:47 +00001328# Unlike other OSes (like Solaris, Linux, Tru64, IRIX) BSD run-time
1329# linkers (tested OpenBSD, NetBSD and FreeBSD) "demand" RPATH set on
1330# .so objects. Apparently application RPATH is not global and does
1331# not apply to .so linked with other .so. Problem manifests itself
1332# when libssl.so fails to load libcrypto.so. One can argue that we
1333# should engrave this into Makefile.shared rules or into BSD-* config
1334# lines above. Meanwhile let's try to be cautious and pass -rpath to
1335# linker only when --prefix is not /usr.
1336if ($target =~ /^BSD\-/)
1337 {
1338 $shared_ldflag.=" -Wl,-rpath,\$(LIBRPATH)" if ($prefix !~ m|^/usr[/]*$|);
1339 }
1340
Richard Levittecf1b7d92001-02-19 16:06:34 +00001341if ($sys_id ne "")
1342 {
Richard Levitte543105a2003-03-20 23:52:41 +00001343 #$cflags="-DOPENSSL_SYSNAME_$sys_id $cflags";
Richard Levittecf1b7d92001-02-19 16:06:34 +00001344 $openssl_sys_defines="#define OPENSSL_SYSNAME_$sys_id\n";
1345 }
1346
Bodo Möller03964792001-03-09 13:04:06 +00001347if ($ranlib eq "")
1348 {
1349 $ranlib = $default_ranlib;
1350 }
1351
Dr. Stephen Henson1750ebc1999-02-14 22:47:21 +00001352#my ($bn1)=split(/\s+/,$bn_obj);
1353#$bn1 = "" unless defined $bn1;
1354#$bn1=$bn_asm unless ($bn1 =~ /\.o$/);
1355#$bn_obj="$bn1";
1356
Bodo Möllerc9a112f2005-02-22 10:29:51 +00001357$cpuid_obj="" if ($processor eq "386");
Andy Polyakovf8c469d2004-08-02 22:41:19 +00001358
Dr. Stephen Henson1750ebc1999-02-14 22:47:21 +00001359$bn_obj = $bn_asm unless $bn_obj ne "";
Bodo Möllerd05a4742008-05-01 18:48:20 +00001360# bn-586 is the only one implementing bn_*_part_words
1361$cflags.=" -DOPENSSL_BN_ASM_PART_WORDS" if ($bn_obj =~ /bn-586/);
Andy Polyakov4287ade2008-01-11 11:59:37 +00001362$cflags.=" -DOPENSSL_IA32_SSE2" if (!$no_sse2 && $bn_obj =~ /86/);
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +00001363
Bodo Möllerd05a4742008-05-01 18:48:20 +00001364$cflags.=" -DOPENSSL_BN_ASM_MONT" if ($bn_obj =~ /-mont/);
Andy Polyakov5ac7bde2005-10-07 14:18:06 +00001365
Andy Polyakovb2dba9b2007-05-14 21:35:25 +00001366$cpuid_obj="mem_clr.o" unless ($cpuid_obj =~ /\.o$/);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001367$des_obj=$des_enc unless ($des_obj =~ /\.o$/);
1368$bf_obj=$bf_enc unless ($bf_obj =~ /\.o$/);
1369$cast_obj=$cast_enc unless ($cast_obj =~ /\.o$/);
1370$rc4_obj=$rc4_enc unless ($rc4_obj =~ /\.o$/);
1371$rc5_obj=$rc5_enc unless ($rc5_obj =~ /\.o$/);
1372if ($sha1_obj =~ /\.o$/)
1373 {
1374# $sha1_obj=$sha1_enc;
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001375 $cflags.=" -DSHA1_ASM" if ($sha1_obj =~ /sx86/ || $sha1_obj =~ /sha1/);
1376 $cflags.=" -DSHA256_ASM" if ($sha1_obj =~ /sha256/);
1377 $cflags.=" -DSHA512_ASM" if ($sha1_obj =~ /sha512/);
Andy Polyakov69216cc2007-07-24 14:41:20 +00001378 if ($sha1_obj =~ /sse2/)
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001379 { if ($no_sse2)
1380 { $sha1_obj =~ s/\S*sse2\S+//; }
1381 elsif ($cflags !~ /OPENSSL_IA32_SSE2/)
1382 { $cflags.=" -DOPENSSL_IA32_SSE2"; }
1383 }
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001384 }
1385if ($md5_obj =~ /\.o$/)
1386 {
1387# $md5_obj=$md5_enc;
1388 $cflags.=" -DMD5_ASM";
1389 }
1390if ($rmd160_obj =~ /\.o$/)
1391 {
1392# $rmd160_obj=$rmd160_enc;
1393 $cflags.=" -DRMD160_ASM";
1394 }
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001395if ($aes_obj =~ /\.o$/)
1396 {
1397 $cflags.=" -DAES_ASM";
Andy Polyakovd64a7232009-04-27 05:55:13 +00001398 $aes_obj =~ s/\s*aesni\-x86\.o// if ($no_sse2);
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001399 }
Andy Polyakov7de4b5b2005-01-09 16:01:58 +00001400else {
1401 $aes_obj=$aes_enc;
1402 }
Andy Polyakov4c5e19b2005-12-16 13:23:57 +00001403$wp_obj="" if ($wp_obj =~ /mmx/ && $processor eq "386");
Andy Polyakoved266042005-12-16 12:55:33 +00001404if ($wp_obj =~ /\.o$/)
1405 {
Andy Polyakov4c5e19b2005-12-16 13:23:57 +00001406 $cflags.=" -DWHIRLPOOL_ASM";
1407 }
1408else {
1409 $wp_obj="wp_block.o";
Andy Polyakoved266042005-12-16 12:55:33 +00001410 }
Andy Polyakov6a8517f2007-08-28 20:45:25 +00001411$cmll_obj=$cmll_enc unless ($cmll_obj =~ /.o$/);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001412
Richard Levitte1ed0c662002-05-30 18:06:35 +00001413# "Stringify" the C flags string. This permits it to be made part of a string
1414# and works as well on command lines.
1415$cflags =~ s/([\\\"])/\\\1/g;
1416
Ulf Möller09739101999-04-28 16:16:31 +00001417my $version = "unknown";
Dr. Stephen Hensonfc6a6a12002-10-04 21:22:47 +00001418my $version_num = "unknown";
Ulf Möller09739101999-04-28 16:16:31 +00001419my $major = "unknown";
1420my $minor = "unknown";
Richard Levitteb436a982000-07-21 15:08:53 +00001421my $shlib_version_number = "unknown";
1422my $shlib_version_history = "unknown";
1423my $shlib_major = "unknown";
1424my $shlib_minor = "unknown";
Ulf Möller09739101999-04-28 16:16:31 +00001425
1426open(IN,'<crypto/opensslv.h') || die "unable to read opensslv.h:$!\n";
1427while (<IN>)
1428 {
1429 $version=$1 if /OPENSSL.VERSION.TEXT.*OpenSSL (\S+) /;
Dr. Stephen Hensonfc6a6a12002-10-04 21:22:47 +00001430 $version_num=$1 if /OPENSSL.VERSION.NUMBER.*0x(\S+)/;
Richard Levitteb436a982000-07-21 15:08:53 +00001431 $shlib_version_number=$1 if /SHLIB_VERSION_NUMBER *"([^"]+)"/;
1432 $shlib_version_history=$1 if /SHLIB_VERSION_HISTORY *"([^"]*)"/;
Ulf Möller09739101999-04-28 16:16:31 +00001433 }
1434close(IN);
Richard Levitteb436a982000-07-21 15:08:53 +00001435if ($shlib_version_history ne "") { $shlib_version_history .= ":"; }
Ulf Möller09739101999-04-28 16:16:31 +00001436
Ulf Möller1fac96e1999-05-20 17:28:19 +00001437if ($version =~ /(^[0-9]*)\.([0-9\.]*)/)
Ulf Möller09739101999-04-28 16:16:31 +00001438 {
1439 $major=$1;
1440 $minor=$2;
1441 }
1442
Richard Levitteb436a982000-07-21 15:08:53 +00001443if ($shlib_version_number =~ /(^[0-9]*)\.([0-9\.]*)/)
1444 {
1445 $shlib_major=$1;
1446 $shlib_minor=$2;
1447 }
1448
Dr. Stephen Henson0c28f272009-09-09 16:31:32 +00001449if ($strict_warnings)
1450 {
1451 my $wopt;
1452 die "ERROR --strict-warnings requires gcc" unless ($cc =~ /gcc$/);
1453 foreach $wopt (split /\s+/, $gcc_devteam_warn)
1454 {
1455 $cflags .= " $wopt" unless ($cflags =~ /$wopt/)
1456 }
1457 }
1458
Ben Laurief2d4be31998-12-28 22:05:44 +00001459open(IN,'<Makefile.org') || die "unable to read Makefile.org:$!\n";
Richard Levittec2aa4f22002-07-16 08:53:32 +00001460unlink("$Makefile.new") || die "unable to remove old $Makefile.new:$!\n" if -e "$Makefile.new";
1461open(OUT,">$Makefile.new") || die "unable to create $Makefile.new:$!\n";
Richard Levittef1d712c2000-01-11 13:07:21 +00001462print OUT "### Generated automatically from Makefile.org by Configure.\n\n";
Ulf Möllerf5d7a031999-04-27 01:14:46 +00001463my $sdirs=0;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001464while (<IN>)
1465 {
Richard Levitte67475a72006-04-03 09:15:15 +00001466 chomp;
Ulf Möllerf5d7a031999-04-27 01:14:46 +00001467 $sdirs = 1 if /^SDIRS=/;
Ulf Möllerf5d7a031999-04-27 01:14:46 +00001468 if ($sdirs) {
1469 my $dir;
1470 foreach $dir (@skip) {
Dr. Stephen Hensoned551cd2008-11-12 17:28:18 +00001471 s/(\s)$dir /$1/;
1472 s/\s$dir$//;
Ulf Möllerf5d7a031999-04-27 01:14:46 +00001473 }
1474 }
Ulf Möllerf6f04201999-07-16 00:49:51 +00001475 $sdirs = 0 unless /\\$/;
Dr. Stephen Hensona63bf2c2009-02-15 15:28:18 +00001476 s/engines // if (/^DIRS=/ && $disabled{"engine"});
Dr. Stephen Hensonef236ec2009-04-23 16:32:42 +00001477 s/ccgost// if (/^ENGDIRS=/ && $disabled{"gost"});
Ulf Möller09739101999-04-28 16:16:31 +00001478 s/^VERSION=.*/VERSION=$version/;
1479 s/^MAJOR=.*/MAJOR=$major/;
1480 s/^MINOR=.*/MINOR=$minor/;
Richard Levitteb436a982000-07-21 15:08:53 +00001481 s/^SHLIB_VERSION_NUMBER=.*/SHLIB_VERSION_NUMBER=$shlib_version_number/;
1482 s/^SHLIB_VERSION_HISTORY=.*/SHLIB_VERSION_HISTORY=$shlib_version_history/;
1483 s/^SHLIB_MAJOR=.*/SHLIB_MAJOR=$shlib_major/;
1484 s/^SHLIB_MINOR=.*/SHLIB_MINOR=$shlib_minor/;
Richard Levittea22fb392000-10-13 15:25:06 +00001485 s/^SHLIB_EXT=.*/SHLIB_EXT=$shared_extension/;
Bodo Möllere5f30451999-04-29 21:52:08 +00001486 s/^INSTALLTOP=.*$/INSTALLTOP=$prefix/;
Andy Polyakovc23632d2009-02-09 15:11:22 +00001487 s/^MULTILIB=.*$/MULTILIB=$multilib/;
Ulf Möller462ba4f1999-04-24 22:59:36 +00001488 s/^OPENSSLDIR=.*$/OPENSSLDIR=$openssldir/;
Dr. Stephen Henson67275652009-08-10 14:48:40 +00001489 s/^LIBDIR=.*$/LIBDIR=$libdir/;
Bodo Möllere5f30451999-04-29 21:52:08 +00001490 s/^INSTALL_PREFIX=.*$/INSTALL_PREFIX=$install_prefix/;
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +00001491 s/^PLATFORM=.*$/PLATFORM=$target/;
Ulf Möller31ff97b1999-05-13 10:28:14 +00001492 s/^OPTIONS=.*$/OPTIONS=$options/;
Richard Levittec59cb512000-08-17 10:23:45 +00001493 s/^CONFIGURE_ARGS=.*$/CONFIGURE_ARGS=$argvstring/;
Andy Polyakovcbfb39d2006-10-21 13:38:16 +00001494 if ($cross_compile_prefix)
1495 {
Dr. Stephen Henson8aab3012009-10-15 13:05:04 +00001496 s/^CC=.*$/CROSS_COMPILE= $cross_compile_prefix\nCC= \$\(CROSS_COMPILE\)$cc/;
1497 s/^AR=\s*/AR= \$\(CROSS_COMPILE\)/;
1498 s/^NM=\s*/NM= \$\(CROSS_COMPILE\)/;
1499 s/^RANLIB=\s*/RANLIB= \$\(CROSS_COMPILE\)/;
1500 s/^MAKEDEPPROG=.*$/MAKEDEPPROG= \$\(CROSS_COMPILE\)$cc/ if $cc eq "gcc";
Andy Polyakovcbfb39d2006-10-21 13:38:16 +00001501 }
1502 else {
1503 s/^CC=.*$/CC= $cc/;
Dr. Stephen Henson8844a692009-10-28 15:33:32 +00001504 s/^AR=\s*ar/AR= $ar/;
Andy Polyakovcbfb39d2006-10-21 13:38:16 +00001505 s/^RANLIB=.*/RANLIB= $ranlib/;
Andy Polyakov75bbf6e2008-12-19 13:35:09 +00001506 s/^MAKEDEPPROG=.*$/MAKEDEPPROG= $cc/ if $cc eq "gcc";
Andy Polyakovcbfb39d2006-10-21 13:38:16 +00001507 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001508 s/^CFLAG=.*$/CFLAG= $cflags/;
Bodo Möller7a762192008-12-02 01:21:39 +00001509 s/^DEPFLAG=.*$/DEPFLAG=$depflags/;
Andy Polyakovd6c76452007-07-31 18:24:41 +00001510 s/^PEX_LIBS=.*$/PEX_LIBS= $prelflags/;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001511 s/^EX_LIBS=.*$/EX_LIBS= $lflags/;
Richard Levitte967d95f2001-04-04 15:50:30 +00001512 s/^EXE_EXT=.*$/EXE_EXT= $exe_ext/;
Andy Polyakov14e21f82004-07-26 20:18:55 +00001513 s/^CPUID_OBJ=.*$/CPUID_OBJ= $cpuid_obj/;
Ben Laurie06287281999-02-12 19:33:55 +00001514 s/^BN_ASM=.*$/BN_ASM= $bn_obj/;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001515 s/^DES_ENC=.*$/DES_ENC= $des_obj/;
Andy Polyakov0ddd3ea2007-08-28 21:02:38 +00001516 s/^AES_ENC=.*$/AES_ENC= $aes_obj/;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001517 s/^BF_ENC=.*$/BF_ENC= $bf_obj/;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001518 s/^CAST_ENC=.*$/CAST_ENC= $cast_obj/;
1519 s/^RC4_ENC=.*$/RC4_ENC= $rc4_obj/;
1520 s/^RC5_ENC=.*$/RC5_ENC= $rc5_obj/;
1521 s/^MD5_ASM_OBJ=.*$/MD5_ASM_OBJ= $md5_obj/;
1522 s/^SHA1_ASM_OBJ=.*$/SHA1_ASM_OBJ= $sha1_obj/;
1523 s/^RMD160_ASM_OBJ=.*$/RMD160_ASM_OBJ= $rmd160_obj/;
Andy Polyakoved266042005-12-16 12:55:33 +00001524 s/^WP_ASM_OBJ=.*$/WP_ASM_OBJ= $wp_obj/;
Andy Polyakov6a8517f2007-08-28 20:45:25 +00001525 s/^CMLL_ENC=.*$/CMLL_ENC= $cmll_obj/;
Andy Polyakovfa8e9212008-01-11 13:15:11 +00001526 s/^PERLASM_SCHEME=.*$/PERLASM_SCHEME= $perlasm_scheme/;
Ulf Möller2613c1f1999-03-31 12:38:27 +00001527 s/^PROCESSOR=.*/PROCESSOR= $processor/;
Richard Levitte179add22002-08-01 20:28:16 +00001528 s/^ARFLAGS=.*/ARFLAGS= $arflags/;
Ulf Möller99aab161999-04-01 12:34:33 +00001529 s/^PERL=.*/PERL= $perl/;
Richard Levittef9b3bff2000-11-30 22:53:34 +00001530 s/^KRB5_INCLUDES=.*/KRB5_INCLUDES=$withargs{"krb5-include"}/;
Richard Levittec1269c82003-02-14 13:12:00 +00001531 s/^LIBKRB5=.*/LIBKRB5=$withargs{"krb5-lib"}/;
Dr. Stephen Hensonad2695b2005-12-05 13:46:46 +00001532 s/^LIBZLIB=.*/LIBZLIB=$withargs{"zlib-lib"}/;
1533 s/^ZLIB_INCLUDE=.*/ZLIB_INCLUDE=$withargs{"zlib-include"}/;
Richard Levitteb436a982000-07-21 15:08:53 +00001534 s/^SHLIB_TARGET=.*/SHLIB_TARGET=$shared_target/;
Richard Levittea22fb392000-10-13 15:25:06 +00001535 s/^SHLIB_MARK=.*/SHLIB_MARK=$shared_mark/;
1536 s/^SHARED_LIBS=.*/SHARED_LIBS=\$(SHARED_CRYPTO) \$(SHARED_SSL)/ if (!$no_shared);
Richard Levitte0fd44e22000-10-21 21:24:11 +00001537 if ($shared_extension ne "" && $shared_extension =~ /^\.s([ol])\.[^\.]*$/)
1538 {
1539 my $sotmp = $1;
Richard Levitte07c08ed2002-05-30 12:16:33 +00001540 s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp/;
1541 }
1542 elsif ($shared_extension ne "" && $shared_extension =~ /^\.[^\.]*\.dylib$/)
1543 {
1544 s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.dylib/;
Richard Levitte0fd44e22000-10-21 21:24:11 +00001545 }
1546 elsif ($shared_extension ne "" && $shared_extension =~ /^\.s([ol])\.[^\.]*\.[^\.]*$/)
1547 {
1548 my $sotmp = $1;
1549 s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp.\$(SHLIB_MAJOR) .s$sotmp/;
1550 }
Richard Levitte07c08ed2002-05-30 12:16:33 +00001551 elsif ($shared_extension ne "" && $shared_extension =~ /^\.[^\.]*\.[^\.]*\.dylib$/)
1552 {
1553 s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.\$(SHLIB_MAJOR).dylib .dylib/;
1554 }
Richard Levittea5595fd2002-01-02 10:30:07 +00001555 s/^SHARED_LDFLAGS=.*/SHARED_LDFLAGS=$shared_ldflag/;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001556 print OUT $_."\n";
1557 }
1558close(IN);
1559close(OUT);
Richard Levittec2aa4f22002-07-16 08:53:32 +00001560rename($Makefile,"$Makefile.bak") || die "unable to rename $Makefile\n" if -e $Makefile;
1561rename("$Makefile.new",$Makefile) || die "unable to rename $Makefile.new\n";
Ben Laurief2d4be31998-12-28 22:05:44 +00001562
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001563print "CC =$cc\n";
1564print "CFLAG =$cflags\n";
1565print "EX_LIBS =$lflags\n";
Andy Polyakovb7efa562005-01-24 14:38:14 +00001566print "CPUID_OBJ =$cpuid_obj\n";
Ben Laurie06287281999-02-12 19:33:55 +00001567print "BN_ASM =$bn_obj\n";
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001568print "DES_ENC =$des_obj\n";
Andy Polyakov0ddd3ea2007-08-28 21:02:38 +00001569print "AES_ENC =$aes_obj\n";
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001570print "BF_ENC =$bf_obj\n";
1571print "CAST_ENC =$cast_obj\n";
1572print "RC4_ENC =$rc4_obj\n";
1573print "RC5_ENC =$rc5_obj\n";
1574print "MD5_OBJ_ASM =$md5_obj\n";
1575print "SHA1_OBJ_ASM =$sha1_obj\n";
1576print "RMD160_OBJ_ASM=$rmd160_obj\n";
Andy Polyakov6a8517f2007-08-28 20:45:25 +00001577print "CMLL_ENC= =$cmll_obj\n";
Ulf Möller2613c1f1999-03-31 12:38:27 +00001578print "PROCESSOR =$processor\n";
Ulf Möller99aab161999-04-01 12:34:33 +00001579print "RANLIB =$ranlib\n";
Richard Levitte179add22002-08-01 20:28:16 +00001580print "ARFLAGS =$arflags\n";
Ulf Möller99aab161999-04-01 12:34:33 +00001581print "PERL =$perl\n";
Richard Levittef9b3bff2000-11-30 22:53:34 +00001582print "KRB5_INCLUDES =",$withargs{"krb5-include"},"\n"
1583 if $withargs{"krb5-include"} ne "";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001584
Ben Laurie1641cb61998-12-28 17:08:48 +00001585my $des_ptr=0;
1586my $des_risc1=0;
1587my $des_risc2=0;
1588my $des_unroll=0;
1589my $bn_ll=0;
1590my $def_int=2;
1591my $rc4_int=$def_int;
1592my $md2_int=$def_int;
1593my $idea_int=$def_int;
1594my $rc2_int=$def_int;
1595my $rc4_idx=0;
Andy Polyakov2dae04d1999-10-07 12:03:59 +00001596my $rc4_chunk=0;
Ben Laurie1641cb61998-12-28 17:08:48 +00001597my $bf_ptr=0;
1598my @type=("char","short","int","long");
1599my ($b64l,$b64,$b32,$b16,$b8)=(0,0,1,0,0);
Richard Levitte62dc5aa2001-03-02 10:38:19 +00001600my $export_var_as_fn=0;
Ben Laurie1641cb61998-12-28 17:08:48 +00001601
1602my $des_int;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001603
1604foreach (sort split(/\s+/,$bn_ops))
1605 {
1606 $des_ptr=1 if /DES_PTR/;
1607 $des_risc1=1 if /DES_RISC1/;
1608 $des_risc2=1 if /DES_RISC2/;
1609 $des_unroll=1 if /DES_UNROLL/;
1610 $des_int=1 if /DES_INT/;
1611 $bn_ll=1 if /BN_LLONG/;
1612 $rc4_int=0 if /RC4_CHAR/;
1613 $rc4_int=3 if /RC4_LONG/;
1614 $rc4_idx=1 if /RC4_INDEX/;
Andy Polyakov2dae04d1999-10-07 12:03:59 +00001615 $rc4_chunk=1 if /RC4_CHUNK/;
1616 $rc4_chunk=2 if /RC4_CHUNK_LL/;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001617 $md2_int=0 if /MD2_CHAR/;
1618 $md2_int=3 if /MD2_LONG/;
1619 $idea_int=1 if /IDEA_SHORT/;
1620 $idea_int=3 if /IDEA_LONG/;
1621 $rc2_int=1 if /RC2_SHORT/;
1622 $rc2_int=3 if /RC2_LONG/;
1623 $bf_ptr=1 if $_ eq "BF_PTR";
1624 $bf_ptr=2 if $_ eq "BF_PTR2";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001625 ($b64l,$b64,$b32,$b16,$b8)=(0,1,0,0,0) if /SIXTY_FOUR_BIT/;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001626 ($b64l,$b64,$b32,$b16,$b8)=(1,0,0,0,0) if /SIXTY_FOUR_BIT_LONG/;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001627 ($b64l,$b64,$b32,$b16,$b8)=(0,0,1,0,0) if /THIRTY_TWO_BIT/;
1628 ($b64l,$b64,$b32,$b16,$b8)=(0,0,0,1,0) if /SIXTEEN_BIT/;
1629 ($b64l,$b64,$b32,$b16,$b8)=(0,0,0,0,1) if /EIGHT_BIT/;
Richard Levitte62dc5aa2001-03-02 10:38:19 +00001630 $export_var_as_fn=1 if /EXPORT_VAR_AS_FN/;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001631 }
1632
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001633open(IN,'<crypto/opensslconf.h.in') || die "unable to read crypto/opensslconf.h.in:$!\n";
Richard Levittec2aa4f22002-07-16 08:53:32 +00001634unlink("crypto/opensslconf.h.new") || die "unable to remove old crypto/opensslconf.h.new:$!\n" if -e "crypto/opensslconf.h.new";
1635open(OUT,'>crypto/opensslconf.h.new') || die "unable to create crypto/opensslconf.h.new:$!\n";
Bodo Möller26dc2672000-02-18 11:15:32 +00001636print OUT "/* opensslconf.h */\n";
Richard Levittefb044c52000-02-18 09:11:37 +00001637print OUT "/* WARNING: Generated automatically from opensslconf.h.in by Configure. */\n\n";
Bodo Möller26dc2672000-02-18 11:15:32 +00001638
1639print OUT "/* OpenSSL was configured with the following options: */\n";
Richard Levitte5031a892001-02-22 17:36:41 +00001640my $openssl_algorithm_defines_trans = $openssl_algorithm_defines;
Bodo Möller7a762192008-12-02 01:21:39 +00001641$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;
Richard Levitte5031a892001-02-22 17:36:41 +00001642$openssl_algorithm_defines_trans =~ s/^\s*#\s*define\s+OPENSSL_(.*)/# if defined(OPENSSL_$1) \&\& !defined($1)\n# define $1\n# endif/mg;
Richard Levittecf1b7d92001-02-19 16:06:34 +00001643$openssl_algorithm_defines =~ s/^\s*#\s*define\s+(.*)/#ifndef $1\n# define $1\n#endif/mg;
Bodo Möllerfb77c6f2000-02-18 21:08:37 +00001644$openssl_algorithm_defines = " /* no ciphers excluded */\n" if $openssl_algorithm_defines eq "";
Richard Levittecf1b7d92001-02-19 16:06:34 +00001645$openssl_thread_defines =~ s/^\s*#\s*define\s+(.*)/#ifndef $1\n# define $1\n#endif/mg;
1646$openssl_sys_defines =~ s/^\s*#\s*define\s+(.*)/#ifndef $1\n# define $1\n#endif/mg;
1647$openssl_other_defines =~ s/^\s*#\s*define\s+(.*)/#ifndef $1\n# define $1\n#endif/mg;
1648print OUT $openssl_sys_defines;
Ben Laurie75e98d02001-08-03 18:45:35 +00001649print OUT "#ifndef OPENSSL_DOING_MAKEDEPEND\n\n";
Bodo Möller7a762192008-12-02 01:21:39 +00001650print OUT $openssl_experimental_defines;
1651print OUT "\n";
Richard Levittecf1b7d92001-02-19 16:06:34 +00001652print OUT $openssl_algorithm_defines;
Bodo Möller7a762192008-12-02 01:21:39 +00001653print OUT "\n#endif /* OPENSSL_DOING_MAKEDEPEND */\n\n";
Richard Levittecf1b7d92001-02-19 16:06:34 +00001654print OUT $openssl_thread_defines;
1655print OUT $openssl_other_defines,"\n";
Bodo Möller26dc2672000-02-18 11:15:32 +00001656
Richard Levitte5031a892001-02-22 17:36:41 +00001657print OUT "/* The OPENSSL_NO_* macros are also defined as NO_* if the application\n";
1658print OUT " asks for it. This is a transient feature that is provided for those\n";
1659print OUT " who haven't had the time to do the appropriate changes in their\n";
1660print OUT " applications. */\n";
1661print OUT "#ifdef OPENSSL_ALGORITHM_DEFINES\n";
1662print OUT $openssl_algorithm_defines_trans;
1663print OUT "#endif\n\n";
1664
Andy Polyakovb2dba9b2007-05-14 21:35:25 +00001665print OUT "#define OPENSSL_CPUID_OBJ\n\n" if ($cpuid_obj ne "mem_clr.o");
Andy Polyakovebaec632004-07-26 22:01:50 +00001666
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001667while (<IN>)
1668 {
Bodo Möllercd46aa41999-04-25 10:28:26 +00001669 if (/^#define\s+OPENSSLDIR/)
Geoff Thorpef9afd9f2008-07-10 20:08:47 +00001670 {
1671 my $foo = $openssldir;
1672 $foo =~ s/\\/\\\\/g;
1673 print OUT "#define OPENSSLDIR \"$foo\"\n";
1674 }
Geoff Thorpe90819802004-06-01 03:18:58 +00001675 elsif (/^#define\s+ENGINESDIR/)
Geoff Thorpef9afd9f2008-07-10 20:08:47 +00001676 {
Andy Polyakov6a9d28f2009-12-29 10:33:37 +00001677 my $foo = "$prefix/$libdir/engines";
Geoff Thorpef9afd9f2008-07-10 20:08:47 +00001678 $foo =~ s/\\/\\\\/g;
1679 print OUT "#define ENGINESDIR \"$foo\"\n";
1680 }
Richard Levitte62dc5aa2001-03-02 10:38:19 +00001681 elsif (/^#((define)|(undef))\s+OPENSSL_EXPORT_VAR_AS_FUNCTION/)
1682 { printf OUT "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION\n"
1683 if $export_var_as_fn;
1684 printf OUT "#%s OPENSSL_EXPORT_VAR_AS_FUNCTION\n",
1685 ($export_var_as_fn)?"define":"undef"; }
Bodo Möllere766a681999-06-09 13:23:38 +00001686 elsif (/^#define\s+OPENSSL_UNISTD/)
1687 {
1688 $unistd = "<unistd.h>" if $unistd eq "";
1689 print OUT "#define OPENSSL_UNISTD $unistd\n";
1690 }
Ulf Möller462ba4f1999-04-24 22:59:36 +00001691 elsif (/^#((define)|(undef))\s+SIXTY_FOUR_BIT_LONG/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001692 { printf OUT "#%s SIXTY_FOUR_BIT_LONG\n",($b64l)?"define":"undef"; }
1693 elsif (/^#((define)|(undef))\s+SIXTY_FOUR_BIT/)
1694 { printf OUT "#%s SIXTY_FOUR_BIT\n",($b64)?"define":"undef"; }
1695 elsif (/^#((define)|(undef))\s+THIRTY_TWO_BIT/)
1696 { printf OUT "#%s THIRTY_TWO_BIT\n",($b32)?"define":"undef"; }
1697 elsif (/^#((define)|(undef))\s+SIXTEEN_BIT/)
1698 { printf OUT "#%s SIXTEEN_BIT\n",($b16)?"define":"undef"; }
1699 elsif (/^#((define)|(undef))\s+EIGHT_BIT/)
1700 { printf OUT "#%s EIGHT_BIT\n",($b8)?"define":"undef"; }
1701 elsif (/^#((define)|(undef))\s+BN_LLONG\s*$/)
1702 { printf OUT "#%s BN_LLONG\n",($bn_ll)?"define":"undef"; }
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001703 elsif (/^\#define\s+DES_LONG\s+.*/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001704 { printf OUT "#define DES_LONG unsigned %s\n",
1705 ($des_int)?'int':'long'; }
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001706 elsif (/^\#(define|undef)\s+DES_PTR/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001707 { printf OUT "#%s DES_PTR\n",($des_ptr)?'define':'undef'; }
1708 elsif (/^\#(define|undef)\s+DES_RISC1/)
1709 { printf OUT "#%s DES_RISC1\n",($des_risc1)?'define':'undef'; }
1710 elsif (/^\#(define|undef)\s+DES_RISC2/)
1711 { printf OUT "#%s DES_RISC2\n",($des_risc2)?'define':'undef'; }
1712 elsif (/^\#(define|undef)\s+DES_UNROLL/)
1713 { printf OUT "#%s DES_UNROLL\n",($des_unroll)?'define':'undef'; }
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001714 elsif (/^#define\s+RC4_INT\s/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001715 { printf OUT "#define RC4_INT unsigned %s\n",$type[$rc4_int]; }
Andy Polyakov2dae04d1999-10-07 12:03:59 +00001716 elsif (/^#undef\s+RC4_CHUNK/)
1717 {
1718 printf OUT "#undef RC4_CHUNK\n" if $rc4_chunk==0;
1719 printf OUT "#define RC4_CHUNK unsigned long\n" if $rc4_chunk==1;
1720 printf OUT "#define RC4_CHUNK unsigned long long\n" if $rc4_chunk==2;
1721 }
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001722 elsif (/^#((define)|(undef))\s+RC4_INDEX/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001723 { printf OUT "#%s RC4_INDEX\n",($rc4_idx)?"define":"undef"; }
Ulf Möller8e7f9661999-05-05 00:23:53 +00001724 elsif (/^#(define|undef)\s+I386_ONLY/)
Bodo Möllerc9a112f2005-02-22 10:29:51 +00001725 { printf OUT "#%s I386_ONLY\n", ($processor eq "386")?
Ulf Möller8e7f9661999-05-05 00:23:53 +00001726 "define":"undef"; }
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001727 elsif (/^#define\s+MD2_INT\s/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001728 { printf OUT "#define MD2_INT unsigned %s\n",$type[$md2_int]; }
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001729 elsif (/^#define\s+IDEA_INT\s/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001730 {printf OUT "#define IDEA_INT unsigned %s\n",$type[$idea_int];}
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001731 elsif (/^#define\s+RC2_INT\s/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001732 {printf OUT "#define RC2_INT unsigned %s\n",$type[$rc2_int];}
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001733 elsif (/^#(define|undef)\s+BF_PTR/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001734 {
1735 printf OUT "#undef BF_PTR\n" if $bf_ptr == 0;
1736 printf OUT "#define BF_PTR\n" if $bf_ptr == 1;
1737 printf OUT "#define BF_PTR2\n" if $bf_ptr == 2;
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001738 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001739 else
1740 { print OUT $_; }
1741 }
Ulf Möller5dfc3691999-04-29 16:22:55 +00001742close(IN);
1743close(OUT);
Richard Levittec2aa4f22002-07-16 08:53:32 +00001744rename("crypto/opensslconf.h","crypto/opensslconf.h.bak") || die "unable to rename crypto/opensslconf.h\n" if -e "crypto/opensslconf.h";
1745rename("crypto/opensslconf.h.new","crypto/opensslconf.h") || die "unable to rename crypto/opensslconf.h.new\n";
Dr. Stephen Henson9becf661999-02-13 23:13:32 +00001746
Bodo Möllere766a681999-06-09 13:23:38 +00001747
Dr. Stephen Henson9becf661999-02-13 23:13:32 +00001748# Fix the date
1749
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001750print "SIXTY_FOUR_BIT_LONG mode\n" if $b64l;
1751print "SIXTY_FOUR_BIT mode\n" if $b64;
1752print "THIRTY_TWO_BIT mode\n" if $b32;
1753print "SIXTEEN_BIT mode\n" if $b16;
1754print "EIGHT_BIT mode\n" if $b8;
1755print "DES_PTR used\n" if $des_ptr;
1756print "DES_RISC1 used\n" if $des_risc1;
1757print "DES_RISC2 used\n" if $des_risc2;
1758print "DES_UNROLL used\n" if $des_unroll;
1759print "DES_INT used\n" if $des_int;
1760print "BN_LLONG mode\n" if $bn_ll;
1761print "RC4 uses u$type[$rc4_int]\n" if $rc4_int != $def_int;
1762print "RC4_INDEX mode\n" if $rc4_idx;
Andy Polyakov2dae04d1999-10-07 12:03:59 +00001763print "RC4_CHUNK is undefined\n" if $rc4_chunk==0;
1764print "RC4_CHUNK is unsigned long\n" if $rc4_chunk==1;
1765print "RC4_CHUNK is unsigned long long\n" if $rc4_chunk==2;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001766print "MD2 uses u$type[$md2_int]\n" if $md2_int != $def_int;
1767print "IDEA uses u$type[$idea_int]\n" if $idea_int != $def_int;
1768print "RC2 uses u$type[$rc2_int]\n" if $rc2_int != $def_int;
1769print "BF_PTR used\n" if $bf_ptr == 1;
1770print "BF_PTR2 used\n" if $bf_ptr == 2;
Ben Lauriecba50681999-03-07 14:05:36 +00001771
Richard Levitte4d8743f2003-11-28 13:10:58 +00001772if($IsMK1MF) {
Bodo Möller664b9981999-07-21 20:49:15 +00001773 open (OUT,">crypto/buildinf.h") || die "Can't open buildinf.h";
1774 printf OUT <<EOF;
Bodo Möller57119941999-07-29 12:57:23 +00001775#ifndef MK1MF_BUILD
1776 /* auto-generated by Configure for crypto/cversion.c:
1777 * for Unix builds, crypto/Makefile.ssl generates functional definitions;
1778 * Windows builds (and other mk1mf builds) compile cversion.c with
1779 * -DMK1MF_BUILD and use definitions added to this file by util/mk1mf.pl. */
1780 #error "Windows builds (PLATFORM=$target) use mk1mf.pl-created Makefiles"
1781#endif
Bodo Möller9e935d71999-07-09 14:04:57 +00001782EOF
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001783 close(OUT);
Dr. Stephen Hensona1e464f1999-04-25 20:57:09 +00001784} else {
Dr. Stephen Hensondafd8332009-10-28 13:55:44 +00001785 my $make_command = "$make PERL=\'$perl\'";
Richard Levitte451dc182002-06-13 20:42:35 +00001786 my $make_targets = "";
1787 $make_targets .= " links" if $symlink;
Bodo Möllerab185b62005-03-13 19:46:58 +00001788 $make_targets .= " depend" if $depflags ne $default_depflags && $make_depend;
Richard Levitte1cc67fa2002-07-23 13:31:04 +00001789 $make_targets .= " gentests" if $symlink;
Richard Levitte451dc182002-06-13 20:42:35 +00001790 (system $make_command.$make_targets) == 0 or exit $?
1791 if $make_targets ne "";
Bodo Möller288d2fb1999-05-25 22:31:49 +00001792 if ( $perl =~ m@^/@) {
Dr. Stephen Henson439df502000-05-18 00:33:00 +00001793 &dofile("tools/c_rehash",$perl,'^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";');
Bodo Möller3a4f14f2000-01-05 01:31:22 +00001794 &dofile("apps/CA.pl",$perl,'^#!/', '#!%s');
Bodo Möller288d2fb1999-05-25 22:31:49 +00001795 } else {
1796 # No path for Perl known ...
Dr. Stephen Henson439df502000-05-18 00:33:00 +00001797 &dofile("tools/c_rehash",'/usr/local/bin/perl','^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";');
Bodo Möller3a4f14f2000-01-05 01:31:22 +00001798 &dofile("apps/CA.pl",'/usr/local/bin/perl','^#!/', '#!%s');
Richard Levitte451dc182002-06-13 20:42:35 +00001799 }
Bodo Möllerab185b62005-03-13 19:46:58 +00001800 if ($depflags ne $default_depflags && !$make_depend) {
Richard Levitte451dc182002-06-13 20:42:35 +00001801 print <<EOF;
1802
Bodo Möllerab185b62005-03-13 19:46:58 +00001803Since you've disabled or enabled at least one algorithm, you need to do
1804the following before building:
Richard Levitte451dc182002-06-13 20:42:35 +00001805
1806 make depend
1807EOF
1808 }
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001809}
1810
Dr. Stephen Hensonfc6a6a12002-10-04 21:22:47 +00001811# create the ms/version32.rc file if needed
Dr. Stephen Hensoneef0c1f2008-01-03 22:43:04 +00001812if ($IsMK1MF && ($target !~ /^netware/)) {
Dr. Stephen Hensonfc6a6a12002-10-04 21:22:47 +00001813 my ($v1, $v2, $v3, $v4);
1814 if ($version_num =~ /(^[0-9a-f]{1})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i) {
1815 $v1=hex $1;
1816 $v2=hex $2;
1817 $v3=hex $3;
1818 $v4=hex $4;
1819 }
1820 open (OUT,">ms/version32.rc") || die "Can't open ms/version32.rc";
1821 print OUT <<EOF;
1822#include <winver.h>
1823
1824LANGUAGE 0x09,0x01
1825
18261 VERSIONINFO
1827 FILEVERSION $v1,$v2,$v3,$v4
1828 PRODUCTVERSION $v1,$v2,$v3,$v4
1829 FILEFLAGSMASK 0x3fL
1830#ifdef _DEBUG
1831 FILEFLAGS 0x01L
1832#else
1833 FILEFLAGS 0x00L
1834#endif
1835 FILEOS VOS__WINDOWS32
1836 FILETYPE VFT_DLL
1837 FILESUBTYPE 0x0L
1838BEGIN
1839 BLOCK "StringFileInfo"
1840 BEGIN
1841 BLOCK "040904b0"
1842 BEGIN
1843 // Required:
1844 VALUE "CompanyName", "The OpenSSL Project, http://www.openssl.org/\\0"
1845 VALUE "FileDescription", "OpenSSL Shared Library\\0"
1846 VALUE "FileVersion", "$version\\0"
1847#if defined(CRYPTO)
1848 VALUE "InternalName", "libeay32\\0"
1849 VALUE "OriginalFilename", "libeay32.dll\\0"
1850#elif defined(SSL)
1851 VALUE "InternalName", "ssleay32\\0"
1852 VALUE "OriginalFilename", "ssleay32.dll\\0"
1853#endif
1854 VALUE "ProductName", "The OpenSSL Toolkit\\0"
1855 VALUE "ProductVersion", "$version\\0"
1856 // Optional:
1857 //VALUE "Comments", "\\0"
Dr. Stephen Hensone77d8f22005-04-19 00:15:18 +00001858 VALUE "LegalCopyright", "Copyright © 1998-2005 The OpenSSL Project. Copyright © 1995-1998 Eric A. Young, Tim J. Hudson. All rights reserved.\\0"
Dr. Stephen Hensonfc6a6a12002-10-04 21:22:47 +00001859 //VALUE "LegalTrademarks", "\\0"
1860 //VALUE "PrivateBuild", "\\0"
1861 //VALUE "SpecialBuild", "\\0"
1862 END
1863 END
1864 BLOCK "VarFileInfo"
1865 BEGIN
1866 VALUE "Translation", 0x409, 0x4b0
1867 END
1868END
1869EOF
1870 close(OUT);
1871 }
1872
Bodo Möller63d3f441999-09-09 20:21:10 +00001873print <<EOF;
1874
Ulf Möller89ec98e2000-02-01 01:35:29 +00001875Configured for $target.
Bodo Möller63d3f441999-09-09 20:21:10 +00001876EOF
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001877
1878print <<\EOF if (!$no_threads && !$threads);
1879
1880The library could not be configured for supporting multi-threaded
1881applications as the compiler options required on this system are not known.
Bodo Möllerff1b7e01999-06-26 21:25:01 +00001882See file INSTALL for details if you need multi-threading.
Bodo Möllerec577821999-04-23 22:13:45 +00001883EOF
1884
Richard Levitte2964ba82003-01-11 11:40:39 +00001885print <<\EOF if ($no_shared_warn);
1886
1887You gave the option 'shared'. Normally, that would give you shared libraries.
1888Unfortunately, the OpenSSL configuration doesn't include shared library support
1889for this platform yet, so it will pretend you gave the option 'no-shared'. If
1890you can inform the developpers (openssl-dev\@openssl.org) how to support shared
Bodo Mölleraaae0aa2003-01-13 14:58:49 +00001891libraries on this platform, they will at least look at it and try their best
1892(but please first make sure you have tried with a current version of OpenSSL).
Richard Levitte2964ba82003-01-11 11:40:39 +00001893EOF
1894
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001895exit(0);
1896
Ulf Möller462ba4f1999-04-24 22:59:36 +00001897sub usage
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001898 {
Ulf Möller462ba4f1999-04-24 22:59:36 +00001899 print STDERR $usage;
Ulf Möller10a926c2000-02-21 00:55:45 +00001900 print STDERR "\npick os/compiler from:\n";
Ben Laurie1641cb61998-12-28 17:08:48 +00001901 my $j=0;
Ben Laurie6457ad11999-02-07 18:22:15 +00001902 my $i;
Ulf Möller10a926c2000-02-21 00:55:45 +00001903 my $k=0;
Ben Laurie6457ad11999-02-07 18:22:15 +00001904 foreach $i (sort keys %table)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001905 {
Ulf Möller462ba4f1999-04-24 22:59:36 +00001906 next if $i =~ /^debug/;
Ulf Möller10a926c2000-02-21 00:55:45 +00001907 $k += length($i) + 1;
1908 if ($k > 78)
1909 {
1910 print STDERR "\n";
1911 $k=length($i);
1912 }
1913 print STDERR $i . " ";
Ulf Möller462ba4f1999-04-24 22:59:36 +00001914 }
1915 foreach $i (sort keys %table)
1916 {
1917 next if $i !~ /^debug/;
Ulf Möller10a926c2000-02-21 00:55:45 +00001918 $k += length($i) + 1;
1919 if ($k > 78)
1920 {
1921 print STDERR "\n";
1922 $k=length($i);
1923 }
1924 print STDERR $i . " ";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001925 }
Ulf Möller10a926c2000-02-21 00:55:45 +00001926 print STDERR "\n\nNOTE: If in doubt, on Unix-ish systems use './config'.\n";
Ulf Möller462ba4f1999-04-24 22:59:36 +00001927 exit(1);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001928 }
1929
Ulf Möller99aab161999-04-01 12:34:33 +00001930sub which
1931 {
1932 my($name)=@_;
1933 my $path;
1934 foreach $path (split /:/, $ENV{PATH})
1935 {
Richard Levitte28a80032004-06-28 22:01:37 +00001936 if (-f "$path/$name$exe_ext" and -x _)
Ulf Möller99aab161999-04-01 12:34:33 +00001937 {
Richard Levitte28a80032004-06-28 22:01:37 +00001938 return "$path/$name$exe_ext" unless ($name eq "perl" and
1939 system("$path/$name$exe_ext -e " . '\'exit($]<5.0);\''));
Ulf Möller99aab161999-04-01 12:34:33 +00001940 }
1941 }
1942 }
1943
Ulf Möller462ba4f1999-04-24 22:59:36 +00001944sub dofile
1945 {
1946 my $f; my $p; my %m; my @a; my $k; my $ff;
1947 ($f,$p,%m)=@_;
1948
Ulf Möller31ff97b1999-05-13 10:28:14 +00001949 open(IN,"<$f.in") || open(IN,"<$f") || die "unable to open $f:$!\n";
Ulf Möller462ba4f1999-04-24 22:59:36 +00001950 @a=<IN>;
1951 close(IN);
1952 foreach $k (keys %m)
1953 {
1954 grep(/$k/ && ($_=sprintf($m{$k}."\n",$p)),@a);
1955 }
Bodo Möller863fe2e2000-03-12 23:27:14 +00001956 open(OUT,">$f.new") || die "unable to open $f.new:$!\n";
Ulf Möller462ba4f1999-04-24 22:59:36 +00001957 print OUT @a;
1958 close(OUT);
Bodo Möller863fe2e2000-03-12 23:27:14 +00001959 rename($f,"$f.bak") || die "unable to rename $f\n" if -e $f;
1960 rename("$f.new",$f) || die "unable to rename $f.new\n";
Ulf Möller462ba4f1999-04-24 22:59:36 +00001961 }
Bodo Möller436a3761999-05-28 23:18:51 +00001962
1963sub print_table_entry
1964 {
1965 my $target = shift;
1966
Richard Levittecf1b7d92001-02-19 16:06:34 +00001967 (my $cc,my $cflags,my $unistd,my $thread_cflag,my $sys_id,my $lflags,
Andy Polyakov14e21f82004-07-26 20:18:55 +00001968 my $bn_ops,my $cpuid_obj,my $bn_obj,my $des_obj,my $aes_obj, my $bf_obj,
Richard Levittef4b45b72000-08-02 03:43:29 +00001969 my $md5_obj,my $sha1_obj,my $cast_obj,my $rc4_obj,my $rmd160_obj,
Andy Polyakovfa8e9212008-01-11 13:15:11 +00001970 my $rc5_obj,my $wp_obj,my $cmll_obj,my $perlasm_scheme,my $dso_scheme,my $shared_target,my $shared_cflag,
Andy Polyakovc23632d2009-02-09 15:11:22 +00001971 my $shared_ldflag,my $shared_extension,my $ranlib,my $arflags,my $multilib)=
Richard Levittea22fb392000-10-13 15:25:06 +00001972 split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
Bodo Möller436a3761999-05-28 23:18:51 +00001973
1974 print <<EOF
1975
1976*** $target
1977\$cc = $cc
1978\$cflags = $cflags
Bodo Möllere766a681999-06-09 13:23:38 +00001979\$unistd = $unistd
Bodo Möller436a3761999-05-28 23:18:51 +00001980\$thread_cflag = $thread_cflag
Richard Levittecf1b7d92001-02-19 16:06:34 +00001981\$sys_id = $sys_id
Bodo Möller436a3761999-05-28 23:18:51 +00001982\$lflags = $lflags
1983\$bn_ops = $bn_ops
Andy Polyakov14e21f82004-07-26 20:18:55 +00001984\$cpuid_obj = $cpuid_obj
Bodo Möller436a3761999-05-28 23:18:51 +00001985\$bn_obj = $bn_obj
1986\$des_obj = $des_obj
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001987\$aes_obj = $aes_obj
Bodo Möller436a3761999-05-28 23:18:51 +00001988\$bf_obj = $bf_obj
1989\$md5_obj = $md5_obj
1990\$sha1_obj = $sha1_obj
1991\$cast_obj = $cast_obj
1992\$rc4_obj = $rc4_obj
1993\$rmd160_obj = $rmd160_obj
1994\$rc5_obj = $rc5_obj
Andy Polyakov0fbd4bf2005-12-16 11:53:31 +00001995\$wp_obj = $wp_obj
Andy Polyakov6a8517f2007-08-28 20:45:25 +00001996\$cmll_obj = $cmll_obj
Andy Polyakovfa8e9212008-01-11 13:15:11 +00001997\$perlasm_scheme = $perlasm_scheme
Geoff Thorpe9ec01262000-04-04 22:32:19 +00001998\$dso_scheme = $dso_scheme
Richard Levitteb436a982000-07-21 15:08:53 +00001999\$shared_target= $shared_target
2000\$shared_cflag = $shared_cflag
Bodo Möller67d48c82002-01-04 13:30:05 +00002001\$shared_ldflag = $shared_ldflag
Richard Levittea22fb392000-10-13 15:25:06 +00002002\$shared_extension = $shared_extension
Bodo Möller03964792001-03-09 13:04:06 +00002003\$ranlib = $ranlib
Richard Levitte179add22002-08-01 20:28:16 +00002004\$arflags = $arflags
Andy Polyakovc23632d2009-02-09 15:11:22 +00002005\$multilib = $multilib
Bodo Möller436a3761999-05-28 23:18:51 +00002006EOF
2007 }
Richard Levitted0d046e2002-01-27 15:52:37 +00002008
2009sub test_sanity
2010 {
2011 my $errorcnt = 0;
2012
2013 print STDERR "=" x 70, "\n";
2014 print STDERR "=== SANITY TESTING!\n";
2015 print STDERR "=== No configuration will be done, all other arguments will be ignored!\n";
2016 print STDERR "=" x 70, "\n";
2017
2018 foreach $target (sort keys %table)
2019 {
2020 @fields = split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
2021
Dr. Stephen Hensonfd621f72009-06-17 12:19:09 +00002022 if ($fields[$idx_dso_scheme-1] =~ /^(beos|dl|dlfcn|win32|vms)$/)
Richard Levittec9c21d32002-01-27 15:58:34 +00002023 {
2024 $errorcnt++;
2025 print STDERR "SANITY ERROR: '$target' has the dso_scheme [$idx_dso_scheme] values\n";
2026 print STDERR " in the previous field\n";
2027 }
Dr. Stephen Hensonfd621f72009-06-17 12:19:09 +00002028 elsif ($fields[$idx_dso_scheme+1] =~ /^(beos|dl|dlfcn|win32|vms)$/)
Richard Levittec9c21d32002-01-27 15:58:34 +00002029 {
2030 $errorcnt++;
2031 print STDERR "SANITY ERROR: '$target' has the dso_scheme [$idx_dso_scheme] values\n";
2032 print STDERR " in the following field\n";
2033 }
Dr. Stephen Hensonfd621f72009-06-17 12:19:09 +00002034 elsif ($fields[$idx_dso_scheme] !~ /^(beos|dl|dlfcn|win32|vms|)$/)
Richard Levitted0d046e2002-01-27 15:52:37 +00002035 {
2036 $errorcnt++;
2037 print STDERR "SANITY ERROR: '$target' has the dso_scheme [$idx_dso_scheme] field = ",$fields[$idx_dso_scheme],"\n";
Dr. Stephen Hensonfd621f72009-06-17 12:19:09 +00002038 print STDERR " valid values are 'beos', 'dl', 'dlfcn', 'win32' and 'vms'\n";
Richard Levitted0d046e2002-01-27 15:52:37 +00002039 }
2040 }
Richard Levitte613599f2002-01-27 16:03:40 +00002041 print STDERR "No sanity errors detected!\n" if $errorcnt == 0;
Richard Levitted0d046e2002-01-27 15:52:37 +00002042 return $errorcnt;
2043 }