]> git.xonotic.org Git - xonotic/xonotic.git/blob - misc/tools/all/xonotic.subr
Merge branch 'master' into matthiaskrgr/gitignore
[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                 # workaround ARM issue in DP's makefile.inc
126                 case `uname -m` in
127                         x86_64|*86)
128                                 ;;
129                         *)
130                                 MAKEFLAGS="$MAKEFLAGS CFLAGS_SSE= CFLAGS_SSE2="
131                                 ;;
132                 esac
133                 
134                 if ! verbose $CC misc/tools/conftest.c -o conftest; then
135                         msg ""
136                         msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
137                         msg "~~~~~~~~~~ COMPILER ~~~~~~~~~~"
138                         msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
139                         msg "~~~~~~~~~~~~~~_...._~~~~~~~~~~"
140                         msg "~~~~~~~~~~~,-'     \\\`-._~~~~~~"
141                         msg "~~~~~~~~~~/     --. ><  \\~~~~~"
142                         msg "~~~~~~~~~/      (*)> -<: \\~~~~"
143                         msg "~~~~~~~~~(     ^~-'  (*) )~~~~"
144                         msg "~~~~~~~~~\\        ^+-_/  |~~~~"
145                         msg "~~~~~~~~~~\\       {vvv}  |~~~~"
146                         msg "~~~~~~~~~~,\\    , {^^^},/~~~~~"
147                         msg "~~~~~~~~,/  \`---.....-'~~W~~~~"
148                         msg "~~~~~~,/   \\_____/_\\_W~~/~~~~~"
149                         msg "~~~~~/          /~~~\\__/~~~~~~"
150                         msg "~~~~/          /~~~~~~~~~~~~~~"
151                         msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
152                         msg "~~~~~~~ Y U NO COMPILE ~~~~~~~"
153                         msg "~~~~~~~~~~~~ CODE ~~~~~~~~~~~~"
154                         msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
155                         msg ""
156                         exit 1
157                 fi
158                 rm -f conftest
159
160                 verbose cd "$d0/d0_blind_id"
161                 if ! $compiled0; then
162                         # compilation of crypto library failed
163                         # use binaries then, if we can...
164                         mkdir -p .libs
165                         if [ -n "$WE_HATE_OUR_USERS" ]; then
166                                 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
167                                 verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
168                                 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
169                         else
170                                 case "`uname`" in
171                                         Linux)
172                                                 case `uname -m` in
173                                                         x86_64)
174                                                                 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
175                                                                 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/
176                                                                 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
177                                                                 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/"
178                                                                 ;;
179                                                         *86)
180                                                                 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
181                                                                 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/
182                                                                 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
183                                                                 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/"
184                                                                 ;;
185                                                         *)
186                                                                 compiled0=true
187                                                                 ;;
188                                                 esac
189                                                 ;;
190                                         Darwin)
191                                                 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
192                                                 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
193                                                 ;;
194                                         *)
195                                                 compiled0=true
196                                                 ;;
197                                 esac
198                         fi
199                 fi
200                 if $compiled0; then
201                         if $cleand0; then
202                                 if [ -f Makefile ]; then
203                                         verbose make $MAKEFLAGS distclean
204                                 fi
205                         fi
206                         if ! [ -f Makefile ]; then
207                                 verbose sh autogen.sh
208                                 verbose ./configure
209                         fi
210                         verbose make $MAKEFLAGS
211                 fi
212
213                 verbose cd "$d0/gmqcc"
214                 if $cleanqcc; then
215                         verbose make $MAKEFLAGS clean
216                 fi
217                 if [ -n "$WE_HATE_OUR_USERS" ]; then
218                         verbose make $MAKEFLAGS gmqcc.exe
219                 else
220                         verbose make $MAKEFLAGS gmqcc
221                 fi
222
223                 verbose cd "$d0/data/xonotic-data.pk3dir"
224                 if $cleanqc; then
225                         verbose make QCC="../../../../gmqcc/gmqcc" "$@" $MAKEFLAGS clean
226                 fi
227                 verbose make QCC="../../../../gmqcc/gmqcc" "$@" $MAKEFLAGS
228                 # 4 levels up: data, xonotic-data, qcsrc, server
229
230                 verbose cd "$d0/darkplaces"
231                 if [ x"$BAD_TARGETS" = x" " ]; then
232                         $ECHO "Warning: invalid empty client, default clients will be used."
233                 fi
234                 if $cleandp; then
235                         verbose make $MAKEFLAGS clean
236                 fi
237                 for T in $TARGETS; do
238                         verbose make $MAKEFLAGS STRIP=: "$@" "$T"
239                 done
240                 for T in $BAD_TARGETS; do
241                         $ECHO "Warning: discarded invalid client $T."
242                 done
243
244                 verbose "$SELF" update-maps
245                 ;;
246         run)
247                 if [ -n "$WE_HATE_OUR_USERS" ]; then
248                         client=
249                         export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
250                 elif [ x"`uname`" = x"Darwin" ]; then
251                         export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS:$d0/d0_blind_id/.libs"
252                         export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks"
253                         client=-sdl
254                 else
255                         export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
256                         client=-sdl
257                 fi
258                 case "$1" in
259                         dedicated)
260                                 client=-$1
261                                 shift
262                                 ;;
263                         sdl|glx|agl)
264                                 USE_RLWRAP=no
265                                 client=-$1
266                                 shift
267                                 ;;
268                         wgl)
269                                 USE_RLWRAP=no
270                                 client=
271                                 shift
272                                 ;;
273                 esac
274                 if ! [ -x "darkplaces/darkplaces$client" ]; then
275                         if [ -x "darkplaces/darkplaces$client.exe" ]; then
276                                 client=$client.exe
277                         else
278                                 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
279                                 exit 1
280                         fi
281                 fi
282                 set -- "darkplaces/darkplaces$client" -xonotic "$@"
283
284                 # if pulseaudio is running: USE IT
285                 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
286                         if ps -C pulseaudio >/dev/null; then
287                                 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
288                                         export SDL_AUDIODRIVER=pulse
289                                 fi
290                         fi
291                 fi
292
293                 binary=$1
294
295                 if [ x"$USE_GDB" = x"yes" ]; then
296                         set -- gdb --args "$@"
297                         USE_RLWRAP=no
298                 elif [ x"$USE_GDB" = x"core" ]; then
299                         set -- gdb --batch -x savecore.gdb --args "$@"
300                         USE_RLWRAP=no
301                 elif which catchsegv >/dev/null 2>&1; then
302                         set -- catchsegv "$@"
303                 fi
304                 if [ x"$USE_RLWRAP" != x"no" ] && which rlwrap >/dev/null 2>&1; then
305                         set -- rlwrap -A -g '^quit' -q "\"" -r -S ']' -w 100 "$@"
306                 fi
307                 rm -f xonotic.core
308                 "$@" || true
309                 if [ -f xonotic.core ]; then
310                         if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
311                                 gdb "$binary" xonotic.core
312                         #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
313                         #       tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
314                         #       # somehow send it
315                         #       rm -f xonotic.core.tar.gz
316                         else
317                                 $ECHO "The core dump can be examined later by"
318                                 $ECHO "  gdb $binary xonotic.core"
319                         fi
320                         exit 1
321                 fi
322                 ;;
323         help)
324                 $ECHO "  $SELF compile [-c] [-r|-p] [-0] [sdl|glx|wgl|agl|dedicated]"
325                 $ECHO "  $SELF update-maps"
326                 $ECHO "  $SELF run [sdl|glx|wgl|agl|dedicated] options..."
327                 handled=false
328                 ;;
329         *)
330                 handled=false
331                 ;;
332 esac