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 | ||
