]>
Commit | Line | Data |
---|---|---|
986e4cd8 AM |
1 | commit efd08bfa0adab3ae299be7abdd45161a15804a3b |
2 | Author: Denys Vlasenko <vda.linux@googlemail.com> | |
3 | Date: Wed Oct 19 17:54:42 2011 +0200 | |
4 | ||
5 | gen_build_files: don't pass 200k+ strings as params. Closes 4321 | |
6 | ||
7 | Also removes one grep per generated file. | |
8 | ||
9 | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com> | |
10 | ||
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" "$@"; } | |
16 | ||
17 | generate() | |
18 | { | |
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" | |
22 | #chk "${dst}" | |
23 | - ( | |
24 | + { | |
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}" | |
35 | - else | |
36 | - if [ -n "${insert}" ]; then | |
37 | - printf "%s\n" "ERROR: INSERT line missing in: ${src}" 1>&2 | |
38 | - fi | |
39 | - cat "${src}" | |
40 | - fi | |
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 | |
45 | + cat | |
46 | + # print everything after INSERT line | |
47 | + sed -n '/^INSERT$/{:l;n;p;bl}' "${src}" | |
48 | + } >"${dst}.tmp" | |
49 | if ! cmp -s "${dst}" "${dst}.tmp"; then | |
50 | gen "${dst}" | |
51 | mv "${dst}.tmp" "${dst}" | |
52 | @@ -47,24 +42,21 @@ generate() | |
53 | } | |
54 | ||
55 | # (Re)generate include/applets.h | |
56 | -s=`sed -n 's@^//applet:@@p' "$srctree"/*/*.c "$srctree"/*/*/*.c` | |
57 | -generate \ | |
58 | +sed -n 's@^//applet:@@p' "$srctree"/*/*.c "$srctree"/*/*/*.c \ | |
59 | +| generate \ | |
60 | "$srctree/include/applets.src.h" \ | |
61 | "include/applets.h" \ | |
62 | - "/* DO NOT EDIT. This file is generated from applets.src.h */" \ | |
63 | - "${s}" | |
64 | + "/* DO NOT EDIT. This file is generated from applets.src.h */" | |
65 | ||
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 | |
69 | # with space or tab | |
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` | |
72 | -generate \ | |
73 | +sed -n -e 's@^//usage:\([ \t].*\)$@\1 \\@p' -e 's@^//usage:\([^ \t].*\)$@\n\1 \\@p' "$srctree"/*/*.c "$srctree"/*/*/*.c \ | |
74 | +| generate \ | |
75 | "$srctree/include/usage.src.h" \ | |
76 | "include/usage.h" \ | |
77 | - "/* DO NOT EDIT. This file is generated from usage.src.h */" \ | |
78 | - "${s}" | |
79 | + "/* DO NOT EDIT. This file is generated from usage.src.h */" | |
80 | ||
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 | |
86 | ||
87 | - s=`sed -n 's@^//kbuild:@@p' "$srctree/$d"/*.c` | |
88 | - generate \ | |
89 | + sed -n 's@^//kbuild:@@p' "$srctree/$d"/*.c \ | |
90 | + | generate \ | |
91 | "${src}" "${dst}" \ | |
92 | - "# DO NOT EDIT. This file is generated from Kbuild.src" \ | |
93 | - "${s}" | |
94 | + "# DO NOT EDIT. This file is generated from Kbuild.src" | |
95 | fi | |
96 | ||
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 | |
101 | ||
102 | - s=`sed -n 's@^//config:@@p' "$srctree/$d"/*.c` | |
103 | - generate \ | |
104 | + sed -n 's@^//config:@@p' "$srctree/$d"/*.c \ | |
105 | + | generate \ | |
106 | "${src}" "${dst}" \ | |
107 | - "# DO NOT EDIT. This file is generated from Config.src" \ | |
108 | - "${s}" | |
109 | + "# DO NOT EDIT. This file is generated from Config.src" | |
110 | fi | |
111 | done | |
112 |