Re: [PATCH v3 6/7] create/adjust generated/autoksyms.h

From: Zev Weiss
Date: Sun Feb 28 2016 - 07:19:27 EST


On Thu, Feb 18, 2016 at 15:07:02 -0500, Nicolas Pitre wrote:
diff --git a/scripts/adjust_autoksyms.sh b/scripts/adjust_autoksyms.sh
new file mode 100755
index 0000000000..898a3ca1b2
--- /dev/null
+++ b/scripts/adjust_autoksyms.sh
@@ -0,0 +1,97 @@
+#!/bin/sh

Given the here-strings in this script, this should probably be /bin/bash or breakage will ensue on Debian and suchlike where /bin/sh != bash. However...

+sed -ns -e '3s/ /\n/gp' "$MODVERDIR"/*.mod | sort -u |
+while read sym; do
+ if [ -n "$CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX" ]; then
+ sym=$(sed 's/^_//' <<< "$sym")

...this one could (shell-portably and more efficiently) be a parameter expansion (sym="${sym#_}").

+
+# Extract changes between old and new list and touch corresponding
+# dependency files.
+# Note: sort -m doesn't work well with underscore prefixed symbols so we
+# use 'cat ... | sort' instead.
+changed=0
+while read sympath; do
+ [ -z "$sympath" ] && continue
+ depfile="include/config/ksym/${sympath}.h"
+ mkdir -p "$(dirname "$depfile")"
+ touch "$depfile"
+ changed=$((changed + 1))
+done <<< "$(
+ cat "$cur_ksyms_file" "$new_ksyms_file" | sort | uniq -u |
+ sed -n 's/^#define __KSYM_\(.*\) 1/\1/p' | tr "A-Z_" "a-z/" )"

Nothing super-obvious springs to mind as a pure-sh equivalent for this one though, so assuming the script remains bash-specific, a process substitution like

done < <(cat ...)

might slightly cleaner than the here-string + command substitution (doesn't need quoting, and just streams through a pipe rather than bash snarfing it all up into a string).