diff options
Diffstat (limited to 'nixpkgs/pkgs/games/dwarf-fortress/game.nix')
-rw-r--r-- | nixpkgs/pkgs/games/dwarf-fortress/game.nix | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/game.nix b/nixpkgs/pkgs/games/dwarf-fortress/game.nix new file mode 100644 index 000000000000..b5c80a0a56dc --- /dev/null +++ b/nixpkgs/pkgs/games/dwarf-fortress/game.nix @@ -0,0 +1,101 @@ +{ stdenv, lib, fetchurl +, SDL, dwarf-fortress-unfuck + +# Our own "unfuck" libs for macOS +, ncurses, fmodex, gcc + +, dfVersion, df-hashes +}: + +with lib; + +let + libpath = makeLibraryPath [ stdenv.cc.cc stdenv.cc.libc dwarf-fortress-unfuck SDL ]; + + homepage = http://www.bay12games.com/dwarves/; + + # Map Dwarf Fortress platform names to Nixpkgs platform names. + # Other srcs are avilable like 32-bit mac & win, but I have only + # included the ones most likely to be needed by Nixpkgs users. + platforms = { + "x86_64-linux" = "linux"; + "i686-linux" = "linux32"; + "x86_64-darwin" = "osx"; + "i686-darwin" = "osx32"; + "x86_64-cygwin" = "win"; + "i686-cygwin" = "win32"; + }; + + dfVersionTriple = splitString "." dfVersion; + baseVersion = elemAt dfVersionTriple 1; + patchVersion = elemAt dfVersionTriple 2; + + game = if hasAttr dfVersion df-hashes + then getAttr dfVersion df-hashes + else throw "Unknown Dwarf Fortress version: ${dfVersion}"; + dfPlatform = if hasAttr stdenv.hostPlatform.system platforms + then getAttr stdenv.hostPlatform.system platforms + else throw "Unsupported system: ${stdenv.hostPlatform.system}"; + sha256 = if hasAttr dfPlatform game + then getAttr dfPlatform game + else throw "Unsupported dfPlatform: ${dfPlatform}"; + +in + +stdenv.mkDerivation { + name = "dwarf-fortress-${dfVersion}"; + + src = fetchurl { + url = "${homepage}df_${baseVersion}_${patchVersion}_${dfPlatform}.tar.bz2"; + inherit sha256; + }; + + installPhase = '' + mkdir -p $out + cp -r * $out + rm $out/libs/lib* + + 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}" \ + $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 $exe | awk '{ print $1 }' > $out/hash.md5 + ''; + + passthru = { + inherit baseVersion patchVersion dfVersion; + updateScript = ./update.sh; + }; + + meta = { + description = "A single-player fantasy game with a randomly generated adventure world"; + inherit homepage; + license = licenses.unfreeRedistributable; + platforms = attrNames platforms; + maintainers = with maintainers; [ a1russell robbinch roconnor the-kenny abbradar numinit ]; + }; +} |