File 0001-Include-filesystem-from-experimental-for-GCC-7.patch of Package netgen

From cc76ca399f1782d94583512ca7d7a0199ca83457 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20Br=C3=BCns?= <stefan.bruens@rwth-aachen.de>
Date: Wed, 13 Jul 2022 15:58:16 +0200
Subject: [PATCH] Include filesystem from experimental for GCC 7

---
 libsrc/core/CMakeLists.txt     |  3 +++
 libsrc/core/archive.hpp        | 16 +++++++++++-----
 libsrc/core/utils.cpp          | 12 +++++-------
 libsrc/core/utils.hpp          | 21 +++++++++++----------
 libsrc/general/gzstream.cpp    |  6 +++---
 libsrc/general/gzstream.h      | 22 +++++++++++++++-------
 libsrc/general/mystring.hpp    |  5 +++++
 libsrc/interface/writeuser.hpp | 10 +++++++---
 libsrc/meshing/meshclass.hpp   |  7 ++++++-
 ng/ngpkg.cpp                   |  4 ++--
 10 files changed, 68 insertions(+), 38 deletions(-)

diff --git a/libsrc/core/CMakeLists.txt b/libsrc/core/CMakeLists.txt
index 39d7fd6..a85a414 100644
--- a/libsrc/core/CMakeLists.txt
+++ b/libsrc/core/CMakeLists.txt
@@ -46,6 +46,9 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
       target_compile_options(ngcore PUBLIC "-fabi-version=${cxx_abi_version}")
     endif()
   endif(USE_PYTHON)
+  if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8)
+    target_link_libraries(ngcore PRIVATE stdc++fs)
+  endif()
 endif()
 
 if(USE_PYTHON)
diff --git a/libsrc/core/archive.hpp b/libsrc/core/archive.hpp
index 8a3d7a3..be5ea23 100644
--- a/libsrc/core/archive.hpp
+++ b/libsrc/core/archive.hpp
@@ -6,7 +6,13 @@
 #include <array>                // for array
 #include <complex>              // for complex
 #include <cstring>              // for size_t, strlen
-#include <filesystem>           // for path
+#if defined(__GNUC__) && (__GNUC__ < 8)
+#include <experimental/filesystem>
+namespace filesystem = std::experimental::filesystem;
+#else
+#include <filesystem>           // for filesystem::path
+namespace filesystem = std::filesystem;
+#endif
 #include <fstream>              // for ifstream, ofstream
 #include <functional>           // for function
 #include <map>                  // for map
@@ -862,7 +868,7 @@ namespace ngcore
     BinaryOutArchive(std::shared_ptr<std::ostream>&& astream)
       : Archive(true), stream(std::move(astream))
     { }
-    BinaryOutArchive(const std::filesystem::path& filename)
+    BinaryOutArchive(const filesystem::path& filename)
       : BinaryOutArchive(std::make_shared<std::ofstream>(filename)) {}
     ~BinaryOutArchive () override { FlushBuffer(); }
 
@@ -958,7 +964,7 @@ namespace ngcore
     BinaryInArchive (std::shared_ptr<std::istream>&& astream)
       : Archive(false), stream(std::move(astream))
     { }
-    BinaryInArchive (const std::filesystem::path& filename)
+    BinaryInArchive (const filesystem::path& filename)
       : BinaryInArchive(std::make_shared<std::ifstream>(filename)) { ; }
 
     using Archive::operator&;
@@ -1058,7 +1064,7 @@ namespace ngcore
     TextOutArchive (std::shared_ptr<std::ostream>&& astream)
       : Archive(true), stream(std::move(astream))
     { }
-    TextOutArchive (const std::filesystem::path& filename) :
+    TextOutArchive (const filesystem::path& filename) :
       TextOutArchive(std::make_shared<std::ofstream>(filename)) { }
 
     using Archive::operator&;
@@ -1113,7 +1119,7 @@ namespace ngcore
     TextInArchive (std::shared_ptr<std::istream>&& astream) :
       Archive(false), stream(std::move(astream))
     { }
-    TextInArchive (const std::filesystem::path& filename)
+    TextInArchive (const filesystem::path& filename)
       : TextInArchive(std::make_shared<std::ifstream>(filename)) {}
 
     using Archive::operator&;
diff --git a/libsrc/core/utils.cpp b/libsrc/core/utils.cpp
index 4ab08f3..ba454f6 100644
--- a/libsrc/core/utils.cpp
+++ b/libsrc/core/utils.cpp
@@ -13,8 +13,6 @@
 #endif //WIN32
 //
 #include <array>
-#include <filesystem>
-#include <iostream>
 #include <regex>
 #include <string>
 #include <thread>
@@ -135,16 +133,16 @@ namespace ngcore
 #endif
   }
 
-  NGCORE_API std::filesystem::path GetTempFilename()
+  NGCORE_API filesystem::path GetTempFilename()
   {
       static int counter = 0;
-      auto path = std::filesystem::temp_directory_path();
+      auto path = filesystem::temp_directory_path();
       path += ".temp_netgen_file_"+ToString(counter++)+"_"+ToString(GetTimeCounter());
       return path;
   }
 
 
-  SharedLibrary :: SharedLibrary(const std::filesystem::path & lib_name_, std::optional<std::filesystem::path> directory_to_delete_, bool global )
+  SharedLibrary :: SharedLibrary(const filesystem::path & lib_name_, std::optional<filesystem::path> directory_to_delete_, bool global )
       : lib_name(lib_name_),directory_to_delete(directory_to_delete_)
   {
     Load(lib_name, global);
@@ -160,7 +158,7 @@ namespace ngcore
         // wait for it to finish (up to a second)
         try
         {
-          std::filesystem::remove_all(*directory_to_delete);
+          filesystem::remove_all(*directory_to_delete);
           directory_to_delete = std::nullopt;
           break;
         }
@@ -173,7 +171,7 @@ namespace ngcore
       std::cerr << "Could not delete " << directory_to_delete->string() << std::endl;
   }
 
-  void SharedLibrary :: Load( const std::filesystem::path & lib_name_, bool global )
+  void SharedLibrary :: Load( const filesystem::path & lib_name_, bool global )
   {
     Unload();
     lib_name = lib_name_;
diff --git a/libsrc/core/utils.hpp b/libsrc/core/utils.hpp
index a503d53..a7a8f51 100644
--- a/libsrc/core/utils.hpp
+++ b/libsrc/core/utils.hpp
@@ -3,7 +3,13 @@
 
 #include <atomic>
 #include <chrono>
+#if defined(__GNUC__) && (__GNUC__ < 8)
+#include <experimental/filesystem>
+namespace filesystem = std::experimental::filesystem;
+#else
 #include <filesystem>
+namespace filesystem = std::filesystem;
+#endif
 #include <map>
 #include <ostream>
 #include <optional>
@@ -99,11 +105,6 @@ namespace ngcore
     return res;
   }
 
-  inline std::string ToLower( const std::filesystem::path & p )
-  {
-    return ToLower(p.string());
-  }
-
 
 
   template <class T>
@@ -346,7 +347,7 @@ namespace ngcore
   NGCORE_API int GetCompiledSIMDSize();
   NGCORE_API bool IsRangeCheckEnabled();
 
-  NGCORE_API std::filesystem::path GetTempFilename();
+  NGCORE_API filesystem::path GetTempFilename();
 
   NGCORE_API void* GetRawSymbol( std::string func_name );
 
@@ -359,13 +360,13 @@ namespace ngcore
   // Class to handle/load shared libraries
   class NGCORE_API SharedLibrary
   {
-    std::filesystem::path lib_name;
-    std::optional<std::filesystem::path> directory_to_delete = std::nullopt;
+    filesystem::path lib_name;
+    std::optional<filesystem::path> directory_to_delete = std::nullopt;
     void *lib = nullptr;
 
   public:
     SharedLibrary() = default;
-    SharedLibrary(const std::filesystem::path & lib_name_, std::optional<std::filesystem::path> directory_to_delete_ = std::nullopt, bool global = false );
+    SharedLibrary(const filesystem::path & lib_name_, std::optional<filesystem::path> directory_to_delete_ = std::nullopt, bool global = false );
 
     SharedLibrary(const SharedLibrary &) = delete;
     SharedLibrary & operator =(const SharedLibrary &) = delete;
@@ -378,7 +379,7 @@ namespace ngcore
       return reinterpret_cast<TFunc>(GetRawSymbol(func_name));
     }
 
-    void Load( const std::filesystem::path & lib_name_, bool global = true);
+    void Load( const filesystem::path & lib_name_, bool global = true);
     void Unload();
     void* GetRawSymbol( std::string func_name );
   };
diff --git a/libsrc/general/gzstream.cpp b/libsrc/general/gzstream.cpp
index 968c07f..78a67a3 100644
--- a/libsrc/general/gzstream.cpp
+++ b/libsrc/general/gzstream.cpp
@@ -44,7 +44,7 @@ namespace GZSTREAM_NAMESPACE {
 // class gzstreambuf:
 // --------------------------------------
 
-  gzstreambuf* gzstreambuf::open( const std::filesystem::path & name, int open_mode) {
+  gzstreambuf* gzstreambuf::open( const filesystem::path & name, int open_mode) {
     if ( is_open())
         return (gzstreambuf*)0;
     mode = open_mode;
@@ -143,7 +143,7 @@ int gzstreambuf::sync() {
 // class gzstreambase:
 // --------------------------------------
 
-  gzstreambase::gzstreambase( const std::filesystem::path & name, int mode) {
+  gzstreambase::gzstreambase( const filesystem::path & name, int mode) {
     init( &buf);
     open( name.c_str(), mode);
 }
@@ -152,7 +152,7 @@ gzstreambase::~gzstreambase() {
     buf.close();
 }
 
-  void gzstreambase::open( const std::filesystem::path & name, int open_mode) {
+  void gzstreambase::open( const filesystem::path & name, int open_mode) {
     if ( ! buf.open( name.c_str(), open_mode))
         clear( rdstate() | std::ios::badbit);
 }
diff --git a/libsrc/general/gzstream.h b/libsrc/general/gzstream.h
index 20a7779..d05826a 100644
--- a/libsrc/general/gzstream.h
+++ b/libsrc/general/gzstream.h
@@ -34,6 +34,14 @@
 #include <fstream>
 #include <zlib.h>
 
+#if defined(__GNUC__) && (__GNUC__ < 8)
+#include <experimental/filesystem>
+namespace filesystem = std::experimental::filesystem;
+#else
+#include <filesystem>           // for filesystem::path
+namespace filesystem = std::filesystem;
+#endif
+
 #ifdef GZSTREAM_NAMESPACE
 namespace GZSTREAM_NAMESPACE {
 #endif
@@ -62,7 +70,7 @@ public:
         // ASSERT: both input & output capabilities will not be used together
     }
     int is_open() { return opened; }
-    gzstreambuf* open( const std::filesystem::path & name, int open_mode);
+    gzstreambuf* open( const filesystem::path & name, int open_mode);
     gzstreambuf* close();
     ~gzstreambuf() { close(); }
     
@@ -76,9 +84,9 @@ protected:
     gzstreambuf buf;
 public:
     gzstreambase() { init(&buf); }
-    gzstreambase( const std::filesystem::path & name, int open_mode);
+    gzstreambase( const filesystem::path & name, int open_mode);
     ~gzstreambase();
-    void open( const std::filesystem::path & name, int open_mode);
+    void open( const filesystem::path & name, int open_mode);
     void close();
     gzstreambuf* rdbuf() { return &buf; }
 };
@@ -92,10 +100,10 @@ public:
 class DLL_HEADER igzstream : public gzstreambase, public std::istream {
 public:
     igzstream() : std::istream( &buf) {} 
-    igzstream( const std::filesystem::path & name, int open_mode = std::ios::in)
+    igzstream( const filesystem::path & name, int open_mode = std::ios::in)
         : gzstreambase( name, open_mode), std::istream( &buf) {}  
     gzstreambuf* rdbuf() { return gzstreambase::rdbuf(); }
-    void open( const std::filesystem::path & name, int open_mode = std::ios::in) {
+    void open( const filesystem::path & name, int open_mode = std::ios::in) {
         gzstreambase::open( name, open_mode);
     }
 };
@@ -103,10 +111,10 @@ public:
 class DLL_HEADER ogzstream : public gzstreambase, public std::ostream {
 public:
     ogzstream() : std::ostream( &buf) {}
-    ogzstream( const std::filesystem::path & name, int mode = std::ios::out)
+    ogzstream( const filesystem::path & name, int mode = std::ios::out)
         : gzstreambase( name, mode), std::ostream( &buf) {}  
     gzstreambuf* rdbuf() { return gzstreambase::rdbuf(); }
-    void open( const std::filesystem::path & name, int open_mode = std::ios::out) {
+    void open( const filesystem::path & name, int open_mode = std::ios::out) {
         gzstreambase::open( name, open_mode);
     }
 };
diff --git a/libsrc/general/mystring.hpp b/libsrc/general/mystring.hpp
index 4f2167e..edb2b9b 100644
--- a/libsrc/general/mystring.hpp
+++ b/libsrc/general/mystring.hpp
@@ -19,7 +19,12 @@
 #ifndef MYSTRING__H
 #define MYSTRING__H
 
+#if defined(__GNUC__) && (__GNUC__ < 8)
+#include <experimental/filesystem>
+namespace filesystem = std::experimental::filesystem;
+#else
 #include <filesystem>
+#endif
 
 namespace netgen
 {
diff --git a/libsrc/interface/writeuser.hpp b/libsrc/interface/writeuser.hpp
index 99dc21e..1835707 100644
--- a/libsrc/interface/writeuser.hpp
+++ b/libsrc/interface/writeuser.hpp
@@ -7,7 +7,13 @@
 /* Date:    10. Dec. 97                                                   */
 /**************************************************************************/
 
-#include <filesystem>
+#if defined(__GNUC__) && (__GNUC__ < 8)
+#include <experimental/filesystem>
+namespace filesystem = std::experimental::filesystem;
+#else
+#include <filesystem>           // for filesystem::path
+namespace filesystem = std::filesystem;
+#endif
 #include <functional>
 #include <optional>
 
@@ -15,8 +21,6 @@
 
 namespace netgen {
 
-using namespace std::filesystem;
-
 typedef std::function<void (const Mesh & mesh, const filesystem::path & filename)> FWrite;
 typedef std::function<void (Mesh & mesh, const filesystem::path & filename)> FRead;
 typedef std::function<bool (const filesystem::path & filename)> FTest;
diff --git a/libsrc/meshing/meshclass.hpp b/libsrc/meshing/meshclass.hpp
index 4be51c8..9635863 100644
--- a/libsrc/meshing/meshclass.hpp
+++ b/libsrc/meshing/meshclass.hpp
@@ -11,7 +11,12 @@
   The mesh class
 */
 
-#include<filesystem>
+#if defined(__GNUC__) && (__GNUC__ < 8)
+#include <experimental/filesystem>
+namespace filesystem = std::experimental::filesystem;
+#else
+#include <filesystem>
+#endif
 
 #include <gprim/adtree.hpp>
 #include <gprim/transform3d.hpp>
diff --git a/ng/ngpkg.cpp b/ng/ngpkg.cpp
index 8b6a245..fe728cd 100644
--- a/ng/ngpkg.cpp
+++ b/ng/ngpkg.cpp
@@ -2132,7 +2132,7 @@ namespace netgen
 #endif // JPEGLIB
     {
         string command;
-        std::filesystem::path filepath(filename);
+        filesystem::path filepath(filename);
 
         bool need_conversion = filepath.extension() != ".ppm";
         if (need_conversion)
@@ -2163,7 +2163,7 @@ namespace netgen
               return TCL_ERROR;
           }
 
-          std::filesystem::remove(filepath);
+          filesystem::remove(filepath);
         }
 
         return TCL_OK;
-- 
2.48.1

openSUSE Build Service is sponsored by