X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fxonotic.git;a=blobdiff_plain;f=default.nix;h=4ee0c65ae485af1edf9d9cb4b3429f231ea6d5d2;hp=fe38854085cb4a93fca063c9deb240d81809d932;hb=cf8cc7e9f8ac5457b6165198999dd3fd9ba33941;hpb=a9564d6edd6a095fa12661dafc9929ee1737bce3 diff --git a/default.nix b/default.nix index fe388540..4ee0c65a 100644 --- a/default.nix +++ b/default.nix @@ -1,25 +1,19 @@ -# nix-shell -A xonotic +# nix-shell -A shell # --argstr cc clang { nixpkgs ? , pkgs ? (import nixpkgs) {}, - cc ? null, + cc ? null }: with pkgs; let VERSION = "0.8.2"; - stdenv = if (cc != null) then overrideCC pkgs.stdenv pkgs."${cc}" else pkgs.stdenv; + cmake = pkgs.cmake_2_8; targets = rec { - xonotic = stdenv.mkDerivation rec { + xonotic = mkDerivation { pki = true; dp = true; data = true; } rec { name = "xonotic-${version}"; version = VERSION; - XON_NO_DAEMON = true; - XON_NO_RADIANT = true; - - XON_NO_QCC = true; - QCC = "${gmqcc}/gmqcc"; - src = lib.sourceFilesBySuffices ./. [ ".txt" ".cmake" ".in" ".c" ".cpp" ".h" @@ -28,11 +22,9 @@ let ".sh" ]; - enableParallelBuilding = true; - - cmakeFlags = [ - "-DDOWNLOAD_MAPS=0" - ]; + env = { + QCC = "${gmqcc}/bin/gmqcc"; + }; nativeBuildInputs = [ cmake # for building @@ -40,6 +32,10 @@ let # unzip # for downloading maps ]; + cmakeFlags = [ + "-DDOWNLOAD_MAPS=0" + ]; + buildInputs = [ openssl # for d0_blind_id SDL2 # for darkplaces @@ -59,10 +55,6 @@ let libvorbis ]; - shellHook = '' - export LD_LIBRARY_PATH=''${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}${lib.makeLibraryPath runtimeInputs} - ''; - installPhase = '' mkdir $out @@ -79,47 +71,37 @@ let dontPatchELF = true; }; - gmqcc = stdenv.mkDerivation rec { + gmqcc = mkDerivation { qcc = true; } rec { name = "gmqcc-${version}"; version = "xonotic-${VERSION}"; src = ./gmqcc; - enableParallelBuilding = true; - installPhase = '' - mkdir $out - cp -r . $out + mkdir -p $out/bin + cp gmqcc $out/bin ''; }; - netradiant = stdenv.mkDerivation rec { + netradiant = mkDerivation { radiant = true; } rec { name = "netradiant-${version}"; version = VERSION; - XON_NO_DAEMON = true; - XON_NO_DP = true; - XON_NO_PKI = true; - XON_NO_QCC = true; - XON_NO_DATA = true; - src = ./netradiant; - enableParallelBuilding = true; - - cmakeFlags = [ - "-DDOWNLOAD_MAPS=0" - "-DGTK_NS=GTK" - ]; - nativeBuildInputs = [ cmake # for building git # for versioning ]; + cmakeFlags = [ + "-DDOWNLOAD_MAPS=0" + ]; + buildInputs = [ pkgconfig glib + pcre libxml2 ncurses libjpeg @@ -132,10 +114,42 @@ let xorg.libXmu xorg.libSM xorg.libICE + xorg.libpthreadstubs + xorg.libXdmcp + gnome3.gtk gnome2.gtk gnome2.gtkglext ]; }; }; -in targets + stdenv = if (cc != null) then overrideCC pkgs.stdenv pkgs."${cc}" else pkgs.stdenv; + mkEnableTargets = args: { + XON_NO_PKI = !args?pki; + XON_NO_DP = !args?dp; + XON_NO_DATA = !args?data; + XON_NO_QCC = !args?qcc; + XON_NO_RADIANT = !args?radiant; + }; + mkDerivation = targets: {env ? {}, shellHook ? "", runtimeInputs ? [], ...}@args: + stdenv.mkDerivation ( + (mkEnableTargets targets) + // { enableParallelBuilding = true; } + // (removeAttrs args ["env" "shellHook" "runtimeInputs"]) # passthru + // env + // { + shellHook = '' + ${shellHook} + ${lib.concatStringsSep "\n" (lib.mapAttrsToList (n: v: "export ${n}=${v}") env)} + export LD_LIBRARY_PATH=''${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}${lib.makeLibraryPath runtimeInputs} + ''; + } + ); + shell = let inputs = (lib.mapAttrsToList (n: v: v) targets); in stdenv.mkDerivation (rec { + name = "xon-shell"; + XON_NO_DAEMON = true; + nativeBuildInputs = builtins.map (it: it.nativeBuildInputs) inputs; + buildInputs = builtins.map (it: it.buildInputs) inputs; + shellHook = builtins.map (it: it.shellHook) (builtins.filter (it: it?shellHook) inputs); + }); +in { inherit shell; } // targets