option(DOWNLOAD_MAPS "Download new maps from the build server" ON)
option(BUILD_RELEASE "Package a release" OFF)
-macro(subproject name)
- if (EXISTS "${PROJECT_SOURCE_DIR}/${name}/CMakeLists.txt")
+macro(subproject id name)
+ if (EXISTS "${PROJECT_SOURCE_DIR}/${name}/CMakeLists.txt" AND NOT DEFINED ENV{XON_NO_${id}})
add_subdirectory(${name} ${ARGN})
endif ()
endmacro()
-subproject(daemon)
-subproject(d0_blind_id)
-subproject(darkplaces)
-subproject(data/xonotic-data.pk3dir)
-subproject(gmqcc)
-subproject(netradiant)
+subproject(DAEMON daemon)
+subproject(PKI d0_blind_id)
+subproject(DP darkplaces)
+subproject(DATA data/xonotic-data.pk3dir)
+subproject(QCC gmqcc)
+subproject(RADIANT netradiant)
if (DOWNLOAD_MAPS)
add_custom_target(update-maps ALL
--- /dev/null
+# nix-shell -A xonotic
+{
+ nixpkgs ? <nixpkgs>,
+ pkgs ? (import nixpkgs) {}
+}:
+with pkgs;
+let
+ VERSION = "0.8.2";
+ targets = rec {
+ xonotic = stdenv.mkDerivation rec {
+
+ XON_NO_DAEMON = true;
+ XON_NO_RADIANT = true;
+
+ XON_NO_QCC = true;
+ QCC = "${gmqcc}/gmqcc";
+
+ version = VERSION;
+
+ name = "xonotic-${version}";
+
+ src = lib.sourceFilesBySuffices ./. [
+ ".txt" ".cmake" ".in"
+ ".c" ".cpp" ".h"
+ ".inc" ".def"
+ ".qc" ".qh"
+ ".sh"
+ ];
+
+ enableParallelBuilding = true;
+
+ cmakeFlags = [
+ "-DDOWNLOAD_MAPS=0"
+ ];
+
+ nativeBuildInputs = [
+ cmake # for building
+ git # for versioning
+ # unzip # for downloading maps
+ ];
+
+ buildInputs = [
+ openssl # for d0_blind_id
+ SDL2 # for darkplaces
+ ];
+
+ runtimeInputs = [
+ zlib
+ curl
+
+ libjpeg
+ libpng
+
+ freetype
+
+ libogg
+ libtheora
+ libvorbis
+ ];
+
+ shellHook = ''
+ export LD_LIBRARY_PATH=''${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}${lib.makeLibraryPath runtimeInputs}
+ '';
+
+ installPhase = ''
+ mkdir $out
+
+ exe=darkplaces/darkplaces
+ rpath=$(patchelf --print-rpath $exe)
+ rpath_firstparty=$out/d0_blind_id
+ rpath_thirdparty=${lib.makeLibraryPath runtimeInputs}
+ rpath=''${rpath:+$rpath:}$rpath_firstparty:$rpath_thirdparty
+ patchelf --set-rpath $rpath $exe
+
+ cp -r . $out
+ '';
+
+ dontPatchELF = true;
+ };
+
+ gmqcc = stdenv.mkDerivation rec {
+ version = "xonotic-${VERSION}";
+
+ name = "gmqcc-${version}";
+
+ src = ./gmqcc;
+
+ enableParallelBuilding = true;
+
+ installPhase = ''
+ mkdir $out
+ cp -r . $out
+ '';
+ };
+ };
+in targets