]> git.xonotic.org Git - xonotic/xonotic.git/blobdiff - misc/tools/all/xonotic.subr
Merge branch 'cmake-q3map2' into 'master'
[xonotic/xonotic.git] / misc / tools / all / xonotic.subr
index 8cfbd9c477f25c98b01a753710d4b7bcf0185b6e..0938974ca9b46bcfa8fd36442cf7de74267d49b7 100644 (file)
@@ -8,16 +8,17 @@ case "$cmd" in
                        msg "Usage: ./all compile-map mapname1 mapname2 mapname3"
                        msg "For example: ./all compile-map dance xoylent"
                fi
-               if ! [ -f "netradiant/install/q3map2" ] ; then
-                       msg "q3map2 needed! Building netradiant..."
-                       make -C netradiant BUILD=native install/q3map2
+               if ! [ -f "netradiant/build/q3map2" ] ; then
+                       msg "q3map2 needed! Building q3map2..."
+                       cmake -H'netradiant' -B'netradiant/build' -G'Unix Makefiles' -D'CMAKE_BUILD_TYPE=Release' -DBUILD_RADIANT=OFF -DDOWNLOAD_GAMEPACKS=OFF
+                       cmake --build 'netradiant/build' -- q3map2
                fi
                for mapfile in "$@"; do
                        mapfile="data/xonotic-maps.pk3dir/maps/$mapfile.map"
                        if [ ! -f "$mapfile" ] ; then
                                msg "ERROR, $mapfile not found!"
                        else
-                               time misc/tools/xonotic-map-compiler-optionsfile "$mapfile"
+                               verbose measure_time misc/tools/xonotic-map-compiler-optionsfile "$mapfile"
                        fi
                done
                ;;
@@ -26,9 +27,8 @@ case "$cmd" in
                cleandp=false
                cleanqcc=false
                cleanqc=false
-               compiled0=false
-               debug=debug
-               snowleopardhack=false
+               compiled0=
+               debug=release  # when changing this default, change the description in the zsh autocompletion script
                if [ -z "$CC" ]; then
                        export CC="gcc"
                fi
@@ -39,6 +39,10 @@ case "$cmd" in
                                        compiled0=true
                                        shift
                                        ;;
+                               -1)
+                                       compiled0=false
+                                       shift
+                                       ;;
                                -c)
                                        cleand0=true
                                        cleandp=true
@@ -46,8 +50,15 @@ case "$cmd" in
                                        cleanqc=true
                                        shift
                                        ;;
-                               -r|-p)
+                               -qc)
+                                       cleanqc=true
+                                       shift
+                                       ;;
+                               -d|-p|-r)
                                        case "$1" in
+                                               -d)
+                                                       debug=debug
+                                                       ;;
                                                -p)
                                                        debug=profile
                                                        ;;
@@ -75,23 +86,16 @@ case "$cmd" in
                                        ;;
                        esac
                done
-               if [ -n "$WE_HATE_OUR_USERS" ]; then
-                       TARGETS="sv-$debug cl-$debug"
-               elif [ x"`uname`" = x"Darwin" ]; then
-                       case "`uname -r`" in
-                               ?.*)
-                                       TARGETS="sv-$debug cl-$debug sdl-$debug"
-                                       ;;
-                               *)
-                                       # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
-                                       snowleopardhack=true
-                                       TARGETS="sv-$debug sdl-$debug"
-                                       ;;
-                       esac
-                       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"
+
+               if [ x"`uname`" = x"Darwin" ]; then
+                       TARGETS="sv-$debug sdl-$debug"
+                       export CC="$CC -fno-reorder-blocks"
+               elif [ -n "$WE_HATE_OUR_USERS" ]; then
+                       TARGETS="sv-$debug sdl-$debug"
                else
                        TARGETS="sv-$debug cl-$debug sdl-$debug"
                fi
+
                if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
                        # if we give the command make the arg "", it will surely fail (invalid filename),
                        # so better handle it as an empty client option
@@ -106,13 +110,7 @@ case "$cmd" in
                                        sdl)
                                                TARGETS="$TARGETS sdl-$debug"
                                                ;;
-                                       agl)
-                                               TARGETS="$TARGETS cl-$debug"
-                                               if $snowleopardhack; then
-                                                       export CC="$CC -arch i386"
-                                               fi
-                                               ;;
-                                       glx|wgl)
+                                       glx)
                                                TARGETS="$TARGETS cl-$debug"
                                                ;;
                                        dedicated)
@@ -130,6 +128,11 @@ case "$cmd" in
                                BAD_TARGETS=
                        fi
                fi
+
+               if [ -z "$MAKE" ]; then
+                       MAKE=make
+               fi
+
                if [ -z "$MAKEFLAGS" ]; then
                        ncpus=`getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1`
                        if [ $ncpus -gt 1 ]; then
@@ -140,11 +143,27 @@ case "$cmd" in
                        fi
                fi
 
-               # win32: don't rely on jpeg includes
                if [ -n "$WE_HATE_OUR_USERS" ]; then
+                       # win32: use SDL2
+                       case `uname -m` in
+                               x86_64)
+                                       MAKEFLAGS="$MAKEFLAGS SDL_CONFIG=$d0/misc/builddeps/win64/sdl/bin/sdl2-config"
+                                       ;;
+                               *)
+                                       MAKEFLAGS="$MAKEFLAGS SDL_CONFIG=$d0/misc/builddeps/win32/sdl/bin/sdl2-config"
+                                       ;;
+                       esac
+
+                       # win32: don't rely on jpeg includes
                        MAKEFLAGS="$MAKEFLAGS LIB_JPEG= CFLAGS_LIBJPEG="
                fi
 
+               if [ x"`uname`" = x"Darwin" ]; then
+                       # osx: use SDL2
+                       f=$d0/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks
+                       MAKEFLAGS="$MAKEFLAGS SDLCONFIG_MACOSXCFLAGS=-I$f/SDL2.framework/Headers SDLCONFIG_MACOSXLIBS=-F$f SDLCONFIG_MACOSXLIBS+=-framework SDLCONFIG_MACOSXLIBS+=SDL2 SDLCONFIG_MACOSXLIBS+=-framework SDLCONFIG_MACOSXLIBS+=Cocoa SDLCONFIG_MACOSXLIBS+=-I$f/SDL2.framework/Headers SDLCONFIG_MACOSXSTATICLIBS=-F$f SDLCONFIG_MACOSXSTATICLIBS+=-framework SDLCONFIG_MACOSXSTATICLIBS+=SDL2 SDLCONFIG_MACOSXSTATICLIBS+=-framework SDLCONFIG_MACOSXSTATICLIBS+=Cocoa SDLCONFIG_MACOSXSTATICLIBS+=-I$f/SDL2.framework/Headers"
+               fi
+
                # workaround ARM issue in DP's makefile.inc
                case `uname -m` in
                        x86_64|*86)
@@ -153,7 +172,7 @@ case "$cmd" in
                                MAKEFLAGS="$MAKEFLAGS CFLAGS_SSE= CFLAGS_SSE2="
                                ;;
                esac
-               
+
                if ! verbose $CC misc/tools/conftest.c -o conftest; then
                        msg ""
                        msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
@@ -181,28 +200,32 @@ case "$cmd" in
                rm -f conftest
 
                verbose cd "$d0/d0_blind_id"
-               if ! $compiled0; then
+               if [ -z "$compiled0" ]; then
+                       # In doubt, compile.
+                       compiled0=true
+
                        # compilation of crypto library failed
                        # use binaries then, if we can...
                        mkdir -p .libs
                        if [ -n "$WE_HATE_OUR_USERS" ]; then
-                               verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
-                               verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
-                               verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
+                               case `uname -m` in
+                                       x86_64)
+                                               verbose cp "$d0/misc/buildfiles/win64/libd0_blind_id"-* .libs/
+                                               verbose cp "$d0/misc/buildfiles/win64/libd0_rijndael"-* .libs/
+                                               verbose cp "$d0/misc/buildfiles/win64/libgmp"-* .libs/
+                                               compiled0=false
+                                               ;;
+                                       *)
+                                               verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
+                                               verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
+                                               verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
+                                               compiled0=false
+                                               ;;
+                               esac
                        else
                                case "`uname`" in
                                        Linux)
                                                case `uname -m` in
-                                                       x86_64)
-                                                               # No cp commands, we want to use static linking instead.
-                                                               export CC="$CC -I../../../../misc/builddeps/linux64/d0_blind_id/include"
-                                                               export CC="$CC -L../../../../misc/builddeps/linux64/d0_blind_id/lib"
-                                                               export CC="$CC -Wl,-rpath,../../../../misc/builddeps/linux64/d0_blind_id/lib"
-                                                               export CC="$CC -I../../../../misc/builddeps/linux64/gmp/include"
-                                                               export CC="$CC -L../../../../misc/builddeps/linux64/gmp/lib"
-                                                               export CC="$CC -Wl,-rpath,../../../../misc/builddeps/linux64/gmp/lib"
-                                                               MAKEFLAGS="$MAKEFLAGS DP_LINK_CRYPTO=shared DP_LINK_CRYPTO_RIJNDAEL=shared LIB_CRYPTO=../../../../misc/builddeps/linux64/d0_blind_id/lib/libd0_blind_id.a LIB_CRYPTO+=../../../../misc/builddeps/linux64/gmp/lib/libgmp.a LIB_CRYPTO_RIJNDAEL=../../../../misc/builddeps/linux64/d0_blind_id/lib/libd0_rijndael.a"
-                                                               ;;
                                                        *86)
                                                                # No cp commands, we want to use static linking instead.
                                                                export CC="$CC -I../../../../misc/builddeps/linux32/d0_blind_id/include"
@@ -212,18 +235,20 @@ case "$cmd" in
                                                                export CC="$CC -L../../../../misc/builddeps/linux32/gmp/lib"
                                                                export CC="$CC -Wl,-rpath,../../../../misc/builddeps/linux32/gmp/lib"
                                                                MAKEFLAGS="$MAKEFLAGS DP_LINK_CRYPTO=shared DP_LINK_CRYPTO_RIJNDAEL=shared LIB_CRYPTO=../../../../misc/builddeps/linux32/d0_blind_id/lib/libd0_blind_id.a LIB_CRYPTO+=../../../../misc/builddeps/linux32/gmp/lib/libgmp.a LIB_CRYPTO_RIJNDAEL=../../../../misc/builddeps/linux32/d0_blind_id/lib/libd0_rijndael.a"
+                                                               compiled0=false
                                                                ;;
                                                        *)
-                                                               compiled0=true
+                                                               msg "Always need to compile libd0_blind_id on Linux `uname -m`."
                                                                ;;
                                                esac
                                                ;;
                                        Darwin)
                                                verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
                                                verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
+                                               compiled0=false
                                                ;;
                                        *)
-                                               compiled0=true
+                                               msg "Always need to compile libd0_blind_id on `uname`."
                                                ;;
                                esac
                        fi
@@ -231,31 +256,36 @@ case "$cmd" in
                if $compiled0; then
                        if $cleand0; then
                                if [ -f Makefile ]; then
-                                       verbose make $MAKEFLAGS distclean
+                                       verbose $MAKE $MAKEFLAGS distclean
                                fi
                        fi
                        if ! [ -f Makefile ]; then
                                verbose sh autogen.sh
                                verbose ./configure
                        fi
-                       verbose make $MAKEFLAGS
+                       verbose $MAKE $MAKEFLAGS
                fi
 
                verbose cd "$d0/gmqcc"
                if $cleanqcc; then
-                       verbose make $MAKEFLAGS clean
+                       verbose $MAKE $MAKEFLAGS clean
                fi
                if [ -n "$WE_HATE_OUR_USERS" ]; then
-                       verbose make $MAKEFLAGS gmqcc.exe
+                       verbose $MAKE $MAKEFLAGS gmqcc.exe
                else
-                       verbose make $MAKEFLAGS gmqcc
+                       verbose $MAKE $MAKEFLAGS gmqcc
                fi
 
+               if [ -n "$MSYSTEM" ]; then
+                       DATAMAKE=mingw32-make
+               else
+                       DATAMAKE=$MAKE
+               fi
                verbose cd "$d0/data/xonotic-data.pk3dir"
                if $cleanqc; then
-                       verbose make QCC="../../../../gmqcc/gmqcc" "$@" $MAKEFLAGS clean
+                       verbose ${DATAMAKE} QCC="../../../../gmqcc/gmqcc" "$@" $MAKEFLAGS clean
                fi
-               verbose make QCC="../../../../gmqcc/gmqcc" "$@" $MAKEFLAGS
+               verbose ${DATAMAKE} QCC="../../../../gmqcc/gmqcc" "$@" $MAKEFLAGS
                # 4 levels up: data, xonotic-data, qcsrc, server
 
                verbose cd "$d0/darkplaces"
@@ -263,10 +293,10 @@ case "$cmd" in
                        $ECHO "Warning: invalid empty client, default clients will be used."
                fi
                if $cleandp; then
-                       verbose make $MAKEFLAGS clean
+                       verbose $MAKE $MAKEFLAGS clean
                fi
                for T in $TARGETS; do
-                       verbose make $MAKEFLAGS STRIP=: "$@" "$T"
+                       verbose $MAKE $MAKEFLAGS STRIP=: "$@" "$T"
                done
                for T in $BAD_TARGETS; do
                        $ECHO "Warning: discarded invalid client $T."
@@ -276,32 +306,38 @@ case "$cmd" in
                ;;
        run)
                if [ -n "$WE_HATE_OUR_USERS" ]; then
-                       client=
-                       export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
+                       case `uname -m` in
+                               x86_64)
+                                       export PATH="$d0/misc/buildfiles/win64:$d0/d0_blind_id/.libs:$PATH"
+                                       ;;
+                               *)
+                                       export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
+                                       ;;
+                       esac
                elif [ x"`uname`" = x"Darwin" ]; then
                        export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS:$d0/d0_blind_id/.libs"
                        export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks"
-                       client=-sdl
                else
-                       export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
-                       client=-sdl
+                       export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
                fi
+
+               client=-sdl
+               USE_RLWRAP=no
                case "$1" in
                        dedicated)
                                client=-$1
+                               USE_RLWRAP=
                                shift
                                ;;
-                       sdl|glx|agl)
-                               USE_RLWRAP=no
-                               client=-$1
+                       sdl)
                                shift
                                ;;
-                       wgl)
-                               USE_RLWRAP=no
-                               client=
+                       glx)
+                               client=-$1
                                shift
                                ;;
                esac
+
                if ! [ -x "darkplaces/darkplaces$client" ]; then
                        if [ -x "darkplaces/darkplaces$client.exe" ]; then
                                client=$client.exe
@@ -336,7 +372,7 @@ case "$cmd" in
                        set -- rlwrap -A -g '^quit' -q "\"" -s 10000 -S ']' -w 100 "$@"
                fi
                rm -f xonotic.core
-               time "$@" || true
+               verbose measure_time "$@" || true
                if [ -f xonotic.core ]; then
                        if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
                                gdb "$binary" xonotic.core
@@ -352,12 +388,21 @@ case "$cmd" in
                fi
                ;;
        help)
-               $ECHO "  $SELF compile [-c] [-r|-p] [-0] [sdl|glx|wgl|agl|dedicated]"
+               $ECHO "  $SELF compile [-c] [-qc] [-d|-p|-r] [-0] [-1] [sdl|glx|dedicated]"
                $ECHO "  $SELF update-maps"
-               $ECHO "  $SELF run [sdl|glx|wgl|agl|dedicated] options..."
+               $ECHO "  $SELF run [sdl|glx|dedicated] options..."
                $ECHO "  $SELF compile-map mapname1 mapname2... (e.g. \"./all compile-map dance drain fuse\")"
                handled=false
                ;;
+       serverbench)
+               # TODO(rpolzer): Why does :anticheat: output differ? Total game time differs? Why?
+               verbose "$SELF" run "$@" -noconfig -nohome +exec serverbench.cfg |\
+                       tee /dev/stderr |\
+                       grep '^:' |\
+                       grep -v '^:gamestart:' |\
+                       grep -v '^:anticheat:' |\
+                       md5sum
+               ;;
        *)
                handled=false
                ;;