summary refs log tree commit diff
path: root/pkgs/games/dwarf-fortress/default.nix
diff options
context:
space:
mode:
authorNikolay Amiantov <ab@fmap.me>2016-01-12 20:56:59 +0300
committerNikolay Amiantov <ab@fmap.me>2016-01-26 03:03:12 +0300
commit92cda7a6bb17948523feefece3c20e35bb213daa (patch)
tree0e17ef99d3ca88087c6c1d94e15b8fc0ce534a6e /pkgs/games/dwarf-fortress/default.nix
parente409d0fed3b5d50147b61b6d223d9aa272863485 (diff)
downloadnixpkgs-92cda7a6bb17948523feefece3c20e35bb213daa.tar
nixpkgs-92cda7a6bb17948523feefece3c20e35bb213daa.tar.gz
nixpkgs-92cda7a6bb17948523feefece3c20e35bb213daa.tar.bz2
nixpkgs-92cda7a6bb17948523feefece3c20e35bb213daa.tar.lz
nixpkgs-92cda7a6bb17948523feefece3c20e35bb213daa.tar.xz
nixpkgs-92cda7a6bb17948523feefece3c20e35bb213daa.tar.zst
nixpkgs-92cda7a6bb17948523feefece3c20e35bb213daa.zip
dwarf-fortress: 0.40.24 -> 0.42.05, split derivations
This is a massive rework of the current dwarf_fortress package.
The main reason for rework is to split game, its libraries and wrappers,
enabling builds on Hydra and general maintainability.

dfhack, dwarf-fortress-unfuck, dwarf-fortress-original and dwarf-fortress
are now all separate derivations. All were updated to the latest versions
supporting DF 0.42.04 (some things taken from development branches):

dfhack: 20150927 -> 20160118
dwarf-fortress-unfuck: 0.40.24 -> 20160118
dwarf-fortress-original: 0.40.24 -> 0.42.05

dfhack got a patch for using more system libraries.

Wrapper scripts were also redone -- now they support DF_DIR variable (for
setting another data directory) and try to save more space by means of
symlinking. They now try to be more smart, updating those directories that were
not touched by user automatically.

All the new packages now reside in dwarf-fortress-packages. dwarf_fortress was
renamed into dwarf-fortress per our conventions, old name is deprecated. Also
duplicate dfhack derivation is removed.

Also drop dwarfFortress.enableDFHack config option; it can be re-added later
but now is deemed controversial.
Diffstat (limited to 'pkgs/games/dwarf-fortress/default.nix')
-rw-r--r--pkgs/games/dwarf-fortress/default.nix220
1 files changed, 11 insertions, 209 deletions
diff --git a/pkgs/games/dwarf-fortress/default.nix b/pkgs/games/dwarf-fortress/default.nix
index ad2733df079..d73f932ac03 100644
--- a/pkgs/games/dwarf-fortress/default.nix
+++ b/pkgs/games/dwarf-fortress/default.nix
@@ -1,217 +1,19 @@
-{ stdenv, fetchgit, fetchurl, cmake, glew, ncurses
-, SDL, SDL_image, SDL_ttf, gtk2, glib
-, mesa, openal, pango, atk, gdk_pixbuf, glibc, libsndfile
-# begin dfhack-only parameters
-, XMLLibXML
-, XMLLibXSLT
-, perl
-, zlib
-# end dfhack-only parameters
-, enableDFHack ? false
-}:
+{ pkgs, pkgsi686Linux }:
 
 let
-  baseVersion = "40";
-  patchVersion = "24";
-  srcs = {
-    df_unfuck = fetchgit {
-      url = "https://github.com/svenstaro/dwarf_fortress_unfuck";
-      rev = "39742d64d2886fb594d79e7cc4b98fb917f26811";
-      sha256 = "19vwx6kpv1sf93bx5v8x47f7x2cgxsqk82v6j1a72sa3q7m5cpc7";
-    };
+  callPackage = pkgs.newScope self;
+  callPackage_i686 = pkgsi686Linux.newScope self;
 
-    dfhack = fetchgit {
-      url = "https://github.com/DFHack/dfhack.git";
-      rev = "0849099f2083e100cae6f64940b4eff4c28ce2eb";
-      sha256 = "0lnqrayi8hwfivkrxb7fw8lb6v95i04pskny1px7084n7nzvyv8b";
-    };
+  self = {
+    dwarf-fortress-original = callPackage_i686 ./game.nix { };
 
-    df = fetchurl {
-      url = "http://www.bay12games.com/dwarves/df_${baseVersion}_${patchVersion}_linux.tar.bz2";
-      sha256 = "0d4jrs45qj89vq9mjg7fxxhis7zivvb0vzjpmkk274b778kccdys";
+    dfhack = callPackage_i686 ./dfhack {
+      inherit (pkgsi686Linux.perlPackages) XMLLibXML XMLLibXSLT;
     };
-  };
-
-  dfHackWorksWithCurrentVersion = true;
-  dfHackEnabled = dfHackWorksWithCurrentVersion && enableDFHack;
-
-in
-
-assert stdenv.system == "i686-linux";
-
-stdenv.mkDerivation rec {
-  name = "dwarf-fortress-0.${baseVersion}.${patchVersion}";
-
-  inherit baseVersion patchVersion;
-
-  buildInputs = [
-    SDL
-    SDL_image
-    SDL_ttf
-    gtk2
-    glib
-    glew
-    mesa
-    ncurses
-    openal
-    glibc
-    libsndfile
-    pango
-    atk
-    cmake
-    gdk_pixbuf
-    XMLLibXML
-    XMLLibXSLT
-    perl
-    zlib
-  ];
-  src = "${srcs.df_unfuck} ${srcs.df}" + stdenv.lib.optionalString dfHackEnabled " ${srcs.dfhack}";
-
-  sourceRoot = srcs.df_unfuck.name;
-  dfHackSourceRoot = srcs.dfhack.name;
-
-  cmakeFlags = [
-    "-DGTK2_GLIBCONFIG_INCLUDE_DIR=${glib}/lib/glib-2.0/include"
-    "-DGTK2_GDKCONFIG_INCLUDE_DIR=${gtk2}/lib/gtk-2.0/include"
-  ];
-
-  permission = ./df_permission;
-  dfHackTemplate = ./dwarf-fortress-hacked.in;
-  dfHackRunTemplate = ./dfhack-run.in;
-  dwarfFortressTemplate = ./dwarf-fortress.in;
-  installDfDataToHome = ./install-df-data-to-home.sh;
-  installDfhackDataToHome = ./install-dfhack-data-to-home.sh;
-  installDfDataContentToHome = ./install-df-data-content-to-home.sh;
-  exportLibsTemplate = ./export-libs.sh.in;
-  exportWorkaround = ./export-workaround.sh;
-
-  postUnpack = stdenv.lib.optionalString dfHackEnabled ''
-    if [ "$dontMakeSourcesWritable" != 1 ]; then
-      chmod -R u+w "$dfHackSourceRoot"
-    fi
-  '';
-
-  preConfigure = stdenv.lib.optionalString dfHackEnabled ''
-    export cmakeFlags="-DCMAKE_INSTALL_PREFIX=$out/share/df_linux $cmakeFlags"
-    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/build/depends/protobuf
-  '';
-
-  postConfigure = stdenv.lib.optionalString dfHackEnabled ''
-    if [ -z "$originalSourceRoot" ]; then
-
-      originalSourceRoot=$sourceRoot
-      export sourceRoot=$dfHackSourceRoot
-
-      pushd ../../$sourceRoot
-
-      eval "''${configurePhase:-configurePhase}"
-
-      popd
-
-      export sourceRoot=$originalSourceRoot
-      unset originalSourceRoot
-    fi
-  '';
-
-  installPhase = ''
-    set -x
-    mkdir -p $out/bin
-    mkdir -p $out/share/df_linux
-    pushd ../../
-    cp -r ./df_linux/* $out/share/df_linux
-    rm $out/share/df_linux/libs/lib*
-
-    # Store the original hash
-    orig_hash=$(md5sum $out/share/df_linux/libs/Dwarf_Fortress | awk '{ print $1 }')
-    echo $orig_hash | cut -c1-8 > $out/share/df_linux/hash.md5.orig  # for dwarf-therapist
-    echo $orig_hash > $out/share/df_linux/full-hash-orig.md5  # for dfhack
 
-    cp -f ./${srcs.df_unfuck.name}/build/libgraphics.so $out/share/df_linux/libs/libgraphics.so
+    dwarf-fortress-unfuck = callPackage_i686 ./unfuck.nix { };
 
-    cp $permission $out/share/df_linux/nix_permission
-
-    # Placeholder files for hashes of patched binary
-    touch $out/share/df_linux/hash.md5.patched
-    touch $out/share/df_linux/full-hash-patched.md5
-
-    mkdir -p $out/share/df_linux/shell
-    cp $installDfDataToHome $out/share/df_linux/shell/install-df-data-to-home.sh
-    cp $installDfhackDataToHome $out/share/df_linux/shell/install-dfhack-data-to-home.sh
-    cp $installDfDataContentToHome $out/share/df_linux/shell/install-df-data-content-to-home.sh
-    cp $exportWorkaround $out/share/df_linux/shell/export-workaround.sh
-    substitute $exportLibsTemplate $out/share/df_linux/shell/export-libs.sh \
-        --subst-var-by stdenv_cc ${stdenv.cc} \
-        --subst-var-by SDL ${SDL} \
-        --subst-var-by SDL_image ${SDL_image} \
-        --subst-var-by SDL_ttf ${SDL_ttf} \
-        --subst-var-by gtk2 ${gtk2} \
-        --subst-var-by glib ${glib} \
-        --subst-var-by libsndfile ${libsndfile} \
-        --subst-var-by mesa ${mesa} \
-        --subst-var-by openal ${openal} \
-        --subst-var-by zlib ${zlib} \
-
-    substitute $dwarfFortressTemplate $out/bin/dwarf-fortress \
-        --subst-var-by stdenv_shell ${stdenv.shell} \
-        --subst-var prefix
-
-    chmod 755 $out/bin/dwarf-fortress
-
-    popd
-  '' + stdenv.lib.optionalString dfHackEnabled ''
-
-    originalSourceRoot=$sourceRoot
-    export sourceRoot=$dfHackSourceRoot
-
-    pushd ../../$sourceRoot/build
-
-    mkdir -p $out/dfhack
-
-    make install
-
-    cp ../package/linux/dfhack $out/dfhack/
-
-    mkdir -p $out/bin
-
-    substitute $dfHackTemplate $out/bin/dfhack \
-        --subst-var-by stdenv_shell ${stdenv.shell} \
-        --subst-var prefix
-    chmod 755 $out/bin/dfhack
-
-    substitute $dfHackRunTemplate $out/bin/dfhack-run \
-        --subst-var-by stdenv_shell ${stdenv.shell} \
-        --subst-var prefix
-    chmod 755 $out/bin/dfhack-run
-
-    popd
-
-    export sourceRoot=$originalSourceRoot
-    unset originalSourceRoot
-  '';
-
-  fixupPhase = ''
-    # Fix rpath
-    patchelf --set-rpath "${stdenv.lib.makeLibraryPath [ stdenv.cc.cc stdenv.glibc ]}:$out/share/df_linux/libs" $out/share/df_linux/libs/Dwarf_Fortress
-
-    patchelf --set-interpreter ${glibc}/lib/ld-linux.so.2 $out/share/df_linux/libs/Dwarf_Fortress
-
-    # Store new hash
-    patched_hash=$(md5sum $out/share/df_linux/libs/Dwarf_Fortress | awk '{ print $1 }')
-    echo $patched_hash | cut -c1-8 > $out/share/df_linux/hash.md5.patched  # for dwarf-therapist
-    echo $patched_hash > $out/share/df_linux/full-hash-patched.md5  # for dfhack
-  '' + stdenv.lib.optionalString dfHackEnabled ''
-    find $out/share/df_linux/hack \( \
-        \( -type f -a -name "*.so*" \) -o \
-        \( -type f -a -perm +0100 \) \
-        \) -print -exec patchelf --shrink-rpath {} \;
-
-    sed -i "s/$(cat $out/share/df_linux/full-hash-orig.md5)/$(cat $out/share/df_linux/full-hash-patched.md5)/" $out/share/df_linux/hack/symbols.xml
-  '';
-
-  meta = {
-    description = "A single-player fantasy game with a randomly generated adventure world";
-    homepage = http://www.bay12games.com/dwarves;
-    license = stdenv.lib.licenses.unfreeRedistributable;
-    maintainers = with stdenv.lib.maintainers; [ a1russell robbinch roconnor the-kenny ];
+    dwarf-fortress = callPackage ./wrapper { };
   };
-}
+
+in self