wok-next annotate linux/stuff/tools/copy_modules.sh @ rev 21727

created recipe for vbindiff
author Hans-G?nter Theisgen
date Sat Nov 21 14:32:44 2020 +0100 (2020-11-21)
parents 960a052d15d3
children
rev   line source
al@19595 1 #!/bin/sh
al@19595 2 # copy_modules.sh: copy Linux Kernel modules for SliTaz GNU/Linux.
al@19595 3 # GNU General Public License.
al@19595 4 #
al@19595 5
al@19595 6 kversion="$VERSION-slitaz"
al@19595 7 modroot="$install/lib/modules/$kversion/kernel"
al@19595 8 modlist="/tmp/modules.list.$$"
al@19595 9
al@19595 10 # Redefine variables for the Linux 64
al@19595 11 if [ ${PACKAGE:0:7} == 'linux64' ]; then
al@19595 12 src="$WOK/linux64/source/tmp"
al@19595 13 install="$install/linux64"
al@19595 14 kversion="$VERSION-slitaz64"
al@19595 15 fi
al@19595 16
al@19595 17
al@19595 18 list_modules() {
al@19595 19 found="$(find $modroot/$1 -type f)"
al@19595 20 if [ -z "$found" ]; then
al@19595 21 echo -e "\n\nError: $1 does not exist.\n\n" >&2
al@19595 22 exit 1
al@19595 23 fi
al@19595 24
al@19595 25 echo "Search modules for $1..." >&2
al@19595 26 for module in $(echo "$found" | sed "s|.*$kversion/||"); do
al@19595 27 grep $module: "$install/lib/modules/$kversion/modules.dep"
al@19595 28 done | sed 's|^kernel/||; s| kernel/| |g; s|:||' | \
al@19595 29 awk '{ for (i = 1; i <= NF; i++) print $i; }' | \
al@19595 30 sort -u | \
al@19595 31 while read module; do
al@19595 32 if grep -qs ^$module$ "$modlist"; then
al@19595 33 echo " - $module" >&2
al@19595 34 continue
al@19595 35 else
al@19595 36 echo " + $module" >&2
al@19595 37 echo $module
al@19595 38 fi
al@19595 39 done
al@19595 40 }
al@19595 41
al@19595 42
al@19595 43 #
al@19595 44 # Main
al@19595 45 #
al@19595 46
al@19595 47 # A. Build list of "restricted" modules: all these modules should be only in the "linux" package
al@19595 48
al@19595 49 # A.1. Builtin modules
al@19595 50 awk '{sub(/^kernel\//, ""); print $1 ".xz"}' "$install/lib/modules/$kversion/modules.builtin" > "$modlist"
al@19595 51
al@19595 52 # A.2. Using split.rules for the "linux" rules
al@19595 53 case $PACKAGE in
al@19595 54 linux|linux-libre|linux64)
al@19595 55 # make exception for the base "linux" package
al@19595 56 ;;
al@19595 57 *)
al@19595 58 while read rule_name rule_value; do
al@19595 59 [ "$rule_name" != 'linux' ] && continue
al@19595 60 list_modules $rule_value >> "$modlist" 2>/dev/null
al@19777 61 done < "$stuff/split.rules"
al@19595 62 ;;
al@19595 63 esac
al@19595 64
al@19777 65 # A.3. Simulate deprecated (for receipts v2) variable $WANTED
al@19777 66 case $PACKAGE in
al@19777 67 linux-libre|linux64|linux) wanted='';;
al@19777 68 linux-libre-*) wanted='linux-libre';;
al@19777 69 linux64-*) wanted='linux64';;
al@19777 70 linux-*) wanted='linux';;
al@19777 71 esac
al@19777 72
al@19777 73 # A.4. If package depends on other package - make these modules "restricted" (excluded) too
al@19777 74 if [ "$DEPENDS" != "$wanted" ]; then
al@19595 75 for i in $DEPENDS; do
al@19777 76 if [ "$i" != "$wanted" ]; then
al@19595 77 pkg_subname=${i#linux-libre-}
al@19595 78 pkg_subname=${pkg_subname#linux*-}
al@19595 79
al@19595 80 while read rule_name rule_value; do
al@19595 81 [ "$pkg_subname" != "$rule_name" ] && continue
al@19595 82 list_modules $rule_value >> "$modlist" 2>/dev/null
al@19777 83 done < "$stuff/split.rules"
al@19595 84 fi
al@19595 85 done
al@19595 86 fi
al@19595 87
al@19595 88
al@19595 89 # B. Copy modules from the linux $install
al@19595 90
al@19595 91 # B.1. Get the name of the rule
al@19595 92 # linux{,-libre,64}-subname -> subname
al@19595 93 case $PACKAGE in
al@19595 94 linux-libre|linux64|linux) pkg_subname="linux";;
al@19595 95 linux-libre-*) pkg_subname="${PACKAGE#linux-libre-}";;
al@19595 96 linux64-*) pkg_subname="${PACKAGE#linux64-}";;
al@19595 97 linux-*) pkg_subname="${PACKAGE#linux-}";;
al@19595 98 esac
al@19595 99
al@19595 100 # B.2. Process rules, copy modules
al@19595 101 while read rule_name rule_value; do
al@19595 102 [ "$pkg_subname" != "$rule_name" ] && continue
al@19595 103
al@19595 104 list_modules $rule_value | \
al@19595 105 while read module; do
al@19595 106 dir=lib/modules/$kversion/kernel/$(dirname $module)
al@19595 107 mkdir -p $fs/$dir
al@19595 108 cp -a $modroot/$module $fs/$dir
al@19595 109 done
al@19777 110 done < "$stuff/split.rules"
al@19595 111
al@19595 112 # B.3. Clean
al@19595 113 rm "$modlist"
al@19595 114
al@19595 115
al@19595 116 # C. Compare with the previous version: use the --diff (for example, `cook linux-acpi --diff`)
al@19595 117
al@19595 118 if [ -n "$diff" ]; then
al@19595 119 lzcat /var/lib/tazpkg/files.list.lzma | grep ^$PACKAGE: | awk -F/ '{print $NF}' | sort > /tmp/old
al@19595 120 find $fs -type f | awk -F/ '{print $NF}' | sort > /tmp/new
al@19595 121 diff -d -U0 /tmp/old /tmp/new | sed '/^---/d; /^+++/d; /^@@/d; /\.ko\./!d' > $WOK/$PACKAGE/diff.diff
al@19595 122 fi