From 619d785d9874b67a20339e1ebe5b89d22cba2f11 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Fri, 26 Apr 2013 19:48:39 +0300 Subject: [PATCH] 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. --- bootstrap.sh | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) 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 -- 2.45.2