stuntrally: 2.7 -> 3.3, modernize, and move to by name; ogre-next: init at 3.0.0 (#445054)

This commit is contained in:
Sandro
2026-01-22 15:08:44 +00:00
committed by GitHub
8 changed files with 378 additions and 95 deletions
+86
View File
@@ -0,0 +1,86 @@
{
lib,
stdenv,
fetchFromGitHub,
fetchpatch2,
cmake,
ninja,
pkg-config,
SDL2,
xorg,
libGL,
zlib,
freetype,
tinyxml,
openvr,
rapidjson,
zziplib,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "ogre-next";
version = "3.0.0";
src = fetchFromGitHub {
owner = "OGRECave";
repo = "ogre-next";
tag = "v${finalAttrs.version}";
hash = "sha256-nJkCGKl9+6gApVtqk5OZjTOJllAJIiBKuquTYvR4NPs=";
};
patches = [
(fetchpatch2 {
# https://github.com/OGRECave/ogre-next/pull/542
url = "https://github.com/OGRECave/ogre-next/commit/c1dad50e8510dea9d75d97b0ace33a870993895c.patch?full_index=1";
hash = "sha256-JYsksDxcLrkHqlgdP3KdHlFuvYxNazlchPGoTXE9LYQ=";
})
];
nativeBuildInputs = [
cmake
pkg-config
ninja
];
buildInputs = [
SDL2
freetype
zziplib
zlib
tinyxml
openvr
rapidjson
]
++ lib.optionals stdenv.hostPlatform.isLinux [
libGL
xorg.libX11
xorg.libXaw
xorg.libXrandr
xorg.libXt
xorg.libxcb
];
# TODO: Figure out Vulkan plugin deps
cmakeFlags = [
(lib.cmakeBool "OGRE_BUILD_COMPONENT_PLANAR_REFLECTIONS" true)
# Use STB instead of freeimage since the latter is marked as insecure
(lib.cmakeBool "OGRE_CONFIG_ENABLE_FREEIMAGE" false)
(lib.cmakeBool "OGRE_CONFIG_ENABLE_STBI" true)
];
meta = {
description = "3D Object-Oriented Graphics Rendering Engine";
homepage = "https://www.ogre3d.org/";
maintainers = with lib.maintainers; [
marcin-serwin
];
platforms = lib.platforms.linux;
license = lib.licenses.mit;
# build problems around NEON intrinsics
broken = stdenv.hostPlatform.isAarch64;
};
})
@@ -0,0 +1,38 @@
diff --git a/CMake/Dependencies.cmake b/CMake/Dependencies.cmake
index fcf7cc4..7239f20 100644
--- a/CMake/Dependencies.cmake
+++ b/CMake/Dependencies.cmake
@@ -84,7 +84,10 @@ elseif(MYGUI_RENDERSYSTEM EQUAL 7)
endif()
elseif(MYGUI_RENDERSYSTEM EQUAL 8)
# Find OGRE
- find_package(OGRE_next)
+ find_package(PkgConfig REQUIRED)
+ pkg_check_modules(OGRE REQUIRED IMPORTED_TARGET GLOBAL OGRE)
+ pkg_check_modules(OGRE_HLMS REQUIRED IMPORTED_TARGET GLOBAL OGRE-Hlms)
+ set(OGRE_INCLUDE_DIR "${OGRE_INCLUDE_DIRS}")
macro_log_feature(OGRE_FOUND "ogre" "Support for the Ogre render system" "" TRUE "" "")
endif()
diff --git a/Platforms/Ogre2/Ogre2Platform/CMakeLists.txt b/Platforms/Ogre2/Ogre2Platform/CMakeLists.txt
index c40cd8f..2647ae8 100644
--- a/Platforms/Ogre2/Ogre2Platform/CMakeLists.txt
+++ b/Platforms/Ogre2/Ogre2Platform/CMakeLists.txt
@@ -1,6 +1,6 @@
set (PROJECTNAME MyGUI.Ogre2Platform)
-message(STATUS "Platform Ogre-next:" ${OGRE_NEXT})
+message(STATUS "Platform Ogre-next: ${OGRE_HLMS_INCLUDE_DIRS}")
include_directories(
include
@@ -8,8 +8,7 @@ include_directories(
${OGRE_CONFIG_INCLUDE_DIR}
${OGRE_INCLUDE_DIR}
${OGRE_SOURCE_DIR}
- ${OGRE_NEXT}/Components/Hlms/Unlit/include
- ${OGRE_NEXT}/Components/Hlms/Common/include
+ ${OGRE_HLMS_INCLUDE_DIRS}
)
include(${PROJECTNAME}.list)
+65
View File
@@ -0,0 +1,65 @@
{
stdenv,
lib,
fetchFromGitHub,
cmake,
pkg-config,
ninja,
boost,
freetype,
libuuid,
ois,
ogre-next,
libX11,
}:
stdenv.mkDerivation {
pname = "mygui";
version = "0-unstable-2024-02-01";
__structuredAttrs = true;
strictDeps = true;
src = fetchFromGitHub {
owner = "cryham";
repo = "mygui-next";
rev = "a1490ffe01d503c31a00d8277007ffcb27a4258e";
hash = "sha256-R80rTsbmkYtrjIYqdYmbfciEM4rtEzLtsM4XfShJwns=";
};
patches = [ ./mygui-use-pkg-config-for-ogre-next.patch ];
postPatch = ''
substituteInPlace CMakeLists.txt \
--replace-fail 'cmake_minimum_required(VERSION 2.6)' \
'cmake_minimum_required(VERSION 3.10)'
'';
nativeBuildInputs = [
cmake
pkg-config
ninja
];
buildInputs = [
boost
freetype
libuuid
ois
ogre-next
libX11
];
cmakeFlags = [
(lib.cmakeBool "MYGUI_BUILD_DEMOS" false)
(lib.cmakeBool "MYGUI_BUILD_TOOLS" false)
(lib.cmakeBool "MYGUI_DONT_USE_OBSOLETE" true)
(lib.cmakeFeature "MYGUI_RENDERSYSTEM" "8")
];
meta = {
description = "Library for creating GUIs for games and 3D applications (Stunt Rally fork)";
homepage = "http://mygui.info/";
license = lib.licenses.mit;
platforms = lib.platforms.linux;
};
}
+118
View File
@@ -0,0 +1,118 @@
{
lib,
fetchFromGitHub,
stdenv,
callPackage,
cmake,
boost,
SDL2,
libvorbis,
pkg-config,
makeWrapper,
enet,
bullet,
openal,
tinyxml-2,
rapidjson,
ogre-next,
ninja,
libX11,
}:
let
mygui = callPackage ./mygui.nix { };
in
stdenv.mkDerivation (finalAttrs: {
pname = "stuntrally";
version = "3.3";
src = fetchFromGitHub {
owner = "stuntrally";
repo = "stuntrally3";
tag = finalAttrs.version;
hash = "sha256-BJMMsJ/ONZTpvXetaaHlgm6rih9oZmtJNBXv0IM855Y=";
};
tracks = fetchFromGitHub {
owner = "stuntrally";
repo = "tracks3";
tag = finalAttrs.version;
hash = "sha256-nvIN5hIfTfnuJdlLNlmpmYo3WQhUxYWz14OFra/55w4=";
};
patches = [
./stuntrally-use-pkg-config-for-ogre-next.patch
./stuntrally-init-data-dirs-to-nix-paths.patch
];
postPatch = ''
substituteInPlace bin/Release/plugins.cfg \
--replace-fail "PluginFolder=." "PluginFolder=${ogre-next}/lib/OGRE/"
substituteInPlace src/vdrift/paths.cpp \
--replace-fail "@GAME_DATA_DIR@" "$out/share/stuntrally3/data" \
--replace-fail "@GAME_CONFIG_DIR@" "$out/share/stuntrally3/config"
'';
strictDeps = true;
nativeBuildInputs = [
cmake
pkg-config
ninja
makeWrapper
];
buildInputs = [
boost
ogre-next
mygui
rapidjson
SDL2
libvorbis
enet
bullet
openal
tinyxml-2
libX11
];
installPhase = ''
runHook preInstall
pushd ..
share_dir=$out/share/stuntrally3
mkdir -p $share_dir
cp -r config $share_dir/config
cp bin/Release/plugins.cfg $share_dir/config
cp -r data $share_dir/data
cp -r ${finalAttrs.tracks} $share_dir/data/tracks
install -Dm644 -t $out/share/icons/hicolor/512x512/apps data/gui/{stuntrally,sr-editor}.png
install -Dm644 -t $out/share/applications dist/{stuntrally3,sr-editor3}.desktop
for binary in sr-editor3 sr-translator stuntrally3
do
install -Dm755 -t $out/bin bin/Release/$binary
# Force X11, otherwise fails with `OGRE EXCEPTION(9:UnimplementedException)`
wrapProgram $out/bin/$binary \
--set SDL_VIDEODRIVER x11
done
popd
runHook postInstall
'';
passthru = {
inherit mygui;
};
meta = {
description = "3D racing game with Sci-Fi elements and own Track Editor";
homepage = "https://cryham.org/stuntrally/";
mainProgram = "stuntrally3";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [ pSub ];
platforms = lib.platforms.linux;
};
})
@@ -0,0 +1,26 @@
diff --git a/src/common/Main.cpp b/src/common/Main.cpp
index f63a5b8..8260bcf 100644
--- a/src/common/Main.cpp
+++ b/src/common/Main.cpp
@@ -154,7 +154,7 @@ void MainEntryPoints::createSystems(
PATHS::UserConfigDir()+"/",
PATHS::CacheDir()+"/",
PATHS::GameConfigDir()+"/",
- String("./") );
+ PATHS::GameConfigDir()+"/" );
app->mGraphicsSystem = graphicsSystem;
diff --git a/src/vdrift/paths.cpp b/src/vdrift/paths.cpp
index 9122031..d06bb59 100755
--- a/src/vdrift/paths.cpp
+++ b/src/vdrift/paths.cpp
@@ -145,6 +145,8 @@ void PATHS::Init(bool log_paths)
fs::path exe = execname(); // binary dir
game_bin = exe.parent_path().string();
+ game_data = "@GAME_DATA_DIR@";
+ game_config = "@GAME_CONFIG_DIR@";
// Find game data dir and defaults config dir
char *datadir = getenv("STUNTRALLY3_DATA_ROOT");
@@ -0,0 +1,45 @@
diff --git a/CMake/DependenciesConfig.cmake b/CMake/DependenciesConfig.cmake
index aca28ea..76f4186 100644
--- a/CMake/DependenciesConfig.cmake
+++ b/CMake/DependenciesConfig.cmake
@@ -7,11 +7,14 @@ find_package(Bullet REQUIRED)
find_package(enet REQUIRED)
find_package(MyGUI REQUIRED)
find_package(Ogg REQUIRED)
-find_package(OGRE REQUIRED)
+find_package(PkgConfig REQUIRED)
+pkg_check_modules(OGRE REQUIRED IMPORTED_TARGET GLOBAL OGRE)
+pkg_check_modules(OGRE-Hlms REQUIRED IMPORTED_TARGET GLOBAL OGRE-Hlms)
+pkg_check_modules(OGRE-Overlay REQUIRED IMPORTED_TARGET GLOBAL OGRE-Overlay)
find_package(OpenAL REQUIRED)
find_package(RapidJSON REQUIRED)
find_package(SDL2 REQUIRED)
find_package(tinyxml2 REQUIRED)
find_package(Vorbis REQUIRED)
-include(AddMissingTargets)
\ No newline at end of file
+include(AddMissingTargets)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d84ae0c..22c367d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -175,14 +175,16 @@ foreach( EXE ${EXE_LIST} )
endif ()
target_link_libraries(
- ${EXE}
+ ${EXE}
PRIVATE
boost::boost
Bullet::Bullet
enet::enet
MyGUI::MyGUI
Ogg::ogg
- OGRE::OGRE
+ PkgConfig::OGRE
+ PkgConfig::OGRE-Hlms
+ PkgConfig::OGRE-Overlay
OpenAL::OpenAL
rapidjson
SDL2::SDL2
-93
View File
@@ -1,93 +0,0 @@
{
lib,
fetchFromGitHub,
stdenv,
cmake,
boost,
ogre_13,
mygui,
ois,
SDL2,
libX11,
libvorbis,
pkg-config,
makeWrapper,
enet,
libXcursor,
bullet,
openal,
tinyxml,
tinyxml-2,
}:
let
stuntrally_ogre = ogre_13.overrideAttrs (old: {
cmakeFlags = old.cmakeFlags ++ [
"-DOGRE_NODELESS_POSITIONING=ON"
"-DOGRE_RESOURCEMANAGER_STRICT=0"
];
});
stuntrally_mygui = mygui.override {
withOgre = true;
ogre = stuntrally_ogre;
};
in
stdenv.mkDerivation rec {
pname = "stuntrally";
version = "2.7";
src = fetchFromGitHub {
owner = "stuntrally";
repo = "stuntrally";
rev = version;
hash = "sha256-0Eh9ilIHSh/Uz8TuPnXxLQfy7KF7qqNXUgBXQUCz9ys=";
};
tracks = fetchFromGitHub {
owner = "stuntrally";
repo = "tracks";
rev = version;
hash = "sha256-fglm1FetFGHM/qGTtpxDb8+k2iAREn5DQR5GPujuLms=";
};
postPatch = ''
substituteInPlace config/*-default.cfg \
--replace "screenshot_png = off" "screenshot_png = on"
substituteInPlace source/*/BaseApp_Create.cpp \
--replace "Codec_FreeImage" "Codec_STBI"
'';
preConfigure = ''
rmdir data/tracks
ln -s ${tracks}/ data/tracks
'';
nativeBuildInputs = [
cmake
pkg-config
makeWrapper
];
buildInputs = [
boost
stuntrally_ogre
stuntrally_mygui
ois
SDL2
libX11
libvorbis
enet
libXcursor
bullet
openal
tinyxml
tinyxml-2
];
meta = {
description = "Stunt Rally game with Track Editor, based on VDrift and OGRE";
homepage = "http://stuntrally.tuxfamily.org/";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [ pSub ];
platforms = lib.platforms.linux;
};
}
-2
View File
@@ -12447,8 +12447,6 @@ with pkgs;
protonup-ng = with python3Packages; toPythonApplication protonup-ng;
stuntrally = callPackage ../games/stuntrally { boost = boost183; };
the-powder-toy = callPackage ../by-name/th/the-powder-toy/package.nix {
lua = lua5_2;
};