[mingw-openssl] Added win64 support

epienbro epienbro at fedoraproject.org
Sat Mar 10 18:40:05 UTC 2012


commit 6da885fdf862936807cf2ddf090b1c4a7954d25e
Author: Erik van Pienbroek <epienbro at fedoraproject.org>
Date:   Sat Mar 10 19:39:59 2012 +0100

    Added win64 support

 ...penssl-drop-unneeded-reference-to-dlfcn-h.patch |   10 ++
 mingw-openssl.spec                                 |  172 ++++++++++++++++----
 openssl_mingw64_install_fix.patch                  |   11 ++
 3 files changed, 164 insertions(+), 29 deletions(-)
---
diff --git a/mingw-openssl-drop-unneeded-reference-to-dlfcn-h.patch b/mingw-openssl-drop-unneeded-reference-to-dlfcn-h.patch
new file mode 100644
index 0000000..255374a
--- /dev/null
+++ b/mingw-openssl-drop-unneeded-reference-to-dlfcn-h.patch
@@ -0,0 +1,10 @@
+--- crypto/fips/fips.c.orig	2010-10-07 23:33:08.293664062 +0200
++++ crypto/fips/fips.c	2010-10-07 23:33:20.723360688 +0200
+@@ -57,7 +57,6 @@
+ #include <openssl/rsa.h>
+ #include <string.h>
+ #include <limits.h>
+-#include <dlfcn.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include "fips_locl.h"
diff --git a/mingw-openssl.spec b/mingw-openssl.spec
index 12c16b6..db716c6 100644
--- a/mingw-openssl.spec
+++ b/mingw-openssl.spec
@@ -1,6 +1,7 @@
-%global __strip %{mingw32_strip}
-%global __objdump %{mingw32_objdump}
-%define __debug_install_post %{mingw32_debug_install_post}
+%?mingw_package_header
+
+%global mingw_build_win32 1
+%global mingw_build_win64 1
 
 # For the curious:
 # 0.9.5a soversion = 0
@@ -26,7 +27,7 @@
 
 Name:           mingw-openssl
 Version:        1.0.0d
-Release:        5%{?dist}
+Release:        6%{?dist}
 Summary:        MinGW port of the OpenSSL toolkit
 
 License:        OpenSSL
@@ -90,19 +91,25 @@ Patch60:        openssl-1.0.0d-apps-dgst.patch
 Patch101:       mingw32-openssl-1.0.0-beta3-libversion.patch
 # Fix engines/ install target after lib rename
 Patch102:       mingw32-openssl-1.0.0d-sfx.patch
+# Some .c file contains in #include <dlfcn.h> while it
+# doesn't really use anything from that header
+Patch103:       mingw-openssl-drop-unneeded-reference-to-dlfcn-h.patch
+# Mingw-w64 compatibility patch
+Patch104:       openssl_mingw64_install_fix.patch
 
 BuildArch:      noarch
 
-BuildRequires:  mingw32-filesystem
+BuildRequires:  mingw32-filesystem >= 95
 BuildRequires:  mingw32-gcc
 BuildRequires:  mingw32-binutils
-
 BuildRequires:  mingw32-zlib
-BuildRequires:  mingw32-pthreads
-BuildRequires:  mingw32-dlfcn
+
+BuildRequires:  mingw64-filesystem >= 95
+BuildRequires:  mingw64-gcc
+BuildRequires:  mingw64-binutils
+BuildRequires:  mingw64-zlib
 
 BuildRequires:  mktemp
-#BuildRequires:  krb5-devel
 BuildRequires:  perl
 BuildRequires:  sed
 BuildRequires:  /usr/bin/cmp
@@ -132,6 +139,7 @@ protocols.
 This package contains Windows (MinGW) libraries and development tools.
 
 
+# Win32
 %package -n mingw32-openssl
 Summary:        MinGW port of the OpenSSL toolkit
 #Requires:       ca-certificates >= 2008-5
@@ -145,7 +153,6 @@ protocols.
 
 This package contains Windows (MinGW) libraries and development tools.
 
-
 %package -n mingw32-openssl-static
 Summary:        Static version of the MinGW port of the OpenSSL toolkit
 Requires:       mingw32-openssl = %{version}-%{release}
@@ -153,8 +160,29 @@ Requires:       mingw32-openssl = %{version}-%{release}
 %description -n mingw32-openssl-static
 Static version of the MinGW port of the OpenSSL toolkit.
 
+# Win64
+%package -n mingw64-openssl
+Summary:        MinGW port of the OpenSSL toolkit
+#Requires:       ca-certificates >= 2008-5
+Requires:       pkgconfig
+
+%description -n mingw64-openssl
+The OpenSSL toolkit provides support for secure communications between
+machines. OpenSSL includes a certificate management tool and shared
+libraries which provide various cryptographic algorithms and
+protocols.
+
+This package contains Windows (MinGW) libraries and development tools.
+
+%package -n mingw64-openssl-static
+Summary:        Static version of the MinGW port of the OpenSSL toolkit
+Requires:       mingw64-openssl = %{version}-%{release}
+
+%description -n mingw64-openssl-static
+Static version of the MinGW port of the OpenSSL toolkit.
+
 
-%{?mingw32_debug_package}
+%?mingw_debug_package
 
 
 %prep
@@ -200,9 +228,8 @@ Static version of the MinGW port of the OpenSSL toolkit.
 
 %patch101 -p1 -b .mingw-libversion
 %patch102 -p1 -b .mingw-sfx
-
-# Use _mingw32_cflags instead of hardcoded ones
-sed -i -e '/^"mingw"/ s/-fomit-frame-pointer -O3 -march=i486 -Wall/%{mingw32_cflags}/' Configure
+%patch103 -p0 -b .dlfcn
+%patch104 -p0 -b .mingw64
 
 # Modify the various perl scripts to reference perl in the right location.
 perl util/perlpath.pl `dirname %{__perl}`
@@ -211,9 +238,24 @@ perl util/perlpath.pl `dirname %{__perl}`
 touch Makefile
 make TABLE PERL=%{__perl}
 
+# Create two copies of the source folder as OpenSSL doesn't support out of source builds
+mkdir ../build_win32
+mv * ../build_win32
+mv ../build_win32 .
+mkdir build_win64
+cp -Rp build_win32/* build_win64
+
+# Use mingw cflags instead of hardcoded ones
+sed -i -e '/^"mingw"/ s/-fomit-frame-pointer -O3 -march=i486 -Wall/%{mingw32_cflags}/' build_win32/Configure
+sed -i -e '/^"mingw"/ s/-fomit-frame-pointer -O3 -march=i486 -Wall/%{mingw64_cflags}/' build_win64/Configure
+
+
 %build
-# NB: 'no-hw' is vital.  MinGW cannot build the hardware drivers
-# and if you don't have this you'll get an obscure link error.
+###############################################################################
+# Win32
+###############################################################################
+pushd build_win32
+
 PERL=%{__perl} \
 ./Configure \
   --prefix=%{mingw32_prefix} \
@@ -224,8 +266,6 @@ PERL=%{__perl} \
   no-hw --cross-compile-prefix=%{mingw32_target}- \
   --enginesdir=%{mingw32_libdir}/openssl/engines \
   shared mingw
-#  --with-krb5-flavor=MIT
-#  -I%{mingw32_prefix}/kerberos/include -L%{mingw32_prefix}/kerberos/%{_lib}
 
 # Regenerate def files as we disabled some algorithms above
 perl util/mkdef.pl crypto ssl update
@@ -241,6 +281,40 @@ if ! iconv -f UTF-8 -t ASCII//TRANSLIT CHANGES >/dev/null 2>&1 ; then
     mv -f CHANGES.utf8 CHANGES
 fi
 
+popd
+
+###############################################################################
+# Win64
+###############################################################################
+pushd build_win64
+
+PERL=%{__perl} \
+./Configure \
+  --prefix=%{mingw64_prefix} \
+  --openssldir=%{mingw64_sysconfdir}/pki/tls \
+  zlib enable-camellia enable-seed enable-tlsext enable-rfc3779 \
+  enable-cms enable-md2 no-idea no-mdc2 no-rc5 no-ec no-ecdh no-ecdsa \
+  no-capieng \
+  no-hw --cross-compile-prefix=%{mingw64_target}- \
+  --enginesdir=%{mingw64_libdir}/openssl/engines \
+  shared mingw64
+
+# Regenerate def files as we disabled some algorithms above
+perl util/mkdef.pl crypto ssl update
+
+make depend
+make all build-shared
+
+# Generate hashes for the included certs.
+make rehash build-shared
+
+if ! iconv -f UTF-8 -t ASCII//TRANSLIT CHANGES >/dev/null 2>&1 ; then
+  iconv -f ISO-8859-1 -t UTF-8 -o CHANGES.utf8 CHANGES && \
+    mv -f CHANGES.utf8 CHANGES
+fi
+
+popd
+
 
 %if %{run_tests}
 %check
@@ -252,7 +326,7 @@ patch -p1 -R < %{PATCH33}
 
 # This is a bit of a hack, but the test scripts look for 'openssl'
 # by name.
-pushd apps
+pushd build_win32/apps
 ln -s openssl.exe openssl
 popd
 
@@ -277,14 +351,14 @@ sleep 3
 DISPLAY=$display
 export DISPLAY
 
-make LDCMD=%{mingw32_cc} -C test apps tests
+make LDCMD=%{mingw32_cc} -C build_win32/test apps tests
 
 # Disable this thread test, because we don't have pthread on Windows.
 %{mingw32_cc} -o openssl-thread-test \
-  -I./include \
+  -I./build_win32/include \
   %-{_mingw32_cflags} \
   %-{SOURCE8} \
-  -L. \
+  -L./build_win32 \
   -lssl -lcrypto \
   -lpthread -lz -ldl
 
@@ -307,23 +381,32 @@ make LDCMD=%{mingw32_cc} -C test apps tests
 
 
 %install
-mkdir -p $RPM_BUILD_ROOT%{mingw32_libdir}
 mkdir -p $RPM_BUILD_ROOT%{mingw32_libdir}/openssl
 mkdir -p $RPM_BUILD_ROOT%{mingw32_bindir}
 mkdir -p $RPM_BUILD_ROOT%{mingw32_includedir}
 mkdir -p $RPM_BUILD_ROOT%{mingw32_mandir}
-make INSTALL_PREFIX=$RPM_BUILD_ROOT install build-shared
+
+mkdir -p $RPM_BUILD_ROOT%{mingw64_libdir}/openssl
+mkdir -p $RPM_BUILD_ROOT%{mingw64_bindir}
+mkdir -p $RPM_BUILD_ROOT%{mingw64_includedir}
+mkdir -p $RPM_BUILD_ROOT%{mingw64_mandir}
+
+%mingw_make_install INSTALL_PREFIX=$RPM_BUILD_ROOT build-shared
 
 # Install the file applink.c (#499934)
-install -m644 ms/applink.c $RPM_BUILD_ROOT%{mingw32_includedir}/openssl/applink.c
+install -m644 build_win32/ms/applink.c $RPM_BUILD_ROOT%{mingw32_includedir}/openssl/applink.c
+install -m644 build_win64/ms/applink.c $RPM_BUILD_ROOT%{mingw64_includedir}/openssl/applink.c
 
 # I have no idea why it installs the manpages in /etc, but
 # we remove them anyway.
 rm -r $RPM_BUILD_ROOT%{mingw32_sysconfdir}/pki/tls/man
+rm -r $RPM_BUILD_ROOT%{mingw64_sysconfdir}/pki/tls/man
 
 # Set permissions on lib*.dll.a so that strip works.
 chmod 0755 $RPM_BUILD_ROOT%{mingw32_libdir}/libcrypto.dll.a
 chmod 0755 $RPM_BUILD_ROOT%{mingw32_libdir}/libssl.dll.a
+chmod 0755 $RPM_BUILD_ROOT%{mingw64_libdir}/libcrypto.dll.a
+chmod 0755 $RPM_BUILD_ROOT%{mingw64_libdir}/libssl.dll.a
 
 # Install a makefile for generating keys and self-signed certs, and a script
 # for generating them on the fly.
@@ -331,22 +414,33 @@ mkdir -p $RPM_BUILD_ROOT%{mingw32_sysconfdir}/pki/tls/certs
 install -m644 %{SOURCE2} $RPM_BUILD_ROOT%{mingw32_sysconfdir}/pki/tls/certs/Makefile
 install -m755 %{SOURCE6} $RPM_BUILD_ROOT%{mingw32_sysconfdir}/pki/tls/certs/make-dummy-cert
 
+mkdir -p $RPM_BUILD_ROOT%{mingw64_sysconfdir}/pki/tls/certs
+install -m644 %{SOURCE2} $RPM_BUILD_ROOT%{mingw64_sysconfdir}/pki/tls/certs/Makefile
+install -m755 %{SOURCE6} $RPM_BUILD_ROOT%{mingw64_sysconfdir}/pki/tls/certs/make-dummy-cert
+
 # Pick a CA script.
-pushd  $RPM_BUILD_ROOT%{mingw32_sysconfdir}/pki/tls/misc
+pushd $RPM_BUILD_ROOT%{mingw32_sysconfdir}/pki/tls/misc
+mv CA.sh CA
+popd
+
+pushd $RPM_BUILD_ROOT%{mingw64_sysconfdir}/pki/tls/misc
 mv CA.sh CA
 popd
 
 mkdir -m700 $RPM_BUILD_ROOT%{mingw32_sysconfdir}/pki/CA
 mkdir -m700 $RPM_BUILD_ROOT%{mingw32_sysconfdir}/pki/CA/private
 
+mkdir -m700 $RPM_BUILD_ROOT%{mingw64_sysconfdir}/pki/CA
+mkdir -m700 $RPM_BUILD_ROOT%{mingw64_sysconfdir}/pki/CA/private
+
 
+# Win32
 %files -n mingw32-openssl
-%doc LICENSE
+%doc build_win32/LICENSE
 %{mingw32_bindir}/openssl.exe
 %{mingw32_bindir}/c_rehash
 %{mingw32_bindir}/libcrypto-%{soversion}.dll
 %{mingw32_bindir}/libssl-%{soversion}.dll
-#{_mingw32_bindir}/.libcrypto*.hmac
 %{mingw32_libdir}/libcrypto.dll.a
 %{mingw32_libdir}/libssl.dll.a
 %{mingw32_libdir}/engines
@@ -354,13 +448,33 @@ mkdir -m700 $RPM_BUILD_ROOT%{mingw32_sysconfdir}/pki/CA/private
 %{mingw32_includedir}/openssl
 %config(noreplace) %{mingw32_sysconfdir}/pki
 
-
 %files -n mingw32-openssl-static
 %{mingw32_libdir}/libcrypto.a
 %{mingw32_libdir}/libssl.a
 
+# Win64
+%files -n mingw64-openssl
+%doc build_win64/LICENSE
+%{mingw64_bindir}/openssl.exe
+%{mingw64_bindir}/c_rehash
+%{mingw64_bindir}/libcrypto-%{soversion}.dll
+%{mingw64_bindir}/libssl-%{soversion}.dll
+%{mingw64_libdir}/libcrypto.dll.a
+%{mingw64_libdir}/libssl.dll.a
+%{mingw64_libdir}/engines
+%{mingw64_libdir}/pkgconfig/*.pc
+%{mingw64_includedir}/openssl
+%config(noreplace) %{mingw64_sysconfdir}/pki
+
+%files -n mingw64-openssl-static
+%{mingw64_libdir}/libcrypto.a
+%{mingw64_libdir}/libssl.a
+
 
 %changelog
+* Sat Mar 10 2012 Erik van Pienbroek <epienbro at fedoraproject.org> - 1.0.0d-6
+- Added win64 support
+
 * Wed Mar 07 2012 Kalev Lember <kalevlember at gmail.com> - 1.0.0d-5
 - Pass the path to perl interpreter to Configure
 
diff --git a/openssl_mingw64_install_fix.patch b/openssl_mingw64_install_fix.patch
new file mode 100644
index 0000000..17b8607
--- /dev/null
+++ b/openssl_mingw64_install_fix.patch
@@ -0,0 +1,11 @@
+--- engines/Makefile.orig	2010-05-15 21:24:54.986089920 +0200
++++ engines/Makefile	2010-05-15 21:26:51.409085467 +0200
+@@ -111,7 +111,7 @@
+ 		for l in $(LIBNAMES); do \
+ 			( echo installing $$l; \
+ 			  pfx=lib; \
+-			  if [ "$(PLATFORM)" = "mingw" ]; then \
++			  if [ "$(PLATFORM)" = "mingw" -o "$(PLATFORM)" = "mingw64" ]; then \
+ 				sfx=.dll; \
+ 				cp $$pfx$$l$$sfx $(INSTALL_PREFIX)$(INSTALLTOP)/lib/engines/$$pfx$$l$$sfx.new; \
+ 			  elif [ "$(PLATFORM)" != "Cygwin" ]; then \


More information about the scm-commits mailing list