diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2011-10-19 17:54:42 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2011-10-19 17:54:42 +0200 |
commit | efd08bfa0adab3ae299be7abdd45161a15804a3b (patch) | |
tree | e4c09352e6a24ff6188afe7d9eca8b7476ffca45 /scripts | |
parent | f74f280a14f9b79a25e2ba29bab7a3056c94e647 (diff) | |
download | busybox-w32-efd08bfa0adab3ae299be7abdd45161a15804a3b.tar.gz busybox-w32-efd08bfa0adab3ae299be7abdd45161a15804a3b.tar.bz2 busybox-w32-efd08bfa0adab3ae299be7abdd45161a15804a3b.zip |
gen_build_files: don't pass 200k+ strings as params. Closes 4321
Also removes one grep per generated file.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/gen_build_files.sh | 56 |
1 files changed, 23 insertions, 33 deletions
diff --git a/scripts/gen_build_files.sh b/scripts/gen_build_files.sh index e518a9008..1a3d3e9b8 100755 --- a/scripts/gen_build_files.sh +++ b/scripts/gen_build_files.sh | |||
@@ -19,25 +19,20 @@ chk() { status "CHK" "$@"; } | |||
19 | 19 | ||
20 | generate() | 20 | generate() |
21 | { | 21 | { |
22 | local src="$1" dst="$2" header="$3" insert="$4" | 22 | # NB: data to be inserted at INSERT line is coming on stdin |
23 | local src="$1" dst="$2" header="$3" | ||
23 | #chk "${dst}" | 24 | #chk "${dst}" |
24 | ( | 25 | { |
25 | # Need to use printf: different shells have inconsistent | 26 | # Need to use printf: different shells have inconsistent |
26 | # rules re handling of "\n" in echo params, | 27 | # rules re handling of "\n" in echo params. |
27 | # and ${insert} definitely contains "\n". | ||
28 | # Therefore, echo "${header}" would not work: | ||
29 | printf "%s\n" "${header}" | 28 | printf "%s\n" "${header}" |
30 | if grep -qs '^INSERT$' "${src}"; then | 29 | # print everything up to INSERT line |
31 | sed -n '1,/^INSERT$/p' "${src}" | 30 | sed -n '/^INSERT$/q;1,/^INSERT$/p' "${src}" |
32 | printf "%s\n" "${insert}" | 31 | # copy stdin to stdout |
33 | sed -n '/^INSERT$/,$p' "${src}" | 32 | cat |
34 | else | 33 | # print everything after INSERT line |
35 | if [ -n "${insert}" ]; then | 34 | sed -n '/^INSERT$/{:l;n;p;bl}' "${src}" |
36 | printf "%s\n" "ERROR: INSERT line missing in: ${src}" 1>&2 | 35 | } >"${dst}.tmp" |
37 | fi | ||
38 | cat "${src}" | ||
39 | fi | ||
40 | ) | sed '/^INSERT$/d' > "${dst}.tmp" | ||
41 | if ! cmp -s "${dst}" "${dst}.tmp"; then | 36 | if ! cmp -s "${dst}" "${dst}.tmp"; then |
42 | gen "${dst}" | 37 | gen "${dst}" |
43 | mv "${dst}.tmp" "${dst}" | 38 | mv "${dst}.tmp" "${dst}" |
@@ -47,24 +42,21 @@ generate() | |||
47 | } | 42 | } |
48 | 43 | ||
49 | # (Re)generate include/applets.h | 44 | # (Re)generate include/applets.h |
50 | s=`sed -n 's@^//applet:@@p' "$srctree"/*/*.c "$srctree"/*/*/*.c` | 45 | sed -n 's@^//applet:@@p' "$srctree"/*/*.c "$srctree"/*/*/*.c \ |
51 | generate \ | 46 | | generate \ |
52 | "$srctree/include/applets.src.h" \ | 47 | "$srctree/include/applets.src.h" \ |
53 | "include/applets.h" \ | 48 | "include/applets.h" \ |
54 | "/* DO NOT EDIT. This file is generated from applets.src.h */" \ | 49 | "/* DO NOT EDIT. This file is generated from applets.src.h */" |
55 | "${s}" | ||
56 | 50 | ||
57 | # (Re)generate include/usage.h | 51 | # (Re)generate include/usage.h |
58 | # We add line continuation backslash after each line, | 52 | # We add line continuation backslash after each line, |
59 | # and insert empty line before each line which doesn't start | 53 | # and insert empty line before each line which doesn't start |
60 | # with space or tab | 54 | # with space or tab |
61 | # (note: we need to use \\\\ because of ``) | 55 | sed -n -e 's@^//usage:\([ \t].*\)$@\1 \\@p' -e 's@^//usage:\([^ \t].*\)$@\n\1 \\@p' "$srctree"/*/*.c "$srctree"/*/*/*.c \ |
62 | s=`sed -n -e 's@^//usage:\([ \t].*\)$@\1 \\\\@p' -e 's@^//usage:\([^ \t].*\)$@\n\1 \\\\@p' "$srctree"/*/*.c "$srctree"/*/*/*.c` | 56 | | generate \ |
63 | generate \ | ||
64 | "$srctree/include/usage.src.h" \ | 57 | "$srctree/include/usage.src.h" \ |
65 | "include/usage.h" \ | 58 | "include/usage.h" \ |
66 | "/* DO NOT EDIT. This file is generated from usage.src.h */" \ | 59 | "/* DO NOT EDIT. This file is generated from usage.src.h */" |
67 | "${s}" | ||
68 | 60 | ||
69 | # (Re)generate */Kbuild and */Config.in | 61 | # (Re)generate */Kbuild and */Config.in |
70 | { cd -- "$srctree" && find . -type d; } | while read -r d; do | 62 | { cd -- "$srctree" && find . -type d; } | while read -r d; do |
@@ -75,11 +67,10 @@ generate \ | |||
75 | if test -f "$src"; then | 67 | if test -f "$src"; then |
76 | mkdir -p -- "$d" 2>/dev/null | 68 | mkdir -p -- "$d" 2>/dev/null |
77 | 69 | ||
78 | s=`sed -n 's@^//kbuild:@@p' "$srctree/$d"/*.c` | 70 | sed -n 's@^//kbuild:@@p' "$srctree/$d"/*.c \ |
79 | generate \ | 71 | | generate \ |
80 | "${src}" "${dst}" \ | 72 | "${src}" "${dst}" \ |
81 | "# DO NOT EDIT. This file is generated from Kbuild.src" \ | 73 | "# DO NOT EDIT. This file is generated from Kbuild.src" |
82 | "${s}" | ||
83 | fi | 74 | fi |
84 | 75 | ||
85 | src="$srctree/$d/Config.src" | 76 | src="$srctree/$d/Config.src" |
@@ -87,11 +78,10 @@ generate \ | |||
87 | if test -f "$src"; then | 78 | if test -f "$src"; then |
88 | mkdir -p -- "$d" 2>/dev/null | 79 | mkdir -p -- "$d" 2>/dev/null |
89 | 80 | ||
90 | s=`sed -n 's@^//config:@@p' "$srctree/$d"/*.c` | 81 | sed -n 's@^//config:@@p' "$srctree/$d"/*.c \ |
91 | generate \ | 82 | | generate \ |
92 | "${src}" "${dst}" \ | 83 | "${src}" "${dst}" \ |
93 | "# DO NOT EDIT. This file is generated from Config.src" \ | 84 | "# DO NOT EDIT. This file is generated from Config.src" |
94 | "${s}" | ||
95 | fi | 85 | fi |
96 | done | 86 | done |
97 | 87 | ||