#!/bin/bash -e [ -e "$1" ] && [ -n "$2" ] || { echo "Usage: $0 full-tarball date" >&2; exit 0; } oldname="$1" date="$2" name="linux-firmware-free-$date" name_nonfree="linux-firmware-nonfree-$date" rm -rf "$name" "$name_nonfree" mkdir "$name" "$name_nonfree" tar -xf "$oldname" --strip-components=1 -C "$name_nonfree" driver= free= files= license= cd $name_nonfree cp -a WHENCE GPL* "../$name" cat WHENCE | while read line; do set -e case "$line" in "Driver: "*) driver="${line#Driver: }" free= files= license= ;; "File: "*) file="${line#File: }" file=$(echo $file | tr -d '"' | tr ' ' '^') files="$files ${file}" ;; "Source: "*) free=1 ;; "License: "*|"Licence: "*) license="${line#Licen?e: }" case "$license" in *"Allegedly"*|*"no source visible"*) ;; *"GPL"*) free=1 ;; esac ;; *"Advanced Micro Devices, Inc.") free=1 ;; "Original licence information: None") free= ;; "------"*) if [ -n "$free" ]; then echo "Including: $driver ($license)" for file in $files; do file="$(echo $file | tr '^' ' ')" mkdir -p "../$name/$(dirname "$file")" mv "$file" "../$name/$(dirname "$file")" done else echo "Skipping: $driver ($license)" fi driver= ;; esac done cd .. tar -cJf $name.tar.xz $name tar -cJf $name_nonfree.tar.xz $name_nonfree #rm -rf "$name" "$name_nonfree"