Let debuginfo packages provide the build-id
authorAnas Nashif <anas.nashif@intel.com>
Thu, 11 Oct 2012 22:32:35 +0000 (15:32 -0700)
committerAnas Nashif <anas.nashif@intel.com>
Sun, 3 Feb 2013 00:44:15 +0000 (16:44 -0800)
This patch lets debuginfo packages provide build-id like follows:

 debuginfo(build-id) = c63cb23876c5fa85f36beaff58f8557e1bf22517

Users can therefore ask zypper to install the correct debuginfo package
with:

 zypper install -C "debuginfo(build-id) = c63cb23876c5fa85f36beaff58f8557e1bf22517"

autodeps/linux.prov
scripts/debuginfo.prov [new file with mode: 0644]

index 166743d..f888884 100644 (file)
@@ -5,6 +5,9 @@
 IFS=$'\n'
 filelist=($(cat))
 
+debuginfolist=($(printf "%s\n" "${filelist[@]}" | grep "/usr/lib/debug/"))
+filelist=($(printf "%s\n" "${filelist[@]}" | grep -v "/usr/lib/debug/"))
+
 solist=($(printf "%s\n" "${filelist[@]}" | grep "\\.so" | grep -v "^/lib/ld.so" | \
          tr '\n' '\0' | xargs -0 -r file -L | grep "ELF.*shared object" | \
          cut -d: -f1))
@@ -65,6 +68,11 @@ done | sort -u
      printf "%s\n" "${firmwarelist[@]}" | /usr/lib/rpm/firmware.prov | sort -u
 
 #
+# --- debuginfo files
+[ -x /usr/lib/rpm/debuginfo.prov -a -n "$debuginfolist" ] &&
+     printf "%s\n" "${debuginfolist[@]}" | /usr/lib/rpm/debuginfo.prov | sort -u
+
+#
 # --- Mono exes/dlls
 : ${MONO_PREFIX=/usr}
 if [ -x $MONO_PREFIX/bin/mono -a -n "$monolist" ] ; then
diff --git a/scripts/debuginfo.prov b/scripts/debuginfo.prov
new file mode 100644 (file)
index 0000000..4d99257
--- /dev/null
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+while read instfile ; do
+    case $instfile in
+       */usr/lib/debug/.build-id/*.debug)
+           if [ -f "$instfile" ] ; then
+               BUILDID=$(echo $instfile | sed -ne 's|.*/usr/lib/debug/.build-id/\([0-9a-f]*\)/\([0-9a-f]*\)\.debug|\1\2|p')
+               echo "debuginfo(build-id) = $BUILDID"
+           fi
+           ;;
+    esac
+done