about summary refs log tree commit diff
path: root/nixpkgs/pkgs/games/openmw/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/games/openmw/default.nix')
-rw-r--r--nixpkgs/pkgs/games/openmw/default.nix120
1 files changed, 120 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/games/openmw/default.nix b/nixpkgs/pkgs/games/openmw/default.nix
new file mode 100644
index 000000000000..3f6ce29c3a33
--- /dev/null
+++ b/nixpkgs/pkgs/games/openmw/default.nix
@@ -0,0 +1,120 @@
+{ lib
+, stdenv
+, mkDerivation
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, pkg-config
+, wrapQtAppsHook
+, openscenegraph
+, mygui
+, bullet
+, ffmpeg
+, boost
+, SDL2
+, unshield
+, openal
+, libXt
+, lz4
+, recastnavigation
+, VideoDecodeAcceleration
+}:
+
+let
+  openscenegraph_openmw = (openscenegraph.override { colladaSupport = true; })
+    .overrideDerivation (self: {
+      src = fetchFromGitHub {
+        owner = "OpenMW";
+        repo = "osg";
+        rev = "bbe61c3bc510a4f5bb4aea21cce506519c2d24e6";
+        sha256 = "sha256-t3smLqstp7wWfi9HXJoBCek+3acqt/ySBYF8RJOG6Mo=";
+      };
+      patches = [
+        (fetchpatch {
+          # For Darwin, OSG doesn't build some plugins as they're redundant with QuickTime.
+          # OpenMW doesn't like this, and expects them to be there. Apply their patch for it.
+          name = "darwin-osg-plugins-fix.patch";
+          url = "https://gitlab.com/OpenMW/openmw-dep/-/raw/0abe3c9c3858211028d881d7706813d606335f72/macos/osg.patch";
+          sha256 = "sha256-/CLRZofZHot8juH78VG1/qhTHPhy5DoPMN+oH8hC58U=";
+        })
+      ];
+    });
+
+  bullet_openmw = bullet.overrideDerivation (old: rec {
+    version = "3.17";
+    src = fetchFromGitHub {
+      owner = "bulletphysics";
+      repo = "bullet3";
+      rev = version;
+      sha256 = "sha256-uQ4X8F8nmagbcFh0KexrmnhHIXFSB3A1CCnjPVeHL3Q=";
+    };
+    patches = [];
+    cmakeFlags = (old.cmakeFlags or []) ++ [
+      "-DUSE_DOUBLE_PRECISION=ON"
+      "-DBULLET2_MULTITHREADING=ON"
+    ];
+  });
+
+in
+mkDerivation rec {
+  pname = "openmw";
+  version = "0.47.0";
+
+  src = fetchFromGitHub {
+    owner = "OpenMW";
+    repo = "openmw";
+    rev = "${pname}-${version}";
+    sha256 = "sha256-Xq9hDUTCQr79Zzjk0CsiXclVTHK6nrSowukIQqVdrKY=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://gitlab.com/OpenMW/openmw/-/merge_requests/1239.diff";
+      sha256 = "sha256-RhbIGeE6GyqnipisiMTwWjcFnIiR055hUPL8IkjPgZw=";
+    })
+  ];
+
+  postPatch = ''
+    sed '1i#include <memory>' -i components/myguiplatform/myguidatamanager.cpp # gcc12
+  '' + lib.optionalString stdenv.isDarwin ''
+    # Don't fix Darwin app bundle
+    sed -i '/fixup_bundle/d' CMakeLists.txt
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook ];
+
+  # If not set, OSG plugin .so files become shell scripts on Darwin.
+  dontWrapQtApps = true;
+
+  buildInputs = [
+    SDL2
+    boost
+    bullet_openmw
+    ffmpeg
+    libXt
+    mygui
+    openal
+    openscenegraph_openmw
+    unshield
+    lz4
+    recastnavigation
+  ] ++ lib.optionals stdenv.isDarwin [
+    VideoDecodeAcceleration
+  ];
+
+  cmakeFlags = [
+    # as of 0.46, openmw is broken with GLVND
+    "-DOpenGL_GL_PREFERENCE=LEGACY"
+    "-DOPENMW_USE_SYSTEM_RECASTNAVIGATION=1"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "-DOPENMW_OSX_DEPLOYMENT=ON"
+  ];
+
+  meta = with lib; {
+    description = "An unofficial open source engine reimplementation of the game Morrowind";
+    homepage = "https://openmw.org";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ abbradar marius851000 ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}