Unverified Commit f63a34fc authored by Fernando Rodrigues's avatar Fernando Rodrigues
Browse files

openmw-tes3mp: drop



The multiplayer fork of OpenMW is currently unmaintained,
fails to build with OpenMW 0.49.0, and needs multiple GCC
14 compilation patches.

Signed-off-by: default avatarFernando Rodrigues <alpha@sigmasquadron.net>
parent a58b98e9
Loading
Loading
Loading
Loading

pkgs/games/tes3mp/default.nix

deleted100644 → 0
+0 −179
Original line number Diff line number Diff line
{
  lib,
  stdenv,
  cmake,
  openmw,
  fetchFromGitHub,
  fetchpatch,
  luajit,
  makeWrapper,
  symlinkJoin,
}:

# 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/d2a4a5d3acb64b16d9b8ca85906780aeea8d311b/tes3mp-deploy.sh#L589
      rev = "19e66190e83f53bcdcbcd6513238ed2e54878a21";
      sha256 = "WIaJkSQnoOm9T7GoAwmWl7fNg79coIo/ILUsWcbH+lA=";
    };

    patches = [
      # gcc-13 build fix:
      #   https://github.com/TES3MP/CrabNet/pull/18
      (fetchpatch {
        name = "gcc-13.patch";
        url = "https://github.com/TES3MP/CrabNet/commit/3ec9a338a7cefd5cc751c9d29095cafa4c73be20.patch";
        hash = "sha256-zE87icjX9GSnApgKQXj0K4IjlrReV/upFLjVgNYkNfM=";
      })
    ];

    cmakeFlags = [
      "-DCRABNET_ENABLE_DLL=OFF"
    ];

    nativeBuildInputs = [ cmake ];

    installPhase = ''
      install -Dm555 lib/libRakNetLibStatic.a $out/lib/libRakNetLibStatic.a
    '';
  };

  coreScripts = stdenv.mkDerivation {
    pname = "corescripts";
    version = "0.8.1";

    src = fetchFromGitHub {
      owner = "TES3MP";
      repo = "CoreScripts";
      # usually latest in stable branch (e.g. 0.7.1)
      rev = "6ae0a2a5d16171de3764817a7f8b1067ecde3def";
      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 = "openmw-tes3mp-unwrapped";
    version = "0.8.1";

    src = fetchFromGitHub {
      owner = "TES3MP";
      repo = "TES3MP";
      # usually latest in stable branch (e.g. 0.7.1)
      rev = "68954091c54d0596037c4fb54d2812313b7582a1";
      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/\""
    '';

    patches = [
      # glibc-2.34 support
      (fetchpatch {
        url = "https://gitlab.com/OpenMW/openmw/-/commit/98a7d90ee258ceef9c70b0b2955d0458ec46f048.patch";
        hash = "sha256-RhbIGeE6GyqnipisiMTwWjcFnIiR055hUPL8IkjPgZw=";
      })

      # gcc-13 build fix:
      #   https://github.com/TES3MP/TES3MP/pull/674
      (fetchpatch {
        name = "gcc-13.patch";
        url = "https://github.com/TES3MP/TES3MP/commit/7921f71a79e96f817a2009100e5105a7948b3fe2.patch";
        hash = "sha256-mpxuOSPA2xixgBeYXsxutEUI7VJL5PxAeZgaNU7YkJQ=";
      })

      # https://github.com/TES3MP/openmw-tes3mp/issues/552
      ./tes3mp.patch

      # https://github.com/TES3MP/TES3MP/pull/691
      ./tes3mp-gcc14-fix.patch
    ];

    env.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"
      ];
    };
  });

  tes3mp-server-run = ''
    config="''${XDG_CONFIG_HOME:-''$HOME/.config}"/openmw
    data="''${XDG_DATA_HOME:-''$HOME/.local/share}"/openmw
    if [[ ! -f "$config"/tes3mp-server.cfg && ! -d "$data"/server ]]; then
      mkdir -p "$config"
      echo [Plugins] > "$config"/tes3mp-server.cfg
      echo "home = $data/server" >> "$config"/tes3mp-server.cfg
      mkdir -p "$data"
      cp -r ${coreScripts}/share/openmw-tes3mp/CoreScripts "$data"/server
      chmod -R u+w "$data"/server
    fi
  '';

in
symlinkJoin {
  name = "openmw-tes3mp-${unwrapped.version}";
  inherit (unwrapped) version meta;

  nativeBuildInputs = [ makeWrapper ];

  paths = [ unwrapped ];

  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 \
      --run '${tes3mp-server-run}' \
      --chdir "$out/bin"
  '';
}
+0 −25
Original line number Diff line number Diff line
diff --git a/apps/openmw/mwstate/charactermanager.hpp b/apps/openmw/mwstate/charactermanager.hpp
index 2daf734..b77d2a8 100644
--- a/apps/openmw/mwstate/charactermanager.hpp
+++ b/apps/openmw/mwstate/charactermanager.hpp
@@ -1,6 +1,8 @@
 #ifndef GAME_STATE_CHARACTERMANAGER_H
 #define GAME_STATE_CHARACTERMANAGER_H
 
+#include <list>
+
 #include <boost/filesystem/path.hpp>
 
 #include "character.hpp"
diff --git a/components/vfs/filesystemarchive.cpp b/components/vfs/filesystemarchive.cpp
index 6eef4b9..608323e 100644
--- a/components/vfs/filesystemarchive.cpp
+++ b/components/vfs/filesystemarchive.cpp
@@ -1,5 +1,7 @@
 #include "filesystemarchive.hpp"
 
+#include <algorithm>
+
 #include <boost/filesystem.hpp>
 
 #include <components/debug/debuglog.hpp>

pkgs/games/tes3mp/tes3mp.patch

deleted100644 → 0
+0 −13
Original line number Diff line number Diff line
diff --git a/apps/openmw-mp/Script/Types.hpp b/apps/openmw-mp/Script/Types.hpp
index be365cfb8..204dcdc7b 100644
--- a/apps/openmw-mp/Script/Types.hpp
+++ b/apps/openmw-mp/Script/Types.hpp
@@ -105,7 +105,7 @@ struct ScriptFunctionPointer : public ScriptIdentity
     void *addr;
 #if (!defined(__clang__) && defined(__GNUC__))
     template<typename R, typename... Types>
-    constexpr ScriptFunctionPointer(Function<R, Types...> addr) : ScriptIdentity(addr), addr((void*)(addr)) {}
+    constexpr ScriptFunctionPointer(Function<R, Types...> addr) : ScriptIdentity(addr), addr(addr) {}
 #else
     template<typename R, typename... Types>
     constexpr ScriptFunctionPointer(Function<R, Types...> addr) : ScriptIdentity(addr), addr(addr) {}
+1 −0
Original line number Diff line number Diff line
@@ -1774,6 +1774,7 @@ mapAliases {
  openlens = throw "Lens Closed its source code, package obsolete/stale - consider lens as replacement"; # Added 2024-09-04
  openlp = throw "openlp has been removed for now because the outdated version depended on insecure and removed packages and it needs help to upgrade and maintain it; see https://github.com/NixOS/nixpkgs/pull/314882"; # Added 2024-07-29
  openmpt123 = throw "'openmpt123' has been renamed to/replaced by 'libopenmpt'"; # Converted to throw 2024-10-17
  openmw-tes3mp = throw "'openmw-tes3mp' has been removed due to lack of maintenance upstream"; # Added 2025-08-30
  opensmtpd-extras = throw "opensmtpd-extras has been removed in favor of separate opensmtpd-table-* packages"; # Added 2025-01-26
  openssl_3_0 = openssl_3; # Added 2022-06-27
  opensycl = lib.warnOnInstantiate "'opensycl' has been renamed to 'adaptivecpp'" adaptivecpp; # Added 2024-12-04
+0 −2
Original line number Diff line number Diff line
@@ -14124,8 +14124,6 @@ with pkgs;

  openloco = pkgsi686Linux.callPackage ../games/openloco { };

  openmw-tes3mp = libsForQt5.callPackage ../games/tes3mp { };

  openraPackages_2019 = import ../games/openra_2019 {
    inherit lib;
    pkgs = pkgs.__splicedPackages;