Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

openmw: ffmpeg_3 -> ffmpeg #123607

Merged
merged 2 commits into from May 20, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
38 changes: 32 additions & 6 deletions pkgs/games/openmw/default.nix
@@ -1,5 +1,18 @@
{ lib, stdenv, fetchFromGitHub, qtbase, openscenegraph, mygui, bullet, ffmpeg_3
, boost, cmake, SDL2, unshield, openal, libXt, pkg-config }:
{ lib
, mkDerivation
, fetchFromGitHub
, cmake
, pkg-config
, openscenegraph
, mygui
, bullet
, ffmpeg
, boost
, SDL2
, unshield
, openal
, libXt
}:

let
openscenegraph_ = openscenegraph.overrideDerivation (self: {
Expand All @@ -11,9 +24,9 @@ let
sha256 = "0d74hijzmj82nx3jkv5qmr3pkgvplra0b8fbjx1y3vmzxamb0axd";
};
});
in

stdenv.mkDerivation rec {
in
mkDerivation rec {
version = "0.46.0";
pname = "openmw";

Expand All @@ -25,10 +38,23 @@ stdenv.mkDerivation rec {
};

nativeBuildInputs = [ cmake pkg-config ];
buildInputs = [ boost ffmpeg_3 bullet mygui openscenegraph_ SDL2 unshield openal libXt qtbase ];

buildInputs = [
SDL2
boost
bullet
ffmpeg
libXt
mygui
openal
openscenegraph_
unshield
];

cmakeFlags = [
"-DDESIRED_QT_VERSION:INT=5"
# as of 0.46, openmw is broken with GLVND
"-DOpenGL_GL_PREFERENCE=LEGACY"
];

dontWrapQtApps = true;
Expand All @@ -37,7 +63,7 @@ stdenv.mkDerivation rec {
description = "An unofficial open source engine reimplementation of the game Morrowind";
homepage = "http://openmw.org";
license = licenses.gpl3Plus;
platforms = platforms.linux;
maintainers = with maintainers; [ abbradar ];
platforms = platforms.linux;
};
}
184 changes: 111 additions & 73 deletions pkgs/games/openmw/tes3mp.nix
@@ -1,96 +1,134 @@
{ lib, stdenv, cmake, openmw, fetchFromGitHub, luajit, makeWrapper, mygui }:
{ lib
, stdenv
, cmake
, openmw
, fetchFromGitHub
, formats
, luajit
, makeWrapper
, symlinkJoin
, mygui
, crudini
}:

# revisions are taken from https://github.com/GrimKriegor/TES3MP-deploy

let
# TES3MP_STABLE_VERSION_FILE
compatHash = "292536439eeda58becdb7e441fe2e61ebb74529e";
rakNet = fetchFromGitHub {
owner = "TES3MP";
repo = "CrabNet";
# usually fixed:
# https://github.com/GrimKriegor/TES3MP-deploy/blob/d2a4a5d3acb64b16d9b8ca85906780aeea8d311b/tes3mp-deploy.sh#L589
rev = "4eeeaad2f6c11aeb82070df35169694b4fb7b04b";
sha256 = "0p0li9l1i5lcliswm5w9jql0zff9i6fwhiq0bl130m4i7vpr4cr3";
};
rakNetLibrary = stdenv.mkDerivation {
name = "RakNetLibrary";
src = rakNet;
# raknet could also be split into dev and lib outputs
raknet = stdenv.mkDerivation {
pname = "raknet";
version = "unstable-2018-07-14";

src = fetchFromGitHub {
owner = "TES3MP";
repo = "CrabNet";
# usually fixed:
# https://github.com/GrimKriegor/TES3MP-deploy/blob/d2a4a5d3acb64b16d9b8ca85906780aeea8d311b/tes3mp-deploy.sh#L589
rev = "4eeeaad2f6c11aeb82070df35169694b4fb7b04b";
sha256 = "0p0li9l1i5lcliswm5w9jql0zff9i6fwhiq0bl130m4i7vpr4cr3";
};

nativeBuildInputs = [ cmake ];

installPhase = ''
install -Dm755 lib/libRakNetLibStatic.a $out/lib/libRakNetLibStatic.a
install -Dm555 lib/libRakNetLibStatic.a $out/lib/libRakNetLibStatic.a
'';
};
coreScripts = fetchFromGitHub {
owner = "TES3MP";
repo = "CoreScripts";
# usually latest in stable branch (e.g. 0.7.0)
rev = "24aae91d9ddad38cdb3b0e0a13af59f142803e94";
sha256 = "1rfmxxr9ircfagdpbdrzl26msdhx1i3g974cblbv69078cradfh3";

coreScripts = stdenv.mkDerivation {
pname = "corescripts";
version = "unstable-2020-07-27";

src = fetchFromGitHub {
owner = "TES3MP";
repo = "CoreScripts";
# usually latest in stable branch (e.g. 0.7.1)
rev = "3c2d31595344db586d8585db0ef1fc0da89898a0";
sha256 = "sha256-m/pt2Et58HOMc1xqllGf4hjPLXNcc14+X0h84ouZDeg=";
};

buildCommand = ''
dir=$out/share/openmw-tes3mp
mkdir -p $dir
cp -r $src $dir/CoreScripts
'';
};
# https://github.com/TES3MP/openmw-tes3mp/issues/555
mygui_ = mygui.overrideAttrs (oldAttrs: rec {
version = "3.2.2";

# 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 = "openmw-tes3mp-unwrapped";
version = "unstable-2020-08-07";

src = fetchFromGitHub {
owner = "MyGUI";
repo = "mygui";
rev = "MyGUI${version}";
sha256 = "1wk7jmwm55rhlqqcyvqsxdmwvl70bysl9azh4kd9n57qlmgk3zmw";
owner = "TES3MP";
repo = "openmw-tes3mp";
# usually latest in stable branch (e.g. 0.7.1)
rev = "ce5df6d18546e37aac9746d99c00d27a7f34b00d";
sha256 = "sha256-xLslShNA6rVFl9kt6BNGDpSYMpO25jBTCteLJoSTXdg=";
};

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"
];

# https://github.com/TES3MP/openmw-tes3mp/issues/552
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" ];
};
});
in openmw.overrideAttrs (oldAttrs: rec {
version = "2019-11-19";
name = "openmw-tes3mp-${version}";

src = fetchFromGitHub {
owner = "TES3MP";
repo = "openmw-tes3mp";
# usually latest in stable branch (e.g. 0.7.0)
rev = "ad9ee80641a3e22d0780daca051df7f4e90f3615";
sha256 = "03a1vldiv5lk7yq6lhicx3qz8hjfxhind2dj0w9lg5839ljyk6jv";

cfgFile = (formats.ini { }).generate "tes3mp-server.cfg" {
Plugins.home = "${coreScripts}/share/openmw-tes3mp/CoreScripts";
};

nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ makeWrapper ];
buildInputs = [ luajit mygui_ ] ++ oldAttrs.buildInputs;
in
symlinkJoin rec {
name = "openmw-tes3mp-${unwrapped.version}";
inherit (unwrapped) version meta;

cmakeFlags = oldAttrs.cmakeFlags ++ [
"-DBUILD_OPENCS=OFF"
"-DRakNet_INCLUDES=${rakNet}/include"
"-DRakNet_LIBRARY_RELEASE=${rakNetLibrary}/lib/libRakNetLibStatic.a"
"-DRakNet_LIBRARY_DEBUG=${rakNetLibrary}/lib/libRakNetLibStatic.a"
];
nativeBuildInputs = [ makeWrapper ];

dontWrapQtApps = true;
paths = [ unwrapped ];

# https://github.com/TES3MP/openmw-tes3mp/issues/552
patches = [
./tes3mp.patch
];
NIX_CFLAGS_COMPILE = "-fpermissive";
# crudini --merge will create the file if it doesn't exist
postBuild = ''
mkdir -p $out/bin

preConfigure = ''
substituteInPlace files/version.in \
--subst-var-by OPENMW_VERSION_COMMITHASH ${compatHash}
'';
dir=\''${XDG_CONFIG_HOME:-\$HOME/.config}/openmw

postInstall = ''
# components/process/processinvoker.cpp: path.prepend(QLatin1String("./"))
wrapProgram $out/bin/tes3mp-browser \
makeWrapper ${unwrapped}/libexec/tes3mp-browser $out/bin/tes3mp-browser \
--run "cd $out/bin"
wrapProgram $out/bin/tes3mp-server \
--run "mkdir -p ~/.config/openmw" \
--run "cd ~/.config/openmw" \
--run "[ -d CoreScripts ] || cp --no-preserve=mode -r ${coreScripts} CoreScripts" \
--run "[ -f tes3mp-server.cfg ] || echo \"[Plugins] home = \$HOME/.config/openmw/CoreScripts\" > tes3mp-server.cfg" \

makeWrapper ${unwrapped}/libexec/tes3mp-server $out/bin/tes3mp-server \
--run "mkdir -p $dir" \
--run "${crudini}/bin/crudini --merge $dir/${cfgFile.name} < ${cfgFile}" \
--run "cd $out/bin"
'';

meta = with lib; {
description = "Multiplayer for TES3:Morrowind based on OpenMW";
homepage = "https://tes3mp.com/";
license = licenses.gpl3;
platforms = [ "x86_64-linux" "i686-linux" ];
maintainers = with maintainers; [ ];
};
})
}