From a58b98e968e482ee4afd481ecf24bad9a6bf40d8 Mon Sep 17 00:00:00 2001 From: Fernando Rodrigues Date: Fri, 4 Jul 2025 23:35:53 +0000 Subject: [PATCH] openmw: refactor The usual code modernisation (finalAttrs, no with lib; in meta, no pname interpolation), and CMAKE variables now use lib.cmake*. Signed-off-by: Fernando Rodrigues --- pkgs/by-name/op/openmw/package.nix | 149 ++++++++++++++++++ pkgs/games/openmw/default.nix | 130 --------------- .../{openmw/tes3mp.nix => tes3mp/default.nix} | 0 .../{openmw => tes3mp}/tes3mp-gcc14-fix.patch | 0 pkgs/games/{openmw => tes3mp}/tes3mp.patch | 0 pkgs/top-level/all-packages.nix | 4 +- 6 files changed, 150 insertions(+), 133 deletions(-) create mode 100644 pkgs/by-name/op/openmw/package.nix delete mode 100644 pkgs/games/openmw/default.nix rename pkgs/games/{openmw/tes3mp.nix => tes3mp/default.nix} (100%) rename pkgs/games/{openmw => tes3mp}/tes3mp-gcc14-fix.patch (100%) rename pkgs/games/{openmw => tes3mp}/tes3mp.patch (100%) diff --git a/pkgs/by-name/op/openmw/package.nix b/pkgs/by-name/op/openmw/package.nix new file mode 100644 index 000000000000..0720f976e1c7 --- /dev/null +++ b/pkgs/by-name/op/openmw/package.nix @@ -0,0 +1,149 @@ +{ + lib, + stdenv, + fetchFromGitLab, + fetchpatch, + + SDL2, + boost, + bullet, + cmake, + collada-dom, + ffmpeg, + libXt, + lua, + luajit, + lz4, + mygui, + openal, + openscenegraph, + pkg-config, + qt6Packages, + recastnavigation, + unshield, + yaml-cpp, + + GLPreference ? "GLVND", +}: +let + inherit (stdenv.hostPlatform) isDarwin isLinux isAarch64; + isAarch64Linux = isLinux && isAarch64; +in +assert lib.assertOneOf "GLPreference" GLPreference [ + "GLVND" + "LEGACY" +]; +stdenv.mkDerivation (finalAttrs: { + pname = "openmw"; + version = "0.49.0"; + + __structuredAttrs = true; + strictDeps = true; + + osg' = (openscenegraph.override { colladaSupport = true; }).overrideAttrs (oldAttrs: { + patches = (oldAttrs.patches or [ ]) ++ [ + (fetchpatch { + # Darwin: Without this patch, OSG won't build osgdb_png.so, which is required by OpenMW. + name = "darwin-osg-plugins-fix.patch"; + url = "https://gitlab.com/OpenMW/openmw-dep/-/raw/1305497c009dc0e7a6a70fe14f0a2f92b96cbcb4/macos/osg.patch"; + hash = "sha256-G8Y+fnR6FRGxECWrei/Ixch3A3PkRfH6b5q9iawsSCY="; + }) + ]; + cmakeFlags = + (oldAttrs.cmakeFlags or [ ]) + ++ [ + "-Wno-dev" + (lib.cmakeFeature "OpenGL_GL_PREFERENCE" GLPreference) + (lib.cmakeBool "BUILD_OSG_PLUGINS_BY_DEFAULT" false) + (lib.cmakeBool "BUILD_OSG_DEPRECATED_SERIALIZERS" false) + ] + ++ (map (plugin: lib.cmakeBool "BUILD_OSG_PLUGIN_${plugin}" true) [ + "BMP" + "DAE" + "DDS" + "FREETYPE" + "JPEG" + "OSG" + "PNG" + "TGA" + ]); + }); + + bullet' = bullet.overrideAttrs (oldAttrs: { + cmakeFlags = (oldAttrs.cmakeFlags or [ ]) ++ [ + "-Wno-dev" + (lib.cmakeFeature "OpenGL_GL_PREFERENCE" GLPreference) + (lib.cmakeBool "USE_DOUBLE_PRECISION" true) + (lib.cmakeBool "BULLET2_MULTITHREADING" true) + ]; + }); + + src = fetchFromGitLab { + owner = "OpenMW"; + repo = "openmw"; + tag = "openmw-${finalAttrs.version}"; + hash = "sha256-Eyjn3jPpo0d7XENg0Ea/3MN60lZBSUAMkz1UtTiIP80="; + }; + + postPatch = '' + sed '1i#include ' -i components/myguiplatform/myguidatamanager.cpp # gcc12 + '' + # Don't fix Darwin app bundle + + lib.optionalString isDarwin '' + sed -i '/fixup_bundle/d' CMakeLists.txt + ''; + + nativeBuildInputs = [ + cmake + pkg-config + ] + ++ (with qt6Packages; [ + wrapQtAppsHook + ]); + + # If not set, OSG plugin .so files become shell scripts on Darwin. + dontWrapQtApps = isDarwin; + + buildInputs = [ + SDL2 + boost + collada-dom + ffmpeg + libXt + (if isAarch64Linux then lua else luajit) + lz4 + mygui + openal + recastnavigation + unshield + yaml-cpp + ] + ++ (with qt6Packages; [ + qttools + ]) + ++ (with finalAttrs; [ + bullet' + osg' + ]); + + cmakeFlags = [ + (lib.cmakeFeature "OpenGL_GL_PREFERENCE" GLPreference) + (lib.cmakeBool "USE_LUAJIT" (!isAarch64Linux)) + (lib.cmakeBool "OPENMW_USE_SYSTEM_RECASTNAVIGATION" true) + (lib.cmakeBool "OPENMW_OSX_DEPLOYMENT" isDarwin) + ]; + + meta = { + description = "Unofficial open source engine reimplementation of the game Morrowind"; + changelog = "https://gitlab.com/OpenMW/openmw/-/blob/${finalAttrs.src.tag}/CHANGELOG.md"; + homepage = "https://openmw.org"; + license = lib.licenses.gpl3Plus; + maintainers = with lib.maintainers; [ + marius851000 + sigmasquadron + ]; + platforms = with lib.platforms; linux ++ darwin ++ windows; + # Nixpkgs' NT infrastructure is currently incapable of building this. + badPlatforms = lib.platforms.windows; + }; +}) diff --git a/pkgs/games/openmw/default.nix b/pkgs/games/openmw/default.nix deleted file mode 100644 index 89f27270844d..000000000000 --- a/pkgs/games/openmw/default.nix +++ /dev/null @@ -1,130 +0,0 @@ -{ - lib, - stdenv, - fetchFromGitLab, - fetchpatch, - - SDL2, - boost, - bullet, - cmake, - ffmpeg, - libXt, - luajit, - lz4, - mygui, - openal, - openscenegraph, - pkg-config, - qttools, - recastnavigation, - unshield, - wrapQtAppsHook, - yaml-cpp, -}: - -let - GL = "GLVND"; # or "LEGACY"; - - osg' = (openscenegraph.override { colladaSupport = true; }).overrideDerivation (old: { - patches = [ - (fetchpatch { - # Darwin: Without this patch, OSG won't build osgdb_png.so, which is required by OpenMW. - name = "darwin-osg-plugins-fix.patch"; - url = "https://gitlab.com/OpenMW/openmw-dep/-/raw/1305497c009dc0e7a6a70fe14f0a2f92b96cbcb4/macos/osg.patch"; - sha256 = "sha256-G8Y+fnR6FRGxECWrei/Ixch3A3PkRfH6b5q9iawsSCY="; - }) - ]; - cmakeFlags = - (old.cmakeFlags or [ ]) - ++ [ - "-Wno-dev" - "-DOpenGL_GL_PREFERENCE=${GL}" - "-DBUILD_OSG_PLUGINS_BY_DEFAULT=0" - "-DBUILD_OSG_DEPRECATED_SERIALIZERS=0" - ] - ++ (map (e: "-DBUILD_OSG_PLUGIN_${e}=1") [ - "BMP" - "DAE" - "DDS" - "FREETYPE" - "JPEG" - "OSG" - "PNG" - "TGA" - ]); - }); - - bullet' = bullet.overrideDerivation (old: { - cmakeFlags = (old.cmakeFlags or [ ]) ++ [ - "-Wno-dev" - "-DOpenGL_GL_PREFERENCE=${GL}" - "-DUSE_DOUBLE_PRECISION=ON" - "-DBULLET2_MULTITHREADING=ON" - ]; - }); - -in -stdenv.mkDerivation rec { - pname = "openmw"; - version = "0.49.0"; - - src = fetchFromGitLab { - owner = "OpenMW"; - repo = "openmw"; - rev = "${pname}-${version}"; - hash = "sha256-Eyjn3jPpo0d7XENg0Ea/3MN60lZBSUAMkz1UtTiIP80="; - }; - - postPatch = '' - sed '1i#include ' -i components/myguiplatform/myguidatamanager.cpp # gcc12 - '' - + lib.optionalString stdenv.hostPlatform.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 = stdenv.hostPlatform.isDarwin; - - buildInputs = [ - SDL2 - boost - bullet' - ffmpeg - libXt - luajit - lz4 - mygui - openal - osg' - qttools - recastnavigation - unshield - yaml-cpp - ]; - - cmakeFlags = [ - "-DOpenGL_GL_PREFERENCE=${GL}" - "-DOPENMW_USE_SYSTEM_RECASTNAVIGATION=1" - ] - ++ lib.optionals stdenv.hostPlatform.isDarwin [ - "-DOPENMW_OSX_DEPLOYMENT=ON" - ]; - - meta = with lib; { - description = "Unofficial open source engine reimplementation of the game Morrowind"; - homepage = "https://openmw.org"; - license = licenses.gpl3Plus; - maintainers = with maintainers; [ - marius851000 - ]; - platforms = platforms.linux ++ platforms.darwin; - }; -} diff --git a/pkgs/games/openmw/tes3mp.nix b/pkgs/games/tes3mp/default.nix similarity index 100% rename from pkgs/games/openmw/tes3mp.nix rename to pkgs/games/tes3mp/default.nix diff --git a/pkgs/games/openmw/tes3mp-gcc14-fix.patch b/pkgs/games/tes3mp/tes3mp-gcc14-fix.patch similarity index 100% rename from pkgs/games/openmw/tes3mp-gcc14-fix.patch rename to pkgs/games/tes3mp/tes3mp-gcc14-fix.patch diff --git a/pkgs/games/openmw/tes3mp.patch b/pkgs/games/tes3mp/tes3mp.patch similarity index 100% rename from pkgs/games/openmw/tes3mp.patch rename to pkgs/games/tes3mp/tes3mp.patch diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8570a74fa8e6..31fe56458bde 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -14124,9 +14124,7 @@ with pkgs; openloco = pkgsi686Linux.callPackage ../games/openloco { }; - openmw = libsForQt5.callPackage ../games/openmw { }; - - openmw-tes3mp = libsForQt5.callPackage ../games/openmw/tes3mp.nix { }; + openmw-tes3mp = libsForQt5.callPackage ../games/tes3mp { }; openraPackages_2019 = import ../games/openra_2019 { inherit lib;