1 commit efd08bfa0adab3ae299be7abdd45161a15804a3b
2 Author: Denys Vlasenko <vda.linux@googlemail.com>
3 Date: Wed Oct 19 17:54:42 2011 +0200
5 gen_build_files: don't pass 200k+ strings as params. Closes 4321
7 Also removes one grep per generated file.
9 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
11 diff --git a/scripts/gen_build_files.sh b/scripts/gen_build_files.sh
12 index e518a90..1a3d3e9 100755
13 --- a/scripts/gen_build_files.sh
14 +++ b/scripts/gen_build_files.sh
15 @@ -19,25 +19,20 @@ chk() { status "CHK" "$@"; }
19 - local src="$1" dst="$2" header="$3" insert="$4"
20 + # NB: data to be inserted at INSERT line is coming on stdin
21 + local src="$1" dst="$2" header="$3"
25 # Need to use printf: different shells have inconsistent
26 - # rules re handling of "\n" in echo params,
27 - # and ${insert} definitely contains "\n".
28 - # Therefore, echo "${header}" would not work:
29 + # rules re handling of "\n" in echo params.
30 printf "%s\n" "${header}"
31 - if grep -qs '^INSERT$' "${src}"; then
32 - sed -n '1,/^INSERT$/p' "${src}"
33 - printf "%s\n" "${insert}"
34 - sed -n '/^INSERT$/,$p' "${src}"
36 - if [ -n "${insert}" ]; then
37 - printf "%s\n" "ERROR: INSERT line missing in: ${src}" 1>&2
41 - ) | sed '/^INSERT$/d' > "${dst}.tmp"
42 + # print everything up to INSERT line
43 + sed -n '/^INSERT$/q;1,/^INSERT$/p' "${src}"
44 + # copy stdin to stdout
46 + # print everything after INSERT line
47 + sed -n '/^INSERT$/{:l;n;p;bl}' "${src}"
49 if ! cmp -s "${dst}" "${dst}.tmp"; then
51 mv "${dst}.tmp" "${dst}"
52 @@ -47,24 +42,21 @@ generate()
55 # (Re)generate include/applets.h
56 -s=`sed -n 's@^//applet:@@p' "$srctree"/*/*.c "$srctree"/*/*/*.c`
58 +sed -n 's@^//applet:@@p' "$srctree"/*/*.c "$srctree"/*/*/*.c \
60 "$srctree/include/applets.src.h" \
62 - "/* DO NOT EDIT. This file is generated from applets.src.h */" \
64 + "/* DO NOT EDIT. This file is generated from applets.src.h */"
66 # (Re)generate include/usage.h
67 # We add line continuation backslash after each line,
68 # and insert empty line before each line which doesn't start
70 -# (note: we need to use \\\\ because of ``)
71 -s=`sed -n -e 's@^//usage:\([ \t].*\)$@\1 \\\\@p' -e 's@^//usage:\([^ \t].*\)$@\n\1 \\\\@p' "$srctree"/*/*.c "$srctree"/*/*/*.c`
73 +sed -n -e 's@^//usage:\([ \t].*\)$@\1 \\@p' -e 's@^//usage:\([^ \t].*\)$@\n\1 \\@p' "$srctree"/*/*.c "$srctree"/*/*/*.c \
75 "$srctree/include/usage.src.h" \
77 - "/* DO NOT EDIT. This file is generated from usage.src.h */" \
79 + "/* DO NOT EDIT. This file is generated from usage.src.h */"
81 # (Re)generate */Kbuild and */Config.in
82 { cd -- "$srctree" && find . -type d; } | while read -r d; do
83 @@ -75,11 +67,10 @@ generate \
84 if test -f "$src"; then
85 mkdir -p -- "$d" 2>/dev/null
87 - s=`sed -n 's@^//kbuild:@@p' "$srctree/$d"/*.c`
89 + sed -n 's@^//kbuild:@@p' "$srctree/$d"/*.c \
92 - "# DO NOT EDIT. This file is generated from Kbuild.src" \
94 + "# DO NOT EDIT. This file is generated from Kbuild.src"
97 src="$srctree/$d/Config.src"
98 @@ -87,11 +78,10 @@ generate \
99 if test -f "$src"; then
100 mkdir -p -- "$d" 2>/dev/null
102 - s=`sed -n 's@^//config:@@p' "$srctree/$d"/*.c`
104 + sed -n 's@^//config:@@p' "$srctree/$d"/*.c \
107 - "# DO NOT EDIT. This file is generated from Config.src" \
109 + "# DO NOT EDIT. This file is generated from Config.src"