Add VC++ using GNU (or other U*ix like make) target for mk1mf.pl
authorDr. Stephen Henson <steve@openssl.org>
Wed, 25 Jan 2006 13:26:11 +0000 (13:26 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Wed, 25 Jan 2006 13:26:11 +0000 (13:26 +0000)
Autodetect VC++ in config script and generate Makefile

Add source hash checking to mk1mf.pl for VC++.

config
util/mk1mf.pl
util/pl/VC-32-GMAKE.pl [new file with mode: 0644]
util/pl/VC-32.pl

diff --git a/config b/config
index 0715d378d9f00dfb895a9004a8a25c95399a9094..7f24e7f29c5eff71c3108a1fc24dd2fcd2cb51e0 100755 (executable)
--- a/config
+++ b/config
@@ -54,6 +54,22 @@ SYSTEM=`(uname -s) 2>/dev/null`  || SYSTEM="unknown"
 VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown"
 
 
+
+
+# Check for VC++ presence first.
+
+if [ "x$MSVCDIR" != "x" -o "x$VCINSTALLDIR" != "x" ]; then
+       perl Configure VC-WIN32 $*
+       cmd /c ms\\do_masm.bat
+       perl util/mk1mf.pl VC-WIN32-GMAKE >mak.tmp
+       rm Makefile
+       mv mak.tmp Makefile
+       echo "Configured for VC++ using GNU make"
+       exit 0
+fi
+
+
 # Now test for ISC and SCO, since it is has a braindamaged uname.
 #
 # We need to work around FreeBSD 1.1.5.1 
index cf302bb66e1c9fd0a554e0407103cc2855cbb85d..e552d02905b063d6bdb72296c8cf49ae4cc6c59d 100755 (executable)
@@ -27,6 +27,7 @@ $infile="MINFO";
 
 %ops=(
        "VC-WIN32",   "Microsoft Visual C++ [4-6] - Windows NT or 9X",
+       "VC-WIN32-GMAKE", "Microsoft Visual C++ [4-6] - Windows NT or 9X, GNU make",
        "VC-CE",   "Microsoft eMbedded Visual C++ 3.0 - Windows CE ONLY",
        "VC-NT",   "Microsoft Visual C++ [4-6] - Windows NT ONLY",
        "VC-W31-16",  "Microsoft Visual C++ 1.52 - Windows 3.1 - 286",
@@ -145,6 +146,10 @@ elsif (($platform eq "VC-WIN32") || ($platform eq "VC-NT"))
        $NT = 1 if $platform eq "VC-NT";
        require 'VC-32.pl';
        }
+elsif ($platform eq "VC-WIN32-GMAKE")
+       {
+       require 'VC-32-GMAKE.pl';
+       }
 elsif ($platform eq "VC-CE")
        {
        require 'VC-CE.pl';
@@ -601,6 +606,8 @@ if ($fips)
        $rules.=&cc_compile_target("\$(OBJ_D)${o}\$(E_PREMAIN_DSO)$obj",
                "fips${o}fips_premain.c",
                "-DFINGERPRINT_PREMAIN_DSO_LOAD \$(SHLIB_CFLAGS)");
+       $rules.=&cc_compile_target("\$(OBJ_D)${o}fips_standalone_sha1$obj",
+               "fips${o}sha${o}fips_standalone_sha1.c", "\$(SHLIB_CFLAGS)");
        }
 
 
@@ -707,9 +714,11 @@ if ($fips)
 
 if ($fips)
        {
-       $rules.= &do_rlink_rule("\$(O_FIPSCANISTER)", "\$(OBJ_D)${o}fips_start$obj \$(FIPSOBJ) \$(OBJ_D)${o}fips_end$obj");
+       $rules.= &do_rlink_rule("\$(O_FIPSCANISTER)", "\$(OBJ_D)${o}fips_start$obj \$(FIPSOBJ) \$(OBJ_D)${o}fips_end$obj", "\$(BIN_D)${o}fips_standalone_sha1$exep");
        $rules.=&do_link_rule("\$(BIN_D)$o\$(E_PREMAIN_DSO)$exep","\$(OBJ_D)${o}\$(E_PREMAIN_DSO)$obj \$(CRYPTOOBJ) \$(O_FIPCANISTER)","","\$(EX_LIBS) \$(O_FIPSCANISTER)");
-       $rules.=&do_link_rule("\$(BIN_D)$o\$(E_EXE)$exep","\$(E_OBJ)","\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)","\$(BIN_D)$o.sha1","\$(BIN_D)$o\$(E_EXE)$exep");
+       $rules.=&do_link_rule("\$(BIN_D)${o}fips_standalone_sha1$exep","\$(OBJ_D)${o}fips_standalone_sha1$obj \$(OBJ_D)${o}fips_sha1dgst$obj","","", 1);
+
+       $rules.=&do_link_rule("\$(BIN_D)$o\$(E_EXE)$exep","\$(E_OBJ)","\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)",0,"\$(BIN_D)$o\$(E_EXE)$exep");
        }
 else
        {
diff --git a/util/pl/VC-32-GMAKE.pl b/util/pl/VC-32-GMAKE.pl
new file mode 100644 (file)
index 0000000..1be89aa
--- /dev/null
@@ -0,0 +1,205 @@
+#!/usr/local/bin/perl
+# VCw32lib.pl - the file for Visual C++ 4.[01] for windows NT, static libraries
+#
+
+$ssl=  "ssleay32";
+$crypto="libeay32";
+
+$o='/';
+#$cp='copy nul+';      # Timestamps get stuffed otherwise
+#$rm='del';
+
+$cp='cp';
+$rm='rm';
+
+$zlib_lib="zlib1.lib";
+
+# C compiler stuff
+$cc='cl';
+$cflags=' -MD -W3 -WX -G5 -Ox -O2 -Ob2 -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32';
+$cflags.=' -D_CRT_SECURE_NO_DEPRECATE';        # shut up VC8
+$lflags="-nologo -subsystem:console -machine:I386 -opt:ref";
+$mlflags='';
+
+$out_def="out32";
+$tmp_def="tmp32";
+$inc_def="inc32";
+
+if ($debug)
+       {
+       $cflags=" -MDd -W3 -WX -Zi -Yd -Od -nologo -DOPENSSL_SYSNAME_WIN32 -D_DEBUG -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -DDEBUG -DDSO_WIN32";
+       $lflags.=" -debug";
+       $mlflags.=' -debug';
+       }
+$cflags .= " -DOPENSSL_SYSNAME_WINNT" if $NT == 1;
+
+$obj='.obj';
+$ofile="-Fo";
+
+# EXE linking stuff
+$link="link";
+$efile="-out:";
+$exep='.exe';
+if ($no_sock)
+       { $ex_libs=""; }
+else   { $ex_libs="wsock32.lib user32.lib gdi32.lib"; }
+
+# static library stuff
+$mklib='lib';
+$ranlib='';
+$plib="";
+$libp=".lib";
+$shlibp=($shlib)?".dll":".lib";
+$lfile='-out:';
+
+$shlib_ex_obj="";
+$app_ex_obj="setargv.obj";
+if ($nasm) {
+       $asm='nasmw -f win32';
+       $afile='-o ';
+} else {
+       $asm='ml -Cp -coff -c -Cx';
+       $asm.=" -Zi" if $debug;
+       $afile='-Fo';
+}
+
+$bn_asm_obj='';
+$bn_asm_src='';
+$des_enc_obj='';
+$des_enc_src='';
+$bf_enc_obj='';
+$bf_enc_src='';
+
+if (!$no_asm && !$fips)
+       {
+       $bn_asm_obj='crypto/bn/asm/bn_win32.obj';
+       $bn_asm_src='crypto/bn/asm/bn_win32.asm';
+       $des_enc_obj='crypto/des/asm/d_win32.obj crypto/des/asm/y_win32.obj';
+       $des_enc_src='crypto/des/asm/d_win32.asm crypto/des/asm/y_win32.asm';
+       $bf_enc_obj='crypto/bf/asm/b_win32.obj';
+       $bf_enc_src='crypto/bf/asm/b_win32.asm';
+       $cast_enc_obj='crypto/cast/asm/c_win32.obj';
+       $cast_enc_src='crypto/cast/asm/c_win32.asm';
+       $rc4_enc_obj='crypto/rc4/asm/r4_win32.obj';
+       $rc4_enc_src='crypto/rc4/asm/r4_win32.asm';
+       $rc5_enc_obj='crypto/rc5/asm/r5_win32.obj';
+       $rc5_enc_src='crypto/rc5/asm/r5_win32.asm';
+       $md5_asm_obj='crypto/md5/asm/m5_win32.obj';
+       $md5_asm_src='crypto/md5/asm/m5_win32.asm';
+       $sha1_asm_obj='crypto/sha/asm/s1_win32.obj';
+       $sha1_asm_src='crypto/sha/asm/s1_win32.asm';
+       $rmd160_asm_obj='crypto/ripemd/asm/rm_win32.obj';
+       $rmd160_asm_src='crypto/ripemd/asm/rm_win32.asm';
+       $cflags.=" -DBN_ASM -DMD5_ASM -DSHA1_ASM -DRMD160_ASM";
+       }
+
+if ($shlib)
+       {
+       $mlflags.=" $lflags -dll";
+#      $cflags =~ s| -MD| -MT|;
+       $lib_cflag=" -D_WINDLL";
+       $out_def="out32dll";
+       $tmp_def="tmp32dll";
+       }
+
+$cflags.=" -Fd$out_def";
+
+sub do_lib_rule
+       {
+       local($objs,$target,$name,$shlib,$ign,$base_addr, $fips_get_sig, $fips_premain_src)=@_;
+       local($ret,$Name);
+
+       $taget =~ s/\//$o/g if $o ne '/';
+       ($Name=$name) =~ tr/a-z/A-Z/;
+       my $base_arg;
+       if ($base_addr ne "")
+               {
+               $base_arg= " -base:$base_addr";
+               }
+       else
+               {
+               $base_arg = "";
+               }
+
+
+#      $target="\$(LIB_D)$o$target";
+       if (!$shlib)
+               {
+#              $ret.="\t\$(RM) \$(O_$Name)\n";
+               $ret.="$target: $objs\n";
+               $ex =' advapi32.lib';
+               $ret.="\t\$(MKLIB) $lfile$target $objs $ex\n\n";
+               }
+       else
+               {
+               local($ex)=($target =~ /O_SSL/)?' $(L_CRYPTO)':'';
+               $ex.=' wsock32.lib gdi32.lib advapi32.lib user32.lib';
+               $ex.=" $zlib_lib" if $zlib_opt == 1 && $target =~ /O_CRYPTO/;
+               if (defined $fips_get_sig)
+                       {
+                       $ret.="$target: $objs $fips_get_sig\n";
+                       $ret.="\tFIPS_LINK=\$(LINK) ";
+                       $ret.="FIPS_CC=\$(CC) ";
+                       $ret.="FIPS_CC_ARGS=\"-Fo\$(OBJ_D)${o}fips_premain.obj \$(SHLIB_CFLAGS) -c \$(SRC_D)${o}fips${o}fips_premain.c\" ";
+                       $ret.="FIPS_PREMAIN_DSO=$fips_get_sig ";
+                       $ret.="FIPS_TARGET=$target ";
+                       $ret.="\$(FIPSLINK) \$(MLFLAGS) $base_arg $efile$target ";
+                       $ret.="-def:ms/${Name}.def \$(SHLIB_EX_OBJ) $objs ";
+                       $ret.="\$(OBJ_D)${o}fips_premain.obj $ex\n\n";
+                       }
+               else
+                       {
+                       $ret.="$target: $objs\n";
+                       $ret.="\t\$(LINK) \$(MLFLAGS) $base_arg $efile$target /def:ms/${Name}.def \$(SHLIB_EX_OBJ) $objs $ex\n\n";
+                       }
+               }
+       $ret.="\n";
+       return($ret);
+       }
+
+sub do_link_rule
+       {
+       local($target,$files,$dep_libs,$libs,$standalone)=@_;
+       local($ret,$_);
+       $file =~ s/\//$o/g if $o ne '/';
+       $n=&bname($targer);
+       $ret.="$target: $files $dep_libs\n";
+       if ($standalone)
+               {
+               $ret.="\t\$(LINK) \$(LFLAGS) $efile$target ";
+               $ret.="$files $libs\n\n";
+               }
+       elsif ($fips && !$shlib)
+               {
+               $ret.="\tFIPS_LINK=\$(LINK) ";
+               $ret.="FIPS_CC=\$(CC) ";
+               $ret.="FIPS_CC_ARGS=\"-Fo\$(OBJ_D)${o}fips_premain.obj \$(SHLIB_CFLAGS) -c \$(SRC_D)${o}fips${o}fips_premain.c\" ";
+               $ret.="FIPS_PREMAIN_DSO= ";
+               $ret.="FIPS_TARGET=$target ";
+               $ret.=" \$(FIPSLINK) \$(LFLAGS) $efile$target ";
+               $ret.="\$(APP_EX_OBJ) $files \$(OBJ_D)${o}fips_premain.obj $libs\n\n";
+               }
+       else
+               {
+               $ret.="\t\$(LINK) \$(LFLAGS) $efile$target ";
+               $ret.="\$(APP_EX_OBJ) $files $libs\n\n";
+               }
+       $ret.="\n";
+       return($ret);
+       }
+
+sub do_rlink_rule
+       {
+       local($target,$files,$check_hash)=@_;
+       local($ret,$_);
+
+       $file =~ s/\//$o/g if $o ne '/';
+       $n=&bname($targer);
+       $ret.="$target: $files $dep_libs\n";
+       $ret.="\t\$(PERL) util${o}checkhash.pl -chdir fips -program_path ..$o$check_hash\n";
+       $ret.="\t\$(MKCANISTER) $target $files\n\n";
+       return($ret);
+       }
+
+
+1;
index 51210347ebec48e601437a09a7b152e480b15caf..05d73d7d10599203091a2f0af34360723addacc8 100644 (file)
@@ -156,13 +156,17 @@ sub do_lib_rule
 
 sub do_link_rule
        {
-       local($target,$files,$dep_libs,$libs,$sha1file,$openssl)=@_;
+       local($target,$files,$dep_libs,$libs,$standalone)=@_;
        local($ret,$_);
-       
        $file =~ s/\//$o/g if $o ne '/';
        $n=&bname($targer);
        $ret.="$target: $files $dep_libs\n";
-       if ($fips && !$shlib)
+       if ($standalone)
+               {
+               $ret.="  \$(LINK) \$(LFLAGS) $efile$target @<<\n";
+               $ret.="  $files $libs\n<<\n";
+               }
+       elsif ($fips && !$shlib)
                {
                $ret.="\tSET FIPS_LINK=\$(LINK)\n";
                $ret.="\tSET FIPS_CC=\$(CC)\n";