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