FreeCAD

Форк
0
/
FindNETGEN.cmake 
150 строк · 6.1 Кб
1
# Try to find nglib/netgen
2
#
3
# Optional input NETGENDATA is path to the netgen libsrc source tree - this is
4
# required due to some headers not being installed by netgen.
5
#
6
# Once done this will define
7
#
8
# NGLIB_INCLUDE_DIR   - where the nglib include directory can be found
9
# NGLIB_LIBRARIES     - Link this to use nglib
10
# NETGEN_INCLUDE_DIRS - where the netgen include directories can be found
11
# NETGEN_DEFINITIONS  - C++ compiler defines required to use netgen/nglib
12
#
13
# See also: http://git.salome-platform.org/gitweb/?p=NETGENPLUGIN_SRC.git;a=summary
14

15

16
find_package(Netgen CONFIG)
17
if(Netgen_FOUND)
18
  set(NGLIB_INCLUDE_DIR ${NETGEN_INCLUDE_DIRS})
19
  set(NGLIB_LIBRARIES nglib)
20
  set(NETGEN_DEFINITIONS -DNO_PARALLEL_THREADS -DOCCGEOMETRY)
21
  # for external smesh only the following two variables are needed:
22
  set(NETGEN_FOUND True)
23
  set(NETGEN_INCLUDE_DIRS ${NETGEN_INCLUDE_DIRS})
24

25
else(Netgen_FOUND)
26

27

28
  SET(NETGEN_DEFINITIONS -DNO_PARALLEL_THREADS -DOCCGEOMETRY)
29

30
  IF(WIN32)
31
      FIND_PATH(NGLIB_INCLUDE_DIR NAMES nglib.h PATHS ${NETGEN_INCLUDEDIR})
32
      SET(NETGEN_LIBS nglib mesh occ interface)
33
      SET(NGLIB_LIBRARIES "")
34
      FOREACH(it ${NETGEN_LIBS})
35
          FIND_LIBRARY(NGLIB ${it} PATHS ${NETGEN_LIBDIR})
36
          FIND_LIBRARY(NGLIBD ${it}d PATHS ${NETGEN_LIBDIR})
37
          IF(NGLIBD AND NGLIB)
38
              SET(NG_LIB optimized ${NGLIB}
39
                         debug ${NGLIBD})
40
              SET(NGLIB_LIBRARIES ${NGLIB_LIBRARIES} ${NG_LIB})
41
              UNSET(NGLIB CACHE)
42
              UNSET(NGLIBD CACHE)
43
          ELSEIF(NGLIB)
44
              SET(NGLIB_LIBRARIES ${NGLIB_LIBRARIES} ${NGLIB})
45
              UNSET(NGLIB CACHE)
46
          ENDIF()
47
      ENDFOREACH()
48

49
      IF(NOT NETGENDATA)
50
          SET(NETGENDATA netgen)
51
      ENDIF(NOT NETGENDATA)
52

53
  ELSEIF(DEFINED MACPORTS_PREFIX OR DEFINED HOMEBREW_PREFIX)
54
      IF(NETGEN_ROOT)
55
          SET(NETGEN_INCLUDEDIR ${NETGEN_ROOT}/include)
56
          SET(NETGEN_LIBDIR ${NETGEN_ROOT}/lib)
57
          # allow to customize if NETGEN_ROOT is used
58
          IF(NOT NETGENDATA)
59
              SET(NETGENDATA ${NETGEN_ROOT}/libsrc)
60
          ENDIF(NOT NETGENDATA)
61
      ENDIF()
62

63
      FIND_PATH(NGLIB_INCLUDE_DIR NAMES nglib.h PATHS ${NETGEN_INCLUDEDIR} /usr/include /usr/include/netgen-mesher)
64
      FIND_LIBRARY(NGLIB_LIBNGLIB nglib PATHS ${NETGEN_LIBDIR} /usr/lib /usr/lib64 /usr/local/lib)
65
      SET(NGLIB_LIBRARIES ${NGLIB_LIBNGLIB})
66
      FIND_LIBRARY(NGLIB_LIBMESH  NAMES mesh ngmesh PATHS ${NETGEN_LIBDIR} /usr/lib /usr/lib64 /usr/local/lib)
67
      IF(NGLIB_LIBMESH)
68
          SET(NGLIB_LIBRARIES ${NGLIB_LIBRARIES} ${NGLIB_LIBMESH})
69
      ENDIF()
70
      FIND_LIBRARY(NGLIB_LIBOCC NAMES occ ngocc PATHS ${NETGEN_LIBDIR} /usr/lib /usr/lib64 /usr/local/lib)
71
      IF(NGLIB_LIBOCC)
72
          SET(NGLIB_LIBRARIES ${NGLIB_LIBRARIES} ${NGLIB_LIBOCC})
73
      ENDIF()
74
      FIND_LIBRARY(NGLIB_LIBINTERFACE NAMES interface nginterface PATHS ${NETGEN_LIBDIR} /usr/lib /usr/lib64 /usr/local/lib)
75
      IF(NGLIB_LIBINTERFACE)
76
          SET(NGLIB_LIBRARIES ${NGLIB_LIBRARIES} ${NGLIB_LIBINTERFACE})
77
      ENDIF()
78

79
      IF(NOT NETGENDATA)
80
          SET(NETGENDATA /usr/share/netgen/libsrc)
81
      ENDIF(NOT NETGENDATA)
82
  ENDIF(DEFINED MACPORTS_PREFIX OR DEFINED HOMEBREW_PREFIX)
83

84
  FIND_PATH(NETGEN_DIR_include NAMES mydefs.hpp     NO_DEFAULT_PATH PATHS ${NGLIB_INCLUDE_DIR}/include ${NETGENDATA}/include ${NETGEN_INCLUDEDIR} ${NGLIB_INCLUDE_DIR})
85

86
  IF(NOT NGLIB_INCLUDE_DIR AND NOT NETGEN_DIR_include)
87
      MESSAGE(STATUS "Cannot find NETGEN header files.")
88
  ELSEIF(NOT NETGEN_VERSION)
89
      file(STRINGS ${NETGEN_DIR_include}/mydefs.hpp NETGEN_VERSION REGEX "#define PACKAGE_VERSION.*")
90
  ENDIF()
91

92
  IF(NOT NGLIB_LIBRARIES)
93
      MESSAGE(STATUS "Cannot find NETGEN library.")
94
  ENDIF()
95

96
  IF(NGLIB_INCLUDE_DIR AND NGLIB_LIBRARIES)
97
      SET(Netgen_FOUND TRUE)
98
      SET(NETGEN_INCLUDE_DIRS ${NETGEN_DIR_include} ${NGLIB_INCLUDE_DIR})
99
      LIST(REMOVE_DUPLICATES NETGEN_INCLUDE_DIRS)
100
  ELSE()
101
      SET(Netgen_FOUND FALSE)
102
  ENDIF()
103
endif(Netgen_FOUND)
104

105
# Package-provided cMake file is not enough
106
IF(Netgen_FOUND)
107
  IF(NOT NETGEN_VERSION_MAJOR)
108
    IF(NETGEN_VERSION)
109
        string(REGEX MATCHALL "[0-9]+" NETGEN_VERSION_expr ${NETGEN_VERSION})
110
        list(LENGTH NETGEN_VERSION_expr NETGEN_VERSION_COUNT)
111
        list(GET NETGEN_VERSION_expr 0 NETGEN_VERSION_MAJOR)
112
        IF(NETGEN_VERSION_COUNT GREATER 1)
113
            list(GET NETGEN_VERSION_expr 1 NETGEN_VERSION_MINOR)
114
        ELSE()
115
            set(NETGEN_VERSION_MINOR 0)
116
        ENDIF()
117
    ELSE()  # workaround for netgen 6.2 and newer. currently there is no easy way to detect the version
118
        # better use "find_package(netgen CONFIG REQUIRED)"
119
        set(NETGEN_VERSION_MAJOR 6)
120
        set(NETGEN_VERSION_MINOR 2)
121
    ENDIF()
122
    set(NETGEN_VERSION_PATCH 0)
123
  ENDIF()
124

125
  MATH(EXPR NETGEN_VERSION_C "(${NETGEN_VERSION_MAJOR} << 16) + (${NETGEN_VERSION_MINOR} << 8) + (${NETGEN_VERSION_PATCH})")
126
  MATH(EXPR NETGEN_VERSION_62 "(6 << 16) + (2 << 8)")
127
  MATH(EXPR NETGEN_VERSION_62_2004 "(6 << 16) + (2 << 8) + (2004)")
128
  IF(NOT NETGEN_VERSION_C LESS NETGEN_VERSION_62) # Version >= 6.2
129
    IF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
130
        # Clang sometimes fails to include <cstdio>
131
        include(CMakePushCheckState)
132
        cmake_push_check_state(RESET)
133
        set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${NETGEN_CXX_FLAGS}")
134
        check_cxx_source_compiles("#include <cstdio>\nint main(){}" CSTDIO_INCLUDE_TRY1)
135
        IF(NOT CSTDIO_INCLUDE_TRY1)
136
            # Ugly hack to make <stdio.h> building gets function
137
            set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -U__cplusplus -D__cplusplus=201103L")
138
            check_cxx_source_compiles("#include <cstdio>\nint main(){}" CSTDIO_INCLUDE_TRY2)
139
            IF(NOT CSTDIO_INCLUDE_TRY2)
140
                message(FATAL_ERROR "Cannot #include <cstdio>.")
141
            ELSE()
142
                set(NETGEN_CXX_FLAGS "${NETGEN_CXX_FLAGS} -U__cplusplus -D__cplusplus=201103L")
143
            ENDIF()
144
         ENDIF()
145
         cmake_pop_check_state()
146
    ENDIF()
147
  ENDIF()
148
  MESSAGE(STATUS "Found NETGEN version ${NETGEN_VERSION_MAJOR}.${NETGEN_VERSION_MINOR}, calculated: ${NETGEN_VERSION_C}")
149
  LIST(APPEND NETGEN_DEFINITIONS -DNETGEN_VERSION=${NETGEN_VERSION_C})
150
ENDIF()
151

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.