First, note that this issue is more serious in jessie and stretch than
it was in wheezy, because in wheezy, libcurl4-*-dev Depended on a
bunch of packages that were not multiarch-compatible (and thus,
libcurl4-*-dev was not co-installable in practice.) In jessie,
however, those other packages are merely Suggested.
Here are patches that should fix the issue (for the jessie version;
the same changes ought to work for the stretch/sid versions but I
haven't tried.)
(When I actually tried building these packages, for amd64 and i386, I
found that the curl-config scripts still differed, which was
apparently because I had 'libnghttp2-dev' installed in the amd64 build
system for some reason - it seems curl will use that package if it's
available. I'm pretty sure that if both builds are done in clean
environments, the curl-config scripts will be identical. But that's
something to be aware of, and maybe the package should either support
and build-depend on libnghttp2-dev, or explicitly disable it.)
One side issue that I didn't address is that `pkg-config --cflags
libcurl` will now output -I/usr/include/<triplet>, which is not ideal,
but acceptable (if you're using pkg-config and building for a
"foreign" architecture, you'll probably need to set appropriate
pkg-config environment variables anyway.)
In order to (partially) multi-arch-ify curl-config, remove all mention
of @includedir@ and @libdir@ from the script. On Debian, the actual
header and library directories are architecture-dependent, but will
always be in the C compiler's default search path, so -I and -L
options are not necessary (and may be harmful in multi-arch
environments.)
Index: curl-7.38.0/curl-config.in
===================================================================
--- curl-7.38.0.orig/curl-config.in
+++ curl-7.38.0/curl-config.in
@@ -23,7 +23,6 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
-includedir=@includedir@
cppflag_curl_staticlib=@CPPFLAG_CURL_STATICLIB@
usage()
@@ -134,19 +133,11 @@ while test $# -gt 0; do
else
CPPFLAG_CURL_STATICLIB=""
fi
- if test "X@includedir@" = "X/usr/include"; then
- echo "$CPPFLAG_CURL_STATICLIB"
- else
- echo "${CPPFLAG_CURL_STATICLIB}-I@includedir@"
- fi
+ echo "$CPPFLAG_CURL_STATICLIB"
;;
--libs)
- if test "X@libdir@" != "X/usr/lib" -a "X@libdir@" != "X/usr/lib64"; then
- CURLLIBDIR="-L@libdir@ "
- else
- CURLLIBDIR=""
- fi
+ CURLLIBDIR=""
if test "X@REQUIRE_LIB_DEPS@" = "Xyes"; then
echo ${CURLLIBDIR}-lcurl @LIBCURL_LIBS@
else
@@ -156,7 +147,7 @@ while test $# -gt 0; do
--static-libs)
if test "X@ENABLE_STATIC@" != "Xno" ; then
- echo @libdir@/libcurl.@libext@ @LDFLAGS@ @LIBCURL_LIBS@
+ echo -Wl,-Bstatic -lcurl -Wl,-Bdynamic @LDFLAGS@ @LIBCURL_LIBS@
else
echo "curl was built with static libraries disabled" >&2
exit 1
--- curl-7.38.0.orig/debian/rules 2016-11-01 17:38:10.000000000 -0400
+++ curl-7.38.0/debian/rules 2016-12-14 16:15:53.852000000 -0500
@@ -9,9 +9,13 @@
# enable all hardening options (see #763372)
export DEB_BUILD_MAINT_OPTIONS:=hardening=+all
+DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
+
CONFIGURE_ARGS = -- --disable-dependency-tracking \
--disable-symbol-hiding --enable-versioned-symbols \
- --enable-threaded-resolver --with-lber-lib=lber --with-gssapi=/usr
+ --enable-threaded-resolver --with-lber-lib=lber --with-gssapi=/usr \
+ --includedir=/usr/include/$(DEB_HOST_MULTIARCH)
%:
dh $@
@@ -72,6 +76,27 @@
dh_install -pcurl -plibcurl3 -plibcurl4-openssl-dev -plibcurl4-doc \
--sourcedir=debian/tmp
sed -i "/dependency_libs/ s/'.*'/''/" `find . -name '*.la'`
+# Modify curl-config to make it architecture-independent:
+# 1. In --static-libs output, replace the output of krb5-config (which
+# currently includes architecture-specific paths) with a call at
+# runtime to krb5-config. Of course, this will only work correctly
+# if the installed libkrb5-dev matches the architecture of the
+# program you're linking, or if libkrb5-dev is made
+# multiarch-compatible at some point in the future. For dynamic
+# linking this has no impact.
+# 2. In --configure output, replace the architecture-specific paths
+# used for --libdir and --libexecdir with a literal backquoted call
+# to dpkg-architecture. This is functionally equivalent to the way
+# debhelper actually invokes configure, and indicates to the user
+# (who runs curl-config --configure in order to learn about how the
+# library was compiled) that they are in fact using a multi-arch
+# package.
+# 3. Likewise, replace the architecture name used for --build (and
+# build_alias) with a literal backquoted call to dpkg-architecture.
+ sed -e "/-lcurl /s|`krb5-config --libs gssapi`|\`krb5-config --libs gssapi\`|" \
+ -e "/--prefix/s|/$(DEB_HOST_MULTIARCH)'|/'\\\\\`dpkg-architecture -qDEB_HOST_MULTIARCH\\\\\`|g" \
+ -e "/--prefix/s|=$(DEB_BUILD_GNU_TYPE)'|='\\\\\`dpkg-architecture -qDEB_BUILD_GNU_TYPE\\\\\`|g" \
+ -i `find . -name curl-config`
override_dh_installchangelogs:
dh_installchangelogs CHANGES