]> git.tdb.fi Git - builder.git/blob - bootstrap.sh
Update the bootstrap to work with recent changes
[builder.git] / bootstrap.sh
1 #!/bin/sh
2
3 set -e
4
5 SOURCEDIRS="source/lib source/bootstrap plugins/base plugins/gnu"
6 INCLUDEDIR=temp/bootstrap/include
7 REQUIRED="core datafile"
8 CFLAGS="-std=c++11 -iquote . -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=`find $SOURCEDIRS -name '*.cpp'`
77
78 mkdir -p "$INCLUDEDIR/msp/builder"
79 ln -sf "$PWD/source/lib"/*.h "$INCLUDEDIR/msp/builder/"
80
81 use_overlays="unix generic"
82 missing=""
83 for i in $REQUIRED; do
84         path=`ls -1d $LIBPATH/*$i* 2>/dev/null | head -n1`
85         if [ -z "$path"  -o ! -d "$path/source" ]; then
86                 missing="$missing msp$i"
87         else
88                 if [ "`echo $path/source/*.cpp`" = "$path/source/*.cpp" ]; then
89                         subdirs=`find "$path/source" -mindepth 1 -maxdepth 1 -type d`
90                 else
91                         subdirs="$path/source"
92                 fi
93
94                 check_overlay=""
95                 for j in $use_overlays; do
96                         [ -z "$check_overlay" ] || check_overlay="$check_overlay -o "
97                         check_overlay="${check_overlay}-name $j"
98                 done
99                 findargs="$subdirs"
100                 if [ "$check_overlay" ]; then
101                         findargs="$findargs -mindepth 1 ( -type d ! ( $check_overlay ) -prune -false ) -o "
102                 fi
103
104                 headers=`find $findargs -name '*.h'`
105                 for j in $headers; do
106                         rel=${j#$path/source/}
107                         comp=${rel%%/*}
108                         if [ "$comp" = "$rel" ]; then
109                                 comp=$i
110                         fi
111                         mkdir -p "$INCLUDEDIR/msp/$comp"
112                         ln -sf $j "$INCLUDEDIR/msp/$comp/"
113                 done
114                 sources="$sources `find $findargs -name '*.cpp'`"
115         fi
116 done
117
118 if [ ! -z "$missing" ]; then
119         echo "The following libraries were not found:$missing"
120         echo "I looked for them in $LIBPATH"
121         echo "If they are somewhere else, please add --libpath=PATH to the command line."
122         exit 1
123 fi
124
125 echo "Compiling builder-stage1.  This may take several minutes."
126 objects=""
127 for i in $sources; do
128         obj=`mktemp temp/bootstrap/XXXXXX`
129         mv $obj $obj.o
130         obj=$obj.o
131         dir=${i%/*}
132         flags="$CFLAGS"
133         for j in $use_overlays; do
134                 dir=${dir%/$j}
135                 if [ -d "$dir/$j" ]; then
136                         flags="$flags -iquote $dir -iquote $dir/$j"
137                         break
138                 fi
139         done
140         $COMPILER -c $DEBUG $i -o $obj $flags
141         objects="$objects $obj"
142 done
143 $COMPILER $objects -o builder-stage1 $LIBS
144
145 if [ "$KEEP_TEMP" != "yes" ]; then
146         echo "Cleaning up"
147         rm -r temp/bootstrap
148 fi
149
150 echo "Using builder-stage1 to compile builder."
151 ARGS=
152 if [ "$PREFIX" ]; then
153         ARGS="$ARGS --prefix='$PREFIX'"
154 fi
155 if [ "$CUSTOM_COMPILER" = "yes" ]; then
156         ARGS="$ARGS --compiler=$COMPILER"
157 fi
158 eval "./builder-stage1 $ARGS"