From 9a4d61622066d5d30c649f1c958b26526a4ceddf Mon Sep 17 00:00:00 2001
From: Allan McRae <allan@archlinux.org>
Date: Mon, 5 Dec 2016 14:44:51 +1000
Subject: Build a single debug package for all packages from a PKGBUILD

We want to provide source files with debug symbol packages to allow easy
stepping through the program.  This becomes difficult with split packages due
to the binaries in many of these sharing source files across packages.

There are (at least) two solutions to this problem. #1: ensure common source
files are located in the debug package for the package lowest in the dependency
chain and add dependencies to the debug packages so all require source files
are present, or #2: create one debug package for all split packages in a
PKGBUILD.  The second is a more robust approach despite potentially creating
very large debug packages.

This patch creates a single $pkgbase-debug package and adds provides such that
installing $pkgname-debug will always work.

Signed-off-by: Allan McRae <allan@archlinux.org>
---
 scripts/libmakepkg/tidy/strip.sh.in |  2 +-
 scripts/makepkg.sh.in               | 18 ++++++++++++------
 2 files changed, 13 insertions(+), 7 deletions(-)

(limited to 'scripts')

diff --git a/scripts/libmakepkg/tidy/strip.sh.in b/scripts/libmakepkg/tidy/strip.sh.in
index 1c7aacfd..9baed9f4 100644
--- a/scripts/libmakepkg/tidy/strip.sh.in
+++ b/scripts/libmakepkg/tidy/strip.sh.in
@@ -88,7 +88,7 @@ tidy_strip() {
 		[[ -z ${STRIP_STATIC+x} ]] && STRIP_STATIC="-S"
 
 		if check_option "debug" "y"; then
-			dbgdir="$pkgdir-@DEBUGSUFFIX@/usr/lib/debug"
+			dbgdir="$pkgdirbase/$pkgbase-@DEBUGSUFFIX@/usr/lib/debug"
 			mkdir -p "$dbgdir"
 		fi
 
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 20004516..de709baf 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -787,18 +787,24 @@ create_debug_package() {
 		return
 	fi
 
-	pkgdir="${pkgdir}-@DEBUGSUFFIX@"
+	pkgdir="$pkgdirbase/$pkgbase-@DEBUGSUFFIX@"
 
 	# check if we have any debug symbols to package
 	if dir_is_empty "$pkgdir/usr/lib/debug"; then
 		return
 	fi
 
-	depends=("$pkgname=$(get_full_version)")
-	pkgdesc="Detached debugging symbols for $pkgname"
-	pkgname=$pkgname-@DEBUGSUFFIX@
+	unset groups depends optdepends provides conflicts replaces backup install changelog
 
-	unset groups optdepends provides conflicts replaces backup install changelog
+	local pkg
+	for pkg in ${pkgname[@]}; do
+		if [[ $pkg != $pkgbase ]]; then
+			provides+=("$pkg-@DEBUGSUFFIX@")
+		fi
+	done
+
+	pkgdesc="Detached debugging symbols for $pkgname"
+	pkgname=$pkgbase-@DEBUGSUFFIX@
 
 	create_package
 }
@@ -1169,10 +1175,10 @@ run_split_packaging() {
 		tidy_install
 		lint_package || exit 1
 		create_package
-		create_debug_package
 		restore_package_variables
 	done
 	pkgname=("${pkgname_backup[@]}")
+	create_debug_package
 }
 
 usage() {
-- 
cgit v1.2.3-70-g09d2