diff options
author | Vladimír Čunát <vcunat@gmail.com> | 2016-02-03 16:54:03 +0100 |
---|---|---|
committer | Vladimír Čunát <vcunat@gmail.com> | 2016-02-03 16:57:19 +0100 |
commit | ae74c356d94b795eb07dfe9978788b49b70f5959 (patch) | |
tree | c13c6894b75f95d3a4dc4627efef508bb03dfba8 /pkgs/games/dwarf-fortress/wrapper | |
parent | c9790126312119ce5a2a8ac946d9f086e7ea9f55 (diff) | |
parent | 53e0f8b1cdf36574bfede6e62e2ac2739c3ef804 (diff) | |
download | nixlib-ae74c356d94b795eb07dfe9978788b49b70f5959.tar nixlib-ae74c356d94b795eb07dfe9978788b49b70f5959.tar.gz nixlib-ae74c356d94b795eb07dfe9978788b49b70f5959.tar.bz2 nixlib-ae74c356d94b795eb07dfe9978788b49b70f5959.tar.lz nixlib-ae74c356d94b795eb07dfe9978788b49b70f5959.tar.xz nixlib-ae74c356d94b795eb07dfe9978788b49b70f5959.tar.zst nixlib-ae74c356d94b795eb07dfe9978788b49b70f5959.zip |
Merge recent 'staging' into closure-size
Let's get rid of those merge conflicts.
Diffstat (limited to 'pkgs/games/dwarf-fortress/wrapper')
-rw-r--r-- | pkgs/games/dwarf-fortress/wrapper/default.nix | 68 | ||||
-rw-r--r-- | pkgs/games/dwarf-fortress/wrapper/dfhack.in | 11 | ||||
-rw-r--r-- | pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in | 41 | ||||
-rw-r--r-- | pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in | 6 |
4 files changed, 126 insertions, 0 deletions
diff --git a/pkgs/games/dwarf-fortress/wrapper/default.nix b/pkgs/games/dwarf-fortress/wrapper/default.nix new file mode 100644 index 000000000000..5493cdb3faf6 --- /dev/null +++ b/pkgs/games/dwarf-fortress/wrapper/default.nix @@ -0,0 +1,68 @@ +{ stdenv, lib, buildEnv, dwarf-fortress-original, substituteAll +, enableDFHack ? false, dfhack +, themes ? {} +, theme ? null +}: + +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}/hash.md5.orig) \ + $(cat ${dwarf-fortress-original}/hash.md5) + ''; + }; +in + +assert lib.all (x: x.dfVersion == dwarf-fortress-original.dfVersion) pkgs; + +stdenv.mkDerivation rec { + name = "dwarf-fortress-${dwarf-fortress-original.dfVersion}"; + + dfInit = substituteAll { + name = "dwarf-fortress-init"; + src = ./dwarf-fortress-init.in; + inherit env; + }; + + runDF = ./dwarf-fortress.in; + runDFHack = ./dfhack.in; + + 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 '' + substitute $runDFHack $out/bin/dfhack \ + --subst-var-by stdenv_shell ${stdenv.shell} \ + --subst-var dfInit + chmod 755 $out/bin/dfhack + ''; + + preferLocalBuild = true; +} diff --git a/pkgs/games/dwarf-fortress/wrapper/dfhack.in b/pkgs/games/dwarf-fortress/wrapper/dfhack.in new file mode 100644 index 000000000000..d53769ca4b61 --- /dev/null +++ b/pkgs/games/dwarf-fortress/wrapper/dfhack.in @@ -0,0 +1,11 @@ +#!@stdenv_shell@ -e + +source @dfInit@ + +for i in dfhack.init-example dfhack-config/default hack/*; do + update_path "$i" +done + +cd "$DF_DIR" +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 new file mode 100644 index 000000000000..1fd6178895db --- /dev/null +++ b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in @@ -0,0 +1,41 @@ +shopt -s extglob + +[ -z "$DF_DIR" ] && DF_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/df_linux" +env_dir="@env@" + +update_path() { + 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 "$env_dir/$path" "$DF_DIR/$path" + fi +} + +forcecopy_path() { + local path="$1" + + mkdir -p "$DF_DIR/$(dirname "$path")" + rm -rf "$DF_DIR/$path" + cp -rL --no-preserve=all "$env_dir/$path" "$DF_DIR/$path" +} + +mkdir -p "$DF_DIR" + +cat <<EOF >&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 "$env_dir" +for i in data/init/* data/!(init|index|announcement) raw; do + update_path "$i" +done + +forcecopy_path data/index +# For some reason, it's needed to be writable... +forcecopy_path 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..f405f1b0e393 --- /dev/null +++ b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in @@ -0,0 +1,6 @@ +#!@stdenv_shell@ -e + +source @dfInit@ + +cd "$DF_DIR" +exec "$env_dir/libs/Dwarf_Fortress" "$@" |