Policy validation fixes.
[oweals/openssl.git] / util / mk1mf.pl
index 0bcda863c2c83b1a85cb5b38eb1b2cabffa82577..93d10a59e91de9e42c5a0fa1a43811eefe0389f2 100755 (executable)
@@ -258,6 +258,7 @@ $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_CMS" if $no_cms;
 $cflags.=" -DOPENSSL_NO_ERR"  if $no_err;
 $cflags.=" -DOPENSSL_NO_KRB5" if $no_krb5;
 $cflags.=" -DOPENSSL_NO_EC"   if $no_ec;
@@ -437,33 +438,6 @@ 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
-BNCO_ASM_SRC=$bnco_asm_src
-DES_ENC_OBJ=$des_enc_obj
-DES_ENC_SRC=$des_enc_src
-BF_ENC_OBJ=$bf_enc_obj
-BF_ENC_SRC=$bf_enc_src
-CAST_ENC_OBJ=$cast_enc_obj
-CAST_ENC_SRC=$cast_enc_src
-RC4_ENC_OBJ=$rc4_enc_obj
-RC4_ENC_SRC=$rc4_enc_src
-RC5_ENC_OBJ=$rc5_enc_obj
-RC5_ENC_SRC=$rc5_enc_src
-MD5_ASM_OBJ=$md5_asm_obj
-MD5_ASM_SRC=$md5_asm_src
-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
 # The output directory for all the temporary muck
@@ -656,74 +630,6 @@ 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)/;
-               $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)/;
-               $lib_obj =~ s/\s\S*\/fcrypt_b\S*\s*/ /;
-               $rules.=&do_asm_rule($des_enc_obj,$des_enc_src);
-               }
-       if (($bf_enc_obj ne "") && ($_ eq "CRYPTO"))
-               {
-               $lib_obj =~ s/\s\S*\/bf_enc\S*/ \$(BF_ENC_OBJ)/;
-               $rules.=&do_asm_rule($bf_enc_obj,$bf_enc_src);
-               }
-       if (($cast_enc_obj ne "") && ($_ eq "CRYPTO"))
-               {
-               $lib_obj =~ s/(\s\S*\/c_enc\S*)/ \$(CAST_ENC_OBJ)/;
-               $rules.=&do_asm_rule($cast_enc_obj,$cast_enc_src);
-               }
-       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"))
-               {
-               $lib_obj =~ s/\s\S*\/rc5_enc\S*/ \$(RC5_ENC_OBJ)/;
-               $rules.=&do_asm_rule($rc5_enc_obj,$rc5_enc_src);
-               }
-       if (($md5_asm_obj ne "") && ($_ eq "CRYPTO"))
-               {
-               $lib_obj =~ s/\s(\S*\/md5_dgst\S*)/ $1 \$(MD5_ASM_OBJ)/;
-               $rules.=&do_asm_rule($md5_asm_obj,$md5_asm_src);
-               }
-       if (($sha1_asm_obj ne "") && ($_ eq "CRYPTO"))
-               {
-               $lib_obj =~ s/\s(\S*\/sha1dgst\S*)/ $1 \$(SHA1_ASM_OBJ)/;
-               $rules.=&do_asm_rule($sha1_asm_obj,$sha1_asm_src);
-               }
-       if (($rmd160_asm_obj ne "") && ($_ eq "CRYPTO"))
-               {
-               $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);
@@ -799,6 +705,7 @@ sub var_add
        return("") if $no_dsa  && $dir =~ /\/dsa/;
        return("") if $no_dh   && $dir =~ /\/dh/;
        return("") if $no_ec   && $dir =~ /\/ec/;
+       return("") if $no_cms  && $dir =~ /\/cms/;
        if ($no_des && $dir =~ /\/des/)
                {
                if ($val =~ /read_pwd/)
@@ -940,6 +847,13 @@ sub bname
        return($ret);
        }
 
+# return the leading path
+sub dname
+       {
+       my $ret=shift;
+       $ret =~ s/(^.*)[\\\/][^\\\/]+$/$1/;
+       return($ret);
+       }
 
 ##############################################################
 # do a rule for each file that says 'compile' to new direcory
@@ -947,19 +861,61 @@ sub bname
 sub do_compile_rule
        {
        local($to,$files,$ex)=@_;
-       local($ret,$_,$n);
-       
+       local($ret,$_,$n,$d,$s);
+
        $files =~ s/\//$o/g if $o ne '/';
        foreach (split(/\s+/,$files))
                {
                $n=&bname($_);
-               $ret.=&cc_compile_target("$to${o}$n$obj","${_}.c",$ex)
+               $d=&dname($_);
+               if (-f "${_}.c")
+                       {
+                       $ret.=&cc_compile_target("$to${o}$n$obj","${_}.c",$ex)
+                       }
+               elsif (-f ($s="${d}${o}asm${o}${n}.pl") or
+                      ($s=~s/sha256/sha512/ and -f $s) or
+                      -f ($s="${d}${o}${n}.pl"))
+                       {
+                       $ret.=&perlasm_compile_target("$to${o}$n$obj",$s,$n);
+                       }
+               elsif (-f ($s="${d}${o}asm${o}${n}.S") or
+                      -f ($s="${d}${o}${n}.S"))
+                       {
+                       $ret.=&Sasm_compile_target("$to${o}$n$obj",$s,$n);
+                       }
+               else    { die "no rule for $_"; }
                }
        return($ret);
        }
 
 ##############################################################
 # do a rule for each file that says 'compile' to new direcory
+sub perlasm_compile_target
+       {
+       my($target,$source,$bname)=@_;
+       my($ret);
+
+       $bname =~ s/(.*)\.[^\.]$/$1/;
+       $ret ="\$(TMP_D)$o$bname.asm: $source\n";
+       $ret.="\t\$(PERL) $source $asmtype \$(CFLAG) >\$\@\n\n";
+       $ret.="$target: \$(TMP_D)$o$bname.asm\n";
+       $ret.="\t\$(ASM) $afile\$\@ \$(TMP_D)$o$bname.asm\n\n";
+       return($ret);
+       }
+
+sub Sasm_compile_target
+       {
+       my($target,$source,$bname)=@_;
+       my($ret);
+
+       $bname =~ s/(.*)\.[^\.]$/$1/;
+       $ret ="\$(TMP_D)$o$bname.asm: $source\n";
+       $ret.="\t\$(CC) -E \$(CFLAG) $source >\$\@\n\n";
+       $ret.="$target: \$(TMP_D)$o$bname.asm\n";
+       $ret.="\t\$(ASM) $afile\$\@ \$(TMP_D)$o$bname.asm\n\n";
+       return($ret);
+       }
+
 sub cc_compile_target
        {
        local($target,$source,$ex_flags)=@_;
@@ -1079,6 +1035,7 @@ sub read_options
                "no-ssl2" => \$no_ssl2,
                "no-ssl3" => \$no_ssl3,
                "no-tlsext" => \$no_tlsext,
+               "no-cms" => \$no_cms,
                "no-err" => \$no_err,
                "no-sock" => \$no_sock,
                "no-krb5" => \$no_krb5,
@@ -1101,6 +1058,7 @@ sub read_options
                "shared" => 0,
                "no-gmp" => 0,
                "no-rfc3779" => 0,
+               "no-montasm" => 0,
                "no-shared" => 0,
                "no-zlib" => 0,
                "no-zlib-dynamic" => 0,