Update WIN32 nasm build to use new asm files.
[openssl.git] / util / mk1mf.pl
index ff668375a02c525e08378bc5b20c4f5f79ac2160..a76199cf58e588de2c1d033aa87d81f8ec04f8d4 100755 (executable)
@@ -6,15 +6,23 @@
 #
 
 $INSTALLTOP="/usr/local/ssl";
+$OPENSSLDIR="/usr/local/ssl";
 $OPTIONS="";
 $ssl_version="";
 $banner="\t\@echo Building OpenSSL";
 
+my $no_static_engine = 1;
+my $engines = "";
+local $zlib_opt = 0;   # 0 = no zlib, 1 = static, 2 = dynamic
+local $zlib_lib = "";
+
+
 open(IN,"<Makefile") || die "unable to open Makefile!\n";
 while(<IN>) {
     $ssl_version=$1 if (/^VERSION=(.*)$/);
     $OPTIONS=$1 if (/^OPTIONS=(.*)$/);
     $INSTALLTOP=$1 if (/^INSTALLTOP=(.*$)/);
+    $OPENSSLDIR=$1 if (/^OPENSSLDIR=(.*$)/);
 }
 close(IN);
 
@@ -36,6 +44,7 @@ $infile="MINFO";
        "FreeBSD","FreeBSD distribution",
        "OS2-EMX", "EMX GCC OS/2",
        "netware-clib", "CodeWarrior for NetWare - CLib - with WinSock Sockets",
+       "netware-clib-bsdsock", "CodeWarrior for NetWare - CLib - with BSD Sockets",
        "netware-libc", "CodeWarrior for NetWare - LibC - with WinSock Sockets",
        "netware-libc-bsdsock", "CodeWarrior for NetWare - LibC - with BSD Sockets",
        "default","cc under unix",
@@ -57,7 +66,7 @@ and [options] can be one of
        no-md2 no-md4 no-md5 no-sha no-mdc2     - Skip this digest
        no-ripemd
        no-rc2 no-rc4 no-rc5 no-idea no-des     - Skip this symetric cipher
-       no-bf no-cast no-aes
+       no-bf no-cast no-aes no-camellia no-seed
        no-rsa no-dsa no-dh                     - Skip this public key cipher
        no-ssl2 no-ssl3                         - Skip this version of SSL
        just-ssl                                - remove all non-ssl keys/digest
@@ -70,7 +79,7 @@ and [options] can be one of
        no-hw                                   - No hw
        nasm                                    - Use NASM for x86 asm
        nw-nasm                                 - Use NASM x86 asm for NetWare
-       nw-mwasm                                        - Use Metrowerks x86 asm for NetWare
+       nw-mwasm                                - Use Metrowerks x86 asm for NetWare
        gaswin                                  - Use GNU as with Mingw32
        no-socks                                - No socket code
        no-err                                  - No error strings
@@ -95,6 +104,8 @@ foreach (grep(!/^$/, split(/ /, $OPTIONS)))
        print STDERR "unknown option - $_\n" if !&read_options;
        }
 
+$no_static_engine = 0 if (!$shlib);
+
 $no_mdc2=1 if ($no_des);
 
 $no_ssl3=1 if ($no_md5 || $no_sha);
@@ -107,7 +118,8 @@ $out_def="out";
 $inc_def="outinc";
 $tmp_def="tmp";
 
-$mkdir="-mkdir";
+$perl="perl" unless defined $perl;
+$mkdir="-mkdir" unless defined $mkdir;
 
 ($ssl,$crypto)=("ssl","crypto");
 $ranlib="echo ranlib";
@@ -164,10 +176,10 @@ elsif ($platform eq "OS2-EMX")
        require 'OS2-EMX.pl';
        }
 elsif (($platform eq "netware-clib") || ($platform eq "netware-libc") ||
-       ($platform eq "netware-libc-bsdsock"))
+       ($platform eq "netware-clib-bsdsock") || ($platform eq "netware-libc-bsdsock"))
        {
        $LIBC=1 if $platform eq "netware-libc" || $platform eq "netware-libc-bsdsock";
-       $BSDSOCK=1 if $platform eq "netware-libc-bsdsock";
+       $BSDSOCK=1 if ($platform eq "netware-libc-bsdsock") || ($platform eq "netware-clib-bsdsock");
        require 'netware.pl';
        }
 else
@@ -188,6 +200,8 @@ $cflags= "$xcflags$cflags" if $xcflags ne "";
 
 $cflags.=" -DOPENSSL_NO_IDEA" if $no_idea;
 $cflags.=" -DOPENSSL_NO_AES"  if $no_aes;
+$cflags.=" -DOPENSSL_NO_CAMELLIA"  if $no_camellia;
+$cflags.=" -DOPENSSL_NO_SEED" if $no_seed;
 $cflags.=" -DOPENSSL_NO_RC2"  if $no_rc2;
 $cflags.=" -DOPENSSL_NO_RC4"  if $no_rc4;
 $cflags.=" -DOPENSSL_NO_RC5"  if $no_rc5;
@@ -204,9 +218,11 @@ $cflags.=" -DOPENSSL_NO_DES"  if $no_des;
 $cflags.=" -DOPENSSL_NO_RSA"  if $no_rsa;
 $cflags.=" -DOPENSSL_NO_DSA"  if $no_dsa;
 $cflags.=" -DOPENSSL_NO_DH"   if $no_dh;
+$cflags.=" -DOPENSSL_NO_WHIRLPOOL"   if $no_whirlpool;
 $cflags.=" -DOPENSSL_NO_SOCK" if $no_sock;
 $cflags.=" -DOPENSSL_NO_SSL2" if $no_ssl2;
 $cflags.=" -DOPENSSL_NO_SSL3" if $no_ssl3;
+$cflags.=" -DOPENSSL_NO_TLSEXT" if $no_tlsext;
 $cflags.=" -DOPENSSL_NO_ERR"  if $no_err;
 $cflags.=" -DOPENSSL_NO_KRB5" if $no_krb5;
 $cflags.=" -DOPENSSL_NO_EC"   if $no_ec;
@@ -214,6 +230,19 @@ $cflags.=" -DOPENSSL_NO_ECDSA" if $no_ecdsa;
 $cflags.=" -DOPENSSL_NO_ECDH" if $no_ecdh;
 $cflags.=" -DOPENSSL_NO_ENGINE"   if $no_engine;
 $cflags.=" -DOPENSSL_NO_HW"   if $no_hw;
+
+$cflags.= " -DZLIB" if $zlib_opt;
+$cflags.= " -DZLIB_SHARED" if $zlib_opt == 2;
+
+if ($no_static_engine)
+       {
+       $cflags .= " -DOPENSSL_NO_STATIC_ENGINE";
+       }
+else
+       {
+       $cflags .= " -DOPENSSL_NO_DYNAMIC_ENGINE";
+       }
+
 #$cflags.=" -DRSAref"  if $rsaref ne "";
 
 ## if ($unix)
@@ -223,6 +252,7 @@ $cflags.=" -DOPENSSL_NO_HW"   if $no_hw;
 
 $ex_libs="$l_flags$ex_libs" if ($l_flags ne "");
 
+
 %shlib_ex_cflags=("SSL" => " -DOPENSSL_BUILD_SHLIBSSL",
                  "CRYPTO" => " -DOPENSSL_BUILD_SHLIBCRYPTO");
 
@@ -238,6 +268,7 @@ if ($msdos)
 $link="$bin_dir$link" if ($link !~ /^\$/);
 
 $INSTALLTOP =~ s|/|$o|g;
+$OPENSSLDIR =~ s|/|$o|g;
 
 #############################################
 # We parse in input file and 'store' info for later printing.
@@ -267,8 +298,14 @@ for (;;)
        if ($key eq "KRB5_INCLUDES")
                { $cflags .= " $val";}
 
+       if ($key eq "ZLIB_INCLUDE")
+               { $cflags .= " $val" if $val ne "";}
+
+       if ($key eq "LIBZLIB")
+               { $zlib_lib = "$val" if $val ne "";}
+
        if ($key eq "LIBKRB5")
-               { $ex_libs .= " $val";}
+               { $ex_libs .= " $val" if $val ne "";}
 
        if ($key eq "TEST")
                { $test.=&var_add($dir,$val, 0); }
@@ -288,14 +325,41 @@ for (;;)
        if ($key eq "HEADER")
                { $header.=&var_add($dir,$val, 1); }
 
-       if ($key eq "LIBOBJ")
+       if ($key eq "LIBOBJ" && ($dir ne "engines" || !$no_static_engine))
                { $libobj=&var_add($dir,$val, 0); }
+       if ($key eq "LIBNAMES" && $dir eq "engines" && $no_static_engine)
+               { $engines.=$val }
 
        if (!($_=<IN>))
                { $_="RELATIVE_DIRECTORY=FINISHED\n"; }
        }
 close(IN);
 
+if ($shlib)
+       {
+       $extra_install= <<"EOF";
+       \$(CP) \"\$(O_SSL)\" \"\$(INSTALLTOP)${o}bin\"
+       \$(CP) \"\$(O_CRYPTO)\" \"\$(INSTALLTOP)${o}bin\"
+       \$(CP) \"\$(L_SSL)\" \"\$(INSTALLTOP)${o}lib\"
+       \$(CP) \"\$(L_CRYPTO)\" \"\$(INSTALLTOP)${o}lib\"
+EOF
+       if ($no_static_engine)
+               {
+               $extra_install .= <<"EOF"
+       \$(MKDIR) \"\$(INSTALLTOP)${o}lib${o}engines\"
+       \$(CP) \"\$(E_SHLIB)\" \"\$(INSTALLTOP)${o}lib${o}engines\"
+EOF
+               }
+       }
+else
+       {
+       $extra_install= <<"EOF";
+       \$(CP) \"\$(O_SSL)\" \"\$(INSTALLTOP)${o}lib\"
+       \$(CP) \"\$(O_CRYPTO)\" \"\$(INSTALLTOP)${o}lib\"
+EOF
+       $ex_libs .= " $zlib_lib" if $zlib_opt == 1;
+       }
+
 $defs= <<"EOF";
 # This makefile has been automatically generated from the OpenSSL distribution.
 # This single makefile will build the complete OpenSSL distribution and
@@ -316,6 +380,7 @@ $defs .= $preamble if defined $preamble;
 
 $defs.= <<"EOF";
 INSTALLTOP=$INSTALLTOP
+OPENSSLDIR=$OPENSSLDIR
 
 # Set your compiler options
 PLATFORM=$platform
@@ -337,6 +402,8 @@ LINK=$link
 LFLAGS=$lflags
 RSC=$rsc
 
+AES_ASM_OBJ=$aes_asm_obj
+AES_ASM_SRC=$aes_asm_src
 BN_ASM_OBJ=$bn_asm_obj
 BN_ASM_SRC=$bn_asm_src
 BNCO_ASM_OBJ=$bnco_asm_obj
@@ -357,6 +424,10 @@ SHA1_ASM_OBJ=$sha1_asm_obj
 SHA1_ASM_SRC=$sha1_asm_src
 RMD160_ASM_OBJ=$rmd160_asm_obj
 RMD160_ASM_SRC=$rmd160_asm_src
+WHIRLPOOL_ASM_OBJ=$whirlpool_asm_obj
+WHIRLPOOL_ASM_SRC=$whirlpool_asm_src
+CPUID_ASM_OBJ=$cpuid_asm_obj
+CPUID_ASM_SRC=$cpuid_asm_src
 
 # The output directory for everything intersting
 OUT_D=$out_dir
@@ -366,6 +437,7 @@ TMP_D=$tmp_dir
 INC_D=$inc_dir
 INCO_D=$inc_dir${o}openssl
 
+PERL=$perl
 CP=$cp
 RM=$rm
 RANLIB=$ranlib
@@ -385,12 +457,14 @@ CRYPTO=$crypto
 # BIN_D  - Binary output directory
 # TEST_D - Binary test file output directory
 # LIB_D  - library output directory
+# ENG_D  - dynamic engine output directory
 # Note: if you change these point to different directories then uncomment out
 # the lines around the 'NB' comment below.
 # 
 BIN_D=\$(OUT_D)
 TEST_D=\$(OUT_D)
 LIB_D=\$(OUT_D)
+ENG_D=\$(OUT_D)
 
 # INCL_D - local library directory
 # OBJ_D  - temp object file directory
@@ -426,7 +500,7 @@ banner:
 $banner
 
 \$(TMP_D):
-       \$(MKDIR) \$(TMP_D)
+       \$(MKDIR) \"\$(TMP_D)\"
 # NB: uncomment out these lines if BIN_D, TEST_D and LIB_D are different
 #\$(BIN_D):
 #      \$(MKDIR) \$(BIN_D)
@@ -435,31 +509,37 @@ $banner
 #      \$(MKDIR) \$(TEST_D)
 
 \$(LIB_D):
-       \$(MKDIR) \$(LIB_D)
+       \$(MKDIR) \"\$(LIB_D)\"
 
 \$(INCO_D): \$(INC_D)
-       \$(MKDIR) \$(INCO_D)
+       \$(MKDIR) \"\$(INCO_D)\"
 
 \$(INC_D):
-       \$(MKDIR) \$(INC_D)
+       \$(MKDIR) \"\$(INC_D)\"
 
 headers: \$(HEADER) \$(EXHEADER)
        @
 
-lib: \$(LIBS_DEP)
+lib: \$(LIBS_DEP) \$(E_SHLIB)
 
 exe: \$(T_EXE) \$(BIN_D)$o\$(E_EXE)$exep
 
-install:
-       \$(MKDIR) \$(INSTALLTOP)
-       \$(MKDIR) \$(INSTALLTOP)${o}bin
-       \$(MKDIR) \$(INSTALLTOP)${o}include
-       \$(MKDIR) \$(INSTALLTOP)${o}include${o}openssl
-       \$(MKDIR) \$(INSTALLTOP)${o}lib
-       \$(CP) \$(INCO_D)${o}*.\[ch\] \$(INSTALLTOP)${o}include${o}openssl
-       \$(CP) \$(BIN_D)$o\$(E_EXE)$exep \$(INSTALLTOP)${o}bin
-       \$(CP) \$(O_SSL) \$(INSTALLTOP)${o}lib
-       \$(CP) \$(O_CRYPTO) \$(INSTALLTOP)${o}lib
+install: all
+       \$(MKDIR) \"\$(INSTALLTOP)\"
+       \$(MKDIR) \"\$(INSTALLTOP)${o}bin\"
+       \$(MKDIR) \"\$(INSTALLTOP)${o}include\"
+       \$(MKDIR) \"\$(INSTALLTOP)${o}include${o}openssl\"
+       \$(MKDIR) \"\$(INSTALLTOP)${o}lib\"
+       \$(CP) \"\$(INCO_D)${o}*.\[ch\]\" \"\$(INSTALLTOP)${o}include${o}openssl\"
+       \$(CP) \"\$(BIN_D)$o\$(E_EXE)$exep \$(INSTALLTOP)${o}bin\"
+       \$(MKDIR) \"\$(OPENSSLDIR)\"
+       \$(CP) apps${o}openssl.cnf \"\$(OPENSSLDIR)\"
+$extra_install
+
+
+test: \$(T_EXE)
+       cd \$(BIN_D)
+       ..${o}ms${o}test
 
 clean:
        \$(RM) \$(TMP_D)$o*.*
@@ -541,6 +621,12 @@ foreach (values %lib_nam)
                next;
                }
 
+       if (($aes_asm_obj ne "") && ($_ eq "CRYPTO"))
+               {
+               $lib_obj =~ s/\s(\S*\/aes_core\S*)/ \$(AES_ASM_OBJ)/;
+               $lib_obj =~ s/\s\S*\/aes_cbc\S*//;
+               $rules.=&do_asm_rule($aes_asm_obj,$aes_asm_src);
+               }
        if (($bn_asm_obj ne "") && ($_ eq "CRYPTO"))
                {
                $lib_obj =~ s/\s\S*\/bn_asm\S*/ \$(BN_ASM_OBJ)/;
@@ -570,6 +656,7 @@ foreach (values %lib_nam)
        if (($rc4_enc_obj ne "") && ($_ eq "CRYPTO"))
                {
                $lib_obj =~ s/\s\S*\/rc4_enc\S*/ \$(RC4_ENC_OBJ)/;
+               $lib_obj =~ s/\s\S*\/rc4_skey\S*//;
                $rules.=&do_asm_rule($rc4_enc_obj,$rc4_enc_src);
                }
        if (($rc5_enc_obj ne "") && ($_ eq "CRYPTO"))
@@ -592,6 +679,16 @@ foreach (values %lib_nam)
                $lib_obj =~ s/\s(\S*\/rmd_dgst\S*)/ $1 \$(RMD160_ASM_OBJ)/;
                $rules.=&do_asm_rule($rmd160_asm_obj,$rmd160_asm_src);
                }
+       if (($whirlpool_asm_obj ne "") && ($_ eq "CRYPTO"))
+               {
+               $lib_obj =~ s/\s(\S*\/wp_dgst\S*)/ $1 \$(WHIRLPOOL_ASM_OBJ)/;
+               $rules.=&do_asm_rule($whirlpool_asm_obj,$whirlpool_asm_src);
+               }
+       if (($cpuid_asm_obj ne "") && ($_ eq "CRYPTO"))
+               {
+               $lib_obj =~ s/\s\S*\/mem_clr\S*/ \$(CPUID_ASM_OBJ)/;
+               $rules.=&do_asm_rule($cpuid_asm_obj,$cpuid_asm_src);
+               }
        $defs.=&do_defs(${_}."OBJ",$lib_obj,"\$(OBJ_D)",$obj);
        $lib=($slib)?" \$(SHLIB_CFLAGS)".$shlib_ex_cflags{$_}:" \$(LIB_CFLAGS)";
        $rules.=&do_compile_rule("\$(OBJ_D)",$lib_obj{$_},$lib);
@@ -617,6 +714,16 @@ foreach (split(/\s+/,$test))
        $rules.=&do_link_rule("\$(TEST_D)$o$t$exep",$tt,"\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)");
        }
 
+$defs.=&do_defs("E_SHLIB",$engines,"\$(ENG_D)",$shlibp);
+
+foreach (split(/\s+/,$engines))
+       {
+       $rules.=&do_compile_rule("\$(OBJ_D)","engines${o}e_$_",$lib);
+       $rules.= &do_lib_rule("\$(OBJ_D)${o}e_${_}.obj","\$(ENG_D)$o$_$shlibp","",$shlib,"");
+       }
+
+
+
 $rules.= &do_lib_rule("\$(SSLOBJ)","\$(O_SSL)",$ssl,$shlib,"\$(SO_SSL)");
 $rules.= &do_lib_rule("\$(CRYPTOOBJ)","\$(O_CRYPTO)",$crypto,$shlib,"\$(SO_CRYPTO)");
 
@@ -647,6 +754,8 @@ sub var_add
        return("") if $no_hw   && $dir =~ /\/hw/;
        return("") if $no_idea && $dir =~ /\/idea/;
        return("") if $no_aes  && $dir =~ /\/aes/;
+       return("") if $no_camellia  && $dir =~ /\/camellia/;
+       return("") if $no_seed && $dir =~ /\/seed/;
        return("") if $no_rc2  && $dir =~ /\/rc2/;
        return("") if $no_rc4  && $dir =~ /\/rc4/;
        return("") if $no_rc5  && $dir =~ /\/rc5/;
@@ -666,6 +775,7 @@ sub var_add
        return("") if $no_sock && $dir =~ /\/proxy/;
        return("") if $no_bf   && $dir =~ /\/bf/;
        return("") if $no_cast && $dir =~ /\/cast/;
+       return("") if $no_whirlpool && $dir =~ /\/whrlpool/;
 
        $val =~ s/^\s*(.*)\s*$/$1/;
        @a=split(/\s+/,$val);
@@ -680,6 +790,8 @@ sub var_add
        @a=grep(!/^e_.*_bf$/,@a) if $no_bf;
        @a=grep(!/^e_.*_c$/,@a) if $no_cast;
        @a=grep(!/^e_rc4$/,@a) if $no_rc4;
+       @a=grep(!/^e_camellia$/,@a) if $no_camellia;
+       @a=grep(!/^e_seed$/,@a) if $no_seed;
 
        @a=grep(!/(^s2_)|(^s23_)/,@a) if $no_ssl2;
        @a=grep(!/(^s3_)|(^s23_)/,@a) if $no_ssl3;
@@ -756,6 +868,7 @@ sub do_defs
                else    { $pf=$postfix; }
                if ($_ =~ /BN_ASM/)     { $t="$_ "; }
                elsif ($_ =~ /BNCO_ASM/){ $t="$_ "; }
+               elsif ($_ =~ /AES_ASM/){ $t="$_ "; }
                elsif ($_ =~ /DES_ENC/) { $t="$_ "; }
                elsif ($_ =~ /BF_ENC/)  { $t="$_ "; }
                elsif ($_ =~ /CAST_ENC/){ $t="$_ "; }
@@ -764,20 +877,22 @@ sub do_defs
                elsif ($_ =~ /MD5_ASM/) { $t="$_ "; }
                elsif ($_ =~ /SHA1_ASM/){ $t="$_ "; }
                elsif ($_ =~ /RMD160_ASM/){ $t="$_ "; }
+               elsif ($_ =~ /WHIRLPOOL_ASM/){ $t="$_ "; }
+               elsif ($_ =~ /CPUID_ASM/){ $t="$_ "; }
                else    { $t="$location${o}$_$pf "; }
 
                $Vars{$var}.="$t ";
                $ret.=$t;
                }
        # hack to add version info on MSVC
-       if ($shlib && ($platform eq "VC-WIN32") || ($platform eq "VC-NT"))
+       if ($shlib && (($platform eq "VC-WIN32") || ($platform eq "VC-NT")))
                {
                if ($var eq "CRYPTOOBJ")
                        { $ret.="\$(OBJ_D)\\\$(CRYPTO).res "; }
                elsif ($var eq "SSLOBJ")
                        { $ret.="\$(OBJ_D)\\\$(SSL).res "; }
                }
-       chop($ret);
+       chomp($ret);
        $ret.="\n\n";
        return($ret);
        }
@@ -872,7 +987,7 @@ sub do_copy_rule
                if ($n =~ /bss_file/)
                        { $pp=".c"; }
                else    { $pp=$p; }
-               $ret.="$to${o}$n$pp: \$(SRC_D)$o$_$pp\n\t\$(CP) \$(SRC_D)$o$_$pp $to${o}$n$pp\n\n";
+               $ret.="$to${o}$n$pp: \$(SRC_D)$o$_$pp\n\t\$(CP) \"\$(SRC_D)$o$_$pp\" \"$to${o}$n$pp\"\n\n";
                }
        return($ret);
        }
@@ -890,6 +1005,8 @@ sub read_options
                "no-rc5" => \$no_rc5,
                "no-idea" => \$no_idea,
                "no-aes" => \$no_aes,
+               "no-camellia" => \$no_camellia,
+               "no-seed" => \$no_seed,
                "no-des" => \$no_des,
                "no-bf" => \$no_bf,
                "no-cast" => \$no_cast,
@@ -900,13 +1017,13 @@ sub read_options
                "no-sha1" => \$no_sha1,
                "no-ripemd" => \$no_ripemd,
                "no-mdc2" => \$no_mdc2,
+               "no-whirlpool" => \$no_whirlpool,
                "no-patents" => 
                        [\$no_rc2, \$no_rc4, \$no_rc5, \$no_idea, \$no_rsa],
                "no-rsa" => \$no_rsa,
                "no-dsa" => \$no_dsa,
                "no-dh" => \$no_dh,
                "no-hmac" => \$no_hmac,
-               "no-aes" => \$no_aes,
                "no-asm" => \$no_asm,
                "nasm" => \$nasm,
                "nw-nasm" => \$nw_nasm,
@@ -914,6 +1031,7 @@ sub read_options
                "gaswin" => \$gaswin,
                "no-ssl2" => \$no_ssl2,
                "no-ssl3" => \$no_ssl3,
+               "no-tlsext" => \$no_tlsext,
                "no-err" => \$no_err,
                "no-sock" => \$no_sock,
                "no-krb5" => \$no_krb5,
@@ -926,7 +1044,7 @@ sub read_options
                        [\$no_rc2, \$no_idea, \$no_des, \$no_bf, \$no_cast,
                          \$no_md2, \$no_sha, \$no_mdc2, \$no_dsa, \$no_dh,
                          \$no_ssl2, \$no_err, \$no_ripemd, \$no_rc5,
-                         \$no_aes],
+                         \$no_aes, \$no_camellia, \$no_seed],
                "rsaref" => 0,
                "gcc" => \$gcc,
                "debug" => \$debug,
@@ -935,6 +1053,7 @@ sub read_options
                "dll" => \$shlib,
                "shared" => 0,
                "no-gmp" => 0,
+               "no-rfc3779" => 0,
                "no-shared" => 0,
                "no-zlib" => 0,
                "no-zlib-dynamic" => 0,
@@ -955,10 +1074,18 @@ sub read_options
                        }
                }
        elsif (/^no-comp$/) { $xcflags = "-DOPENSSL_NO_COMP $xcflags"; }
-       elsif (/^enable-zlib$/) { $xcflags = "-DZLIB $xcflags"; }
+       elsif (/^enable-zlib$/) { $zlib_opt = 1 if $zlib_opt == 0 }
        elsif (/^enable-zlib-dynamic$/)
                {
-               $xcflags = "-DZLIB_SHARED -DZLIB $xcflags";
+               $zlib_opt = 2;
+               }
+       elsif (/^no-static-engine/)
+               {
+               $no_static_engine = 1;
+               }
+       elsif (/^enable-static-engine/)
+               {
+               $no_static_engine = 0;
                }
        # There are also enable-xxx options which correspond to
        # the no-xxx. Since the scalars are enabled by default