diff options
Diffstat (limited to 'pkgs/games/dwarf-fortress/default.nix')
-rw-r--r-- | pkgs/games/dwarf-fortress/default.nix | 229 |
1 files changed, 22 insertions, 207 deletions
diff --git a/pkgs/games/dwarf-fortress/default.nix b/pkgs/games/dwarf-fortress/default.nix index 97c793b8a39..d91c110c34c 100644 --- a/pkgs/games/dwarf-fortress/default.nix +++ b/pkgs/games/dwarf-fortress/default.nix @@ -1,218 +1,33 @@ -{ 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 = rec { + 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.out}/lib/glib-2.0/include" - "-DGTK2_GDKCONFIG_INCLUDE_DIR=${gtk2.out}/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 - ''; - - # outputs TODO: probably wrong path-substitutions below - 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 + dwarf-fortress-unfuck = callPackage_i686 ./unfuck.nix { }; - cp -f ./${srcs.df_unfuck.name}/build/libgraphics.so $out/share/df_linux/libs/libgraphics.so - - 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.out}/lib/ld-linux.so.2 $out/share/df_linux/libs/Dwarf_Fortress + dwarf-fortress = callPackage ./wrapper { + themes = { + "phoebus" = phoebus-theme; + }; + }; - # 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 {} \; + dwarf-therapist-original = callPackage ./dwarf-therapist { + texlive = pkgs.texlive.combine { + inherit (pkgs.texlive) scheme-basic float caption wrapfig adjmulticol sidecap preprint enumitem; + }; + }; - 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 - ''; + dwarf-therapist = callPackage ./dwarf-therapist/wrapper.nix { }; - 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 ]; + phoebus-theme = callPackage ./themes/phoebus.nix { }; }; -} + +in self |