]> git.xonotic.org Git - xonotic/xonotic.git/blob - misc/tools/all/xonotic.subr
better way to find number of CPUs
[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/"
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/"
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/fteqcc"
206                 if $cleanqcc; then
207                         verbose make $MAKEFLAGS clean
208                 fi
209                 verbose make $MAKEFLAGS
210
211                 verbose cd "$d0/data/xonotic-data.pk3dir"
212                 if $cleanqc; then
213                         verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
214                 fi
215                 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
216                 # 4 levels up: data, xonotic-data, qcsrc, server
217
218                 verbose cd "$d0/darkplaces"
219                 if [ x"$BAD_TARGETS" = x" " ]; then
220                         $ECHO "Warning: invalid empty client, default clients will be used."
221                 fi
222                 if $cleandp; then
223                         verbose make $MAKEFLAGS clean
224                 fi
225                 for T in $TARGETS; do
226                         verbose make $MAKEFLAGS STRIP=: "$@" "$T"
227                 done
228                 for T in $BAD_TARGETS; do
229                         $ECHO "Warning: discarded invalid client $T."
230                 done
231
232                 verbose "$SELF" update-maps
233                 ;;
234         run)
235                 if [ -n "$WE_HATE_OUR_USERS" ]; then
236                         client=
237                         export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
238                 elif [ x"`uname`" = x"Darwin" ]; then
239                         export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS:$d0/d0_blind_id/.libs"
240                         export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks"
241                         client=-sdl
242                 else
243                         export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
244                         client=-sdl
245                 fi
246                 case "$1" in
247                         sdl|glx|agl|dedicated)
248                                 client=-$1
249                                 shift
250                                 ;;
251                         wgl)
252                                 client=
253                                 shift
254                                 ;;
255                 esac
256                 if ! [ -x "darkplaces/darkplaces$client" ]; then
257                         if [ -x "darkplaces/darkplaces$client.exe" ]; then
258                                 client=$client.exe
259                         else
260                                 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
261                                 exit 1
262                         fi
263                 fi
264                 set -- "darkplaces/darkplaces$client" -xonotic "$@"
265
266                 # if pulseaudio is running: USE IT
267                 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
268                         if ps -C pulseaudio >/dev/null; then
269                                 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
270                                         export SDL_AUDIODRIVER=pulse
271                                 fi
272                         fi
273                 fi
274
275                 binary=$1
276
277                 if [ x"$USE_GDB" = x"yes" ]; then
278                         set -- gdb --args "$@"
279                 elif [ x"$USE_GDB" = x"core" ] && which gdb >/dev/null 2>&1; then
280                         set -- gdb --batch -x savecore.gdb --args "$@"
281                 elif which catchsegv >/dev/null 2>&1; then
282                         set -- catchsegv "$@"
283                 fi
284                 rm -f xonotic.core
285                 "$@" || true
286                 if [ -f xonotic.core ]; then
287                         if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
288                                 gdb "$binary" xonotic.core
289                         #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
290                         #       tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
291                         #       # somehow send it
292                         #       rm -f xonotic.core.tar.gz
293                         else
294                                 $ECHO "The core dump can be examined later by"
295                                 $ECHO "  gdb $binary xonotic.core"
296                         fi
297                         exit 1
298                 fi
299                 ;;
300         help)
301                 $ECHO "  $SELF compile [-c] [-r|-p] [-0] [sdl|glx|wgl|agl|dedicated]"
302                 $ECHO "  $SELF update-maps"
303                 $ECHO "  $SELF run [sdl|glx|wgl|agl|dedicated] options..."
304                 handled=false
305                 ;;
306         *)
307                 handled=false
308                 ;;
309 esac