From: Mikko Rasa Date: Fri, 26 Apr 2013 16:48:39 +0000 (+0300) Subject: Fix bootstrap.sh to work when multiple identically named headers X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=619d785d9874b67a20339e1ebe5b89d22cba2f11;p=builder.git Fix bootstrap.sh to work when multiple identically named headers Previously the overlay -iquote flags for all source directories were applied to all files, so the compiler included the wrong file. The fix is to compile files one by one and only add the flags that are needed for each. The temp directory will now be deleted by default. An option to keep it was added. --- diff --git a/bootstrap.sh b/bootstrap.sh index 5cb4012..dd0e8a6 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -33,6 +33,9 @@ while [ "$1" ]; do --prefix=*) PREFIX="${1#--prefix=}" ;; + --keep-temp) + KEEP_TEMP=yes + ;; *) echo "Unknown option $1" exit 1 @@ -56,11 +59,16 @@ for i in $REQUIRED; do if [ -z "$path" -o ! -d "$path/source" ]; then missing="$missing msp$i" else - if [ $i = "core" ]; then - ln -sf $path/source/* "$INCLUDEDIR/msp/" - else - ln -sf $path/source "$INCLUDEDIR/msp/$i" - fi + headers=`find $path/source \( -name windows -prune \) -o \( -name '*.h' -print \)` + for j in $headers; do + rel=${j#$path/source/} + comp=${rel%%/*} + if [ "$comp" = "$rel" ]; then + comp=$i + fi + mkdir -p "$INCLUDEDIR/msp/$comp" + ln -sf $j "$INCLUDEDIR/msp/$comp/" + done sources="$sources `find $path/source \( -name windows -prune \) -o \( -name '*.cpp' -print \)`" fi done @@ -72,12 +80,26 @@ if [ ! -z "$missing" ]; then exit 1 fi -for i in "$INCLUDEDIR/msp/"*/unix; do - CFLAGS="$CFLAGS -iquote $i -iquote ${i%/unix}" +echo "Compiling builder-stage1. This may take several minutes." +objects="" +for i in $sources; do + obj=`mktemp --tmpdir=temp/bootstrap XXXXXX.o` + dir=${i%/*} + dir=${dir%/unix} + flags="$CFLAGS" + if [ -d "$dir/unix" ]; then + flags="$flags -iquote $dir -iquote $dir/unix" + fi + g++ -c $i -o $obj $flags + objects="$objects $obj" done +g++ $objects -o builder-stage1 $LIBS + +if [ "$KEEP_TEMP" != "yes" ]; then + echo "Cleaning up" + rm -r temp/bootstrap +fi -echo "Compiling builder-stage1. This may take several minutes." -g++ $sources -o builder-stage1 $CFLAGS $LIBS echo "Using builder-stage1 to compile builder." ARGS= if [ "$PREFIX" ]; then