]> git.tdb.fi Git - builder.git/blobdiff - bootstrap.sh
Force shared linking on Android
[builder.git] / bootstrap.sh
index f0f51a7ea069c8e6b7a13dd4269626711bd4ce8d..f198f6f6ad5526b5045c654e5319a4f05922ce8d 100755 (executable)
 
 set -e
 
-REQUIRED="core datafile fs strings io"
-CFLAGS="-Iinclude `pkg-config --cflags sigc++-2.0`"
-LIBS="`pkg-config --libs sigc++-2.0` -lpthread -ldl"
-if [ -z "$LIBPATH" ]; then
-       LIBPATH=`pwd`/..
+INCLUDEDIR=temp/bootstrap/include
+REQUIRED="core datafile"
+CFLAGS="-I$INCLUDEDIR `pkg-config --cflags sigc++-2.0`"
+LIBS="`pkg-config --libs sigc++-2.0` -lpthread"
+MACHINE="`uname -m`"
+SYSTEM="`uname -s`"
+if [ "$MACHINE" = "x86_64" ]; then
+       MULTIARCH="x86_64-linux-gnu"
+else
+       MULTIARCH="i386-linux-gnu"
 fi
+if [ "$SYSTEM" = "Darwin" -o "$SYSTEM" = "FreeBSD" ]; then
+       if which clang++ >/dev/null; then
+               COMPILER="clang++"
+       else
+               COMPILER="g++"
+       fi
+else
+       COMPILER="g++"
+fi
+if [ -e /usr/lib/libdl.so -o -e /usr/lib/$MULTIARCH/libdl.so ]; then
+       LIBS="$LIBS -ldl"
+fi
+
+while [ "$1" ]; do
+       case $1 in
+       --libpath)
+               shift
+               LIBPATH="$1"
+               ;;
+       --libpath=*)
+               LIBPATH="${1#--libpath=}"
+               ;;
+       --prefix)
+               shift
+               PREFIX="$1"
+               ;;
+       --prefix=*)
+               PREFIX="${1#--prefix=}"
+               ;;
+       --keep-temp)
+               KEEP_TEMP=yes
+               ;;
+       --compiler)
+               shift
+               COMPILER="$1"
+               CUSTOM_COMPILER=yes
+               ;;
+       --compiler=*)
+               COMPILER="${1#--compiler=}"
+               CUSTOM_COMPILER=yes
+               ;;
+       --debug)
+               DEBUG=-g
+               ;;
+       *)
+               echo "Unknown option $1"
+               exit 1
+               ;;
+       esac
+       shift
+done
 
-LIBPATH=`readlink -f $LIBPATH`
+if [ -z "$LIBPATH" -o "${LIBPATH%%/*}" ]; then
+       LIBPATH=`pwd`/${LIBPATH:-..}
+fi
 
-mkdir -p include/msp
+rm -rf "$INCLUDEDIR"
+mkdir -p "$INCLUDEDIR/msp"
 
 sources=source/*.cpp
 
+missing=""
 for i in $REQUIRED; do
-       path=$LIBPATH/$i
-       if [ ! -e $path ]; then
-               echo $i missing
-               exit 1
-       fi
-       if [ $i = "core" ]; then
-               ln -sfT $path/source/* -t include/msp
+       path=`ls -1d $LIBPATH/*$i* 2>/dev/null | head -n1`
+       if [ -z "$path"  -o ! -d "$path/source" ]; then
+               missing="$missing msp$i"
        else
-               ln -sfT $path/source include/msp/$i
+               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
-       sources="$sources `find $path/source -name '*.cpp'`"
 done
 
-g++ $sources -o builder-stage1 $CFLAGS $LIBS
+if [ ! -z "$missing" ]; then
+       echo "The following libraries were not found:$missing"
+       echo "I looked for them in $LIBPATH"
+       echo "If they are somewhere else, please add --libpath=PATH to the command line."
+       exit 1
+fi
+
+echo "Compiling builder-stage1.  This may take several minutes."
+objects=""
+for i in $sources; do
+       obj=`mktemp temp/bootstrap/XXXXXX`
+       mv $obj $obj.o
+       obj=$obj.o
+       dir=${i%/*}
+       dir=${dir%/unix}
+       flags="$CFLAGS"
+       if [ -d "$dir/unix" ]; then
+               flags="$flags -iquote $dir -iquote $dir/unix"
+       fi
+       $COMPILER -c $DEBUG $i -o $obj $flags
+       objects="$objects $obj"
+done
+$COMPILER $objects -o builder-stage1 $LIBS
+
+if [ "$KEEP_TEMP" != "yes" ]; then
+       echo "Cleaning up"
+       rm -r temp/bootstrap
+fi
+
+echo "Using builder-stage1 to compile builder."
+ARGS=
+if [ "$PREFIX" ]; then
+       ARGS="$ARGS --prefix='$PREFIX'"
+fi
+if [ "$CUSTOM_COMPILER" = "yes" ]; then
+       ARGS="$ARGS CXX=$COMPILER"
+fi
+eval "./builder-stage1 $ARGS"