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