Package: libgcrypt20 Version: 1.6.4-5 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 against branch1.6 (also in the debian-windows branch of https://anonscm.debian.org/git/users/dkg/libgcrypt.git) provides this for libgcrypt. I'm happy to NMU, or to push these to to the pkg-gnutls repo directly if you'd rather i did that. let me know! For background: 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) Versions of packages libgcrypt20 depends on: ii libc6 2.21-7 ii libgpg-error0 1.21-1 libgcrypt20 recommends no packages. Versions of packages libgcrypt20 suggests: pn rng-tools <none> -- debconf-show failed
>From c58a86b9b3c4c6abc507dcd3fc4df00a63d51493 Mon Sep 17 00:00:00 2001 From: Daniel Kahn Gillmor <[email protected]> Date: Tue, 9 Feb 2016 01:45:50 -0500 Subject: [PATCH 1/4] build out-of-tree for cleanliness --- debian/clean | 1 + debian/libgcrypt20-doc.install | 4 ++-- debian/rules | 13 ++++++++----- 3 files changed, 11 insertions(+), 7 deletions(-) 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/libgcrypt20-doc.install b/debian/libgcrypt20-doc.install index 0d070ae..af97bd4 100644 --- a/debian/libgcrypt20-doc.install +++ b/debian/libgcrypt20-doc.install @@ -1,3 +1,3 @@ -doc/gcrypt.pdf usr/share/doc/libgcrypt20-doc -doc/gcrypt.html/* usr/share/doc/libgcrypt20-doc/html +build/doc/gcrypt.pdf usr/share/doc/libgcrypt20-doc +build/doc/gcrypt.html/* usr/share/doc/libgcrypt20-doc/html doc/*.png usr/share/doc/libgcrypt20-doc/html diff --git a/debian/rules b/debian/rules index 71dd640..abe8677 100755 --- a/debian/rules +++ b/debian/rules @@ -5,7 +5,7 @@ DEBVERSION := $(shell dpkg-parsechangelog | \ sed -n '/^Version: /s/^Version: //p') override_dh_auto_configure: - dh_auto_configure --verbose -- \ + dh_auto_configure --verbose --builddirectory=build -- \ --enable-noexecstack \ --enable-ld-version-script --enable-static \ --libdir=/lib/$(DEB_HOST_MULTIARCH) @@ -14,14 +14,17 @@ override_dh_makeshlibs: dh_makeshlibs -V 'libgcrypt20 (>=1.6.0-0)' \ --add-udeb=libgcrypt20-udeb -- -c4 +override_dh_auto_build-arch: + dh_auto_build --builddirectory=build + override_dh_auto_build-indep: # use current version in /usr/share/texmf/tex/texinfo/, see #803081 rm -f build-aux/texinfo.tex - cd doc && $(MAKE) stamp-vti - cd doc && $(MAKE) pdf html + cd build/doc && $(MAKE) stamp-vti + cd build/doc && $(MAKE) pdf html -override_dh_auto_install: - dh_auto_install --verbose +override_dh_auto_install-arch: + dh_auto_install --verbose --builddirectory=build mkdir -p -m755 debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH) cd debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH) \ && ln -v -s /lib/$(DEB_HOST_MULTIARCH)/`readlink ../../../lib/*/*.so` libgcrypt.so -- 2.7.0
>From d2274205fce30db0bf20cd1d23885fc1f5b2a0f2 Mon Sep 17 00:00:00 2001 From: Daniel Kahn Gillmor <[email protected]> Date: Tue, 9 Feb 2016 02:57:54 -0500 Subject: [PATCH 2/4] update gpg-error.m4 --- debian/patches/35_fix_gpg_error_config_prefix.diff | 21 +++++++++++++++++++++ debian/patches/series | 1 + 2 files changed, 22 insertions(+) create mode 100644 debian/patches/35_fix_gpg_error_config_prefix.diff diff --git a/debian/patches/35_fix_gpg_error_config_prefix.diff b/debian/patches/35_fix_gpg_error_config_prefix.diff new file mode 100644 index 0000000..ec1f25f --- /dev/null +++ b/debian/patches/35_fix_gpg_error_config_prefix.diff @@ -0,0 +1,21 @@ +Description: avoid overwriting --with-libgpg-error-prefix with --with-gpg-error-prefix + gpg-error's upstream fixed this problem a few years ago with: + http://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgpg-error.git;a=commitdiff;h=056cc2d0dfef023fda47ce377d3ee544612526a3 + The corrected file is also available on debian in + /usr/share/aclocal/gpg-error.m4 in the libgpg-error-dev package, but + i'm not sure how to swap it in here before the autoreconf. Probably + gcrypt upstream should update to the latest gpg-error.m4. +Author: Daniel Kahn Gillmor <[email protected]> +Last-Update: 2016-02-09 + +--- libgcrypt20-1.6.4.orig/m4/gpg-error.m4 ++++ libgcrypt20-1.6.4/m4/gpg-error.m4 +@@ -27,7 +27,7 @@ AC_DEFUN([AM_PATH_GPG_ERROR], + dnl --with-libgpg-error-prefix above, for backwards compatibility, + dnl but do not document this old, inconsistently-named option. + AC_ARG_WITH(gpg-error-prefix,, +- gpg_error_config_prefix="$withval", gpg_error_config_prefix="") ++ gpg_error_config_prefix="$withval") + + if test x$gpg_error_config_prefix != x ; then + if test x${GPG_ERROR_CONFIG+set} != xset ; then diff --git a/debian/patches/series b/debian/patches/series index 2f0a91b..f99d8a4 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -2,3 +2,4 @@ 15_multiarchpath_in_-L.diff 20_fedora_libgcrypt-1.6.3-aliasing.patch 30_support_source_date_epoch.diff +35_fix_gpg_error_config_prefix.diff -- 2.7.0
>From ed9f4b5a2a20d32cca1ff483bd9c80e6fb0bd312 Mon Sep 17 00:00:00 2001 From: Daniel Kahn Gillmor <[email protected]> Date: Tue, 9 Feb 2016 20:19:49 -0500 Subject: [PATCH 3/4] patch linker script --- debian/patches/40_fix_windows_linker_script.patch | 32 +++++++++++++++++++++++ debian/patches/series | 1 + 2 files changed, 33 insertions(+) create mode 100644 debian/patches/40_fix_windows_linker_script.patch diff --git a/debian/patches/40_fix_windows_linker_script.patch b/debian/patches/40_fix_windows_linker_script.patch new file mode 100644 index 0000000..74bb5c5 --- /dev/null +++ b/debian/patches/40_fix_windows_linker_script.patch @@ -0,0 +1,32 @@ +Description: fix mingw32 linker error + without this patch, i see the following problems cross-building for mingw32: + . + libtool: link: /usr/bin/i686-w64-mingw32-nm -B .libs/libgcrypt_la-visibility.o .libs/libgcrypt_la-misc.o .libs/libgcrypt_la-global.o .libs/libgcrypt_la-sexp.o .libs/libgcrypt_la-hwfeatures.o .libs/libgcrypt_la-stdmem.o .libs/libgcrypt_la-secmem.o .libs/libgcrypt_la-missing-string.o .libs/libgcrypt_la-fips.o .libs/libgcrypt_la-hmac256.o .libs/libgcrypt_la-context.o .libs/libgcrypt_la-ath.o .libs/versioninfo.o .libs/hwf-x86.o ../cipher/.libs/libcipher.a ../random/.libs/librandom.a ../mpi/.libs/libmpi.a ../compat/.libs/libcompat.a | 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/libgcrypt.exp + libtool: link: if test "x`/bin/sed 1q .libs/libgcrypt.def`" = xEXPORTS; then cp .libs/libgcrypt.def .libs/libgcrypt-20.dll.def; else echo EXPORTS > .libs/libgcrypt-20.dll.def; cat .libs/libgcrypt.def >> .libs/libgcrypt-20.dll.def; fi + libtool: link: i686-w64-mingw32-gcc -shared .libs/libgcrypt-20.dll.def .libs/libgcrypt_la-visibility.o .libs/libgcrypt_la-misc.o .libs/libgcrypt_la-global.o .libs/libgcrypt_la-sexp.o .libs/libgcrypt_la-hwfeatures.o .libs/libgcrypt_la-stdmem.o .libs/libgcrypt_la-secmem.o .libs/libgcrypt_la-missing-string.o .libs/libgcrypt_la-fips.o .libs/libgcrypt_la-hmac256.o .libs/libgcrypt_la-context.o .libs/libgcrypt_la-ath.o .libs/versioninfo.o .libs/hwf-x86.o -Wl,--whole-archive ../cipher/.libs/libcipher.a ../random/.libs/librandom.a ../mpi/.libs/libmpi.a ../compat/.libs/libcompat.a -Wl,--no-whole-archive -L/usr/share/win32/lib /usr/share/win32/lib/libgpg-error.dll.a -Os -static-libgcc -Wl,--no-insert-timestamp -o .libs/libgcrypt-20.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libgcrypt.dll.a + /usr/bin/i686-w64-mingw32-ld: .libs/libgcrypt-20.dll.def:6: syntax error + /usr/bin/i686-w64-mingw32-ld:.libs/libgcrypt-20.dll.def: file format not recognized; treating as linker script + /usr/bin/i686-w64-mingw32-ld:.libs/libgcrypt-20.dll.def:2: syntax error + collect2: error: ld returned 1 exit status + Makefile:611: recipe for target 'libgcrypt.la' failed + . + This is a similar issue to the one the libgpg-error had in + https://lists.gnupg.org/pipermail/gnupg-devel/2016-February/030798.html +Author: Daniel Kahn Gillmor <[email protected]> +Last-Update: 2016-02-09 + +--- a/src/libgcrypt.def ++++ b/src/libgcrypt.def +@@ -1,3 +1,4 @@ ++EXPORTS + ;; libgcrypt.defs - Exported symbols for W32 + ;; Copyright (C) 2003, 2007 Free Software Foundation, Inc. + ;; +@@ -22,7 +23,6 @@ + ;; never be changed. Also check libgcrypt.vers and visibility.h. + + +-EXPORTS + gcry_check_version @1 + gcry_control @2 + diff --git a/debian/patches/series b/debian/patches/series index f99d8a4..46210f7 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -3,3 +3,4 @@ 20_fedora_libgcrypt-1.6.3-aliasing.patch 30_support_source_date_epoch.diff 35_fix_gpg_error_config_prefix.diff +40_fix_windows_linker_script.patch -- 2.7.0
>From 1a62dff66e170c709cfd3fd2c5fecd907848eb05 Mon Sep 17 00:00:00 2001 From: Daniel Kahn Gillmor <[email protected]> Date: Tue, 9 Feb 2016 02:20:30 -0500 Subject: [PATCH 4/4] Added libgcrypt-mingw-w64-dev package This prepares us to be able to build a gpgv-win32 package for debian installer's win32-loader. --- debian/clean | 2 ++ debian/control | 21 ++++++++++++++++++++- debian/libgcrypt-mingw-w64-dev.install | 6 ++++++ debian/libgcrypt-mingw-w64-dev.lintian-overrides | 13 +++++++++++++ debian/rules | 22 ++++++++++++++++++++++ 5 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 debian/libgcrypt-mingw-w64-dev.install create mode 100644 debian/libgcrypt-mingw-w64-dev.lintian-overrides diff --git a/debian/clean b/debian/clean index 567609b..b388f56 100644 --- a/debian/clean +++ b/debian/clean @@ -1 +1,3 @@ build/ +build-i686-w64-mingw32/ +build-x86_64-w64-mingw32/ diff --git a/debian/control b/debian/control index d3acdc9..cb7584b 100644 --- a/debian/control +++ b/debian/control @@ -8,7 +8,7 @@ Uploaders: Andreas Metzler <[email protected]>, Build-Depends: debhelper (>= 9.20150628), libgpg-error-dev (>= 1.11), dh-autoreconf, automake (>= 1:1.12) Build-Depends-Indep: texlive-latex-base, texlive-generic-recommended, - texinfo (>= 4.6-0) + texinfo (>= 4.6-0), mingw-w64, libgpg-error-mingw-w64-dev Standards-Version: 3.9.6 Vcs-Git: https://anonscm.debian.org/git/pkg-gnutls/libgcrypt.git -b branch1.6 Vcs-Browser: https://anonscm.debian.org/cgit/pkg-gnutls/libgcrypt.git/?h=branch1.6 @@ -90,3 +90,22 @@ Breaks: libgnutls-dev (<< 2.12.23-18) Description: transitional libgcrypt11-dev package This is a transitional dummy package to ease the migration from libgcrypt11-dev to libgcrypt20-dev. You can safely remove this package. + +Package: libgcrypt-mingw-w64-dev +Priority: extra +Section: libdevel +Architecture: all +Depends: ${shlibs:Depends}, ${misc:Depends}, libgpg-error-mingw-w64-dev +Suggests: wine +Description: LGPL Crypto library - Windows development + libgcrypt contains cryptographic functions. Many important free + ciphers, hash algorithms and public key signing algorithms have been + implemented: + . + Arcfour, Blowfish, CAST5, DES, AES, Twofish, Serpent, rfc2268 (rc2), SEED, + Camellia, IDEA, Salsa, CRC, MD4, MD5, RIPE-MD160, SHA-1, SHA-256, SHA-512, + Tiger, Whirlpool, DSA, DSA2, ElGamal, RSA, ECC. + . + This is a Windows version of libgcrypt. 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/libgcrypt-mingw-w64-dev.install b/debian/libgcrypt-mingw-w64-dev.install new file mode 100644 index 0000000..ab6e93e --- /dev/null +++ b/debian/libgcrypt-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/libgcrypt-mingw-w64-dev.lintian-overrides b/debian/libgcrypt-mingw-w64-dev.lintian-overrides new file mode 100644 index 0000000..79ca178 --- /dev/null +++ b/debian/libgcrypt-mingw-w64-dev.lintian-overrides @@ -0,0 +1,13 @@ +# libgcrypt-mingw-w64-dev is "arch-independent" from debian's perspective, +# since it ships binaries that are only used during cross-building +# windows software. +libgcrypt-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 +libgcrypt-mingw-w64-dev: file-in-unusual-dir +libgcrypt-mingw-w64-dev: non-standard-dir-in-usr + +# DLLs exported via Samba need to be executable (see #796224) +libgcrypt-mingw-w64-dev: executable-not-elf-or-script diff --git a/debian/rules b/debian/rules index abe8677..5fa3d7d 100755 --- a/debian/rules +++ b/debian/rules @@ -4,6 +4,8 @@ DEBVERSION := $(shell dpkg-parsechangelog | \ sed -n '/^Version: /s/^Version: //p') +WIN_FLAGS=LDFLAGS="-Xlinker --no-insert-timestamp" CFLAGS="-g -Os" CPPFLAGS= + override_dh_auto_configure: dh_auto_configure --verbose --builddirectory=build -- \ --enable-noexecstack \ @@ -22,6 +24,26 @@ override_dh_auto_build-indep: rm -f build-aux/texinfo.tex cd build/doc && $(MAKE) stamp-vti cd build/doc && $(MAKE) pdf html + for cpu in i686 x86_64; do \ + mkdir -p build-$$cpu-w64-mingw32 && \ + cd build-$$cpu-w64-mingw32 && $(WIN_FLAGS) ../configure \ + --prefix=/usr/$$cpu-w64-mingw32 \ + --with-libgpg-error-prefix=/usr/$$cpu-w64-mingw32 \ + --disable-padlock-support --disable-asm \ + --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 override_dh_auto_install-arch: dh_auto_install --verbose --builddirectory=build -- 2.7.0

