blob: 9197a6b5ba5e324318721a17ab1d1c077a1c0571 [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
Ben Laurie1641cb61998-12-28 17:08:48 +0000107my $x86_gcc_des="DES_PTR DES_RISC1 DES_UNROLL";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000108
109# MD2_CHAR slags pentium pros
Ulf Möller995e79e1999-04-23 21:29:45 +0000110my $x86_gcc_opts="RC4_INDEX MD2_INT";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000111
112# MODIFY THESE PARAMETERS IF YOU ARE GOING TO USE THE 'util/speed.sh SCRIPT
113# Don't worry about these normally
114
Ben Laurie1641cb61998-12-28 17:08:48 +0000115my $tcc="cc";
116my $tflags="-fast -Xa";
117my $tbn_mul="";
118my $tlib="-lnsl -lsocket";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000119#$bits1="SIXTEEN_BIT ";
120#$bits2="THIRTY_TWO_BIT ";
Ben Laurie1641cb61998-12-28 17:08:48 +0000121my $bits1="THIRTY_TWO_BIT ";
122my $bits2="SIXTY_FOUR_BIT ";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000123
Andy Polyakovd64a7232009-04-27 05:55:13 +0000124my $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 +0000125
Andy Polyakovfa8e9212008-01-11 13:15:11 +0000126my $x86_elf_asm="$x86_asm:elf";
Dr. Stephen Henson73980532008-01-06 00:36:22 +0000127
Andy Polyakovd64a7232009-04-27 05:55:13 +0000128my $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 Polyakovfa8e9212008-01-11 13:15:11 +0000129my $ia64_asm="ia64cpuid.o:bn-ia64.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";
130my $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";
131my $sparcv8_asm=":sparcv8.o:des_enc-sparc.o fcrypt_b.o:::::::::::void";
132my $alpha_asm="alphacpuid.o:bn_asm.o alpha-mont.o::::::::::::void";
133my $mips3_asm=":bn-mips3.o::::::::::::void";
Andy Polyakov13c3a1d2009-02-11 10:01:36 +0000134my $s390x_asm="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 +0000135my $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 Polyakovaddd6412008-01-13 22:01:30 +0000136my $ppc32_asm="ppccpuid.o:bn-ppc.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o::::::";
137my $ppc64_asm="ppccpuid.o:bn-ppc.o ppc-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 +0000138my $no_asm=":::::::::::::void";
Richard Levittea77e0232001-03-26 16:16:12 +0000139
Andy Polyakovb7efa562005-01-24 14:38:14 +0000140# As for $BSDthreads. Idea is to maintain "collective" set of flags,
141# which would cover all BSD flavors. -pthread applies to them all,
142# but is treated differently. OpenBSD expands is as -D_POSIX_THREAD
143# -lc_r, which is sufficient. FreeBSD 4.x expands it as -lc_r,
144# which has to be accompanied by explicit -D_THREAD_SAFE and
145# sometimes -D_REENTRANT. FreeBSD 5.x expands it as -lc_r, which
146# seems to be sufficient?
147my $BSDthreads="-pthread -D_THREAD_SAFE -D_REENTRANT";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000148
Andy Polyakovc23632d2009-02-09 15:11:22 +0000149#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 +0000150
Ben Laurie1641cb61998-12-28 17:08:48 +0000151my %table=(
Bodo Möller36124b12000-09-06 12:25:58 +0000152# File 'TABLE' (created by 'make TABLE') contains the data from this list,
153# formatted for better readability.
154
155
Richard Levitteb7e16362000-03-07 23:17:48 +0000156#"b", "${tcc}:${tflags}::${tlib}:${bits1}:${tbn_mul}::",
157#"bl-4c-2c", "${tcc}:${tflags}::${tlib}:${bits1}BN_LLONG RC4_CHAR MD2_CHAR:${tbn_mul}::",
158#"bl-4c-ri", "${tcc}:${tflags}::${tlib}:${bits1}BN_LLONG RC4_CHAR RC4_INDEX:${tbn_mul}::",
159#"b2-is-ri-dp", "${tcc}:${tflags}::${tlib}:${bits2}IDEA_SHORT RC4_INDEX DES_PTR:${tbn_mul}::",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000160
Ulf Möller22a4f961999-04-19 13:54:11 +0000161# Our development configs
Richard Levittecf1b7d92001-02-19 16:06:34 +0000162"purify", "purify gcc:-g -DPURIFY -Wall::(unknown)::-lsocket -lnsl::::",
Richard Levitte34ab17b2002-06-27 09:13:44 +0000163"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 +0000164"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 +0000165"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 +0000166"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 +0000167"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 +0000168"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 +0000169"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)::::::",
170"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 +0000171"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 +0000172"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 Henson363bd0b2009-01-11 15:56:32 +0000173"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 BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
174"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)",
175"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 BF_PTR2 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 +0000176"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 +0000177"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 +0000178"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 +0000179"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 +0000180"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)",
181"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 +0000182"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",
183"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 +0000184"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)",
185"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 +0000186"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)",
Richard Levittecf1b7d92001-02-19 16:06:34 +0000187"dist", "cc:-O::(unknown)::::::",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000188
Andy Polyakovf8bbcf32000-02-15 17:31:12 +0000189# Basic configs that should work on any (32 and less bit) box
Richard Levittecf1b7d92001-02-19 16:06:34 +0000190"gcc", "gcc:-O3::(unknown):::BN_LLONG:::",
191"cc", "cc:-O::(unknown)::::::",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000192
Richard Levitte28a80032004-06-28 22:01:37 +0000193####VOS Configurations
Richard Levitte0ed64ce2005-06-23 21:21:45 +0000194"vos-gcc","gcc:-O3 -Wall -D_POSIX_C_SOURCE=200112L -D_BSD -DB_ENDIAN::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
195"debug-vos-gcc","gcc:-O0 -g -Wall -D_POSIX_C_SOURCE=200112L -D_BSD -DB_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG::(unknown):VOS:-Wl,-map:BN_LLONG:${no_asm}:::::.so:",
Richard Levitte28a80032004-06-28 22:01:37 +0000196
Richard Levittecf2d9e02001-05-03 06:14:47 +0000197#### Solaris x86 with GNU C setups
Richard Levittecf1b7d92001-02-19 16:06:34 +0000198# -DOPENSSL_NO_INLINE_ASM switches off inline assembler. We have to do it
Andy Polyakovf8bbcf32000-02-15 17:31:12 +0000199# here because whenever GNU C instantiates an assembler template it
200# surrounds it with #APP #NO_APP comment pair which (at least Solaris
201# 7_x86) /usr/ccs/bin/as fails to assemble with "Illegal mnemonic"
202# error message.
Andy Polyakovc5de8b22005-06-26 17:17:11 +0000203"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 +0000204# -shared -static-libgcc might appear controversial, but modules taken
205# from static libgcc do not have relocations and linking them into our
206# shared objects doesn't have any negative side-effects. On the contrary,
207# doing so makes it possible to use gcc shared build with Sun C. Given
208# that gcc generates faster code [thanks to inline assembler], I would
209# actually recommend to consider using gcc shared build even with vendor
210# compiler:-)
211# <appro@fy.chalmers.se>
Andy Polyakovc23632d2009-02-09 15:11:22 +0000212"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 BF_PTR2 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 +0000213
Richard Levittecf2d9e02001-05-03 06:14:47 +0000214#### Solaris x86 with Sun C setups
Andy Polyakov8861ba32005-04-13 07:22:41 +0000215"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)",
Andy Polyakovc23632d2009-02-09 15:11:22 +0000216"solaris64-x86_64-cc","cc:-fast -xarch=amd64 -xstrconst -Xa -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 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 +0000217
Andy Polyakov1656ef21999-07-25 22:25:12 +0000218#### SPARC Solaris with GNU C setups
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000219"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 +0000220"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 +0000221# -m32 should be safe to add as long as driver recognizes -mcpu=ultrasparc
Andy Polyakova00e4142005-12-16 17:39:57 +0000222"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 +0000223"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 +0000224####
Andy Polyakov6a8517f2007-08-28 20:45:25 +0000225"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 +0000226"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 +0000227
228#### SPARC Solaris with Sun C setups
Andy Polyakov1656ef21999-07-25 22:25:12 +0000229# SC4.0 doesn't pass 'make test', upgrade to SC5.0 or SC4.2.
230# 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 +0000231# SC5.0 note: Compiler common patch 107357-01 or later is required!
Andy Polyakov8861ba32005-04-13 07:22:41 +0000232"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 +0000233"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 +0000234"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 +0000235"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 +0000236####
Andy Polyakov6a8517f2007-08-28 20:45:25 +0000237"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 +0000238"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 +0000239
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000240#### SunOS configs, assuming sparc for the gcc one.
241#"sunos-cc", "cc:-O4 -DNOPROTO -DNOCONST::(unknown):SUNOS::DES_UNROLL:${no_asm}::",
242"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 +0000243
Andy Polyakovda8fa721999-07-25 20:40:58 +0000244#### IRIX 5.x configs
245# -mips2 flag is added by ./config when appropriate.
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000246"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)",
247"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 +0000248#### IRIX 6.x configs
249# Only N32 and N64 ABIs are supported. If you need O32 ABI build, invoke
Andy Polyakov30fbcaa2004-03-12 21:52:54 +0000250# './Configure irix-cc -o32' manually.
Andy Polyakovc23632d2009-02-09 15:11:22 +0000251"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",
252"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 +0000253# N64 ABI builds.
Andy Polyakovc23632d2009-02-09 15:11:22 +0000254"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",
255"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 +0000256
Andy Polyakovbcba6cc2000-02-12 23:33:01 +0000257#### Unified HP-UX ANSI C configs.
258# Special notes:
259# - Originally we were optimizing at +O4 level. It should be noted
260# that the only difference between +O3 and +O4 is global inter-
261# procedural analysis. As it has to be performed during the link
262# stage the compiler leaves behind certain pseudo-code in lib*.a
263# which might be release or even patch level specific. Generating
Andy Polyakovf8bbcf32000-02-15 17:31:12 +0000264# the machine code for and analyzing the *whole* program appears
265# to be *extremely* memory demanding while the performance gain is
Andy Polyakovbcba6cc2000-02-12 23:33:01 +0000266# actually questionable. The situation is intensified by the default
267# HP-UX data set size limit (infamous 'maxdsiz' tunable) of 64MB
268# which is way too low for +O4. In other words, doesn't +O3 make
269# more sense?
Andy Polyakovf8bbcf32000-02-15 17:31:12 +0000270# - Keep in mind that the HP compiler by default generates code
271# suitable for execution on the host you're currently compiling at.
272# If the toolkit is ment to be used on various PA-RISC processors
Andy Polyakov6d03b732001-07-30 16:42:15 +0000273# consider './config +DAportable'.
Andy Polyakovad5f0ed2003-11-20 19:10:36 +0000274# - +DD64 is chosen in favour of +DA2.0W because it's meant to be
Andy Polyakovbcba6cc2000-02-12 23:33:01 +0000275# compatible with *future* releases.
276# - If you run ./Configure hpux-parisc-[g]cc manually don't forget to
277# pass -D_REENTRANT on HP-UX 10 and later.
278# - -DMD32_XARRAY triggers workaround for compiler bug we ran into in
279# 32-bit message digests. (For the moment of this writing) HP C
280# doesn't seem to "digest" too many local variables (they make "him"
281# chew forever:-). For more details look-up MD32_XARRAY comment in
282# crypto/sha/sha_lcl.h.
283# <appro@fy.chalmers.se>
284#
Richard Levitte3bead952000-03-24 16:06:22 +0000285# Since there is mention of this in shlib/hpux10-cc.sh
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000286"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)",
287"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 +0000288"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 +0000289"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 +0000290
Richard Levitted0c2ebf2000-09-17 20:04:42 +0000291# More attempts at unified 10.X and 11.X targets for HP C compiler.
292#
293# Chris Ruemmler <ruemmler@cup.hp.com>
294# Kevin Steves <ks@hp.se>
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000295"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)",
296"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 +0000297"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 +0000298"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 +0000299
Andy Polyakov12470922004-01-29 22:16:08 +0000300# HP/UX IA-64 targets
Andy Polyakovc23632d2009-02-09 15:11:22 +0000301"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 +0000302# Frank Geurts <frank.geurts@nl.abnamro.com> has patiently assisted with
303# with debugging of the following config.
Andy Polyakovc23632d2009-02-09 15:11:22 +0000304"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 +0000305# GCC builds...
Andy Polyakovc23632d2009-02-09 15:11:22 +0000306"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",
307"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 +0000308
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000309# Legacy HPUX 9.X configs...
310"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)",
311"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 +0000312
Richard Levittec5f8bbb2000-09-21 05:42:01 +0000313#### HP MPE/iX http://jazz.external.hp.com/src/openssl/
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000314"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 +0000315
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000316# DEC Alpha OSF/1/Tru64 targets.
Richard Levitte6bc847e2001-08-10 15:26:21 +0000317#
318# "What's in a name? That which we call a rose
319# By any other word would smell as sweet."
320#
321# - William Shakespeare, "Romeo & Juliet", Act II, scene II.
322#
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000323# For gcc, the following gave a %50 speedup on a 164 over the 'DES_INT' version
Richard Levitte6bc847e2001-08-10 15:26:21 +0000324#
Andy Polyakov98c15092006-12-08 14:42:19 +0000325"osf1-alpha-gcc", "gcc:-O3::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_RISC1:${alpha_asm}:dlfcn:alpha-osf1-shared:::.so",
326"osf1-alpha-cc", "cc:-std1 -tune host -O4 -readonly_strings::(unknown):::SIXTY_FOUR_BIT_LONG RC4_CHUNK:${alpha_asm}:dlfcn:alpha-osf1-shared:::.so",
327"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 +0000328
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000329####
330#### Variety of LINUX:-)
331####
Andy Polyakovb7efa562005-01-24 14:38:14 +0000332# *-generic* is endian-neutral target, but ./config is free to
333# throw in -D[BL]_ENDIAN, whichever appropriate...
334"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 +0000335"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 +0000336# It's believed that majority of ARM toolchains predefine appropriate -march.
337# If you compiler does not, do complement config command line with one!
Andy Polyakov2c3ee162007-09-27 07:43:58 +0000338"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 +0000339#### IA-32 targets...
340"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 +0000341"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 +0000342"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 +0000343####
344"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 +0000345"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 +0000346"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)",
347"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)",
348"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)",
Andy Polyakovc23632d2009-02-09 15:11:22 +0000349"linux-x86_64", "gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
350"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 +0000351#### SPARC Linux setups
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000352# Ray Miller <ray.miller@computing-services.oxford.ac.uk> has patiently
353# assisted with debugging of following two configs.
Andy Polyakov6a8517f2007-08-28 20:45:25 +0000354"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 +0000355# it's a real mess with -mcpu=ultrasparc option under Linux, but
356# -Wa,-Av8plus should do the trick no matter what.
Andy Polyakov3b4a0222005-12-19 09:10:06 +0000357"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 +0000358# GCC 3.1 is a requirement
Andy Polyakovc23632d2009-02-09 15:11:22 +0000359"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 +0000360#### Alpha Linux with GNU C and Compaq C setups
Andy Polyakovf8bbcf32000-02-15 17:31:12 +0000361# Special notes:
362# - linux-alpha+bwx-gcc is ment to be used from ./config only. If you
363# ought to run './Configure linux-alpha+bwx-gcc' manually, do
364# complement the command line with -mcpu=ev56, -mcpu=ev6 or whatever
365# which is appropriate.
366# - If you use ccc keep in mind that -fast implies -arch host and the
367# compiler is free to issue instructions which gonna make elder CPU
368# choke. If you wish to build "blended" toolkit, add -arch generic
369# *after* -fast and invoke './Configure linux-alpha-ccc' manually.
370#
371# <appro@fy.chalmers.se>
372#
Andy Polyakov98c15092006-12-08 14:42:19 +0000373"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)",
374"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)",
375"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}",
376"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 +0000377
Andy Polyakovb7efa562005-01-24 14:38:14 +0000378#### *BSD [do see comment about ${BSDthreads} above!]
379"BSD-generic32","gcc:-DTERMIOS -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
Andy Polyakovdab62932008-11-12 08:21:20 +0000380"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 +0000381"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 +0000382"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 +0000383"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 +0000384
Andy Polyakovb7efa562005-01-24 14:38:14 +0000385"BSD-generic64","gcc:-DTERMIOS -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
386# -DMD32_REG_T=int doesn't actually belong in sparc64 target, it
387# simply *happens* to work around a compiler bug in gcc 3.3.3,
388# triggered by RIPEMD160 code.
Andy Polyakova00e4142005-12-16 17:39:57 +0000389"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 +0000390"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 +0000391"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 +0000392
Nils Larscha1368622005-06-12 10:34:42 +0000393"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 +0000394
Richard Levittecf1b7d92001-02-19 16:06:34 +0000395"nextstep", "cc:-O -Wall:<libc.h>:(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::",
396"nextstep3.3", "cc:-O3 -Wall:<libc.h>:(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:::",
397
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000398# NCR MP-RAS UNIX ver 02.03.01
Lutz Jänickeacad5752003-01-16 07:54:52 +0000399"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 +0000400
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000401# QNX
Richard Levittecf1b7d92001-02-19 16:06:34 +0000402"qnx4", "cc:-DL_ENDIAN -DTERMIO::(unknown):::${x86_gcc_des} ${x86_gcc_opts}:",
Lutz Jänicke6a9af682001-11-30 09:38:57 +0000403"qnx6", "cc:-DL_ENDIAN -DTERMIOS::(unknown)::-lsocket:${x86_gcc_des} ${x86_gcc_opts}:",
404
Ulf Möller4700aea2006-04-11 21:34:21 +0000405# BeOS
406"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",
407"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",
408
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000409#### SCO/Caldera targets.
Andy Polyakovfda20f02003-01-12 15:50:59 +0000410#
Andy Polyakov699543e2003-01-09 08:42:04 +0000411# Originally we had like unixware-*, unixware-*-pentium, unixware-*-p6, etc.
412# Now we only have blended unixware-* as it's the only one used by ./config.
Andy Polyakovfda20f02003-01-12 15:50:59 +0000413# If you want to optimize for particular microarchitecture, bypass ./config
Andy Polyakov699543e2003-01-09 08:42:04 +0000414# and './Configure unixware-7 -Kpentium_pro' or whatever appropriate.
Andy Polyakovfda20f02003-01-12 15:50:59 +0000415# Note that not all targets include assembler support. Mostly because of
416# lack of motivation to support out-of-date platforms with out-of-date
417# compiler drivers and assemblers. Tim Rice <tim@multitalents.net> has
418# patiently assisted to debug most of it.
Andy Polyakov699543e2003-01-09 08:42:04 +0000419#
420# UnixWare 2.0x fails destest with -O.
Richard Levitte9335a5f2002-07-18 07:47:30 +0000421"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 +0000422"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 +0000423"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 +0000424"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 +0000425# SCO 5 - Ben Laurie <ben@algroup.co.uk> says the -O breaks the SCO cc.
Andy Polyakov42bf2a52003-01-18 21:57:30 +0000426"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)",
427"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 +0000428
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000429#### IBM's AIX.
Andy Polyakov76ef6ac2004-12-20 13:44:34 +0000430"aix3-cc", "cc:-O -DB_ENDIAN -qmaxmem=16384::(unknown):AIX::BN_LLONG RC4_CHAR:::",
Andy Polyakov492279f2008-09-12 14:45:54 +0000431"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",
432"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 +0000433# Below targets assume AIX 5. Idea is to effectively disregard $OBJECT_MODE
434# at build time. $OBJECT_MODE is respected at ./config stage!
Andy Polyakov492279f2008-09-12 14:45:54 +0000435"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",
436"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 +0000437
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000438#
Bodo Möllerc46acba2002-03-15 16:46:41 +0000439# Cray T90 and similar (SDSC)
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000440# It's Big-endian, but the algorithms work properly when B_ENDIAN is NOT
441# defined. The T90 ints and longs are 8 bytes long, and apparently the
442# B_ENDIAN code assumes 4 byte ints. Fortunately, the non-B_ENDIAN and
443# non L_ENDIAN code aligns the bytes in each word correctly.
444#
445# The BIT_FIELD_LIMITS define is to avoid two fatal compiler errors:
446#'Taking the address of a bit field is not allowed. '
447#'An expression with bit field exists as the operand of "sizeof" '
448# (written by Wayne Schroeder <schroede@SDSC.EDU>)
Bodo Möllerc46acba2002-03-15 16:46:41 +0000449#
450# j90 is considered the base machine type for unicos machines,
451# so this configuration is now called "cray-j90" ...
452"cray-j90", "cc: -DBIT_FIELD_LIMITS -DTERMIOS::(unknown):CRAY::SIXTY_FOUR_BIT_LONG DES_INT:::",
Ralf S. Engelschall58964a41998-12-21 10:56:39 +0000453
Ralf S. Engelschall13e91dd1998-12-22 15:59:57 +0000454#
455# Cray T3E (Research Center Juelich, beckman@acl.lanl.gov)
456#
457# The BIT_FIELD_LIMITS define was written for the C90 (it seems). I added
458# another use. Basically, the problem is that the T3E uses some bit fields
459# for some st_addr stuff, and then sizeof and address-of fails
460# I could not use the ams/alpha.o option because the Cray assembler, 'cam'
461# did not like it.
Richard Levittecf1b7d92001-02-19 16:06:34 +0000462"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 +0000463
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000464# DGUX, 88100.
Richard Levittecf1b7d92001-02-19 16:06:34 +0000465"dgux-R3-gcc", "gcc:-O3 -fomit-frame-pointer::(unknown):::RC4_INDEX DES_UNROLL:::",
Richard Levitte0da945b2001-04-03 08:05:03 +0000466"dgux-R4-gcc", "gcc:-O3 -fomit-frame-pointer::(unknown)::-lnsl -lsocket:RC4_INDEX DES_UNROLL:::",
Richard Levittecf1b7d92001-02-19 16:06:34 +0000467"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 +0000468
Ulf Möller1fac96e1999-05-20 17:28:19 +0000469# Sinix/ReliantUNIX RM400
470# 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 +0000471"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 +0000472"SINIX","cc:-O::(unknown):SNI:-lsocket -lnsl -lc -L/usr/ucblib -lucb:RC4_INDEX RC4_CHAR:::",
473"SINIX-N","/usr/ucb/cc:-O2 -misaligned::(unknown)::-lucb:RC4_INDEX RC4_CHAR:::",
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000474
Ulf Möllera53955d1999-06-04 21:35:58 +0000475# SIEMENS BS2000/OSD: an EBCDIC-based mainframe
Richard Levittecf1b7d92001-02-19 16:06:34 +0000476"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 +0000477
Bodo Möller1d4581c2001-11-22 11:09:42 +0000478# OS/390 Unix an EBCDIC-based Unix system on IBM mainframe
479# You need to compile using the c89.sh wrapper in the tools directory, because the
480# IBM compiler does not like the -L switch after any object modules.
481#
482"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:::",
483
Andy Polyakovbafcc7e2004-07-23 19:18:20 +0000484# Visual C targets
Andy Polyakovf63e4be2008-01-13 17:56:02 +0000485#
486# Win64 targets, WIN64I denotes IA-64 and WIN64A - AMD64
Dr. Stephen Hensond4f03392009-04-26 22:18:22 +0000487"VC-WIN64I","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ias:win32",
Andy Polyakov065c5d62009-05-02 21:18:52 +0000488"VC-WIN64A","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_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 +0000489# x86 Win32 target defaults to ANSI API, if you want UNICODE, complement
490# 'perl Configure VC-WIN32' with '-DUNICODE -D_UNICODE'
Dr. Stephen Hensond4f03392009-04-26 22:18:22 +0000491"VC-WIN32","cl:-W3 -WX -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_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 +0000492# Unified CE target
493"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 +0000494
495# Borland C++ 4.5
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000496"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 +0000497
Ulf Möller66ecdf32003-02-22 18:00:14 +0000498# MinGW
Dr. Stephen Henson220bd842009-04-06 15:22:01 +0000499"mingw", "gcc:-mno-cygwin -DL_ENDIAN -DOPENSSL_NO_CAPIENG -fomit-frame-pointer -O3 -march=i486 -Wall:::MINGW32:-lws2_32 -lgdi32: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 +0000500# As for OPENSSL_USE_APPLINK. Applink makes it possible to use .dll
501# compiled with one compiler with application compiled with another
502# compiler. It's possible to engage Applink support in mingw64 build,
503# but it's not done, because till mingw64 supports structured exception
504# handling, one can't seriously consider its binaries for using with
505# non-mingw64 run-time environment. And as mingw64 is always consistent
506# with itself, Applink is never engaged and can as well be omitted.
507"mingw64", "gcc:-mno-cygwin -DL_ENDIAN -O3 -Wall -DWIN32_LEAN_AND_MEAN -DUNICODE -D_UNICODE:::MINGW64:-lws2_32 -lgdi32: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 +0000508
Richard Levittec69d1032002-06-13 21:44:23 +0000509# UWIN
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000510"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 +0000511
Richard Levitte49e04542002-02-14 12:28:24 +0000512# Cygwin
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000513"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 +0000514"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 +0000515"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 +0000516
Dr. Stephen Hensoneef0c1f2008-01-03 22:43:04 +0000517# NetWare from David Ward (dsward@novell.com)
518# requires either MetroWerks NLM development tools, or gcc / nlmconv
519# NetWare defaults socket bio to WinSock sockets. However,
520# the builds can be configured to use BSD sockets instead.
Richard Levitte4d8743f2003-11-28 13:10:58 +0000521# netware-clib => legacy CLib c-runtime support
Dr. Stephen Hensoneef0c1f2008-01-03 22:43:04 +0000522"netware-clib", "mwccnlm::::::${x86_gcc_opts}::",
523"netware-clib-bsdsock", "mwccnlm::::::${x86_gcc_opts}::",
524"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}::",
525"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 +0000526# netware-libc => LibC/NKS support
Richard Levitte9e5b3782005-06-05 21:47:19 +0000527"netware-libc", "mwccnlm::::::BN_LLONG ${x86_gcc_opts}::",
Richard Levitteb764ab92005-06-13 03:23:50 +0000528"netware-libc-bsdsock", "mwccnlm::::::BN_LLONG ${x86_gcc_opts}::",
Richard Levitte9e5b3782005-06-05 21:47:19 +0000529"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 +0000530"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 +0000531
Richard Levitte451dc182002-06-13 20:42:35 +0000532# DJGPP
Andy Polyakovdab62932008-11-12 08:21:20 +0000533"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 +0000534
Ulf Möller22a4f961999-04-19 13:54:11 +0000535# Ultrix from Bernhard Simon <simon@zid.tuwien.ac.at>
Lutz Jänicke9314e362002-12-10 18:48:14 +0000536"ultrix-cc","cc:-std1 -O -Olimit 2500 -DL_ENDIAN::(unknown):::::::",
Richard Levittee774a322005-06-05 22:19:24 +0000537"ultrix-gcc","gcc:-O3 -DL_ENDIAN::(unknown):::BN_LLONG::::",
Ulf Möller22a4f961999-04-19 13:54:11 +0000538# K&R C is no longer supported; you need gcc on old Ultrix installations
Richard Levittecf1b7d92001-02-19 16:06:34 +0000539##"ultrix","cc:-O2 -DNOPROTO -DNOCONST -DL_ENDIAN::(unknown):::::::",
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +0000540
Richard Levitte9b7a5522000-12-01 01:11:54 +0000541##### MacOS X (a.k.a. Rhapsody or Darwin) setup
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000542"rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown):MACOSX_RHAPSODY::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}::",
Andy Polyakovaddd6412008-01-13 22:01:30 +0000543"darwin-ppc-cc","cc:-arch ppc -O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
544"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 +0000545"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",
546"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",
547"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 BF_PTR2 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 +0000548"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 +0000549
Richard Levitte729f0a22002-10-11 14:39:03 +0000550##### A/UX
551"aux3-gcc","gcc:-O2 -DTERMIO::(unknown):AUX:-lbsd:RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
552
Richard Levitte72660f52000-09-14 12:48:48 +0000553##### Sony NEWS-OS 4.x
Richard Levittecf1b7d92001-02-19 16:06:34 +0000554"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 +0000555
Richard Levitte10a29752001-01-11 12:58:37 +0000556##### GNU Hurd
Nils Larscha1368622005-06-12 10:34:42 +0000557"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 +0000558
Richard Levittedc01b6b2001-07-01 22:39:46 +0000559##### OS/2 EMX
560"OS2-EMX", "gcc::::::::",
561
Richard Levitte3e83e682002-02-14 15:37:38 +0000562##### VxWorks for various targets
563"vxworks-ppc405","ccppc:-g -msoft-float -mlongcall -DCPU=PPC405 -I\$(WIND_BASE)/target/h:::VXWORKS:-r:::::",
Richard Levitte6a89a252002-10-09 13:40:48 +0000564"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:::::",
565"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 +0000566"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 +0000567"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 +0000568
Richard Levitteb9c23cc2002-11-14 16:30:11 +0000569##### Compaq Non-Stop Kernel (Tandem)
570"tandem-c89","c89:-Ww -D__TANDEM -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1 -D_TANDEM_SOURCE -DB_ENDIAN::(unknown):::THIRTY_TWO_BIT:::",
571
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000572);
573
Andy Polyakov33c3ecf2004-07-23 23:27:10 +0000574my @MK1MF_Builds=qw(VC-WIN64I VC-WIN64A
575 VC-NT VC-CE VC-WIN32
Dr. Stephen Hensonef236ec2009-04-23 16:32:42 +0000576 BC-32
Dr. Stephen Hensoneef0c1f2008-01-03 22:43:04 +0000577 netware-clib netware-clib-bsdsock
578 netware-libc netware-libc-bsdsock);
Ben Laurieefadf601999-03-07 15:21:08 +0000579
Richard Levitted0d046e2002-01-27 15:52:37 +0000580my $idx = 0;
581my $idx_cc = $idx++;
582my $idx_cflags = $idx++;
583my $idx_unistd = $idx++;
584my $idx_thread_cflag = $idx++;
585my $idx_sys_id = $idx++;
586my $idx_lflags = $idx++;
587my $idx_bn_ops = $idx++;
Andy Polyakov14e21f82004-07-26 20:18:55 +0000588my $idx_cpuid_obj = $idx++;
Richard Levitted0d046e2002-01-27 15:52:37 +0000589my $idx_bn_obj = $idx++;
590my $idx_des_obj = $idx++;
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000591my $idx_aes_obj = $idx++;
Richard Levitted0d046e2002-01-27 15:52:37 +0000592my $idx_bf_obj = $idx++;
593my $idx_md5_obj = $idx++;
594my $idx_sha1_obj = $idx++;
595my $idx_cast_obj = $idx++;
596my $idx_rc4_obj = $idx++;
597my $idx_rmd160_obj = $idx++;
598my $idx_rc5_obj = $idx++;
Andy Polyakov0fbd4bf2005-12-16 11:53:31 +0000599my $idx_wp_obj = $idx++;
Andy Polyakov6a8517f2007-08-28 20:45:25 +0000600my $idx_cmll_obj = $idx++;
Andy Polyakovfa8e9212008-01-11 13:15:11 +0000601my $idx_perlasm_scheme = $idx++;
Richard Levitted0d046e2002-01-27 15:52:37 +0000602my $idx_dso_scheme = $idx++;
603my $idx_shared_target = $idx++;
604my $idx_shared_cflag = $idx++;
605my $idx_shared_ldflag = $idx++;
606my $idx_shared_extension = $idx++;
607my $idx_ranlib = $idx++;
Richard Levitte179add22002-08-01 20:28:16 +0000608my $idx_arflags = $idx++;
Andy Polyakovc23632d2009-02-09 15:11:22 +0000609my $idx_multilib = $idx++;
Richard Levitted0d046e2002-01-27 15:52:37 +0000610
Bodo Möllere5f30451999-04-29 21:52:08 +0000611my $prefix="";
Ulf Möller462ba4f1999-04-24 22:59:36 +0000612my $openssldir="";
Richard Levitte967d95f2001-04-04 15:50:30 +0000613my $exe_ext="";
Bodo Möllere5f30451999-04-29 21:52:08 +0000614my $install_prefix="";
Andy Polyakovcbfb39d2006-10-21 13:38:16 +0000615my $cross_compile_prefix="";
Bodo Möller5f8d5c91999-04-29 16:10:09 +0000616my $no_threads=0;
617my $threads=0;
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000618my $no_shared=0; # but "no-shared" is default
619my $zlib=1; # but "no-zlib" is default
620my $no_krb5=0; # but "no-krb5" is implied unless "--with-krb5-..." is used
Dr. Stephen Hensond137b562006-11-30 13:39:34 +0000621my $no_rfc3779=1; # but "no-rfc3779" is default
Ben Laurie1641cb61998-12-28 17:08:48 +0000622my $no_asm=0;
Geoff Thorpebc2aada2000-04-06 07:09:45 +0000623my $no_dso=0;
Dr. Stephen Henson987beba2005-04-19 13:24:44 +0000624my $no_gmp=0;
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000625my @skip=();
Ben Laurie42ba5d22005-03-30 13:05:57 +0000626my $Makefile="Makefile";
Ben Laurie1641cb61998-12-28 17:08:48 +0000627my $des_locl="crypto/des/des_locl.h";
628my $des ="crypto/des/des.h";
629my $bn ="crypto/bn/bn.h";
630my $md2 ="crypto/md2/md2.h";
631my $rc4 ="crypto/rc4/rc4.h";
632my $rc4_locl="crypto/rc4/rc4_locl.h";
633my $idea ="crypto/idea/idea.h";
634my $rc2 ="crypto/rc2/rc2.h";
635my $bf ="crypto/bf/bf_locl.h";
636my $bn_asm ="bn_asm.o";
637my $des_enc="des_enc.o fcrypt_b.o";
Andy Polyakoved65fab2005-01-18 00:43:32 +0000638my $aes_enc="aes_core.o aes_cbc.o";
Ben Laurie1641cb61998-12-28 17:08:48 +0000639my $bf_enc ="bf_enc.o";
640my $cast_enc="c_enc.o";
Andy Polyakov28754622007-04-01 17:01:12 +0000641my $rc4_enc="rc4_enc.o rc4_skey.o";
Ben Laurie1641cb61998-12-28 17:08:48 +0000642my $rc5_enc="rc5_enc.o";
643my $md5_obj="";
644my $sha1_obj="";
645my $rmd160_obj="";
Andy Polyakov6a8517f2007-08-28 20:45:25 +0000646my $cmll_enc="camellia.o cmll_misc.o cmll_cbc.o";
Ulf Möller2613c1f1999-03-31 12:38:27 +0000647my $processor="";
Bodo Möller03964792001-03-09 13:04:06 +0000648my $default_ranlib;
Ulf Möller99aab161999-04-01 12:34:33 +0000649my $perl;
650
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000651
652# All of the following is disabled by default (RC5 was enabled before 0.9.8):
653
Bodo Möller7a762192008-12-02 01:21:39 +0000654my %disabled = ( # "what" => "comment" [or special keyword "experimental"]
Dr. Stephen Henson987beba2005-04-19 13:24:44 +0000655 "gmp" => "default",
Bodo Möller7a762192008-12-02 01:21:39 +0000656 "jpake" => "experimental",
Bodo Möllerecc5ef82005-03-02 20:11:31 +0000657 "mdc2" => "default",
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000658 "rc5" => "default",
Ben Laurie96ea4ae2006-11-27 14:18:05 +0000659 "rfc3779" => "default",
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000660 "shared" => "default",
Richard Levitteae3b4f22009-02-19 09:43:18 +0000661 "store" => "experimental",
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000662 "zlib" => "default",
663 "zlib-dynamic" => "default"
664 );
Bodo Möller7a762192008-12-02 01:21:39 +0000665my @experimental = ();
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000666
Bodo Möller7a762192008-12-02 01:21:39 +0000667# This is what $depflags will look like with the above defaults
668# (we need this to see if we should advise the user to run "make depend"):
Richard Levitteae3b4f22009-02-19 09:43:18 +0000669my $default_depflags = " -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MDC2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_STORE";
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000670
Bodo Möller7a762192008-12-02 01:21:39 +0000671
672# Explicit "no-..." options will be collected in %disabled along with the defaults.
673# To remove something from %disabled, use "enable-foo" (unless it's experimental).
674# For symmetry, "disable-foo" is a synonym for "no-foo".
675
676# For features called "experimental" here, a more explicit "experimental-foo" is needed to enable.
677# We will collect such requests in @experimental.
678# To avoid accidental use of experimental features, applications will have to use -DOPENSSL_EXPERIMENTAL_FOO.
Bodo Möllerab185b62005-03-13 19:46:58 +0000679
680
Andy Polyakovd0590fe2004-07-18 16:19:34 +0000681my $no_sse2=0;
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000682
Ulf Möller462ba4f1999-04-24 22:59:36 +0000683&usage if ($#ARGV < 0);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000684
Richard Levittec59cb512000-08-17 10:23:45 +0000685my $flags;
686my $depflags;
Bodo Möller7a762192008-12-02 01:21:39 +0000687my $openssl_experimental_defines;
Richard Levittec59cb512000-08-17 10:23:45 +0000688my $openssl_algorithm_defines;
689my $openssl_thread_defines;
Richard Levittecf1b7d92001-02-19 16:06:34 +0000690my $openssl_sys_defines="";
Richard Levittec59cb512000-08-17 10:23:45 +0000691my $openssl_other_defines;
692my $libs;
Richard Levittec1269c82003-02-14 13:12:00 +0000693my $libkrb5="";
Richard Levittec59cb512000-08-17 10:23:45 +0000694my $target;
695my $options;
696my $symlink;
Richard Levitte451dc182002-06-13 20:42:35 +0000697my $make_depend=0;
Richard Levittef9b3bff2000-11-30 22:53:34 +0000698my %withargs=();
Richard Levittec59cb512000-08-17 10:23:45 +0000699
700my @argvcopy=@ARGV;
701my $argvstring="";
702my $argv_unprocessed=1;
703
704while($argv_unprocessed)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000705 {
Richard Levittec59cb512000-08-17 10:23:45 +0000706 $flags="";
707 $depflags="";
Bodo Möller7a762192008-12-02 01:21:39 +0000708 $openssl_experimental_defines="";
Richard Levittec59cb512000-08-17 10:23:45 +0000709 $openssl_algorithm_defines="";
710 $openssl_thread_defines="";
Richard Levittecf1b7d92001-02-19 16:06:34 +0000711 $openssl_sys_defines="";
Richard Levittec59cb512000-08-17 10:23:45 +0000712 $openssl_other_defines="";
713 $libs="";
714 $target="";
715 $options="";
716 $symlink=1;
717
718 $argv_unprocessed=0;
719 $argvstring=join(' ',@argvcopy);
720
721PROCESS_ARGS:
722 foreach (@argvcopy)
Ulf Möllerf5d7a031999-04-27 01:14:46 +0000723 {
Richard Levittec59cb512000-08-17 10:23:45 +0000724 s /^-no-/no-/; # some people just can't read the instructions
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000725
726 # rewrite some options in "enable-..." form
727 s /^-?-?shared$/enable-shared/;
728 s /^threads$/enable-threads/;
729 s /^zlib$/enable-zlib/;
730 s /^zlib-dynamic$/enable-zlib-dynamic/;
731
732 if (/^no-(.+)$/ || /^disable-(.+)$/)
733 {
Bodo Möller7a762192008-12-02 01:21:39 +0000734 if (!($disabled{$1} eq "experimental"))
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000735 {
Bodo Möller7a762192008-12-02 01:21:39 +0000736 if ($1 eq "ssl")
737 {
738 $disabled{"ssl2"} = "option(ssl)";
739 $disabled{"ssl3"} = "option(ssl)";
740 }
741 elsif ($1 eq "tls")
742 {
743 $disabled{"tls1"} = "option(tls)"
744 }
745 else
746 {
747 $disabled{$1} = "option";
748 }
749 }
750 }
751 elsif (/^enable-(.+)$/ || /^experimental-(.+)$/)
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000752 {
Bodo Möller7a762192008-12-02 01:21:39 +0000753 my $algo = $1;
754 if ($disabled{$algo} eq "experimental")
755 {
756 die "You are requesting an experimental feature; please say 'experimental-$algo' if you are sure\n"
757 unless (/^experimental-/);
758 push @experimental, $algo;
759 }
760 delete $disabled{$algo};
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000761
Bodo Möller7a762192008-12-02 01:21:39 +0000762 $threads = 1 if ($algo eq "threads");
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000763 }
764 elsif (/^--test-sanity$/)
Richard Levitted0d046e2002-01-27 15:52:37 +0000765 {
766 exit(&test_sanity());
767 }
Richard Levittec59cb512000-08-17 10:23:45 +0000768 elsif (/^reconfigure/ || /^reconf/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000769 {
Richard Levittec59cb512000-08-17 10:23:45 +0000770 if (open(IN,"<$Makefile"))
771 {
772 while (<IN>)
773 {
Richard Levitte67475a72006-04-03 09:15:15 +0000774 chomp;
Richard Levittec59cb512000-08-17 10:23:45 +0000775 if (/^CONFIGURE_ARGS=(.*)/)
776 {
777 $argvstring=$1;
778 @argvcopy=split(' ',$argvstring);
779 die "Incorrect data to reconfigure, please do a normal configuration\n"
780 if (grep(/^reconf/,@argvcopy));
781 print "Reconfiguring with: $argvstring\n";
782 $argv_unprocessed=1;
783 close(IN);
784 last PROCESS_ARGS;
785 }
786 }
787 close(IN);
788 }
789 die "Insufficient data to reconfigure, please do a normal configuration\n";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000790 }
Richard Levittec59cb512000-08-17 10:23:45 +0000791 elsif (/^386$/)
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000792 { $processor=386; }
Richard Levittec59cb512000-08-17 10:23:45 +0000793 elsif (/^rsaref$/)
Ralf S. Engelschall3eb0ed61999-03-06 14:35:03 +0000794 {
Richard Levitteccb96432000-11-08 17:51:37 +0000795 # No RSAref support any more since it's not needed.
796 # The check for the option is there so scripts aren't
797 # broken
Ulf Möller462ba4f1999-04-24 22:59:36 +0000798 }
Richard Levittec59cb512000-08-17 10:23:45 +0000799 elsif (/^[-+]/)
Ulf Möller462ba4f1999-04-24 22:59:36 +0000800 {
Andy Polyakovd719e602005-12-16 11:29:19 +0000801 if (/^-[lL](.*)$/ or /^-Wl,/)
Richard Levittec59cb512000-08-17 10:23:45 +0000802 {
803 $libs.=$_." ";
804 }
805 elsif (/^-[^-]/ or /^\+/)
806 {
807 $flags.=$_." ";
808 }
809 elsif (/^--prefix=(.*)$/)
810 {
811 $prefix=$1;
812 }
813 elsif (/^--openssldir=(.*)$/)
814 {
815 $openssldir=$1;
816 }
817 elsif (/^--install.prefix=(.*)$/)
818 {
819 $install_prefix=$1;
820 }
Richard Levittef9b3bff2000-11-30 22:53:34 +0000821 elsif (/^--with-krb5-(dir|lib|include|flavor)=(.*)$/)
822 {
823 $withargs{"krb5-".$1}=$2;
824 }
Dr. Stephen Henson1291dfd2005-12-06 13:36:59 +0000825 elsif (/^--with-zlib-lib=(.*)$/)
Dr. Stephen Hensonad2695b2005-12-05 13:46:46 +0000826 {
Dr. Stephen Henson1291dfd2005-12-06 13:36:59 +0000827 $withargs{"zlib-lib"}=$1;
828 }
829 elsif (/^--with-zlib-include=(.*)$/)
830 {
831 $withargs{"zlib-include"}="-I$1";
Dr. Stephen Hensonad2695b2005-12-05 13:46:46 +0000832 }
Andy Polyakovcbfb39d2006-10-21 13:38:16 +0000833 elsif (/^--cross-compile-prefix=(.*)$/)
834 {
835 $cross_compile_prefix=$1;
836 }
Richard Levittec59cb512000-08-17 10:23:45 +0000837 else
838 {
839 print STDERR $usage;
840 exit(1);
841 }
Ralf S. Engelschall3eb0ed61999-03-06 14:35:03 +0000842 }
Richard Levittec59cb512000-08-17 10:23:45 +0000843 elsif ($_ =~ /^([^:]+):(.+)$/)
Bodo Möllere5f30451999-04-29 21:52:08 +0000844 {
Richard Levittec59cb512000-08-17 10:23:45 +0000845 eval "\$table{\$1} = \"$2\""; # allow $xxx constructs in the string
846 $target=$1;
Bodo Möllere5f30451999-04-29 21:52:08 +0000847 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000848 else
849 {
Richard Levittea761b892005-06-13 02:39:05 +0000850 die "target already defined - $target (offending arg: $_)\n" if ($target ne "");
Richard Levittec59cb512000-08-17 10:23:45 +0000851 $target=$_;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000852 }
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000853
854 unless ($_ eq $target || /^no-/ || /^disable-/)
855 {
856 # "no-..." follows later after implied disactivations
857 # have been derived. (Don't take this too seroiusly,
858 # we really only write OPTIONS to the Makefile out of
859 # nostalgia.)
860
861 if ($options eq "")
862 { $options = $_; }
863 else
864 { $options .= " ".$_; }
Richard Levittec59cb512000-08-17 10:23:45 +0000865 }
Bodo Möllerfbabb751999-07-09 12:00:34 +0000866 }
867 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +0000868
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000869
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000870
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000871if ($processor eq "386")
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000872 {
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000873 $disabled{"sse2"} = "forced";
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000874 }
875
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000876if (!defined($withargs{"krb5-flavor"}) || $withargs{"krb5-flavor"} eq "")
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000877 {
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000878 $disabled{"krb5"} = "krb5-flavor not specified";
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000879 }
880
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000881if (!defined($disabled{"zlib-dynamic"}))
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000882 {
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000883 # "zlib-dynamic" was specifically enabled, so enable "zlib"
884 delete $disabled{"zlib"};
Richard Levitteb6e4dac2001-11-27 11:48:30 +0000885 }
886
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000887if (defined($disabled{"rijndael"}))
888 {
889 $disabled{"aes"} = "forced";
890 }
891if (defined($disabled{"des"}))
892 {
893 $disabled{"mdc2"} = "forced";
894 }
895if (defined($disabled{"ec"}))
896 {
897 $disabled{"ecdsa"} = "forced";
898 $disabled{"ecdh"} = "forced";
899 }
900
901# SSL 2.0 requires MD5 and RSA
902if (defined($disabled{"md5"}) || defined($disabled{"rsa"}))
903 {
904 $disabled{"ssl2"} = "forced";
905 }
906
907# SSL 3.0 and TLS requires MD5 and SHA and either RSA or DSA+DH
908if (defined($disabled{"md5"}) || defined($disabled{"sha"})
909 || (defined($disabled{"rsa"})
910 && (defined($disabled{"dsa"}) || defined($disabled{"dh"}))))
911 {
912 $disabled{"ssl3"} = "forced";
913 $disabled{"tls1"} = "forced";
914 }
915
Bodo Möllerf1fd4542006-01-03 03:27:19 +0000916if (defined($disabled{"tls1"}))
917 {
918 $disabled{"tlsext"} = "forced";
919 }
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000920
Dr. Stephen Hensond4f03392009-04-26 22:18:22 +0000921if (defined($disabled{"ec"}) || defined($disabled{"dsa"})
922 || defined($disabled{"dh"}))
Dr. Stephen Hensonef236ec2009-04-23 16:32:42 +0000923 {
924 $disabled{"gost"} = "forced";
925 }
926
Bodo Möller436a3761999-05-28 23:18:51 +0000927if ($target eq "TABLE") {
928 foreach $target (sort keys %table) {
929 print_table_entry($target);
930 }
Bodo Möller436a3761999-05-28 23:18:51 +0000931 exit 0;
932}
933
Ulf Möller10a926c2000-02-21 00:55:45 +0000934if ($target eq "LIST") {
935 foreach (sort keys %table) {
936 print;
937 print "\n";
938 }
939 exit 0;
940}
941
Richard Levitte49e04542002-02-14 12:28:24 +0000942if ($target =~ m/^CygWin32(-.*)$/) {
943 $target = "Cygwin".$1;
944}
945
Richard Levittec59cb512000-08-17 10:23:45 +0000946print "Configuring for $target\n";
947
Ulf Möller462ba4f1999-04-24 22:59:36 +0000948&usage if (!defined($table{$target}));
949
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000950
951foreach (sort (keys %disabled))
952 {
953 $options .= " no-$_";
954
955 printf " no-%-12s %-10s", $_, "[$disabled{$_}]";
956
957 if (/^dso$/)
958 { $no_dso = 1; }
959 elsif (/^threads$/)
960 { $no_threads = 1; }
961 elsif (/^shared$/)
962 { $no_shared = 1; }
963 elsif (/^zlib$/)
964 { $zlib = 0; }
Dr. Stephen Hensonfbf002b2005-11-06 17:58:26 +0000965 elsif (/^static-engine$/)
966 { }
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000967 elsif (/^zlib-dynamic$/)
968 { }
969 elsif (/^symlinks$/)
970 { $symlink = 0; }
971 elsif (/^sse2$/)
972 { $no_sse2 = 1; }
973 else
974 {
975 my ($ALGO, $algo);
976 ($ALGO = $algo = $_) =~ tr/[a-z]/[A-Z]/;
977
978 if (/^asm$/ || /^err$/ || /^hw$/ || /^hw-/)
979 {
980 $openssl_other_defines .= "#define OPENSSL_NO_$ALGO\n";
981 print " OPENSSL_NO_$ALGO";
982
Andy Polyakov5df70a92005-06-22 23:44:44 +0000983 if (/^err$/) { $flags .= "-DOPENSSL_NO_ERR "; }
984 elsif (/^asm$/) { $no_asm = 1; }
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000985 }
986 else
987 {
988 $openssl_algorithm_defines .= "#define OPENSSL_NO_$ALGO\n";
989 print " OPENSSL_NO_$ALGO";
990
991 if (/^krb5$/)
992 { $no_krb5 = 1; }
993 else
994 {
995 push @skip, $algo;
996 print " (skip dir)";
Bodo Möllerab185b62005-03-13 19:46:58 +0000997
Bodo Möller7a762192008-12-02 01:21:39 +0000998 $depflags .= " -DOPENSSL_NO_$ALGO";
Bodo Möllerc9a112f2005-02-22 10:29:51 +0000999 }
1000 }
1001 }
1002
1003 print "\n";
1004 }
1005
Bodo Möller7a762192008-12-02 01:21:39 +00001006my $exp_cflags = "";
1007foreach (sort @experimental)
1008 {
1009 my $ALGO;
1010 ($ALGO = $_) =~ tr/[a-z]/[A-Z]/;
1011
1012 # opensslconf.h will set OPENSSL_NO_... unless OPENSSL_EXPERIMENTAL_... is defined
1013 $openssl_experimental_defines .= "#define OPENSSL_NO_$ALGO\n";
1014 $exp_cflags .= " -DOPENSSL_EXPERIMENTAL_$ALGO";
1015 }
Bodo Möllerc9a112f2005-02-22 10:29:51 +00001016
Richard Levitte4d8743f2003-11-28 13:10:58 +00001017my $IsMK1MF=scalar grep /^$target$/,@MK1MF_Builds;
Dr. Stephen Hensona1e464f1999-04-25 20:57:09 +00001018
Andy Polyakov9be54812008-11-03 21:15:07 +00001019$exe_ext=".exe" if ($target eq "Cygwin" || $target eq "DJGPP" || $target =~ /^mingw/);
Dr. Stephen Hensoneef0c1f2008-01-03 22:43:04 +00001020$exe_ext=".nlm" if ($target =~ /netware/);
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001021$exe_ext=".pm" if ($target =~ /vos/);
Bodo Möllere5f30451999-04-29 21:52:08 +00001022$openssldir="/usr/local/ssl" if ($openssldir eq "" and $prefix eq "");
1023$prefix=$openssldir if $prefix eq "";
Ulf Möller462ba4f1999-04-24 22:59:36 +00001024
Richard Levitte28a80032004-06-28 22:01:37 +00001025$default_ranlib= &which("ranlib") or $default_ranlib="true";
1026$perl=$ENV{'PERL'} or $perl=&which("perl5") or $perl=&which("perl")
1027 or $perl="perl";
1028
Ulf Möller462ba4f1999-04-24 22:59:36 +00001029chop $openssldir if $openssldir =~ /\/$/;
Dr. Stephen Hensonbc645192008-11-11 10:17:54 +00001030chop $prefix if $prefix =~ /.\/$/;
Ulf Möller462ba4f1999-04-24 22:59:36 +00001031
Bodo Möllere5f30451999-04-29 21:52:08 +00001032$openssldir=$prefix . "/ssl" if $openssldir eq "";
Richard Levitte451dc182002-06-13 20:42:35 +00001033$openssldir=$prefix . "/" . $openssldir if $openssldir !~ /(^\/|^[a-zA-Z]:[\\\/])/;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001034
Ben Laurieefadf601999-03-07 15:21:08 +00001035
Richard Levitte4d8743f2003-11-28 13:10:58 +00001036print "IsMK1MF=$IsMK1MF\n";
Ben Laurieefadf601999-03-07 15:21:08 +00001037
Richard Levitted0d046e2002-01-27 15:52:37 +00001038my @fields = split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
1039my $cc = $fields[$idx_cc];
Ben Laurie7f625322009-01-18 12:06:37 +00001040# Allow environment CC to override compiler...
1041if($ENV{CC}) {
1042 $cc = $ENV{CC};
1043}
Richard Levitted0d046e2002-01-27 15:52:37 +00001044my $cflags = $fields[$idx_cflags];
1045my $unistd = $fields[$idx_unistd];
1046my $thread_cflag = $fields[$idx_thread_cflag];
1047my $sys_id = $fields[$idx_sys_id];
1048my $lflags = $fields[$idx_lflags];
1049my $bn_ops = $fields[$idx_bn_ops];
Andy Polyakov14e21f82004-07-26 20:18:55 +00001050my $cpuid_obj = $fields[$idx_cpuid_obj];
Richard Levitted0d046e2002-01-27 15:52:37 +00001051my $bn_obj = $fields[$idx_bn_obj];
1052my $des_obj = $fields[$idx_des_obj];
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001053my $aes_obj = $fields[$idx_aes_obj];
Richard Levitted0d046e2002-01-27 15:52:37 +00001054my $bf_obj = $fields[$idx_bf_obj];
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001055my $md5_obj = $fields[$idx_md5_obj];
1056my $sha1_obj = $fields[$idx_sha1_obj];
Richard Levitted0d046e2002-01-27 15:52:37 +00001057my $cast_obj = $fields[$idx_cast_obj];
1058my $rc4_obj = $fields[$idx_rc4_obj];
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001059my $rmd160_obj = $fields[$idx_rmd160_obj];
Richard Levitted0d046e2002-01-27 15:52:37 +00001060my $rc5_obj = $fields[$idx_rc5_obj];
Andy Polyakov0fbd4bf2005-12-16 11:53:31 +00001061my $wp_obj = $fields[$idx_wp_obj];
Andy Polyakov6a8517f2007-08-28 20:45:25 +00001062my $cmll_obj = $fields[$idx_cmll_obj];
Andy Polyakovfa8e9212008-01-11 13:15:11 +00001063my $perlasm_scheme = $fields[$idx_perlasm_scheme];
Richard Levitted0d046e2002-01-27 15:52:37 +00001064my $dso_scheme = $fields[$idx_dso_scheme];
1065my $shared_target = $fields[$idx_shared_target];
1066my $shared_cflag = $fields[$idx_shared_cflag];
1067my $shared_ldflag = $fields[$idx_shared_ldflag];
1068my $shared_extension = $fields[$idx_shared_extension];
1069my $ranlib = $fields[$idx_ranlib];
Richard Levitte179add22002-08-01 20:28:16 +00001070my $arflags = $fields[$idx_arflags];
Andy Polyakovc23632d2009-02-09 15:11:22 +00001071my $multilib = $fields[$idx_multilib];
Richard Levitted0d046e2002-01-27 15:52:37 +00001072
Bodo Möller7a762192008-12-02 01:21:39 +00001073$cflags = "$cflags$exp_cflags";
1074
Andy Polyakovd6c76452007-07-31 18:24:41 +00001075# '%' in $lflags is used to split flags to "pre-" and post-flags
1076my ($prelflags,$postlflags)=split('%',$lflags);
1077if (defined($postlflags)) { $lflags=$postlflags; }
1078else { $lflags=$prelflags; undef $prelflags; }
1079
Richard Levitte2964ba82003-01-11 11:40:39 +00001080my $no_shared_warn=0;
Andy Polyakov14bcdb02005-01-24 15:58:25 +00001081my $no_user_cflags=0;
Richard Levitte2964ba82003-01-11 11:40:39 +00001082
Andy Polyakov14bcdb02005-01-24 15:58:25 +00001083if ($flags ne "") { $cflags="$flags$cflags"; }
1084else { $no_user_cflags=1; }
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001085
Richard Levittef9b3bff2000-11-30 22:53:34 +00001086# Kerberos settings. The flavor must be provided from outside, either through
1087# the script "config" or manually.
Bodo Möllerc9a112f2005-02-22 10:29:51 +00001088if (!$no_krb5)
Richard Levittef9b3bff2000-11-30 22:53:34 +00001089 {
Richard Levitte2a1ef752001-07-09 21:46:58 +00001090 my ($lresolv, $lpath, $lext);
Richard Levittef9b3bff2000-11-30 22:53:34 +00001091 if ($withargs{"krb5-flavor"} =~ /^[Hh]eimdal$/)
1092 {
Richard Levittede868e02002-11-26 09:19:17 +00001093 die "Sorry, Heimdal is currently not supported\n";
1094 }
1095 ##### HACK to force use of Heimdal.
1096 ##### WARNING: Since we don't really have adequate support for Heimdal,
1097 ##### using this will break the build. You'll have to make
1098 ##### changes to the source, and if you do, please send
1099 ##### patches to openssl-dev@openssl.org
1100 if ($withargs{"krb5-flavor"} =~ /^force-[Hh]eimdal$/)
1101 {
1102 warn "Heimdal isn't really supported. Your build WILL break\n";
Richard Levitteec716412002-11-26 15:27:05 +00001103 warn "If you fix the problems, please send a patch to openssl-dev\@openssl.org\n";
Richard Levittef9b3bff2000-11-30 22:53:34 +00001104 $withargs{"krb5-dir"} = "/usr/heimdal"
1105 if $withargs{"krb5-dir"} eq "";
1106 $withargs{"krb5-lib"} = "-L".$withargs{"krb5-dir"}.
1107 "/lib -lgssapi -lkrb5 -lcom_err"
Dr. Stephen Hensonbf2336f2005-04-21 00:46:28 +00001108 if $withargs{"krb5-lib"} eq "" && !$IsMK1MF;
Richard Levittef9b3bff2000-11-30 22:53:34 +00001109 $cflags="-DKRB5_HEIMDAL $cflags";
1110 }
Richard Levitte2a1ef752001-07-09 21:46:58 +00001111 if ($withargs{"krb5-flavor"} =~ /^[Mm][Ii][Tt]/)
Richard Levittef9b3bff2000-11-30 22:53:34 +00001112 {
1113 $withargs{"krb5-dir"} = "/usr/kerberos"
1114 if $withargs{"krb5-dir"} eq "";
1115 $withargs{"krb5-lib"} = "-L".$withargs{"krb5-dir"}.
1116 "/lib -lgssapi_krb5 -lkrb5 -lcom_err -lk5crypto"
Dr. Stephen Hensonbf2336f2005-04-21 00:46:28 +00001117 if $withargs{"krb5-lib"} eq "" && !$IsMK1MF;
Richard Levittef9b3bff2000-11-30 22:53:34 +00001118 $cflags="-DKRB5_MIT $cflags";
Richard Levitte2a1ef752001-07-09 21:46:58 +00001119 $withargs{"krb5-flavor"} =~ s/^[Mm][Ii][Tt][._-]*//;
1120 if ($withargs{"krb5-flavor"} =~ /^1[._-]*[01]/)
1121 {
1122 $cflags="-DKRB5_MIT_OLD11 $cflags";
1123 }
Richard Levittef9b3bff2000-11-30 22:53:34 +00001124 }
Richard Levitte2a1ef752001-07-09 21:46:58 +00001125 LRESOLV:
1126 foreach $lpath ("/lib", "/usr/lib")
1127 {
1128 foreach $lext ("a", "so")
1129 {
1130 $lresolv = "$lpath/libresolv.$lext";
1131 last LRESOLV if (-r "$lresolv");
1132 $lresolv = "";
1133 }
1134 }
1135 $withargs{"krb5-lib"} .= " -lresolv"
Richard Levitte95649972002-12-19 21:55:48 +00001136 if ("$lresolv" ne "");
Richard Levittef9b3bff2000-11-30 22:53:34 +00001137 $withargs{"krb5-include"} = "-I".$withargs{"krb5-dir"}."/include"
Richard Levitte2a1ef752001-07-09 21:46:58 +00001138 if $withargs{"krb5-include"} eq "" &&
1139 $withargs{"krb5-dir"} ne "";
Richard Levittef9b3bff2000-11-30 22:53:34 +00001140 }
1141
Geoff Thorpebc2aada2000-04-06 07:09:45 +00001142# The DSO code currently always implements all functions so that no
1143# applications will have to worry about that from a compilation point
1144# of view. However, the "method"s may return zero unless that platform
1145# has support compiled in for them. Currently each method is enabled
1146# by a define "DSO_<name>" ... we translate the "dso_scheme" config
1147# string entry into using the following logic;
Geoff Thorpeeca57e92000-04-06 11:56:45 +00001148my $dso_cflags;
Geoff Thorpebc2aada2000-04-06 07:09:45 +00001149if (!$no_dso && $dso_scheme ne "")
1150 {
Geoff Thorpe9ec01262000-04-04 22:32:19 +00001151 $dso_scheme =~ tr/[a-z]/[A-Z]/;
Geoff Thorpebc2aada2000-04-06 07:09:45 +00001152 if ($dso_scheme eq "DLFCN")
1153 {
Geoff Thorpeeca57e92000-04-06 11:56:45 +00001154 $dso_cflags = "-DDSO_DLFCN -DHAVE_DLFCN_H";
Geoff Thorpebc2aada2000-04-06 07:09:45 +00001155 }
1156 elsif ($dso_scheme eq "DLFCN_NO_H")
1157 {
Geoff Thorpeeca57e92000-04-06 11:56:45 +00001158 $dso_cflags = "-DDSO_DLFCN";
Geoff Thorpebc2aada2000-04-06 07:09:45 +00001159 }
1160 else
1161 {
Geoff Thorpeeca57e92000-04-06 11:56:45 +00001162 $dso_cflags = "-DDSO_$dso_scheme";
Geoff Thorpebc2aada2000-04-06 07:09:45 +00001163 }
Geoff Thorpeeca57e92000-04-06 11:56:45 +00001164 $cflags = "$dso_cflags $cflags";
Geoff Thorpebc2aada2000-04-06 07:09:45 +00001165 }
Geoff Thorpe9ec01262000-04-04 22:32:19 +00001166
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001167my $thread_cflags;
Richard Levittefb044c52000-02-18 09:11:37 +00001168my $thread_defines;
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001169if ($thread_cflag ne "(unknown)" && !$no_threads)
1170 {
1171 # If we know how to do it, support threads by default.
1172 $threads = 1;
1173 }
Andy Polyakov14bcdb02005-01-24 15:58:25 +00001174if ($thread_cflag eq "(unknown)" && $threads)
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001175 {
Andy Polyakov14bcdb02005-01-24 15:58:25 +00001176 # If the user asked for "threads", [s]he is also expected to
1177 # provide any system-dependent compiler options that are
1178 # necessary.
1179 if ($no_user_cflags)
1180 {
1181 print "You asked for multi-threading support, but didn't\n";
1182 print "provide any system-specific compiler options\n";
1183 exit(1);
1184 }
Richard Levittecf1b7d92001-02-19 16:06:34 +00001185 $thread_cflags="-DOPENSSL_THREADS $cflags" ;
1186 $thread_defines .= "#define OPENSSL_THREADS\n";
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001187 }
1188else
1189 {
Richard Levittecf1b7d92001-02-19 16:06:34 +00001190 $thread_cflags="-DOPENSSL_THREADS $thread_cflag $cflags";
1191 $thread_defines .= "#define OPENSSL_THREADS\n";
Bodo Möllera7b991b2000-02-24 18:19:50 +00001192# my $def;
1193# foreach $def (split ' ',$thread_cflag)
1194# {
1195# if ($def =~ s/^-D// && $def !~ /^_/)
1196# {
1197# $thread_defines .= "#define $def\n";
1198# }
1199# }
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001200 }
1201
Richard Levitte95649972002-12-19 21:55:48 +00001202$lflags="$libs$lflags" if ($libs ne "");
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001203
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +00001204if ($no_asm)
1205 {
Andy Polyakovac71d812008-12-16 07:26:53 +00001206 $cpuid_obj=$bn_obj=
1207 $des_obj=$aes_obj=$bf_obj=$cast_obj=$rc4_obj=$rc5_obj=$cmll_obj=
1208 $sha1_obj=$md5_obj=$rmd160_obj=$wp_obj="";
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +00001209 }
1210
Andy Polyakov6f7ac8e2002-12-13 17:56:14 +00001211if (!$no_shared)
1212 {
1213 $cast_obj=""; # CAST assembler is not PIC
1214 }
1215
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001216if ($threads)
1217 {
Andy Polyakov14bcdb02005-01-24 15:58:25 +00001218 $cflags=$thread_cflags;
Richard Levittee452de92001-07-12 09:11:14 +00001219 $openssl_thread_defines .= $thread_defines;
1220 }
1221
1222if ($zlib)
1223 {
1224 $cflags = "-DZLIB $cflags";
Bodo Möllerc9a112f2005-02-22 10:29:51 +00001225 if (defined($disabled{"zlib-dynamic"}))
1226 {
Dr. Stephen Hensoncc7399e2009-04-07 16:33:26 +00001227 if (defined($withargs{"zlib-lib"}))
1228 {
1229 $lflags = "$lflags -L" . $withargs{"zlib-lib"} . " -lz";
1230 }
1231 else
1232 {
1233 $lflags = "$lflags -lz";
1234 }
Bodo Möllerc9a112f2005-02-22 10:29:51 +00001235 }
1236 else
1237 {
1238 $cflags = "-DZLIB_SHARED $cflags";
1239 }
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001240 }
1241
Richard Levittef4316c32000-07-24 20:36:46 +00001242# You will find shlib_mark1 and shlib_mark2 explained in Makefile.org
Richard Levittea22fb392000-10-13 15:25:06 +00001243my $shared_mark = "";
Andy Polyakov6f7ac8e2002-12-13 17:56:14 +00001244if ($shared_target eq "")
1245 {
Richard Levitte2964ba82003-01-11 11:40:39 +00001246 $no_shared_warn = 1 if !$no_shared;
Andy Polyakov6f7ac8e2002-12-13 17:56:14 +00001247 $no_shared = 1;
1248 }
1249if (!$no_shared)
Richard Levitteb436a982000-07-21 15:08:53 +00001250 {
Richard Levittea22fb392000-10-13 15:25:06 +00001251 if ($shared_cflag ne "")
1252 {
Andy Polyakov28e276f2003-01-02 23:26:46 +00001253 $cflags = "$shared_cflag -DOPENSSL_PIC $cflags";
Richard Levittea22fb392000-10-13 15:25:06 +00001254 }
Richard Levitted2dcf4f2000-10-09 00:48:30 +00001255 }
Richard Levitteb436a982000-07-21 15:08:53 +00001256
Dr. Stephen Hensonfbf002b2005-11-06 17:58:26 +00001257if (!$IsMK1MF)
Richard Levitteecd45312002-10-11 18:06:08 +00001258 {
Lutz Jänicke4c1a6e02008-04-17 10:19:16 +00001259 # add {no-}static-engine to options to allow mkdef.pl to work without extra arguments
Dr. Stephen Hensonfbf002b2005-11-06 17:58:26 +00001260 if ($no_shared)
1261 {
1262 $openssl_other_defines.="#define OPENSSL_NO_DYNAMIC_ENGINE\n";
Lutz Jänicke4c1a6e02008-04-17 10:19:16 +00001263 $options.=" static-engine";
Dr. Stephen Hensonfbf002b2005-11-06 17:58:26 +00001264 }
1265 else
1266 {
1267 $openssl_other_defines.="#define OPENSSL_NO_STATIC_ENGINE\n";
Lutz Jänicke4c1a6e02008-04-17 10:19:16 +00001268 $options.=" no-static-engine";
Dr. Stephen Hensonfbf002b2005-11-06 17:58:26 +00001269 }
Richard Levitte6cb68622002-10-24 19:09:03 +00001270 }
Richard Levitteecd45312002-10-11 18:06:08 +00001271
Andy Polyakov51ff6bd2005-05-18 08:16:46 +00001272$cpuid_obj.=" uplink.o uplink-cof.o" if ($cflags =~ /\-DOPENSSL_USE_APPLINK/);
Andy Polyakov1187ee72007-09-14 19:32:33 +00001273
Andy Polyakovc313e322007-09-16 12:23:47 +00001274#
1275# Platform fix-ups
1276#
1277if ($target =~ /\-icc$/) # Intel C compiler
Andy Polyakov1a979202004-03-28 21:27:47 +00001278 {
Andy Polyakov1187ee72007-09-14 19:32:33 +00001279 my $iccver=0;
1280 if (open(FD,"$cc -V 2>&1 |"))
1281 {
1282 while(<FD>) { $iccver=$1 if (/Version ([0-9]+)\./); }
1283 close(FD);
1284 }
Andy Polyakov1a979202004-03-28 21:27:47 +00001285 if ($iccver>=8)
1286 {
1287 # Eliminate unnecessary dependency from libirc.a. This is
1288 # essential for shared library support, as otherwise
1289 # apps/openssl can end up in endless loop upon startup...
1290 $cflags.=" -Dmemcpy=__builtin_memcpy -Dmemset=__builtin_memset";
1291 }
Andy Polyakov1187ee72007-09-14 19:32:33 +00001292 if ($iccver>=9)
1293 {
1294 $cflags.=" -i-static";
1295 $cflags=~s/\-no_cpprt/-no-cpprt/;
1296 }
1297 if ($iccver>=10)
1298 {
1299 $cflags=~s/\-i\-static/-static-intel/;
1300 }
Andy Polyakov1a979202004-03-28 21:27:47 +00001301 }
1302
Andy Polyakovc313e322007-09-16 12:23:47 +00001303# Unlike other OSes (like Solaris, Linux, Tru64, IRIX) BSD run-time
1304# linkers (tested OpenBSD, NetBSD and FreeBSD) "demand" RPATH set on
1305# .so objects. Apparently application RPATH is not global and does
1306# not apply to .so linked with other .so. Problem manifests itself
1307# when libssl.so fails to load libcrypto.so. One can argue that we
1308# should engrave this into Makefile.shared rules or into BSD-* config
1309# lines above. Meanwhile let's try to be cautious and pass -rpath to
1310# linker only when --prefix is not /usr.
1311if ($target =~ /^BSD\-/)
1312 {
1313 $shared_ldflag.=" -Wl,-rpath,\$(LIBRPATH)" if ($prefix !~ m|^/usr[/]*$|);
1314 }
1315
Richard Levittecf1b7d92001-02-19 16:06:34 +00001316if ($sys_id ne "")
1317 {
Richard Levitte543105a2003-03-20 23:52:41 +00001318 #$cflags="-DOPENSSL_SYSNAME_$sys_id $cflags";
Richard Levittecf1b7d92001-02-19 16:06:34 +00001319 $openssl_sys_defines="#define OPENSSL_SYSNAME_$sys_id\n";
1320 }
1321
Bodo Möller03964792001-03-09 13:04:06 +00001322if ($ranlib eq "")
1323 {
1324 $ranlib = $default_ranlib;
1325 }
1326
Dr. Stephen Henson1750ebc1999-02-14 22:47:21 +00001327#my ($bn1)=split(/\s+/,$bn_obj);
1328#$bn1 = "" unless defined $bn1;
1329#$bn1=$bn_asm unless ($bn1 =~ /\.o$/);
1330#$bn_obj="$bn1";
1331
Bodo Möllerc9a112f2005-02-22 10:29:51 +00001332$cpuid_obj="" if ($processor eq "386");
Andy Polyakovf8c469d2004-08-02 22:41:19 +00001333
Dr. Stephen Henson1750ebc1999-02-14 22:47:21 +00001334$bn_obj = $bn_asm unless $bn_obj ne "";
Bodo Möllerd05a4742008-05-01 18:48:20 +00001335# bn-586 is the only one implementing bn_*_part_words
1336$cflags.=" -DOPENSSL_BN_ASM_PART_WORDS" if ($bn_obj =~ /bn-586/);
Andy Polyakov4287ade2008-01-11 11:59:37 +00001337$cflags.=" -DOPENSSL_IA32_SSE2" if (!$no_sse2 && $bn_obj =~ /86/);
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +00001338
Bodo Möllerd05a4742008-05-01 18:48:20 +00001339$cflags.=" -DOPENSSL_BN_ASM_MONT" if ($bn_obj =~ /-mont/);
Andy Polyakov5ac7bde2005-10-07 14:18:06 +00001340
Andy Polyakovb2dba9b2007-05-14 21:35:25 +00001341$cpuid_obj="mem_clr.o" unless ($cpuid_obj =~ /\.o$/);
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001342$des_obj=$des_enc unless ($des_obj =~ /\.o$/);
1343$bf_obj=$bf_enc unless ($bf_obj =~ /\.o$/);
1344$cast_obj=$cast_enc unless ($cast_obj =~ /\.o$/);
1345$rc4_obj=$rc4_enc unless ($rc4_obj =~ /\.o$/);
1346$rc5_obj=$rc5_enc unless ($rc5_obj =~ /\.o$/);
1347if ($sha1_obj =~ /\.o$/)
1348 {
1349# $sha1_obj=$sha1_enc;
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001350 $cflags.=" -DSHA1_ASM" if ($sha1_obj =~ /sx86/ || $sha1_obj =~ /sha1/);
1351 $cflags.=" -DSHA256_ASM" if ($sha1_obj =~ /sha256/);
1352 $cflags.=" -DSHA512_ASM" if ($sha1_obj =~ /sha512/);
Andy Polyakov69216cc2007-07-24 14:41:20 +00001353 if ($sha1_obj =~ /sse2/)
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001354 { if ($no_sse2)
1355 { $sha1_obj =~ s/\S*sse2\S+//; }
1356 elsif ($cflags !~ /OPENSSL_IA32_SSE2/)
1357 { $cflags.=" -DOPENSSL_IA32_SSE2"; }
1358 }
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001359 }
1360if ($md5_obj =~ /\.o$/)
1361 {
1362# $md5_obj=$md5_enc;
1363 $cflags.=" -DMD5_ASM";
1364 }
1365if ($rmd160_obj =~ /\.o$/)
1366 {
1367# $rmd160_obj=$rmd160_enc;
1368 $cflags.=" -DRMD160_ASM";
1369 }
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001370if ($aes_obj =~ /\.o$/)
1371 {
1372 $cflags.=" -DAES_ASM";
Andy Polyakovd64a7232009-04-27 05:55:13 +00001373 $aes_obj =~ s/\s*aesni\-x86\.o// if ($no_sse2);
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001374 }
Andy Polyakov7de4b5b2005-01-09 16:01:58 +00001375else {
1376 $aes_obj=$aes_enc;
1377 }
Andy Polyakov4c5e19b2005-12-16 13:23:57 +00001378$wp_obj="" if ($wp_obj =~ /mmx/ && $processor eq "386");
Andy Polyakoved266042005-12-16 12:55:33 +00001379if ($wp_obj =~ /\.o$/)
1380 {
Andy Polyakov4c5e19b2005-12-16 13:23:57 +00001381 $cflags.=" -DWHIRLPOOL_ASM";
1382 }
1383else {
1384 $wp_obj="wp_block.o";
Andy Polyakoved266042005-12-16 12:55:33 +00001385 }
Andy Polyakov6a8517f2007-08-28 20:45:25 +00001386$cmll_obj=$cmll_enc unless ($cmll_obj =~ /.o$/);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001387
Richard Levitte1ed0c662002-05-30 18:06:35 +00001388# "Stringify" the C flags string. This permits it to be made part of a string
1389# and works as well on command lines.
1390$cflags =~ s/([\\\"])/\\\1/g;
1391
Ulf Möller09739101999-04-28 16:16:31 +00001392my $version = "unknown";
Dr. Stephen Hensonfc6a6a12002-10-04 21:22:47 +00001393my $version_num = "unknown";
Ulf Möller09739101999-04-28 16:16:31 +00001394my $major = "unknown";
1395my $minor = "unknown";
Richard Levitteb436a982000-07-21 15:08:53 +00001396my $shlib_version_number = "unknown";
1397my $shlib_version_history = "unknown";
1398my $shlib_major = "unknown";
1399my $shlib_minor = "unknown";
Ulf Möller09739101999-04-28 16:16:31 +00001400
1401open(IN,'<crypto/opensslv.h') || die "unable to read opensslv.h:$!\n";
1402while (<IN>)
1403 {
1404 $version=$1 if /OPENSSL.VERSION.TEXT.*OpenSSL (\S+) /;
Dr. Stephen Hensonfc6a6a12002-10-04 21:22:47 +00001405 $version_num=$1 if /OPENSSL.VERSION.NUMBER.*0x(\S+)/;
Richard Levitteb436a982000-07-21 15:08:53 +00001406 $shlib_version_number=$1 if /SHLIB_VERSION_NUMBER *"([^"]+)"/;
1407 $shlib_version_history=$1 if /SHLIB_VERSION_HISTORY *"([^"]*)"/;
Ulf Möller09739101999-04-28 16:16:31 +00001408 }
1409close(IN);
Richard Levitteb436a982000-07-21 15:08:53 +00001410if ($shlib_version_history ne "") { $shlib_version_history .= ":"; }
Ulf Möller09739101999-04-28 16:16:31 +00001411
Ulf Möller1fac96e1999-05-20 17:28:19 +00001412if ($version =~ /(^[0-9]*)\.([0-9\.]*)/)
Ulf Möller09739101999-04-28 16:16:31 +00001413 {
1414 $major=$1;
1415 $minor=$2;
1416 }
1417
Richard Levitteb436a982000-07-21 15:08:53 +00001418if ($shlib_version_number =~ /(^[0-9]*)\.([0-9\.]*)/)
1419 {
1420 $shlib_major=$1;
1421 $shlib_minor=$2;
1422 }
1423
Ben Laurief2d4be31998-12-28 22:05:44 +00001424open(IN,'<Makefile.org') || die "unable to read Makefile.org:$!\n";
Richard Levittec2aa4f22002-07-16 08:53:32 +00001425unlink("$Makefile.new") || die "unable to remove old $Makefile.new:$!\n" if -e "$Makefile.new";
1426open(OUT,">$Makefile.new") || die "unable to create $Makefile.new:$!\n";
Richard Levittef1d712c2000-01-11 13:07:21 +00001427print OUT "### Generated automatically from Makefile.org by Configure.\n\n";
Ulf Möllerf5d7a031999-04-27 01:14:46 +00001428my $sdirs=0;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001429while (<IN>)
1430 {
Richard Levitte67475a72006-04-03 09:15:15 +00001431 chomp;
Ulf Möllerf5d7a031999-04-27 01:14:46 +00001432 $sdirs = 1 if /^SDIRS=/;
Ulf Möllerf5d7a031999-04-27 01:14:46 +00001433 if ($sdirs) {
1434 my $dir;
1435 foreach $dir (@skip) {
Dr. Stephen Hensoned551cd2008-11-12 17:28:18 +00001436 s/(\s)$dir /$1/;
1437 s/\s$dir$//;
Ulf Möllerf5d7a031999-04-27 01:14:46 +00001438 }
1439 }
Ulf Möllerf6f04201999-07-16 00:49:51 +00001440 $sdirs = 0 unless /\\$/;
Dr. Stephen Hensona63bf2c2009-02-15 15:28:18 +00001441 s/engines // if (/^DIRS=/ && $disabled{"engine"});
Dr. Stephen Hensonef236ec2009-04-23 16:32:42 +00001442 s/ccgost// if (/^ENGDIRS=/ && $disabled{"gost"});
Ulf Möller09739101999-04-28 16:16:31 +00001443 s/^VERSION=.*/VERSION=$version/;
1444 s/^MAJOR=.*/MAJOR=$major/;
1445 s/^MINOR=.*/MINOR=$minor/;
Richard Levitteb436a982000-07-21 15:08:53 +00001446 s/^SHLIB_VERSION_NUMBER=.*/SHLIB_VERSION_NUMBER=$shlib_version_number/;
1447 s/^SHLIB_VERSION_HISTORY=.*/SHLIB_VERSION_HISTORY=$shlib_version_history/;
1448 s/^SHLIB_MAJOR=.*/SHLIB_MAJOR=$shlib_major/;
1449 s/^SHLIB_MINOR=.*/SHLIB_MINOR=$shlib_minor/;
Richard Levittea22fb392000-10-13 15:25:06 +00001450 s/^SHLIB_EXT=.*/SHLIB_EXT=$shared_extension/;
Bodo Möllere5f30451999-04-29 21:52:08 +00001451 s/^INSTALLTOP=.*$/INSTALLTOP=$prefix/;
Andy Polyakovc23632d2009-02-09 15:11:22 +00001452 s/^MULTILIB=.*$/MULTILIB=$multilib/;
Ulf Möller462ba4f1999-04-24 22:59:36 +00001453 s/^OPENSSLDIR=.*$/OPENSSLDIR=$openssldir/;
Bodo Möllere5f30451999-04-29 21:52:08 +00001454 s/^INSTALL_PREFIX=.*$/INSTALL_PREFIX=$install_prefix/;
Ralf S. Engelschalldfeab061998-12-21 11:00:56 +00001455 s/^PLATFORM=.*$/PLATFORM=$target/;
Ulf Möller31ff97b1999-05-13 10:28:14 +00001456 s/^OPTIONS=.*$/OPTIONS=$options/;
Richard Levittec59cb512000-08-17 10:23:45 +00001457 s/^CONFIGURE_ARGS=.*$/CONFIGURE_ARGS=$argvstring/;
Andy Polyakovcbfb39d2006-10-21 13:38:16 +00001458 if ($cross_compile_prefix)
1459 {
1460 s/^CC=.*$/CROSS_COMPILE_PREFIX= $cross_compile_prefix\nCC= \$\(CROSS_COMPILE_PREFIX\)$cc/;
1461 s/^AR=\s*/AR= \$\(CROSS_COMPILE_PREFIX\)/;
1462 s/^NM=\s*/NM= \$\(CROSS_COMPILE_PREFIX\)/;
1463 s/^RANLIB=\s*/RANLIB= \$\(CROSS_COMPILE_PREFIX\)/;
Andy Polyakov75bbf6e2008-12-19 13:35:09 +00001464 s/^MAKEDEPPROG=.*$/MAKEDEPPROG= \$\(CROSS_COMPILE_PREFIX\)$cc/ if $cc eq "gcc";
Andy Polyakovcbfb39d2006-10-21 13:38:16 +00001465 }
1466 else {
1467 s/^CC=.*$/CC= $cc/;
1468 s/^RANLIB=.*/RANLIB= $ranlib/;
Andy Polyakov75bbf6e2008-12-19 13:35:09 +00001469 s/^MAKEDEPPROG=.*$/MAKEDEPPROG= $cc/ if $cc eq "gcc";
Andy Polyakovcbfb39d2006-10-21 13:38:16 +00001470 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001471 s/^CFLAG=.*$/CFLAG= $cflags/;
Bodo Möller7a762192008-12-02 01:21:39 +00001472 s/^DEPFLAG=.*$/DEPFLAG=$depflags/;
Andy Polyakovd6c76452007-07-31 18:24:41 +00001473 s/^PEX_LIBS=.*$/PEX_LIBS= $prelflags/;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001474 s/^EX_LIBS=.*$/EX_LIBS= $lflags/;
Richard Levitte967d95f2001-04-04 15:50:30 +00001475 s/^EXE_EXT=.*$/EXE_EXT= $exe_ext/;
Andy Polyakov14e21f82004-07-26 20:18:55 +00001476 s/^CPUID_OBJ=.*$/CPUID_OBJ= $cpuid_obj/;
Ben Laurie06287281999-02-12 19:33:55 +00001477 s/^BN_ASM=.*$/BN_ASM= $bn_obj/;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001478 s/^DES_ENC=.*$/DES_ENC= $des_obj/;
Andy Polyakov0ddd3ea2007-08-28 21:02:38 +00001479 s/^AES_ENC=.*$/AES_ENC= $aes_obj/;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001480 s/^BF_ENC=.*$/BF_ENC= $bf_obj/;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001481 s/^CAST_ENC=.*$/CAST_ENC= $cast_obj/;
1482 s/^RC4_ENC=.*$/RC4_ENC= $rc4_obj/;
1483 s/^RC5_ENC=.*$/RC5_ENC= $rc5_obj/;
1484 s/^MD5_ASM_OBJ=.*$/MD5_ASM_OBJ= $md5_obj/;
1485 s/^SHA1_ASM_OBJ=.*$/SHA1_ASM_OBJ= $sha1_obj/;
1486 s/^RMD160_ASM_OBJ=.*$/RMD160_ASM_OBJ= $rmd160_obj/;
Andy Polyakoved266042005-12-16 12:55:33 +00001487 s/^WP_ASM_OBJ=.*$/WP_ASM_OBJ= $wp_obj/;
Andy Polyakov6a8517f2007-08-28 20:45:25 +00001488 s/^CMLL_ENC=.*$/CMLL_ENC= $cmll_obj/;
Andy Polyakovfa8e9212008-01-11 13:15:11 +00001489 s/^PERLASM_SCHEME=.*$/PERLASM_SCHEME= $perlasm_scheme/;
Ulf Möller2613c1f1999-03-31 12:38:27 +00001490 s/^PROCESSOR=.*/PROCESSOR= $processor/;
Richard Levitte179add22002-08-01 20:28:16 +00001491 s/^ARFLAGS=.*/ARFLAGS= $arflags/;
Ulf Möller99aab161999-04-01 12:34:33 +00001492 s/^PERL=.*/PERL= $perl/;
Richard Levittef9b3bff2000-11-30 22:53:34 +00001493 s/^KRB5_INCLUDES=.*/KRB5_INCLUDES=$withargs{"krb5-include"}/;
Richard Levittec1269c82003-02-14 13:12:00 +00001494 s/^LIBKRB5=.*/LIBKRB5=$withargs{"krb5-lib"}/;
Dr. Stephen Hensonad2695b2005-12-05 13:46:46 +00001495 s/^LIBZLIB=.*/LIBZLIB=$withargs{"zlib-lib"}/;
1496 s/^ZLIB_INCLUDE=.*/ZLIB_INCLUDE=$withargs{"zlib-include"}/;
Richard Levitteb436a982000-07-21 15:08:53 +00001497 s/^SHLIB_TARGET=.*/SHLIB_TARGET=$shared_target/;
Richard Levittea22fb392000-10-13 15:25:06 +00001498 s/^SHLIB_MARK=.*/SHLIB_MARK=$shared_mark/;
1499 s/^SHARED_LIBS=.*/SHARED_LIBS=\$(SHARED_CRYPTO) \$(SHARED_SSL)/ if (!$no_shared);
Richard Levitte0fd44e22000-10-21 21:24:11 +00001500 if ($shared_extension ne "" && $shared_extension =~ /^\.s([ol])\.[^\.]*$/)
1501 {
1502 my $sotmp = $1;
Richard Levitte07c08ed2002-05-30 12:16:33 +00001503 s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp/;
1504 }
1505 elsif ($shared_extension ne "" && $shared_extension =~ /^\.[^\.]*\.dylib$/)
1506 {
1507 s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.dylib/;
Richard Levitte0fd44e22000-10-21 21:24:11 +00001508 }
1509 elsif ($shared_extension ne "" && $shared_extension =~ /^\.s([ol])\.[^\.]*\.[^\.]*$/)
1510 {
1511 my $sotmp = $1;
1512 s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.s$sotmp.\$(SHLIB_MAJOR) .s$sotmp/;
1513 }
Richard Levitte07c08ed2002-05-30 12:16:33 +00001514 elsif ($shared_extension ne "" && $shared_extension =~ /^\.[^\.]*\.[^\.]*\.dylib$/)
1515 {
1516 s/^SHARED_LIBS_LINK_EXTS=.*/SHARED_LIBS_LINK_EXTS=.\$(SHLIB_MAJOR).dylib .dylib/;
1517 }
Richard Levittea5595fd2002-01-02 10:30:07 +00001518 s/^SHARED_LDFLAGS=.*/SHARED_LDFLAGS=$shared_ldflag/;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001519 print OUT $_."\n";
1520 }
1521close(IN);
1522close(OUT);
Richard Levittec2aa4f22002-07-16 08:53:32 +00001523rename($Makefile,"$Makefile.bak") || die "unable to rename $Makefile\n" if -e $Makefile;
1524rename("$Makefile.new",$Makefile) || die "unable to rename $Makefile.new\n";
Ben Laurief2d4be31998-12-28 22:05:44 +00001525
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001526print "CC =$cc\n";
1527print "CFLAG =$cflags\n";
1528print "EX_LIBS =$lflags\n";
Andy Polyakovb7efa562005-01-24 14:38:14 +00001529print "CPUID_OBJ =$cpuid_obj\n";
Ben Laurie06287281999-02-12 19:33:55 +00001530print "BN_ASM =$bn_obj\n";
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001531print "DES_ENC =$des_obj\n";
Andy Polyakov0ddd3ea2007-08-28 21:02:38 +00001532print "AES_ENC =$aes_obj\n";
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001533print "BF_ENC =$bf_obj\n";
1534print "CAST_ENC =$cast_obj\n";
1535print "RC4_ENC =$rc4_obj\n";
1536print "RC5_ENC =$rc5_obj\n";
1537print "MD5_OBJ_ASM =$md5_obj\n";
1538print "SHA1_OBJ_ASM =$sha1_obj\n";
1539print "RMD160_OBJ_ASM=$rmd160_obj\n";
Andy Polyakov6a8517f2007-08-28 20:45:25 +00001540print "CMLL_ENC= =$cmll_obj\n";
Ulf Möller2613c1f1999-03-31 12:38:27 +00001541print "PROCESSOR =$processor\n";
Ulf Möller99aab161999-04-01 12:34:33 +00001542print "RANLIB =$ranlib\n";
Richard Levitte179add22002-08-01 20:28:16 +00001543print "ARFLAGS =$arflags\n";
Ulf Möller99aab161999-04-01 12:34:33 +00001544print "PERL =$perl\n";
Richard Levittef9b3bff2000-11-30 22:53:34 +00001545print "KRB5_INCLUDES =",$withargs{"krb5-include"},"\n"
1546 if $withargs{"krb5-include"} ne "";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001547
Ben Laurie1641cb61998-12-28 17:08:48 +00001548my $des_ptr=0;
1549my $des_risc1=0;
1550my $des_risc2=0;
1551my $des_unroll=0;
1552my $bn_ll=0;
1553my $def_int=2;
1554my $rc4_int=$def_int;
1555my $md2_int=$def_int;
1556my $idea_int=$def_int;
1557my $rc2_int=$def_int;
1558my $rc4_idx=0;
Andy Polyakov2dae04d1999-10-07 12:03:59 +00001559my $rc4_chunk=0;
Ben Laurie1641cb61998-12-28 17:08:48 +00001560my $bf_ptr=0;
1561my @type=("char","short","int","long");
1562my ($b64l,$b64,$b32,$b16,$b8)=(0,0,1,0,0);
Richard Levitte62dc5aa2001-03-02 10:38:19 +00001563my $export_var_as_fn=0;
Ben Laurie1641cb61998-12-28 17:08:48 +00001564
1565my $des_int;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001566
1567foreach (sort split(/\s+/,$bn_ops))
1568 {
1569 $des_ptr=1 if /DES_PTR/;
1570 $des_risc1=1 if /DES_RISC1/;
1571 $des_risc2=1 if /DES_RISC2/;
1572 $des_unroll=1 if /DES_UNROLL/;
1573 $des_int=1 if /DES_INT/;
1574 $bn_ll=1 if /BN_LLONG/;
1575 $rc4_int=0 if /RC4_CHAR/;
1576 $rc4_int=3 if /RC4_LONG/;
1577 $rc4_idx=1 if /RC4_INDEX/;
Andy Polyakov2dae04d1999-10-07 12:03:59 +00001578 $rc4_chunk=1 if /RC4_CHUNK/;
1579 $rc4_chunk=2 if /RC4_CHUNK_LL/;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001580 $md2_int=0 if /MD2_CHAR/;
1581 $md2_int=3 if /MD2_LONG/;
1582 $idea_int=1 if /IDEA_SHORT/;
1583 $idea_int=3 if /IDEA_LONG/;
1584 $rc2_int=1 if /RC2_SHORT/;
1585 $rc2_int=3 if /RC2_LONG/;
1586 $bf_ptr=1 if $_ eq "BF_PTR";
1587 $bf_ptr=2 if $_ eq "BF_PTR2";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001588 ($b64l,$b64,$b32,$b16,$b8)=(0,1,0,0,0) if /SIXTY_FOUR_BIT/;
Ralf S. Engelschall58964a41998-12-21 10:56:39 +00001589 ($b64l,$b64,$b32,$b16,$b8)=(1,0,0,0,0) if /SIXTY_FOUR_BIT_LONG/;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001590 ($b64l,$b64,$b32,$b16,$b8)=(0,0,1,0,0) if /THIRTY_TWO_BIT/;
1591 ($b64l,$b64,$b32,$b16,$b8)=(0,0,0,1,0) if /SIXTEEN_BIT/;
1592 ($b64l,$b64,$b32,$b16,$b8)=(0,0,0,0,1) if /EIGHT_BIT/;
Richard Levitte62dc5aa2001-03-02 10:38:19 +00001593 $export_var_as_fn=1 if /EXPORT_VAR_AS_FN/;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001594 }
1595
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001596open(IN,'<crypto/opensslconf.h.in') || die "unable to read crypto/opensslconf.h.in:$!\n";
Richard Levittec2aa4f22002-07-16 08:53:32 +00001597unlink("crypto/opensslconf.h.new") || die "unable to remove old crypto/opensslconf.h.new:$!\n" if -e "crypto/opensslconf.h.new";
1598open(OUT,'>crypto/opensslconf.h.new') || die "unable to create crypto/opensslconf.h.new:$!\n";
Bodo Möller26dc2672000-02-18 11:15:32 +00001599print OUT "/* opensslconf.h */\n";
Richard Levittefb044c52000-02-18 09:11:37 +00001600print OUT "/* WARNING: Generated automatically from opensslconf.h.in by Configure. */\n\n";
Bodo Möller26dc2672000-02-18 11:15:32 +00001601
1602print OUT "/* OpenSSL was configured with the following options: */\n";
Richard Levitte5031a892001-02-22 17:36:41 +00001603my $openssl_algorithm_defines_trans = $openssl_algorithm_defines;
Bodo Möller7a762192008-12-02 01:21:39 +00001604$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 +00001605$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 +00001606$openssl_algorithm_defines =~ s/^\s*#\s*define\s+(.*)/#ifndef $1\n# define $1\n#endif/mg;
Bodo Möllerfb77c6f2000-02-18 21:08:37 +00001607$openssl_algorithm_defines = " /* no ciphers excluded */\n" if $openssl_algorithm_defines eq "";
Richard Levittecf1b7d92001-02-19 16:06:34 +00001608$openssl_thread_defines =~ s/^\s*#\s*define\s+(.*)/#ifndef $1\n# define $1\n#endif/mg;
1609$openssl_sys_defines =~ s/^\s*#\s*define\s+(.*)/#ifndef $1\n# define $1\n#endif/mg;
1610$openssl_other_defines =~ s/^\s*#\s*define\s+(.*)/#ifndef $1\n# define $1\n#endif/mg;
1611print OUT $openssl_sys_defines;
Ben Laurie75e98d02001-08-03 18:45:35 +00001612print OUT "#ifndef OPENSSL_DOING_MAKEDEPEND\n\n";
Bodo Möller7a762192008-12-02 01:21:39 +00001613print OUT $openssl_experimental_defines;
1614print OUT "\n";
Richard Levittecf1b7d92001-02-19 16:06:34 +00001615print OUT $openssl_algorithm_defines;
Bodo Möller7a762192008-12-02 01:21:39 +00001616print OUT "\n#endif /* OPENSSL_DOING_MAKEDEPEND */\n\n";
Richard Levittecf1b7d92001-02-19 16:06:34 +00001617print OUT $openssl_thread_defines;
1618print OUT $openssl_other_defines,"\n";
Bodo Möller26dc2672000-02-18 11:15:32 +00001619
Richard Levitte5031a892001-02-22 17:36:41 +00001620print OUT "/* The OPENSSL_NO_* macros are also defined as NO_* if the application\n";
1621print OUT " asks for it. This is a transient feature that is provided for those\n";
1622print OUT " who haven't had the time to do the appropriate changes in their\n";
1623print OUT " applications. */\n";
1624print OUT "#ifdef OPENSSL_ALGORITHM_DEFINES\n";
1625print OUT $openssl_algorithm_defines_trans;
1626print OUT "#endif\n\n";
1627
Andy Polyakovb2dba9b2007-05-14 21:35:25 +00001628print OUT "#define OPENSSL_CPUID_OBJ\n\n" if ($cpuid_obj ne "mem_clr.o");
Andy Polyakovebaec632004-07-26 22:01:50 +00001629
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001630while (<IN>)
1631 {
Bodo Möllercd46aa41999-04-25 10:28:26 +00001632 if (/^#define\s+OPENSSLDIR/)
Geoff Thorpef9afd9f2008-07-10 20:08:47 +00001633 {
1634 my $foo = $openssldir;
1635 $foo =~ s/\\/\\\\/g;
1636 print OUT "#define OPENSSLDIR \"$foo\"\n";
1637 }
Geoff Thorpe90819802004-06-01 03:18:58 +00001638 elsif (/^#define\s+ENGINESDIR/)
Geoff Thorpef9afd9f2008-07-10 20:08:47 +00001639 {
Andy Polyakovc23632d2009-02-09 15:11:22 +00001640 # $foo is to become "$prefix/lib$multilib/engines";
1641 # as Makefile.org and engines/Makefile are adapted for
1642 # $multilib suffix.
Geoff Thorpef9afd9f2008-07-10 20:08:47 +00001643 my $foo = "$prefix/lib/engines";
1644 $foo =~ s/\\/\\\\/g;
1645 print OUT "#define ENGINESDIR \"$foo\"\n";
1646 }
Richard Levitte62dc5aa2001-03-02 10:38:19 +00001647 elsif (/^#((define)|(undef))\s+OPENSSL_EXPORT_VAR_AS_FUNCTION/)
1648 { printf OUT "#undef OPENSSL_EXPORT_VAR_AS_FUNCTION\n"
1649 if $export_var_as_fn;
1650 printf OUT "#%s OPENSSL_EXPORT_VAR_AS_FUNCTION\n",
1651 ($export_var_as_fn)?"define":"undef"; }
Bodo Möllere766a681999-06-09 13:23:38 +00001652 elsif (/^#define\s+OPENSSL_UNISTD/)
1653 {
1654 $unistd = "<unistd.h>" if $unistd eq "";
1655 print OUT "#define OPENSSL_UNISTD $unistd\n";
1656 }
Ulf Möller462ba4f1999-04-24 22:59:36 +00001657 elsif (/^#((define)|(undef))\s+SIXTY_FOUR_BIT_LONG/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001658 { printf OUT "#%s SIXTY_FOUR_BIT_LONG\n",($b64l)?"define":"undef"; }
1659 elsif (/^#((define)|(undef))\s+SIXTY_FOUR_BIT/)
1660 { printf OUT "#%s SIXTY_FOUR_BIT\n",($b64)?"define":"undef"; }
1661 elsif (/^#((define)|(undef))\s+THIRTY_TWO_BIT/)
1662 { printf OUT "#%s THIRTY_TWO_BIT\n",($b32)?"define":"undef"; }
1663 elsif (/^#((define)|(undef))\s+SIXTEEN_BIT/)
1664 { printf OUT "#%s SIXTEEN_BIT\n",($b16)?"define":"undef"; }
1665 elsif (/^#((define)|(undef))\s+EIGHT_BIT/)
1666 { printf OUT "#%s EIGHT_BIT\n",($b8)?"define":"undef"; }
1667 elsif (/^#((define)|(undef))\s+BN_LLONG\s*$/)
1668 { printf OUT "#%s BN_LLONG\n",($bn_ll)?"define":"undef"; }
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001669 elsif (/^\#define\s+DES_LONG\s+.*/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001670 { printf OUT "#define DES_LONG unsigned %s\n",
1671 ($des_int)?'int':'long'; }
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001672 elsif (/^\#(define|undef)\s+DES_PTR/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001673 { printf OUT "#%s DES_PTR\n",($des_ptr)?'define':'undef'; }
1674 elsif (/^\#(define|undef)\s+DES_RISC1/)
1675 { printf OUT "#%s DES_RISC1\n",($des_risc1)?'define':'undef'; }
1676 elsif (/^\#(define|undef)\s+DES_RISC2/)
1677 { printf OUT "#%s DES_RISC2\n",($des_risc2)?'define':'undef'; }
1678 elsif (/^\#(define|undef)\s+DES_UNROLL/)
1679 { printf OUT "#%s DES_UNROLL\n",($des_unroll)?'define':'undef'; }
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001680 elsif (/^#define\s+RC4_INT\s/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001681 { printf OUT "#define RC4_INT unsigned %s\n",$type[$rc4_int]; }
Andy Polyakov2dae04d1999-10-07 12:03:59 +00001682 elsif (/^#undef\s+RC4_CHUNK/)
1683 {
1684 printf OUT "#undef RC4_CHUNK\n" if $rc4_chunk==0;
1685 printf OUT "#define RC4_CHUNK unsigned long\n" if $rc4_chunk==1;
1686 printf OUT "#define RC4_CHUNK unsigned long long\n" if $rc4_chunk==2;
1687 }
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001688 elsif (/^#((define)|(undef))\s+RC4_INDEX/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001689 { printf OUT "#%s RC4_INDEX\n",($rc4_idx)?"define":"undef"; }
Ulf Möller8e7f9661999-05-05 00:23:53 +00001690 elsif (/^#(define|undef)\s+I386_ONLY/)
Bodo Möllerc9a112f2005-02-22 10:29:51 +00001691 { printf OUT "#%s I386_ONLY\n", ($processor eq "386")?
Ulf Möller8e7f9661999-05-05 00:23:53 +00001692 "define":"undef"; }
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001693 elsif (/^#define\s+MD2_INT\s/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001694 { printf OUT "#define MD2_INT unsigned %s\n",$type[$md2_int]; }
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001695 elsif (/^#define\s+IDEA_INT\s/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001696 {printf OUT "#define IDEA_INT unsigned %s\n",$type[$idea_int];}
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001697 elsif (/^#define\s+RC2_INT\s/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001698 {printf OUT "#define RC2_INT unsigned %s\n",$type[$rc2_int];}
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001699 elsif (/^#(define|undef)\s+BF_PTR/)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001700 {
1701 printf OUT "#undef BF_PTR\n" if $bf_ptr == 0;
1702 printf OUT "#define BF_PTR\n" if $bf_ptr == 1;
1703 printf OUT "#define BF_PTR2\n" if $bf_ptr == 2;
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001704 }
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001705 else
1706 { print OUT $_; }
1707 }
Ulf Möller5dfc3691999-04-29 16:22:55 +00001708close(IN);
1709close(OUT);
Richard Levittec2aa4f22002-07-16 08:53:32 +00001710rename("crypto/opensslconf.h","crypto/opensslconf.h.bak") || die "unable to rename crypto/opensslconf.h\n" if -e "crypto/opensslconf.h";
1711rename("crypto/opensslconf.h.new","crypto/opensslconf.h") || die "unable to rename crypto/opensslconf.h.new\n";
Dr. Stephen Henson9becf661999-02-13 23:13:32 +00001712
Bodo Möllere766a681999-06-09 13:23:38 +00001713
Dr. Stephen Henson9becf661999-02-13 23:13:32 +00001714# Fix the date
1715
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001716print "SIXTY_FOUR_BIT_LONG mode\n" if $b64l;
1717print "SIXTY_FOUR_BIT mode\n" if $b64;
1718print "THIRTY_TWO_BIT mode\n" if $b32;
1719print "SIXTEEN_BIT mode\n" if $b16;
1720print "EIGHT_BIT mode\n" if $b8;
1721print "DES_PTR used\n" if $des_ptr;
1722print "DES_RISC1 used\n" if $des_risc1;
1723print "DES_RISC2 used\n" if $des_risc2;
1724print "DES_UNROLL used\n" if $des_unroll;
1725print "DES_INT used\n" if $des_int;
1726print "BN_LLONG mode\n" if $bn_ll;
1727print "RC4 uses u$type[$rc4_int]\n" if $rc4_int != $def_int;
1728print "RC4_INDEX mode\n" if $rc4_idx;
Andy Polyakov2dae04d1999-10-07 12:03:59 +00001729print "RC4_CHUNK is undefined\n" if $rc4_chunk==0;
1730print "RC4_CHUNK is unsigned long\n" if $rc4_chunk==1;
1731print "RC4_CHUNK is unsigned long long\n" if $rc4_chunk==2;
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001732print "MD2 uses u$type[$md2_int]\n" if $md2_int != $def_int;
1733print "IDEA uses u$type[$idea_int]\n" if $idea_int != $def_int;
1734print "RC2 uses u$type[$rc2_int]\n" if $rc2_int != $def_int;
1735print "BF_PTR used\n" if $bf_ptr == 1;
1736print "BF_PTR2 used\n" if $bf_ptr == 2;
Ben Lauriecba50681999-03-07 14:05:36 +00001737
Richard Levitte4d8743f2003-11-28 13:10:58 +00001738if($IsMK1MF) {
Bodo Möller664b9981999-07-21 20:49:15 +00001739 open (OUT,">crypto/buildinf.h") || die "Can't open buildinf.h";
1740 printf OUT <<EOF;
Bodo Möller57119941999-07-29 12:57:23 +00001741#ifndef MK1MF_BUILD
1742 /* auto-generated by Configure for crypto/cversion.c:
1743 * for Unix builds, crypto/Makefile.ssl generates functional definitions;
1744 * Windows builds (and other mk1mf builds) compile cversion.c with
1745 * -DMK1MF_BUILD and use definitions added to this file by util/mk1mf.pl. */
1746 #error "Windows builds (PLATFORM=$target) use mk1mf.pl-created Makefiles"
1747#endif
Bodo Möller9e935d71999-07-09 14:04:57 +00001748EOF
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001749 close(OUT);
Dr. Stephen Hensona1e464f1999-04-25 20:57:09 +00001750} else {
Ben Laurie42ba5d22005-03-30 13:05:57 +00001751 my $make_command = "make PERL=\'$perl\'";
Richard Levitte451dc182002-06-13 20:42:35 +00001752 my $make_targets = "";
1753 $make_targets .= " links" if $symlink;
Bodo Möllerab185b62005-03-13 19:46:58 +00001754 $make_targets .= " depend" if $depflags ne $default_depflags && $make_depend;
Richard Levitte1cc67fa2002-07-23 13:31:04 +00001755 $make_targets .= " gentests" if $symlink;
Richard Levitte451dc182002-06-13 20:42:35 +00001756 (system $make_command.$make_targets) == 0 or exit $?
1757 if $make_targets ne "";
Bodo Möller288d2fb1999-05-25 22:31:49 +00001758 if ( $perl =~ m@^/@) {
Dr. Stephen Henson439df502000-05-18 00:33:00 +00001759 &dofile("tools/c_rehash",$perl,'^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";');
Bodo Möller3a4f14f2000-01-05 01:31:22 +00001760 &dofile("apps/CA.pl",$perl,'^#!/', '#!%s');
Bodo Möller288d2fb1999-05-25 22:31:49 +00001761 } else {
1762 # No path for Perl known ...
Dr. Stephen Henson439df502000-05-18 00:33:00 +00001763 &dofile("tools/c_rehash",'/usr/local/bin/perl','^#!/', '#!%s','^my \$dir;$', 'my $dir = "' . $openssldir . '";');
Bodo Möller3a4f14f2000-01-05 01:31:22 +00001764 &dofile("apps/CA.pl",'/usr/local/bin/perl','^#!/', '#!%s');
Richard Levitte451dc182002-06-13 20:42:35 +00001765 }
Bodo Möllerab185b62005-03-13 19:46:58 +00001766 if ($depflags ne $default_depflags && !$make_depend) {
Richard Levitte451dc182002-06-13 20:42:35 +00001767 print <<EOF;
1768
Bodo Möllerab185b62005-03-13 19:46:58 +00001769Since you've disabled or enabled at least one algorithm, you need to do
1770the following before building:
Richard Levitte451dc182002-06-13 20:42:35 +00001771
1772 make depend
1773EOF
1774 }
Ulf Möller8e10f2b1999-04-21 17:31:05 +00001775}
1776
Dr. Stephen Hensonfc6a6a12002-10-04 21:22:47 +00001777# create the ms/version32.rc file if needed
Dr. Stephen Hensoneef0c1f2008-01-03 22:43:04 +00001778if ($IsMK1MF && ($target !~ /^netware/)) {
Dr. Stephen Hensonfc6a6a12002-10-04 21:22:47 +00001779 my ($v1, $v2, $v3, $v4);
1780 if ($version_num =~ /(^[0-9a-f]{1})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i) {
1781 $v1=hex $1;
1782 $v2=hex $2;
1783 $v3=hex $3;
1784 $v4=hex $4;
1785 }
1786 open (OUT,">ms/version32.rc") || die "Can't open ms/version32.rc";
1787 print OUT <<EOF;
1788#include <winver.h>
1789
1790LANGUAGE 0x09,0x01
1791
17921 VERSIONINFO
1793 FILEVERSION $v1,$v2,$v3,$v4
1794 PRODUCTVERSION $v1,$v2,$v3,$v4
1795 FILEFLAGSMASK 0x3fL
1796#ifdef _DEBUG
1797 FILEFLAGS 0x01L
1798#else
1799 FILEFLAGS 0x00L
1800#endif
1801 FILEOS VOS__WINDOWS32
1802 FILETYPE VFT_DLL
1803 FILESUBTYPE 0x0L
1804BEGIN
1805 BLOCK "StringFileInfo"
1806 BEGIN
1807 BLOCK "040904b0"
1808 BEGIN
1809 // Required:
1810 VALUE "CompanyName", "The OpenSSL Project, http://www.openssl.org/\\0"
1811 VALUE "FileDescription", "OpenSSL Shared Library\\0"
1812 VALUE "FileVersion", "$version\\0"
1813#if defined(CRYPTO)
1814 VALUE "InternalName", "libeay32\\0"
1815 VALUE "OriginalFilename", "libeay32.dll\\0"
1816#elif defined(SSL)
1817 VALUE "InternalName", "ssleay32\\0"
1818 VALUE "OriginalFilename", "ssleay32.dll\\0"
1819#endif
1820 VALUE "ProductName", "The OpenSSL Toolkit\\0"
1821 VALUE "ProductVersion", "$version\\0"
1822 // Optional:
1823 //VALUE "Comments", "\\0"
Dr. Stephen Hensone77d8f22005-04-19 00:15:18 +00001824 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 +00001825 //VALUE "LegalTrademarks", "\\0"
1826 //VALUE "PrivateBuild", "\\0"
1827 //VALUE "SpecialBuild", "\\0"
1828 END
1829 END
1830 BLOCK "VarFileInfo"
1831 BEGIN
1832 VALUE "Translation", 0x409, 0x4b0
1833 END
1834END
1835EOF
1836 close(OUT);
1837 }
1838
Bodo Möller63d3f441999-09-09 20:21:10 +00001839print <<EOF;
1840
Ulf Möller89ec98e2000-02-01 01:35:29 +00001841Configured for $target.
Bodo Möller63d3f441999-09-09 20:21:10 +00001842EOF
Bodo Möller5f8d5c91999-04-29 16:10:09 +00001843
1844print <<\EOF if (!$no_threads && !$threads);
1845
1846The library could not be configured for supporting multi-threaded
1847applications as the compiler options required on this system are not known.
Bodo Möllerff1b7e01999-06-26 21:25:01 +00001848See file INSTALL for details if you need multi-threading.
Bodo Möllerec577821999-04-23 22:13:45 +00001849EOF
1850
Richard Levitte2964ba82003-01-11 11:40:39 +00001851print <<\EOF if ($no_shared_warn);
1852
1853You gave the option 'shared'. Normally, that would give you shared libraries.
1854Unfortunately, the OpenSSL configuration doesn't include shared library support
1855for this platform yet, so it will pretend you gave the option 'no-shared'. If
1856you can inform the developpers (openssl-dev\@openssl.org) how to support shared
Bodo Mölleraaae0aa2003-01-13 14:58:49 +00001857libraries on this platform, they will at least look at it and try their best
1858(but please first make sure you have tried with a current version of OpenSSL).
Richard Levitte2964ba82003-01-11 11:40:39 +00001859EOF
1860
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001861exit(0);
1862
Ulf Möller462ba4f1999-04-24 22:59:36 +00001863sub usage
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001864 {
Ulf Möller462ba4f1999-04-24 22:59:36 +00001865 print STDERR $usage;
Ulf Möller10a926c2000-02-21 00:55:45 +00001866 print STDERR "\npick os/compiler from:\n";
Ben Laurie1641cb61998-12-28 17:08:48 +00001867 my $j=0;
Ben Laurie6457ad11999-02-07 18:22:15 +00001868 my $i;
Ulf Möller10a926c2000-02-21 00:55:45 +00001869 my $k=0;
Ben Laurie6457ad11999-02-07 18:22:15 +00001870 foreach $i (sort keys %table)
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001871 {
Ulf Möller462ba4f1999-04-24 22:59:36 +00001872 next if $i =~ /^debug/;
Ulf Möller10a926c2000-02-21 00:55:45 +00001873 $k += length($i) + 1;
1874 if ($k > 78)
1875 {
1876 print STDERR "\n";
1877 $k=length($i);
1878 }
1879 print STDERR $i . " ";
Ulf Möller462ba4f1999-04-24 22:59:36 +00001880 }
1881 foreach $i (sort keys %table)
1882 {
1883 next if $i !~ /^debug/;
Ulf Möller10a926c2000-02-21 00:55:45 +00001884 $k += length($i) + 1;
1885 if ($k > 78)
1886 {
1887 print STDERR "\n";
1888 $k=length($i);
1889 }
1890 print STDERR $i . " ";
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001891 }
Ulf Möller10a926c2000-02-21 00:55:45 +00001892 print STDERR "\n\nNOTE: If in doubt, on Unix-ish systems use './config'.\n";
Ulf Möller462ba4f1999-04-24 22:59:36 +00001893 exit(1);
Ralf S. Engelschalld02b48c1998-12-21 10:52:47 +00001894 }
1895
Ulf Möller99aab161999-04-01 12:34:33 +00001896sub which
1897 {
1898 my($name)=@_;
1899 my $path;
1900 foreach $path (split /:/, $ENV{PATH})
1901 {
Richard Levitte28a80032004-06-28 22:01:37 +00001902 if (-f "$path/$name$exe_ext" and -x _)
Ulf Möller99aab161999-04-01 12:34:33 +00001903 {
Richard Levitte28a80032004-06-28 22:01:37 +00001904 return "$path/$name$exe_ext" unless ($name eq "perl" and
1905 system("$path/$name$exe_ext -e " . '\'exit($]<5.0);\''));
Ulf Möller99aab161999-04-01 12:34:33 +00001906 }
1907 }
1908 }
1909
Ulf Möller462ba4f1999-04-24 22:59:36 +00001910sub dofile
1911 {
1912 my $f; my $p; my %m; my @a; my $k; my $ff;
1913 ($f,$p,%m)=@_;
1914
Ulf Möller31ff97b1999-05-13 10:28:14 +00001915 open(IN,"<$f.in") || open(IN,"<$f") || die "unable to open $f:$!\n";
Ulf Möller462ba4f1999-04-24 22:59:36 +00001916 @a=<IN>;
1917 close(IN);
1918 foreach $k (keys %m)
1919 {
1920 grep(/$k/ && ($_=sprintf($m{$k}."\n",$p)),@a);
1921 }
Bodo Möller863fe2e2000-03-12 23:27:14 +00001922 open(OUT,">$f.new") || die "unable to open $f.new:$!\n";
Ulf Möller462ba4f1999-04-24 22:59:36 +00001923 print OUT @a;
1924 close(OUT);
Bodo Möller863fe2e2000-03-12 23:27:14 +00001925 rename($f,"$f.bak") || die "unable to rename $f\n" if -e $f;
1926 rename("$f.new",$f) || die "unable to rename $f.new\n";
Ulf Möller462ba4f1999-04-24 22:59:36 +00001927 }
Bodo Möller436a3761999-05-28 23:18:51 +00001928
1929sub print_table_entry
1930 {
1931 my $target = shift;
1932
Richard Levittecf1b7d92001-02-19 16:06:34 +00001933 (my $cc,my $cflags,my $unistd,my $thread_cflag,my $sys_id,my $lflags,
Andy Polyakov14e21f82004-07-26 20:18:55 +00001934 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 +00001935 my $md5_obj,my $sha1_obj,my $cast_obj,my $rc4_obj,my $rmd160_obj,
Andy Polyakovfa8e9212008-01-11 13:15:11 +00001936 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 +00001937 my $shared_ldflag,my $shared_extension,my $ranlib,my $arflags,my $multilib)=
Richard Levittea22fb392000-10-13 15:25:06 +00001938 split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
Bodo Möller436a3761999-05-28 23:18:51 +00001939
1940 print <<EOF
1941
1942*** $target
1943\$cc = $cc
1944\$cflags = $cflags
Bodo Möllere766a681999-06-09 13:23:38 +00001945\$unistd = $unistd
Bodo Möller436a3761999-05-28 23:18:51 +00001946\$thread_cflag = $thread_cflag
Richard Levittecf1b7d92001-02-19 16:06:34 +00001947\$sys_id = $sys_id
Bodo Möller436a3761999-05-28 23:18:51 +00001948\$lflags = $lflags
1949\$bn_ops = $bn_ops
Andy Polyakov14e21f82004-07-26 20:18:55 +00001950\$cpuid_obj = $cpuid_obj
Bodo Möller436a3761999-05-28 23:18:51 +00001951\$bn_obj = $bn_obj
1952\$des_obj = $des_obj
Andy Polyakovd0590fe2004-07-18 16:19:34 +00001953\$aes_obj = $aes_obj
Bodo Möller436a3761999-05-28 23:18:51 +00001954\$bf_obj = $bf_obj
1955\$md5_obj = $md5_obj
1956\$sha1_obj = $sha1_obj
1957\$cast_obj = $cast_obj
1958\$rc4_obj = $rc4_obj
1959\$rmd160_obj = $rmd160_obj
1960\$rc5_obj = $rc5_obj
Andy Polyakov0fbd4bf2005-12-16 11:53:31 +00001961\$wp_obj = $wp_obj
Andy Polyakov6a8517f2007-08-28 20:45:25 +00001962\$cmll_obj = $cmll_obj
Andy Polyakovfa8e9212008-01-11 13:15:11 +00001963\$perlasm_scheme = $perlasm_scheme
Geoff Thorpe9ec01262000-04-04 22:32:19 +00001964\$dso_scheme = $dso_scheme
Richard Levitteb436a982000-07-21 15:08:53 +00001965\$shared_target= $shared_target
1966\$shared_cflag = $shared_cflag
Bodo Möller67d48c82002-01-04 13:30:05 +00001967\$shared_ldflag = $shared_ldflag
Richard Levittea22fb392000-10-13 15:25:06 +00001968\$shared_extension = $shared_extension
Bodo Möller03964792001-03-09 13:04:06 +00001969\$ranlib = $ranlib
Richard Levitte179add22002-08-01 20:28:16 +00001970\$arflags = $arflags
Andy Polyakovc23632d2009-02-09 15:11:22 +00001971\$multilib = $multilib
Bodo Möller436a3761999-05-28 23:18:51 +00001972EOF
1973 }
Richard Levitted0d046e2002-01-27 15:52:37 +00001974
1975sub test_sanity
1976 {
1977 my $errorcnt = 0;
1978
1979 print STDERR "=" x 70, "\n";
1980 print STDERR "=== SANITY TESTING!\n";
1981 print STDERR "=== No configuration will be done, all other arguments will be ignored!\n";
1982 print STDERR "=" x 70, "\n";
1983
1984 foreach $target (sort keys %table)
1985 {
1986 @fields = split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
1987
Richard Levittec9c21d32002-01-27 15:58:34 +00001988 if ($fields[$idx_dso_scheme-1] =~ /^(dl|dlfcn|win32|vms)$/)
1989 {
1990 $errorcnt++;
1991 print STDERR "SANITY ERROR: '$target' has the dso_scheme [$idx_dso_scheme] values\n";
1992 print STDERR " in the previous field\n";
1993 }
1994 elsif ($fields[$idx_dso_scheme+1] =~ /^(dl|dlfcn|win32|vms)$/)
1995 {
1996 $errorcnt++;
1997 print STDERR "SANITY ERROR: '$target' has the dso_scheme [$idx_dso_scheme] values\n";
1998 print STDERR " in the following field\n";
1999 }
2000 elsif ($fields[$idx_dso_scheme] !~ /^(dl|dlfcn|win32|vms|)$/)
Richard Levitted0d046e2002-01-27 15:52:37 +00002001 {
2002 $errorcnt++;
2003 print STDERR "SANITY ERROR: '$target' has the dso_scheme [$idx_dso_scheme] field = ",$fields[$idx_dso_scheme],"\n";
2004 print STDERR " valid values are 'dl', 'dlfcn', 'win32' and 'vms'\n";
2005 }
2006 }
Richard Levitte613599f2002-01-27 16:03:40 +00002007 print STDERR "No sanity errors detected!\n" if $errorcnt == 0;
Richard Levitted0d046e2002-01-27 15:52:37 +00002008 return $errorcnt;
2009 }