[3320] | 1 | #!/bin/sh
|
---|
| 2 |
|
---|
| 3 | test $# -ge 2 || { echo "Syntax: $0 SRCTREE OBJTREE"; exit 1; }
|
---|
| 4 |
|
---|
| 5 | # cd to objtree
|
---|
| 6 | cd -- "$2" || { echo "Syntax: $0 SRCTREE OBJTREE"; exit 1; }
|
---|
| 7 | # In separate objtree build, include/ might not exist yet
|
---|
| 8 | mkdir include 2>/dev/null
|
---|
| 9 |
|
---|
| 10 | srctree="$1"
|
---|
| 11 |
|
---|
| 12 | status() { printf ' %-8s%s\n' "$1" "$2"; }
|
---|
| 13 | gen() { status "GEN" "$@"; }
|
---|
| 14 | chk() { status "CHK" "$@"; }
|
---|
| 15 |
|
---|
| 16 | generate()
|
---|
| 17 | {
|
---|
| 18 | local src="$1" dst="$2" header="$3" insert="$4"
|
---|
| 19 | #chk "${dst}"
|
---|
| 20 | (
|
---|
| 21 | printf "%s\n" "${header}"
|
---|
| 22 | if grep -qs '^INSERT$' "${src}"; then
|
---|
| 23 | sed -n '1,/^INSERT$/p' "${src}"
|
---|
| 24 | printf "%s\n" "${insert}"
|
---|
| 25 | sed -n '/^INSERT$/,$p' "${src}"
|
---|
| 26 | else
|
---|
| 27 | if [ -n "${insert}" ]; then
|
---|
| 28 | printf "%s\n" "ERROR: INSERT line missing in: ${src}" 1>&2
|
---|
| 29 | fi
|
---|
| 30 | cat "${src}"
|
---|
| 31 | fi
|
---|
| 32 | ) | sed '/^INSERT$/d' > "${dst}.tmp"
|
---|
| 33 | if ! cmp -s "${dst}" "${dst}.tmp"; then
|
---|
| 34 | gen "${dst}"
|
---|
| 35 | mv "${dst}.tmp" "${dst}"
|
---|
| 36 | else
|
---|
| 37 | rm -f "${dst}.tmp"
|
---|
| 38 | fi
|
---|
| 39 | }
|
---|
| 40 |
|
---|
| 41 | # (Re)generate include/applets.h
|
---|
| 42 | s=`sed -n 's@^//applet:@@p' -- "$srctree"/*/*.c "$srctree"/*/*/*.c`
|
---|
| 43 | generate \
|
---|
| 44 | "$srctree/include/applets.src.h" \
|
---|
| 45 | "include/applets.h" \
|
---|
| 46 | "/* DO NOT EDIT. This file is generated from applets.src.h */" \
|
---|
| 47 | "${s}"
|
---|
| 48 |
|
---|
| 49 | # (Re)generate include/usage.h
|
---|
| 50 | # We add line continuation backslash after each line,
|
---|
| 51 | # and insert empty line before each line which doesn't start
|
---|
| 52 | # with space or tab
|
---|
| 53 | # (note: we need to use \\\\ because of ``)
|
---|
| 54 | s=`sed -n -e 's@^//usage:\([ \t].*\)$@\1 \\\\@p' -e 's@^//usage:\([^ \t].*\)$@\n\1 \\\\@p' -- "$srctree"/*/*.c "$srctree"/*/*/*.c`
|
---|
| 55 | generate \
|
---|
| 56 | "$srctree/include/usage.src.h" \
|
---|
| 57 | "include/usage.h" \
|
---|
| 58 | "/* DO NOT EDIT. This file is generated from usage.src.h */" \
|
---|
| 59 | "${s}"
|
---|
| 60 |
|
---|
| 61 | # (Re)generate */Kbuild and */Config.in
|
---|
| 62 | { cd -- "$srctree" && find . -type d; } | while read -r d; do
|
---|
| 63 | d="${d#./}"
|
---|
| 64 |
|
---|
| 65 | src="$srctree/$d/Kbuild.src"
|
---|
| 66 | dst="$d/Kbuild"
|
---|
| 67 | if test -f "$src"; then
|
---|
| 68 | mkdir -p -- "$d" 2>/dev/null
|
---|
| 69 |
|
---|
| 70 | s=`sed -n 's@^//kbuild:@@p' -- "$srctree/$d"/*.c`
|
---|
| 71 | generate \
|
---|
| 72 | "${src}" "${dst}" \
|
---|
| 73 | "# DO NOT EDIT. This file is generated from Kbuild.src" \
|
---|
| 74 | "${s}"
|
---|
| 75 | fi
|
---|
| 76 |
|
---|
| 77 | src="$srctree/$d/Config.src"
|
---|
| 78 | dst="$d/Config.in"
|
---|
| 79 | if test -f "$src"; then
|
---|
| 80 | mkdir -p -- "$d" 2>/dev/null
|
---|
| 81 |
|
---|
| 82 | s=`sed -n 's@^//config:@@p' -- "$srctree/$d"/*.c`
|
---|
| 83 | generate \
|
---|
| 84 | "${src}" "${dst}" \
|
---|
| 85 | "# DO NOT EDIT. This file is generated from Config.src" \
|
---|
| 86 | "${s}"
|
---|
| 87 | fi
|
---|
| 88 | done
|
---|
| 89 |
|
---|
| 90 | # Last read failed. This is normal. Don't exit with its error code:
|
---|
| 91 | exit 0
|
---|