Note about contribtions from the US
[openssl.git] / util / mk1mf.pl
index f3f17074f418792d3c24d5545ded88c49903110a..72e47af9b4787d30d2f086f8b0a62f46b94ce99a 100755 (executable)
@@ -8,6 +8,7 @@
 $INSTALLTOP="/usr/local/ssl";
 $OPTIONS="";
 $ssl_version="";
+$banner="\t\@echo Building OpenSSL";
 
 open(IN,"<Makefile.ssl") || die "unable to open Makefile.ssl!\n";
 while(<IN>) {
@@ -51,7 +52,8 @@ foreach (@ARGV)
                { printf STDERR "\t%-10s\t%s\n",$i,$ops{$i}; }
                print STDERR <<"EOF";
 and [options] can be one of
-       no-md2 no-md5 no-sha no-mdc2 no-ripemd  - Skip this digest
+       no-md2 no-md4 no-md5 no-sha no-mdc2     - Skip this digest
+       no-ripemd
        no-rc2 no-rc4 no-idea no-des no-bf no-cast - Skip this symetric cipher
        no-rc5
        no-rsa no-dsa no-dh                     - Skip this public key cipher
@@ -59,10 +61,12 @@ and [options] can be one of
        just-ssl                                - remove all non-ssl keys/digest
        no-asm                                  - No x86 asm
        nasm                                    - Use NASM for x86 asm
+       gaswin                                  - Use GNU as with Mingw32
        no-socks                                - No socket code
        no-err                                  - No error strings
        dll/shlib                               - Build shared libraries (MS)
        debug                                   - Debug build
+        profile                                 - Profiling build
        gcc                                     - Use Gcc (unix)
        rsaref                                  - Build to require RSAref
 
@@ -198,6 +202,7 @@ $cflags.=" -DNO_RC2"  if $no_rc2;
 $cflags.=" -DNO_RC4"  if $no_rc4;
 $cflags.=" -DNO_RC5"  if $no_rc5;
 $cflags.=" -DNO_MD2"  if $no_md2;
+$cflags.=" -DNO_MD4"  if $no_md4;
 $cflags.=" -DNO_MD5"  if $no_md5;
 $cflags.=" -DNO_SHA"  if $no_sha;
 $cflags.=" -DNO_SHA1" if $no_sha1;
@@ -215,9 +220,10 @@ $cflags.=" -DNO_SSL3" if $no_ssl3;
 $cflags.=" -DNO_ERR"  if $no_err;
 $cflags.=" -DRSAref"  if $rsaref ne "";
 
-if ($unix)
-       { $cflags="$c_flags" if ($c_flags ne ""); }
-else   { $cflags="$c_flags$cflags" if ($c_flags ne ""); }
+## if ($unix)
+##     { $cflags="$c_flags" if ($c_flags ne ""); }
+##else
+       { $cflags="$c_flags$cflags" if ($c_flags ne ""); }
 
 $ex_libs="$l_flags$ex_libs" if ($l_flags ne "");
 
@@ -271,6 +277,8 @@ LFLAGS=$lflags
 
 BN_ASM_OBJ=$bn_asm_obj
 BN_ASM_SRC=$bn_asm_src
+BNCO_ASM_OBJ=$bnco_asm_obj
+BNCO_ASM_SRC=$bnco_asm_src
 DES_ENC_OBJ=$des_enc_obj
 DES_ENC_SRC=$des_enc_src
 BF_ENC_OBJ=$bf_enc_obj
@@ -358,6 +366,10 @@ all: banner \$(TMP_D) \$(BIN_D) \$(TEST_D) \$(LIB_D) \$(INCO_D) headers lib exe
 banner:
 $banner
 
+# Generate perlasm output files
+%.cpp:
+       (cd \$(\@D)/..; PERL=perl make -f Makefile.ssl asm/\$(\@F))
+
 \$(TMP_D):
        \$(MKDIR) \$(TMP_D)
 # NB: uncomment out these lines if BIN_D, TEST_D and LIB_D are different
@@ -377,6 +389,7 @@ $banner
        \$(MKDIR) \$(INC_D)
 
 headers: \$(HEADER) \$(EXHEADER)
+       @
 
 lib: \$(LIBS_DEP)
 
@@ -403,7 +416,7 @@ vclean:
 EOF
     
 my $platform_cpp_symbol = "MK1MF_PLATFORM_$platform";
-$platform_cpp_symbol =~ s/-/_/;
+$platform_cpp_symbol =~ s/-/_/g;
 if (open(IN,"crypto/buildinf.h"))
        {
        # Remove entry for this platform in existing file buildinf.h.
@@ -537,6 +550,11 @@ foreach (values %lib_nam)
                $lib_obj =~ s/\s\S*\/bn_asm\S*/ \$(BN_ASM_OBJ)/;
                $rules.=&do_asm_rule($bn_asm_obj,$bn_asm_src);
                }
+       if (($bnco_asm_obj ne "") && ($_ eq "CRYPTO"))
+               {
+               $lib_obj .= "\$(BNCO_ASM_OBJ)";
+               $rules.=&do_asm_rule($bnco_asm_obj,$bnco_asm_src);
+               }
        if (($des_enc_obj ne "") && ($_ eq "CRYPTO"))
                {
                $lib_obj =~ s/\s\S*des_enc\S*/ \$(DES_ENC_OBJ)/;
@@ -650,6 +668,7 @@ sub var_add
        @a=grep(!/(_sock$)|(_acpt$)|(_conn$)|(^pxy_)/,@a) if $no_sock;
 
        @a=grep(!/(^md2)|(_md2$)/,@a) if $no_md2;
+       @a=grep(!/(^md4)|(_md4$)/,@a) if $no_md4;
        @a=grep(!/(^md5)|(_md5$)/,@a) if $no_md5;
        @a=grep(!/(rmd)|(ripemd)/,@a) if $no_rmd160;
 
@@ -715,6 +734,7 @@ sub do_defs
                        { $pf=".c"; }
                else    { $pf=$postfix; }
                if ($_ =~ /BN_ASM/)     { $t="$_ "; }
+               elsif ($_ =~ /BNCO_ASM/){ $t="$_ "; }
                elsif ($_ =~ /DES_ENC/) { $t="$_ "; }
                elsif ($_ =~ /BF_ENC/)  { $t="$_ "; }
                elsif ($_ =~ /CAST_ENC/){ $t="$_ "; }
@@ -838,6 +858,7 @@ sub read_options
        elsif (/^no-bf$/)       { $no_bf=1; }
        elsif (/^no-cast$/)     { $no_cast=1; }
        elsif (/^no-md2$/)      { $no_md2=1; }
+       elsif (/^no-md4$/)      { $no_md4=1; }
        elsif (/^no-md5$/)      { $no_md5=1; }
        elsif (/^no-sha$/)      { $no_sha=1; }
        elsif (/^no-sha1$/)     { $no_sha1=1; }
@@ -850,6 +871,7 @@ sub read_options
        elsif (/^no-hmac$/)     { $no_hmac=1; }
        elsif (/^no-asm$/)      { $no_asm=1; }
        elsif (/^nasm$/)        { $nasm=1; }
+       elsif (/^gaswin$/)      { $gaswin=1; }
        elsif (/^no-ssl2$/)     { $no_ssl2=1; }
        elsif (/^no-ssl3$/)     { $no_ssl3=1; }
        elsif (/^no-err$/)      { $no_err=1; }
@@ -862,8 +884,10 @@ sub read_options
        elsif (/^rsaref$/)      { $rsaref=1; }
        elsif (/^gcc$/)         { $gcc=1; }
        elsif (/^debug$/)       { $debug=1; }
+       elsif (/^profile$/)     { $profile=1; }
        elsif (/^shlib$/)       { $shlib=1; }
        elsif (/^dll$/)         { $shlib=1; }
+       elsif (/^shared$/)      { } # We just need to ignore it for now...
        elsif (/^([^=]*)=(.*)$/){ $VARS{$1}=$2; }
        elsif (/^-[lL].*$/)     { $l_flags.="$_ "; }
        elsif ((!/^-help/) && (!/^-h/) && (!/^-\?/) && /^-.*$/)