]> git.tdb.fi Git - builder.git/blob - bootstrap.sh
Force shared linking on Android
[builder.git] / bootstrap.sh
1 #!/bin/sh
2 # $Id$
3
4 set -e
5
6 INCLUDEDIR=temp/bootstrap/include
7 REQUIRED="core datafile"
8 CFLAGS="-I$INCLUDEDIR `pkg-config --cflags sigc++-2.0`"
9 LIBS="`pkg-config --libs sigc++-2.0` -lpthread"
10 MACHINE="`uname -m`"
11 SYSTEM="`uname -s`"
12 if [ "$MACHINE" = "x86_64" ]; then
13         MULTIARCH="x86_64-linux-gnu"
14 else
15         MULTIARCH="i386-linux-gnu"
16 fi
17 if [ "$SYSTEM" = "Darwin" -o "$SYSTEM" = "FreeBSD" ]; then
18         if which clang++ >/dev/null; then
19                 COMPILER="clang++"
20         else
21                 COMPILER="g++"
22         fi
23 else
24         COMPILER="g++"
25 fi
26 if [ -e /usr/lib/libdl.so -o -e /usr/lib/$MULTIARCH/libdl.so ]; then
27         LIBS="$LIBS -ldl"
28 fi
29
30 while [ "$1" ]; do
31         case $1 in
32         --libpath)
33                 shift
34                 LIBPATH="$1"
35                 ;;
36         --libpath=*)
37                 LIBPATH="${1#--libpath=}"
38                 ;;
39         --prefix)
40                 shift
41                 PREFIX="$1"
42                 ;;
43         --prefix=*)
44                 PREFIX="${1#--prefix=}"
45                 ;;
46         --keep-temp)
47                 KEEP_TEMP=yes
48                 ;;
49         --compiler)
50                 shift
51                 COMPILER="$1"
52                 CUSTOM_COMPILER=yes
53                 ;;
54         --compiler=*)
55                 COMPILER="${1#--compiler=}"
56                 CUSTOM_COMPILER=yes
57                 ;;
58         --debug)
59                 DEBUG=-g
60                 ;;
61         *)
62                 echo "Unknown option $1"
63                 exit 1
64                 ;;
65         esac
66         shift
67 done
68
69 if [ -z "$LIBPATH" -o "${LIBPATH%%/*}" ]; then
70         LIBPATH=`pwd`/${LIBPATH:-..}
71 fi
72
73 rm -rf "$INCLUDEDIR"
74 mkdir -p "$INCLUDEDIR/msp"
75
76 sources=source/*.cpp
77
78 missing=""
79 for i in $REQUIRED; do
80         path=`ls -1d $LIBPATH/*$i* 2>/dev/null | head -n1`
81         if [ -z "$path"  -o ! -d "$path/source" ]; then
82                 missing="$missing msp$i"
83         else
84                 headers=`find $path/source \( -name windows -prune \) -o \( -name '*.h' -print \)`
85                 for j in $headers; do
86                         rel=${j#$path/source/}
87                         comp=${rel%%/*}
88                         if [ "$comp" = "$rel" ]; then
89                                 comp=$i
90                         fi
91                         mkdir -p "$INCLUDEDIR/msp/$comp"
92                         ln -sf $j "$INCLUDEDIR/msp/$comp/"
93                 done
94                 sources="$sources `find $path/source \( -name windows -prune \) -o \( -name '*.cpp' -print \)`"
95         fi
96 done
97
98 if [ ! -z "$missing" ]; then
99         echo "The following libraries were not found:$missing"
100         echo "I looked for them in $LIBPATH"
101         echo "If they are somewhere else, please add --libpath=PATH to the command line."
102         exit 1
103 fi
104
105 echo "Compiling builder-stage1.  This may take several minutes."
106 objects=""
107 for i in $sources; do
108         obj=`mktemp temp/bootstrap/XXXXXX`
109         mv $obj $obj.o
110         obj=$obj.o
111         dir=${i%/*}
112         dir=${dir%/unix}
113         flags="$CFLAGS"
114         if [ -d "$dir/unix" ]; then
115                 flags="$flags -iquote $dir -iquote $dir/unix"
116         fi
117         $COMPILER -c $DEBUG $i -o $obj $flags
118         objects="$objects $obj"
119 done
120 $COMPILER $objects -o builder-stage1 $LIBS
121
122 if [ "$KEEP_TEMP" != "yes" ]; then
123         echo "Cleaning up"
124         rm -r temp/bootstrap
125 fi
126
127 echo "Using builder-stage1 to compile builder."
128 ARGS=
129 if [ "$PREFIX" ]; then
130         ARGS="$ARGS --prefix='$PREFIX'"
131 fi
132 if [ "$CUSTOM_COMPILER" = "yes" ]; then
133         ARGS="$ARGS CXX=$COMPILER"
134 fi
135 eval "./builder-stage1 $ARGS"