# Build patches used to created apache_2.2.x-win32-openssl_0.9.8h.msi # binary packages, using; # # perl Configure no-idea no-rc5 no-mdc2 enable-zlib -I/path/to/zh -L/path/to/zlib # ms\do_masm.bat # nmake -f ms/do_masm.bat # # 1. accept perl Configure -Llibpath (-Ihdrpath already worked) # 2. propogate /Zi, /debug flag to cl/masm/link to unconditionally produce # .PDB debugging symbols, at no cost to compiled, linked binaries # 3. switch from /Fd to /Yd, since this ensures source .pdb data ends up in .lib # files for static builds without carrying source .pdb files along # 4. toggle /Oy- to ensure a walkable backtrace in Dr Watson etc without .PDBs # --- ..\openssl-0.9.8k-orig/util\pl\VC-32.pl Mon Mar 09 07:14:08 2009 +++ util\pl\VC-32.pl Thu Jul 23 12:57:33 2009 @@ -25,7 +25,12 @@ $mkdir='$(PERL) util/mkdir-p.pl'; $rm='del /Q'; -$zlib_lib="zlib1.lib"; +$zlib_lib="zlib.lib"; +$zlib_lib="zdll.lib" if $shlib; + +# Santize -L options for ms link +$l_flags =~ s/-L("\[^"]+")/\/libpath:1ドル/g; +$l_flags =~ s/-L(\S+)/\/libpath:1ドル/g; # C compiler stuff $cc='cl'; @@ -42,14 +47,14 @@ # per 0.9.8 release remaining warnings were explicitly examined and # considered safe to ignore. # - $base_cflags=' /W3 /Gs0 /GF /Gy /nologo -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DOPENSSL_SYSNAME_WIN32 -DOPENSSL_SYSNAME_WINNT -DUNICODE -D_UNICODE'; + $base_cflags=' /W3 /Gs0 /GF /Gy /Zi /Yd /nologo -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DOPENSSL_SYSNAME_WIN32 -DOPENSSL_SYSNAME_WINNT -DUNICODE -D_UNICODE'; $base_cflags.=' -D_CRT_SECURE_NO_DEPRECATE'; # shut up VC8 $base_cflags.=' -D_CRT_NONSTDC_NO_DEPRECATE'; # shut up VC8 my $f = $shlib?' /MD':' /MT'; $lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib - $opt_cflags=$f.' /Ox'; + $opt_cflags=$f.' /Ox /Oy-'; $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG'; - $lflags="/nologo /subsystem:console /opt:ref"; + $lflags="/nologo /debug /subsystem:console /opt:ref"; } elsif ($FLAVOR =~ /CE/) { @@ -99,24 +104,23 @@ } $cc='$(CC)'; - $base_cflags=' /W3 /WX /GF /Gy /nologo -DUNICODE -D_UNICODE -DOPENSSL_SYSNAME_WINCE -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DNO_CHMOD -I$(WCECOMPAT)/include -DOPENSSL_SMALL_FOOTPRINT'; + $base_cflags=' /W3 /WX /GF /Gy /Zi /Yd /nologo -DUNICODE -D_UNICODE -DOPENSSL_SYSNAME_WINCE -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DNO_CHMOD -I$(WCECOMPAT)/include -DOPENSSL_SMALL_FOOTPRINT'; $base_cflags.=" $wcecdefs"; - $opt_cflags=' /MC /O1i'; # optimize for space, but with intrinsics... + $opt_cflags=' /MC /O1i /Oy-'; # optimize for space, but with intrinsics... $dbg_clfags=' /MC /Od -DDEBUG -D_DEBUG'; - $lflags="/nologo /opt:ref $wcelflag"; + $lflags="/nologo /debug /opt:ref $wcelflag"; } else # Win32 { - $base_cflags=' /W3 /WX /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32'; + $base_cflags=' /W3 /WX /Gs0 /GF /Gy /Zi /Yd /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32'; $base_cflags.=' -D_CRT_SECURE_NO_DEPRECATE'; # shut up VC8 $base_cflags.=' -D_CRT_NONSTDC_NO_DEPRECATE'; # shut up VC8 my $f = $shlib || $fips ?' /MD':' /MT'; $lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib - $opt_cflags=$f.' /Ox /O2 /Ob2'; + $opt_cflags=$f.' /Ox /O2 /Ob2 /Oy-'; $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG'; - $lflags="/nologo /subsystem:console /opt:ref"; + $lflags="/nologo /debug /subsystem:console /opt:ref"; } -$mlflags=''; $out_def="out32"; $out_def.='_$(TARGETCPU)' if ($FLAVOR =~ /CE/); $tmp_def="tmp32"; $tmp_def.='_$(TARGETCPU)' if ($FLAVOR =~ /CE/); @@ -125,8 +129,6 @@ if ($debug) { $cflags=$dbg_cflags.$base_cflags; - $lflags.=" /debug"; - $mlflags.=' /debug'; } else { @@ -141,17 +143,15 @@ $rsc="rc"; $efile="/out:"; $exep='.exe'; -if ($no_sock) { $ex_libs=''; } -elsif ($FLAVOR =~ /CE/) { $ex_libs='winsock.lib'; } -else { $ex_libs='wsock32.lib'; } - if ($FLAVOR =~ /CE/) { + $ex_libs.=' winsock.lib' if !$no_sock; $ex_libs.=' $(WCECOMPAT)/lib/wcecompatex.lib'; $ex_libs.=' /nodefaultlib:oldnames.lib coredll.lib corelibc.lib' if ($ENV{'TARGETCPU'} eq "X86"); } else { + $ex_libs.=' wsock32.lib' if !$no_sock; $ex_libs.=' gdi32.lib crypt32.lib advapi32.lib user32.lib'; $ex_libs.=' bufferoverflowu.lib' if ($FLAVOR =~ /WIN64/); } @@ -180,12 +180,10 @@ $asm=($ver gt $vew?"nasm":"nasmw")." -f win32"; $afile='-o '; } elsif ($ml64) { - $asm='ml64 /c /Cp /Cx'; - $asm.=' /Zi' if $debug; + $asm='ml64 /c /Cp /Cx /Zi'; $afile='/Fo'; } else { - $asm='ml /nologo /Cp /coff /c /Cx'; - $asm.=" /Zi" if $debug; + $asm='ml /nologo /Cp /coff /c /Cx /Zi'; $afile='/Fo'; } @@ -281,7 +279,7 @@ $tmp_def='tmp32dll_$(TARGETCPU)'; } -$cflags.=" /Fd$out_def"; +$cflags.=" /Fd$tmp_def/c_src"; sub do_lib_rule { @@ -308,23 +306,17 @@ $name = "/def:ms/${name}.def"; } -# $target="\$(LIB_D)$o$target"; -# $ret.="$target: $objs\n"; if (!$shlib) { -# $ret.="\t\$(RM) \$(O_$Name)\n"; - $ex =' '; $ret.="$target: $objs\n"; - $ret.="\t\$(MKLIB) $lfile$target @<<\n $objs $ex\n<<\n"; + $ret.="\t\$(MKLIB) $lfile$target @<<\n $objs\n<<\n"; } else { my $ex = ""; - if ($target =~ /O_SSL/) - { - $ex .= " \$(L_CRYPTO)"; - #$ex .= " \$(L_FIPS)" if $fipsdso; - } + $ex.=" \$(L_CRYPTO)" if $target =~ /O_SSL/; + $ex.=" $zlib_lib" if $zlib_opt == 1 && $target =~ /O_CRYPTO/; + my $fipstarget; if ($fipsdso) { @@ -335,31 +327,8 @@ $fipstarget = "O_CRYPTO"; } - - if ($name eq "") - { - $ex.=' bufferoverflowu.lib' if ($FLAVOR =~ /WIN64/); - if ($target =~ /capi/) - { - $ex.=' crypt32.lib advapi32.lib'; - } - } - elsif ($FLAVOR =~ /CE/) - { - $ex.=' winsock.lib $(WCECOMPAT)/lib/wcecompatex.lib'; - } - else - { - $ex.=' unicows.lib' if ($FLAVOR =~ /NT/); - $ex.=' wsock32.lib gdi32.lib advapi32.lib user32.lib'; - $ex.=' crypt32.lib'; - $ex.=' bufferoverflowu.lib' if ($FLAVOR =~ /WIN64/); - } - $ex.=" $zlib_lib" if $zlib_opt == 1 && $target =~ /O_CRYPTO/; - if ($fips && $target =~ /$fipstarget/) { - $ex.= $mwex unless $fipscanisterbuild; $ret.="$target: $objs \$(PREMAIN_DSO_EXE)"; if ($fipsdso) { @@ -376,7 +345,7 @@ $ret.="\tSET FIPSLIB_D=\$(FIPSLIB_D)\n"; $ret.="\t\$(FIPSLINK) \$(MLFLAGS) /map $base_arg $efile$target "; $ret.="$name @<<\n \$(SHLIB_EX_OBJ) $objs "; - $ret.="\$(OBJ_D)${o}fips_premain.obj $ex\n<<\n"; + $ret.="\$(OBJ_D)${o}fips_premain.obj $ex \$(EX_LIBS)\n<<\n"; } else { @@ -386,7 +355,7 @@ $ret .= " \$(O_FIPS)"; $ex .= " \$(L_FIPS)"; } - $ret.="\n\t\$(LINK) \$(MLFLAGS) $efile$target $name @<<\n \$(SHLIB_EX_OBJ) $objs $ex\n<<\n"; + $ret.="\n\t\$(LINK) \$(MLFLAGS) $efile$target $name @<<\n \$(SHLIB_EX_OBJ) $objs $ex \$(EX_LIBS)\n<<\n"; } $ret.="\tIF EXIST \$@.manifest mt -nologo -manifest \$@.manifest -outputresource:\$@;2\n\n";