]> git.tdb.fi Git - builder.git/commitdiff
Fix bootstrap.sh to work when multiple identically named headers
authorMikko Rasa <tdb@tdb.fi>
Fri, 26 Apr 2013 16:48:39 +0000 (19:48 +0300)
committerMikko Rasa <tdb@tdb.fi>
Fri, 26 Apr 2013 16:48:39 +0000 (19:48 +0300)
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.

bootstrap.sh

index 5cb40121f4fae3a03d9dac81201259850390a538..dd0e8a6e09748f5f8e9eddc2f0caaeb2bcef6bd2 100755 (executable)
@@ -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