disable fteqcc compilation
[xonotic/xonotic.git] / misc / tools / all / xonotic.subr
1 handled=true
2 case "$cmd" in
3         update-maps)
4                 misc/tools/xonotic-map-compiler-autobuild download
5                 ;;
6         compile)
7                 cleand0=false
8                 cleandp=false
9                 cleanqcc=false
10                 cleanqc=false
11                 compiled0=false
12                 debug=debug
13                 snowleopardhack=false
14                 if [ -z "$CC" ]; then
15                         export CC="gcc"
16                 fi
17                 export CC="$CC -DSUPPORTIPV6"
18                 while :; do
19                         case "$1" in
20                                 -0)
21                                         compiled0=true
22                                         shift
23                                         ;;
24                                 -c)
25                                         cleand0=true
26                                         cleandp=true
27                                         cleanqcc=true
28                                         cleanqc=true
29                                         shift
30                                         ;;
31                                 -r|-p)
32                                         case "$1" in
33                                                 -p)
34                                                         debug=profile
35                                                         ;;
36                                                 -r)
37                                                         debug=release
38                                                         ;;
39                                         esac
40                                         export CC="$CC -g"
41                                         case "`$CC -dumpversion`" in
42                                                 [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*)
43                                                         # gcc 4.3 or higher
44                                                         # -march=native is broken < 4.3
45                                                         if $CC -mtune=native -march=native misc/tools/conftest.c -o conftest >/dev/null 2>&1; then
46                                                                 export CC="$CC -mtune=native -march=native"
47                                                         fi
48                                                         ;;
49                                         esac
50                                         if [ -n "$WE_HATE_OUR_USERS" ]; then
51                                                 export CC="$CC -fno-common"
52                                         fi
53                                         shift
54                                         ;;
55                                 *)
56                                         break
57                                         ;;
58                         esac
59                 done
60                 if [ -n "$WE_HATE_OUR_USERS" ]; then
61                         TARGETS="sv-$debug cl-$debug"
62                 elif [ x"`uname`" = x"Darwin" ]; then
63                         case "`uname -r`" in
64                                 ?.*)
65                                         TARGETS="sv-$debug cl-$debug sdl-$debug"
66                                         ;;
67                                 *)
68                                         # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
69                                         snowleopardhack=true
70                                         TARGETS="sv-$debug sdl-$debug"
71                                         ;;
72                         esac
73                         export CC="$CC -fno-reorder-blocks -I$PWD/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL.framework/Headers -F$PWD/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks"
74                 else
75                         TARGETS="sv-$debug cl-$debug sdl-$debug"
76                 fi
77                 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
78                         # if we give the command make the arg "", it will surely fail (invalid filename),
79                         # so better handle it as an empty client option
80                         BAD_TARGETS=" "
81                         shift
82                 elif [ -n "$1" ]; then
83                         BAD_TARGETS=
84                         TARGETS_SAVE=$TARGETS
85                         TARGETS=
86                         for X in $1; do
87                                 case "$X" in
88                                         sdl)
89                                                 TARGETS="$TARGETS sdl-$debug"
90                                                 ;;
91                                         agl)
92                                                 TARGETS="$TARGETS cl-$debug"
93                                                 if $snowleopardhack; then
94                                                         export CC="$CC -arch i386"
95                                                 fi
96                                                 ;;
97                                         glx|wgl)
98                                                 TARGETS="$TARGETS cl-$debug"
99                                                 ;;
100                                         dedicated)
101                                                 TARGETS="$TARGETS sv-$debug"
102                                                 ;;
103                                         *)
104                                                 BAD_TARGETS="$BAD_TARGETS $X"
105                                                 ;;
106                                 esac
107                         done
108                         if [ -n "$TARGETS" ]; then # at least a valid client
109                                 shift
110                         else # no valid client, let's assume this option is not meant to be a client then
111                                 TARGETS=$TARGETS_SAVE
112                                 BAD_TARGETS=
113                         fi
114                 fi
115                 if [ -z "$MAKEFLAGS" ]; then
116                         ncpus=`getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1`
117                         if [ $ncpus -gt 1 ]; then
118                                 MAKEFLAGS=-j$ncpus
119                         fi
120                         if [ -n "$WE_HATE_OUR_USERS" ]; then
121                                 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
122                         fi
123                 fi
124
125                 
126                 if ! verbose $CC misc/tools/conftest.c -o conftest; then
127                         msg ""
128                         msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
129                         msg "~~~~~~~~~~ COMPILER ~~~~~~~~~~"
130                         msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
131                         msg "~~~~~~~~~~~~~~_...._~~~~~~~~~~"
132                         msg "~~~~~~~~~~~,-'     \\\`-._~~~~~~"
133                         msg "~~~~~~~~~~/     --. ><  \\~~~~~"
134                         msg "~~~~~~~~~/      (*)> -<: \\~~~~"
135                         msg "~~~~~~~~~(     ^~-'  (*) )~~~~"
136                         msg "~~~~~~~~~\\        ^+-_/  |~~~~"
137                         msg "~~~~~~~~~~\\       {vvv}  |~~~~"
138                         msg "~~~~~~~~~~,\\    , {^^^},/~~~~~"
139                         msg "~~~~~~~~,/  \`---.....-'~~W~~~~"
140                         msg "~~~~~~,/   \\_____/_\\_W~~/~~~~~"
141                         msg "~~~~~/          /~~~\\__/~~~~~~"
142                         msg "~~~~/          /~~~~~~~~~~~~~~"
143                         msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
144                         msg "~~~~~~~ Y U NO COMPILE ~~~~~~~"
145                         msg "~~~~~~~~~~~~ CODE ~~~~~~~~~~~~"
146                         msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
147                         msg ""
148                         exit 1
149                 fi
150                 rm -f conftest
151
152                 verbose cd "$d0/d0_blind_id"
153                 if ! $compiled0; then
154                         # compilation of crypto library failed
155                         # use binaries then, if we can...
156                         mkdir -p .libs
157                         if [ -n "$WE_HATE_OUR_USERS" ]; then
158                                 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
159                                 verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
160                                 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
161                         else
162                                 case "`uname`" in
163                                         Linux)
164                                                 case `uname -m` in
165                                                         x86_64)
166                                                                 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
167                                                                 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/
168                                                                 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
169                                                                 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_GMP_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
170                                                                 ;;
171                                                         *86)
172                                                                 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
173                                                                 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/
174                                                                 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
175                                                                 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_GMP_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
176                                                                 ;;
177                                                         *)
178                                                                 compiled0=true
179                                                                 ;;
180                                                 esac
181                                                 ;;
182                                         Darwin)
183                                                 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
184                                                 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
185                                                 ;;
186                                         *)
187                                                 compiled0=true
188                                                 ;;
189                                 esac
190                         fi
191                 fi
192                 if $compiled0; then
193                         if $cleand0; then
194                                 if [ -f Makefile ]; then
195                                         verbose make $MAKEFLAGS distclean
196                                 fi
197                         fi
198                         if ! [ -f Makefile ]; then
199                                 verbose sh autogen.sh
200                                 verbose ./configure
201                         fi
202                         verbose make $MAKEFLAGS
203                 fi
204
205                 verbose cd "$d0/gmqcc"
206                 if $cleanqcc; then
207                         verbose make $MAKEFLAGS clean
208                 fi
209                 if [ -n "$WE_HATE_OUR_USERS" ]; then
210                         verbose make $MAKEFLAGS gmqcc.exe
211                 else
212                         verbose make $MAKEFLAGS gmqcc
213                 fi
214
215                 verbose cd "$d0/data/xonotic-data.pk3dir"
216                 if $cleanqc; then
217                         verbose make QCC="../../../../gmqcc/qmqcc" "$@" $MAKEFLAGS clean
218                 fi
219                 verbose make QCC="../../../../gmqcc/gmqcc" "$@" $MAKEFLAGS
220                 # 4 levels up: data, xonotic-data, qcsrc, server
221
222                 verbose cd "$d0/darkplaces"
223                 if [ x"$BAD_TARGETS" = x" " ]; then
224                         $ECHO "Warning: invalid empty client, default clients will be used."
225                 fi
226                 if $cleandp; then
227                         verbose make $MAKEFLAGS clean
228                 fi
229                 for T in $TARGETS; do
230                         verbose make $MAKEFLAGS STRIP=: "$@" "$T"
231                 done
232                 for T in $BAD_TARGETS; do
233                         $ECHO "Warning: discarded invalid client $T."
234                 done
235
236                 verbose "$SELF" update-maps
237                 ;;
238         run)
239                 if [ -n "$WE_HATE_OUR_USERS" ]; then
240                         client=
241                         export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
242                 elif [ x"`uname`" = x"Darwin" ]; then
243                         export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS:$d0/d0_blind_id/.libs"
244                         export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks"
245                         client=-sdl
246                 else
247                         export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
248                         client=-sdl
249                 fi
250                 case "$1" in
251                         dedicated)
252                                 client=-$1
253                                 shift
254                                 ;;
255                         sdl|glx|agl)
256                                 USE_RLWRAP=no
257                                 client=-$1
258                                 shift
259                                 ;;
260                         wgl)
261                                 USE_RLWRAP=no
262                                 client=
263                                 shift
264                                 ;;
265                 esac
266                 if ! [ -x "darkplaces/darkplaces$client" ]; then
267                         if [ -x "darkplaces/darkplaces$client.exe" ]; then
268                                 client=$client.exe
269                         else
270                                 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
271                                 exit 1
272                         fi
273                 fi
274                 set -- "darkplaces/darkplaces$client" -xonotic "$@"
275
276                 # if pulseaudio is running: USE IT
277                 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
278                         if ps -C pulseaudio >/dev/null; then
279                                 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
280                                         export SDL_AUDIODRIVER=pulse
281                                 fi
282                         fi
283                 fi
284
285                 binary=$1
286
287                 if [ x"$USE_GDB" = x"yes" ]; then
288                         set -- gdb --args "$@"
289                         USE_RLWRAP=no
290                 elif [ x"$USE_GDB" = x"core" ]; then
291                         set -- gdb --batch -x savecore.gdb --args "$@"
292                         USE_RLWRAP=no
293                 elif which catchsegv >/dev/null 2>&1; then
294                         set -- catchsegv "$@"
295                 fi
296                 if [ x"$USE_RLWRAP" != x"no" ] && which rlwrap >/dev/null 2>&1; then
297                         set -- rlwrap -A -g '^quit' -q "\"" -r -S ']' -w 100 "$@"
298                 fi
299                 rm -f xonotic.core
300                 "$@" || true
301                 if [ -f xonotic.core ]; then
302                         if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
303                                 gdb "$binary" xonotic.core
304                         #elif yesno "You did not want to examine the core dump. Do you want to provide it - including your DarkPlaces checkout - to the Xonotic developers?"; then
305                         #       tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
306                         #       # somehow send it
307                         #       rm -f xonotic.core.tar.gz
308                         else
309                                 $ECHO "The core dump can be examined later by"
310                                 $ECHO "  gdb $binary xonotic.core"
311                         fi
312                         exit 1
313                 fi
314                 ;;
315         help)
316                 $ECHO "  $SELF compile [-c] [-r|-p] [-0] [sdl|glx|wgl|agl|dedicated]"
317                 $ECHO "  $SELF update-maps"
318                 $ECHO "  $SELF run [sdl|glx|wgl|agl|dedicated] options..."
319                 handled=false
320                 ;;
321         *)
322                 handled=false
323                 ;;
324 esac