Handle config.guess and config.sub with DOS EOLs
[platform/upstream/rpm.git] / scripts / find-supplements.ksyms
1 #! /bin/sh
2
3 SPECFILE=${RPMBUILD_SPECFILE:-/usr/src/packages/SOURCES/$1.spec}
4 IFS=$'\n'
5 PACKAGE=$1
6
7 case "$1" in
8 kernel-module-*)    ;; # Fedora kernel module package names start with
9                        # kernel-module.
10 kernel*)           is_kernel_package=1 ;;
11 esac
12
13 if ! [ -z "$is_kernel_package" ]; then
14     cat > /dev/null
15     exit 0
16 fi
17
18 print_modaliases() {
19     declare class=$1 variants=$2 pos=$3
20     if [ -n "$variants" ]; then
21         echo "${class:0:pos}[$variants]${class:pos+1}"
22     else
23         [ -z "$class" ] || echo "$class"
24     fi
25 }
26
27 combine_modaliases() {
28     declare tag class variants pos n
29     read class
30     while read tag; do
31         for ((n=0; n<${#class}; n++)); do
32             if [ "*" != "${class:n:1}" -a \
33                  "${class:0:n}" = "${tag:0:n}" -a \
34                  "${class:n+1}" = "${tag:n+1}" ] &&
35                ( [ -z "$pos" ] || [ $n = $pos ] ); then
36                 variants="${variants:-${class:n:1}}${tag:n:1}"
37                 pos=$n
38                 break
39             fi
40         done
41         if [ $n -eq ${#class} ]; then
42             print_modaliases "$class" "$variants" "$pos"
43             variants=
44             pos=
45             class=$tag
46         fi
47     done
48     print_modaliases "$class" "$variants" "$pos"
49 }
50
51 # Encode all characters other than [*:a-zA-Z0-9] in stdin as %XX.
52 # (This includes the % character itself, which becomes %25.)
53 hexenc() {
54     local line hex
55
56     while read line; do
57             set -- "" "$line"
58             while [[ "$2" =~ ([*:a-zA-Z0-9]*)([^*:a-zA-Z0-9])(.*) ]]; do
59                 hex=$(echo -n "${BASH_REMATCH[2]}" | hexdump -e '"%X"')
60                 set -- "$1${BASH_REMATCH[1]}%$hex" "${BASH_REMATCH[3]}"
61             done
62             echo "$1$2"
63     done
64 }
65
66 aliases_of_filelist() {
67     modlist=$(mktemp)
68     have_module=1
69     for module in $(grep -E '/lib/modules/.+\.ko$'); do
70         vermagic=$(/sbin/modinfo -F vermagic "$module")
71         krel=${vermagic%% *}
72         if ! test -x /sbin/modinfo; then
73                 echo "ERROR: add module-init-tools to BuildRequires" >&2
74                 exit 1
75         fi
76         have_module=0
77         /sbin/modinfo -F alias "$module" \
78         | hexenc \
79         | sed -nre "s,(.+:.+),modalias(kernel-${krel##*-}:\\1),p" | tee -a $modlist
80     done
81     if ! test -s "$modlist" && test $have_module = 0; then
82         echo "packageand(kernel-${krel##*-}:$PACKAGE)"
83     fi
84     rm -f $modlist
85 }
86
87 aliases_of_specfile_macro() {
88     declare regex
89
90     regex=$(
91         set -o noglob
92         set -- $(sed -ne 's:^%supplements_kernel_module[ \t]::p' \
93                      $SPECFILE)
94         while [ $# -ge 1 ]; do
95             regex=$(echo "$1" \
96                     | sed -e 's:[.]:\\.:g' \
97                           -e 's:?:.:g' \
98                           -e 's:\*:.*:g' \
99                           -e 's:\\:\\\\:g')
100             echo -n "^$regex\$"
101             [ $# -ge 2 ] && echo -n "|"
102             shift
103         done
104     )
105
106     if [ -n "$regex" ]; then
107         awk '
108         $1 == "alias" && $3 ~ regex { print $2 }
109         ' regex="$regex" /lib/modules/*/modules.alias
110     fi
111 }
112
113 (   aliases_of_filelist
114     aliases_of_specfile_macro "$1"
115 ) \
116 | sort -u \
117 | combine_modaliases