SUSE specific find-supplements, used for kernel builds Index: macros.in =================================================================== --- macros.in.orig +++ macros.in @@ -440,7 +440,7 @@ print (t)\ %__find_requires @RPMCONFIGDIR@/find-requires %name #%__find_conflicts ??? #%__find_obsoletes ??? -#%__find_supplements ??? +%__find_supplements @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