···6666 fi
6767done
68686969-mkdir -p $out/lib/firmware
7070-for module in $(cat closure); do
6969+cd "$firmware"
7070+for module in $(< ~-/closure); do
7171 # for builtin modules, modinfo will reply with a wrong output looking like:
7272 # $ modinfo -F firmware unix
7373 # name: unix
···7878 #
7979 # For now, the workaround is just to filter out the extraneous lines out
8080 # of its output.
8181- for i in $(modinfo -b $kernel --set-version "$version" -F firmware $module | grep -v '^name:'); do
8282- mkdir -p "$out/lib/firmware/$(dirname "$i")"
8181+ modinfo -b $kernel --set-version "$version" -F firmware $module | grep -v '^name:' | while read -r i; do
8382 echo "firmware for $module: $i"
8483 for name in "$i" "$i.xz" ""; do
8584 [ -z "$name" ] && echo "WARNING: missing firmware $i for module $module"
8686- if cp "$firmware/lib/firmware/$name" "$out/lib/firmware/$name" 2>/dev/null; then
8585+ if cp -v --parents --no-preserve=mode lib/firmware/$name "$out" 2>/dev/null; then
8786 break
8887 fi
8988 done
9090- done
8989+ done || :
9190done
92919392# copy module ordering hints for depmod