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

Up linux (4.9.4)
author Aleksej Bobylev <al.bobylev@gmail.com>
date Sat Jan 21 17:27:31 2017 +0200 (2017-01-21)
parents
children cf03631202da
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@19595 61 done < "${wanted_stuff:-$stuff}/split.rules"
al@19595 62 ;;
al@19595 63 esac
al@19595 64
al@19595 65 # A.3. If package depends on other package - make these modules "restricted" (excluded) too
al@19595 66 if [ "$DEPENDS" != "$WANTED" ]; then
al@19595 67 for i in $DEPENDS; do
al@19595 68 if [ "$i" != "$WANTED" ]; then
al@19595 69 pkg_subname=${i#linux-libre-}
al@19595 70 pkg_subname=${pkg_subname#linux*-}
al@19595 71
al@19595 72 while read rule_name rule_value; do
al@19595 73 [ "$pkg_subname" != "$rule_name" ] && continue
al@19595 74 list_modules $rule_value >> "$modlist" 2>/dev/null
al@19595 75 done < "${wanted_stuff:-$stuff}/split.rules"
al@19595 76 fi
al@19595 77 done
al@19595 78 fi
al@19595 79
al@19595 80
al@19595 81 # B. Copy modules from the linux $install
al@19595 82
al@19595 83 # B.1. Get the name of the rule
al@19595 84 # linux{,-libre,64}-subname -> subname
al@19595 85 case $PACKAGE in
al@19595 86 linux-libre|linux64|linux) pkg_subname="linux";;
al@19595 87 linux-libre-*) pkg_subname="${PACKAGE#linux-libre-}";;
al@19595 88 linux64-*) pkg_subname="${PACKAGE#linux64-}";;
al@19595 89 linux-*) pkg_subname="${PACKAGE#linux-}";;
al@19595 90 esac
al@19595 91
al@19595 92 # B.2. Process rules, copy modules
al@19595 93 while read rule_name rule_value; do
al@19595 94 [ "$pkg_subname" != "$rule_name" ] && continue
al@19595 95
al@19595 96 list_modules $rule_value | \
al@19595 97 while read module; do
al@19595 98 dir=lib/modules/$kversion/kernel/$(dirname $module)
al@19595 99 mkdir -p $fs/$dir
al@19595 100 cp -a $modroot/$module $fs/$dir
al@19595 101 done
al@19595 102 done < "${wanted_stuff:-$stuff}/split.rules"
al@19595 103
al@19595 104 # B.3. Clean
al@19595 105 rm "$modlist"
al@19595 106
al@19595 107
al@19595 108 # C. Compare with the previous version: use the --diff (for example, `cook linux-acpi --diff`)
al@19595 109
al@19595 110 if [ -n "$diff" ]; then
al@19595 111 lzcat /var/lib/tazpkg/files.list.lzma | grep ^$PACKAGE: | awk -F/ '{print $NF}' | sort > /tmp/old
al@19595 112 find $fs -type f | awk -F/ '{print $NF}' | sort > /tmp/new
al@19595 113 diff -d -U0 /tmp/old /tmp/new | sed '/^---/d; /^+++/d; /^@@/d; /\.ko\./!d' > $WOK/$PACKAGE/diff.diff
al@19595 114 fi