Salome HOME
bos #18711 Adapt NETGEN detection procedure for version 6x: manage case when NETGEN...
[tools/configuration.git] / cmake / FindNetgen.cmake
index 7995fbab83473ae452571069e2550e74eeafea52..4a9d6c798c373b0e73d556f94057ac58be15b6e3 100644 (file)
@@ -1,14 +1,12 @@
 # - Find NETGEN
 # Sets the following variables:
+#   NETGEN_DEFINITIONS  - compile flags
 #   NETGEN_INCLUDE_DIRS - path to the NETGEN include directories
 #   NETGEN_LIBRARIES    - path to the NETGEN libraries to be linked against
 #
 
 #########################################################################
-# Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-#
-# Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-# CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+# Copyright (C) 2007-2021  CEA/DEN, EDF R&D, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -41,13 +39,29 @@ IF(NETGEN_ROOT_DIR)
   LIST(APPEND CMAKE_PREFIX_PATH "${NETGEN_ROOT_DIR}")
 ENDIF(NETGEN_ROOT_DIR)
 
+# Windows specific stuff:
+# Since netgen-5.3.1 uses zlib, try to detect it
+IF(WIN32)
+  IF(EXISTS ${NETGEN_ROOT_DIR}/cmake/FindZlib.cmake)
+    FILE(TO_CMAKE_PATH ${NETGEN_ROOT_DIR}/cmake NETGEN_CMAKE_FILES)
+    LIST(APPEND CMAKE_MODULE_PATH ${NETGEN_CMAKE_FILES})
+    SET(ZLIB_ROOT_DIR $ENV{ZLIB_ROOT_DIR})
+    INCLUDE(FindZlib)
+  ENDIF()
+ENDIF()
+
 FIND_PATH(_netgen_base_inc_dir nglib.h)
-SET(NETGEN_INCLUDE_DIRS ${_netgen_base_inc_dir})
-FIND_PATH(_netgen_add_inc_dir occgeom.hpp HINTS ${_netgen_base_inc_dir} PATH_SUFFIXES share/netgen/include)
-LIST(APPEND NETGEN_INCLUDE_DIRS ${_netgen_add_inc_dir})
-LIST(REMOVE_DUPLICATES NETGEN_INCLUDE_DIRS)
+SET(NETGEN_INCLUDE_DIRS ${_netgen_base_inc_dir} ${ZLIB_INCLUDE_DIRS})
+FIND_PATH(_netgen_add_inc_dir1 occgeom.hpp HINTS ${_netgen_base_inc_dir} PATH_SUFFIXES share/netgen/include include)
+IF(_netgen_add_inc_dir1)
+  LIST(APPEND NETGEN_INCLUDE_DIRS ${_netgen_add_inc_dir1})
+ENDIF()
+FIND_PATH(_netgen_add_inc_dir2 exception.hpp HINTS ${_netgen_base_inc_dir} PATH_SUFFIXES share/netgen/include share/netgen/include/core include include/core)
+IF(_netgen_add_inc_dir2)
+  LIST(APPEND NETGEN_INCLUDE_DIRS ${_netgen_add_inc_dir2})
+ENDIF()
 
-FOREACH(_lib nglib csg gen geom2d gprim interface la mesh occ stl)
+FOREACH(_lib nglib csg gen geom2d gprim interface la mesh occ stl ngcore)
 
   FIND_LIBRARY(NETGEN_${_lib} NAMES ${_lib})
   IF(NETGEN_${_lib})
@@ -60,8 +74,10 @@ INCLUDE(FindPackageHandleStandardArgs)
 FIND_PACKAGE_HANDLE_STANDARD_ARGS(NETGEN REQUIRED_VARS NETGEN_INCLUDE_DIRS NETGEN_LIBRARIES)
 
 INCLUDE(CheckCXXSourceCompiles)
+INCLUDE(CMakePushCheckState)
 
 IF(NETGEN_FOUND)
+  CMAKE_PUSH_CHECK_STATE()
 
   # Detect NETGEN V5
   SET(CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES} ${NETGEN_INCLUDE_DIRS}")
@@ -75,17 +91,26 @@ IF(NETGEN_FOUND)
     }
 " NETGEN_V5
     )
+  # Detect NETGEN V6
+  SET(CMAKE_REQUIRED_FLAGS "-std=c++17")
+  CHECK_CXX_SOURCE_COMPILES("
+    //using namespace std;
+    #include <meshing.hpp>
+    int main()
+    {
+       netgen::MeshingParameters mp;
+       return !mp.meshsizefilename.empty();
+    }
+" NETGEN_V6
+    )
+
+  CMAKE_POP_CHECK_STATE()
 
   IF(NOT Netgen_FIND_QUIETLY)
     MESSAGE(STATUS "Netgen library: ${NETGEN_LIBRARIES}")
   ENDIF()
   SET(NETGEN_DEFINITIONS "-DOCCGEOMETRY")
 
-  IF(NETGEN_V5)
-    MESSAGE(STATUS "NETGEN V5 or later found")
-    SET(NETGEN_DEFINITIONS "${NETGEN_DEFINITIONS} -DNETGEN_V5")
-  ENDIF(NETGEN_V5)
-
   #RNV:  currently on windows use netgen without thread support.
   #TODO: check support of the multithreading on windows
   IF(WIN32)