generate()
{
# NB: data to be inserted at INSERT line is coming on stdin
- local src="$1" dst="$2" header="$3"
+ src="$1"
+ dst="$2"
+ header="$3"
#chk "${dst}"
{
# Need to use printf: different shells have inconsistent
# rules re handling of "\n" in echo params.
printf "%s\n" "${header}"
# print everything up to INSERT line
- sed -n '/^INSERT$/q;1,/^INSERT$/p' "${src}"
+ sed -n '/^INSERT$/ q; p' "${src}"
# copy stdin to stdout
cat
# print everything after INSERT line
- sed -n '/^INSERT$/{:l;n;p;bl}' "${src}"
+ sed -n '/^INSERT$/ {
+ :l
+ n
+ p
+ bl
+ }' "${src}"
} >"${dst}.tmp"
if ! cmp -s "${dst}" "${dst}.tmp"; then
gen "${dst}"
# We add line continuation backslash after each line,
# and insert empty line before each line which doesn't start
# with space or tab
-sed -n -e 's@^//usage:\([ \t].*\)$@\1 \\@p' -e 's@^//usage:\([^ \t].*\)$@\n\1 \\@p' "$srctree"/*/*.c "$srctree"/*/*/*.c \
+TAB="$(printf '\tX')"
+TAB="${TAB%X}"
+LF="$(printf '\nX')"
+LF="${LF%X}"
+sed -n -e 's@^//usage:\([ '"$TAB"'].*\)$@\1 \\@p' \
+ -e 's@^//usage:\([^ '"$TAB"'].*\)$@\'"$LF"'\1 \\@p' \
+ "$srctree"/*/*.c "$srctree"/*/*/*.c \
| generate \
"$srctree/include/usage.src.h" \
"include/usage.h" \
"/* DO NOT EDIT. This file is generated from usage.src.h */"
# (Re)generate */Kbuild and */Config.in
-{ cd -- "$srctree" && find . -type d; } | while read -r d; do
+# We skip .dotdirs - makes git/svn/etc users happier
+{ cd -- "$srctree" && find . -type d ! '(' -name '.?*' -prune ')'; } \
+| while read -r d; do
d="${d#./}"
src="$srctree/$d/Kbuild.src"