From 236b89afebaf55a09c7ec3bea6136871c4d03884 Mon Sep 17 00:00:00 2001 From: Matthew Bauer Date: Thu, 10 May 2018 23:55:06 -0500 Subject: dwarf-fortress: supports darwin --- pkgs/games/dwarf-fortress/default.nix | 6 +- pkgs/games/dwarf-fortress/game.nix | 80 ++++++++++++++++------ pkgs/games/dwarf-fortress/wrapper/default.nix | 2 + .../dwarf-fortress/wrapper/dwarf-fortress-init.in | 1 + .../games/dwarf-fortress/wrapper/dwarf-fortress.in | 5 +- 5 files changed, 69 insertions(+), 25 deletions(-) (limited to 'pkgs/games') diff --git a/pkgs/games/dwarf-fortress/default.nix b/pkgs/games/dwarf-fortress/default.nix index c759c4c60dae..82710256c631 100644 --- a/pkgs/games/dwarf-fortress/default.nix +++ b/pkgs/games/dwarf-fortress/default.nix @@ -1,4 +1,4 @@ -{ pkgs, pkgsi686Linux }: +{ pkgs, pkgsi686Linux, stdenv }: let callPackage = pkgs.newScope self; @@ -13,7 +13,9 @@ let soundSense = callPackage ./soundsense.nix { }; - dwarf-fortress-unfuck = callPackage ./unfuck.nix { }; + # unfuck is linux-only right now, we will just use it there + dwarf-fortress-unfuck = if stdenv.isLinux then callPackage ./unfuck.nix { } + else null; dwarf-fortress = callPackage ./wrapper { themes = { diff --git a/pkgs/games/dwarf-fortress/game.nix b/pkgs/games/dwarf-fortress/game.nix index 79dd46c21919..2dbe8ba098b4 100644 --- a/pkgs/games/dwarf-fortress/game.nix +++ b/pkgs/games/dwarf-fortress/game.nix @@ -1,57 +1,93 @@ { stdenv, lib, fetchurl , SDL, dwarf-fortress-unfuck + +# Our own "unfuck" libs for macOS +, ncurses, fmodex, gcc }: +with lib; + let baseVersion = "44"; - patchVersion = "09"; + patchVersion = "10"; dfVersion = "0.${baseVersion}.${patchVersion}"; - libpath = lib.makeLibraryPath [ stdenv.cc.cc stdenv.glibc dwarf-fortress-unfuck SDL ]; - platform = - if stdenv.system == "x86_64-linux" then "linux" - else if stdenv.system == "i686-linux" then "linux32" - else throw "Unsupported platform"; - sha256 = - if stdenv.system == "x86_64-linux" then "1haikynkg1pqyrzzqk1qxm19p36ww58qp8brh3fjxssp4x71rcdy" - else if stdenv.system == "i686-linux" then "0lmbrdf7wjdwj5yx0khnq871yxvhfwqxjjyfkqcdy5ik18lvlkj8" - else throw "Unsupported platform"; + + libpath = makeLibraryPath [ stdenv.cc.cc stdenv.cc.libc dwarf-fortress-unfuck SDL ]; + + homepage = http://www.bay12games.com/dwarves/; + + # Other srcs are avilable like 32-bit mac & win, but I have only + # included the ones most likely to be needed by Nixpkgs users. + srcs = { + "x86_64-linux" = fetchurl { + url = "${homepage}df_${baseVersion}_${patchVersion}_linux.tar.bz2"; + sha256 = "1haikynkg1pqyrzzqk1qxm19p36ww58qp8brh3fjxssp4x71rcdy"; + }; + "i686-linux" = fetchurl { + url = "${homepage}df_${baseVersion}_${patchVersion}_linux32.tar.bz2"; + sha256 = "0lmbrdf7wjdwj5yx0khnq871yxvhfwqxjjyfkqcdy5ik18lvlkj8"; + }; + "x86_64-darwin" = fetchurl { + url = "${homepage}df_${baseVersion}_${patchVersion}_osx.tar.bz2"; + sha256 = "1wpa45d81q8f5mhqmaxvdkz93k6cm3pg7vpsqjjjsp5s961gd74g"; + }; + }; in -assert dwarf-fortress-unfuck.dfVersion == dfVersion; +assert dwarf-fortress-unfuck != null -> + dwarf-fortress-unfuck.dfVersion == dfVersion; stdenv.mkDerivation { name = "dwarf-fortress-original-${dfVersion}"; - src = fetchurl { - url = "http://www.bay12games.com/dwarves/df_${baseVersion}_${patchVersion}_${platform}.tar.bz2"; - inherit sha256; - }; + src = if builtins.hasAttr stdenv.system srcs + then builtins.getAttr stdenv.system srcs + else throw "Unsupported systems"; installPhase = '' mkdir -p $out cp -r * $out rm $out/libs/lib* - # Store the original hash - md5sum $out/libs/Dwarf_Fortress | awk '{ print $1 }' > $out/hash.md5.orig + exe=$out/${if stdenv.isLinux then "libs/Dwarf_Fortress" + else "dwarfort.exe"} + # Store the original hash + md5sum $exe | awk '{ print $1 }' > $out/hash.md5.orig + '' + optionalString stdenv.isLinux '' patchelf \ --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \ --set-rpath "${libpath}" \ - $out/libs/Dwarf_Fortress + $exe + '' + optionalString stdenv.isDarwin '' + # My custom unfucked dwarfort.exe for macOS. Can't use + # absolute paths because original doesn't have enough + # header space. Someone plz break into Tarn's house & put + # -headerpad_max_install_names into his LDFLAGS. + + ln -s ${getLib ncurses}/lib/libncurses.dylib $out/libs + ln -s ${getLib gcc.cc}/lib/libstdc++.6.dylib $out/libs + ln -s ${getLib fmodex}/lib/libfmodex.dylib $out/libs + install_name_tool \ + -change /usr/lib/libncurses.5.4.dylib \ + @executable_path/libs/libncurses.dylib \ + -change /usr/local/lib/x86_64/libstdc++.6.dylib \ + @executable_path/libs/libstdc++.6.dylib \ + $exe + '' + '' # Store the new hash - md5sum $out/libs/Dwarf_Fortress | awk '{ print $1 }' > $out/hash.md5 + md5sum $exe | awk '{ print $1 }' > $out/hash.md5 ''; passthru = { inherit baseVersion patchVersion dfVersion; }; - meta = with stdenv.lib; { + meta = { description = "A single-player fantasy game with a randomly generated adventure world"; - homepage = http://www.bay12games.com/dwarves; + inherit homepage; license = licenses.unfreeRedistributable; - platforms = platforms.linux; + platforms = attrNames srcs; maintainers = with maintainers; [ a1russell robbinch roconnor the-kenny abbradar ]; }; } diff --git a/pkgs/games/dwarf-fortress/wrapper/default.nix b/pkgs/games/dwarf-fortress/wrapper/default.nix index 3d904d006e46..e82cc2be680d 100644 --- a/pkgs/games/dwarf-fortress/wrapper/default.nix +++ b/pkgs/games/dwarf-fortress/wrapper/default.nix @@ -47,6 +47,8 @@ stdenv.mkDerivation rec { name = "dwarf-fortress-init"; src = ./dwarf-fortress-init.in; inherit env; + exe = if stdenv.isLinux then "libs/Dwarf_Fortress" + else "dwarfort.exe"; }; runDF = ./dwarf-fortress.in; diff --git a/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in index 093dae562c24..054935af012e 100644 --- a/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in +++ b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress-init.in @@ -2,6 +2,7 @@ shopt -s extglob [ -z "$DF_DIR" ] && DF_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/df_linux" env_dir="@env@" +exe="$env_dir/@exe@" update_path() { local path="$1" diff --git a/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in index f405f1b0e393..4448bd05fda5 100644 --- a/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in +++ b/pkgs/games/dwarf-fortress/wrapper/dwarf-fortress.in @@ -2,5 +2,8 @@ source @dfInit@ +export DYLD_LIBRARY_PATH="$env_dir/libs" +export DYLD_FRAMEWORK_PATH="$env_dir/libs" + cd "$DF_DIR" -exec "$env_dir/libs/Dwarf_Fortress" "$@" +exec "$exe" "$@" -- cgit 1.4.1