ansible-later: 2.0.22 -> 2.0.23
[NixPkgs.git] / pkgs / games / openmw / tes3mp.nix
blob0f91a3c0028be83768d946c6468ae08a299416e0
1 { lib
2 , stdenv
3 , cmake
4 , openmw
5 , fetchFromGitHub
6 , formats
7 , luajit
8 , makeWrapper
9 , symlinkJoin
10 , mygui
11 , crudini
12 , bullet
15 # revisions are taken from https://github.com/GrimKriegor/TES3MP-deploy
17 let
18   # raknet could also be split into dev and lib outputs
19   raknet = stdenv.mkDerivation {
20     pname = "raknet";
21     version = "unstable-2018-07-14";
23     src = fetchFromGitHub {
24       owner = "TES3MP";
25       repo = "CrabNet";
26       # usually fixed:
27       # https://github.com/GrimKriegor/TES3MP-deploy/blob/d2a4a5d3acb64b16d9b8ca85906780aeea8d311b/tes3mp-deploy.sh#L589
28       rev = "4eeeaad2f6c11aeb82070df35169694b4fb7b04b";
29       sha256 = "0p0li9l1i5lcliswm5w9jql0zff9i6fwhiq0bl130m4i7vpr4cr3";
30     };
32     nativeBuildInputs = [ cmake ];
34     installPhase = ''
35       install -Dm555 lib/libRakNetLibStatic.a $out/lib/libRakNetLibStatic.a
36     '';
37   };
39   coreScripts = stdenv.mkDerivation {
40     pname = "corescripts";
41     version = "unstable-2020-07-27";
43     src = fetchFromGitHub {
44       owner = "TES3MP";
45       repo = "CoreScripts";
46       # usually latest in stable branch (e.g. 0.7.1)
47       rev = "3c2d31595344db586d8585db0ef1fc0da89898a0";
48       sha256 = "sha256-m/pt2Et58HOMc1xqllGf4hjPLXNcc14+X0h84ouZDeg=";
49     };
51     buildCommand = ''
52       dir=$out/share/openmw-tes3mp
53       mkdir -p $dir
54       cp -r $src $dir/CoreScripts
55     '';
56   };
58   # build an unwrapped version so we don't have to rebuild it all over again in
59   # case the scripts or wrapper scripts change.
60   unwrapped = openmw.overrideAttrs (oldAttrs: rec {
61     pname = "openmw-tes3mp-unwrapped";
62     version = "unstable-2020-08-07";
64     src = fetchFromGitHub {
65       owner = "TES3MP";
66       repo = "openmw-tes3mp";
67       # usually latest in stable branch (e.g. 0.7.1)
68       rev = "ce5df6d18546e37aac9746d99c00d27a7f34b00d";
69       sha256 = "sha256-xLslShNA6rVFl9kt6BNGDpSYMpO25jBTCteLJoSTXdg=";
70     };
72     nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ makeWrapper ];
74     buildInputs = (builtins.map (x: if x.pname or "" == "bullet" then bullet else x) oldAttrs.buildInputs)
75       ++ [ luajit ];
77     cmakeFlags = oldAttrs.cmakeFlags ++ [
78       "-DBUILD_OPENCS=OFF"
79       "-DRakNet_INCLUDES=${raknet.src}/include"
80       "-DRakNet_LIBRARY_RELEASE=${raknet}/lib/libRakNetLibStatic.a"
81       "-DRakNet_LIBRARY_DEBUG=${raknet}/lib/libRakNetLibStatic.a"
82     ];
84     prePatch = ''
85       substituteInPlace components/process/processinvoker.cpp \
86         --replace "\"./\"" "\"$out/bin/\""
87     '';
89     # https://github.com/TES3MP/openmw-tes3mp/issues/552
90     patches = oldAttrs.patches ++ [ ./tes3mp.patch ];
92     NIX_CFLAGS_COMPILE = "-fpermissive";
94     preConfigure = ''
95       substituteInPlace files/version.in \
96         --subst-var-by OPENMW_VERSION_COMMITHASH ${src.rev}
97     '';
99     # move everything that we wrap out of the way
100     postInstall = ''
101       mkdir -p $out/libexec
102       mv $out/bin/tes3mp-* $out/libexec
103     '';
105     meta = with lib; {
106       description = "Multiplayer for TES3:Morrowind based on OpenMW";
107       homepage = "https://tes3mp.com/";
108       license = licenses.gpl3Only;
109       maintainers = with maintainers; [ peterhoeg ];
110       platforms = [ "x86_64-linux" "i686-linux" ];
111       broken = true;
112     };
113   });
115   cfgFile = (formats.ini { }).generate "tes3mp-server.cfg" {
116     Plugins.home = "${coreScripts}/share/openmw-tes3mp/CoreScripts";
117   };
120 symlinkJoin rec {
121   name = "openmw-tes3mp-${unwrapped.version}";
122   inherit (unwrapped) version meta;
124   nativeBuildInputs = [ makeWrapper ];
126   paths = [ unwrapped ];
128   # crudini --merge will create the file if it doesn't exist
129   postBuild = ''
130     mkdir -p $out/bin
132     dir=\''${XDG_CONFIG_HOME:-\$HOME/.config}/openmw
134     makeWrapper ${unwrapped}/libexec/tes3mp-browser $out/bin/tes3mp-browser \
135       --chdir "$out/bin"
137     makeWrapper ${unwrapped}/libexec/tes3mp-server $out/bin/tes3mp-server \
138       --run "mkdir -p $dir" \
139       --run "${crudini}/bin/crudini --merge $dir/${cfgFile.name} < ${cfgFile}" \
140       --chdir "$out/bin"
141   '';