From 97334f4cc945ec6c77eb9ccb9091b3377337a2dc Mon Sep 17 00:00:00 2001
From: Simon McVittie <smcv@collabora.com>
Date: Fri, 10 Nov 2017 16:02:46 +0000
Subject: [PATCH] debian: Install libGL shims in /usr/lib/*/libcapsule/shims

It's undesirable to do this as part of the upstream build, because
libtool doesn't let us decouple the target directory from the rpath;
but we can do it in a package build.

Signed-off-by: Simon McVittie <smcv@collabora.com>
---
 data/capsule-mkstublib          |  5 ++--
 debian/.gitignore               |  2 ++
 debian/libcapsule-dev.examples  |  1 +
 debian/libcapsule-tests.install |  1 +
 debian/rules                    | 42 +++++++++++++++++++++++++++++++++
 5 files changed, 49 insertions(+), 2 deletions(-)
 create mode 100644 debian/libcapsule-dev.examples

diff --git a/data/capsule-mkstublib b/data/capsule-mkstublib
index 6dd127c70..435f4b643 100755
--- a/data/capsule-mkstublib
+++ b/data/capsule-mkstublib
@@ -30,6 +30,9 @@ usage ()
 cat << EOF
 Usage: $me [OPTIONS] TARGET EXCLUDES EXPORTS OUTPUT [DSO-VERSION [TREE]]"
     Options:
+        --capsule-pkgdatadir=PATH
+                                Use supporting files from PATH
+                                [default: libcapsule's \${pkgdatadir}]
         --capsule-symbols-tool=PATH
                                 Use replacement capsule-symbols(1)
         --symbols-from=PATH     Use symbols from this file
@@ -173,8 +176,6 @@ then
     symbol_file=${proxy_src%.c}.symbols;
 fi
 
-sharedir=$($PKG_CONFIG --variable=makeinc capsule)
-
 exec >$proxy_src.tmp;
 
 echo '#include "capsule/capsule-shim.h"'
diff --git a/debian/.gitignore b/debian/.gitignore
index ac17ff818..8d3085c41 100644
--- a/debian/.gitignore
+++ b/debian/.gitignore
@@ -3,6 +3,8 @@
 /*.substvars
 /autoreconf*
 /files
+/libGL-proxy/
+/libGL-proxy-build/
 /libcapsule-dev
 /libcapsule-dev-bin
 /libcapsule-tests
diff --git a/debian/libcapsule-dev.examples b/debian/libcapsule-dev.examples
new file mode 100644
index 000000000..06bcb71ab
--- /dev/null
+++ b/debian/libcapsule-dev.examples
@@ -0,0 +1 @@
+debian/libGL-proxy
diff --git a/debian/libcapsule-tests.install b/debian/libcapsule-tests.install
index c564fec23..f7923db25 100644
--- a/debian/libcapsule-tests.install
+++ b/debian/libcapsule-tests.install
@@ -1,2 +1,3 @@
+usr/lib/*/libcapsule/shims
 usr/lib/libcapsule/installed-tests/libcapsule
 usr/share/installed-tests/libcapsule
diff --git a/debian/rules b/debian/rules
index c42c51417..5dd1d6515 100755
--- a/debian/rules
+++ b/debian/rules
@@ -10,8 +10,50 @@ confflags = --libexecdir=\$${exec_prefix}/lib/libcapsule --enable-gtk-doc
 override_dh_auto_configure:
 	dh_auto_configure -- $(confflags)
 
+proxy_vars = \
+	CAPSULE_CFLAGS="-I$(CURDIR)" \
+	CAPSULE_LIBS="-L$(CURDIR)/.libs -lcapsule" \
+	CAPSULE_MKINC="$(CURDIR)/data" \
+	CAPSULE_MKSTUBLIB_TOOL="$(CURDIR)/data/capsule-mkstublib" \
+	CAPSULE_SYMBOLS_TOOL="$(CURDIR)/capsule-symbols" \
+	CAPSULE_VERSION_TOOL="$(CURDIR)/capsule-version" \
+	$(NULL)
+
+override_dh_auto_build:
+	dh_auto_build
+	$(proxy_vars) ./data/capsule-init-project \
+		--capsule-pkgdatadir="$(CURDIR)/data" \
+		--destination="$(CURDIR)/debian/libGL-proxy" \
+		--no-autoreconf \
+		--package-name=libGL-proxy \
+		--search-tree=/nonexistent \
+		--symbols-from-dir="$(CURDIR)/examples/shim" \
+		libGL.so.1/1 \
+		libX11.so.6/6 \
+		libXext.so.6/6 \
+		libxcb-dri2.so.0/0 \
+		libxcb-glx.so.0/0 \
+		libxcb-present.so.0/0 \
+		libxcb-sync.so.1/1 \
+		libxcb.so.1/1 \
+		$(NULL)
+	# Copy it, so we can install the original source as an example
+	cp -a debian/libGL-proxy debian/libGL-proxy-build
+	cd debian/libGL-proxy-build && autoreconf -fi
+	cd debian/libGL-proxy-build && ./configure --prefix=/usr $(proxy_vars)
+	$(MAKE) -C debian/libGL-proxy-build V=1 $(proxy_vars)
+
+override_dh_auto_install:
+	dh_auto_install
+	$(MAKE) -C debian/libGL-proxy-build install V=1 $(proxy_vars) \
+		DESTDIR=$(CURDIR)/debian/libGL-proxy-build/shims
+	install -d debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libcapsule/shims
+	mv debian/libGL-proxy-build/shims/usr/lib/* \
+		debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libcapsule/shims
+
 override_dh_install:
 	rm -f debian/tmp/usr/lib/*/*.la
+	rm -f debian/tmp/usr/lib/*/libcapsule/shims/*.la
 	find debian/tmp/usr/lib/libcapsule/installed-tests -name '*.la' -print -delete
 	# Only keep the architecture-qualified version, delete the unprefixed
 	# version, so we can be Multi-Arch: same
-- 
GitLab