f718e3a0db
The shell parsing of files is incredibly slow on many systems. With one report, the process was taking a minute or two which made people thing the build was hung. So rewrite the craziness with sed and proper shell functions. On an idle system, this cut the runtime by half. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
91 lines
2.2 KiB
Bash
Executable File
91 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test $# -ge 2 || { echo "Syntax: $0 SRCTREE OBJTREE"; exit 1; }
|
|
|
|
# cd to objtree
|
|
cd -- "$2" || { echo "Syntax: $0 SRCTREE OBJTREE"; exit 1; }
|
|
# In separate objtree build, include/ might not exist yet
|
|
mkdir include 2>/dev/null
|
|
|
|
srctree="$1"
|
|
|
|
status() { printf ' %-8s%s\n' "$1" "$2"; }
|
|
gen() { status "GEN" "$@"; }
|
|
chk() { status "CHK" "$@"; }
|
|
|
|
generate()
|
|
{
|
|
local src="$1" dst="$2" header="$3" insert="$4"
|
|
#chk "${dst}"
|
|
(
|
|
echo "${header}"
|
|
if grep -qs '^INSERT$' "${src}"; then
|
|
sed -n '1,/^INSERT$/p' "${src}"
|
|
echo "${insert}"
|
|
sed -n '/^INSERT$/,$p' "${src}"
|
|
else
|
|
if [ -n "${insert}" ]; then
|
|
echo "ERROR: INSERT line missing in: ${src}" 1>&2
|
|
fi
|
|
cat "${src}"
|
|
fi
|
|
) | sed '/^INSERT$/d' > "${dst}.tmp"
|
|
if ! cmp -s "${dst}" "${dst}.tmp"; then
|
|
gen "${dst}"
|
|
mv "${dst}.tmp" "${dst}"
|
|
else
|
|
rm -f "${dst}.tmp"
|
|
fi
|
|
}
|
|
|
|
# (Re)generate include/applets.h
|
|
s=`sed -n 's@^//applet:@@p' -- "$srctree"/*/*.c "$srctree"/*/*/*.c`
|
|
generate \
|
|
"$srctree/include/applets.src.h" \
|
|
"include/applets.h" \
|
|
"/* DO NOT EDIT. This file is generated from applets.src.h */" \
|
|
"${s}"
|
|
|
|
# (Re)generate include/usage.h
|
|
# We add line continuation backslash after each line,
|
|
# and insert empty line before each line which doesn't start
|
|
# with space or tab
|
|
# (note: we need to use \\\\ because of ``)
|
|
s=`sed -n -e 's@^//usage:\([ \t].*\)$@\1 \\\\@p' -e 's@^//usage:\([^ \t].*\)$@\n\1 \\\\@p' -- "$srctree"/*/*.c "$srctree"/*/*/*.c`
|
|
generate \
|
|
"$srctree/include/usage.src.h" \
|
|
"include/usage.h" \
|
|
"/* DO NOT EDIT. This file is generated from usage.src.h */" \
|
|
"${s}"
|
|
|
|
# (Re)generate */Kbuild and */Config.in
|
|
{ cd -- "$srctree" && find . -type d; } | while read -r d; do
|
|
d="${d#./}"
|
|
|
|
src="$srctree/$d/Kbuild.src"
|
|
dst="$d/Kbuild"
|
|
if test -f "$src"; then
|
|
mkdir -p -- "$d" 2>/dev/null
|
|
|
|
s=`sed -n 's@^//kbuild:@@p' -- "$srctree/$d"/*.c`
|
|
generate \
|
|
"${src}" "${dst}" \
|
|
"# DO NOT EDIT. This file is generated from Kbuild.src" \
|
|
"${s}"
|
|
fi
|
|
|
|
src="$srctree/$d/Config.src"
|
|
dst="$d/Config.in"
|
|
if test -f "$src"; then
|
|
mkdir -p -- "$d" 2>/dev/null
|
|
|
|
s=`sed -n 's@^//config:@@p' -- "$srctree/$d"/*.c`
|
|
generate \
|
|
"${src}" "${dst}" \
|
|
"# DO NOT EDIT. This file is generated from Config.src" \
|
|
"${s}"
|
|
fi
|
|
done
|
|
|
|
exit 0
|