nixpkgs-overlay/pkgs/openmw/tes3mp.nix

150 lines
4.2 KiB
Nix
Raw Normal View History

2023-02-10 18:45:17 +01:00
{ lib
, stdenv
, cmake
, openmw
, fetchFromGitHub
, formats
, luajit
, makeWrapper
, symlinkJoin
, mygui
, crudini
}:
# revisions are taken from https://github.com/GrimKriegor/TES3MP-deploy
let
# raknet could also be split into dev and lib outputs
raknet = stdenv.mkDerivation {
pname = "raknet";
version = "unstable-2020-01-19";
src = fetchFromGitHub {
owner = "TES3MP";
repo = "CrabNet";
# usually fixed:
# https://github.com/GrimKriegor/TES3MP-deploy/blob/af49c67317258624debe1b5a9f8792f4cc3ad2d1/tes3mp-deploy.sh#L518
rev = "19e66190e83f53bcdcbcd6513238ed2e54878a21";
sha256 = "sha256-WIaJkSQnoOm9T7GoAwmWl7fNg79coIo/ILUsWcbH+lA=";
};
nativeBuildInputs = [ cmake ];
installPhase = ''
install -Dm555 lib/libRakNetLibStatic.a $out/lib/libRakNetLibStatic.a
'';
};
coreScripts = stdenv.mkDerivation {
pname = "corescripts";
version = "unstable-2022-10-21";
src = fetchFromGitHub {
owner = "TES3MP";
repo = "CoreScripts";
# usually latest in stable branch (e.g. 0.8.1)
rev = "6ae0a2a5d16171de3764817a7f8b1067ecde3def";
sha256 = "sha256-8j/Sr9IRMNFPEVfFzdb42PckHS3KW7FH7x7rRxIh5gY=";
};
buildCommand = ''
dir=$out/share/openmw-tes3mp
mkdir -p $dir
cp -r $src $dir/CoreScripts
'';
};
# build an unwrapped version so we don't have to rebuild it all over again in
# case the scripts or wrapper scripts change.
unwrapped = openmw.overrideAttrs (oldAttrs: rec {
pname = "tes3mp-unwrapped";
version = "0.8.1";
src = fetchFromGitHub {
owner = "TES3MP";
repo = "TES3MP";
# usually latest in stable branch (e.g. 0.8.1)
rev = "68954091c54d0596037c4fb54d2812313b7582a1";
sha256 = "sha256-8/bV4sw7Q8l8bDTHGQ0t4owf6J6h9q468JFx4KegY5o=";
};
nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ makeWrapper ];
buildInputs = oldAttrs.buildInputs ++ [ luajit ];
cmakeFlags = oldAttrs.cmakeFlags ++ [
"-DBUILD_OPENCS=OFF"
"-DRakNet_INCLUDES=${raknet.src}/include"
"-DRakNet_LIBRARY_RELEASE=${raknet}/lib/libRakNetLibStatic.a"
"-DRakNet_LIBRARY_DEBUG=${raknet}/lib/libRakNetLibStatic.a"
];
prePatch = ''
substituteInPlace components/process/processinvoker.cpp \
--replace "\"./\"" "\"$out/bin/\""
'';
# https://github.com/TES3MP/openmw-tes3mp/issues/552
patches = oldAttrs.patches ++ [ ./tes3mp.patch ];
NIX_CFLAGS_COMPILE = "-fpermissive";
preConfigure = ''
substituteInPlace files/version.in \
--subst-var-by OPENMW_VERSION_COMMITHASH ${src.rev}
'';
# move everything that we wrap out of the way
postInstall = ''
mkdir -p $out/libexec
mv $out/bin/tes3mp-* $out/libexec
'';
meta = with lib; {
description = "Multiplayer for TES3:Morrowind based on OpenMW";
homepage = "https://tes3mp.com/";
license = licenses.gpl3Only;
maintainers = with maintainers; [ peterhoeg ];
platforms = [ "x86_64-linux" "i686-linux" ];
};
});
2023-03-12 23:11:42 +01:00
cfgDir="/home/christian/.config/openmw";
serverDir="/home/christian/.local/share/openmw/server";
2023-02-10 18:45:17 +01:00
cfgFile = (formats.ini { }).generate "tes3mp-server.cfg" {
2023-03-12 23:11:42 +01:00
Plugins.home = "${serverDir}";
2023-02-10 18:45:17 +01:00
};
in
symlinkJoin rec {
name = "openmw-tes3mp-${unwrapped.version}";
inherit (unwrapped) version meta;
nativeBuildInputs = [ makeWrapper ];
paths = [ unwrapped ];
2023-02-10 20:06:02 +01:00
2023-02-10 18:45:17 +01:00
# crudini --merge will create the file if it doesn't exist
postBuild = ''
mkdir -p $out/bin
makeWrapper ${unwrapped}/libexec/tes3mp-browser $out/bin/tes3mp-browser \
--chdir "$out/bin"
makeWrapper ${unwrapped}/libexec/tes3mp-server $out/bin/tes3mp-server \
2023-02-10 20:06:02 +01:00
--run "mkdir -p ${cfgDir}" \
2023-03-12 23:11:42 +01:00
--run "mkdir -p ${serverDir}" \
2023-02-10 20:06:02 +01:00
--run "${crudini}/bin/crudini --merge ${cfgDir}/${cfgFile.name} < ${cfgFile}" \
2023-03-12 23:11:42 +01:00
--run "cd ${serverDir}" \
--run "rm -f lib scripts" \
--run "ln -s ${coreScripts}/share/openmw-tes3mp/CoreScripts/lib lib" \
--run "ln -s ${coreScripts}/share/openmw-tes3mp/CoreScripts/scripts scripts" \
--run "[ ! -d data ] && cp -R ${coreScripts}/share/openmw-tes3mp/CoreScripts/data data" \
--run "chmod -R u+w data"
2023-02-10 18:45:17 +01:00
'';
}