summaryrefslogtreecommitdiff
path: root/games-engines/openmw
diff options
context:
space:
mode:
Diffstat (limited to 'games-engines/openmw')
-rw-r--r--games-engines/openmw/Manifest18
-rw-r--r--games-engines/openmw/files/openmw-0.45.0-osg-3.6.5-1.patch51
-rw-r--r--games-engines/openmw/files/openmw-0.45.0-osg-3.6.5-2.patch21
-rw-r--r--games-engines/openmw/files/openmw-0.46.0-fix-cast.patch214
-rw-r--r--games-engines/openmw/files/openmw-0.46.0-floattest2.patch139
-rw-r--r--games-engines/openmw/files/openmw-0.46.0-missing-include.patch19
-rw-r--r--games-engines/openmw/files/openmw-0.46.0-mygui-license.patch16
-rw-r--r--games-engines/openmw/files/openmw-0.46.0-nifbullet-test.patch335
-rw-r--r--games-engines/openmw/files/openmw-0.46.0-recastnavigation.patch24
-rw-r--r--games-engines/openmw/files/openmw-0.47.0-mygui-license.patch16
-rw-r--r--games-engines/openmw/metadata.xml2
-rw-r--r--games-engines/openmw/openmw-0.46.0.ebuild (renamed from games-engines/openmw/openmw-0.45.0.ebuild)62
-rw-r--r--games-engines/openmw/openmw-9999.ebuild32
13 files changed, 844 insertions, 105 deletions
diff --git a/games-engines/openmw/Manifest b/games-engines/openmw/Manifest
index 19e73e8f5e44..d9571ece6328 100644
--- a/games-engines/openmw/Manifest
+++ b/games-engines/openmw/Manifest
@@ -1,6 +1,12 @@
-AUX openmw-0.45.0-osg-3.6.5-1.patch 2715 BLAKE2B 9b08b8cad0afd58170389f97cfca232330dcf14fa80d40a4dce4f0f9c770e3262b4206ff555d341e937c6c54b40c60030612b8478dddad97149a90b2431cc8f0 SHA512 95abc6fe8f2e9619c240b859e607e2119e7407e3d2688d78e98167007a4b1d9696d5198f6ba4644a8646a0435ae76611d315f07cd11f00165db71f3c9d18897b
-AUX openmw-0.45.0-osg-3.6.5-2.patch 642 BLAKE2B 4ece0c64eefdbd249de648fc3c85087f392bddb073033872b26a85dbfc044a7b7b11097bc5a322d3a8b074ccde75ee507f7254c9bed2386480f2962acad505e4 SHA512 a5e5e11ffdeb96f921edf2dc3e787ed5be21ae816330841da263518df29c58a7231980194519db426e3ac45602320f108b4de9e262d643c58c23652beb4dde9d
-DIST openmw-0.45.0.tar.gz 4711103 BLAKE2B 85676294b07170dd6845892e9e7b354c5767428584c76ea2e1a64e9f9c72c46c279fdf5043058d37b927cb55e6cf2e2222833129d64954cdcdb3af4eb4b84dc3 SHA512 b968426659457cf486f6756f7ab82cc4cb34a92923c433dd86f711e5d7097f75441ed17daa50d21f15f1847f5aed1f4c3a094a06cfd3f2e9b90aa182742c596f
-EBUILD openmw-0.45.0.ebuild 3181 BLAKE2B a307152c8ee882a2fffeb13cee467905421a31781d446eb6d87618f8c040b08bae35f924408aca7eb1e63fd5a88a8166255a25df2d8ac4ed9d36c28a6dd86f74 SHA512 7db0200339d854d1f0eac9fbbbb5457c647ef0a2ae4a7abf9a52707e722ae6643356f88293d114c034672e8c50c1d77ecf1391c5156e18061ba59168f97d0f66
-EBUILD openmw-9999.ebuild 3369 BLAKE2B 65fb37a972d19e2d47b2b7b7c7b1a6aa2a4f13e5383f32654c8aa7bad2450829e01c56e41310e574d62fd5b0d9d0cf0f1dcfb3ee4f6beeac5a20bd003ff5c36a SHA512 968d75c244e28a689ed8096330e453c88d57dfc6e40b7f9c0d6725978a4849c760ca4351a9485891b4bf419297c512369d28ad673eec285b1fcee0606060e260
-MISC metadata.xml 1278 BLAKE2B 5a79eef3251275f05d388d0236edd548baf111ce140cbfd6942851909039299f5bf6460d01b2a8c760c82c46a6b5880e0316c1cc0c4eda9a1599ce76b127c8ee SHA512 96b66a7c7f8cb4303b9853640e8e11f7be48bd7e5d644db9468ac0b43c1254e670f2e84a2117dbdd31c9709207c58d0ad523e3310287515bc11fa0e58de5c4ab
+AUX openmw-0.46.0-fix-cast.patch 12792 BLAKE2B 583ca033350e16116de85ba3bfc121bc2a444686a4e7c75388880835e708e0860c787ee6504b6f907b6749afd23acaea87b84aeece5553a2e61562142d223257 SHA512 7784c327cb442e20afb0409f0f5ef2791fa9dbe3c15b6a8e60baabec7a1179778577ac60e5c14e9e83868c15db1aaffa145006ce4d0140f0db4869c6eb0f8b9a
+AUX openmw-0.46.0-floattest2.patch 8586 BLAKE2B b419473aa1f00b327654b0f3862819f296d8390ce9a290ebd98fcf39175d85045ad85bf1ca9521a6f033f836a7331e1511e3005f2ac2f15b43c45b22641d281f SHA512 286e9fa560f62f5a291c622a7939c57e8c674ba1a4762c6a20a8fefe0b91092ffd7a1663dd70f4cc287833de0a8177329bb58e1e87b3cc9ed0d22a4a4cd71c9d
+AUX openmw-0.46.0-missing-include.patch 682 BLAKE2B fa80b94d9ce91e1b05b96c02e80f32f1e9066ba6f8ada4a1e5150cf3a278d3a233eda42269b3027c56aaa7be98dd33cbcc3932d1e0930a51bd6b5744a73d6b6e SHA512 d0d47fe249e8fb366e00e272dc62853f8a2aaa75d45d83d270891e76674c1382fd3405e674e3b6c383bbc17125c4471893e77251744deae4d17bc373d847a638
+AUX openmw-0.46.0-mygui-license.patch 742 BLAKE2B a36016cf4b29c31918376dd27082f42cdaeacd5e8fff5a2860b827ce3db6b7fd711b2c6b8453b3792d506ec31749fb457d11225c64ff792257e30c796013501b SHA512 43895daa22eaf5891d789abed22e6d9df3c6817a7060bee7407963dbd13413dcd8fce03f236b3d7e0d589d925e9cbfe5125c72b1b2735479bf56d122cad85383
+AUX openmw-0.46.0-nifbullet-test.patch 12675 BLAKE2B fadb3c75bd0fcf4f351f30c86cdc3b407f4f7e97c3c9c278f3e20197a5c78c5b9ff320c9a53bd04fd40114f3b851f9523dd390c75487832cee67b3de7ef228d6 SHA512 e63d5f1e3e3c03a94ff2e926b2ce54d611c12a29749eba8d3c20c4d1ba1ee437142e40b20c08d2da714d7e98d573f4b1e5eaa99425b6dd27aace0e1852bb0ccb
+AUX openmw-0.46.0-recastnavigation.patch 988 BLAKE2B 3d9dd71a02070268fe21006fda20f2617ad57ce11782c5d05d3deb0c51ae2e2c91f679b23da92b6b939479fe176e99d63705ab1a3bb9d20cc7c39ab55fff2ac3 SHA512 49591f413ff68fbb11b7742c44d138f234e69478eae3462a5a402ac626bf67283e18a05dd2e2cea33706cdeb54deaf28e8a788e91491ddfe0ce10ffd978fc4e0
+AUX openmw-0.47.0-mygui-license.patch 740 BLAKE2B eb5c6d6d8787b5e397e83aae36855349a4721d613bdfd8946f9b0ca430f3d7f503fe4b4bf64eb70df5b4f88ed9caf582166a27f4666bbe9e994ad3ad8b708739 SHA512 df508bc1bf8c4d9df6251b47d7ef3afbbbe600dc30cca582b5811b193c8371a9f3723d7e9e422cb28528e228bb2ee246d8c38c7b0cca3b49bc2972f59a555364
+DIST openmw-0.46.0-floattest.patch 43168 BLAKE2B 060b529fd4cd01f0fc723bb5a00a256b9c1ae4413c7b22581467cce75416e01041c3af22f0215ad9b1c475965a988065e0860c01c1e71d97454b022eec4779ea SHA512 0e165417e9ae047231fdc27b62251b33867f3782c1753f81705c886d6d3a433c8bbc3b4653a2555bc644bad11db9769d4bc2abcc84ca3ab23fabb6b80347bc32
+DIST openmw-0.46.0.tar.gz 5155004 BLAKE2B 8ad94a7fffe5a0739c56c778efe2ec17ef66c312a7fe5caf015cf3cad2bc17d2abe8cdc3f4134049a32fe55c4f4b3f72678d2d0ce1037fd02f6ac753b9d89b2c SHA512 da384aead300552817c0d0ce03515a5ccc95dcab4e02d4c1dd0d6c5f1b01ee01209bbaea74e2d12021e3465e49b051823bb018de39675c5a22c6892893624486
+EBUILD openmw-0.46.0.ebuild 4206 BLAKE2B 766941398d741237a34dfd714733fc8d8b93a501891aedef23ab617e2c8f076315c4c1b9149d0c64732f90d7da96986c91b1d6151602183d27468e20a210d968 SHA512 479a8c45a7de6a85c5cf207f1e42f5f6d0e5294a655de93259dca84c9afb6ab0b3f56c8a75da3988cea8b334df149f0ee1e044ec6e79f6cb4e335396d9441144
+EBUILD openmw-9999.ebuild 3823 BLAKE2B 6cc9a357f3106619194b8fde6984473f3759de8113c6fefcf3cad3ecdee7d39adafb2cd8ee778d9174bdb019623699ae7270aa78b22ae2b8cdd6d338098f180e SHA512 f50a90e4373fb97bdead9f9eea6d3aec8f8a3a3c80efc8776df10f3f35973380ee8ab8f9e32f8066afe9df3892855b83a8f30f01d43c35101c8e5d91fea76621
+MISC metadata.xml 1423 BLAKE2B 6d7f6b2805b52571b305668ff9120318c3f2d87719f8e51e644b555c62ea9aaa4afa0f3a23ff67c8a08e04cacf3bdb3d9f7295985f980c27b57b53aa7b55c5e2 SHA512 31e201da1c43b973a57cf51276022c7e39371210ec2eb505f362cad4e669b5aef1f503e2511473880f2313b91a8f1f128db425f9538f58b7fc52df24ec066feb
diff --git a/games-engines/openmw/files/openmw-0.45.0-osg-3.6.5-1.patch b/games-engines/openmw/files/openmw-0.45.0-osg-3.6.5-1.patch
deleted file mode 100644
index b47fab28d122..000000000000
--- a/games-engines/openmw/files/openmw-0.45.0-osg-3.6.5-1.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 807f550386a1eac6f7306589a4e4a01e783e65df Mon Sep 17 00:00:00 2001
-From: Alexander Olofsson <ace@haxalot.com>
-Date: Thu, 13 Feb 2020 19:15:33 +0100
-Subject: [PATCH] Fix building mwrender/sky with OSG 3.6.5
-
-OSG commit aff574b completely replaces the method of doing user-defined
-query geometry, removing support for modifying the default geometry.
----
- apps/openmw/mwrender/sky.cpp | 14 ++++++++++++--
- 1 file changed, 12 insertions(+), 2 deletions(-)
-
-diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp
-index 3996f472c2..e13f5a7b65 100644
---- a/apps/openmw/mwrender/sky.cpp
-+++ b/apps/openmw/mwrender/sky.cpp
-@@ -558,16 +558,22 @@ class Sun : public CelestialBody
- osg::ref_ptr<osg::OcclusionQueryNode> oqn = new osg::OcclusionQueryNode;
- oqn->setQueriesEnabled(true);
-
-+#if OSG_VERSION_GREATER_OR_EQUAL(3, 6, 5)
-+ // With OSG 3.6.5, the method of providing user defined query geometry has been completely replaced
-+ osg::ref_ptr<osg::QueryGeometry> queryGeom = new osg::QueryGeometry(oqn->getName());
-+#else
-+ auto* queryGeom = oqn->getQueryGeometry();
-+#endif
-+
- // Make it fast! A DYNAMIC query geometry means we can't break frame until the flare is rendered (which is rendered after all the other geometry,
- // so that would be pretty bad). STATIC should be safe, since our node's local bounds are static, thus computeBounds() which modifies the queryGeometry
- // is only called once.
- // Note the debug geometry setDebugDisplay(true) is always DYNAMIC and that can't be changed, not a big deal.
-- oqn->getQueryGeometry()->setDataVariance(osg::Object::STATIC);
-+ queryGeom->setDataVariance(osg::Object::STATIC);
-
- // Set up the query geometry to match the actual sun's rendering shape. osg::OcclusionQueryNode wasn't originally intended to allow this,
- // normally it would automatically adjust the query geometry to match the sub graph's bounding box. The below hack is needed to
- // circumvent this.
-- osg::Geometry* queryGeom = oqn->getQueryGeometry();
- queryGeom->setVertexArray(mGeom->getVertexArray());
- queryGeom->setTexCoordArray(0, mGeom->getTexCoordArray(0), osg::Array::BIND_PER_VERTEX);
- queryGeom->removePrimitiveSet(0, oqn->getQueryGeometry()->getNumPrimitiveSets());
-@@ -578,6 +584,10 @@ class Sun : public CelestialBody
- // Still need a proper bounding sphere.
- oqn->setInitialBound(queryGeom->getBound());
-
-+#if OSG_VERSION_GREATER_OR_EQUAL(3, 6, 5)
-+ oqn->setQueryGeometry(queryGeom.release());
-+#endif
-+
- osg::StateSet* queryStateSet = new osg::StateSet;
- if (queryVisible)
- {
diff --git a/games-engines/openmw/files/openmw-0.45.0-osg-3.6.5-2.patch b/games-engines/openmw/files/openmw-0.45.0-osg-3.6.5-2.patch
deleted file mode 100644
index 6b13291911ca..000000000000
--- a/games-engines/openmw/files/openmw-0.45.0-osg-3.6.5-2.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-From 7db58a893a1448b7229de5464696b3cc6eb7663c Mon Sep 17 00:00:00 2001
-From: Alexander Olofsson <ace@haxalot.com>
-Date: Thu, 13 Feb 2020 19:32:17 +0100
-Subject: [PATCH] Ensure osg/Version is included
-
----
- apps/openmw/mwrender/sky.cpp | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/apps/openmw/mwrender/sky.cpp b/apps/openmw/mwrender/sky.cpp
-index e13f5a7b65..7cf2af88d0 100644
---- a/apps/openmw/mwrender/sky.cpp
-+++ b/apps/openmw/mwrender/sky.cpp
-@@ -16,6 +16,7 @@
- #include <osg/BlendFunc>
- #include <osg/AlphaFunc>
- #include <osg/PolygonOffset>
-+#include <osg/Version>
- #include <osg/observer_ptr>
-
- #include <osgParticle/BoxPlacer>
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 <elsid.mail@gmail.com>
+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<TilePosition>()
+ );
+ }
+@@ -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 <class T>
+- explicit ObjectId(const T value) throw()
++ explicit ObjectId(T* value) throw()
+ : mValue(reinterpret_cast<std::size_t>(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>({
+- 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>({
+- 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>({
+- 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 <elsid.mail@gmail.com>
+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 <boost/optional.hpp>
+
++#include <algorithm>
+ #include <map>
+ #include <mutex>
+ #include <unordered_map>
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 <elsid.mail@gmail.com>
+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<btScalar>(mBounds.mMin.x()), aabbMin.x()));
++ aabbMin.setX(std::min(static_cast<btScalar>(mBounds.mMax.x()), aabbMin.x()));
++ aabbMin.setY(std::max(static_cast<btScalar>(mBounds.mMin.y()), aabbMin.y()));
++ aabbMin.setY(std::min(static_cast<btScalar>(mBounds.mMax.y()), aabbMin.y()));
++
++ aabbMax.setX(std::max(static_cast<btScalar>(mBounds.mMin.x()), aabbMax.x()));
++ aabbMax.setX(std::min(static_cast<btScalar>(mBounds.mMax.x()), aabbMax.x()));
++ aabbMax.setY(std::max(static_cast<btScalar>(mBounds.mMin.y()), aabbMax.y()));
++ aabbMax.setY(std::min(static_cast<btScalar>(mBounds.mMax.y()), aabbMax.y()));
+
+ transformBoundingBox(transform.inverse(), aabbMin, aabbMax);
+
+
+From ef5a5ef43f9a91795339ef3ea97c505c1e9dc28d Mon Sep 17 00:00:00 2001
+From: elsid <elsid.mail@gmail.com>
+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 <class T>
++ struct Wrapper {
++ const T& mValue;
++ };
++
++ template <class Range>
++ inline testing::Message& writeRange(testing::Message& message, const Range& range)
++ {
++ message << "{\n";
++ for (const auto& v : range)
++ message << Wrapper<typename std::decay<decltype(v)>::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<float>::max_exponent10) << value.x()
++ << ", " << std::setprecision(std::numeric_limits<float>::max_exponent10) << value.y()
++ << ", " << std::setprecision(std::numeric_limits<float>::max_exponent10) << value.z()
++ << ')';
++ }
++
++ template <>
++ inline testing::Message& Message::operator <<(const Wrapper<osg::Vec3f>& value)
++ {
++ return (*this) << value.mValue;
++ }
++
++ template <>
++ inline testing::Message& Message::operator <<(const Wrapper<float>& value)
++ {
++ return (*this) << std::setprecision(std::numeric_limits<float>::max_exponent10) << value.mValue;
++ }
++
+ template <>
+ inline testing::Message& Message::operator <<(const std::deque<osg::Vec3f>& value)
+ {
+- (*this) << "{\n";
+- for (const auto& v : value)
+- {
+- std::ostringstream stream;
+- stream << "osg::Vec3f("
+- << std::setprecision(std::numeric_limits<float>::max_exponent10) << v.x() << ", "
+- << std::setprecision(std::numeric_limits<float>::max_exponent10) << v.y() << ", "
+- << std::setprecision(std::numeric_limits<float>::max_exponent10) << v.z() << ")";
+- (*this) << stream.str() << ",\n";
+- }
+- return (*this) << "}";
++ return writeRange(*this, value);
++ }
++
++ template <>
++ inline testing::Message& Message::operator <<(const std::vector<osg::Vec3f>& value)
++ {
++ return writeRange(*this, value);
++ }
++
++ template <>
++ inline testing::Message& Message::operator <<(const std::vector<float>& value)
++ {
++ return writeRange(*this, value);
+ }
+ }
+
+
+From 2d7c3bae6127fc3717d5e3a8e8830215450fb47f Mon Sep 17 00:00:00 2001
+From: elsid <elsid.mail@gmail.com>
+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 <LinearMath/btTransform.h>
+
++#include <type_traits>
++
++namespace
++{
++ template <class T>
++ auto makeHeights(const T* heights, float sqrtVerts)
++ -> std::enable_if_t<std::is_same<btScalar, T>::value, std::vector<btScalar>>
++ {
++ return {};
++ }
++
++ template <class T>
++ auto makeHeights(const T* heights, float sqrtVerts)
++ -> std::enable_if_t<!std::is_same<btScalar, T>::value, std::vector<btScalar>>
++ {
++ return std::vector<btScalar>(heights, heights + static_cast<std::ptrdiff_t>(sqrtVerts * sqrtVerts));
++ }
++
++ template <class T>
++ auto getHeights(const T* floatHeights, const std::vector<btScalar>&)
++ -> std::enable_if_t<std::is_same<btScalar, T>::value, const btScalar*>
++ {
++ return floatHeights;
++ }
++
++ template <class T>
++ auto getHeights(const T*, const std::vector<btScalar>& btScalarHeights)
++ -> std::enable_if_t<!std::is_same<btScalar, 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 <osg/ref_ptr>
+
++#include <LinearMath/btScalar.h>
++
++#include <vector>
++
+ class btCollisionObject;
+ class btHeightfieldTerrainShape;
+
+@@ -27,6 +31,7 @@ namespace MWPhysics
+ btHeightfieldTerrainShape* mShape;
+ btCollisionObject* mCollisionObject;
+ osg::ref_ptr<const osg::Object> mHoldObject;
++ std::vector<btScalar> 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<float>({
++ EXPECT_THAT(recastMesh->getVertices(), Pointwise(FloatNear(1e-5), std::vector<float>({
+ 1.41421353816986083984375, 0, 1.1920928955078125e-07,
+ -1.41421353816986083984375, 0, -1.1920928955078125e-07,
+ 1.1920928955078125e-07, 0, -1.41421353816986083984375,
+- }));
++ })));
+ EXPECT_EQ(recastMesh->getIndices(), std::vector<int>({0, 1, 2}));
+ EXPECT_EQ(recastMesh->getAreaTypes(), std::vector<AreaType>({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 <gtest/gtest.h>
+ #include <gmock/gmock.h>
+
++#include <algorithm>
++
+ namespace
+ {
+ template <class T>
+@@ -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<const btScalar*>(lhs),
++ static_cast<const btScalar*>(lhs) + 3,
++ static_cast<const btScalar*>(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 <elsid.mail@gmail.com>
+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/files/openmw-0.47.0-mygui-license.patch b/games-engines/openmw/files/openmw-0.47.0-mygui-license.patch
new file mode 100644
index 000000000000..d0da8a2563b3
--- /dev/null
+++ b/games-engines/openmw/files/openmw-0.47.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/DejaVuFontLicense.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/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 @@
<use>
<flag name="devtools">Install development tools like
bsatool, esmtool and opencs.</flag>
+ <flag name="osg-fork">Use OpenSceneGraph forked by OpenMW instead of upstream OSG.</flag>
</use>
<upstream>
<changelog>https://github.com/OpenMW/openmw/releases</changelog>
<doc lang="en">https://wiki.openmw.org</doc>
<bugs-to>https://bugs.openmw.org/</bugs-to>
<remote-id type="github">OpenMW/openmw</remote-id>
+ <remote-id type="gitlab">OpenMW/openmw</remote-id>
</upstream>
<longdescription lang="en">
OpenMW is a new and modern engine based on the one that runs the 2002
diff --git a/games-engines/openmw/openmw-0.45.0.ebuild b/games-engines/openmw/openmw-0.46.0.ebuild
index 60c87d4697f3..abb4174bc5fe 100644
--- a/games-engines/openmw/openmw-0.45.0.ebuild
+++ b/games-engines/openmw/openmw-0.46.0.ebuild
@@ -3,23 +3,34 @@
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/"
-SRC_URI="https://github.com/OpenMW/openmw/archive/${P}.tar.gz"
+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"
-KEYWORDS="~amd64 ~x86"
-IUSE="doc devtools +qt5"
+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/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]
@@ -27,6 +38,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
@@ -45,26 +58,39 @@ BDEPEND="
app-doc/doxygen[doc]
dev-python/sphinx
)
+ test? (
+ dev-cpp/gtest
+ )
"
-PATCHES=( "${FILESDIR}"/${P}-osg-3.6.5-{1,2}.patch ) # bug #709878
-
-S="${WORKDIR}/${PN}-${P}"
+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
- # 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)
@@ -73,10 +99,10 @@ src_configure() {
-DBUILD_NIFTEST=$(usex devtools)
-DBUILD_OPENCS=$(usex devtools $(usex qt5))
-DBUILD_WIZARD=$(usex qt5)
- -DBUILD_UNITTESTS=OFF
- -DGLOBAL_DATA_PATH=/usr/share
- -DICONDIR="/usr/share/icons/hicolor/256x256/apps"
- -DMORROWIND_DATA_FILES="/usr/share/morrowind-data"
+ -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
)
@@ -95,6 +121,10 @@ src_compile() {
fi
}
+src_test() {
+ "${BUILD_DIR}/openmw_test_suite" || die
+}
+
src_install() {
cmake_src_install
diff --git a/games-engines/openmw/openmw-9999.ebuild b/games-engines/openmw/openmw-9999.ebuild
index ac6ee3301bce..1183e5459a13 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.47.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
)