Proposed SIG: Windows MinGW cross-compiler SIG
Richard W.M. Jones
rjones at redhat.com
Tue Jul 8 19:32:26 UTC 2008
OK, here is a 'fragment'.
What I have done is to take the current GnuTLS package from Fedora
Rawhide and patch it so that it generates a mingw-gnutls subpackage.
Attached to this message is the patch, and below I discuss the various
parts of the patch.
If you want to see the original vs modified spec files, go here:
http://hg.et.redhat.com/misc/fedora-mingw--devel?cmd=manifest;manifest=91a808c59de63589367c7bd9750da1fca342c529;path=/gnutls-fragment/
Discussion of the patch follows below.
Rich.
+%define __os_install_post /usr/lib/rpm/brp-compress %{nil}
Using ordinary /usr/bin/strip on MinGW lib*.a files not only doesn't
work, but actually corrupts the files. Therefore we must disable
stripping. I'd love to know how to force RPM to either ignore files
in certain directories, or to call the correct strip binary on them.
The original SRPMs that I was working with contained a very long and
hairy bit of code which apparently did this, but I wasn't daring
enough to include it.
+%package -n mingw-gnutls
+Summary: MinGW Windows cross-compile of %{name} package
+Group: Development/Libraries
+
+BuildRequires: mingw-gcc
+BuildRequires: mingw-binutils
+BuildRequires: mingw-libgpg-error
+BuildRequires: mingw-libgcrypt
+
+Requires: mingw-runtime
+Requires: mingw-libgpg-error
+Requires: mingw-libgcrypt
Main package definition. Note that we don't have any automatic
find-requires working at the moment, so we need to define dependent
packages explicitly.
%build
+mkdir build
+pushd build
+echo '../configure "$@"' > configure; chmod +x configure
%configure --with-libtasn1-prefix=%{_prefix} \
--with-included-libcfg \
--disable-srp-authentication
make
+popd
+
+mkdir i686-pc-mingw32
+pushd i686-pc-mingw32
+CFLAGS="$RPM_OPT_FLAGS -fno-stack-protector" \
+../configure \
+ --build=%_build \
+ --host=i686-pc-mingw32 \
+ --prefix=%{_prefix}/i686-pc-mingw32/sys-root/mingw \
+ --disable-cxx \
+ --with-included-libtasn1 \
+ --with-included-libcfg \
+ --disable-srp-authentication
+make
+popd
I've split the build by configuring & building in two subdirectories,
ie. the general pattern is:
pushd build
../configure &c
popd
pushd i686-pc-mingw32
../configure --host=i686-pc-mingw32 &c
popd
Note the hack to make %configure work in a subdirectory. Any easier way?
+%files -n mingw-gnutls
+%defattr(-,root,root)
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/bin/*
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/lib/*
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/include/*
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/share/aclocal/*
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/share/info/*
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/share/man/man1/*
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/share/man/man3/*
This is the filelist for the mingw-specific files.
--
Richard Jones, Emerging Technologies, Red Hat http://et.redhat.com/~rjones
virt-p2v converts physical machines to virtual machines. Boot with a
live CD or over the network (PXE) and turn machines into Xen guests.
http://et.redhat.com/~rjones/virt-p2v
-------------- next part --------------
--- gnutls-original.spec 2008-07-08 18:45:02.000000000 +0100
+++ gnutls.spec 2008-07-08 20:08:19.000000000 +0100
@@ -1,7 +1,12 @@
+# XXX This prevents binaries from being stripped. Using ordinary 'strip'
+# on a MinGW library actually corrupts the library, hence we must disable
+# this action. However we would still like Fedora binaries to be stripped.
+%define __os_install_post /usr/lib/rpm/brp-compress %{nil}
+
Summary: A TLS protocol implementation
Name: gnutls
Version: 2.4.1
-Release: 1%{?dist}
+Release: 2%{?dist}
# The libgnutls library is LGPLv2+, utilities and remaining libraries are GPLv3+
License: GPLv3+ and LGPLv2+
Group: System Environment/Libraries
@@ -33,6 +38,20 @@
Group: Applications/System
Requires: %{name} = %{version}-%{release}
+%package -n mingw-gnutls
+Summary: MinGW Windows cross-compile of %{name} package
+Group: Development/Libraries
+
+BuildRequires: mingw-gcc
+BuildRequires: mingw-binutils
+BuildRequires: mingw-libgpg-error
+BuildRequires: mingw-libgcrypt
+
+Requires: mingw-runtime
+Requires: mingw-libgpg-error
+Requires: mingw-libgcrypt
+
+
%description
GnuTLS is a project that aims to develop a library which provides a secure
layer, over a reliable transport layer. Currently the GnuTLS library implements
@@ -52,6 +71,14 @@
This package contains command line TLS client and server and certificate
manipulation tools.
+%description -n mingw-gnutls
+GnuTLS is a project that aims to develop a library which provides a secure
+layer, over a reliable transport layer. Currently the GnuTLS library implements
+the proposed standards by the IETF's TLS working group.
+This package contains a MinGW Windows cross-compiled library so that
+you can build programs that depend on GnuTLS library for Windows from
+a Fedora host.
+
%prep
%setup -q
%patch1 -p1 -b .nosrp
@@ -61,13 +88,32 @@
done
%build
+mkdir build
+pushd build
+echo '../configure "$@"' > configure; chmod +x configure
%configure --with-libtasn1-prefix=%{_prefix} \
--with-included-libcfg \
--disable-srp-authentication
make
+popd
+
+mkdir i686-pc-mingw32
+pushd i686-pc-mingw32
+CFLAGS="$RPM_OPT_FLAGS -fno-stack-protector" \
+../configure \
+ --build=%_build \
+ --host=i686-pc-mingw32 \
+ --prefix=%{_prefix}/i686-pc-mingw32/sys-root/mingw \
+ --disable-cxx \
+ --with-included-libtasn1 \
+ --with-included-libcfg \
+ --disable-srp-authentication
+make
+popd
%install
rm -fr $RPM_BUILD_ROOT
+pushd build
%makeinstall
rm -f $RPM_BUILD_ROOT%{_bindir}/srptool
rm -f $RPM_BUILD_ROOT%{_bindir}/gnutls-srpcrypt
@@ -78,9 +124,16 @@
rm -f $RPM_BUILD_ROOT%{_infodir}/dir
rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
%find_lang %{name}
+popd
+
+pushd i686-pc-mingw32
+make DESTDIR=$RPM_BUILD_ROOT install
+popd
%check
+pushd build
make check
+popd
%clean
rm -fr $RPM_BUILD_ROOT
@@ -99,7 +152,7 @@
/sbin/install-info --delete %{_infodir}/gnutls.info.gz %{_infodir}/dir || :
fi
-%files -f %{name}.lang
+%files -f build/%{name}.lang
%defattr(-,root,root,-)
%{_libdir}/*.so.*
%doc COPYING COPYING.LIB README AUTHORS
@@ -122,7 +175,20 @@
%{_bindir}/gnutls*
%{_mandir}/man1/*
+%files -n mingw-gnutls
+%defattr(-,root,root)
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/bin/*
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/lib/*
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/include/*
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/share/aclocal/*
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/share/info/*
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/share/man/man1/*
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/share/man/man3/*
+
%changelog
+* Tue Jul 8 2008 Richard W.M. Jones <rjones at redhat.com> 2.4.1-2
+- Build mingw-gnutls subpackage.
+
* Tue Jul 1 2008 Tomas Mraz <tmraz at redhat.com> 2.4.1-1
- new upstream version
- correct the license tag
More information about the devel
mailing list