#! /bin/bash -efu

# This fetches test data from current system's /lib/modules
# to /tmp/COLLECT

IFS=$'\n'

find /lib/modules | grep -E '/lib/modules/.+\.ko(\.gz|\.bz2|\.xz|\.zst)?$' \
| while IFS='' read -r module; do
    modver=$(/sbin/modinfo -F version "$module")
    # delete possible extra lines because some modules have *two* version tags. *cough*b44*cough*
    modver=${modver%%$'\n'*}    # using $'' bashism, avoid running "head -n1" process
    # replace any strange chars with underscores.
    # [!...] is glob's "match any char not in set" pattern
    # (although bash supports [^...] too, it is not standard)
    modver=${modver//[!0-9a-zA-Z._]/_}
    # only add version tag if it has a version
    [ -z "$modver" ] || modver=" = $modver"

    d="/tmp/COLLECT$module"
    d="${d%/*}"
    mkdir -p "$d"

    out=`/sbin/modinfo -F alias "$module" \
    | sed -E "s,[^][0-9a-zA-Z._:*?/-],_,g; s,(.+),modalias(\\1)$modver,"`

    [ "$out" ] || continue

    echo "/tmp/COLLECT$module.modalias$modver" >&2
    printf '%s\n' "$out" >"/tmp/COLLECT$module.modalias"
done