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