mirror of
https://github.com/sheumann/hush.git
synced 2024-09-12 00:55:11 +00:00
While doing O=build build I've noticed that it was getting gradually slower with each invocation. The reason turned out to be that the build directory was inside the source tree and got recreated inside itself with all its subdirectories. This patch changes the behavior so that only the directories with Kbuild.src or Config.src in them are created in the out-of-tree build directory. A quick rebuild from scratch revealed no problems with this. Signed-off-by: Alexander Shishkin <virtuoso@slind.org> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
97 lines
2.7 KiB
Bash
Executable File
97 lines
2.7 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"
|
|
|
|
# (Re)generate include/applets.h
|
|
src="$srctree/include/applets.src.h"
|
|
dst="include/applets.h"
|
|
s=`sed -n 's@^//applet:@@p' -- "$srctree"/*/*.c "$srctree"/*/*/*.c`
|
|
old=`cat "$dst" 2>/dev/null`
|
|
# Why "IFS='' read -r REPLY"??
|
|
# This atrocity is needed to read lines without mangling.
|
|
# IFS='' prevents whitespace trimming,
|
|
# -r suppresses backslash handling.
|
|
new=`echo "/* DO NOT EDIT. This file is generated from applets.src.h */"
|
|
while IFS='' read -r REPLY; do
|
|
test x"$REPLY" = x"INSERT" && REPLY="$s"
|
|
printf "%s\n" "$REPLY"
|
|
done <"$src"`
|
|
if test x"$new" != x"$old"; then
|
|
echo " GEN $dst"
|
|
printf "%s\n" "$new" >"$dst"
|
|
fi
|
|
|
|
# (Re)generate include/usage.h
|
|
src="$srctree/include/usage.src.h"
|
|
dst="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`
|
|
old=`cat "$dst" 2>/dev/null`
|
|
new=`echo "/* DO NOT EDIT. This file is generated from usage.src.h */"
|
|
while IFS='' read -r REPLY; do
|
|
test x"$REPLY" = x"INSERT" && REPLY="$s"
|
|
printf "%s\n" "$REPLY"
|
|
done <"$src"`
|
|
if test x"$new" != x"$old"; then
|
|
echo " GEN $dst"
|
|
printf "%s\n" "$new" >"$dst"
|
|
fi
|
|
|
|
# (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
|
|
#echo " CHK $dst"
|
|
|
|
s=`sed -n 's@^//kbuild:@@p' -- "$srctree/$d"/*.c`
|
|
|
|
old=`cat "$dst" 2>/dev/null`
|
|
new=`echo "# DO NOT EDIT. This file is generated from Kbuild.src"
|
|
while IFS='' read -r REPLY; do
|
|
test x"$REPLY" = x"INSERT" && REPLY="$s"
|
|
printf "%s\n" "$REPLY"
|
|
done <"$src"`
|
|
if test x"$new" != x"$old"; then
|
|
echo " GEN $dst"
|
|
printf "%s\n" "$new" >"$dst"
|
|
fi
|
|
fi
|
|
|
|
src="$srctree/$d/Config.src"
|
|
dst="$d/Config.in"
|
|
if test -f "$src"; then
|
|
mkdir -p -- "$d" 2>/dev/null
|
|
#echo " CHK $dst"
|
|
|
|
s=`sed -n 's@^//config:@@p' -- "$srctree/$d"/*.c`
|
|
|
|
old=`cat "$dst" 2>/dev/null`
|
|
new=`echo "# DO NOT EDIT. This file is generated from Config.src"
|
|
while IFS='' read -r REPLY; do
|
|
test x"$REPLY" = x"INSERT" && REPLY="$s"
|
|
printf "%s\n" "$REPLY"
|
|
done <"$src"`
|
|
if test x"$new" != x"$old"; then
|
|
echo " GEN $dst"
|
|
printf "%s\n" "$new" >"$dst"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Last read failed. This is normal. Don't exit with its error code:
|
|
exit 0
|