Source: libassuan
Version: 2.4.2-2
Severity: normal
Tags: patch

We should be able to build Windows executables from debian, including
GnuPG (for gpgv-win32 for win32-loader).  Having a cross-building
toolchain will make that possible.

The attached set of patches (also in the debian-windows branch on
alioth) provides this.

See also:
https://lists.alioth.debian.org/pipermail/pkg-gnupg-maint/2016-February/003286.html

        --dkg

-- System Information:
Debian Release: stretch/sid
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'testing'), (200, 'unstable'), (1, 
'experimental-debug'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 4.3.0-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
>From b00c49f8afe8657f852dfa17be9c43ab927efa30 Mon Sep 17 00:00:00 2001
From: Daniel Kahn Gillmor <d...@fifthhorseman.net>
Date: Sat, 13 Feb 2016 09:18:10 -0500
Subject: [PATCH 1/4] build out-of-tree for cleanliness

---
 debian/clean | 1 +
 debian/rules | 8 +++++++-
 2 files changed, 8 insertions(+), 1 deletion(-)
 create mode 100644 debian/clean

diff --git a/debian/clean b/debian/clean
new file mode 100644
index 0000000..567609b
--- /dev/null
+++ b/debian/clean
@@ -0,0 +1 @@
+build/
diff --git a/debian/rules b/debian/rules
index cf717bd..0ae87de 100755
--- a/debian/rules
+++ b/debian/rules
@@ -4,7 +4,13 @@
 	dh $@ --with autoreconf
 
 override_dh_auto_configure:
-	dh_auto_configure -- --enable-static
+	dh_auto_configure --builddirectory build -- --enable-static
+
+override_dh_auto_build-arch:
+	dh_auto_build --builddirectory build
+
+override_dh_auto_install-arch:
+	dh_auto_install --builddirectory build
 
 override_dh_strip:
 	dh_strip --ddeb-migration='libassuan0-dbg (<< 2.4.2-2~)'
-- 
2.7.0

>From fd5b762cd66418969b26210b07acdc3aa3dcbf80 Mon Sep 17 00:00:00 2001
From: Daniel Kahn Gillmor <d...@fifthhorseman.net>
Date: Sun, 14 Feb 2016 11:16:22 -0500
Subject: [PATCH 2/4] clean up linker script for libassuan when building for
 win32

---
 ...nker-errors-when-cross-building-for-win32.patch | 38 ++++++++++++++++++++++
 debian/patches/series                              |  1 +
 2 files changed, 39 insertions(+)
 create mode 100644 debian/patches/0001-avoid-linker-errors-when-cross-building-for-win32.patch
 create mode 100644 debian/patches/series

diff --git a/debian/patches/0001-avoid-linker-errors-when-cross-building-for-win32.patch b/debian/patches/0001-avoid-linker-errors-when-cross-building-for-win32.patch
new file mode 100644
index 0000000..dbb0c12
--- /dev/null
+++ b/debian/patches/0001-avoid-linker-errors-when-cross-building-for-win32.patch
@@ -0,0 +1,38 @@
+From: Daniel Kahn Gillmor <d...@fifthhorseman.net>
+Date: Sun, 14 Feb 2016 11:14:12 -0500
+Subject: avoid linker errors when cross-building for win32
+
+Without this fix, we see the following problem when trying to link the
+assuan library on win32:
+
+libtool: link: /usr/bin/i686-w64-mingw32-nm -B  .libs/libassuan_la-assuan.o .libs/libassuan_la-context.o .libs/libassuan_la-system.o .libs/libassuan_la-debug.o .libs/libassuan_la-conversion.o .libs/libassuan_la-sysutils.o .libs/libassuan_la-client.o .libs/libassuan_la-server.o .libs/libassuan_la-assuan-error.o .libs/libassuan_la-assuan-buffer.o .libs/libassuan_la-assuan-handler.o .libs/libassuan_la-assuan-inquire.o .libs/libassuan_la-assuan-listen.o .libs/libassuan_la-assuan-pipe-server.o .libs/libassuan_la-assuan-socket-server.o .libs/libassuan_la-assuan-pipe-connect.o .libs/libassuan_la-assuan-socket-connect.o .libs/libassuan_la-assuan-uds.o .libs/libassuan_la-assuan-logging.o .libs/libassuan_la-assuan-socket.o .libs/libassuan_la-system-w32.o .libs/libassuan_la-assuan-io.o .libs/putc_unlocked.o .libs/memrchr.o .libs/stpcpy.o .libs/setenv.o   | sed -n -e 's/^.*[	 ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[	 ][	 ]*_\([_A-Za-z][_A-Za-z0-9]*\)$/\1 _\2 \2/p' | sed '/ __gnu_lto/d' | /bin/sed -e '/^
 [BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //' | sort | uniq > .libs/libassuan.exp
+libtool: link: if test "x`/bin/sed 1q .libs/libassuan.def`" = xEXPORTS; then cp .libs/libassuan.def .libs/libassuan-0.dll.def; else echo EXPORTS > .libs/libassuan-0.dll.def; cat .libs/libassuan.def >> .libs/libassuan-0.dll.def; fi
+libtool: link:  i686-w64-mingw32-gcc -shared .libs/libassuan-0.dll.def  .libs/libassuan_la-assuan.o .libs/libassuan_la-context.o .libs/libassuan_la-system.o .libs/libassuan_la-debug.o .libs/libassuan_la-conversion.o .libs/libassuan_la-sysutils.o .libs/libassuan_la-client.o .libs/libassuan_la-server.o .libs/libassuan_la-assuan-error.o .libs/libassuan_la-assuan-buffer.o .libs/libassuan_la-assuan-handler.o .libs/libassuan_la-assuan-inquire.o .libs/libassuan_la-assuan-listen.o .libs/libassuan_la-assuan-pipe-server.o .libs/libassuan_la-assuan-socket-server.o .libs/libassuan_la-assuan-pipe-connect.o .libs/libassuan_la-assuan-socket-connect.o .libs/libassuan_la-assuan-uds.o .libs/libassuan_la-assuan-logging.o .libs/libassuan_la-assuan-socket.o .libs/libassuan_la-system-w32.o .libs/libassuan_la-assuan-io.o .libs/putc_unlocked.o .libs/memrchr.o .libs/stpcpy.o .libs/setenv.o   -lws2_32 -L/usr/share/win32/lib /usr/share/win32/lib/libgpg-error.dll.a  -Os -Wl,.libs/versioninfo.o -static-libgcc -
 Wl,--no-insert-timestamp   -o .libs/libassuan-0.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libassuan.dll.a
+/usr/bin/i686-w64-mingw32-ld: .libs/libassuan-0.dll.def:5: syntax error
+/usr/bin/i686-w64-mingw32-ld:.libs/libassuan-0.dll.def: file format not recognized; treating as linker script
+/usr/bin/i686-w64-mingw32-ld:.libs/libassuan-0.dll.def:2: syntax error
+collect2: error: ld returned 1 exit status
+Makefile:566: recipe for target 'libassuan.la' failed
+make[5]: *** [libassuan.la] Error 1
+make[5]: Leaving directory '/home/dkg/src/pkg-gnupg/libassuan/build-win32/src'
+---
+ src/libassuan.def | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/libassuan.def b/src/libassuan.def
+index c320151..dfce924 100644
+--- a/src/libassuan.def
++++ b/src/libassuan.def
+@@ -1,3 +1,4 @@
++EXPORTS
+ ; assuan.def - List of symbols to export.
+ ; Copyright (C) 2005, 2009 g10 Code GmbH
+ ;
+@@ -18,7 +19,6 @@
+ ; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ 
+ 
+-EXPORTS
+     assuan_accept			@1
+     assuan_begin_confidential		@2
+     assuan_close_input_fd		@3
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..26cf27d
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1 @@
+0001-avoid-linker-errors-when-cross-building-for-win32.patch
-- 
2.7.0

>From f82e6653157fe1951ca23aad42a5aba74d2b94bb Mon Sep 17 00:00:00 2001
From: Daniel Kahn Gillmor <d...@fifthhorseman.net>
Date: Sun, 14 Feb 2016 11:11:14 -0500
Subject: [PATCH 3/4] produce packages for cross-building on Windows

Use files and locations suggested by Stephen Kitt
---
 debian/clean                                     |  2 ++
 debian/control                                   | 18 ++++++++++++++++
 debian/libassuan-mingw-w64-dev.install           |  6 ++++++
 debian/libassuan-mingw-w64-dev.lintian-overrides | 13 ++++++++++++
 debian/rules                                     | 27 ++++++++++++++++++++++++
 5 files changed, 66 insertions(+)
 create mode 100644 debian/libassuan-mingw-w64-dev.install
 create mode 100644 debian/libassuan-mingw-w64-dev.lintian-overrides

diff --git a/debian/clean b/debian/clean
index 567609b..9f273fc 100644
--- a/debian/clean
+++ b/debian/clean
@@ -1 +1,3 @@
 build/
+build-x86_64-w64-mingw32/
+build-i686-w64-mingw32/
diff --git a/debian/control b/debian/control
index 0f68e24..1c1bd00 100644
--- a/debian/control
+++ b/debian/control
@@ -7,6 +7,7 @@ Uploaders: Eric Dorland <e...@debian.org>,
 Build-Depends: debhelper (>= 9.20151219),
                dh-autoreconf,
                libgpg-error-dev (>= 1.17)
+Build-Depends-Indep: libgpg-error-mingw-w64-dev, mingw-w64
 Standards-Version: 3.9.6.1
 Vcs-Git: https://anonscm.debian.org/git/pkg-gnupg/libassuan.git
 Vcs-Browser: https://anonscm.debian.org/cgit/pkg-gnupg/libassuan.git
@@ -34,3 +35,20 @@ Description: IPC library for the GnuPG components -- header files
  components. Both server and client side functions are provided.
  .
  This package contains header files and static libraries for libassuan.
+
+Package: libassuan-mingw-w64-dev
+Architecture: all
+Priority: extra
+Section: libdevel
+Depends: ${misc:Depends}
+Suggests: wine
+Description: IPC library for the GnuPG components -- Windows port
+ Libassuan is a small library implementing the so-called "Assuan
+ protocol". This protocol is used for IPC between most newer GnuPG
+ components. Both server and client side functions are provided.
+ .
+ This package contains header files and static libraries for libassuan.
+ .
+ This is a Windows version of libassuan.  It's meant to be used when
+ cross-building software that targets the Windows platform, e.g. the
+ win32-loader component of Debian-Installer.
diff --git a/debian/libassuan-mingw-w64-dev.install b/debian/libassuan-mingw-w64-dev.install
new file mode 100644
index 0000000..ab6e93e
--- /dev/null
+++ b/debian/libassuan-mingw-w64-dev.install
@@ -0,0 +1,6 @@
+usr/i686-w64-mingw32/bin/*
+usr/i686-w64-mingw32/lib/*
+usr/i686-w64-mingw32/include/*
+usr/x86_64-w64-mingw32/bin/*
+usr/x86_64-w64-mingw32/lib/*
+usr/x86_64-w64-mingw32/include/*
diff --git a/debian/libassuan-mingw-w64-dev.lintian-overrides b/debian/libassuan-mingw-w64-dev.lintian-overrides
new file mode 100644
index 0000000..8ce8807
--- /dev/null
+++ b/debian/libassuan-mingw-w64-dev.lintian-overrides
@@ -0,0 +1,13 @@
+# libassuan-mingw-w64-dev is "arch-independent" from debian's perspective,
+# since it ships binaries that are only used during cross-building
+# windows software.
+libassuan-mingw-w64-dev: arch-independent-package-contains-binary-or-object
+
+# The location of these cross-building tools is the result of
+# discussion with mingw maintainers:
+# https://lists.alioth.debian.org/pipermail/pkg-gnupg-maint/2016-February/003281.html
+libassuan-mingw-w64-dev: file-in-unusual-dir
+libassuan-mingw-w64-dev: non-standard-dir-in-usr
+
+# DLLs exported via Samba need to be executable (see #796224)
+libassuan-mingw-w64-dev: executable-not-elf-or-script
diff --git a/debian/rules b/debian/rules
index 0ae87de..e02a89e 100755
--- a/debian/rules
+++ b/debian/rules
@@ -14,3 +14,30 @@ override_dh_auto_install-arch:
 
 override_dh_strip:
 	dh_strip --ddeb-migration='libassuan0-dbg (<< 2.4.2-2~)'
+
+### "arch-independent" Win32 builds: ###
+
+WIN_FLAGS=LDFLAGS="-Xlinker --no-insert-timestamp" CFLAGS="-g -Os" CPPFLAGS=
+
+WIN_FLAGS=LDFLAGS="-Xlinker --no-insert-timestamp" CFLAGS="-g -Os" CPPFLAGS=
+
+override_dh_auto_build-indep:
+	for cpu in i686 x86_64; do \
+	 mkdir -p build-$$cpu-w64-mingw32 && \
+	 cd build-$$cpu-w64-mingw32 && $(WIN_FLAGS) ../configure \
+	    --with-libgpg-error-prefix=/usr/$$cpu-w64-mingw32 \
+	    --prefix=/usr/$$cpu-w64-mingw32 \
+	    --enable-static \
+	    --host $$cpu-w64-mingw32 && \
+	  $(WIN_FLAGS) $(MAKE) \
+	  || exit 1 ; \
+	  cd .. ; \
+	done
+
+override_dh_auto_install-indep:
+	for cpu in i686 x86_64; do \
+	  cd build-$$cpu-w64-mingw32 && \
+	  $(MAKE) install DESTDIR=$(shell pwd)/debian/tmp \
+	  || exit 1 ; \
+	  cd .. ; \
+	done
-- 
2.7.0

Reply via email to