From 92cda7a6bb17948523feefece3c20e35bb213daa Mon Sep 17 00:00:00 2001 From: Nikolay Amiantov Date: Tue, 12 Jan 2016 20:56:59 +0300 Subject: [PATCH 1/6] 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. --- pkgs/games/dfhack/default.nix | 62 ----- pkgs/games/dwarf-fortress/default.nix | 222 +----------------- pkgs/games/dwarf-fortress/dfhack-run.in | 11 - pkgs/games/dwarf-fortress/dfhack/default.nix | 49 ++++ .../dfhack/use-system-libraries.patch | 138 +++++++++++ .../dwarf-fortress/dwarf-fortress-hacked.in | 13 - pkgs/games/dwarf-fortress/dwarf-fortress.in | 14 -- pkgs/games/dwarf-fortress/export-libs.sh.in | 12 - .../games/dwarf-fortress/export-workaround.sh | 1 - pkgs/games/dwarf-fortress/game.nix | 52 ++++ .../install-df-data-content-to-home.sh | 4 - .../dwarf-fortress/install-df-data-to-home.sh | 12 - .../install-dfhack-data-to-home.sh | 16 -- pkgs/games/dwarf-fortress/unfuck.nix | 41 ++++ pkgs/games/dwarf-fortress/wrapper/default.nix | 47 ++++ pkgs/games/dwarf-fortress/wrapper/dfhack.in | 17 ++ .../wrapper/dwarf-fortress-init.in | 43 ++++ .../dwarf-fortress/wrapper/dwarf-fortress.in | 6 + pkgs/top-level/all-packages.nix | 15 +- 19 files changed, 409 insertions(+), 366 deletions(-) delete mode 100644 pkgs/games/dfhack/default.nix delete mode 100644 pkgs/games/dwarf-fortress/dfhack-run.in create mode 100644 pkgs/games/dwarf-fortress/dfhack/default.nix create mode 100644 pkgs/games/dwarf-fortress/dfhack/use-system-libraries.patch delete mode 100644 pkgs/games/dwarf-fortress/dwarf-fortress-hacked.in delete mode 100644 pkgs/games/dwarf-fortress/dwarf-fortress.in delete mode 100644 pkgs/games/dwarf-fortress/export-libs.sh.in delete mode 100644 pkgs/games/dwarf-fortress/export-workaround.sh create mode 100644 pkgs/games/dwarf-fortress/game.nix delete mode 100644 pkgs/games/dwarf-fortress/install-df-data-content-to-home.sh delete mode 100644 pkgs/games/dwarf-fortress/install-df-data-to-home.sh delete mode 100644 pkgs/games/dwarf-fortress/install-dfhack-data-to-home.sh create mode 100644 pkgs/games/dwarf-fortress/unfuck.nix create mode 100644 pkgs/games/dwarf-fortress/wrapper/default.nix create mode 100644 pkgs/games/dwarf-fortress/wrapper/dfhack.in create mode 100644 pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in create mode 100644 pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in diff --git a/pkgs/games/dfhack/default.nix b/pkgs/games/dfhack/default.nix deleted file mode 100644 index 046f11545a55..000000000000 --- a/pkgs/games/dfhack/default.nix +++ /dev/null @@ -1,62 +0,0 @@ -{ stdenv, fetchgit, dwarf_fortress, cmake, zlib, perl, XMLLibXML, XMLLibXSLT -}: - -let - baseVersion = "40"; - patchVersion = "24-r3"; - src = fetchgit { - url = "https://github.com/DFHack/dfhack.git"; - rev = "0849099f2083e100cae6f64940b4eff4c28ce2eb"; - sha256 = "0lnqrayi8hwfivkrxb7fw8lb6v95i04pskny1px7084n7nzvyv8b"; - }; - -in - -assert stdenv.system == "i686-linux"; -assert dwarf_fortress.name == "dwarf-fortress-0.40.24"; - -stdenv.mkDerivation rec { - name = "dfhack-0.${baseVersion}.${patchVersion}"; - - inherit baseVersion patchVersion src; - - buildInputs = [ cmake zlib perl XMLLibXML XMLLibXSLT ]; - - preConfigure = '' - export cmakeFlags="-DCMAKE_INSTALL_PREFIX=$prefix/dfhack $cmakeFlags" - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`/build/depends/protobuf - ''; - - installPhase = '' - mkdir -p $out/dfhack - make install - cp ../package/linux/dfhack $out/dfhack/ - mkdir -p $out/bin - cat > $out/bin/dfhack_install_dir < dfhack - # write md5sum of binary - sed -e s/c42f55948a448645d6609102ef6439e8/`md5sum ${dwarf_fortress}/share/df_linux/libs/Dwarf_Fortress | cut -f1 -d\ `/ $out/dfhack/hack/symbols.xml > hack/symbols.xml - - echo "DFHack installed successfully in \$1. To play, run ./dfhack in it." - - EOF - chmod +x $out/bin/dfhack_install_dir - ''; - - meta = { - description = "A Dwarf Fortress memory access library"; - homepage = https://github.com/DFHack/dfhack; - license = stdenv.lib.licenses.bsd2; - maintainers = with stdenv.lib.maintainers; [ robbinch ]; - }; -} diff --git a/pkgs/games/dwarf-fortress/default.nix b/pkgs/games/dwarf-fortress/default.nix index ad2733df079d..d73f932ac032 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; + + self = { + dwarf-fortress-original = callPackage_i686 ./game.nix { }; + + dfhack = callPackage_i686 ./dfhack { + inherit (pkgsi686Linux.perlPackages) XMLLibXML XMLLibXSLT; }; - dfhack = fetchgit { - url = "https://github.com/DFHack/dfhack.git"; - rev = "0849099f2083e100cae6f64940b4eff4c28ce2eb"; - sha256 = "0lnqrayi8hwfivkrxb7fw8lb6v95i04pskny1px7084n7nzvyv8b"; - }; + dwarf-fortress-unfuck = callPackage_i686 ./unfuck.nix { }; - df = fetchurl { - url = "http://www.bay12games.com/dwarves/df_${baseVersion}_${patchVersion}_linux.tar.bz2"; - sha256 = "0d4jrs45qj89vq9mjg7fxxhis7zivvb0vzjpmkk274b778kccdys"; - }; + dwarf-fortress = callPackage ./wrapper { }; }; - 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 - - 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 ]; - }; -} +in self diff --git a/pkgs/games/dwarf-fortress/dfhack-run.in b/pkgs/games/dwarf-fortress/dfhack-run.in deleted file mode 100644 index 590e5b25acf3..000000000000 --- a/pkgs/games/dwarf-fortress/dfhack-run.in +++ /dev/null @@ -1,11 +0,0 @@ -#!@stdenv_shell@ - -data_dir=${XDG_DATA_HOME:-$HOME/.local/share}/df_linux -pkg_dir=@prefix@/share/df_linux - -. $pkg_dir/shell/install-df-data-to-home.sh -. $pkg_dir/shell/install-dfhack-data-to-home.sh -. $pkg_dir/shell/export-libs.sh - -cd "$data_dir" -exec ./dfhack-run "$@" diff --git a/pkgs/games/dwarf-fortress/dfhack/default.nix b/pkgs/games/dwarf-fortress/dfhack/default.nix new file mode 100644 index 000000000000..92b9d57da421 --- /dev/null +++ b/pkgs/games/dwarf-fortress/dfhack/default.nix @@ -0,0 +1,49 @@ +{ stdenv, fetchgit, cmake, writeScriptBin +, perl, XMLLibXML, XMLLibXSLT +, zlib +, jsoncpp, protobuf, tinyxml +}: + +let + rev = "f61ff9147e00f3c379ac0458e79eb556a5de1b68"; + dfVersion = "0.42.05"; + + fakegit = writeScriptBin "git" '' + #! ${stdenv.shell} + if [ "$*" = "describe --tags --long" ]; then + echo "${dfVersion}-unknown" + elif [ "$*" = "rev-parse HEAD" ]; then + echo "${rev}" + else + exit 1 + fi + ''; + +in stdenv.mkDerivation { + name = "dfhack-20160118"; + + # Beware of submodules + src = fetchgit { + url = "https://github.com/DFHack/dfhack"; + inherit rev; + sha256 = "1ah3cplp4mb9pq7rm1cmn8klfjxw3y2xfzy7734i81b3iwiwlpi4"; + }; + + patches = [ ./use-system-libraries.patch ]; + + nativeBuildInputs = [ cmake perl XMLLibXML XMLLibXSLT fakegit ]; + # we can't use native Lua; upstream uses private headers + buildInputs = [ zlib jsoncpp protobuf tinyxml ]; + + enableParallelBuilding = true; + + passthru = { inherit dfVersion; }; + + meta = with stdenv.lib; { + description = "Memory hacking library for Dwarf Fortress and a set of tools that use it"; + homepage = https://github.com/DFHack/dfhack/; + license = licenses.zlib; + platforms = [ "i686-linux" ]; + maintainers = with maintainers; [ robbinch a1russell abbradar ]; + }; +} diff --git a/pkgs/games/dwarf-fortress/dfhack/use-system-libraries.patch b/pkgs/games/dwarf-fortress/dfhack/use-system-libraries.patch new file mode 100644 index 000000000000..2ae3620fff6f --- /dev/null +++ b/pkgs/games/dwarf-fortress/dfhack/use-system-libraries.patch @@ -0,0 +1,138 @@ +From 1196fcb987b6aadb49075d817b3615bf8a6d7d51 Mon Sep 17 00:00:00 2001 +From: Nikolay Amiantov +Date: Wed, 6 Jan 2016 03:07:20 +0300 +Subject: [PATCH 2/2] Use as much system libraries as possible + +--- + CMakeLists.txt | 5 ----- + depends/CMakeLists.txt | 3 --- + library/CMakeLists.txt | 10 +++++----- + plugins/CMakeLists.txt | 4 ++-- + plugins/mapexport/CMakeLists.txt | 4 ++-- + plugins/stockpiles/CMakeLists.txt | 4 ++-- + 6 files changed, 11 insertions(+), 19 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 1933390..d871df4 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -152,8 +152,6 @@ ELSEIF(MSVC) + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od") + ENDIF() + +-# use shared libraries for protobuf +-ADD_DEFINITIONS(-DPROTOBUF_USE_DLLS) + ADD_DEFINITIONS(-DLUA_BUILD_AS_DLL) + + if(APPLE) +@@ -173,11 +171,8 @@ if(NOT UNIX) + endif() + set(ZLIB_ROOT /usr/lib/i386-linux-gnu) + find_package(ZLIB REQUIRED) +-include_directories(depends/protobuf) + include_directories(depends/lua/include) + include_directories(depends/md5) +-include_directories(depends/jsoncpp) +-include_directories(depends/tinyxml) + include_directories(depends/tthread) + include_directories(${ZLIB_INCLUDE_DIRS}) + include_directories(depends/clsocket/src) +diff --git a/depends/CMakeLists.txt b/depends/CMakeLists.txt +index bf0345b..2a1a852 100644 +--- a/depends/CMakeLists.txt ++++ b/depends/CMakeLists.txt +@@ -1,10 +1,7 @@ + #list depends here. + add_subdirectory(lua) + add_subdirectory(md5) +-add_subdirectory(protobuf) +-add_subdirectory(tinyxml) + add_subdirectory(tthread) +-add_subdirectory(jsoncpp) + # build clsocket static and only as a dependency. Setting those options here overrides its own default settings. + OPTION(CLSOCKET_SHARED "Build clsocket lib as shared." OFF) + OPTION(CLSOCKET_DEP_ONLY "Build for use inside other CMake projects as dependency." ON) +diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt +index 5071d9e..d346d1e 100644 +--- a/library/CMakeLists.txt ++++ b/library/CMakeLists.txt +@@ -203,10 +203,10 @@ LIST(APPEND PROJECT_SOURCES ${PROJECT_PROTO_SRCS}) + + ADD_CUSTOM_COMMAND( + OUTPUT ${PROJECT_PROTO_SRCS} ${PROJECT_PROTO_HDRS} +- COMMAND protoc-bin -I=${CMAKE_CURRENT_SOURCE_DIR}/proto/ ++ COMMAND protoc -I=${CMAKE_CURRENT_SOURCE_DIR}/proto/ + --cpp_out=dllexport_decl=DFHACK_EXPORT:${CMAKE_CURRENT_SOURCE_DIR}/proto/ + ${PROJECT_PROTOS} +- DEPENDS protoc-bin ${PROJECT_PROTOS} ++ DEPENDS ${PROJECT_PROTOS} + ) + + # Merge headers into sources +@@ -249,12 +249,12 @@ IF(UNIX) + ENDIF() + + IF(APPLE) +- SET(PROJECT_LIBS dl dfhack-md5 dfhack-tinyxml dfhack-tinythread) ++ SET(PROJECT_LIBS dl dfhack-md5 tinyxml dfhack-tinythread) + ELSEIF(UNIX) +- SET(PROJECT_LIBS rt dl dfhack-md5 dfhack-tinyxml dfhack-tinythread) ++ SET(PROJECT_LIBS rt dl dfhack-md5 tinyxml dfhack-tinythread) + ELSE(WIN32) + #FIXME: do we really need psapi? +- SET(PROJECT_LIBS psapi dfhack-md5 dfhack-tinyxml dfhack-tinythread) ++ SET(PROJECT_LIBS psapi dfhack-md5 tinyxml dfhack-tinythread) + ENDIF() + + ADD_LIBRARY(dfhack-version STATIC DFHackVersion.cpp) +diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt +index 9781401..ece508c 100644 +--- a/plugins/CMakeLists.txt ++++ b/plugins/CMakeLists.txt +@@ -69,11 +69,11 @@ STRING(REPLACE ".proto" ".pb.h" PROJECT_PROTO_HDRS "${PROJECT_PROTOS}") + + ADD_CUSTOM_COMMAND( + OUTPUT ${PROJECT_PROTO_SRCS} ${PROJECT_PROTO_HDRS} +- COMMAND protoc-bin -I=${dfhack_SOURCE_DIR}/library/proto/ ++ COMMAND protoc -I=${dfhack_SOURCE_DIR}/library/proto/ + -I=${CMAKE_CURRENT_SOURCE_DIR}/proto/ + --cpp_out=${CMAKE_CURRENT_SOURCE_DIR}/proto/ + ${PROJECT_PROTOS} +- DEPENDS protoc-bin ${PROJECT_PROTOS} ++ DEPENDS ${PROJECT_PROTOS} + ) + add_custom_target(generate_proto DEPENDS ${PROJECT_PROTO_SRCS} ${PROJECT_PROTO_HDRS}) + +diff --git a/plugins/mapexport/CMakeLists.txt b/plugins/mapexport/CMakeLists.txt +index 429507a..7e2390a 100644 +--- a/plugins/mapexport/CMakeLists.txt ++++ b/plugins/mapexport/CMakeLists.txt +@@ -32,8 +32,8 @@ LIST(APPEND PROJECT_SRCS ${PROJECT_HDRS}) + #Generate sources from our proto files and store them in the source tree + ADD_CUSTOM_COMMAND( + OUTPUT ${PROJECT_PROTO_SRCS} ${PROJECT_PROTO_HDRS} +-COMMAND protoc-bin -I=${CMAKE_CURRENT_SOURCE_DIR}/proto/ --cpp_out=${CMAKE_CURRENT_SOURCE_DIR}/proto/ ${PROJECT_PROTOS} +-DEPENDS protoc-bin ${PROJECT_PROTOS} ++COMMAND protoc -I=${CMAKE_CURRENT_SOURCE_DIR}/proto/ --cpp_out=${CMAKE_CURRENT_SOURCE_DIR}/proto/ ${PROJECT_PROTOS} ++DEPENDS ${PROJECT_PROTOS} + ) + + IF(WIN32) +diff --git a/plugins/stockpiles/CMakeLists.txt b/plugins/stockpiles/CMakeLists.txt +index 713c3d6..dd2d4cb 100644 +--- a/plugins/stockpiles/CMakeLists.txt ++++ b/plugins/stockpiles/CMakeLists.txt +@@ -33,8 +33,8 @@ LIST(APPEND PROJECT_SRCS ${PROJECT_HDRS}) + #Generate sources from our proto files and store them in the source tree + ADD_CUSTOM_COMMAND( + OUTPUT ${PROJECT_PROTO_SRCS} ${PROJECT_PROTO_HDRS} +-COMMAND protoc-bin -I=${CMAKE_CURRENT_SOURCE_DIR}/proto/ --cpp_out=${CMAKE_CURRENT_SOURCE_DIR}/proto/ ${PROJECT_PROTOS} +-DEPENDS protoc-bin ${PROJECT_PROTOS} ++COMMAND protoc -I=${CMAKE_CURRENT_SOURCE_DIR}/proto/ --cpp_out=${CMAKE_CURRENT_SOURCE_DIR}/proto/ ${PROJECT_PROTOS} ++DEPENDS ${PROJECT_PROTOS} + ) + + IF(WIN32) +-- +2.6.3 + diff --git a/pkgs/games/dwarf-fortress/dwarf-fortress-hacked.in b/pkgs/games/dwarf-fortress/dwarf-fortress-hacked.in deleted file mode 100644 index 027720fc3785..000000000000 --- a/pkgs/games/dwarf-fortress/dwarf-fortress-hacked.in +++ /dev/null @@ -1,13 +0,0 @@ -#!@stdenv_shell@ - -data_dir=${XDG_DATA_HOME:-$HOME/.local/share}/df_linux -pkg_dir=@prefix@/share/df_linux - -. $pkg_dir/shell/install-df-data-to-home.sh -. $pkg_dir/shell/install-dfhack-data-to-home.sh -. $pkg_dir/shell/install-df-data-content-to-home.sh -. $pkg_dir/shell/export-libs.sh -. $pkg_dir/shell/export-workaround.sh - -cd "$data_dir" -exec ./dfhack "$@" diff --git a/pkgs/games/dwarf-fortress/dwarf-fortress.in b/pkgs/games/dwarf-fortress/dwarf-fortress.in deleted file mode 100644 index db06d34efd05..000000000000 --- a/pkgs/games/dwarf-fortress/dwarf-fortress.in +++ /dev/null @@ -1,14 +0,0 @@ -#!@stdenv_shell@ - -set -ex - -data_dir=${XDG_DATA_HOME:-$HOME/.local/share}/df_linux -pkg_dir=@prefix@/share/df_linux - -. $pkg_dir/shell/install-df-data-to-home.sh -. $pkg_dir/shell/install-df-data-content-to-home.sh -. $pkg_dir/shell/export-libs.sh -. $pkg_dir/shell/export-workaround.sh - -cd $data_dir -$pkg_dir/libs/Dwarf_Fortress "$@" diff --git a/pkgs/games/dwarf-fortress/export-libs.sh.in b/pkgs/games/dwarf-fortress/export-libs.sh.in deleted file mode 100644 index 453295ca6ddb..000000000000 --- a/pkgs/games/dwarf-fortress/export-libs.sh.in +++ /dev/null @@ -1,12 +0,0 @@ -export LD_LIBRARY_PATH=\ -@stdenv_cc@/lib:\ -@SDL@/lib:\ -@SDL_image@/lib/:\ -@SDL_ttf@/lib/:\ -@gtk2@/lib/:\ -@glib@/lib/:\ -@mesa@/lib/:\ -@openal@/lib/:\ -@libsndfile@/lib:\ -@zlib@/lib:\ -$data_dir/df_linux/libs/ diff --git a/pkgs/games/dwarf-fortress/export-workaround.sh b/pkgs/games/dwarf-fortress/export-workaround.sh deleted file mode 100644 index 716d171625c3..000000000000 --- a/pkgs/games/dwarf-fortress/export-workaround.sh +++ /dev/null @@ -1 +0,0 @@ -export SDL_DISABLE_LOCK_KEYS=1 # Work around for bug in Debian/Ubuntu SDL patch. diff --git a/pkgs/games/dwarf-fortress/game.nix b/pkgs/games/dwarf-fortress/game.nix new file mode 100644 index 000000000000..06154e1e57a0 --- /dev/null +++ b/pkgs/games/dwarf-fortress/game.nix @@ -0,0 +1,52 @@ +{ stdenv, lib, fetchurl +, SDL, dwarf-fortress-unfuck +}: + +let + baseVersion = "42"; + patchVersion = "05"; + dfVersion = "0.${baseVersion}.${patchVersion}"; + libpath = lib.makeLibraryPath [ stdenv.cc.cc stdenv.glibc dwarf-fortress-unfuck SDL ]; + +in + +assert dwarf-fortress-unfuck.dfVersion == dfVersion; + +stdenv.mkDerivation { + name = "dwarf-fortress-original-${dfVersion}"; + + src = fetchurl { + url = "http://www.bay12games.com/dwarves/df_${baseVersion}_${patchVersion}_linux.tar.bz2"; + sha256 = "0g7r0v2lsqj9ryxh12q8yrk96bgs00rf2ncw228cwwqgmps3xcws"; + }; + + installPhase = '' + mkdir -p $out + cp -r * $out + rm $out/libs/lib* + + # Store the original hash + orig_hash=$(md5sum $out/libs/Dwarf_Fortress | awk '{ print $1 }') + echo $orig_hash | cut -c1-8 > $out/hash.md5.orig # for dwarf-therapist + echo $orig_hash > $out/full-hash-orig.md5 # for dfhack + + patchelf \ + --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \ + --set-rpath "${libpath}" \ + $out/libs/Dwarf_Fortress + + # Store new hash + patched_hash=$(md5sum $out/libs/Dwarf_Fortress | awk '{ print $1 }') + echo $patched_hash | cut -c1-8 > $out/hash.md5.patched # for dwarf-therapist + echo $patched_hash > $out/full-hash-patched.md5 # for dfhack + ''; + + passthru = { inherit baseVersion patchVersion dfVersion; }; + + meta = { + description = "A single-player fantasy game with a randomly generated adventure world"; + homepage = http://www.bay12games.com/dwarves; + license = lib.licenses.unfreeRedistributable; + maintainers = with lib.maintainers; [ a1russell robbinch roconnor the-kenny abbradar ]; + }; +} diff --git a/pkgs/games/dwarf-fortress/install-df-data-content-to-home.sh b/pkgs/games/dwarf-fortress/install-df-data-content-to-home.sh deleted file mode 100644 index 600af6773223..000000000000 --- a/pkgs/games/dwarf-fortress/install-df-data-content-to-home.sh +++ /dev/null @@ -1,4 +0,0 @@ -for link in announcement art dipscript help index initial_movies movies shader.fs shader.vs sound speech; do - cp -r $pkg_dir/data/$link "$data_dir/data/$link" - chmod -R u+rw "$data_dir/data/$link" -done diff --git a/pkgs/games/dwarf-fortress/install-df-data-to-home.sh b/pkgs/games/dwarf-fortress/install-df-data-to-home.sh deleted file mode 100644 index 42c8c4648092..000000000000 --- a/pkgs/games/dwarf-fortress/install-df-data-to-home.sh +++ /dev/null @@ -1,12 +0,0 @@ -mkdir -p $data_dir -if [[ $(readlink $data_dir/raw) != "$pkg_dir/raw" ]]; then - rm -f $data_dir/raw - ln -s $pkg_dir/raw $data_dir/raw -fi -if [[ $(readlink $data_dir/libs) != "$pkg_dir/libs" ]]; then - rm -f $data_dir/libs - ln -s $pkg_dir/libs $data_dir/libs -fi -mkdir -p "$data_dir/data" -cp -rn $pkg_dir/data/init $data_dir/data/init -chmod -R u+rw $data_dir/data/init diff --git a/pkgs/games/dwarf-fortress/install-dfhack-data-to-home.sh b/pkgs/games/dwarf-fortress/install-dfhack-data-to-home.sh deleted file mode 100644 index 9d316fde9495..000000000000 --- a/pkgs/games/dwarf-fortress/install-dfhack-data-to-home.sh +++ /dev/null @@ -1,16 +0,0 @@ -if [[ $(readlink $data_dir/hack) != "$pkg_dir/hack" ]]; then - rm -f $data_dir/hack - ln -s $pkg_dir/hack $data_dir/hack -fi -if [[ $(readlink $data_dir/dfhack) != "$pkg_dir/dfhack" ]]; then - rm -f $data_dir/dfhack - ln -s $pkg_dir/dfhack $data_dir/dfhack -fi -if [[ $(readlink $data_dir/dfhack.init-example) != "$pkg_dir/dfhack.init-example" ]]; then - rm -f $data_dir/dfhack.init-example - ln -s $pkg_dir/dfhack.init-example $data_dir/dfhack.init-example -fi -if [[ $(readlink $data_dir/dfhack-run) != "$pkg_dir/dfhack-run" ]]; then - rm -f $data_dir/dfhack-run - ln -s $pkg_dir/dfhack-run $data_dir/dfhack-run -fi diff --git a/pkgs/games/dwarf-fortress/unfuck.nix b/pkgs/games/dwarf-fortress/unfuck.nix new file mode 100644 index 000000000000..92f4a954330d --- /dev/null +++ b/pkgs/games/dwarf-fortress/unfuck.nix @@ -0,0 +1,41 @@ +{ stdenv, fetchgit, cmake +, mesa, SDL, SDL_image, SDL_ttf, glew, openalSoft +, ncurses, glib, gtk2, libsndfile +}: + +stdenv.mkDerivation { + name = "dwarf_fortress_unfuck-20160118"; + + src = fetchgit { + url = "https://github.com/svenstaro/dwarf_fortress_unfuck"; + rev = "9a796c6d3cd7d41784e9d1d22a837a1ee0ff8553"; + sha256 = "0ibxdn684zpk3v2gigardq6z9mydc2s9hns8hlxjyyyhnk1ar61g"; + }; + + cmakeFlags = [ + "-DGTK2_GLIBCONFIG_INCLUDE_DIR=${glib}/lib/glib-2.0/include" + "-DGTK2_GDKCONFIG_INCLUDE_DIR=${gtk2}/lib/gtk-2.0/include" + ]; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ + mesa SDL SDL_image SDL_ttf glew openalSoft + ncurses gtk2 libsndfile + ]; + + installPhase = '' + install -D -m755 ../build/libgraphics.so $out/lib/libgraphics.so + ''; + + enableParallelBuilding = true; + + passthru.dfVersion = "0.42.05"; + + meta = with stdenv.lib; { + description = "Unfucked multimedia layer for Dwarf Fortress"; + homepage = https://github.com/svenstaro/dwarf_fortress_unfuck; + license = licenses.free; + platforms = [ "i686-linux" ]; + maintainers = with maintainers; [ abbradar ]; + }; +} diff --git a/pkgs/games/dwarf-fortress/wrapper/default.nix b/pkgs/games/dwarf-fortress/wrapper/default.nix new file mode 100644 index 000000000000..516cf347066b --- /dev/null +++ b/pkgs/games/dwarf-fortress/wrapper/default.nix @@ -0,0 +1,47 @@ +{ stdenv, lib, dwarf-fortress-original, substituteAll +, enableDFHack ? false, dfhack +}: + +assert enableDFHack -> (dfhack.dfVersion == dwarf-fortress-original.dfVersion); + +stdenv.mkDerivation rec { + name = "dwarf-fortress-${dwarf-fortress-original.dfVersion}"; + + runDF = ./dwarf-fortress.in; + runDFHack = ./dfhack.in; + dfInit = substituteAll { + name = "dwarf-fortress-init"; + src = ./dwarf-fortress-init.in; + dwarfFortress = dwarf-fortress-original; + }; + inherit dfhack; + df = dwarf-fortress-original; + + buildCommand = '' + mkdir -p $out/bin + + substitute $runDF $out/bin/dwarf-fortress \ + --subst-var-by stdenv_shell ${stdenv.shell} \ + --subst-var dfInit + chmod 755 $out/bin/dwarf-fortress + '' + lib.optionalString enableDFHack '' + mkdir -p $out/hack + substitute $dfhack/hack/symbols.xml $out/hack/symbols.xml \ + --replace $(cat $df/full-hash-orig.md5) $(cat $df/full-hash-patched.md5) + + substitute $runDFHack $out/bin/dfhack \ + --subst-var-by stdenv_shell ${stdenv.shell} \ + --subst-var dfInit \ + --subst-var dfhack \ + --subst-var-by dfhackWrapper $out + chmod 755 $out/bin/dfhack + ''; + + preferLocalBuild = true; + + meta = { + description = "A single-player fantasy game with a randomly generated adventure world"; + homepage = http://www.bay12games.com/dwarves; + maintainers = with lib.maintainers; [ a1russell robbinch roconnor the-kenny ]; + }; +} diff --git a/pkgs/games/dwarf-fortress/wrapper/dfhack.in b/pkgs/games/dwarf-fortress/wrapper/dfhack.in new file mode 100644 index 000000000000..af2afa57e9df --- /dev/null +++ b/pkgs/games/dwarf-fortress/wrapper/dfhack.in @@ -0,0 +1,17 @@ +#!@stdenv_shell@ -e + +hack_dir="@dfhack@" +hack_wrap_dir="@dfhackWrapper@" + +source @dfInit@ + +cd "$hack_dir" +for i in dfhack.init-example dfhack-config/default hack/!(symbols.xml|*.so|dfhack-run|binpatch); do + update_path "$hack_dir" "$i" +done + +update_path "$hack_wrap_dir" "hack/symbols.xml" + +cd "$DF_DIR" +LD_LIBRARY_PATH="$hack_dir/hack/libs:$hack_dir/hack:$LD_LIBRARY_PATH" \ + LD_PRELOAD=$hack_dir/hack/libdfhack.so exec $game_dir/libs/Dwarf_Fortress "$@" diff --git a/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in new file mode 100644 index 000000000000..ac59934f767d --- /dev/null +++ b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in @@ -0,0 +1,43 @@ +shopt -s extglob + +[ -z "$DF_DIR" ] && DF_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/df_linux" +game_dir="@dwarfFortress@" + +update_path() { + local pkg_dir="$1" + local path="$2" + + mkdir -p "$DF_DIR/$(dirname "$path")" + # If user has replaced these data directories, let them stay. + if [ ! -e "$DF_DIR/$path" ] || [ -L "$DF_DIR/$path" ]; then + rm -f "$DF_DIR/$path" + ln -s "$pkg_dir/$path" "$DF_DIR/$path" + fi +} + +forcecopy_path() { + local pkg_dir="$1" + local path="$2" + + mkdir -p "$DF_DIR/$(dirname "$path")" + rm -rf "$DF_DIR/$path" + cp -rL --no-preserve=all "$pkg_dir/$path" "$DF_DIR/$path" +} + +mkdir -p "$DF_DIR" + +cat <&2 +Using $DF_DIR as Dwarf Fortress overlay directory. +If you do any changes in it, don't forget to clean it when updating the game version! +We try to detect changes based on data directories being symbolic links -- keep this in mind. + +EOF + +cd "$game_dir" +for i in data/init/* data/!(init|index|announcement) raw; do + update_path "$game_dir" "$i" +done + +forcecopy_path "$game_dir" data/index +# For some reason, it's needed to be writable... +forcecopy_path "$game_dir" data/announcement diff --git a/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in new file mode 100644 index 000000000000..28f89e8117e8 --- /dev/null +++ b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in @@ -0,0 +1,6 @@ +#!@stdenv_shell@ -e + +source @dfInit@ + +cd "$DF_DIR" +exec $game_dir/libs/Dwarf_Fortress "$@" diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e9b96d00a74d..41c8dadeffb0 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -14104,21 +14104,13 @@ let cuyo = callPackage ../games/cuyo { }; - dfhack = callPackage_i686 ../games/dfhack { - inherit (pkgsi686Linux.perlPackages) XMLLibXML XMLLibXSLT; - }; - dhewm3 = callPackage ../games/dhewm3 {}; drumkv1 = callPackage ../applications/audio/drumkv1 { }; - dwarf_fortress = callPackage_i686 ../games/dwarf-fortress { - SDL_image = pkgsi686Linux.SDL_image.override { - libpng = pkgsi686Linux.libpng12; - }; - inherit (pkgsi686Linux.perlPackages) XMLLibXML XMLLibXSLT; - enableDFHack = config.dwarfFortress.enableDFHack or false; - }; + dwarf-fortress-packages = callPackage ../games/dwarf-fortress { }; + + dwarf-fortress = dwarf-fortress-packages.dwarf-fortress.override { }; dwarf-therapist = callPackage ../games/dwarf-therapist { }; @@ -15956,6 +15948,7 @@ aliases = with self; rec { aircrackng = aircrack-ng; # added 2016-01-14 quake3game = ioquake3; # added 2016-01-14 scim = sc-im; # added 2016-01-22 + dwarf_fortress = dwarf-fortress; # added 2016-01-23 }; tweakAlias = _n: alias: with lib; From fdae86fb4e3234441987d9164f6f5b7e2d15d0c3 Mon Sep 17 00:00:00 2001 From: Nikolay Amiantov Date: Tue, 12 Jan 2016 21:17:46 +0300 Subject: [PATCH 2/6] dwarf-therapist: 31.0.0 -> 36.0.0 --- pkgs/games/dwarf-fortress/default.nix | 8 ++++ .../dwarf-therapist/default.nix | 40 ++++++++++++++++ .../dwarf-therapist/wrapper.nix | 41 ++++++++++++++++ pkgs/games/dwarf-therapist/default.nix | 48 ------------------- pkgs/top-level/all-packages.nix | 2 +- 5 files changed, 90 insertions(+), 49 deletions(-) create mode 100644 pkgs/games/dwarf-fortress/dwarf-therapist/default.nix create mode 100644 pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix delete mode 100644 pkgs/games/dwarf-therapist/default.nix diff --git a/pkgs/games/dwarf-fortress/default.nix b/pkgs/games/dwarf-fortress/default.nix index d73f932ac032..84b5f2b0f4b6 100644 --- a/pkgs/games/dwarf-fortress/default.nix +++ b/pkgs/games/dwarf-fortress/default.nix @@ -14,6 +14,14 @@ let dwarf-fortress-unfuck = callPackage_i686 ./unfuck.nix { }; dwarf-fortress = callPackage ./wrapper { }; + + dwarf-therapist-original = callPackage ./dwarf-therapist { + texlive = pkgs.texlive.combine { + inherit (pkgs.texlive) scheme-basic float caption wrapfig adjmulticol sidecap preprint enumitem; + }; + }; + + dwarf-therapist = callPackage ./dwarf-therapist/wrapper.nix { }; }; in self diff --git a/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix b/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix new file mode 100644 index 000000000000..07714168e0e8 --- /dev/null +++ b/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix @@ -0,0 +1,40 @@ +{ stdenv, fetchFromGitHub, coreutils, qt4, texlive }: + +let + version = "36.0.0"; +in +stdenv.mkDerivation { + name = "dwarf-therapist-original-${version}"; + + src = fetchFromGitHub { + owner = "splintermind"; + repo = "Dwarf-Therapist"; + rev = "v${version}"; + sha256 = "08xjawb25sibkkfqwd4mlq73dgmgc6lxbbd673rx7yhrsjh4z4h3"; + }; + + outputs = [ "out" "layouts" ]; + buildInputs = [ qt4 ]; + nativeBuildInputs = [ texlive ]; + + enableParallelBuilding = false; + + configurePhase = '' + qmake PREFIX=$out + ''; + + # Move layout files so they cannot be found by Therapist + postInstall = '' + mkdir -p $layouts + mv $out/share/dwarftherapist/memory_layouts/* $layouts + rmdir $out/share/dwarftherapist/memory_layouts + ''; + + meta = { + description = "Tool to manage dwarves in in a running game of Dwarf Fortress"; + maintainers = with stdenv.lib.maintainers; [ the-kenny abbradar ]; + license = stdenv.lib.licenses.mit; + platforms = stdenv.lib.platforms.linux; + homepage = https://code.google.com/r/splintermind-attributes/; + }; +} diff --git a/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix b/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix new file mode 100644 index 000000000000..6b138ac51029 --- /dev/null +++ b/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix @@ -0,0 +1,41 @@ +{ buildEnv, lib, dwarf-therapist-original, dwarf-fortress-original, makeWrapper }: + +let + df = dwarf-fortress-original; + dt = dwarf-therapist-original; + inifile = "linux/v0${df.baseVersion}.${df.patchVersion}.ini"; + dfHashFile = "${df}/hash.md5"; + +in buildEnv { + name = "dwarf-therapist-${lib.getVersion dt}"; + + paths = [ dt ]; + + buildInputs = [ makeWrapper ]; + + postBuild = '' + # DwarfTherapist assumes it's run in $out/share/dwarftherapist and + # therefore uses many relative paths. + rm $out/bin + mkdir $out/bin + makeWrapper ${dt}/bin/DwarfTherapist $out/bin/DwarfTherapist \ + --run "cd $out/share/dwarftherapist" + + # Fix checksum of memory access directives. We really need #4621 fixed! + recreate_dir() { + rm "$out/$1" + mkdir -p "$out/$1" + for i in "${dt}/$1/"*; do + ln -s "$i" "$out/$1" + done + } + + recreate_dir share + recreate_dir share/dwarftherapist + mkdir -p $out/share/dwarftherapist/memory_layouts/linux + substitute \ + ${dt.layouts}/${inifile} \ + $out/share/dwarftherapist/memory_layouts/${inifile} \ + --replace $(cat "${dfHashFile}.orig") $(cat "${dfHashFile}.patched") + ''; +} diff --git a/pkgs/games/dwarf-therapist/default.nix b/pkgs/games/dwarf-therapist/default.nix deleted file mode 100644 index 4e676bf5f9df..000000000000 --- a/pkgs/games/dwarf-therapist/default.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ stdenv, coreutils, fetchgit, qt4, dwarf_fortress, bash, makeWrapper }: - -let - version = "31.0.0"; - df = dwarf_fortress; -in -stdenv.mkDerivation rec { - name = "dwarf-therapist-${version}"; - - src = fetchgit { - url = "https://github.com/splintermind/Dwarf-Therapist.git"; - rev = "refs/tags/v${version}"; - sha256 = "02d6k8c3vm401v04ln9q405njarx869jpfyf42lwskijrzjygk9x"; - }; - - # Needed for hashing - dfHashFile = "${df}/share/df_linux/hash.md5"; - - buildInputs = [ coreutils qt4 df makeWrapper ]; - enableParallelBuilding = false; - - configurePhase = '' - qmake PREFIX=$out - ''; - - postInstall = '' - # DwarfTherapist assumes it's run in $out/share/dwarftherapist and - # therefore uses many relative paths. - rm $out/bin/dwarftherapist - wrapProgram $out/bin/DwarfTherapist \ - --run "cd $out/share/dwarftherapist" - ''; - - postFixup = '' - # Fix checksum of memory access directives - substituteInPlace $out/share/dwarftherapist/memory_layouts/linux/v0${df.baseVersion}.${df.patchVersion}.ini \ - --replace $(cat "${dfHashFile}.orig") $(cat "${dfHashFile}.patched") - ''; - - meta = { - description = "Tool to manage dwarves in in a running game of Dwarf Fortress"; - maintainers = with stdenv.lib.maintainers; [ the-kenny ]; - license = stdenv.lib.licenses.mit; - platforms = stdenv.lib.platforms.linux; - hydraPlatforms = []; - homepage = https://code.google.com/r/splintermind-attributes/; - }; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 41c8dadeffb0..c7aa0c8cc0b7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -14112,7 +14112,7 @@ let dwarf-fortress = dwarf-fortress-packages.dwarf-fortress.override { }; - dwarf-therapist = callPackage ../games/dwarf-therapist { }; + dwarf-therapist = dwarf-fortress-packages.dwarf-therapist; d1x_rebirth = callPackage ../games/d1x-rebirth { }; From 6c9dd963776d108ef05700fe843f1a285e3d7182 Mon Sep 17 00:00:00 2001 From: Adam Russell Date: Thu, 26 Nov 2015 21:26:44 -0600 Subject: [PATCH 3/6] dwarf-fortress: add phoebus --- pkgs/games/dwarf-fortress/themes/phoebus.nix | 36 ++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 pkgs/games/dwarf-fortress/themes/phoebus.nix diff --git a/pkgs/games/dwarf-fortress/themes/phoebus.nix b/pkgs/games/dwarf-fortress/themes/phoebus.nix new file mode 100644 index 000000000000..a26abf207d4f --- /dev/null +++ b/pkgs/games/dwarf-fortress/themes/phoebus.nix @@ -0,0 +1,36 @@ +{ dfBaseVersion +, dfPatchVersion +, fetchzip +, ... +}: + +let + + phoebusVersion = "00"; + phoebusFileName = "Phoebus_${dfBaseVersion}_${dfPatchVersion}v${phoebusVersion}"; + +in rec { + + src = fetchzip { + name = phoebusFileName; + url = "http://dffd.bay12games.com/download.php?id=2430&f=${phoebusFileName}.zip"; + sha256 = "0fb68r6fd7v67mbh2439ygqrmdk4pw94gd293fqxb9qg71ilrb6s"; + stripRoot = false; + }; + + sourceRoot = src.name; + + installPhase = '' + pushd ../../$themeSourceRoot + + cp data/init/phoebus/* $out/share/df_linux/data/init/ + cp -rT raw $out/share/df_linux/raw + mkdir -p $out/share/df_linux/data/config + cp data/config/* $out/share/df_linux/data/config/ + cp data/art/* $out/share/df_linux/data/art/ + + popd + ''; + +} + From 7fe01a7279a8a9630ac42b2c7c9dd291c4a7a9a9 Mon Sep 17 00:00:00 2001 From: Nikolay Amiantov Date: Wed, 20 Jan 2016 00:43:52 +0300 Subject: [PATCH 4/6] phoebus-theme: update for 0.42.05, make a derivation Also specify license, see https://github.com/fricy/Phoebus/issues/5 --- pkgs/games/dwarf-fortress/default.nix | 2 + pkgs/games/dwarf-fortress/themes/phoebus.nix | 51 +++++++++----------- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/pkgs/games/dwarf-fortress/default.nix b/pkgs/games/dwarf-fortress/default.nix index 84b5f2b0f4b6..317b532ecbe6 100644 --- a/pkgs/games/dwarf-fortress/default.nix +++ b/pkgs/games/dwarf-fortress/default.nix @@ -22,6 +22,8 @@ let }; dwarf-therapist = callPackage ./dwarf-therapist/wrapper.nix { }; + + phoebus-theme = callPackage ./themes/phoebus.nix { }; }; in self diff --git a/pkgs/games/dwarf-fortress/themes/phoebus.nix b/pkgs/games/dwarf-fortress/themes/phoebus.nix index a26abf207d4f..2183a6245c0c 100644 --- a/pkgs/games/dwarf-fortress/themes/phoebus.nix +++ b/pkgs/games/dwarf-fortress/themes/phoebus.nix @@ -1,36 +1,33 @@ -{ dfBaseVersion -, dfPatchVersion -, fetchzip -, ... -}: +{ stdenv, fetchFromGitHub }: -let +# On upgrade check https://github.com/fricy/Phoebus/blob/master/manifest.json +# for compatibility information. - phoebusVersion = "00"; - phoebusFileName = "Phoebus_${dfBaseVersion}_${dfPatchVersion}v${phoebusVersion}"; +stdenv.mkDerivation { + name = "phoebus-theme-20160118"; -in rec { - - src = fetchzip { - name = phoebusFileName; - url = "http://dffd.bay12games.com/download.php?id=2430&f=${phoebusFileName}.zip"; - sha256 = "0fb68r6fd7v67mbh2439ygqrmdk4pw94gd293fqxb9qg71ilrb6s"; - stripRoot = false; + src = fetchFromGitHub { + owner = "fricy"; + repo = "Phoebus"; + rev = "2c5777b0f307b1d752a8a484c6a05b67531c84a9"; + sha256 = "0a5ixm181wz7crr3rpa2mh0drb371j5hvizqninvdnhah2mypz8v"; }; - sourceRoot = src.name; - installPhase = '' - pushd ../../$themeSourceRoot - - cp data/init/phoebus/* $out/share/df_linux/data/init/ - cp -rT raw $out/share/df_linux/raw - mkdir -p $out/share/df_linux/data/config - cp data/config/* $out/share/df_linux/data/config/ - cp data/art/* $out/share/df_linux/data/art/ - - popd + mkdir $out + cp -r data raw $out ''; -} + passthru.dfVersion = "0.42.05"; + preferLocalBuild = true; + + meta = with stdenv.lib; { + description = "Phoebus graphics set for Dwarf Fortress"; + homepage = "http://www.bay12forums.com/smf/index.php?topic=137096.0"; + platforms = platforms.all; + maintainers = with maintainers; [ a1russell abbradar ]; + # https://github.com/fricy/Phoebus/issues/5 + license = licenses.free; + }; +} From d3b642ce9ad056b60d8cfa576dd3fa800ec57ba4 Mon Sep 17 00:00:00 2001 From: Nikolay Amiantov Date: Wed, 20 Jan 2016 00:44:33 +0300 Subject: [PATCH 5/6] dwarf-fortress-wrapper: add themes support Theme can be specified either as a derivation or as a string, in which case it will be taken by name from a pre-defined set of themes available in nixpkgs. --- pkgs/games/dwarf-fortress/default.nix | 8 ++- pkgs/games/dwarf-fortress/wrapper/default.nix | 61 +++++++++++++------ pkgs/games/dwarf-fortress/wrapper/dfhack.in | 14 ++--- .../wrapper/dwarf-fortress-init.in | 20 +++--- .../dwarf-fortress/wrapper/dwarf-fortress.in | 2 +- 5 files changed, 61 insertions(+), 44 deletions(-) diff --git a/pkgs/games/dwarf-fortress/default.nix b/pkgs/games/dwarf-fortress/default.nix index 317b532ecbe6..d91c110c34c0 100644 --- a/pkgs/games/dwarf-fortress/default.nix +++ b/pkgs/games/dwarf-fortress/default.nix @@ -4,7 +4,7 @@ let callPackage = pkgs.newScope self; callPackage_i686 = pkgsi686Linux.newScope self; - self = { + self = rec { dwarf-fortress-original = callPackage_i686 ./game.nix { }; dfhack = callPackage_i686 ./dfhack { @@ -13,7 +13,11 @@ let dwarf-fortress-unfuck = callPackage_i686 ./unfuck.nix { }; - dwarf-fortress = callPackage ./wrapper { }; + dwarf-fortress = callPackage ./wrapper { + themes = { + "phoebus" = phoebus-theme; + }; + }; dwarf-therapist-original = callPackage ./dwarf-therapist { texlive = pkgs.texlive.combine { diff --git a/pkgs/games/dwarf-fortress/wrapper/default.nix b/pkgs/games/dwarf-fortress/wrapper/default.nix index 516cf347066b..95ff0821d708 100644 --- a/pkgs/games/dwarf-fortress/wrapper/default.nix +++ b/pkgs/games/dwarf-fortress/wrapper/default.nix @@ -1,21 +1,54 @@ -{ stdenv, lib, dwarf-fortress-original, substituteAll +{ stdenv, lib, buildEnv, dwarf-fortress-original, substituteAll , enableDFHack ? false, dfhack +, themes ? {} +, theme ? null }: -assert enableDFHack -> (dfhack.dfVersion == dwarf-fortress-original.dfVersion); +let + ptheme = + if builtins.isString theme + then builtins.getAttr theme themes + else theme; + + # These are in inverse order for first packages to override the next ones. + pkgs = lib.optional (theme != null) ptheme + ++ lib.optional enableDFHack dfhack + ++ [ dwarf-fortress-original ]; + + env = buildEnv { + name = "dwarf-fortress-env-${dwarf-fortress-original.dfVersion}"; + paths = pkgs; + ignoreCollisions = true; + postBuild = lib.optionalString enableDFHack '' + # #4621 + if [ -L "$out/hack" ]; then + rm $out/hack + mkdir $out/hack + for i in ${dfhack}/hack/*; do + ln -s $i $out/hack + done + fi + rm $out/hack/symbols.xml + substitute ${dfhack}/hack/symbols.xml $out/hack/symbols.xml \ + --replace $(cat ${dwarf-fortress-original}/full-hash-orig.md5) \ + $(cat ${dwarf-fortress-original}/full-hash-patched.md5) + ''; + }; +in + +assert lib.all (x: x.dfVersion == dwarf-fortress-original.dfVersion) pkgs; stdenv.mkDerivation rec { name = "dwarf-fortress-${dwarf-fortress-original.dfVersion}"; - runDF = ./dwarf-fortress.in; - runDFHack = ./dfhack.in; dfInit = substituteAll { name = "dwarf-fortress-init"; src = ./dwarf-fortress-init.in; - dwarfFortress = dwarf-fortress-original; + inherit env; }; - inherit dfhack; - df = dwarf-fortress-original; + + runDF = ./dwarf-fortress.in; + runDFHack = ./dfhack.in; buildCommand = '' mkdir -p $out/bin @@ -25,23 +58,11 @@ stdenv.mkDerivation rec { --subst-var dfInit chmod 755 $out/bin/dwarf-fortress '' + lib.optionalString enableDFHack '' - mkdir -p $out/hack - substitute $dfhack/hack/symbols.xml $out/hack/symbols.xml \ - --replace $(cat $df/full-hash-orig.md5) $(cat $df/full-hash-patched.md5) - substitute $runDFHack $out/bin/dfhack \ --subst-var-by stdenv_shell ${stdenv.shell} \ - --subst-var dfInit \ - --subst-var dfhack \ - --subst-var-by dfhackWrapper $out + --subst-var dfInit chmod 755 $out/bin/dfhack ''; preferLocalBuild = true; - - meta = { - description = "A single-player fantasy game with a randomly generated adventure world"; - homepage = http://www.bay12games.com/dwarves; - maintainers = with lib.maintainers; [ a1russell robbinch roconnor the-kenny ]; - }; } diff --git a/pkgs/games/dwarf-fortress/wrapper/dfhack.in b/pkgs/games/dwarf-fortress/wrapper/dfhack.in index af2afa57e9df..d53769ca4b61 100644 --- a/pkgs/games/dwarf-fortress/wrapper/dfhack.in +++ b/pkgs/games/dwarf-fortress/wrapper/dfhack.in @@ -1,17 +1,11 @@ #!@stdenv_shell@ -e -hack_dir="@dfhack@" -hack_wrap_dir="@dfhackWrapper@" - source @dfInit@ -cd "$hack_dir" -for i in dfhack.init-example dfhack-config/default hack/!(symbols.xml|*.so|dfhack-run|binpatch); do - update_path "$hack_dir" "$i" +for i in dfhack.init-example dfhack-config/default hack/*; do + update_path "$i" done -update_path "$hack_wrap_dir" "hack/symbols.xml" - cd "$DF_DIR" -LD_LIBRARY_PATH="$hack_dir/hack/libs:$hack_dir/hack:$LD_LIBRARY_PATH" \ - LD_PRELOAD=$hack_dir/hack/libdfhack.so exec $game_dir/libs/Dwarf_Fortress "$@" +LD_LIBRARY_PATH="$env_dir/hack/libs:$env_dir/hack:$LD_LIBRARY_PATH" \ + LD_PRELOAD=$env_dir/hack/libdfhack.so exec $env_dir/libs/Dwarf_Fortress "$@" diff --git a/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in index ac59934f767d..1fd6178895db 100644 --- a/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in +++ b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in @@ -1,27 +1,25 @@ shopt -s extglob [ -z "$DF_DIR" ] && DF_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/df_linux" -game_dir="@dwarfFortress@" +env_dir="@env@" update_path() { - local pkg_dir="$1" - local path="$2" + local path="$1" mkdir -p "$DF_DIR/$(dirname "$path")" # If user has replaced these data directories, let them stay. if [ ! -e "$DF_DIR/$path" ] || [ -L "$DF_DIR/$path" ]; then rm -f "$DF_DIR/$path" - ln -s "$pkg_dir/$path" "$DF_DIR/$path" + ln -s "$env_dir/$path" "$DF_DIR/$path" fi } forcecopy_path() { - local pkg_dir="$1" - local path="$2" + local path="$1" mkdir -p "$DF_DIR/$(dirname "$path")" rm -rf "$DF_DIR/$path" - cp -rL --no-preserve=all "$pkg_dir/$path" "$DF_DIR/$path" + cp -rL --no-preserve=all "$env_dir/$path" "$DF_DIR/$path" } mkdir -p "$DF_DIR" @@ -33,11 +31,11 @@ We try to detect changes based on data directories being symbolic links -- keep EOF -cd "$game_dir" +cd "$env_dir" for i in data/init/* data/!(init|index|announcement) raw; do - update_path "$game_dir" "$i" + update_path "$i" done -forcecopy_path "$game_dir" data/index +forcecopy_path data/index # For some reason, it's needed to be writable... -forcecopy_path "$game_dir" data/announcement +forcecopy_path data/announcement diff --git a/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in index 28f89e8117e8..f405f1b0e393 100644 --- a/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in +++ b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in @@ -3,4 +3,4 @@ source @dfInit@ cd "$DF_DIR" -exec $game_dir/libs/Dwarf_Fortress "$@" +exec "$env_dir/libs/Dwarf_Fortress" "$@" From 82a0dde83c1624dabd74a0bf39dd5f7504493f3f Mon Sep 17 00:00:00 2001 From: Nikolay Amiantov Date: Sat, 23 Jan 2016 23:57:58 +0300 Subject: [PATCH 6/6] dwarf-fortress: remove short md5 sums --- pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix | 4 +++- pkgs/games/dwarf-fortress/game.nix | 10 +++------- pkgs/games/dwarf-fortress/wrapper/default.nix | 4 ++-- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix b/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix index 6b138ac51029..a16c1284a672 100644 --- a/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix +++ b/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix @@ -33,9 +33,11 @@ in buildEnv { recreate_dir share recreate_dir share/dwarftherapist mkdir -p $out/share/dwarftherapist/memory_layouts/linux + origmd5=$(cat "${dfHashFile}.orig" | cut -c1-8) + patchedmd5=$(cat "${dfHashFile}" | cut -c1-8) substitute \ ${dt.layouts}/${inifile} \ $out/share/dwarftherapist/memory_layouts/${inifile} \ - --replace $(cat "${dfHashFile}.orig") $(cat "${dfHashFile}.patched") + --replace "$origmd5" "$patchedmd5" ''; } diff --git a/pkgs/games/dwarf-fortress/game.nix b/pkgs/games/dwarf-fortress/game.nix index 06154e1e57a0..7e0c1b34af74 100644 --- a/pkgs/games/dwarf-fortress/game.nix +++ b/pkgs/games/dwarf-fortress/game.nix @@ -26,19 +26,15 @@ stdenv.mkDerivation { rm $out/libs/lib* # Store the original hash - orig_hash=$(md5sum $out/libs/Dwarf_Fortress | awk '{ print $1 }') - echo $orig_hash | cut -c1-8 > $out/hash.md5.orig # for dwarf-therapist - echo $orig_hash > $out/full-hash-orig.md5 # for dfhack + md5sum $out/libs/Dwarf_Fortress | awk '{ print $1 }' > $out/hash.md5.orig patchelf \ --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \ --set-rpath "${libpath}" \ $out/libs/Dwarf_Fortress - # Store new hash - patched_hash=$(md5sum $out/libs/Dwarf_Fortress | awk '{ print $1 }') - echo $patched_hash | cut -c1-8 > $out/hash.md5.patched # for dwarf-therapist - echo $patched_hash > $out/full-hash-patched.md5 # for dfhack + # Store the new hash + md5sum $out/libs/Dwarf_Fortress | awk '{ print $1 }' > $out/hash.md5 ''; passthru = { inherit baseVersion patchVersion dfVersion; }; diff --git a/pkgs/games/dwarf-fortress/wrapper/default.nix b/pkgs/games/dwarf-fortress/wrapper/default.nix index 95ff0821d708..5493cdb3faf6 100644 --- a/pkgs/games/dwarf-fortress/wrapper/default.nix +++ b/pkgs/games/dwarf-fortress/wrapper/default.nix @@ -30,8 +30,8 @@ let fi rm $out/hack/symbols.xml substitute ${dfhack}/hack/symbols.xml $out/hack/symbols.xml \ - --replace $(cat ${dwarf-fortress-original}/full-hash-orig.md5) \ - $(cat ${dwarf-fortress-original}/full-hash-patched.md5) + --replace $(cat ${dwarf-fortress-original}/hash.md5.orig) \ + $(cat ${dwarf-fortress-original}/hash.md5) ''; }; in