Add version info to Win32 DLLs.
authorDr. Stephen Henson <steve@openssl.org>
Fri, 4 Oct 2002 21:22:47 +0000 (21:22 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Fri, 4 Oct 2002 21:22:47 +0000 (21:22 +0000)
We might want to edit the strings a bit...

Maybe add to 0.9.7 too?

CHANGES
Configure
util/mk1mf.pl
util/pl/VC-32.pl

diff --git a/CHANGES b/CHANGES
index 54fb8daecd56cb232de01e6804347c700fbd56fe..6bf38c21422210a44306cb42fbc4019ca466d42d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,9 @@
 
  Changes between 0.9.7 and 0.9.8  [xx XXX 2002]
 
+  *) Add version info to Win32 DLLs.
+     [Peter 'Luna' Runestig" <peter@runestig.com>]
+
   *) Add new 'medium level' PKCS#12 API. Certificates and keys
      can be added using this API to created arbitrary PKCS#12
      files while avoiding the low level API.
index 2566a3fbe4314bfcbc7dd3ad9b3af5b70a922f24..83a9d94f5ac5770c3c98966905f945598d39a5dc 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -1156,6 +1156,7 @@ if ($rmd160_obj =~ /\.o$/)
 $cflags =~ s/([\\\"])/\\\1/g;
 
 my $version = "unknown";
+my $version_num = "unknown";
 my $major = "unknown";
 my $minor = "unknown";
 my $shlib_version_number = "unknown";
@@ -1167,6 +1168,7 @@ open(IN,'<crypto/opensslv.h') || die "unable to read opensslv.h:$!\n";
 while (<IN>)
        {
        $version=$1 if /OPENSSL.VERSION.TEXT.*OpenSSL (\S+) /;
+       $version_num=$1 if /OPENSSL.VERSION.NUMBER.*0x(\S+)/;
        $shlib_version_number=$1 if /SHLIB_VERSION_NUMBER *"([^"]+)"/;
        $shlib_version_history=$1 if /SHLIB_VERSION_HISTORY *"([^"]*)"/;
        }
@@ -1499,6 +1501,68 @@ EOF
        }
 }
 
+# create the ms/version32.rc file if needed
+if ($IsWindows) {
+       my ($v1, $v2, $v3, $v4);
+       if ($version_num =~ /(^[0-9a-f]{1})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/i) {
+               $v1=hex $1;
+               $v2=hex $2;
+               $v3=hex $3;
+               $v4=hex $4;
+       }
+       open (OUT,">ms/version32.rc") || die "Can't open ms/version32.rc";
+       print OUT <<EOF;
+#include <winver.h>
+
+LANGUAGE 0x09,0x01
+
+1 VERSIONINFO
+  FILEVERSION $v1,$v2,$v3,$v4
+  PRODUCTVERSION $v1,$v2,$v3,$v4
+  FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+  FILEFLAGS 0x01L
+#else
+  FILEFLAGS 0x00L
+#endif
+  FILEOS VOS__WINDOWS32
+  FILETYPE VFT_DLL
+  FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+       BLOCK "040904b0"
+       BEGIN
+           // Required:            
+           VALUE "CompanyName", "The OpenSSL Project, http://www.openssl.org/\\0"
+           VALUE "FileDescription", "OpenSSL Shared Library\\0"
+           VALUE "FileVersion", "$version\\0"
+#if defined(CRYPTO)
+           VALUE "InternalName", "libeay32\\0"
+           VALUE "OriginalFilename", "libeay32.dll\\0"
+#elif defined(SSL)
+           VALUE "InternalName", "ssleay32\\0"
+           VALUE "OriginalFilename", "ssleay32.dll\\0"
+#endif
+           VALUE "ProductName", "The OpenSSL Toolkit\\0"
+           VALUE "ProductVersion", "$version\\0"
+           // Optional:
+           //VALUE "Comments", "\\0"
+           VALUE "LegalCopyright", "Copyright © 1998-2002 The OpenSSL Project. Copyright © 1995-1998 Eric A. Young, Tim J. Hudson. All rights reserved.\\0"
+           //VALUE "LegalTrademarks", "\\0"
+           //VALUE "PrivateBuild", "\\0"
+           //VALUE "SpecialBuild", "\\0"
+       END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 0x4b0
+    END
+END
+EOF
+       close(OUT);
+  }
+  
 print <<EOF;
 
 Configured for $target.
index 866629fe25be5593e9be21e90d7f941ef3a6720b..bdb176d668a12c4a94e0f0eeb45af1c1990743ba 100755 (executable)
@@ -288,6 +288,7 @@ SRC_D=$src_dir
 
 LINK=$link
 LFLAGS=$lflags
+RSC=$rsc
 
 BN_ASM_OBJ=$bn_asm_obj
 BN_ASM_SRC=$bn_asm_src
@@ -600,6 +601,18 @@ foreach (values %lib_nam)
        $rules.=&do_compile_rule("\$(OBJ_D)",$lib_obj{$_},$lib);
        }
 
+# hack to add version info on MSVC
+if (($platform eq "VC-WIN32") || ($platform eq "VC-NT")) {
+    $rules.= <<"EOF";
+\$(OBJ_D)\\\$(CRYPTO).res: ms\\version32.rc
+       \$(RSC) /fo"\$(OBJ_D)\\\$(CRYPTO).res" /d CRYPTO ms\\version32.rc
+
+\$(OBJ_D)\\\$(SSL).res: ms\\version32.rc
+       \$(RSC) /fo"\$(OBJ_D)\\\$(SSL).res" /d SSL ms\\version32.rc
+
+EOF
+}
+
 $defs.=&do_defs("T_EXE",$test,"\$(TEST_D)",$exep);
 foreach (split(/\s+/,$test))
        {
@@ -755,6 +768,14 @@ sub do_defs
                $Vars{$var}.="$t ";
                $ret.=$t;
                }
+       # hack to add version info on MSVC
+       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);
        $ret.="\n\n";
        return($ret);
index d6e3a11530f1e56f64c2c15a8902a13671fa43d4..334a53f70b5155df52edd940cd67b3fcfd8cd7f8 100644 (file)
@@ -32,6 +32,7 @@ $ofile="/Fo";
 
 # EXE linking stuff
 $link="link";
+$rsc="rc";
 $efile="/out:";
 $exep='.exe';
 if ($no_sock)