diff --git a/build_setup.sh b/build_setup.sh index 131b759ad..e45e43863 100755 --- a/build_setup.sh +++ b/build_setup.sh @@ -1,409 +1,417 @@ -#!/bin/bash -#sets up dependancies for debian-jessie (8.7) -#this script must be run twice. first time as root, which installs system packages -#second time as a regular user (probably not your normal one), which installs 3rd-party stuff - -SVNROOT=$(cd "$(dirname "$BASH_SOURCE")" && pwd) -FTEROOT=$(realpath $SVNROOT/..) -FTEROOT=${FTEROOT:-~} -FTECONFIG=$SVNROOT/build.cfg - -BUILDFOLDER=`echo ~`/htdocs -BUILDLOGFOLDER=$BUILDFOLDER/build_logs - -#mac defaults -OSXCROSSROOT=$FTEROOT/osxcross - -#emscripten defaults -EMSCRIPTENROOT=$FTEROOT/emsdk-portable - -#nacl defaults -NACLROOT=$FTEROOT/nacl_sdk -NACLSDKVERSION=pepper_49 - -#android defaults -ANDROIDROOT=$FTEROOT/android -if [ ! -z "$(uname -o 2>&1 | grep Cygwin)" ]; then - ANDROID_HOSTSYSTEM=windows-x86_64 -else - ANDROID_HOSTSYSTEM=linux-$(uname -m) -fi -ANDROIDBUILDTOOLS=25.0.0 -ANDROID_ZIPALIGN=$ANDROIDROOT/build-tools/$ANDROIDBUILDTOOLS/zipalign #relative to ndk tools - -THREADS="-j 4" - -#windows is always cross compiled, so we don't have issues with non-native ffmpeg -PLUGINS_LINUXx86="ode qi ezhud xmpp irc" -PLUGINS_LINUXx64="ode qi ezhud xmpp irc" -PLUGINS_LINUXx32="qi ezhud xmpp irc" -PLUGINS_LINUXarmhf="qi ezhud xmpp irc" -if [ "$(uname -m)" != "x86_64" ]; then - PLUGINS_LINUXx86="ffmpeg ode qi ezhud xmpp irc" -fi -if [ "$(uname -m)" == "x86_64" ]; then - PLUGINS_LINUX64="ffmpeg ode qi ezhud xmpp irc" -fi -#windows doesn't cross compile, so no system dependancy issues -#skip some dependancies if we're running on cygwin, ode is buggy. -if [ "$(uname -s)" == "Linux" ]; then - PLUGINS_WINDOWS="ffmpeg ode qi ezhud xmpp irc" -else - PLUGINS_WINDOWS="qi ezhud xmpp irc" -fi - -echo -echo "This is Spike's script to set up various cross compilers and dependancies." -echo "This script will check dependancies. If something isn't installed you can either rerun the script as root (which will ONLY install system packages), or manually apt-get or whatever. You can then re-run the script as a regular user to finish configuring 3rd party dependancies." -echo -echo "You can change your choices later by just re-running this script" -echo "(Your settings will be autosaved in $FTECONFIG)" -echo -echo "If you just want to compile a native build, just use the following command:" -echo "cd $SVNROOT/engine && make gl-rel" -echo "(if you're in cygwin, add FTE_TARGET=win32 to compile for native windows)" -echo "(add plugins-rel qcc-rel qccgui-rel sv-rel vk-rel etc for additional targets)" -echo "(or use -dbg if you want debug builds for whatever reason)" -echo - -#always execute it if it exists, so that we preserve custom paths etc that are not prompted for here -if [ -e $FTECONFIG ]; then - . $FTECONFIG - - if [ $UID -eq 0 ]; then - REUSE_CONFIG=y #root shouldn't be writing/owning the config file. - else - read -n 1 -p "Reuse previous build config? [y/N] " REUSE_CONFIG && echo - REUSE_CONFIG=${REUSE_CONFIG:-n} - fi -else - if [ $UID -eq 0 ]; then - exit #root can't create the output, as that would take ownership. - else - REUSE_CONFIG=n - fi -fi - -if [ "$REUSE_CONFIG" != "y" ]; then - #linux compiles are native-only, so don't bug out on cygwin which lacks a cross compiler. - BUILD_LINUXx86=n - BUILD_LINUXx64=n - BUILD_LINUXx32=n - BUILD_LINUXarmhf=n - if [ "$(uname -s)" == "Linux" ]; then - read -n 1 -p "Build for Linux x86? [Y/n] " BUILD_LINUXx86 && echo - read -n 1 -p "Build for Linux x86_64? [Y/n] " BUILD_LINUXx64 && echo - read -n 1 -p "Build for Linux x32? [y/N] " BUILD_LINUXx32 && echo - #ubuntu's gcc-multilib-arm-foo package conflicts with gcc-multilib... - #the whole point of multilib was to avoid conflicts... someone fucked up. - #read -n 1 -p "Build for Linux armhf [y/N] " BUILD_LINUXarmhf && echo - else - echo "Skipping Linux options." - fi - BUILD_CYGWIN=n - BUILD_MSVC=n - if [ "$(uname -o)" == "Cygwin" ]; then - read -n 1 -p "Build for Cygwin? [y/N] " BUILD_CYGWIN && echo - read -n 1 -p "Build with MSVC? (requires windows7 sdk) [y/N] " BUILD_MSVC && echo - else - echo "Skipping Cygwin options." - fi - read -n 1 -p "Build for Windows? [Y/n] " BUILD_WINDOWS && echo - read -n 1 -p "Build for SDL? [y/N] " BUILD_SDL && echo - read -n 1 -p "Build for Android? [y/N] " BUILD_ANDROID && echo - read -n 1 -p "Build for Emscripten? [y/N] " BUILD_WEB && echo - if [ 0 -ne 0 ]; then - read -n 1 -p "Build for MacOSX? [y/N] " BUILD_MAC && echo - else - echo "Skipping mac option." - fi - read -n 1 -p "Build for NaCL? [y/N] " BUILD_NACL && echo -fi - -BUILD_LINUXx86=${BUILD_LINUXx86:-y} -BUILD_LINUXx64=${BUILD_LINUXx64:-y} -BUILD_LINUXx32=${BUILD_LINUXx32:-n} -BUILD_LINUXarmhf=${BUILD_LINUXarmhf:-n} -BUILD_CYGWIN=${BUILD_CYGWIN:-n} -BUILD_WINDOWS=${BUILD_WINDOWS:-y} -BUILD_MSVC=${BUILD_MSVC:-n} -BUILD_SDL=${BUILD_SDL:-n} -BUILD_ANDROID=${BUILD_ANDROID:-n} -BUILD_WEB=${BUILD_WEB:-n} -BUILD_MAC=${BUILD_MAC:-n} -BUILD_NACL=${BUILD_NACL:-n} - -if [ "$UID" != "0" ]; then - echo "#path config for fte build scripts" >$FTECONFIG - echo "THREADS=\"$THREADS\"" >>$FTECONFIG - echo "BUILDFOLDER=\"$BUILDFOLDER\"" >>$FTECONFIG - echo "BUILDLOGFOLDER=\"$BUILDLOGFOLDER\"" >>$FTECONFIG - echo "SVNROOT=\"$SVNROOT\"" >>$FTECONFIG - echo "ANDROIDROOT=\"$ANDROIDROOT\"" >>$FTECONFIG - echo "export ANDROID_HOSTSYSTEM=\"ANDROID_HOSTSYSTEM\"" >>$FTECONFIG - echo "export ANDROID_ZIPALIGN=\"ANDROID_ZIPALIGN\"" >>$FTECONFIG - echo "EMSCRIPTENROOT=\"$EMSCRIPTENROOT\"" >>$FTECONFIG - echo "OSXCROSSROOT=\"$OSXCROSSROOT\"" >>$FTECONFIG - echo "NACLROOT=\"$NACLROOT\"" >>$FTECONFIG - echo "NACL_SDK_ROOT=\"$NACLROOT/nacl_sdk/$NACLSDKVERSION\"" >>$FTECONFIG - echo "NACLSDKVERSION=\"$NACLSDKVERSION\"" >>$FTECONFIG - - echo "BUILD_LINUXx86=\"$BUILD_LINUXx86\"" >>$FTECONFIG - echo "BUILD_LINUXx64=\"$BUILD_LINUXx64\"" >>$FTECONFIG - echo "BUILD_LINUXx32=\"$BUILD_LINUXx32\"" >>$FTECONFIG - echo "BUILD_LINUXarmhf=\"$BUILD_LINUXarmhf\"" >>$FTECONFIG - echo "BUILD_CYGWIN=\"$BUILD_CYGWIN\"" >>$FTECONFIG - echo "BUILD_WINDOWS=\"$BUILD_WINDOWS\"" >>$FTECONFIG - echo "BUILD_MSVC=\"$BUILD_MSVC\"" >>$FTECONFIG - echo "BUILD_ANDROID=\"$BUILD_ANDROID\"" >>$FTECONFIG - echo "BUILD_SDL=\"$BUILD_SDL\"" >>$FTECONFIG - echo "BUILD_WEB=\"$BUILD_WEB\"" >>$FTECONFIG - echo "BUILD_MAC=\"$BUILD_MAC\"" >>$FTECONFIG - echo "BUILD_NACL=\"$BUILD_NACL\"" >>$FTECONFIG - - echo "PLUGINS_WINDOWS=\"$PLUGINS_WINDOWS\"" >>$FTECONFIG - echo "PLUGINS_LINUXx86=\"$PLUGINS_LINUXx86\"" >>$FTECONFIG - echo "PLUGINS_LINUXx64=\"$PLUGINS_LINUXx64\"" >>$FTECONFIG - echo "PLUGINS_LINUXx32=\"$PLUGINS_LINUXx32\"" >>$FTECONFIG - echo "PLUGINS_LINUXarmhf=\"$PLUGINS_LINUXarmhf\"" >>$FTECONFIG -fi - -true -true=$? -false -false=$? - -if [ "$(uname -s)" == "Linux" ]; then - . /etc/os-release -fi -function debianpackages { - #make sure apt-get is installed - if [ -z `which apt-get 2>>/dev/null` ]; then - return $false - fi - local ret=$true - for i in "$@" - do - dpkg -s $i 2>&1 >> /dev/null - if [ $? -eq 1 ]; then - ret=$false - fi - done - - if [ $ret == $false ]; then - if [ $UID -eq 0 ]; then - apt-get install --no-install-recommends $@ - ret=$true - else - echo "Packages not installed. Run as root to easily install dependancies." - fi - fi - return $ret -} -function jessiepackages { - if [ "$PRETTY_NAME" != "Debian GNU/Linux 8 (jessie)" ]; then - return $false - fi - - debianpackages $@ - return $? -} - -#we don't really know what system we're on. assume they have any system dependancies. -#fixme: args are programs findable with which -function otherpackages { - if [ -z "$PRETTY_NAME" ]; then - return $true - fi - return $false -} - - -#Note: only the native linux-sdl target can be compiled, as libSDL[2]-dev doesn't support multiarch properly, and we depend upon it instead of building from source (thus ensuring it has whatever distro stuff needed... though frankly that should be inside the .so instead of the headers). - -if [ $UID -eq 0 ] && [ ! -z `which apt-get` ]; then - #because multiarch requires separate packages for some things, we'll need to set that up now (in case noone did that yet) - dpkg --add-architecture i386 - apt-get update -fi - -#generic crap. much of this is needed to set up and decompress dependancies and stuff. -debianpackages subversion make automake libtool p7zip-full zip || otherpackages z7 make svn || exit - -if [ "$BUILD_LINUXx86" == "y" ]; then - #for building linux targets - debianpackages gcc-multilib g++-multilib mesa-common-dev libasound2-dev libvorbis-dev || otherpackages gcc || exit - jessiepackages libgnutls28-dev || debianpackages libgnutls28-dev || otherpackages gcc || exit - if [[ "$PLUGINS_LINUXx86" =~ "ffmpeg" ]]; then - debianpackages libswscale-dev libavcodec-dev || otherpackages || exit - fi -fi -if [ "$BUILD_LINUXx64" == "y" ]; then - #for building linux targets - debianpackages gcc-multilib g++-multilib mesa-common-dev libasound2-dev || otherpackages gcc || exit - jessiepackages libgnutls28-dev || debianpackages libgnutls28-dev || otherpackages gcc || exit - if [[ "$PLUGINS_LINUXx64" =~ "ffmpeg" ]]; then - debianpackages libswscale-dev libavcodec-dev || otherpackages || exit - fi -fi -if [ "$BUILD_LINUXx32" == "y" ]; then - #for building linux targets - debianpackages gcc-multilib g++-multilib mesa-common-dev libasound2-dev || otherpackages gcc || exit - jessiepackages libgnutls28-dev || debianpackages libgnutls28-dev || otherpackages gcc || exit -fi -if [ "$BUILD_LINUXarmhf" == "y" ]; then - #for building linux targets - debianpackages gcc-multilib-arm-linux-gnueabihf g++-multilib-arm-linux-gnueabihf mesa-common-dev libasound2-dev || otherpackages gcc || exit - jessiepackages libgnutls28-dev || debianpackages libgnutls28-dev || otherpackages gcc || exit -fi -if [ "$BUILD_SDL" == "y" ]; then - #for building SDL targets - debianpackages libSDL1.2-dev libSDL2-dev libspeex-dev libspeexdsp-dev || otherpackages || exit -fi - -if [ "$BUILD_WINDOWS" == "y" ]; then - #for building windows targets - debianpackages mingw-w64 || otherpackages x86_64-w64-mingw32-gcc || exit -fi - - -if [ "$BUILD_ANDROID" == "y" ]; then - ( (jessiepackages openjdk-8-jdk-headless || debianpackages openjdk-8-jdk-headless ) && debianpackages ant) || otherpackages || exit -fi - -if [ "$BUILD_WEB" == "y" ]; then - ( (jessiepackages cmake || debianpackages cmake) && debianpackages git build-essential) || exit -fi - -if [ "$BUILD_MAC" == "y" ]; then - debianpackages git cmake libxml2-dev fuse || otherpackages || exit -fi -debianpackages subversion make build-essential || otherpackages svn make || exit - -echo "System Package checks complete." - -if [ "$UID" == "0" ]; then - #avoid root taking ownership of anything. - echo "Refusing to update/rebuild toolchains as root." - echo "Please continue running this script as a regular user." - exit -fi - -echo -echo "(Any new toolchains will be installed to $FTEROOT)" -echo "(Say no if you're certain you already set up everything)" -read -n 1 -p "Rebuild/update any toolchains now? [y/N] " REBUILD_TOOLCHAINS && echo -REBUILD_TOOLCHAINS=${REBUILD_TOOLCHAINS:-n} -mkdir -p $FTEROOT - -#android shit. WARNING: should come first as it spits out some EULAs that need confirming. -if [ "$BUILD_ANDROID" == "y" ] && [ $UID -ne 0 ] && [ $REBUILD_TOOLCHAINS == "y" ]; then - mkdir -p $ANDROIDROOT - cd $ANDROIDROOT - wget -N https://dl.google.com/android/repository/tools_r25.2.3-linux.zip - unzip -qn tools_r25.2.3-linux.zip - cd tools/bin - #yes, android-8 is fucking old now. newer versions won't work on older devices. - echo "downloading android build tools" - ./sdkmanager "build-tools;$ANDROID_BUILDTOOLS" - echo "downloading android platform tools" - ./sdkmanager "platform-tools" - echo "downloading android-9" - ./sdkmanager "platforms;android-9" - echo "downloading android ndk" - ./sdkmanager "ndk-bundle" - cd ~ -fi - -#emscripten/web shit -if [ "$BUILD_WEB" == "y" ] && [ $UID -ne 0 ] && [ $REBUILD_TOOLCHAINS == "y" ]; then - mkdir -p $EMSCRIPTENROOT - cd $EMSCRIPTENROOT/.. - wget -N https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz - cd $EMSCRIPTENROOT - tar xzf ../emsdk-portable.tar.gz --strip-components=1 - ./emsdk install latest - ./emsdk activate latest - cd ~ -fi - - -#osxcross, for mac crap -if [ "$BUILD_MAC" == "y" ] && [ $UID -ne 0 ] && [ $REBUILD_TOOLCHAINS == "y" ]; then - echo "Setting up OSXCross... THIS IS TOTALLY UNTESTED" - read -p "You need to download xcode first. Where did you download the .dmg file to?" XCODE - git clone https://github.com/tpoechtrager/osxcross.git $OSXCROSSROOT - cd $OSXCROSSROOT - tools/gen_sdk_package_darling_dmg.sh $XCODE - cp *.tar.xz - SDK_VERSION=10.10 UNATTENDED=0 ./build.sh - cd ~ -fi - -if [ "$BUILD_NACL" == "y" ] && [ $UID -ne 0 ] && [ $REBUILD_TOOLCHAINS == "y" ]; then - echo "Setting up NaCL..." - mkdir -p $NACLROOT - cd $NACLROOT/.. - wget -N https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/nacl_sdk.zip - unzip -qn nacl_sdk.zip - cd $NACLROOT - ./naclsdk update $NACLSDKVERSION -fi - - -#initial checkout of fte's svn -if [ $UID -ne 0 ] && [ $REBUILD_TOOLCHAINS == "y" ]; then - if [ ! -d $SVNROOT ]; then - svn checkout https://svn.code.sf.net/p/fteqw/code/trunk $SVNROOT - else - cd $SVNROOT - svn up - fi - - #FIXME: there may be race conditions when compiling. - #so make sure we've pre-built certain targets without using -j - #linux distros vary too much with various dependancies and versions and such, so we might as well pre-build our own copies of certain libraries. this really only needs to be done once, but its safe to retry anyway. - cd $SVNROOT/engine - if [ "$BUILD_LINUXx86" == "y" ]; then - echo "Making libraries (x86)..." - make FTE_TARGET=linux32 makelibs CPUOPTIMISATIONS=-fno-finite-math-only 2>&1 >>/dev/null - fi - if [ "$BUILD_LINUXx64" == "y" ]; then - echo "Making libraries (linux x86_64)..." - make FTE_TARGET=linux64 makelibs CPUOPTIMISATIONS=-fno-finite-math-only 2>&1 >>/dev/null - fi - if [ "$BUILD_LINUXx32" == "y" ]; then - echo "Making libraries (linux x32)..." - make FTE_TARGET=linuxx32 makelibs CPUOPTIMISATIONS=-fno-finite-math-only 2>&1 >>/dev/null - fi - if [ "$BUILD_LINUXarmhf" == "y" ]; then - echo "Making libraries (linux armhf)..." - make FTE_TARGET=linuxarmhf makelibs CPUOPTIMISATIONS=-fno-finite-math-only 2>&1 >>/dev/null - fi - if [ "$BUILD_WINDOWS" == "y" ] && [[ "$PLUGINS_WINDOWS" =~ "ode" ]]; then - echo "Prebuilding ODE library (win32)..." - make FTE_TARGET=win32 plugins-rel NATIVE_PLUGINS=ode 2>&1 >>/dev/null - echo "Prebuilding ODE library (win64)..." - make FTE_TARGET=win64 plugins-rel NATIVE_PLUGINS=ode 2>&1 >>/dev/null - fi - if [ "$BUILD_LINUXx86" == "y" ] && [[ "$PLUGINS_LINUXx86" =~ "ode" ]]; then - echo "Prebuilding ODE library (linux x86)..." - make FTE_TARGET=linux32 plugins-rel NATIVE_PLUGINS=ode CPUOPTIMISATIONS=-fno-finite-math-only 2>&1 >>/dev/null - fi - if [ "$BUILD_LINUXx64" == "y" ] && [[ "$PLUGINS_LINUXx64" =~ "ode" ]]; then - echo "Prebuilding ODE library (linux x86_64)..." - make FTE_TARGET=linux64 plugins-rel NATIVE_PLUGINS=ode CPUOPTIMISATIONS=-fno-finite-math-only 2>&1 >>/dev/null - fi - if [ "$BUILD_WINDOWS" == "y" ]; then - echo "Obtaining ffmpeg library (win32)..." - make FTE_TARGET=win32 plugins-rel NATIVE_PLUGINS=ffmpeg 2>&1 >>/dev/null - echo "Obtaining ffmpeg library (win64)..." - make FTE_TARGET=win64 plugins-rel NATIVE_PLUGINS=ffmpeg 2>&1 >>/dev/null - fi - cd ~ -fi - - - -echo "Setup script complete." -echo "When you run build_wip.sh output will be written to $BUILDFOLDER/*" +#!/bin/bash +#sets up dependancies for debian-jessie (8.7) +#this script must be run twice. first time as root, which installs system packages +#second time as a regular user (probably not your normal one), which installs 3rd-party stuff + +SVNROOT=$(cd "$(dirname "$BASH_SOURCE")" && pwd) +FTEROOT=$(realpath $SVNROOT/..) +FTEROOT=${FTEROOT:-~} +FTECONFIG=$SVNROOT/build.cfg + +BUILDFOLDER=`echo ~`/htdocs +BUILDLOGFOLDER=$BUILDFOLDER/build_logs + +#mac defaults +OSXCROSSROOT=$FTEROOT/osxcross + +#emscripten defaults +EMSCRIPTENROOT=$FTEROOT/emsdk-portable + +#nacl defaults +NACLROOT=$FTEROOT/nacl_sdk +NACLSDKVERSION=pepper_49 + +#android defaults +ANDROIDROOT=$FTEROOT/android +if [ ! -z "$(uname -o 2>&1 | grep Cygwin)" ]; then + ANDROID_HOSTSYSTEM=windows-x86_64 +else + ANDROID_HOSTSYSTEM=linux-$(uname -m) +fi +ANDROIDBUILDTOOLS=25.0.0 +ANDROID_ZIPALIGN=$ANDROIDROOT/build-tools/$ANDROIDBUILDTOOLS/zipalign #relative to ndk tools + +THREADS="-j 4" + +#windows is always cross compiled, so we don't have issues with non-native ffmpeg +PLUGINS_LINUXx86="ode qi ezhud xmpp irc" +PLUGINS_LINUXx64="ode qi ezhud xmpp irc" +PLUGINS_LINUXx32="qi ezhud xmpp irc" +PLUGINS_LINUXarmhf="qi ezhud xmpp irc" +if [ "$(uname -m)" != "x86_64" ]; then + PLUGINS_LINUXx86="ffmpeg ode qi ezhud xmpp irc" +fi +if [ "$(uname -m)" == "x86_64" ]; then + PLUGINS_LINUX64="ffmpeg ode qi ezhud xmpp irc" +fi +#windows doesn't cross compile, so no system dependancy issues +#skip some dependancies if we're running on cygwin, ode is buggy. +if [ "$(uname -s)" == "Linux" ]; then + PLUGINS_WINDOWS="ffmpeg ode qi ezhud xmpp irc" +else + PLUGINS_WINDOWS="qi ezhud xmpp irc" +fi + +echo +echo "This is Spike's script to set up various cross compilers and dependancies." +echo "This script will check dependancies. If something isn't installed you can either rerun the script as root (which will ONLY install system packages), or manually apt-get or whatever. You can then re-run the script as a regular user to finish configuring 3rd party dependancies." +echo +echo "You can change your choices later by just re-running this script" +echo "(Your settings will be autosaved in $FTECONFIG)" +echo +echo "If you just want to compile a native build, just use the following command:" +echo "cd $SVNROOT/engine && make gl-rel" +echo "(if you're in cygwin, add FTE_TARGET=win32 to compile for native windows)" +echo "(add plugins-rel qcc-rel qccgui-rel sv-rel vk-rel etc for additional targets)" +echo "(or use -dbg if you want debug builds for whatever reason)" +echo + +#always execute it if it exists, so that we preserve custom paths etc that are not prompted for here +if [ -e $FTECONFIG ]; then + . $FTECONFIG + + if [ $UID -eq 0 ]; then + REUSE_CONFIG=y #root shouldn't be writing/owning the config file. + else + read -n 1 -p "Reuse previous build config? [y/N] " REUSE_CONFIG && echo + REUSE_CONFIG=${REUSE_CONFIG:-n} + fi +else + if [ $UID -eq 0 ]; then + exit #root can't create the output, as that would take ownership. + else + REUSE_CONFIG=n + fi +fi + +if [ "$REUSE_CONFIG" != "y" ]; then + #linux compiles are native-only, so don't bug out on cygwin which lacks a cross compiler. + BUILD_LINUXx86=n + BUILD_LINUXx64=n + BUILD_LINUXx32=n + BUILD_LINUXarmhf=n + if [ "$(uname -s)" == "Linux" ]; then + read -n 1 -p "Build for Linux x86? [Y/n] " BUILD_LINUXx86 && echo + read -n 1 -p "Build for Linux x86_64? [Y/n] " BUILD_LINUXx64 && echo + read -n 1 -p "Build for Linux x32? [y/N] " BUILD_LINUXx32 && echo + #ubuntu's gcc-multilib-arm-foo package conflicts with gcc-multilib... + #the whole point of multilib was to avoid conflicts... someone fucked up. + #read -n 1 -p "Build for Linux armhf [y/N] " BUILD_LINUXarmhf && echo + else + echo "Skipping Linux options." + fi + BUILD_CYGWIN=n + BUILD_MSVC=n + if [ "$(uname -o)" == "Cygwin" ]; then + read -n 1 -p "Build for Cygwin? [y/N] " BUILD_CYGWIN && echo + read -n 1 -p "Build with MSVC? (requires windows7 sdk) [y/N] " BUILD_MSVC && echo + else + echo "Skipping Cygwin options." + fi + read -n 1 -p "Build for Windows? [Y/n] " BUILD_WINDOWS && echo + read -n 1 -p "Build for Dos? [y/N] " BUILD_WINDOWS && echo + read -n 1 -p "Build for SDL? [y/N] " BUILD_SDL && echo + read -n 1 -p "Build for Android? [y/N] " BUILD_ANDROID && echo + read -n 1 -p "Build for Emscripten? [y/N] " BUILD_WEB && echo + if [ 0 -ne 0 ]; then + read -n 1 -p "Build for MacOSX? [y/N] " BUILD_MAC && echo + else + echo "Skipping mac option." + fi + read -n 1 -p "Build for NaCL? [y/N] " BUILD_NACL && echo +fi + +BUILD_LINUXx86=${BUILD_LINUXx86:-y} +BUILD_LINUXx64=${BUILD_LINUXx64:-y} +BUILD_LINUXx32=${BUILD_LINUXx32:-n} +BUILD_LINUXarmhf=${BUILD_LINUXarmhf:-n} +BUILD_CYGWIN=${BUILD_CYGWIN:-n} +BUILD_WINDOWS=${BUILD_WINDOWS:-y} +BUILD_DOS=${BUILD_DOS:-n} +BUILD_MSVC=${BUILD_MSVC:-n} +BUILD_SDL=${BUILD_SDL:-n} +BUILD_ANDROID=${BUILD_ANDROID:-n} +BUILD_WEB=${BUILD_WEB:-n} +BUILD_MAC=${BUILD_MAC:-n} +BUILD_NACL=${BUILD_NACL:-n} + +if [ "$UID" != "0" ]; then + echo "#path config for fte build scripts" >$FTECONFIG + echo "THREADS=\"$THREADS\"" >>$FTECONFIG + echo "BUILDFOLDER=\"$BUILDFOLDER\"" >>$FTECONFIG + echo "BUILDLOGFOLDER=\"$BUILDLOGFOLDER\"" >>$FTECONFIG + echo "SVNROOT=\"$SVNROOT\"" >>$FTECONFIG + echo "ANDROIDROOT=\"$ANDROIDROOT\"" >>$FTECONFIG + echo "export ANDROID_HOSTSYSTEM=\"ANDROID_HOSTSYSTEM\"" >>$FTECONFIG + echo "export ANDROID_ZIPALIGN=\"ANDROID_ZIPALIGN\"" >>$FTECONFIG + echo "EMSCRIPTENROOT=\"$EMSCRIPTENROOT\"" >>$FTECONFIG + echo "OSXCROSSROOT=\"$OSXCROSSROOT\"" >>$FTECONFIG + echo "NACLROOT=\"$NACLROOT\"" >>$FTECONFIG + echo "NACL_SDK_ROOT=\"$NACLROOT/nacl_sdk/$NACLSDKVERSION\"" >>$FTECONFIG + echo "NACLSDKVERSION=\"$NACLSDKVERSION\"" >>$FTECONFIG + + echo "BUILD_LINUXx86=\"$BUILD_LINUXx86\"" >>$FTECONFIG + echo "BUILD_LINUXx64=\"$BUILD_LINUXx64\"" >>$FTECONFIG + echo "BUILD_LINUXx32=\"$BUILD_LINUXx32\"" >>$FTECONFIG + echo "BUILD_LINUXarmhf=\"$BUILD_LINUXarmhf\"" >>$FTECONFIG + echo "BUILD_CYGWIN=\"$BUILD_CYGWIN\"" >>$FTECONFIG + echo "BUILD_WINDOWS=\"$BUILD_WINDOWS\"" >>$FTECONFIG + echo "BUILD_DOS=\"$BUILD_DOS\"" >>$FTECONFIG + echo "BUILD_MSVC=\"$BUILD_MSVC\"" >>$FTECONFIG + echo "BUILD_ANDROID=\"$BUILD_ANDROID\"" >>$FTECONFIG + echo "BUILD_SDL=\"$BUILD_SDL\"" >>$FTECONFIG + echo "BUILD_WEB=\"$BUILD_WEB\"" >>$FTECONFIG + echo "BUILD_MAC=\"$BUILD_MAC\"" >>$FTECONFIG + echo "BUILD_NACL=\"$BUILD_NACL\"" >>$FTECONFIG + + echo "PLUGINS_WINDOWS=\"$PLUGINS_WINDOWS\"" >>$FTECONFIG + echo "PLUGINS_LINUXx86=\"$PLUGINS_LINUXx86\"" >>$FTECONFIG + echo "PLUGINS_LINUXx64=\"$PLUGINS_LINUXx64\"" >>$FTECONFIG + echo "PLUGINS_LINUXx32=\"$PLUGINS_LINUXx32\"" >>$FTECONFIG + echo "PLUGINS_LINUXarmhf=\"$PLUGINS_LINUXarmhf\"" >>$FTECONFIG +fi + +true +true=$? +false +false=$? + +if [ "$(uname -s)" == "Linux" ]; then + . /etc/os-release +fi +function debianpackages { + #make sure apt-get is installed + if [ -z `which apt-get 2>>/dev/null` ]; then + return $false + fi + local ret=$true + for i in "$@" + do + dpkg -s $i 2>&1 >> /dev/null + if [ $? -eq 1 ]; then + ret=$false + fi + done + + if [ $ret == $false ]; then + if [ $UID -eq 0 ]; then + apt-get install --no-install-recommends $@ + ret=$true + else + echo "Packages not installed. Run as root to easily install dependancies." + fi + fi + return $ret +} +function jessiepackages { + if [ "$PRETTY_NAME" != "Debian GNU/Linux 8 (jessie)" ]; then + return $false + fi + + debianpackages $@ + return $? +} + +#we don't really know what system we're on. assume they have any system dependancies. +#fixme: args are programs findable with which +function otherpackages { + if [ -z "$PRETTY_NAME" ]; then + return $true + fi + return $false +} + + +#Note: only the native linux-sdl target can be compiled, as libSDL[2]-dev doesn't support multiarch properly, and we depend upon it instead of building from source (thus ensuring it has whatever distro stuff needed... though frankly that should be inside the .so instead of the headers). + +if [ $UID -eq 0 ] && [ ! -z `which apt-get` ]; then + #because multiarch requires separate packages for some things, we'll need to set that up now (in case noone did that yet) + dpkg --add-architecture i386 + apt-get update +fi + +#generic crap. much of this is needed to set up and decompress dependancies and stuff. +debianpackages subversion make automake libtool p7zip-full zip || otherpackages z7 make svn || exit + +if [ "$BUILD_LINUXx86" == "y" ]; then + #for building linux targets + debianpackages gcc-multilib g++-multilib mesa-common-dev libasound2-dev libvorbis-dev || otherpackages gcc || exit + jessiepackages libgnutls28-dev || debianpackages libgnutls28-dev || otherpackages gcc || exit + if [[ "$PLUGINS_LINUXx86" =~ "ffmpeg" ]]; then + debianpackages libswscale-dev libavcodec-dev || otherpackages || exit + fi +fi +if [ "$BUILD_LINUXx64" == "y" ]; then + #for building linux targets + debianpackages gcc-multilib g++-multilib mesa-common-dev libasound2-dev || otherpackages gcc || exit + jessiepackages libgnutls28-dev || debianpackages libgnutls28-dev || otherpackages gcc || exit + if [[ "$PLUGINS_LINUXx64" =~ "ffmpeg" ]]; then + debianpackages libswscale-dev libavcodec-dev || otherpackages || exit + fi +fi +if [ "$BUILD_LINUXx32" == "y" ]; then + #for building linux targets + debianpackages gcc-multilib g++-multilib mesa-common-dev libasound2-dev || otherpackages gcc || exit + jessiepackages libgnutls28-dev || debianpackages libgnutls28-dev || otherpackages gcc || exit +fi +if [ "$BUILD_LINUXarmhf" == "y" ]; then + #for building linux targets + debianpackages gcc-multilib-arm-linux-gnueabihf g++-multilib-arm-linux-gnueabihf mesa-common-dev libasound2-dev || otherpackages gcc || exit + jessiepackages libgnutls28-dev || debianpackages libgnutls28-dev || otherpackages gcc || exit +fi +if [ "$BUILD_SDL" == "y" ]; then + #for building SDL targets + debianpackages libSDL1.2-dev libSDL2-dev libspeex-dev libspeexdsp-dev || otherpackages || exit +fi + +if [ "$BUILD_WINDOWS" == "y" ]; then + #for building windows targets + debianpackages mingw-w64 || otherpackages x86_64-w64-mingw32-gcc || exit +fi + + +if [ "$BUILD_ANDROID" == "y" ]; then + ( (jessiepackages openjdk-8-jdk-headless || debianpackages openjdk-8-jdk-headless ) && debianpackages ant) || otherpackages || exit +fi + +if [ "$BUILD_WEB" == "y" ]; then + ( (jessiepackages cmake || debianpackages cmake) && debianpackages git build-essential) || exit +fi + +if [ "$BUILD_MAC" == "y" ]; then + debianpackages git cmake libxml2-dev fuse || otherpackages || exit +fi +debianpackages subversion make build-essential || otherpackages svn make || exit + +echo "System Package checks complete." + +if [ "$UID" == "0" ]; then + #avoid root taking ownership of anything. + echo "Refusing to update/rebuild toolchains as root." + echo "Please continue running this script as a regular user." + exit +fi + +echo +echo "(Any new toolchains will be installed to $FTEROOT)" +echo "(Say no if you're certain you already set up everything)" +read -n 1 -p "Rebuild/update any toolchains now? [y/N] " REBUILD_TOOLCHAINS && echo +REBUILD_TOOLCHAINS=${REBUILD_TOOLCHAINS:-n} +mkdir -p $FTEROOT + +#dos shit +if [ "$BUILD_DOS" == "y" ] && [ $UID -ne 0 ] && [ $REBUILD_TOOLCHAINS == "y" ]; then + echo "You'll need to manually install djgpp for DOS builds." +fi + +#android shit. WARNING: should come first as it spits out some EULAs that need confirming. +if [ "$BUILD_ANDROID" == "y" ] && [ $UID -ne 0 ] && [ $REBUILD_TOOLCHAINS == "y" ]; then + mkdir -p $ANDROIDROOT + cd $ANDROIDROOT + wget -N https://dl.google.com/android/repository/tools_r25.2.3-linux.zip + unzip -qn tools_r25.2.3-linux.zip + cd tools/bin + #yes, android-8 is fucking old now. newer versions won't work on older devices. + echo "downloading android build tools" + ./sdkmanager "build-tools;$ANDROID_BUILDTOOLS" + echo "downloading android platform tools" + ./sdkmanager "platform-tools" + echo "downloading android-9" + ./sdkmanager "platforms;android-9" + echo "downloading android ndk" + ./sdkmanager "ndk-bundle" + cd ~ +fi + +#emscripten/web shit +if [ "$BUILD_WEB" == "y" ] && [ $UID -ne 0 ] && [ $REBUILD_TOOLCHAINS == "y" ]; then + mkdir -p $EMSCRIPTENROOT + cd $EMSCRIPTENROOT/.. + wget -N https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz + cd $EMSCRIPTENROOT + tar xzf ../emsdk-portable.tar.gz --strip-components=1 + ./emsdk install latest + ./emsdk activate latest + cd ~ +fi + + +#osxcross, for mac crap +if [ "$BUILD_MAC" == "y" ] && [ $UID -ne 0 ] && [ $REBUILD_TOOLCHAINS == "y" ]; then + echo "Setting up OSXCross... THIS IS TOTALLY UNTESTED" + read -p "You need to download xcode first. Where did you download the .dmg file to?" XCODE + git clone https://github.com/tpoechtrager/osxcross.git $OSXCROSSROOT + cd $OSXCROSSROOT + tools/gen_sdk_package_darling_dmg.sh $XCODE + cp *.tar.xz + SDK_VERSION=10.10 UNATTENDED=0 ./build.sh + cd ~ +fi + +if [ "$BUILD_NACL" == "y" ] && [ $UID -ne 0 ] && [ $REBUILD_TOOLCHAINS == "y" ]; then + echo "Setting up NaCL..." + mkdir -p $NACLROOT + cd $NACLROOT/.. + wget -N https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/nacl_sdk.zip + unzip -qn nacl_sdk.zip + cd $NACLROOT + ./naclsdk update $NACLSDKVERSION +fi + + +#initial checkout of fte's svn +if [ $UID -ne 0 ] && [ $REBUILD_TOOLCHAINS == "y" ]; then + if [ ! -d $SVNROOT ]; then + svn checkout https://svn.code.sf.net/p/fteqw/code/trunk $SVNROOT + else + cd $SVNROOT + svn up + fi + + #FIXME: there may be race conditions when compiling. + #so make sure we've pre-built certain targets without using -j + #linux distros vary too much with various dependancies and versions and such, so we might as well pre-build our own copies of certain libraries. this really only needs to be done once, but its safe to retry anyway. + cd $SVNROOT/engine + if [ "$BUILD_LINUXx86" == "y" ]; then + echo "Making libraries (x86)..." + make FTE_TARGET=linux32 makelibs CPUOPTIMISATIONS=-fno-finite-math-only 2>&1 >>/dev/null + fi + if [ "$BUILD_LINUXx64" == "y" ]; then + echo "Making libraries (linux x86_64)..." + make FTE_TARGET=linux64 makelibs CPUOPTIMISATIONS=-fno-finite-math-only 2>&1 >>/dev/null + fi + if [ "$BUILD_LINUXx32" == "y" ]; then + echo "Making libraries (linux x32)..." + make FTE_TARGET=linuxx32 makelibs CPUOPTIMISATIONS=-fno-finite-math-only 2>&1 >>/dev/null + fi + if [ "$BUILD_LINUXarmhf" == "y" ]; then + echo "Making libraries (linux armhf)..." + make FTE_TARGET=linuxarmhf makelibs CPUOPTIMISATIONS=-fno-finite-math-only 2>&1 >>/dev/null + fi + if [ "$BUILD_WINDOWS" == "y" ] && [[ "$PLUGINS_WINDOWS" =~ "ode" ]]; then + echo "Prebuilding ODE library (win32)..." + make FTE_TARGET=win32 plugins-rel NATIVE_PLUGINS=ode 2>&1 >>/dev/null + echo "Prebuilding ODE library (win64)..." + make FTE_TARGET=win64 plugins-rel NATIVE_PLUGINS=ode 2>&1 >>/dev/null + fi + if [ "$BUILD_LINUXx86" == "y" ] && [[ "$PLUGINS_LINUXx86" =~ "ode" ]]; then + echo "Prebuilding ODE library (linux x86)..." + make FTE_TARGET=linux32 plugins-rel NATIVE_PLUGINS=ode CPUOPTIMISATIONS=-fno-finite-math-only 2>&1 >>/dev/null + fi + if [ "$BUILD_LINUXx64" == "y" ] && [[ "$PLUGINS_LINUXx64" =~ "ode" ]]; then + echo "Prebuilding ODE library (linux x86_64)..." + make FTE_TARGET=linux64 plugins-rel NATIVE_PLUGINS=ode CPUOPTIMISATIONS=-fno-finite-math-only 2>&1 >>/dev/null + fi + if [ "$BUILD_WINDOWS" == "y" ]; then + echo "Obtaining ffmpeg library (win32)..." + make FTE_TARGET=win32 plugins-rel NATIVE_PLUGINS=ffmpeg 2>&1 >>/dev/null + echo "Obtaining ffmpeg library (win64)..." + make FTE_TARGET=win64 plugins-rel NATIVE_PLUGINS=ffmpeg 2>&1 >>/dev/null + fi + cd ~ +fi + + + +echo "Setup script complete." +echo "When you run build_wip.sh output will be written to $BUILDFOLDER/*" diff --git a/build_wip.sh b/build_wip.sh index 6607b4933..4ff48d051 100755 --- a/build_wip.sh +++ b/build_wip.sh @@ -1,324 +1,329 @@ -#!/bin/bash -START=$(date +%s) - -SVNROOT=$(cd "$(dirname "$(readlink "$BASH_SOURCE")")" && pwd) -FTECONFIG=$SVNROOT/build.cfg - -HOME=`echo ~` -BASE=$SVNROOT/.. -#set this if you want non-default branding, for customised builds. -#export BRANDING=wastes - -#defaults, if we're not set up properly. -#should be overriden in build.cfg -BUILDFOLDER=$HOME/htdocs -BUILDLOGFOLDER=$BUILDFOLDER/build_logs -SVNROOT=$BASE/fteqw-code -BUILD_LINUXx86=y -BUILD_LINUXx64=y -BUILD_WINDOWS=y -BUILD_ANDROID=y -BUILD_WEB=y -PLUGINS_LINUXx86="qi ezhud xmpp irc" -PLUGINS_LINUXx64="qi ezhud xmpp irc" -PLUGINS_LINUXx32="qi ezhud xmpp irc" -PLUGINS_WINDOWS="avplug ode qi ezhud xmpp irc" -THREADS="-j 4" - -########### NaCL stuff -NACL_SDK_ROOT=/opt/nacl_sdk/pepper_31/ - -if [ -e $FTECONFIG ]; then - . $FTECONFIG -else - echo "WARNING: $FTECONFIG does not exist yet." -fi - -export NACL_SDK_ROOT - -########### Emscripten / Web Stuff -export EMSDK=$EMSCRIPTENROOT -#export WEB_PREJS="--pre-js $HOME/prejs.js" - -########### Android Stuff. so messy... -#This is some android password that you should keep private. You should keep the keystore file private too, of course. Frankly, that part is more important than this small random number. -KEYPASSFILE=$BASE/.fte_keypass -if [ ! -e $KEYPASSFILE ]; then - dd if=/dev/urandom count=9 bs=1 2>/dev/null | base64 > $KEYPASSFILE - chmod 400 $KEYPASSFILE -fi -KEYPASS=`cat $KEYPASSFILE` -export JAVA_HOME=/usr -if [ ! -z "$ANDROIDROOT" ]; then - export ANDROID_HOME=$ANDROIDROOT -fi -if [ ! -z "$ANDROIDNDKROOT" ]; then - export ANDROID_NDK_ROOT=$ANDROIDNDKROOT -else - export ANDROID_NDK_ROOT=$ANDROID_HOME/ndk-bundle -fi -export KEYTOOLARGS="-keypass $KEYPASS -storepass $KEYPASS -dname \"CN=fteqw.com, OU=ID, O=FTE, L=Unknown, S=Unknown, C=GB\"" -export JARSIGNARGS="-storepass $KEYPASS" - -########### Various Output etc Paths -QCCBUILDFOLDER=$BUILDFOLDER/fteqcc -SVNFOLDER=$SVNROOT/engine/release -ARCHIVEFOLDER=$BUILDFOLDER/archive -SVNDBGFOLDER=$SVNROOT/engine/debug -WARNINGLEVEL="-w" -FILELOCK=$BASE/.fte_buildlock - -#./ccache-alias.sh - -exec 9>$FILELOCK -if ! flock -n 9 ; then - echo "Build script is already running!"; - exit 1 -fi - -mkdir -p $BUILDLOGFOLDER -if [ ! -d $SVNROOT ]; then - #just in case... - svn checkout https://svn.code.sf.net/p/fteqw/code/trunk $SVNROOT -fi - -cd $SVNROOT/ - -echo "SVN Update" -svn update - -cd engine - -date > $BUILDLOGFOLDER/buildlog.txt -echo "Starting build" >> $BUILDLOGFOLDER/buildlog.txt - -function build { - BUILDSTART=$(date +%s) - NAME=$1 - DEST=$2 - shift; shift - make clean >> /dev/null - echo -n "Making $NAME... " - date > $BUILDLOGFOLDER/$DEST.txt - echo make $THREADS $* >> $BUILDLOGFOLDER/$DEST.txt 2>&1 - make $THREADS $* >> $BUILDLOGFOLDER/$DEST.txt 2>&1 - if [ $? -eq 0 ]; then - BUILDEND=$(date +%s) - BUILDTIME=$(( $BUILDEND - $BUILDSTART )) - echo "$BUILDTIME seconds" - echo "$NAME done, took $BUILDTIME seconds" >> $BUILDLOGFOLDER/buildlog.txt - rm -rf $BUILDFOLDER/$DEST >> /dev/null 2>&1 - mkdir $BUILDFOLDER/$DEST 2>> /dev/null - mkdir $BUILDFOLDER/$DEST/debug 2>> /dev/null - cp $SVNFOLDER/* $BUILDFOLDER/$DEST >> /dev/null 2>> /dev/null - cp $SVNDBGFOLDER/* $BUILDFOLDER/$DEST/debug >> /dev/null 2>> /dev/null - rm -rf $BUILDFOLDER/$DEST/*.a >> /dev/null 2>&1 - rm -rf $BUILDFOLDER/$DEST/debug/*.a >> /dev/null 2>&1 - rmdir $BUILDFOLDER/$DEST/debug 2>> /dev/null - else - echo "$NAME failed" >> $BUILDLOGFOLDER/buildlog.txt - echo "failed" - fi -} - -function build_fteqcc { - echo "--- no code ---" -} - -echo "--- Engine builds ---" -#the -fno-finite-math-only is to avoid a glibc dependancy -if [ "$BUILD_LINUXx86" != "n" ]; then - NATIVE_PLUGINS="$PLUGINS_LINUXx86" build "Linux 32-bit" linux_x86 FTE_TARGET=linux32 CPUOPTIMIZATIONS=-fno-finite-math-only qcc-rel rel dbg vk-rel plugins-rel plugins-dbg -fi -if [ "$BUILD_LINUXx64" != "n" ]; then - NATIVE_PLUGINS="$PLUGINS_LINUXx64" build "Linux 64-bit" linux_amd64 FTE_TARGET=linux64 LDFLAGS="-Llibs/64" CPUOPTIMIZATIONS=-fno-finite-math-only qcc-rel rel dbg vk-rel plugins-rel plugins-dbg -fi -if [ "$BUILD_LINUXx32" != "n" ]; then -# CFLAGS="-DNO_JPEG" - NATIVE_PLUGINS="$PLUGINS_LINUXx32" build "Linux x32" linux_x32 FTE_TARGET=linuxx32 CPUOPTIMIZATIONS=-fno-finite-math-only qcc-rel rel dbg plugins-rel plugins-dbg -fi -if [ "$BUILD_LINUXarmhf" != "n" ]; then - #debian/ubuntu's armhf targets armv7. we instead target armv6, because that means we work on rpi too (but still with hard-float). It should be compatible although we likely need more ops. - NATIVE_PLUGINS="$PLUGINS_LINUXarmhf" build "Linux ARMhf" linux_armhf FTE_TARGET=linuxarmhf CPUOPTIMIZATIONS=-fno-finite-math-only rel dbg qcc-rel plugins-rel plugins-dbg -fi -if [ "$BUILD_CYGWIN" != "n" ]; then - NATIVE_PLUGINS="qi ezhud" build "Cygwin" cygwin qcc-rel rel dbg plugins-rel plugins-dbg -fi -if [ "$BUILD_WINDOWS" != "n" ]; then - NATIVE_PLUGINS="$PLUGINS_WINDOWS" build "Windows 32-bit" win32 FTE_TARGET=win32 CFLAGS="$WARNINGLEVEL" sv-rel gl-rel vk-rel mingl-rel m-rel d3d-rel qcc-rel qccgui-scintilla qccgui-dbg gl-dbg sv-dbg plugins-dbg plugins-rel NATIVE_PLUGINS="$PLUGINS_WINDOWS" - NATIVE_PLUGINS="$PLUGINS_WINDOWS" build "Windows 64-bit" win64 FTE_TARGET=win64 CFLAGS="$WARNINGLEVEL" sv-rel gl-rel vk-rel mingl-rel m-rel d3d-rel qcc-rel qccgui-scintilla qccgui-dbg gl-dbg sv-dbg plugins-dbg plugins-rel -fi -if [ "$BUILD_MSVC" != "n" ]; then - NATIVE_PLUGINS="$PLUGINS_WINDOWS" build "Windows MSVC 32-bit" msvc FTE_TARGET=vc BITS=32 CFLAGS="$WARNINGLEVEL" sv-rel gl-rel vk-rel mingl-rel m-rel d3d-rel qcc-rel qccgui-scintilla qccgui-dbg gl-dbg sv-dbg plugins-dbg plugins-rel - NATIVE_PLUGINS="$PLUGINS_WINDOWS" build "Windows MSVC 64-bit" msvc FTE_TARGET=vc BITS=64 CFLAGS="$WARNINGLEVEL" sv-rel gl-rel vk-rel mingl-rel m-rel d3d-rel qcc-rel qccgui-scintilla qccgui-dbg gl-dbg sv-dbg plugins-dbg plugins-rel -fi -export NATIVE_PLUGINS="qi ezhud xmpp irc" -if [ "$BUILD_ANDROID" != "n" ]; then - build "Android" android droid-rel -fi -if [ "$BUILD_WINDOWS" != "n" ]; then - build "NPFTE" npfte npfte-rel -fi -if [ "$BUILD_WEB" != "n" ]; then - source $EMSDK/emsdk_env.sh >> /dev/null - build "Emscripten" web FTE_TARGET=web gl-rel CC=emcc -fi -if [ "$BUILD_LINUX" != "n" ] && [ "$BUILD_SDL" != "n" ] && [ "$(uname -m)" != "x86_64" ]; then - build "Linux 32-bit (SDL)" linux_x86_sdl FTE_TARGET=SDL BITS=32 LTO=1 -fi -if [ "$BUILD_LINUX" != "n" ] && [ "$BUILD_SDL" != "n" ] && [ "$(uname -m)" == "x86_64" ]; then - build "Linux 64-bit (SDL)" linux_amd64_sdl FTE_TARGET=SDL BITS=64 LDFLAGS="-Llibs/64" LTO=1 -fi -if [ "$BUILD_WINDOWS" != "n" ] && [ "$BUILD_SDL" != "n" ]; then - build "Windows 32-bit (SDL)" win32_sdl FTE_TARGET=win32_SDL gl-rel mingl-rel - build "Windows 64-bit (SDL)" win64_sdl FTE_TARGET=win64_SDL LDFLAGS="-L./libs/mingw64-libs/" gl-rel mingl-rel - CFLAGS="$WARNINGLEVEL -DNOLEGACY -DOMIT_QCC" build "Windows 32-bit nocompat" nocompat FTE_TARGET=win32 LTO=1 NOCOMPAT=1 BOTLIB_CFLAGS="" BOTLIB_OBJS="" gl-rel m-rel -k -fi -if [ "$BUILD_NACL" != "n" ]; then - #non-pnacl is supported ONLY in chrome's store crap, but pnacl works anywhere. -# build "Native Client 64-bit" nacl_amd64 FTE_TARGET=nacl NARCH=x86_64 gl-rel -# build "Native Client 32-bit" nacl_x86 FTE_TARGET=nacl NARCH=x86_32 gl-rel -#internal compiler error build "Native Client ARM" nacl_arm FTE_TARGET=nacl NARCH=arm gl-rel - build "Native Client Portable" nacl_portable FTE_TARGET=nacl NARCH=pnacl gl-rel -fi -####build "MorphOS" morphos CFLAGS="-I$BASE/morphos/os-include/ -I$BASE/morphos/lib/ -L$BASE/morphos/lib/ -I$BASE/zlib/zlib-1.2.5 -L$BASE/zlib/zlib-1.2.5 -I./libs $WARNINGLEVEL" gl-rel mingl-rel sv-rel qcc-rel -if [ "$BUILD_MAC" != "n" ]; then - #build "MacOSX" macosx_tiger CFLAGS="-I$BASE/mac/x86/include/ -L$BASE/mac/x86/lib -I./libs" FTE_TARGET=macosx_x86 sv-rel gl-rel mingl-rel qcc-rel - #FIXME: figure out how to do universal binaries or whatever they're called - build "MacOSX 32-bit" osx32 CC=o32-clang CXX=o32-clang++ FTE_TARGET=osx_x86 BITS=32 sv-rel gl-rel mingl-rel qcc-rel - build "MacOSX 64-bit" osx64 CC=o64-clang CXX=o64-clang++ FTE_TARGET=osx_x86_64 BITS=64 sv-rel gl-rel mingl-rel qcc-rel -fi - -#third party stuff / misc crap -if [ "$BUILD_WEB" != "n" ]; then - cp $BASE/3rdparty/web/* $BUILDFOLDER/web/ -fi -if [ "$BUILD_WINDOWS" != "n" ]; then - cp $BASE/3rdparty/win32/3rdparty.zip $BUILDFOLDER/win32/3rdparty.zip - cp $BASE/3rdparty/win64/3rdparty.zip $BUILDFOLDER/win64/3rdparty.zip - if [ "$BUILD_SDL" != "n" ]; then - cp $SVNROOT/engine/libs/SDL2-2.0.1/i686-w64-mingw32/bin/SDL2.dll $BUILDFOLDER/win32_sdl - cp $SVNROOT/engine/libs/SDL2-2.0.1/x86_64-w64-mingw32/bin/SDL2.dll $BUILDFOLDER/win64_sdl - fi - cp $HOME/nocompat_readme.html $BUILDFOLDER/nocompat/README.html -fi - -echo "--- QC builds ---" -rm -rf $QCCBUILDFOLDER 2>&1 -mkdir -p $QCCBUILDFOLDER -if [ -e "$BUILDFOLDER/linux_x86/fteqw-gl32" ] -then - echo "Making fteextensions.qc" - mkdir -p ~/.fte/fte - echo "pr_dumpplatform -o fteextensions" > ~/.fte/fte/minusargsaresilly.cfg - echo "pr_dumpplatform -o csqcsysdefs -Tcs" >> ~/.fte/fte/minusargsaresilly.cfg - echo "pr_dumpplatform -o menusysdefs -Tmenu" >> ~/.fte/fte/minusargsaresilly.cfg - $BUILDFOLDER/linux_x86/fteqw-gl32 -basedir ~/.fte -nohome -quake +set snd_device none -nosound +set vid_renderer sv +exec minusargsaresilly.cfg +quit >> /dev/null - mv ~/.fte/fte/src/fteextensions.qc $QCCBUILDFOLDER - mv ~/.fte/fte/src/csqcsysdefs.qc $QCCBUILDFOLDER - mv ~/.fte/fte/src/menusysdefs.qc $QCCBUILDFOLDER -else - echo "Skipping FTE Extensions, no Linux gl32 build located" -fi - - -if [ -e $BUILDFOLDER/linux_x86/fteqcc32 ]; then - echo "Making csaddon + qcmenu" - mkdir -p $BUILDFOLDER/csaddon/ - cd $SVNROOT/quakec - cd csaddon/src - $BUILDFOLDER/linux_x86/fteqcc32 -srcfile csaddon.src > $BUILDLOGFOLDER/csaddon.txt - mv ../csaddon.dat $BUILDFOLDER/csaddon/ - - cd ../../menusys - $BUILDFOLDER/linux_x86/fteqcc32 -srcfile menu.src > $BUILDLOGFOLDER/menu.txt - rm fteqcc.log - zip -q -9 -o -r $BUILDFOLDER/csaddon/menusys_src.zip . - mv ../menu.dat $BUILDFOLDER/csaddon/ -else - echo "Skiping csaddon + qcmenu, no compiler build" -fi - -cd $SVNROOT/engine/ -svn info > $BUILDFOLDER/version.txt - -if [ "$BUILD_LINUXx86" != "n" ]; then - cp $BUILDFOLDER/linux_x86/fteqcc32 $QCCBUILDFOLDER/linux32-fteqcc -fi -if [ "$BUILD_LINUXx64" != "n" ]; then - cp $BUILDFOLDER/linux_amd64/fteqcc64 $QCCBUILDFOLDER/linux64-fteqcc -fi -if [ "$BUILD_LINUXx32" != "n" ]; then - cp $BUILDFOLDER/linux_x32/fteqccx32 $QCCBUILDFOLDER/linuxx32-fteqcc -fi -if [ "$BUILD_LINUXarmhf" != "n" ]; then - cp $BUILDFOLDER/linux_armhf/fteqccarmhf $QCCBUILDFOLDER/linuxarmhf-fteqcc -fi -if [ "$BUILD_WINDOWS" != "n" ]; then - cp $BUILDFOLDER/win32/fteqcc.exe $QCCBUILDFOLDER/win32-fteqcc.exe - cp $BUILDFOLDER/win32/fteqccgui.exe $QCCBUILDFOLDER/win32-fteqccgui.exe - cp $BUILDFOLDER/win64/fteqcc64.exe $QCCBUILDFOLDER/win64-fteqcc.exe - cp $BUILDFOLDER/win64/fteqccgui64.exe $QCCBUILDFOLDER/win64-fteqccgui.exe -fi -#cp $BUILDFOLDER/morphos/fteqcc $QCCBUILDFOLDER/morphos-fteqcc -#cp $BUILDFOLDER/macosx_tiger/fteqcc $QCCBUILDFOLDER/macosx_tiger-fteqcc -cp $BUILDFOLDER/version.txt $QCCBUILDFOLDER/version.txt - -if [ "$BUILD_NACL" != "n" ]; then - mkdir -p $BUILDFOLDER/nacl - NACL=$BUILDFOLDER/nacl/fteqw.nmf - echo "{ \"program\":{" > $NACL - if [ -e "$BUILDFOLDER/nacl_amd64/fteqw-x86_64.nexe" ]; then - mv $BUILDFOLDER/nacl_amd64/fteqw-x86_64.nexe $BUILDFOLDER/nacl/fteqw-x86_64.nexe - echo " \"x86-64\":{\"url\":\"fteqw-x86_64.nexe\"}," >> $NACL - fi - if [ -e "$BUILDFOLDER/nacl_x86/fteqw-x86_32.nexe" ]; then - mv $BUILDFOLDER/nacl_x86/fteqw-x86_32.nexe $BUILDFOLDER/nacl/fteqw-x86_32.nexe - echo " \"x86-32\":{\"url\":\"fteqw-x86_32.nexe\"}," >> $NACL - fi - if [ -e "$BUILDFOLDER/nacl_arm/fteqw-arm.nexe" ]; then - mv $BUILDFOLDER/nacl_arm/fteqw-arm.nexe $BUILDFOLDER/nacl/fteqw-arm.nexe - echo " \"arm\":{\"url\":\"fteqw-arm.nexe\"}" >> $NACL - fi - $NACL_SDK_ROOT/toolchain/linux_pnacl/bin/pnacl-finalize -o $BUILDFOLDER/nacl/fteqw.pexe $BUILDFOLDER/nacl_portable/fteqw.pexe - echo " \"portable\":{\"pnacl-translate\":{\"url\":\"fteqw.pexe\"}}" >> $NACL - echo "} }" >> $NACL - rm -rf "$BUILDFOLDER/nacl_amd64" - rm -rf "$BUILDFOLDER/nacl_x86" - rm -rf "$BUILDFOLDER/nacl_arm" - rm -rf "$BUILDFOLDER/nacl_portable" -fi - -if [ "$BUILD_WINDOWS" != "n" ]; then - echo Archiving output - SVNVER=$(svnversion $SVNROOT) - cd $BUILDFOLDER/ - zip -q -9 $ARCHIVEFOLDER/win_fteqw_$SVNVER.zip win32/fteglqw.exe win32/fteqwsv.exe win32/fteqccgui.exe win32/debug/fteglqw.exe win64/fteqw.exe win64/debug/fteglqw.exe - - - cd $BUILDFOLDER/win32/ - zip -q -j -9 $BUILDFOLDER/fteqw_for_windows.zip fteglqw.exe fteqwsv.exe fteqccgui.exe fteplug_qi_x86.dll fteplug_xmpp_x86.dll fteplug_irc_x86.dll fteplug_ezhud_x86.dll - cd $HOME/3rdparty_win32/ - zip -q -9 $BUILDFOLDER/fteqw_for_windows.zip ogg.dll vorbis.dll vorbisfile.dll freetype6.dll zlib1.dll - mkdir -p $BASE/tmp/fte - cd $BASE/tmp/ - cp $BUILDFOLDER/csaddon/menu.dat fte - zip -q -9 $BUILDFOLDER/fteqw_for_windows.zip fte/menu.dat - - #~/afterquake/updatemini.sh -fi - -echo "All done" - -END=$(date +%s) -DIFF=$(( $END - $START )) -MINS=$(( $DIFF / 60 )) -echo "Total Compile Time: $MINS minutes" >> $BUILDLOGFOLDER/buildlog.txt -echo "Total Compile Time: $MINS minutes" - -cd $HOME -#./errorlog.sh -#cd $HOME -#rm .bitchxrc -#cp ./fteqw/.bitchxrc ./ -#./BitchX -a irc.quakenet.org -A -c "#fte" -n A_Gorilla +#!/bin/bash +START=$(date +%s) + +SVNROOT=$(cd "$(dirname "$(readlink "$BASH_SOURCE")")" && pwd) +FTECONFIG=$SVNROOT/build.cfg + +HOME=`echo ~` +BASE=$SVNROOT/.. +#set this if you want non-default branding, for customised builds. +#export BRANDING=wastes + +#defaults, if we're not set up properly. +#should be overriden in build.cfg +BUILDFOLDER=$HOME/htdocs +BUILDLOGFOLDER=$BUILDFOLDER/build_logs +SVNROOT=$BASE/fteqw-code +BUILD_LINUXx86=y +BUILD_LINUXx64=y +BUILD_WINDOWS=y +BUILD_ANDROID=y +BUILD_WEB=y +PLUGINS_LINUXx86="qi ezhud xmpp irc" +PLUGINS_LINUXx64="qi ezhud xmpp irc" +PLUGINS_LINUXx32="qi ezhud xmpp irc" +PLUGINS_WINDOWS="avplug ode qi ezhud xmpp irc" +THREADS="-j 4" + +########### NaCL stuff +NACL_SDK_ROOT=/opt/nacl_sdk/pepper_31/ + +if [ -e $FTECONFIG ]; then + . $FTECONFIG +else + echo "WARNING: $FTECONFIG does not exist yet." +fi + +export NACL_SDK_ROOT + +########### Emscripten / Web Stuff +export EMSDK=$EMSCRIPTENROOT +#export WEB_PREJS="--pre-js $HOME/prejs.js" + +########### Android Stuff. so messy... +#This is some android password that you should keep private. You should keep the keystore file private too, of course. Frankly, that part is more important than this small random number. +KEYPASSFILE=$BASE/.fte_keypass +if [ ! -e $KEYPASSFILE ]; then + dd if=/dev/urandom count=9 bs=1 2>/dev/null | base64 > $KEYPASSFILE + chmod 400 $KEYPASSFILE +fi +KEYPASS=`cat $KEYPASSFILE` +export JAVA_HOME=/usr +if [ ! -z "$ANDROIDROOT" ]; then + export ANDROID_HOME=$ANDROIDROOT +fi +if [ ! -z "$ANDROIDNDKROOT" ]; then + export ANDROID_NDK_ROOT=$ANDROIDNDKROOT +else + export ANDROID_NDK_ROOT=$ANDROID_HOME/ndk-bundle +fi +export KEYTOOLARGS="-keypass $KEYPASS -storepass $KEYPASS -dname \"CN=fteqw.com, OU=ID, O=FTE, L=Unknown, S=Unknown, C=GB\"" +export JARSIGNARGS="-storepass $KEYPASS" + +########### Various Output etc Paths +QCCBUILDFOLDER=$BUILDFOLDER/fteqcc +SVNFOLDER=$SVNROOT/engine/release +ARCHIVEFOLDER=$BUILDFOLDER/archive +SVNDBGFOLDER=$SVNROOT/engine/debug +WARNINGLEVEL="-w" +FILELOCK=$BASE/.fte_buildlock + +#./ccache-alias.sh + +exec 9>$FILELOCK +if ! flock -n 9 ; then + echo "Build script is already running!"; + exit 1 +fi + +mkdir -p $BUILDLOGFOLDER +if [ ! -d $SVNROOT ]; then + #just in case... + svn checkout https://svn.code.sf.net/p/fteqw/code/trunk $SVNROOT +fi + +cd $SVNROOT/ + +echo "SVN Update" +svn update + +cd engine + +date > $BUILDLOGFOLDER/buildlog.txt +echo "Starting build" >> $BUILDLOGFOLDER/buildlog.txt + +function build { + BUILDSTART=$(date +%s) + NAME=$1 + DEST=$2 + shift; shift + make clean >> /dev/null + echo -n "Making $NAME... " + date > $BUILDLOGFOLDER/$DEST.txt + echo make $THREADS $* >> $BUILDLOGFOLDER/$DEST.txt 2>&1 + make $THREADS $* >> $BUILDLOGFOLDER/$DEST.txt 2>&1 + if [ $? -eq 0 ]; then + BUILDEND=$(date +%s) + BUILDTIME=$(( $BUILDEND - $BUILDSTART )) + echo "$BUILDTIME seconds" + echo "$NAME done, took $BUILDTIME seconds" >> $BUILDLOGFOLDER/buildlog.txt + rm -rf $BUILDFOLDER/$DEST >> /dev/null 2>&1 + mkdir $BUILDFOLDER/$DEST 2>> /dev/null + mkdir $BUILDFOLDER/$DEST/debug 2>> /dev/null + cp $SVNFOLDER/* $BUILDFOLDER/$DEST >> /dev/null 2>> /dev/null + cp $SVNDBGFOLDER/* $BUILDFOLDER/$DEST/debug >> /dev/null 2>> /dev/null + rm -rf $BUILDFOLDER/$DEST/*.a >> /dev/null 2>&1 + rm -rf $BUILDFOLDER/$DEST/debug/*.a >> /dev/null 2>&1 + rmdir $BUILDFOLDER/$DEST/debug 2>> /dev/null + else + echo "$NAME failed" >> $BUILDLOGFOLDER/buildlog.txt + echo "failed" + fi +} + +function build_fteqcc { + echo "--- no code ---" +} + +echo "--- Engine builds ---" +#the -fno-finite-math-only is to avoid a glibc dependancy +if [ "$BUILD_LINUXx86" != "n" ]; then + NATIVE_PLUGINS="$PLUGINS_LINUXx86" build "Linux 32-bit" linux_x86 FTE_TARGET=linux32 CPUOPTIMIZATIONS=-fno-finite-math-only qcc-rel rel dbg vk-rel plugins-rel plugins-dbg +fi +if [ "$BUILD_LINUXx64" != "n" ]; then + NATIVE_PLUGINS="$PLUGINS_LINUXx64" build "Linux 64-bit" linux_amd64 FTE_TARGET=linux64 LDFLAGS="-Llibs/64" CPUOPTIMIZATIONS=-fno-finite-math-only qcc-rel rel dbg vk-rel plugins-rel plugins-dbg +fi +if [ "$BUILD_LINUXx32" != "n" ]; then +# CFLAGS="-DNO_JPEG" + NATIVE_PLUGINS="$PLUGINS_LINUXx32" build "Linux x32" linux_x32 FTE_TARGET=linuxx32 CPUOPTIMIZATIONS=-fno-finite-math-only qcc-rel rel dbg plugins-rel plugins-dbg +fi +if [ "$BUILD_LINUXarmhf" != "n" ]; then + #debian/ubuntu's armhf targets armv7. we instead target armv6, because that means we work on rpi too (but still with hard-float). It should be compatible although we likely need more ops. + NATIVE_PLUGINS="$PLUGINS_LINUXarmhf" build "Linux ARMhf" linux_armhf FTE_TARGET=linuxarmhf CPUOPTIMIZATIONS=-fno-finite-math-only rel dbg qcc-rel plugins-rel plugins-dbg +fi +if [ "$BUILD_CYGWIN" != "n" ]; then + NATIVE_PLUGINS="qi ezhud" build "Cygwin" cygwin qcc-rel rel dbg plugins-rel plugins-dbg +fi +if [ "$BUILD_WINDOWS" != "n" ]; then + NATIVE_PLUGINS="$PLUGINS_WINDOWS" build "Windows 32-bit" win32 FTE_TARGET=win32 CFLAGS="$WARNINGLEVEL" sv-rel gl-rel vk-rel mingl-rel m-rel d3d-rel qcc-rel qccgui-scintilla qccgui-dbg gl-dbg sv-dbg plugins-dbg plugins-rel NATIVE_PLUGINS="$PLUGINS_WINDOWS" + NATIVE_PLUGINS="$PLUGINS_WINDOWS" build "Windows 64-bit" win64 FTE_TARGET=win64 CFLAGS="$WARNINGLEVEL" sv-rel gl-rel vk-rel mingl-rel m-rel d3d-rel qcc-rel qccgui-scintilla qccgui-dbg gl-dbg sv-dbg plugins-dbg plugins-rel +fi +if [ "$BUILD_MSVC" != "n" ]; then + NATIVE_PLUGINS="$PLUGINS_WINDOWS" build "Windows MSVC 32-bit" msvc FTE_TARGET=vc BITS=32 CFLAGS="$WARNINGLEVEL" sv-rel gl-rel vk-rel mingl-rel m-rel d3d-rel qcc-rel qccgui-scintilla qccgui-dbg gl-dbg sv-dbg plugins-dbg plugins-rel + NATIVE_PLUGINS="$PLUGINS_WINDOWS" build "Windows MSVC 64-bit" msvc FTE_TARGET=vc BITS=64 CFLAGS="$WARNINGLEVEL" sv-rel gl-rel vk-rel mingl-rel m-rel d3d-rel qcc-rel qccgui-scintilla qccgui-dbg gl-dbg sv-dbg plugins-dbg plugins-rel +fi +export NATIVE_PLUGINS="qi ezhud xmpp irc" +if [ "$BUILD_ANDROID" != "n" ]; then + build "Android" android droid-rel +fi +if [ "$BUILD_WINDOWS" != "n" ]; then + build "NPFTE" npfte npfte-rel +fi +if [ "$BUILD_DOS" == "y" ]; then + #no networking makes dedicated servers useless. and only a crappy sw renderer is implemented right now. + #the qcc might be useful to someone though! + build "DOS" dos m-rel qcc-rel +fi +if [ "$BUILD_WEB" != "n" ]; then + source $EMSDK/emsdk_env.sh >> /dev/null + build "Emscripten" web FTE_TARGET=web gl-rel CC=emcc +fi +if [ "$BUILD_LINUX" != "n" ] && [ "$BUILD_SDL" != "n" ] && [ "$(uname -m)" != "x86_64" ]; then + build "Linux 32-bit (SDL)" linux_x86_sdl FTE_TARGET=SDL BITS=32 LTO=1 +fi +if [ "$BUILD_LINUX" != "n" ] && [ "$BUILD_SDL" != "n" ] && [ "$(uname -m)" == "x86_64" ]; then + build "Linux 64-bit (SDL)" linux_amd64_sdl FTE_TARGET=SDL BITS=64 LDFLAGS="-Llibs/64" LTO=1 +fi +if [ "$BUILD_WINDOWS" != "n" ] && [ "$BUILD_SDL" != "n" ]; then + build "Windows 32-bit (SDL)" win32_sdl FTE_TARGET=win32_SDL gl-rel mingl-rel + build "Windows 64-bit (SDL)" win64_sdl FTE_TARGET=win64_SDL LDFLAGS="-L./libs/mingw64-libs/" gl-rel mingl-rel + CFLAGS="$WARNINGLEVEL -DNOLEGACY -DOMIT_QCC" build "Windows 32-bit nocompat" nocompat FTE_TARGET=win32 LTO=1 NOCOMPAT=1 BOTLIB_CFLAGS="" BOTLIB_OBJS="" gl-rel m-rel -k +fi +if [ "$BUILD_NACL" != "n" ]; then + #non-pnacl is supported ONLY in chrome's store crap, but pnacl works anywhere. +# build "Native Client 64-bit" nacl_amd64 FTE_TARGET=nacl NARCH=x86_64 gl-rel +# build "Native Client 32-bit" nacl_x86 FTE_TARGET=nacl NARCH=x86_32 gl-rel +#internal compiler error build "Native Client ARM" nacl_arm FTE_TARGET=nacl NARCH=arm gl-rel + build "Native Client Portable" nacl_portable FTE_TARGET=nacl NARCH=pnacl gl-rel +fi +####build "MorphOS" morphos CFLAGS="-I$BASE/morphos/os-include/ -I$BASE/morphos/lib/ -L$BASE/morphos/lib/ -I$BASE/zlib/zlib-1.2.5 -L$BASE/zlib/zlib-1.2.5 -I./libs $WARNINGLEVEL" gl-rel mingl-rel sv-rel qcc-rel +if [ "$BUILD_MAC" != "n" ]; then + #build "MacOSX" macosx_tiger CFLAGS="-I$BASE/mac/x86/include/ -L$BASE/mac/x86/lib -I./libs" FTE_TARGET=macosx_x86 sv-rel gl-rel mingl-rel qcc-rel + #FIXME: figure out how to do universal binaries or whatever they're called + build "MacOSX 32-bit" osx32 CC=o32-clang CXX=o32-clang++ FTE_TARGET=osx_x86 BITS=32 sv-rel gl-rel mingl-rel qcc-rel + build "MacOSX 64-bit" osx64 CC=o64-clang CXX=o64-clang++ FTE_TARGET=osx_x86_64 BITS=64 sv-rel gl-rel mingl-rel qcc-rel +fi + +#third party stuff / misc crap +if [ "$BUILD_WEB" != "n" ]; then + cp $BASE/3rdparty/web/* $BUILDFOLDER/web/ +fi +if [ "$BUILD_WINDOWS" != "n" ]; then + cp $BASE/3rdparty/win32/3rdparty.zip $BUILDFOLDER/win32/3rdparty.zip + cp $BASE/3rdparty/win64/3rdparty.zip $BUILDFOLDER/win64/3rdparty.zip + if [ "$BUILD_SDL" != "n" ]; then + cp $SVNROOT/engine/libs/SDL2-2.0.1/i686-w64-mingw32/bin/SDL2.dll $BUILDFOLDER/win32_sdl + cp $SVNROOT/engine/libs/SDL2-2.0.1/x86_64-w64-mingw32/bin/SDL2.dll $BUILDFOLDER/win64_sdl + fi + cp $HOME/nocompat_readme.html $BUILDFOLDER/nocompat/README.html +fi + +echo "--- QC builds ---" +rm -rf $QCCBUILDFOLDER 2>&1 +mkdir -p $QCCBUILDFOLDER +if [ -e "$BUILDFOLDER/linux_x86/fteqw-gl32" ] +then + echo "Making fteextensions.qc" + mkdir -p ~/.fte/fte + echo "pr_dumpplatform -o fteextensions" > ~/.fte/fte/minusargsaresilly.cfg + echo "pr_dumpplatform -o csqcsysdefs -Tcs" >> ~/.fte/fte/minusargsaresilly.cfg + echo "pr_dumpplatform -o menusysdefs -Tmenu" >> ~/.fte/fte/minusargsaresilly.cfg + $BUILDFOLDER/linux_x86/fteqw-gl32 -basedir ~/.fte -nohome -quake +set snd_device none -nosound +set vid_renderer sv +exec minusargsaresilly.cfg +quit >> /dev/null + mv ~/.fte/fte/src/fteextensions.qc $QCCBUILDFOLDER + mv ~/.fte/fte/src/csqcsysdefs.qc $QCCBUILDFOLDER + mv ~/.fte/fte/src/menusysdefs.qc $QCCBUILDFOLDER +else + echo "Skipping FTE Extensions, no Linux gl32 build located" +fi + + +if [ -e $BUILDFOLDER/linux_x86/fteqcc32 ]; then + echo "Making csaddon + qcmenu" + mkdir -p $BUILDFOLDER/csaddon/ + cd $SVNROOT/quakec + cd csaddon/src + $BUILDFOLDER/linux_x86/fteqcc32 -srcfile csaddon.src > $BUILDLOGFOLDER/csaddon.txt + mv ../csaddon.dat $BUILDFOLDER/csaddon/ + + cd ../../menusys + $BUILDFOLDER/linux_x86/fteqcc32 -srcfile menu.src > $BUILDLOGFOLDER/menu.txt + rm fteqcc.log + zip -q -9 -o -r $BUILDFOLDER/csaddon/menusys_src.zip . + mv ../menu.dat $BUILDFOLDER/csaddon/ +else + echo "Skiping csaddon + qcmenu, no compiler build" +fi + +cd $SVNROOT/engine/ +svn info > $BUILDFOLDER/version.txt + +if [ "$BUILD_LINUXx86" != "n" ]; then + cp $BUILDFOLDER/linux_x86/fteqcc32 $QCCBUILDFOLDER/linux32-fteqcc +fi +if [ "$BUILD_LINUXx64" != "n" ]; then + cp $BUILDFOLDER/linux_amd64/fteqcc64 $QCCBUILDFOLDER/linux64-fteqcc +fi +if [ "$BUILD_LINUXx32" != "n" ]; then + cp $BUILDFOLDER/linux_x32/fteqccx32 $QCCBUILDFOLDER/linuxx32-fteqcc +fi +if [ "$BUILD_LINUXarmhf" != "n" ]; then + cp $BUILDFOLDER/linux_armhf/fteqccarmhf $QCCBUILDFOLDER/linuxarmhf-fteqcc +fi +if [ "$BUILD_WINDOWS" != "n" ]; then + cp $BUILDFOLDER/win32/fteqcc.exe $QCCBUILDFOLDER/win32-fteqcc.exe + cp $BUILDFOLDER/win32/fteqccgui.exe $QCCBUILDFOLDER/win32-fteqccgui.exe + cp $BUILDFOLDER/win64/fteqcc64.exe $QCCBUILDFOLDER/win64-fteqcc.exe + cp $BUILDFOLDER/win64/fteqccgui64.exe $QCCBUILDFOLDER/win64-fteqccgui.exe +fi +#cp $BUILDFOLDER/morphos/fteqcc $QCCBUILDFOLDER/morphos-fteqcc +#cp $BUILDFOLDER/macosx_tiger/fteqcc $QCCBUILDFOLDER/macosx_tiger-fteqcc +cp $BUILDFOLDER/version.txt $QCCBUILDFOLDER/version.txt + +if [ "$BUILD_NACL" != "n" ]; then + mkdir -p $BUILDFOLDER/nacl + NACL=$BUILDFOLDER/nacl/fteqw.nmf + echo "{ \"program\":{" > $NACL + if [ -e "$BUILDFOLDER/nacl_amd64/fteqw-x86_64.nexe" ]; then + mv $BUILDFOLDER/nacl_amd64/fteqw-x86_64.nexe $BUILDFOLDER/nacl/fteqw-x86_64.nexe + echo " \"x86-64\":{\"url\":\"fteqw-x86_64.nexe\"}," >> $NACL + fi + if [ -e "$BUILDFOLDER/nacl_x86/fteqw-x86_32.nexe" ]; then + mv $BUILDFOLDER/nacl_x86/fteqw-x86_32.nexe $BUILDFOLDER/nacl/fteqw-x86_32.nexe + echo " \"x86-32\":{\"url\":\"fteqw-x86_32.nexe\"}," >> $NACL + fi + if [ -e "$BUILDFOLDER/nacl_arm/fteqw-arm.nexe" ]; then + mv $BUILDFOLDER/nacl_arm/fteqw-arm.nexe $BUILDFOLDER/nacl/fteqw-arm.nexe + echo " \"arm\":{\"url\":\"fteqw-arm.nexe\"}" >> $NACL + fi + $NACL_SDK_ROOT/toolchain/linux_pnacl/bin/pnacl-finalize -o $BUILDFOLDER/nacl/fteqw.pexe $BUILDFOLDER/nacl_portable/fteqw.pexe + echo " \"portable\":{\"pnacl-translate\":{\"url\":\"fteqw.pexe\"}}" >> $NACL + echo "} }" >> $NACL + rm -rf "$BUILDFOLDER/nacl_amd64" + rm -rf "$BUILDFOLDER/nacl_x86" + rm -rf "$BUILDFOLDER/nacl_arm" + rm -rf "$BUILDFOLDER/nacl_portable" +fi + +if [ "$BUILD_WINDOWS" != "n" ]; then + echo Archiving output + SVNVER=$(svnversion $SVNROOT) + cd $BUILDFOLDER/ + zip -q -9 $ARCHIVEFOLDER/win_fteqw_$SVNVER.zip win32/fteglqw.exe win32/fteqwsv.exe win32/fteqccgui.exe win32/debug/fteglqw.exe win64/fteqw.exe win64/debug/fteglqw.exe + + + cd $BUILDFOLDER/win32/ + zip -q -j -9 $BUILDFOLDER/fteqw_for_windows.zip fteglqw.exe fteqwsv.exe fteqccgui.exe fteplug_qi_x86.dll fteplug_xmpp_x86.dll fteplug_irc_x86.dll fteplug_ezhud_x86.dll + cd $HOME/3rdparty_win32/ + zip -q -9 $BUILDFOLDER/fteqw_for_windows.zip ogg.dll vorbis.dll vorbisfile.dll freetype6.dll zlib1.dll + mkdir -p $BASE/tmp/fte + cd $BASE/tmp/ + cp $BUILDFOLDER/csaddon/menu.dat fte + zip -q -9 $BUILDFOLDER/fteqw_for_windows.zip fte/menu.dat + + #~/afterquake/updatemini.sh +fi + +echo "All done" + +END=$(date +%s) +DIFF=$(( $END - $START )) +MINS=$(( $DIFF / 60 )) +echo "Total Compile Time: $MINS minutes" >> $BUILDLOGFOLDER/buildlog.txt +echo "Total Compile Time: $MINS minutes" + +cd $HOME +#./errorlog.sh +#cd $HOME +#rm .bitchxrc +#cp ./fteqw/.bitchxrc ./ +#./BitchX -a irc.quakenet.org -A -c "#fte" -n A_Gorilla diff --git a/engine/client/snd_dma.c b/engine/client/snd_dma.c index ede2d6af5..90fc2186f 100644 --- a/engine/client/snd_dma.c +++ b/engine/client/snd_dma.c @@ -3474,7 +3474,7 @@ static void S_UpdateCard(soundcardinfo_t *sc) } #ifdef HAVE_MIXER -static int S_GetMixerTime(soundcardinfo_t *sc) +int S_GetMixerTime(soundcardinfo_t *sc) { int samplepos; int fullsamples; diff --git a/engine/common/net_ssl_gnutls.c b/engine/common/net_ssl_gnutls.c index b19bfd2c1..bd3469c9a 100644 --- a/engine/common/net_ssl_gnutls.c +++ b/engine/common/net_ssl_gnutls.c @@ -94,7 +94,11 @@ typedef int (VARGS gnutls_certificate_verify_function)(gnutls_session_t session) #else #include +#if GNUTLS_VERSION_MAJOR >= 3 && defined(HAVE_DTLS) #include +#else +#undef HAVE_DTLS +#endif #define gnutls_connection_end_t unsigned int #if GNUTLS_VERSION_MAJOR < 3 || (GNUTLS_VERSION_MAJOR == 3 && GNUTLS_VERSION_MINOR < 3) @@ -728,12 +732,16 @@ qboolean SSL_InitGlobal(qboolean isserver) if (isserver) { -#define KEYFILE "c:/games/tools/ssl/key.pem" -#define CERTFILE "c:/games/tools/ssl/cert.pem" - int ret = qgnutls_certificate_set_x509_key_file(xcred[isserver], CERTFILE, KEYFILE, GNUTLS_X509_FMT_PEM); + int ret = -1; + char keyfile[MAX_OSPATH]; + char certfile[MAX_OSPATH]; + *keyfile = *certfile = 0; + if (FS_NativePath("key.pem", FS_ROOT, keyfile, sizeof(keyfile)) + if (FS_NativePath("cert.pem", FS_ROOT, certfile, sizeof(certfile)) + ret = qgnutls_certificate_set_x509_key_file(xcred[isserver], certfile, keyfile, GNUTLS_X509_FMT_PEM); if (ret < 0) { - Con_Printf("No certificate or key were found\n"); + Con_Printf("No certificate or key were found in %s and %s\n", certfile, keyfile); initstatus[isserver] = -1; } } @@ -994,6 +1002,13 @@ neterr_t DTLS_Timeouts(void *ctx) } return NETERR_SENT; } +#else +void DTLS_DestroyContext(void *ctx){} +qboolean DTLS_HasServerCertificate(void){return false;} +void *DTLS_CreateContext(void *cbctx, neterr_t(*push)(void *cbctx, const qbyte *data, size_t datasize), qboolean isserver){return NULL;} +neterr_t DTLS_Transmit(void *ctx, const qbyte *data, size_t datasize){return NETERR_DISCONNECTED;} +neterr_t DTLS_Received(void *ctx, qbyte *data, size_t datasize){return NETERR_DISCONNECTED;} +neterr_t DTLS_Timeouts(void *ctx) {return NETERR_SENT;} #endif #endif diff --git a/engine/common/net_wins.c b/engine/common/net_wins.c index 1b8d5c48d..f49d669a8 100644 --- a/engine/common/net_wins.c +++ b/engine/common/net_wins.c @@ -2955,8 +2955,9 @@ qboolean NET_PortToAdr (netadrtype_t adrfamily, netproto_t adrprot, const char * return false; } +#ifdef HAVE_PACKET /*just here to prevent the client from spamming new sockets, which can be a problem with certain q2 servers*/ -qboolean FTENET_Datagram_ChangeLocalAddress(struct ftenet_generic_connection_s *con, netadr_t *adr) +static qboolean FTENET_Datagram_ChangeLocalAddress(struct ftenet_generic_connection_s *con, netadr_t *adr) { struct sockaddr_qstorage address; netadr_t current; @@ -2980,6 +2981,7 @@ qboolean FTENET_Datagram_ChangeLocalAddress(struct ftenet_generic_connection_s * //doesn't match how its currently bound, so I guess we need to rebind then. return false; } +#endif ftenet_generic_connection_t *FTENET_Datagram_EstablishConnection(qboolean isserver, const char *address, netadr_t adr) {