--VbJkn9YxBvnuCH5J
Content-Type: text/plain; charset=koi8-r
Content-Disposition: inline

On 2006.10.23 at 11:21:26 +0200, Andy Polyakov wrote:

> >But there is another problem which Unix-style Configure doesn't solve
> >now:
> >
> >dll can include VERSION_INFO resource. Now Configure creates .rc file
> >only if IsMK1MF is set. I think that if we want to have native Win32
> >dll, we should include this resource, even if build environment is
> >completely Unix-style.

>
> Care to figure out and tell how to do it with windres and ld? I mean
> I've never done this... This one probably doesn't have to be mingw
> specific, cygwin people [Corinna?] might appreciate it just as much. A.


Here is preliminary patch to generate resource sections for DLLs.

I call it preliminary, because:

1. DLL name issue is not permanentely settled. MSVC build creates
libeay32.dll and ssleay32.dll, and Mingw build crypto32.dll and
ssl32.dll. Patch includes code to support this difference, but I'm
not absolutely sure it belongs there.

2. It is good idea to generate VERSION_INFO resource not only for DLLs,
but also for executable files. At least for those which are considered
part of production shipment (i.e. openssl.exe). Patch doesn't include
this now

3. Resources for engine dlls are not generated.


--VbJkn9YxBvnuCH5J
Content-Type: text/plain; charset=koi8-r
Content-Disposition: attachment; filename="windres.diff"

Index: Makefile.org
================================================== =================
RCS file: /cvs-openssl/openssl/Makefile.org,v
retrieving revision 1.278
diff -u -r1.278 Makefile.org
--- Makefile.org 21 Oct 2006 16:28:03 -0000 1.278
+++ Makefile.org 23 Oct 2006 12:17:00 -0000
@@ -67,6 +67,7 @@
AR=ar $(ARFLAGS) r
RANLIB= ranlib
NM= nm
+WINDRES=windres
PERL= perl
TAR= tar
TARFLAGS= --no-recursion
@@ -175,7 +176,7 @@
BUILDENV= PLATFORM='${PLATFORM}' PROCESSOR='${PROCESSOR}' \
CC='${CC}' CFLAG='${CFLAG}' \
AS='${CC}' ASFLAG='${CFLAG} -c' \
- AR='${AR}' NM='${NM}' RANLIB='${RANLIB}' \
+ AR='${AR}' NM='${NM}' RANLIB='${RANLIB}' WINDRES='${WINDRES}' \
PERL='${PERL}' \
SDIRS='${SDIRS}' LIBRPATH='${INSTALLTOP}/lib' \
INSTALL_PREFIX='${INSTALL_PREFIX}' \
Index: Makefile.shared
================================================== =================
RCS file: /cvs-openssl/openssl/Makefile.shared,v
retrieving revision 1.59
diff -u -r1.59 Makefile.shared
--- Makefile.shared 23 Oct 2006 07:30:18 -0000 1.59
+++ Makefile.shared 23 Oct 2006 12:17:00 -0000
@@ -16,6 +16,8 @@

NM=nm

+WINDRES=windres
+
# LIBNAME contains just the name of the library, without prefix ("lib"
# on Unix, "cyg" for certain forms under Cygwin...) or suffix (.a, .so,
# .dll, ...). This one MUST have a value when using this makefile to
@@ -260,18 +262,21 @@
link_a.cygwin:
@ $(CALC_VERSIONS); \
INHIBIT_SYMLINKS=yes; \
+ SHLIB_SOVER=-$(LIBVERSION); \
SHLIB=cyg$(LIBNAME); def=; \
if expr $(PLATFORM) : 'mingw' > /dev/null; then \
SHLIB=$(LIBNAME); \
def="$(LIBNAME).def"; \
+ res=$${SHLIB}_rc.o\
+ SHLIB_SOVER=32; \
+ $(WINDRES) -D`echo ${LIBNAME}|tr a-z A-Z` -o $$res ms/version32.rc;\
$(PERL) util/mkdef.pl 32 $(LIBNAME) > $$def; \
fi; \
SHLIB_SUFFIX=.dll; \
- SHLIB_SOVER=-$(LIBVERSION); \
ALLSYMSFLAGS='-Wl,--whole-archive'; \
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
base=; [ $(LIBNAME) = "crypto" ] && base=-Wl,--image-base,0x63000000; \
- SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a $$def"; \
+ SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a $$def $$res"; \
[ -f apps/$$SHLIB$$SHLIB_SUFFIX ] && rm apps/$$SHLIB$$SHLIB_SUFFIX; \
[ -f test/$$SHLIB$$SHLIB_SUFFIX ] && rm test/$$SHLIB$$SHLIB_SUFFIX; \
$(LINK_SO_A) || exit 1; \
Index: Configure
================================================== =================
RCS file: /cvs-openssl/openssl/Configure,v
retrieving revision 1.544
diff -u -r1.544 Configure
--- Configure 23 Oct 2006 07:38:27 -0000 1.544
+++ Configure 23 Oct 2006 12:17:00 -0000
@@ -1321,6 +1321,7 @@
s/^AR=\s*/AR= \$\(CROSS_COMPILE_PREFIX\)/;
s/^NM=\s*/NM= \$\(CROSS_COMPILE_PREFIX\)/;
s/^RANLIB=\s*/RANLIB= \$\(CROSS_COMPILE_PREFIX\)/;
+ s/^WINDRES=\s*/WINDRES= \$\(CROSS_COMPILE_PREFIX\)/;
}
else {
s/^CC=.*$/CC= $cc/;
@@ -1616,7 +1617,7 @@
}

# create the ms/version32.rc file if needed
-if ($IsMK1MF) {
+if ($IsMK1MF || $target eq "mingw" ) {
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;
@@ -1624,6 +1625,8 @@
$v3=hex $3;
$v4=hex $4;
}
+ my $cryptolibname = $target eq "mingw"? "crypto32" : "libeay32";
+ my $ssllibname = $target eq "mingw" ? "ssl32" : "ssleay32";
open (OUT,">ms/version32.rc") || die "Can't open ms/version32.rc";
print OUT < #include
@@ -1652,11 +1655,11 @@
VALUE "FileDescription", "OpenSSL Shared Library\\0"
VALUE "FileVersion", "$version\\0"
#if defined(CRYPTO)
- VALUE "InternalName", "libeay32\\0"
- VALUE "OriginalFilename", "libeay32.dll\\0"
+ VALUE "InternalName", "$cryptolibname\\0"
+ VALUE "OriginalFilename", "$cryptolibname.dll\\0"
#elif defined(SSL)
- VALUE "InternalName", "ssleay32\\0"
- VALUE "OriginalFilename", "ssleay32.dll\\0"
+ VALUE "InternalName", "$ssllibname\\0"
+ VALUE "OriginalFilename", "$ssllibname.dll\\0"
#endif
VALUE "ProductName", "The OpenSSL Toolkit\\0"
VALUE "ProductVersion", "$version\\0"

--VbJkn9YxBvnuCH5J--
__________________________________________________ ____________________
OpenSSL Project http://www.openssl.org
Development Mailing List openssl-dev@openssl.org
Automated List Manager majordomo@openssl.org