File modalias.diff of Package rpm

SUSE specific find-supplements, used for kernel builds

Index: macros.in
===================================================================
--- macros.in.orig
+++ macros.in
@@ -473,14 +473,18 @@ print (t)\
 #
 # Path to scripts to autogenerate package dependencies,
 #
+%__set_helper_env %{lua:
+posix.setenv("RPMBUILD_SPECFILE",rpm.expand("%?_specfile"));
+posix.setenv("RPMBUILD_SOURCEDIR",rpm.expand("%?_sourcedir"));
+}
 # Note: Used iff _use_internal_dependency_generator is zero.
 #%__find_provides	%{_rpmconfigdir}/rpmdeps --provides
 #%__find_requires	%{_rpmconfigdir}/rpmdeps --requires
-%__find_provides	%{_rpmconfigdir}/find-provides %name
-%__find_requires	%{_rpmconfigdir}/find-requires %name
+%__find_provides	%{__set_helper_env}%{_rpmconfigdir}/find-provides %name
+%__find_requires	%{__set_helper_env}%{_rpmconfigdir}/find-requires %name
 #%__find_conflicts	???
 #%__find_obsoletes	???
-#%__find_supplements	???
+%__find_supplements	%{__set_helper_env}%{_rpmconfigdir}/find-supplements %name
 #%__find_enhances	???
 
 #
Index: scripts/find-supplements
===================================================================
--- /dev/null
+++ scripts/find-supplements
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+# This script reads filenames from STDIN and outputs any relevant provides
+# information that needs to be included in the package.
+IFS=$'\n'
+filelist=($(cat))
+
+#
+# --- Kernel module hardware identifiers
+# (e.g., modalias(pci:v0000109Ed00000878sv00000070sd0000FF01bc*sc*i*)
+[ -x /usr/lib/rpm/find-supplements.ksyms ] &&
+    printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-supplements.ksyms "$@"
+
+exit 0
Index: scripts/find-supplements.ksyms
===================================================================
--- /dev/null
+++ scripts/find-supplements.ksyms
@@ -0,0 +1,56 @@
+#! /bin/sh
+
+IFS=$'\n'
+
+case "$1" in
+kernel-module-*)    ;; # Fedora kernel module package names start with
+		       # kernel-module.
+kernel*)	   is_kernel_package=1 ;;
+esac
+
+if ! [ -z "$is_kernel_package" ]; then
+    cat > /dev/null
+    exit 0
+fi
+
+print_modaliases() {
+    declare class=$1 variants=$2 pos=$3
+    if [ -n "$variants" ]; then
+	echo "${class:0:pos}[$variants]${class:pos+1}"
+    else
+	[ -z "$class" ] || echo "$class"
+    fi
+}
+
+combine_modaliases() {
+    declare tag class variants pos n
+    read class
+    while read tag; do
+	for ((n=0; n<${#class}; n++)); do
+	    if [ "*" != "${class:n:1}" -a \
+		 "${class:0:n}" = "${tag:0:n}" -a \
+		 "${class:n+1}" = "${tag:n+1}" ] &&
+	       ( [ -z "$pos" ] || [ $n = $pos ] ); then
+		variants="${variants:-${class:n:1}}${tag:n:1}"
+		pos=$n
+		break
+	    fi
+	done
+	if [ $n -eq ${#class} ]; then
+	    print_modaliases "$class" "$variants" "$pos"
+	    variants=
+	    pos=
+	    class=$tag
+	fi
+    done
+    print_modaliases "$class" "$variants" "$pos"
+}
+
+for module in $(grep -E '/lib/modules/.+\.ko$'); do
+    vermagic=$(/sbin/modinfo -F vermagic "$module")
+    krel=${vermagic%% *}
+    /sbin/modinfo -F alias "$module" \
+    | sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p"
+done \
+| sort -u \
+| combine_modaliases