https://bugs.gentoo.org/930171
https://github.com/NGSolve/netgen/issues/170
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -372,25 +372,20 @@ if (USE_OCC)
       TKGeomAlgo
       TKGeomBase
       TKHLR
-      TKIGES
       TKLCAF
       TKMath
       TKMesh
       TKOffset
       TKPrim
-      TKSTEP
-      TKSTEP209
-      TKSTEPAttr
-      TKSTEPBase
-      TKSTL
+      TKDESTL
       TKService
       TKShHealing
       TKTopAlgo
       TKV3d
       TKVCAF
       TKXCAF
-      TKXDEIGES
-      TKXDESTEP
+      TKDEIGES
+      TKDESTEP
       TKXSBase
       TKernel
     )
--- a/libsrc/occ/Partition_Loop3d.hxx
+++ b/libsrc/occ/Partition_Loop3d.hxx
@@ -10,27 +10,16 @@
 #ifndef _Partition_Loop3d_HeaderFile
 #define _Partition_Loop3d_HeaderFile
 
-#ifndef _TopTools_ListOfShape_HeaderFile
-#include <TopTools_ListOfShape.hxx>
-#endif
-#ifndef _TopTools_IndexedDataMapOfShapeListOfShape_HeaderFile
-#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
-#endif
-#ifndef _Standard_Boolean_HeaderFile
+#include <Standard_Version.hxx>
 #include <Standard_Boolean.hxx>
-#endif
-#ifndef _Standard_Real_HeaderFile
 #include <Standard_Real.hxx>
-#endif
-#ifndef _Standard_Version_HeaderFile
-#include <Standard_Version.hxx>
-#endif
+#include <TopTools_ListOfShape.hxx>
+#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
 
-#if OCC_VERSION_HEX < 0x070000
+#if OCC_VERSION_HEX < 0x070000 || OCC_VERSION_HEX > 0x070799
 #else
    #include <TopTools_ShapeMapHasher.hxx>
    #include <TopTools_OrientedShapeMapHasher.hxx>
-   #include <TopTools_MapOfOrientedShape.hxx>
 #endif
 
 class TopoDS_Shape;
@@ -38,6 +27,8 @@ class TopoDS_Shape;
 #if OCC_VERSION_HEX < 0x070000
    class TopTools_ListOfShape;
    class TopTools_MapOfOrientedShape;
+#else
+#include <TopTools_MapOfOrientedShape.hxx>
 #endif
 
 class TopoDS_Edge;
--- a/libsrc/occ/occ_edge.cpp
+++ b/libsrc/occ/occ_edge.cpp
@@ -55,7 +55,11 @@ namespace netgen
 
     size_t OCCEdge::GetHash() const
     {
+#if OCC_VERSION_HEX < 0x070800
       return edge.HashCode(std::numeric_limits<Standard_Integer>::max());
+#else
+      return std::hash<TopoDS_Shape>{}(edge); 
+#endif
     }
 
     void OCCEdge::ProjectPoint(Point<3>& p, EdgePointGeomInfo* gi) const
--- a/libsrc/occ/occ_face.cpp
+++ b/libsrc/occ/occ_face.cpp
@@ -32,7 +32,11 @@ namespace netgen
 
     size_t OCCFace::GetHash() const
     {
+#if OCC_VERSION_HEX < 0x070800
       return face.HashCode(std::numeric_limits<Standard_Integer>::max());
+#else
+      return std::hash<TopoDS_Shape>{}(face); 
+#endif
     }
 
     Point<3> OCCFace::GetCenter() const
--- a/libsrc/occ/occ_solid.hpp
+++ b/libsrc/occ/occ_solid.hpp
@@ -16,8 +16,11 @@ namespace netgen
         OCCSolid(TopoDS_Shape dshape)
             : solid(TopoDS::Solid(dshape))
         { }
-
+#if OCC_VERSION_HEX < 0x070800
         size_t GetHash() const override { return solid.HashCode(std::numeric_limits<Standard_Integer>::max()); }
+#else
+        size_t GetHash() const override { return std::hash<TopoDS_Solid>{}(solid); }
+#endif
     };
 }
 
--- a/libsrc/occ/occ_vertex.cpp
+++ b/libsrc/occ/occ_vertex.cpp
@@ -19,6 +19,10 @@ namespace netgen
 
     size_t OCCVertex::GetHash() const
     {
+#if OCC_VERSION_HEX < 0x070800
       return vertex.HashCode(std::numeric_limits<Standard_Integer>::max());
+#else
+      return std::hash<TopoDS_Shape>{}(vertex); 
+#endif
     }
 }
--- a/libsrc/occ/occgeom.cpp
+++ b/libsrc/occ/occgeom.cpp
@@ -1625,8 +1625,12 @@
 
     // enumerate shapes and archive only integers
     auto my_hash = [](const TopoDS_Shape & key) {
+#if OCC_VERSION_HEX < 0x070800
         auto occ_hash = key.HashCode(1<<31UL);
         return std::hash<decltype(occ_hash)>()(occ_hash);
+#else
+        return std::hash<TopoDS_Shape>{}(key);
+#endif
     };
     TopTools_IndexedMapOfShape shape_map;
     Array<TopoDS_Shape> shape_list;
