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 |