From 82798aecb9bff3f2a3c883b7f2fc14dc58ff0010 Mon Sep 17 00:00:00 2001 From: Alexey Sokolov Date: Fri, 29 May 2020 08:40:37 +0100 Subject: games-engines/openmw: version bump - 0.46.0 Add option to use forked OSG Fix build on ~arch, fix tests on i686, fix installation on Prefix Closes: https://bugs.gentoo.org/673864 Package-Manager: Portage-2.3.99, Repoman-2.3.22 Signed-off-by: Alexey Sokolov Closes: https://github.com/gentoo/gentoo/pull/16000 Signed-off-by: Joonas Niilola --- games-engines/openmw/Manifest | 2 + .../openmw/files/openmw-0.46.0-fix-cast.patch | 214 +++++++++++++ .../openmw/files/openmw-0.46.0-floattest2.patch | 139 +++++++++ .../files/openmw-0.46.0-missing-include.patch | 19 ++ .../openmw/files/openmw-0.46.0-mygui-license.patch | 16 + .../files/openmw-0.46.0-nifbullet-test.patch | 335 +++++++++++++++++++++ .../files/openmw-0.46.0-recastnavigation.patch | 24 ++ games-engines/openmw/metadata.xml | 2 + games-engines/openmw/openmw-0.46.0.ebuild | 161 ++++++++++ games-engines/openmw/openmw-9999.ebuild | 32 +- 10 files changed, 933 insertions(+), 11 deletions(-) create mode 100644 games-engines/openmw/files/openmw-0.46.0-fix-cast.patch create mode 100644 games-engines/openmw/files/openmw-0.46.0-floattest2.patch create mode 100644 games-engines/openmw/files/openmw-0.46.0-missing-include.patch create mode 100644 games-engines/openmw/files/openmw-0.46.0-mygui-license.patch create mode 100644 games-engines/openmw/files/openmw-0.46.0-nifbullet-test.patch create mode 100644 games-engines/openmw/files/openmw-0.46.0-recastnavigation.patch create mode 100644 games-engines/openmw/openmw-0.46.0.ebuild (limited to 'games-engines') diff --git a/games-engines/openmw/Manifest b/games-engines/openmw/Manifest index fd925092a09b..6f88c3b39a94 100644 --- a/games-engines/openmw/Manifest +++ b/games-engines/openmw/Manifest @@ -1 +1,3 @@ DIST openmw-0.45.0.tar.gz 4711103 BLAKE2B 85676294b07170dd6845892e9e7b354c5767428584c76ea2e1a64e9f9c72c46c279fdf5043058d37b927cb55e6cf2e2222833129d64954cdcdb3af4eb4b84dc3 SHA512 b968426659457cf486f6756f7ab82cc4cb34a92923c433dd86f711e5d7097f75441ed17daa50d21f15f1847f5aed1f4c3a094a06cfd3f2e9b90aa182742c596f +DIST openmw-0.46.0-floattest.patch 43168 BLAKE2B 060b529fd4cd01f0fc723bb5a00a256b9c1ae4413c7b22581467cce75416e01041c3af22f0215ad9b1c475965a988065e0860c01c1e71d97454b022eec4779ea SHA512 0e165417e9ae047231fdc27b62251b33867f3782c1753f81705c886d6d3a433c8bbc3b4653a2555bc644bad11db9769d4bc2abcc84ca3ab23fabb6b80347bc32 +DIST openmw-0.46.0.tar.gz 5155004 BLAKE2B 8ad94a7fffe5a0739c56c778efe2ec17ef66c312a7fe5caf015cf3cad2bc17d2abe8cdc3f4134049a32fe55c4f4b3f72678d2d0ce1037fd02f6ac753b9d89b2c SHA512 da384aead300552817c0d0ce03515a5ccc95dcab4e02d4c1dd0d6c5f1b01ee01209bbaea74e2d12021e3465e49b051823bb018de39675c5a22c6892893624486 diff --git a/games-engines/openmw/files/openmw-0.46.0-fix-cast.patch b/games-engines/openmw/files/openmw-0.46.0-fix-cast.patch new file mode 100644 index 000000000000..f6e82cb3a2c9 --- /dev/null +++ b/games-engines/openmw/files/openmw-0.46.0-fix-cast.patch @@ -0,0 +1,214 @@ +Fixes build on ~arch system, patch from upstream, to be dropped for 0.47 + +From 208a50340db5506dded60c05272ce9692773baa9 Mon Sep 17 00:00:00 2001 +From: elsid +Date: Mon, 13 Apr 2020 20:45:07 +0200 +Subject: [PATCH] Specialize DetourNavigator::ObjectId ctor for pointers + +To fix msvc error: +components\detournavigator\objectid.hpp(14,13): error C2440: 'reinterpret_cast': cannot convert from 'const T' to 'size_t' + with + [ + T=unsigned long + ] +diff --git a/apps/openmw_test_suite/detournavigator/tilecachedrecastmeshmanager.cpp b/apps/openmw_test_suite/detournavigator/tilecachedrecastmeshmanager.cpp +index 5275d9119e..e44ae48786 100644 +--- a/apps/openmw_test_suite/detournavigator/tilecachedrecastmeshmanager.cpp ++++ b/apps/openmw_test_suite/detournavigator/tilecachedrecastmeshmanager.cpp +@@ -61,15 +61,15 @@ namespace + { + TileCachedRecastMeshManager manager(mSettings); + const btBoxShape boxShape(btVector3(20, 20, 100)); +- EXPECT_TRUE(manager.addObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground)); ++ EXPECT_TRUE(manager.addObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground)); + } + + TEST_F(DetourNavigatorTileCachedRecastMeshManagerTest, add_object_for_existing_object_should_return_false) + { + TileCachedRecastMeshManager manager(mSettings); + const btBoxShape boxShape(btVector3(20, 20, 100)); +- manager.addObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); +- EXPECT_FALSE(manager.addObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground)); ++ manager.addObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); ++ EXPECT_FALSE(manager.addObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground)); + } + + TEST_F(DetourNavigatorTileCachedRecastMeshManagerTest, update_object_for_changed_object_should_return_changed_tiles) +@@ -77,9 +77,9 @@ namespace + TileCachedRecastMeshManager manager(mSettings); + const btBoxShape boxShape(btVector3(20, 20, 100)); + const btTransform transform(btMatrix3x3::getIdentity(), btVector3(getTileSize(mSettings) / mSettings.mRecastScaleFactor, 0, 0)); +- manager.addObject(ObjectId(1ul), boxShape, transform, AreaType::AreaType_ground); ++ manager.addObject(ObjectId(&boxShape), boxShape, transform, AreaType::AreaType_ground); + EXPECT_THAT( +- manager.updateObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground), ++ manager.updateObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground), + ElementsAre(TilePosition(-1, -1), TilePosition(-1, 0), TilePosition(0, -1), TilePosition(0, 0), + TilePosition(1, -1), TilePosition(1, 0)) + ); +@@ -89,9 +89,9 @@ namespace + { + TileCachedRecastMeshManager manager(mSettings); + const btBoxShape boxShape(btVector3(20, 20, 100)); +- manager.addObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); ++ manager.addObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); + EXPECT_EQ( +- manager.updateObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground), ++ manager.updateObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground), + std::vector() + ); + } +@@ -100,7 +100,7 @@ namespace + { + TileCachedRecastMeshManager manager(mSettings); + const btBoxShape boxShape(btVector3(20, 20, 100)); +- manager.addObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); ++ manager.addObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); + EXPECT_NE(manager.getMesh(TilePosition(-1, -1)), nullptr); + EXPECT_NE(manager.getMesh(TilePosition(-1, 0)), nullptr); + EXPECT_NE(manager.getMesh(TilePosition(0, -1)), nullptr); +@@ -111,7 +111,7 @@ namespace + { + TileCachedRecastMeshManager manager(mSettings); + const btBoxShape boxShape(btVector3(20, 20, 100)); +- manager.addObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); ++ manager.addObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); + EXPECT_EQ(manager.getMesh(TilePosition(1, 0)), nullptr); + } + +@@ -121,13 +121,13 @@ namespace + const btBoxShape boxShape(btVector3(20, 20, 100)); + const btTransform transform(btMatrix3x3::getIdentity(), btVector3(getTileSize(mSettings) / mSettings.mRecastScaleFactor, 0, 0)); + +- manager.addObject(ObjectId(1ul), boxShape, transform, AreaType::AreaType_ground); ++ manager.addObject(ObjectId(&boxShape), boxShape, transform, AreaType::AreaType_ground); + EXPECT_NE(manager.getMesh(TilePosition(0, -1)), nullptr); + EXPECT_NE(manager.getMesh(TilePosition(0, 0)), nullptr); + EXPECT_NE(manager.getMesh(TilePosition(1, 0)), nullptr); + EXPECT_NE(manager.getMesh(TilePosition(1, -1)), nullptr); + +- manager.updateObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); ++ manager.updateObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); + EXPECT_NE(manager.getMesh(TilePosition(-1, -1)), nullptr); + EXPECT_NE(manager.getMesh(TilePosition(-1, 0)), nullptr); + EXPECT_NE(manager.getMesh(TilePosition(0, -1)), nullptr); +@@ -140,11 +140,11 @@ namespace + const btBoxShape boxShape(btVector3(20, 20, 100)); + const btTransform transform(btMatrix3x3::getIdentity(), btVector3(getTileSize(mSettings) / mSettings.mRecastScaleFactor, 0, 0)); + +- manager.addObject(ObjectId(1ul), boxShape, transform, AreaType::AreaType_ground); ++ manager.addObject(ObjectId(&boxShape), boxShape, transform, AreaType::AreaType_ground); + EXPECT_EQ(manager.getMesh(TilePosition(-1, -1)), nullptr); + EXPECT_EQ(manager.getMesh(TilePosition(-1, 0)), nullptr); + +- manager.updateObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); ++ manager.updateObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); + EXPECT_EQ(manager.getMesh(TilePosition(1, 0)), nullptr); + EXPECT_EQ(manager.getMesh(TilePosition(1, -1)), nullptr); + } +@@ -153,8 +153,8 @@ namespace + { + TileCachedRecastMeshManager manager(mSettings); + const btBoxShape boxShape(btVector3(20, 20, 100)); +- manager.addObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); +- manager.removeObject(ObjectId(1ul)); ++ manager.addObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); ++ manager.removeObject(ObjectId(&boxShape)); + EXPECT_EQ(manager.getMesh(TilePosition(-1, -1)), nullptr); + EXPECT_EQ(manager.getMesh(TilePosition(-1, 0)), nullptr); + EXPECT_EQ(manager.getMesh(TilePosition(0, -1)), nullptr); +@@ -166,13 +166,13 @@ namespace + TileCachedRecastMeshManager manager(mSettings); + const btBoxShape boxShape(btVector3(20, 20, 100)); + +- manager.addObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); ++ manager.addObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); + EXPECT_NE(manager.getMesh(TilePosition(-1, -1)), nullptr); + EXPECT_NE(manager.getMesh(TilePosition(-1, 0)), nullptr); + EXPECT_NE(manager.getMesh(TilePosition(0, -1)), nullptr); + EXPECT_NE(manager.getMesh(TilePosition(0, 0)), nullptr); + +- manager.updateObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); ++ manager.updateObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); + EXPECT_NE(manager.getMesh(TilePosition(-1, -1)), nullptr); + EXPECT_NE(manager.getMesh(TilePosition(-1, 0)), nullptr); + EXPECT_NE(manager.getMesh(TilePosition(0, -1)), nullptr); +@@ -184,7 +184,7 @@ namespace + TileCachedRecastMeshManager manager(mSettings); + const auto initialRevision = manager.getRevision(); + const btBoxShape boxShape(btVector3(20, 20, 100)); +- manager.addObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); ++ manager.addObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); + EXPECT_EQ(manager.getRevision(), initialRevision + 1); + } + +@@ -192,9 +192,9 @@ namespace + { + TileCachedRecastMeshManager manager(mSettings); + const btBoxShape boxShape(btVector3(20, 20, 100)); +- manager.addObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); ++ manager.addObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); + const auto beforeAddRevision = manager.getRevision(); +- manager.addObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); ++ manager.addObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); + EXPECT_EQ(manager.getRevision(), beforeAddRevision); + } + +@@ -203,9 +203,9 @@ namespace + TileCachedRecastMeshManager manager(mSettings); + const btBoxShape boxShape(btVector3(20, 20, 100)); + const btTransform transform(btMatrix3x3::getIdentity(), btVector3(getTileSize(mSettings) / mSettings.mRecastScaleFactor, 0, 0)); +- manager.addObject(ObjectId(1ul), boxShape, transform, AreaType::AreaType_ground); ++ manager.addObject(ObjectId(&boxShape), boxShape, transform, AreaType::AreaType_ground); + const auto beforeUpdateRevision = manager.getRevision(); +- manager.updateObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); ++ manager.updateObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); + EXPECT_EQ(manager.getRevision(), beforeUpdateRevision + 1); + } + +@@ -213,9 +213,9 @@ namespace + { + TileCachedRecastMeshManager manager(mSettings); + const btBoxShape boxShape(btVector3(20, 20, 100)); +- manager.addObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); ++ manager.addObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); + const auto beforeUpdateRevision = manager.getRevision(); +- manager.updateObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); ++ manager.updateObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); + EXPECT_EQ(manager.getRevision(), beforeUpdateRevision); + } + +@@ -223,9 +223,9 @@ namespace + { + TileCachedRecastMeshManager manager(mSettings); + const btBoxShape boxShape(btVector3(20, 20, 100)); +- manager.addObject(ObjectId(1ul), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); ++ manager.addObject(ObjectId(&boxShape), boxShape, btTransform::getIdentity(), AreaType::AreaType_ground); + const auto beforeRemoveRevision = manager.getRevision(); +- manager.removeObject(ObjectId(1ul)); ++ manager.removeObject(ObjectId(&boxShape)); + EXPECT_EQ(manager.getRevision(), beforeRemoveRevision + 1); + } + +@@ -233,7 +233,7 @@ namespace + { + TileCachedRecastMeshManager manager(mSettings); + const auto beforeRemoveRevision = manager.getRevision(); +- manager.removeObject(ObjectId(1ul)); ++ manager.removeObject(ObjectId(&manager)); + EXPECT_EQ(manager.getRevision(), beforeRemoveRevision); + } + } +diff --git a/components/detournavigator/objectid.hpp b/components/detournavigator/objectid.hpp +index 3b56924b13..6ddcc9169d 100644 +--- a/components/detournavigator/objectid.hpp ++++ b/components/detournavigator/objectid.hpp +@@ -10,7 +10,7 @@ namespace DetourNavigator + { + public: + template +- explicit ObjectId(const T value) throw() ++ explicit ObjectId(T* value) throw() + : mValue(reinterpret_cast(value)) + { + } diff --git a/games-engines/openmw/files/openmw-0.46.0-floattest2.patch b/games-engines/openmw/files/openmw-0.46.0-floattest2.patch new file mode 100644 index 000000000000..ca6e355eab7d --- /dev/null +++ b/games-engines/openmw/files/openmw-0.46.0-floattest2.patch @@ -0,0 +1,139 @@ +https://gitlab.com/OpenMW/openmw/-/merge_requests/253 + +--- a/apps/openmw_test_suite/detournavigator/navigator.cpp 2020-06-30 16:07:31.544410916 +0100 ++++ b/apps/openmw_test_suite/detournavigator/navigator.cpp 2020-06-30 16:08:50.405698937 +0100 +@@ -458,25 +458,25 @@ + + EXPECT_EQ(mNavigator->findPath(mAgentHalfExtents, mStepSize, mStart, mEnd, Flag_swim, mAreaCosts, mOut), Status::Success); + +- EXPECT_EQ(mPath, std::deque({ +- osg::Vec3f(0, 215, 185.33331298828125), +- osg::Vec3f(0, 186.6666717529296875, 185.33331298828125), +- osg::Vec3f(0, 158.333343505859375, 185.33331298828125), +- osg::Vec3f(0, 130.0000152587890625, 185.33331298828125), +- osg::Vec3f(0, 101.66667938232421875, 185.33331298828125), +- osg::Vec3f(0, 73.333343505859375, 185.33331298828125), +- osg::Vec3f(0, 45.0000152587890625, 185.33331298828125), +- osg::Vec3f(0, 16.6666812896728515625, 185.33331298828125), +- osg::Vec3f(0, -11.66664981842041015625, 185.33331298828125), +- osg::Vec3f(0, -39.999980926513671875, 185.33331298828125), +- osg::Vec3f(0, -68.33331298828125, 185.33331298828125), +- osg::Vec3f(0, -96.66664886474609375, 185.33331298828125), +- osg::Vec3f(0, -124.99997711181640625, 185.33331298828125), +- osg::Vec3f(0, -153.33331298828125, 185.33331298828125), +- osg::Vec3f(0, -181.6666412353515625, 185.33331298828125), +- osg::Vec3f(0, -209.999969482421875, 185.33331298828125), +- osg::Vec3f(0, -215, 185.33331298828125), +- })) << mPath; ++ EXPECT_THAT(mPath, ElementsAre( ++ Vec3fEq(0, 215, 185.33331298828125), ++ Vec3fEq(0, 186.6666717529296875, 185.33331298828125), ++ Vec3fEq(0, 158.333343505859375, 185.33331298828125), ++ Vec3fEq(0, 130.0000152587890625, 185.33331298828125), ++ Vec3fEq(0, 101.66667938232421875, 185.33331298828125), ++ Vec3fEq(0, 73.333343505859375, 185.33331298828125), ++ Vec3fEq(0, 45.0000152587890625, 185.33331298828125), ++ Vec3fEq(0, 16.6666812896728515625, 185.33331298828125), ++ Vec3fEq(0, -11.66664981842041015625, 185.33331298828125), ++ Vec3fEq(0, -39.999980926513671875, 185.33331298828125), ++ Vec3fEq(0, -68.33331298828125, 185.33331298828125), ++ Vec3fEq(0, -96.66664886474609375, 185.33331298828125), ++ Vec3fEq(0, -124.99997711181640625, 185.33331298828125), ++ Vec3fEq(0, -153.33331298828125, 185.33331298828125), ++ Vec3fEq(0, -181.6666412353515625, 185.33331298828125), ++ Vec3fEq(0, -209.999969482421875, 185.33331298828125), ++ Vec3fEq(0, -215, 185.33331298828125) ++ )); + } + + TEST_F(DetourNavigatorNavigatorTest, path_should_be_over_water_when_ground_cross_water_with_swim_and_walk_flags) +@@ -505,25 +505,25 @@ + EXPECT_EQ(mNavigator->findPath(mAgentHalfExtents, mStepSize, mStart, mEnd, Flag_swim | Flag_walk, mAreaCosts, mOut), + Status::Success); + +- EXPECT_EQ(mPath, std::deque({ +- osg::Vec3f(0, 215, -94.75363922119140625), +- osg::Vec3f(0, 186.6666717529296875, -106.0000152587890625), +- osg::Vec3f(0, 158.333343505859375, -115.85507965087890625), +- osg::Vec3f(0, 130.0000152587890625, -125.71016693115234375), +- osg::Vec3f(0, 101.66667938232421875, -135.5652313232421875), +- osg::Vec3f(0, 73.333343505859375, -143.3333587646484375), +- osg::Vec3f(0, 45.0000152587890625, -143.3333587646484375), +- osg::Vec3f(0, 16.6666812896728515625, -143.3333587646484375), +- osg::Vec3f(0, -11.66664981842041015625, -143.3333587646484375), +- osg::Vec3f(0, -39.999980926513671875, -143.3333587646484375), +- osg::Vec3f(0, -68.33331298828125, -143.3333587646484375), +- osg::Vec3f(0, -96.66664886474609375, -137.3043670654296875), +- osg::Vec3f(0, -124.99997711181640625, -127.44930267333984375), +- osg::Vec3f(0, -153.33331298828125, -117.59423065185546875), +- osg::Vec3f(0, -181.6666412353515625, -107.73915863037109375), +- osg::Vec3f(0, -209.999969482421875, -97.7971343994140625), +- osg::Vec3f(0, -215, -94.75363922119140625), +- })) << mPath; ++ EXPECT_THAT(mPath, ElementsAre( ++ Vec3fEq(0, 215, -94.75363922119140625), ++ Vec3fEq(0, 186.6666717529296875, -106.0000152587890625), ++ Vec3fEq(0, 158.333343505859375, -115.85507965087890625), ++ Vec3fEq(0, 130.0000152587890625, -125.71016693115234375), ++ Vec3fEq(0, 101.66667938232421875, -135.5652313232421875), ++ Vec3fEq(0, 73.333343505859375, -143.3333587646484375), ++ Vec3fEq(0, 45.0000152587890625, -143.3333587646484375), ++ Vec3fEq(0, 16.6666812896728515625, -143.3333587646484375), ++ Vec3fEq(0, -11.66664981842041015625, -143.3333587646484375), ++ Vec3fEq(0, -39.999980926513671875, -143.3333587646484375), ++ Vec3fEq(0, -68.33331298828125, -143.3333587646484375), ++ Vec3fEq(0, -96.66664886474609375, -137.3043670654296875), ++ Vec3fEq(0, -124.99997711181640625, -127.44930267333984375), ++ Vec3fEq(0, -153.33331298828125, -117.59423065185546875), ++ Vec3fEq(0, -181.6666412353515625, -107.73915863037109375), ++ Vec3fEq(0, -209.999969482421875, -97.7971343994140625), ++ Vec3fEq(0, -215, -94.75363922119140625) ++ )); + } + + TEST_F(DetourNavigatorNavigatorTest, path_should_be_over_water_when_ground_cross_water_with_max_int_cells_size_and_swim_and_walk_flags) +@@ -552,25 +552,25 @@ + EXPECT_EQ(mNavigator->findPath(mAgentHalfExtents, mStepSize, mStart, mEnd, Flag_swim | Flag_walk, mAreaCosts, mOut), + Status::Success); + +- EXPECT_EQ(mPath, std::deque({ +- osg::Vec3f(0, 215, -94.75363922119140625), +- osg::Vec3f(0, 186.6666717529296875, -106.0000152587890625), +- osg::Vec3f(0, 158.333343505859375, -115.85507965087890625), +- osg::Vec3f(0, 130.0000152587890625, -125.71016693115234375), +- osg::Vec3f(0, 101.66667938232421875, -135.5652313232421875), +- osg::Vec3f(0, 73.333343505859375, -143.3333587646484375), +- osg::Vec3f(0, 45.0000152587890625, -143.3333587646484375), +- osg::Vec3f(0, 16.6666812896728515625, -143.3333587646484375), +- osg::Vec3f(0, -11.66664981842041015625, -143.3333587646484375), +- osg::Vec3f(0, -39.999980926513671875, -143.3333587646484375), +- osg::Vec3f(0, -68.33331298828125, -143.3333587646484375), +- osg::Vec3f(0, -96.66664886474609375, -137.3043670654296875), +- osg::Vec3f(0, -124.99997711181640625, -127.44930267333984375), +- osg::Vec3f(0, -153.33331298828125, -117.59423065185546875), +- osg::Vec3f(0, -181.6666412353515625, -107.73915863037109375), +- osg::Vec3f(0, -209.999969482421875, -97.7971343994140625), +- osg::Vec3f(0, -215, -94.75363922119140625), +- })) << mPath; ++ EXPECT_THAT(mPath, ElementsAre( ++ Vec3fEq(0, 215, -94.75363922119140625), ++ Vec3fEq(0, 186.6666717529296875, -106.0000152587890625), ++ Vec3fEq(0, 158.333343505859375, -115.85507965087890625), ++ Vec3fEq(0, 130.0000152587890625, -125.71016693115234375), ++ Vec3fEq(0, 101.66667938232421875, -135.5652313232421875), ++ Vec3fEq(0, 73.333343505859375, -143.3333587646484375), ++ Vec3fEq(0, 45.0000152587890625, -143.3333587646484375), ++ Vec3fEq(0, 16.6666812896728515625, -143.3333587646484375), ++ Vec3fEq(0, -11.66664981842041015625, -143.3333587646484375), ++ Vec3fEq(0, -39.999980926513671875, -143.3333587646484375), ++ Vec3fEq(0, -68.33331298828125, -143.3333587646484375), ++ Vec3fEq(0, -96.66664886474609375, -137.3043670654296875), ++ Vec3fEq(0, -124.99997711181640625, -127.44930267333984375), ++ Vec3fEq(0, -153.33331298828125, -117.59423065185546875), ++ Vec3fEq(0, -181.6666412353515625, -107.73915863037109375), ++ Vec3fEq(0, -209.999969482421875, -97.7971343994140625), ++ Vec3fEq(0, -215, -94.75363922119140625) ++ )); + } + + TEST_F(DetourNavigatorNavigatorTest, path_should_be_over_ground_when_ground_cross_water_with_only_walk_flag) diff --git a/games-engines/openmw/files/openmw-0.46.0-missing-include.patch b/games-engines/openmw/files/openmw-0.46.0-missing-include.patch new file mode 100644 index 000000000000..803707498e43 --- /dev/null +++ b/games-engines/openmw/files/openmw-0.46.0-missing-include.patch @@ -0,0 +1,19 @@ +Fixes build on ~arch system, patch from upstream, to be dropped for 0.47 + +From 10daadefbea1f62a818c339dc7f3d69a858bc8a6 Mon Sep 17 00:00:00 2001 +From: elsid +Date: Thu, 30 Apr 2020 21:57:22 +0200 +Subject: [PATCH] Add missing include + +diff --git a/components/detournavigator/offmeshconnectionsmanager.hpp b/components/detournavigator/offmeshconnectionsmanager.hpp +index 30d7976aec..155ce32963 100644 +--- a/components/detournavigator/offmeshconnectionsmanager.hpp ++++ b/components/detournavigator/offmeshconnectionsmanager.hpp +@@ -13,6 +13,7 @@ + + #include + ++#include + #include + #include + #include diff --git a/games-engines/openmw/files/openmw-0.46.0-mygui-license.patch b/games-engines/openmw/files/openmw-0.46.0-mygui-license.patch new file mode 100644 index 000000000000..a14f58bc9e79 --- /dev/null +++ b/games-engines/openmw/files/openmw-0.46.0-mygui-license.patch @@ -0,0 +1,16 @@ +We don't install license files + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index d69352c94..5f97c86e9 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -470,9 +470,6 @@ IF(NOT WIN32 AND NOT APPLE) + # INSTALL(PROGRAMS "${OpenMW_BINARY_DIR}/Plugin_MyGUI_OpenMW_Resources.so" DESTINATION "${LIBDIR}" ) + #ENDIF(BUILD_MYGUI_PLUGIN) + +- # Install licenses +- INSTALL(FILES "files/mygui/DejaVu Font License.txt" DESTINATION "${LICDIR}" ) +- + # Install icon and desktop file + INSTALL(FILES "${OpenMW_BINARY_DIR}/org.openmw.launcher.desktop" DESTINATION "${DATAROOTDIR}/applications" COMPONENT "openmw") + INSTALL(FILES "${OpenMW_SOURCE_DIR}/files/launcher/images/openmw.png" DESTINATION "${ICONDIR}" COMPONENT "openmw") diff --git a/games-engines/openmw/files/openmw-0.46.0-nifbullet-test.patch b/games-engines/openmw/files/openmw-0.46.0-nifbullet-test.patch new file mode 100644 index 000000000000..315b0753589d --- /dev/null +++ b/games-engines/openmw/files/openmw-0.46.0-nifbullet-test.patch @@ -0,0 +1,335 @@ +Fixes test on i686 system, patch from upstream, to be dropped for 0.47 + +From 14d0ca4cd3e9aa9e329590913d5f8fb55077587d Mon Sep 17 00:00:00 2001 +From: elsid +Date: Sun, 25 Nov 2018 11:42:26 +0300 +Subject: [PATCH 1/4] Cast float to btScalar + +--- + .../detournavigator/recastmeshbuilder.cpp | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +diff --git a/components/detournavigator/recastmeshbuilder.cpp b/components/detournavigator/recastmeshbuilder.cpp +index d96ba2f29c..f613683571 100644 +--- a/components/detournavigator/recastmeshbuilder.cpp ++++ b/components/detournavigator/recastmeshbuilder.cpp +@@ -163,15 +163,15 @@ namespace DetourNavigator + + transformBoundingBox(transform, aabbMin, aabbMax); + +- aabbMin.setX(std::max(mBounds.mMin.x(), aabbMin.x())); +- aabbMin.setX(std::min(mBounds.mMax.x(), aabbMin.x())); +- aabbMin.setY(std::max(mBounds.mMin.y(), aabbMin.y())); +- aabbMin.setY(std::min(mBounds.mMax.y(), aabbMin.y())); +- +- aabbMax.setX(std::max(mBounds.mMin.x(), aabbMax.x())); +- aabbMax.setX(std::min(mBounds.mMax.x(), aabbMax.x())); +- aabbMax.setY(std::max(mBounds.mMin.y(), aabbMax.y())); +- aabbMax.setY(std::min(mBounds.mMax.y(), aabbMax.y())); ++ aabbMin.setX(std::max(static_cast(mBounds.mMin.x()), aabbMin.x())); ++ aabbMin.setX(std::min(static_cast(mBounds.mMax.x()), aabbMin.x())); ++ aabbMin.setY(std::max(static_cast(mBounds.mMin.y()), aabbMin.y())); ++ aabbMin.setY(std::min(static_cast(mBounds.mMax.y()), aabbMin.y())); ++ ++ aabbMax.setX(std::max(static_cast(mBounds.mMin.x()), aabbMax.x())); ++ aabbMax.setX(std::min(static_cast(mBounds.mMax.x()), aabbMax.x())); ++ aabbMax.setY(std::max(static_cast(mBounds.mMin.y()), aabbMax.y())); ++ aabbMax.setY(std::min(static_cast(mBounds.mMax.y()), aabbMax.y())); + + transformBoundingBox(transform.inverse(), aabbMin, aabbMax); + + +From ef5a5ef43f9a91795339ef3ea97c505c1e9dc28d Mon Sep 17 00:00:00 2001 +From: elsid +Date: Sun, 25 Nov 2018 14:03:28 +0300 +Subject: [PATCH 2/4] Print not matched values with full precision + +--- + .../detournavigator/operators.hpp | 62 +++++++++++++++---- + 1 file changed, 51 insertions(+), 11 deletions(-) + +diff --git a/apps/openmw_test_suite/detournavigator/operators.hpp b/apps/openmw_test_suite/detournavigator/operators.hpp +index a473632bab..e34d6278a7 100644 +--- a/apps/openmw_test_suite/detournavigator/operators.hpp ++++ b/apps/openmw_test_suite/detournavigator/operators.hpp +@@ -20,22 +20,62 @@ namespace DetourNavigator + } + } + ++namespace ++{ ++ template ++ struct Wrapper { ++ const T& mValue; ++ }; ++ ++ template ++ inline testing::Message& writeRange(testing::Message& message, const Range& range) ++ { ++ message << "{\n"; ++ for (const auto& v : range) ++ message << Wrapper::type> {v} << ",\n"; ++ return message << "}"; ++ } ++} ++ + namespace testing + { ++ template <> ++ inline testing::Message& Message::operator <<(const osg::Vec3f& value) ++ { ++ return (*this) << "osg::Vec3f(" << std::setprecision(std::numeric_limits::max_exponent10) << value.x() ++ << ", " << std::setprecision(std::numeric_limits::max_exponent10) << value.y() ++ << ", " << std::setprecision(std::numeric_limits::max_exponent10) << value.z() ++ << ')'; ++ } ++ ++ template <> ++ inline testing::Message& Message::operator <<(const Wrapper& value) ++ { ++ return (*this) << value.mValue; ++ } ++ ++ template <> ++ inline testing::Message& Message::operator <<(const Wrapper& value) ++ { ++ return (*this) << std::setprecision(std::numeric_limits::max_exponent10) << value.mValue; ++ } ++ + template <> + inline testing::Message& Message::operator <<(const std::deque& value) + { +- (*this) << "{\n"; +- for (const auto& v : value) +- { +- std::ostringstream stream; +- stream << "osg::Vec3f(" +- << std::setprecision(std::numeric_limits::max_exponent10) << v.x() << ", " +- << std::setprecision(std::numeric_limits::max_exponent10) << v.y() << ", " +- << std::setprecision(std::numeric_limits::max_exponent10) << v.z() << ")"; +- (*this) << stream.str() << ",\n"; +- } +- return (*this) << "}"; ++ return writeRange(*this, value); ++ } ++ ++ template <> ++ inline testing::Message& Message::operator <<(const std::vector& value) ++ { ++ return writeRange(*this, value); ++ } ++ ++ template <> ++ inline testing::Message& Message::operator <<(const std::vector& value) ++ { ++ return writeRange(*this, value); + } + } + + +From 2d7c3bae6127fc3717d5e3a8e8830215450fb47f Mon Sep 17 00:00:00 2001 +From: elsid +Date: Sun, 25 Nov 2018 11:46:09 +0300 +Subject: [PATCH 3/4] Support bullet with double precision + +--- + apps/openmw/mwphysics/heightfield.cpp | 38 ++++++++++++++++++- + apps/openmw/mwphysics/heightfield.hpp | 5 +++ + .../detournavigator/recastmeshbuilder.cpp | 4 +- + .../nifloader/testbulletnifloader.cpp | 36 ++++++++++++++++-- + 4 files changed, 77 insertions(+), 6 deletions(-) + +diff --git a/apps/openmw/mwphysics/heightfield.cpp b/apps/openmw/mwphysics/heightfield.cpp +index 52aed9c072..e1448116bf 100644 +--- a/apps/openmw/mwphysics/heightfield.cpp ++++ b/apps/openmw/mwphysics/heightfield.cpp +@@ -7,12 +7,48 @@ + + #include + ++#include ++ ++namespace ++{ ++ template ++ auto makeHeights(const T* heights, float sqrtVerts) ++ -> std::enable_if_t::value, std::vector> ++ { ++ return {}; ++ } ++ ++ template ++ auto makeHeights(const T* heights, float sqrtVerts) ++ -> std::enable_if_t::value, std::vector> ++ { ++ return std::vector(heights, heights + static_cast(sqrtVerts * sqrtVerts)); ++ } ++ ++ template ++ auto getHeights(const T* floatHeights, const std::vector&) ++ -> std::enable_if_t::value, const btScalar*> ++ { ++ return floatHeights; ++ } ++ ++ template ++ auto getHeights(const T*, const std::vector& btScalarHeights) ++ -> std::enable_if_t::value, const btScalar*> ++ { ++ return btScalarHeights.data(); ++ } ++} ++ + namespace MWPhysics + { + HeightField::HeightField(const float* heights, int x, int y, float triSize, float sqrtVerts, float minH, float maxH, const osg::Object* holdObject) ++ : mHeights(makeHeights(heights, sqrtVerts)) + { + mShape = new btHeightfieldTerrainShape( +- sqrtVerts, sqrtVerts, heights, 1, ++ sqrtVerts, sqrtVerts, ++ getHeights(heights, mHeights), ++ 1, + minH, maxH, 2, + PHY_FLOAT, false + ); +diff --git a/apps/openmw/mwphysics/heightfield.hpp b/apps/openmw/mwphysics/heightfield.hpp +index f248186db3..2ba58afff8 100644 +--- a/apps/openmw/mwphysics/heightfield.hpp ++++ b/apps/openmw/mwphysics/heightfield.hpp +@@ -3,6 +3,10 @@ + + #include + ++#include ++ ++#include ++ + class btCollisionObject; + class btHeightfieldTerrainShape; + +@@ -27,6 +31,7 @@ namespace MWPhysics + btHeightfieldTerrainShape* mShape; + btCollisionObject* mCollisionObject; + osg::ref_ptr mHoldObject; ++ std::vector mHeights; + + void operator=(const HeightField&); + HeightField(const HeightField&); +diff --git a/apps/openmw_test_suite/detournavigator/recastmeshbuilder.cpp b/apps/openmw_test_suite/detournavigator/recastmeshbuilder.cpp +index 6c474765de..c86dee6e55 100644 +--- a/apps/openmw_test_suite/detournavigator/recastmeshbuilder.cpp ++++ b/apps/openmw_test_suite/detournavigator/recastmeshbuilder.cpp +@@ -363,11 +363,11 @@ namespace + AreaType_ground + ); + const auto recastMesh = builder.create(mGeneration, mRevision); +- EXPECT_EQ(recastMesh->getVertices(), std::vector({ ++ EXPECT_THAT(recastMesh->getVertices(), Pointwise(FloatNear(1e-5), std::vector({ + 1.41421353816986083984375, 0, 1.1920928955078125e-07, + -1.41421353816986083984375, 0, -1.1920928955078125e-07, + 1.1920928955078125e-07, 0, -1.41421353816986083984375, +- })); ++ }))); + EXPECT_EQ(recastMesh->getIndices(), std::vector({0, 1, 2})); + EXPECT_EQ(recastMesh->getAreaTypes(), std::vector({AreaType_ground})); + } +diff --git a/apps/openmw_test_suite/nifloader/testbulletnifloader.cpp b/apps/openmw_test_suite/nifloader/testbulletnifloader.cpp +index 36f2512462..6ec94fd68f 100644 +--- a/apps/openmw_test_suite/nifloader/testbulletnifloader.cpp ++++ b/apps/openmw_test_suite/nifloader/testbulletnifloader.cpp +@@ -9,6 +9,8 @@ + #include + #include + ++#include ++ + namespace + { + template +@@ -30,6 +32,34 @@ namespace + shape.processAllTriangles(&callback, aabbMin, aabbMax); + return result; + } ++ ++ bool isNear(btScalar lhs, btScalar rhs) ++ { ++ return std::abs(lhs - rhs) <= 1e-5; ++ } ++ ++ bool isNear(const btVector3& lhs, const btVector3& rhs) ++ { ++ return std::equal( ++ static_cast(lhs), ++ static_cast(lhs) + 3, ++ static_cast(rhs), ++ [] (btScalar lhs, btScalar rhs) { return isNear(lhs, rhs); } ++ ); ++ } ++ ++ bool isNear(const btMatrix3x3& lhs, const btMatrix3x3& rhs) ++ { ++ for (int i = 0; i < 3; ++i) ++ if (!isNear(lhs[i], rhs[i])) ++ return false; ++ return true; ++ } ++ ++ bool isNear(const btTransform& lhs, const btTransform& rhs) ++ { ++ return isNear(lhs.getOrigin(), rhs.getOrigin()) && isNear(lhs.getBasis(), rhs.getBasis()); ++ } + } + + static std::ostream& operator <<(std::ostream& stream, const btVector3& value) +@@ -157,7 +187,7 @@ static bool operator ==(const btCompoundShape& lhs, const btCompoundShape& rhs) + for (int i = 0; i < lhs.getNumChildShapes(); ++i) + { + if (!compareObjects(lhs.getChildShape(i), rhs.getChildShape(i)) +- || !(lhs.getChildTransform(i) == rhs.getChildTransform(i))) ++ || !isNear(lhs.getChildTransform(i), rhs.getChildTransform(i))) + return false; + } + return true; +@@ -165,13 +195,13 @@ static bool operator ==(const btCompoundShape& lhs, const btCompoundShape& rhs) + + static bool operator ==(const btBoxShape& lhs, const btBoxShape& rhs) + { +- return lhs.getLocalScaling() == rhs.getLocalScaling() ++ return isNear(lhs.getLocalScaling(), rhs.getLocalScaling()) + && lhs.getHalfExtentsWithoutMargin() == rhs.getHalfExtentsWithoutMargin(); + } + + static bool operator ==(const btBvhTriangleMeshShape& lhs, const btBvhTriangleMeshShape& rhs) + { +- return lhs.getLocalScaling() == rhs.getLocalScaling() ++ return isNear(lhs.getLocalScaling(), rhs.getLocalScaling()) + && lhs.usesQuantizedAabbCompression() == rhs.usesQuantizedAabbCompression() + && lhs.getOwnsBvh() == rhs.getOwnsBvh() + && getTriangles(lhs) == getTriangles(rhs); + +From 66da72048a5893bc8c9b20f6f7210fd45b6a74bf Mon Sep 17 00:00:00 2001 +From: elsid +Date: Wed, 20 Feb 2019 23:41:16 +0300 +Subject: [PATCH 4/4] Update bullet for windows up to 2.87 + +--- + CI/before_script.msvc.sh | 12 ++++++------ + appveyor.yml | 4 ++-- + 2 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/appveyor.yml b/appveyor.yml +index 3057cc7257..e2c13ed948 100644 +--- a/appveyor.yml ++++ b/appveyor.yml +@@ -30,8 +30,8 @@ configuration: + clone_depth: 1 + + cache: +- - C:\projects\openmw\deps\Bullet-2.86-msvc2015-win32.7z +- - C:\projects\openmw\deps\Bullet-2.86-msvc2015-win64.7z ++ - C:\projects\openmw\deps\Bullet-2.87-msvc2015-win32.7z ++ - C:\projects\openmw\deps\Bullet-2.87-msvc2015-win64.7z + - C:\projects\openmw\deps\MyGUI-3.2.2-msvc2015-win32.7z + - C:\projects\openmw\deps\MyGUI-3.2.2-msvc2015-win64.7z + - C:\projects\openmw\deps\OSG-3.4.1-scrawl-msvc2015-win32.7z diff --git a/games-engines/openmw/files/openmw-0.46.0-recastnavigation.patch b/games-engines/openmw/files/openmw-0.46.0-recastnavigation.patch new file mode 100644 index 000000000000..ea3242d73ca8 --- /dev/null +++ b/games-engines/openmw/files/openmw-0.46.0-recastnavigation.patch @@ -0,0 +1,24 @@ +Use system recastnavigation instead of bundled one + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index d69352c94..cfb53dc5b 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -596,7 +596,16 @@ endif(WIN32) + # Extern + set(RECASTNAVIGATION_STATIC ON CACHE BOOL "Build recastnavigation static libraries") + +-add_subdirectory (extern/recastnavigation EXCLUDE_FROM_ALL) ++add_library(RecastNavigation::DebugUtils SHARED IMPORTED) ++add_library(RecastNavigation::Detour SHARED IMPORTED) ++add_library(RecastNavigation::Recast SHARED IMPORTED) ++set_target_properties(RecastNavigation::DebugUtils PROPERTIES ++ IMPORTED_LOCATION GENTOO_RECAST_LIBDIR/libDebugUtils.so) ++set_target_properties(RecastNavigation::Detour PROPERTIES ++ IMPORTED_LOCATION GENTOO_RECAST_LIBDIR/libDetour.so) ++set_target_properties(RecastNavigation::Recast PROPERTIES ++ IMPORTED_LOCATION GENTOO_RECAST_LIBDIR/libRecast.so) ++ + add_subdirectory (extern/osg-ffmpeg-videoplayer) + add_subdirectory (extern/oics) + if (BUILD_OPENCS) diff --git a/games-engines/openmw/metadata.xml b/games-engines/openmw/metadata.xml index 9927592a87fe..d1fe5ab9e392 100644 --- a/games-engines/openmw/metadata.xml +++ b/games-engines/openmw/metadata.xml @@ -16,12 +16,14 @@ Install development tools like bsatool, esmtool and opencs. + Use OpenSceneGraph forked by OpenMW instead of upstream OSG. https://github.com/OpenMW/openmw/releases https://wiki.openmw.org https://bugs.openmw.org/ OpenMW/openmw + OpenMW/openmw OpenMW is a new and modern engine based on the one that runs the 2002 diff --git a/games-engines/openmw/openmw-0.46.0.ebuild b/games-engines/openmw/openmw-0.46.0.ebuild new file mode 100644 index 000000000000..abb4174bc5fe --- /dev/null +++ b/games-engines/openmw/openmw-0.46.0.ebuild @@ -0,0 +1,161 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit cmake flag-o-matic xdg-utils readme.gentoo-r1 + +DESCRIPTION="Open source reimplementation of TES III: Morrowind" +HOMEPAGE="https://openmw.org/ https://gitlab.com/OpenMW/openmw" + +if [[ ${PV} == *9999* ]]; then + inherit git-r3 + EGIT_REPO_URI="https://github.com/OpenMW/openmw.git" +else + SRC_URI=" + https://github.com/OpenMW/openmw/archive/${P}.tar.gz + https://gitlab.com/OpenMW/openmw/-/merge_requests/163.patch -> ${P}-floattest.patch + " + KEYWORDS="~amd64 ~x86" + S="${WORKDIR}/${PN}-${P}" +fi + +LICENSE="GPL-3 MIT BitstreamVera ZLIB" +SLOT="0" +IUSE="doc devtools +osg-fork test +qt5" +RESTRICT="!test? ( test )" + +# FIXME: Unbundle dev-games/openscenegraph-qt in extern/osgQt directory, +# used when BUILD_OPENCS flag is enabled. See bug #676266. + +RDEPEND=" + dev-games/mygui + dev-games/recastnavigation + dev-libs/boost:=[threads] + dev-libs/tinyxml[stl] + media-libs/libsdl2[joystick,opengl,video] + media-libs/openal + media-video/ffmpeg:= + >=sci-physics/bullet-2.86:= + virtual/opengl + osg-fork? ( dev-games/openscenegraph-openmw:=[ffmpeg,jpeg,png,sdl,svg,truetype,zlib] ) + !osg-fork? ( >=dev-games/openscenegraph-3.5.5:=[ffmpeg,jpeg,png,sdl,svg,truetype,zlib] ) + qt5? ( + app-arch/unshield + dev-qt/qtcore:5 + dev-qt/qtgui:5 + dev-qt/qtnetwork:5 + dev-qt/qtopengl:5 + dev-qt/qtwidgets:5 + ) +" + +DEPEND="${RDEPEND}" + +BDEPEND=" + virtual/pkgconfig + doc? ( + app-doc/doxygen[doc] + dev-python/sphinx + ) + test? ( + dev-cpp/gtest + ) +" + +PATCHES=( + "${FILESDIR}"/openmw-0.46.0-mygui-license.patch + "${FILESDIR}"/openmw-0.46.0-recastnavigation.patch + "${FILESDIR}"/openmw-0.46.0-missing-include.patch + "${FILESDIR}"/openmw-0.46.0-fix-cast.patch + "${FILESDIR}"/openmw-0.46.0-nifbullet-test.patch + # https://gitlab.com/OpenMW/openmw/-/merge_requests/163 + "${DISTDIR}"/openmw-0.46.0-floattest.patch + "${FILESDIR}"/openmw-0.46.0-floattest2.patch +) + +src_prepare() { + cmake_src_prepare + + # Use the system tinyxml headers + rm -v extern/oics/tiny{str,xml}* || die + + # Unbundle recastnavigation + rm -vr extern/recastnavigation || die + sed -i "s#GENTOO_RECAST_LIBDIR#${EPREFIX}/usr/$(get_libdir)#" CMakeLists.txt || die +} + +src_configure() { + use devtools && ! use qt5 && \ + elog "'qt5' USE flag is disabled, 'openmw-cs' will not be installed" + + append-cxxflags "-I${EPREFIX}/usr/include/recastnavigation" + + local mycmakeargs=( + -DBUILD_BSATOOL=$(usex devtools) + -DBUILD_DOCS=$(usex doc) + -DBUILD_ESMTOOL=$(usex devtools) + -DBUILD_LAUNCHER=$(usex qt5) + -DBUILD_NIFTEST=$(usex devtools) + -DBUILD_OPENCS=$(usex devtools $(usex qt5)) + -DBUILD_WIZARD=$(usex qt5) + -DBUILD_UNITTESTS=$(usex test) + -DGLOBAL_DATA_PATH="${EPREFIX}/usr/share" + -DICONDIR="${EPREFIX}/usr/share/icons/hicolor/256x256/apps" + -DMORROWIND_DATA_FILES="${EPREFIX}/usr/share/morrowind-data" + -DUSE_SYSTEM_TINYXML=ON + -DDESIRED_QT_VERSION=5 + ) + + cmake_src_configure +} + +src_compile() { + cmake_src_compile + + if use doc ; then + cmake_src_compile doc + find "${CMAKE_BUILD_DIR}"/docs/Doxygen/html \ + -name '*.md5' -type f -delete || die + HTML_DOCS=( "${CMAKE_BUILD_DIR}"/docs/Doxygen/html/. ) + fi +} + +src_test() { + "${BUILD_DIR}/openmw_test_suite" || die +} + +src_install() { + cmake_src_install + + local DOC_CONTENTS=" + You need the original Morrowind data files. If you haven't + installed them yet, you can install them straight via the + installation wizard which is the officially supported method + (either by using the launcher or by calling 'openmw-wizard' + directly).\n" + + if ! use qt5; then + local DOC_CONTENTS+="\n\n + USE flag 'qt5' is disabled, 'openmw-launcher' and + 'openmw-wizard' are not available. You are on your own for + making the Morrowind data files available and pointing + openmw at them.\n\n + Additionally; you must import the Morrowind.ini file before + running openmw with the Morrowind data files for the first + time. Typically this can be done like so:\n\n + \t mkdir -p ~/.config/openmw\n + \t openmw-iniimporter /path/to/Morrowind.ini ~/.config/openmw/openmw.cfg" + fi + + readme.gentoo_create_doc +} + +pkg_postinst() { + xdg_icon_cache_update + readme.gentoo_print_elog +} + +pkg_postrm() { + xdg_icon_cache_update +} diff --git a/games-engines/openmw/openmw-9999.ebuild b/games-engines/openmw/openmw-9999.ebuild index ac6ee3301bce..df9cc73b585e 100644 --- a/games-engines/openmw/openmw-9999.ebuild +++ b/games-engines/openmw/openmw-9999.ebuild @@ -3,14 +3,14 @@ EAPI=7 -inherit cmake xdg-utils readme.gentoo-r1 +inherit cmake flag-o-matic xdg-utils readme.gentoo-r1 DESCRIPTION="Open source reimplementation of TES III: Morrowind" -HOMEPAGE="https://openmw.org/" +HOMEPAGE="https://openmw.org/ https://gitlab.com/OpenMW/openmw" if [[ ${PV} == *9999* ]]; then inherit git-r3 - EGIT_REPO_URI=${EGIT_REPO_URI:-"https://github.com/OpenMW/openmw.git"} + EGIT_REPO_URI="https://github.com/OpenMW/openmw.git" else SRC_URI="https://github.com/OpenMW/openmw/archive/${P}.tar.gz" KEYWORDS="~amd64 ~x86" @@ -19,7 +19,7 @@ fi LICENSE="GPL-3 MIT BitstreamVera ZLIB" SLOT="0" -IUSE="doc devtools test +qt5" +IUSE="doc devtools +osg-fork test +qt5" RESTRICT="!test? ( test )" # FIXME: Unbundle dev-games/openscenegraph-qt in extern/osgQt directory, @@ -27,7 +27,7 @@ RESTRICT="!test? ( test )" RDEPEND=" dev-games/mygui - >=dev-games/openscenegraph-3.5.5:=[ffmpeg,jpeg,png,sdl,svg,truetype,zlib] + dev-games/recastnavigation dev-libs/boost:=[threads] dev-libs/tinyxml[stl] media-libs/libsdl2[joystick,opengl,video] @@ -35,6 +35,8 @@ RDEPEND=" media-video/ffmpeg:= >=sci-physics/bullet-2.86:= virtual/opengl + osg-fork? ( dev-games/openscenegraph-openmw:=[ffmpeg,jpeg,png,sdl,svg,truetype,zlib] ) + !osg-fork? ( >=dev-games/openscenegraph-3.5.5:=[ffmpeg,jpeg,png,sdl,svg,truetype,zlib] ) qt5? ( app-arch/unshield dev-qt/qtcore:5 @@ -58,20 +60,28 @@ BDEPEND=" ) " +PATCHES=( + "${FILESDIR}"/openmw-0.46.0-mygui-license.patch + "${FILESDIR}"/openmw-0.46.0-recastnavigation.patch +) + src_prepare() { cmake_src_prepare - # We don't install license files - sed -i '/LICDIR/d' CMakeLists.txt || die - # Use the system tinyxml headers rm -v extern/oics/tiny{str,xml}* || die + + # Unbundle recastnavigation + rm -vr extern/recastnavigation || die + sed -i "s#GENTOO_RECAST_LIBDIR#${EPREFIX}/usr/$(get_libdir)#" CMakeLists.txt || die } src_configure() { use devtools && ! use qt5 && \ elog "'qt5' USE flag is disabled, 'openmw-cs' will not be installed" + append-cxxflags "-I${EPREFIX}/usr/include/recastnavigation" + local mycmakeargs=( -DBUILD_BSATOOL=$(usex devtools) -DBUILD_DOCS=$(usex doc) @@ -81,9 +91,9 @@ src_configure() { -DBUILD_OPENCS=$(usex devtools $(usex qt5)) -DBUILD_WIZARD=$(usex qt5) -DBUILD_UNITTESTS=$(usex test) - -DGLOBAL_DATA_PATH=/usr/share - -DICONDIR="/usr/share/icons/hicolor/256x256/apps" - -DMORROWIND_DATA_FILES="/usr/share/morrowind-data" + -DGLOBAL_DATA_PATH="${EPREFIX}/usr/share" + -DICONDIR="${EPREFIX}/usr/share/icons/hicolor/256x256/apps" + -DMORROWIND_DATA_FILES="${EPREFIX}/usr/share/morrowind-data" -DUSE_SYSTEM_TINYXML=ON -DDESIRED_QT_VERSION=5 ) -- cgit v1.2.3-18-g5258