[mingw-zlib] Added win64 support

epienbro epienbro at fedoraproject.org
Sat Mar 10 14:24:09 UTC 2012


commit 945b6d9ff9992a5d209a2bdb58aa27701786e423
Author: Erik van Pienbroek <epienbro at fedoraproject.org>
Date:   Sat Mar 10 15:23:50 2012 +0100

    Added win64 support
    
    - Added win64 support
    - Simplified the build process by using autotools and a hacked version of libtool
    - Made the package compliant with the new MinGW packaging guidelines

 mingw-zlib.spec                     |  141 +++++++++++++++++++++++------------
 mingw32-zlib-1.2.5-autotools.patch  |   19 +++++-
 mingw32-zlib-create-zlib1-dll.patch |   10 +++
 3 files changed, 121 insertions(+), 49 deletions(-)
---
diff --git a/mingw-zlib.spec b/mingw-zlib.spec
index e9716ee..104bf62 100644
--- a/mingw-zlib.spec
+++ b/mingw-zlib.spec
@@ -1,10 +1,11 @@
-%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
 
 Name:           mingw-zlib
 Version:        1.2.5
-Release:        9%{?dist}
+Release:        10%{?dist}
 Summary:        MinGW Windows zlib compression library
 
 License:        zlib
@@ -17,12 +18,20 @@ Patch3:         mingw32-zlib-1.2.5-autotools.patch
 Patch4:         zlib-1.2.5-gentoo.patch
 # The .def file contains an empty LIBRARY line which isn't valid
 Patch5:         zlib-1.2.5-use-correct-def-file.patch
+# Libtool tries to make a libz-1.dll while we expect zlib1.dll
+# Force this by hacking the ltmain.sh
+Patch6:         mingw32-zlib-create-zlib1-dll.patch
 
 BuildArch:      noarch
 
-BuildRequires:  mingw32-filesystem
+BuildRequires:  mingw32-filesystem >= 95
 BuildRequires:  mingw32-gcc
 BuildRequires:  mingw32-binutils
+
+BuildRequires:  mingw64-filesystem >= 95
+BuildRequires:  mingw64-gcc
+BuildRequires:  mingw64-binutils
+
 BuildRequires:  perl
 BuildRequires:  autoconf
 BuildRequires:  automake
@@ -33,11 +42,12 @@ BuildRequires:  libtool
 MinGW Windows zlib compression library.
 
 
+# Win32
 %package -n mingw32-zlib
-Summary:        MinGW Windows zlib compression library
+Summary:        MinGW Windows zlib compression library for the win32 target
 
 %description -n mingw32-zlib
-MinGW Windows zlib compression library.
+MinGW Windows zlib compression library for the win32 target.
 
 
 %package -n mingw32-zlib-static
@@ -57,64 +67,78 @@ Requires:       mingw32-zlib = %{version}-%{release}
 %description -n  mingw32-minizip
 MinGW Minizip manipulates files from a .zip archive.
 
+# Win64
+%package -n mingw64-zlib
+Summary:        MinGW Windows zlib compression library for the win64 target
+
+%description -n mingw64-zlib
+MinGW Windows zlib compression library for the win64 target.
+
+%package -n mingw64-zlib-static
+Summary:        Static libraries for mingw64-zlib development
+Requires:       mingw64-zlib = %{version}-%{release}
+
+%description -n mingw64-zlib-static
+The mingw64-zlib-static package contains static library for mingw64-zlib development.
+
+%package -n mingw64-minizip
+Summary:        Minizip manipulates files from a .zip archive
+Requires:       mingw64-zlib = %{version}-%{release}
+
+%description -n mingw64-minizip
+MinGW Minizip manipulates files from a .zip archive.
+
 
-%{?mingw32_debug_package}
+%?mingw_debug_package
 
 
 %prep
 %setup -q -n zlib-%{version}
-%patch5 -p1 -b .def
-cd ..
-cp -a zlib-%{version} x
-mv x zlib-%{version}
-cd zlib-%{version}
 %patch3 -p1 -b .atools
 %patch4 -p1 -b .g
+%patch5 -p1 -b .def
 # patch cannot create an empty dir
 mkdir m4
 iconv -f windows-1252 -t utf-8 <ChangeLog >ChangeLog.tmp
 
+autoreconf --install --force
+
+%patch6 -p0 -b .libtool
+
+
 %build
-pushd x
-CC=%{mingw32_cc} \
-CFLAGS="%{mingw32_cflags}" \
-RANLIB=%{mingw32_ranlib} \
-./configure --prefix=%{mingw32_prefix}
-
-make -f win32/Makefile.gcc \
-  CFLAGS="%{mingw32_cflags}" \
-  CC=%{mingw32_cc} \
-  AR=%{mingw32_ar} \
-  RC=%{mingw32_windres} \
-  DLLWRAP=%{mingw32_dllwrap} \
-  STRIP=%{mingw32_strip} \
-  all
-popd
-
-autoreconf --install;
-%{mingw32_configure}
-make %{?_smp_mflags} libz.la
-perl -i -pe 's,libz-1.dll,zlib1.dll,' .libs/libz.lai
-rm -f libz.dll.a
-cp x/libzdll.a libz.dll.a
-cp x/zlib1.dll .
-rm -f .libs/libz.dll.a
-cp x/libzdll.a .libs/libz.dll.a
-cp x/zlib1.dll .libs/
-make %{?_smp_mflags}
+%mingw_configure
+%mingw_make %{?_smp_mflags}
 
 
 %install
-make install DESTDIR=$RPM_BUILD_ROOT
+# Libtool tries to install a file called libz-1.dll
+# but this isn't created anymore due to patch #6
+# Fool libtool until a proper fix has been found
+touch build_win32/.libs/libz-1.dll build_win64/.libs/libz-1.dll
+%mingw_make_install DESTDIR=$RPM_BUILD_ROOT
+
+# Manually install the correct zlib.dll
+install -m 0644 build_win32/.libs/zlib1.dll $RPM_BUILD_ROOT%{mingw32_bindir}/
+install -m 0644 build_win64/.libs/zlib1.dll $RPM_BUILD_ROOT%{mingw64_bindir}/
+
+# Install the pkgconfig file
+install -m 0644 build_win32/zlib.pc $RPM_BUILD_ROOT%{mingw32_libdir}/pkgconfig/
+install -m 0644 build_win64/zlib.pc $RPM_BUILD_ROOT%{mingw64_libdir}/pkgconfig/
+
+# Drop the fake libz-1.dll
+rm -f $RPM_BUILD_ROOT%{mingw32_bindir}/libz-1.dll
+rm -f $RPM_BUILD_ROOT%{mingw64_bindir}/libz-1.dll
 
-rm -rf $RPM_BUILD_ROOT/%{mingw32_mandir}
+# Drop all .la files
+find $RPM_BUILD_ROOT -name "*.la" -delete
 
-rm -f $RPM_BUILD_ROOT/%{mingw32_bindir}/libz-1.dll
-rm -f $RPM_BUILD_ROOT%{mingw32_libdir}/*.la
-install x/zlib1.dll $RPM_BUILD_ROOT/%{mingw32_bindir}/
-install -m 644 x/zlib.pc $RPM_BUILD_ROOT%{mingw32_libdir}/pkgconfig/
+# Drop the man pages
+rm -rf $RPM_BUILD_ROOT%{mingw32_mandir}
+rm -rf $RPM_BUILD_ROOT%{mingw64_mandir}
 
 
+# Win32
 %files -n mingw32-zlib
 %{mingw32_includedir}/zconf.h
 %{mingw32_includedir}/zlib.h
@@ -122,11 +146,9 @@ install -m 644 x/zlib.pc $RPM_BUILD_ROOT%{mingw32_libdir}/pkgconfig/
 %{mingw32_bindir}/zlib1.dll
 %{mingw32_libdir}/pkgconfig/zlib.pc
 
-
 %files -n mingw32-zlib-static
 %{mingw32_libdir}/libz.a
 
-
 %files -n mingw32-minizip
 %{mingw32_libdir}/libminizip.dll.a
 %{mingw32_bindir}/libminizip-1.dll
@@ -134,8 +156,31 @@ install -m 644 x/zlib.pc $RPM_BUILD_ROOT%{mingw32_libdir}/pkgconfig/
 %{mingw32_includedir}/minizip/*.h
 %{mingw32_libdir}/pkgconfig/minizip.pc
 
+# Win64
+%files -n mingw64-zlib
+%{mingw64_includedir}/zconf.h
+%{mingw64_includedir}/zlib.h
+%{mingw64_libdir}/libz.dll.a
+%{mingw64_bindir}/zlib1.dll
+%{mingw64_libdir}/pkgconfig/zlib.pc
+
+%files -n mingw64-zlib-static
+%{mingw64_libdir}/libz.a
+
+%files -n mingw64-minizip
+%{mingw64_libdir}/libminizip.dll.a
+%{mingw64_bindir}/libminizip-1.dll
+%dir %{mingw64_includedir}/minizip
+%{mingw64_includedir}/minizip/*.h
+%{mingw64_libdir}/pkgconfig/minizip.pc
+
 
 %changelog
+* Sat Mar 10 2012 Erik van Pienbroek <epienbro at fedoraproject.org> - 1.2.5-10
+- Added win64 support
+- Simplified the build process by using autotools and a hacked version of libtool
+- Made the package compliant with the new MinGW packaging guidelines
+
 * Tue Mar 06 2012 Kalev Lember <kalevlember at gmail.com> - 1.2.5-9
 - Renamed the source package to mingw-zlib (#800415)
 - Use mingw macros without leading underscore
diff --git a/mingw32-zlib-1.2.5-autotools.patch b/mingw32-zlib-1.2.5-autotools.patch
index 9a3b9f4..a3c429e 100644
--- a/mingw32-zlib-1.2.5-autotools.patch
+++ b/mingw32-zlib-1.2.5-autotools.patch
@@ -87,7 +87,7 @@ diff -urN zlib-1.2.3.orig/configure.ac zlib-1.2.3.kasal/configure.ac
 +
 +AC_SUBST([HAVE_UNISTD_H], [0])
 +AC_CHECK_HEADER([unistd.h], [HAVE_UNISTD_H=1], [])
-+AC_CONFIG_FILES([Makefile minizip.pc zconf.h:zconf.h.in])
++AC_CONFIG_FILES([Makefile minizip.pc zlib.pc zconf.h:zconf.h.in])
 +AC_OUTPUT
 diff -urN zlib-1.2.3.orig/minizip.pc.in zlib-1.2.3.kasal/minizip.pc.in
 --- zlib-1.2.3.orig/minizip.pc.in	1970-01-01 01:00:00.000000000 +0100
@@ -104,3 +104,20 @@ diff -urN zlib-1.2.3.orig/minizip.pc.in zlib-1.2.3.kasal/minizip.pc.in
 +Version: @PACKAGE_VERSION@
 +Libs: -L${libdir} -lminizip -lz
 +Cflags: -I${includedir}
+--- zlib-1.2.3.orig/zlib.pc.in.orig	2011-08-12 13:00:47.043690473 +0200
++++ zlib-1.2.3/zlib.pc.in	2011-08-12 13:01:00.874943334 +0200
+@@ -1,7 +1,6 @@
+ prefix=@prefix@
+ exec_prefix=@exec_prefix@
+ libdir=@libdir@
+-sharedlibdir=@sharedlibdir@
+ includedir=@includedir@
+ 
+ Name: zlib
+@@ -9,5 +8,5 @@
+ Version: @VERSION@
+ 
+ Requires:
+-Libs: -L${libdir} -L${sharedlibdir} -lz
++Libs: -L${libdir} -lz
+ Cflags: -I${includedir}
diff --git a/mingw32-zlib-create-zlib1-dll.patch b/mingw32-zlib-create-zlib1-dll.patch
new file mode 100644
index 0000000..9ee0935
--- /dev/null
+++ b/mingw32-zlib-create-zlib1-dll.patch
@@ -0,0 +1,10 @@
+--- ltmain.sh.orig	2010-10-13 23:11:05.164935359 +0200
++++ ltmain.sh	2010-10-13 23:33:31.572557755 +0200
+@@ -7431,6 +7431,7 @@
+ 	    eval test_cmds=\"$archive_expsym_cmds\"
+ 	    cmds=$archive_expsym_cmds
+ 	  else
++	    if test "$soname" = "libz-1.dll" ; then soname=zlib1.dll; fi
+ 	    eval test_cmds=\"$archive_cmds\"
+ 	    cmds=$archive_cmds
+ 	  fi


More information about the mingw mailing list