about summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorPeter Hoeg <peter@hoeg.com>2018-02-12 22:31:41 +0800
committerGitHub <noreply@github.com>2018-02-12 22:31:41 +0800
commit8016f9b4c90a99d366fe7d3666254c180f3dc834 (patch)
tree7466a012e0baa2ec50c919a0872850c72f069154 /pkgs
parent8a60770f6b31211ba3d68b812a285fdf619a544f (diff)
parente88284be2a698d9272ce90d2f5ce5b8d4d24465c (diff)
downloadnixlib-8016f9b4c90a99d366fe7d3666254c180f3dc834.tar
nixlib-8016f9b4c90a99d366fe7d3666254c180f3dc834.tar.gz
nixlib-8016f9b4c90a99d366fe7d3666254c180f3dc834.tar.bz2
nixlib-8016f9b4c90a99d366fe7d3666254c180f3dc834.tar.lz
nixlib-8016f9b4c90a99d366fe7d3666254c180f3dc834.tar.xz
nixlib-8016f9b4c90a99d366fe7d3666254c180f3dc834.tar.zst
nixlib-8016f9b4c90a99d366fe7d3666254c180f3dc834.zip
Merge pull request #34611 from peterhoeg/p/descent
descent 1 & 2: use assets from gog.com with the dxx-rebirth project
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/build-support/setup-hooks/gog-unpack.sh11
-rw-r--r--pkgs/games/dxx-rebirth/assets.nix55
-rw-r--r--pkgs/games/dxx-rebirth/full.nix30
-rw-r--r--pkgs/tools/filesystems/file-rename/default.nix24
-rw-r--r--pkgs/top-level/all-packages.nix17
5 files changed, 136 insertions, 1 deletions
diff --git a/pkgs/build-support/setup-hooks/gog-unpack.sh b/pkgs/build-support/setup-hooks/gog-unpack.sh
new file mode 100644
index 000000000000..559b543fadfc
--- /dev/null
+++ b/pkgs/build-support/setup-hooks/gog-unpack.sh
@@ -0,0 +1,11 @@
+unpackPhase="unpackGog"
+
+unpackGog() {
+    runHook preUnpackGog
+
+    innoextract --silent --extract --exclude-temp "${src}"
+
+    find . -depth -print -execdir rename -f 'y/A-Z/a-z/' '{}' \;
+
+    runHook postUnpackGog
+}
diff --git a/pkgs/games/dxx-rebirth/assets.nix b/pkgs/games/dxx-rebirth/assets.nix
new file mode 100644
index 000000000000..1fd64f5b00d0
--- /dev/null
+++ b/pkgs/games/dxx-rebirth/assets.nix
@@ -0,0 +1,55 @@
+{ stdenv, requireFile, gogUnpackHook }:
+
+let
+  generic = ver: source: let
+    pname = "descent${toString ver}";
+  in stdenv.mkDerivation rec {
+    name = "${pname}-assets-${version}";
+    version = "2.0.0.7";
+
+    src = requireFile rec {
+      name = "setup_descent12_${version}.exe";
+      sha256 = "1r1drbfda6czg21f9qqiiwgnkpszxgmcn5bafp5ljddh34swkn3f";
+      message = ''
+        While the Descent ${toString ver} game engine is free, the game assets are not.
+
+        Please purchase the game on gog.com and download the Windows installer.
+
+        Once you have downloaded the file, please use the following command and re-run the
+        installation:
+
+        nix-prefetch-url file://\$PWD/${name}
+      '';
+    };
+
+    nativeBuildInputs = [ gogUnpackHook ];
+
+    dontBuild = true;
+    dontFixup = true;
+
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out/share/{games/${pname},doc/${pname}/examples}
+      pushd "app/${source}"
+      mv dosbox*.conf $out/share/doc/${pname}/examples
+      mv *.txt *.pdf  $out/share/doc/${pname}
+      cp -r * $out/share/games/descent${toString ver}
+      popd
+
+      runHook postInstall
+    '';
+
+    meta = with stdenv.lib; {
+      description = "Descent ${toString ver} assets from GOG";
+      homepage    = http://www.dxx-rebirth.com/;
+      license     = licenses.unfree;
+      maintainers = with maintainers; [ peterhoeg ];
+      hydraPlatforms = [];
+    };
+  };
+
+in {
+  descent1-assets = generic 1 "descent";
+  descent2-assets = generic 2 "descent 2";
+}
diff --git a/pkgs/games/dxx-rebirth/full.nix b/pkgs/games/dxx-rebirth/full.nix
new file mode 100644
index 000000000000..baf8b80add10
--- /dev/null
+++ b/pkgs/games/dxx-rebirth/full.nix
@@ -0,0 +1,30 @@
+{ stdenv, makeWrapper
+, dxx-rebirth, descent1-assets, descent2-assets }:
+
+let
+  generic = ver: assets: stdenv.mkDerivation rec {
+    name = "d${toString ver}x-rebirth-full-${assets.version}";
+
+    nativeBuildInputs = [ makeWrapper ];
+
+    buildCommand = ''
+      mkdir -p $out/bin
+
+      makeWrapper ${dxx-rebirth}/bin/d${toString ver}x-rebirth $out/bin/descent${toString ver} \
+        --add-flags "-hogdir ${assets}/share/games/descent${toString ver}"
+    '';
+
+    meta = with stdenv.lib; {
+      description = "Descent ${toString ver} using the DXX-Rebirth project engine and game assets from GOG";
+      homepage    = http://www.dxx-rebirth.com/;
+      license     = with licenses; [ free unfree ];
+      maintainers = with maintainers; [ peterhoeg ];
+      platforms   = with platforms; linux;
+      hydraPlatforms = [];
+    };
+  };
+
+in {
+  d1x-rebirth-full = generic 1 descent1-assets;
+  d2x-rebirth-full = generic 2 descent2-assets;
+}
diff --git a/pkgs/tools/filesystems/file-rename/default.nix b/pkgs/tools/filesystems/file-rename/default.nix
new file mode 100644
index 000000000000..b5e9b8c5e44d
--- /dev/null
+++ b/pkgs/tools/filesystems/file-rename/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl, perlPackages, makeWrapper }:
+
+perlPackages.buildPerlPackage rec {
+  name = "File-Rename-0.20";
+
+  src = fetchurl {
+    url = "mirror://cpan/authors/id/R/RM/RMBARKER/${name}.tar.gz";
+    sha256 = "1cf6xx2hiy1xalp35fh8g73j67r0w0g66jpcbc6971x9jbm7bvjy";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/rename \
+      --prefix PERL5LIB : $out/lib/perl5/site_perl
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Perl extension for renaming multiple files";
+    homepage = http://search.cpan.org/~rmbarker;
+    license = licenses.artistic1;
+    maintainer = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 391c3017a7c9..e7995ece76a5 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -96,6 +96,11 @@ with pkgs;
     { substitutions = { gnu_config = gnu-config;}; }
     ../build-support/setup-hooks/update-autotools-gnu-config-scripts.sh;
 
+  gogUnpackHook = makeSetupHook {
+    name = "gog-unpack-hook";
+    deps = [ innoextract file-rename ]; }
+    ../build-support/setup-hooks/gog-unpack.sh;
+
   buildEnv = callPackage ../build-support/buildenv { }; # not actually a package
 
   buildFHSUserEnv = callPackage ../build-support/build-fhs-userenv { };
@@ -3236,6 +3241,8 @@ with pkgs;
 
   npm2nix = nodePackages.npm2nix;
 
+  file-rename = callPackage ../tools/filesystems/file-rename { };
+
   kea = callPackage ../tools/networking/kea {
     boost = boost165;
   };
@@ -18384,10 +18391,18 @@ with pkgs;
     physfs = physfs_2;
   };
 
+  # these are here for compatibility
   d1x_rebirth = dxx-rebirth;
-
   d2x_rebirth = dxx-rebirth;
 
+  inherit (callPackages ../games/dxx-rebirth/assets.nix { })
+    descent1-assets
+    descent2-assets;
+
+  inherit (callPackages ../games/dxx-rebirth/full.nix { })
+    d1x-rebirth-full
+    d2x-rebirth-full;
+
   easyrpg-player = callPackage ../games/easyrpg-player { };
 
   eboard = callPackage ../games/eboard { };