FreeCAD

Форк
0
/
FindNETGEN.cmake 
149 строк · 6.4 Кб
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 ()
26

27
    SET(NETGEN_DEFINITIONS -DNO_PARALLEL_THREADS -DOCCGEOMETRY)
28

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

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

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

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

78
        IF (NOT NETGENDATA)
79
            SET(NETGENDATA /usr/share/netgen/libsrc)
80
        ENDIF ()
81
    ENDIF ()
82

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

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

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

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

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

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

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

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

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

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