[25834] | 1 | Index: ../trunk-jpl/externalpackages/gmsh/install-4-linux-python-static.sh
|
---|
| 2 | ===================================================================
|
---|
| 3 | --- ../trunk-jpl/externalpackages/gmsh/install-4-linux-python-static.sh (revision 25790)
|
---|
| 4 | +++ ../trunk-jpl/externalpackages/gmsh/install-4-linux-python-static.sh (revision 25791)
|
---|
| 5 | @@ -33,7 +33,7 @@
|
---|
| 6 | rm -rf gmsh-${VER}-source
|
---|
| 7 |
|
---|
| 8 | # Copy customized source and config files to 'src' directory
|
---|
| 9 | -cp configs/4/linux/static/CMakeLists.txt src
|
---|
| 10 | +cp configs/${VER}/static/CMakeLists.txt src
|
---|
| 11 |
|
---|
| 12 | # Configure
|
---|
| 13 | #
|
---|
| 14 | @@ -55,7 +55,6 @@
|
---|
| 15 | -DENABLE_MPEG_ENCODE=0 \
|
---|
| 16 | -DENABLE_MPI=1 \
|
---|
| 17 | -DENABLE_OCC=0 \
|
---|
| 18 | - -DENABLE_TOUCHBAR=0 \
|
---|
| 19 | -DMETIS_ROOT="${PETSC_ROOT}"
|
---|
| 20 |
|
---|
| 21 | # Compile and install
|
---|
| 22 | Index: ../trunk-jpl/externalpackages/gmsh/install-4-linux-static.sh
|
---|
| 23 | ===================================================================
|
---|
| 24 | --- ../trunk-jpl/externalpackages/gmsh/install-4-linux-static.sh (revision 25790)
|
---|
| 25 | +++ ../trunk-jpl/externalpackages/gmsh/install-4-linux-static.sh (revision 25791)
|
---|
| 26 | @@ -31,7 +31,7 @@
|
---|
| 27 | rm -rf gmsh-${VER}-source
|
---|
| 28 |
|
---|
| 29 | # Copy customized source and config files to 'src' directory
|
---|
| 30 | -cp configs/4/mac/static/CMakeLists.txt src
|
---|
| 31 | +cp configs/${VER}/static/CMakeLists.txt src
|
---|
| 32 |
|
---|
| 33 | # Configure
|
---|
| 34 | #
|
---|
| 35 | @@ -41,8 +41,6 @@
|
---|
| 36 | # movies.
|
---|
| 37 | # - Option -DENABLE_OCC=0 is used because we do not need CAD kernel and are not
|
---|
| 38 | # importing STEP/IGES files.
|
---|
| 39 | -# - Option -DENABLE_TOUCHBAR=0 is used because we do not have GUI, therefore we
|
---|
| 40 | -# do not need to support Apple Touch bar.
|
---|
| 41 | #
|
---|
| 42 | cd install
|
---|
| 43 | cmake ../src \
|
---|
| 44 | @@ -53,7 +51,6 @@
|
---|
| 45 | -DENABLE_MPEG_ENCODE=0 \
|
---|
| 46 | -DENABLE_MPI=1 \
|
---|
| 47 | -DENABLE_OCC=0 \
|
---|
| 48 | - -DENABLE_TOUCHBAR=0 \
|
---|
| 49 | -DMETIS_ROOT="${PETSC_ROOT}"
|
---|
| 50 |
|
---|
| 51 | # Compile and install
|
---|
| 52 | Index: ../trunk-jpl/externalpackages/gmsh/configs/4.7.0/static/CMakeLists.txt
|
---|
| 53 | ===================================================================
|
---|
| 54 | --- ../trunk-jpl/externalpackages/gmsh/configs/4.7.0/static/CMakeLists.txt (nonexistent)
|
---|
| 55 | +++ ../trunk-jpl/externalpackages/gmsh/configs/4.7.0/static/CMakeLists.txt (revision 25791)
|
---|
| 56 | @@ -0,0 +1,2191 @@
|
---|
| 57 | +# Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
|
---|
| 58 | +#
|
---|
| 59 | +# See the LICENSE.txt file for license information. Please report all
|
---|
| 60 | +# issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
|
---|
| 61 | +
|
---|
| 62 | +cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
|
---|
| 63 | +
|
---|
| 64 | +# if CMAKE_BUILD_TYPE is specified use it; otherwise set the default
|
---|
| 65 | +# build type to "RelWithDebInfo" ("-O2 -g" with gcc) prior to calling
|
---|
| 66 | +# project()
|
---|
| 67 | +if(DEFINED CMAKE_BUILD_TYPE)
|
---|
| 68 | + set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Choose build type")
|
---|
| 69 | +else()
|
---|
| 70 | + set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose build type")
|
---|
| 71 | +endif()
|
---|
| 72 | +
|
---|
| 73 | +project(gmsh CXX C)
|
---|
| 74 | +
|
---|
| 75 | +# require C++11 and request C99
|
---|
| 76 | +set(CMAKE_CXX_STANDARD 11)
|
---|
| 77 | +set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
---|
| 78 | +set(CMAKE_C_STANDARD 99)
|
---|
| 79 | +
|
---|
| 80 | +# this variable controls the default value of the options which are normally set
|
---|
| 81 | +# to ON (useful if you want to configure a minimal version of Gmsh: e.g. "cmake
|
---|
| 82 | +# -DDEFAULT=0 -DENABLE_POST=1 -DENABLE_PARSER=1")
|
---|
| 83 | +set(DEFAULT ON CACHE INTERNAL "Default value for enabled-by-default options")
|
---|
| 84 | +
|
---|
| 85 | +macro(opt OPTION HELP VALUE)
|
---|
| 86 | + option(ENABLE_${OPTION} ${HELP} ${VALUE})
|
---|
| 87 | + set(OPT_TEXI "${OPT_TEXI}\n@item ENABLE_${OPTION}\n${HELP} (default: ${VALUE})")
|
---|
| 88 | +endmacro()
|
---|
| 89 | +
|
---|
| 90 | +opt(3M "Enable proprietary 3M extension" OFF)
|
---|
| 91 | +opt(ALGLIB "Enable ALGLIB (used by some mesh optimizers)" ${DEFAULT})
|
---|
| 92 | +opt(ANN "Enable ANN (used for fast point search in mesh/post)" ${DEFAULT})
|
---|
| 93 | +opt(BAMG "Enable Bamg 2D anisotropic mesh generator" ${DEFAULT})
|
---|
| 94 | +opt(BLAS_LAPACK "Enable BLAS/Lapack for linear algebra (if Eigen if disabled)" OFF)
|
---|
| 95 | +opt(BLOSSOM "Enable Blossom algorithm (needed for full quad meshing)" ${DEFAULT})
|
---|
| 96 | +opt(BUILD_LIB "Enable 'lib' target for building static Gmsh library" OFF)
|
---|
| 97 | +opt(BUILD_SHARED "Enable 'shared' target for building shared Gmsh library" OFF)
|
---|
| 98 | +opt(BUILD_DYNAMIC "Enable dynamic Gmsh executable (linked with shared library)" OFF)
|
---|
| 99 | +opt(BUILD_ANDROID "Enable Android NDK library target (experimental)" OFF)
|
---|
| 100 | +opt(BUILD_IOS "Enable iOS library target (experimental)" OFF)
|
---|
| 101 | +opt(CGNS "Enable CGNS import/export (experimental)" ${DEFAULT})
|
---|
| 102 | +opt(CGNS_CPEX0045 "Enable high-order CGNS import/export following CPEX0045 (experimental)" OFF)
|
---|
| 103 | +opt(CAIRO "Enable Cairo to render fonts (experimental)" ${DEFAULT})
|
---|
| 104 | +opt(PROFILE "Enable profiling compiler flags" OFF)
|
---|
| 105 | +opt(DINTEGRATION "Enable discrete integration (needed for levelsets)" ${DEFAULT})
|
---|
| 106 | +opt(DOMHEX "Enable experimental DOMHEX code" ${DEFAULT})
|
---|
| 107 | +opt(EIGEN "Enable Eigen for linear algebra (instead of Blas/Lapack)" ON)
|
---|
| 108 | +opt(FLTK "Enable FLTK graphical user interface (requires mesh/post)" ${DEFAULT})
|
---|
| 109 | +opt(GETDP "Enable GetDP solver (linked as a library, experimental)" ${DEFAULT})
|
---|
| 110 | +opt(GMM "Enable GMM linear solvers (simple alternative to PETSc)" ${DEFAULT})
|
---|
| 111 | +opt(GMP "Enable GMP for Kbipack (advanced)" ON)
|
---|
| 112 | +opt(GRAPHICS "Enable building graphics lib even without GUI (advanced)" OFF)
|
---|
| 113 | +opt(HXT "Enable HXT library (for reparametrization and meshing)" ${DEFAULT})
|
---|
| 114 | +opt(KBIPACK "Enable Kbipack (neeeded by homology solver)" ${DEFAULT})
|
---|
| 115 | +opt(MATHEX "Enable Mathex expression parser (used by plugins and options)" ${DEFAULT})
|
---|
| 116 | +opt(MED "Enable MED mesh and post file formats" ${DEFAULT})
|
---|
| 117 | +opt(MESH "Enable mesh module (required by GUI)" ${DEFAULT})
|
---|
| 118 | +opt(METIS "Enable Metis mesh partitioner" ${DEFAULT})
|
---|
| 119 | +opt(MMG "Enable Mmg mesh adaptation interface" ${DEFAULT})
|
---|
| 120 | +opt(MPEG_ENCODE "Enable built-in MPEG movie encoder" ${DEFAULT})
|
---|
| 121 | +opt(MPI "Enable MPI (experimental, not used for meshing)" OFF)
|
---|
| 122 | +opt(MSVC_STATIC_RUNTIME "Enable static Visual C++ runtime" OFF)
|
---|
| 123 | +opt(MUMPS "Enable MUMPS sparse direct linear solver" OFF)
|
---|
| 124 | +opt(NETGEN "Enable Netgen 3D frontal mesh generator" ${DEFAULT})
|
---|
| 125 | +opt(NUMPY "Enable fullMatrix and numpy array conversion for private API" OFF)
|
---|
| 126 | +opt(PETSC4PY "Enable petsc4py wrappers for petsc matrices for private API" OFF)
|
---|
| 127 | +opt(OCC "Enable OpenCASCADE CAD kernel" ${DEFAULT})
|
---|
| 128 | +opt(OCC_CAF "Enable OpenCASCADE CAF module (for STEP/IGES attributes)" ${DEFAULT})
|
---|
| 129 | +opt(OCC_STATIC "Link OpenCASCADE static instead of dynamic libraries (requires ENABLE_OCC)" OFF)
|
---|
| 130 | +opt(OCC_TBB "Add TBB libraries in list of OCC libraries" OFF)
|
---|
| 131 | +opt(ONELAB "Enable ONELAB solver interface" ${DEFAULT})
|
---|
| 132 | +opt(ONELAB_METAMODEL "Enable ONELAB metamodels (experimental)" ${DEFAULT})
|
---|
| 133 | +opt(OPENACC "Enable OpenACC" OFF)
|
---|
| 134 | +opt(OPENMP "Enable OpenMP" OFF)
|
---|
| 135 | +opt(OPTHOM "Enable high-order mesh optimization tools" ${DEFAULT})
|
---|
| 136 | +opt(OS_SPECIFIC_INSTALL "Enable OS-specific (e.g. app bundle) installation" OFF)
|
---|
| 137 | +opt(OSMESA "Enable OSMesa for offscreen rendering (experimental)" OFF)
|
---|
| 138 | +opt(P4EST "Enable p4est for enabling automatic mesh size field (experimental)" OFF)
|
---|
| 139 | +opt(PACKAGE_STRIP "Strip symbols in install packages to reduce install size" ON)
|
---|
| 140 | +opt(PARSER "Enable GEO file parser (required for .geo/.pos scripts)" ${DEFAULT})
|
---|
| 141 | +opt(PETSC "Enable PETSc linear solvers (required for SLEPc)" OFF)
|
---|
| 142 | +opt(PLUGINS "Enable post-processing plugins" ${DEFAULT})
|
---|
| 143 | +opt(POST "Enable post-processing module (required by GUI)" ${DEFAULT})
|
---|
| 144 | +opt(POPPLER "Enable Poppler for displaying PDF documents (experimental)" OFF)
|
---|
| 145 | +opt(PRIVATE_API "Enable private API" OFF)
|
---|
| 146 | +opt(PRO "Enable PRO extensions" ${DEFAULT})
|
---|
| 147 | +opt(QUADTRI "Enable QuadTri structured meshing extensions" ${DEFAULT})
|
---|
| 148 | +opt(REVOROPT "Enable Revoropt (used for CVT remeshing)" OFF)
|
---|
| 149 | +opt(RPATH "Use RPATH in dynamically linked targets" ON)
|
---|
| 150 | +opt(SLEPC "Enable SLEPc eigensolvers" OFF)
|
---|
| 151 | +opt(SOLVER "Enable built-in finite element solvers (required for reparametrization)" ${DEFAULT})
|
---|
| 152 | +opt(SYSTEM_CONTRIB "Use system versions of contrib libraries, when possible" OFF)
|
---|
| 153 | +opt(TCMALLOC "Enable libtcmalloc (fast malloc that does not release memory)" OFF)
|
---|
| 154 | +opt(TOUCHBAR "Enable Apple Touch bar" ${DEFAULT})
|
---|
| 155 | +opt(VISUDEV "Enable additional visualization capabilities for development purposes" OFF)
|
---|
| 156 | +opt(VOROPP "Enable voro++ (for hex meshing, experimental)" ${DEFAULT})
|
---|
| 157 | +opt(WRAP_JAVA "Generate SWIG Java wrappers for private API" OFF)
|
---|
| 158 | +opt(WRAP_PYTHON "Generate SWIG Python wrappers for private API (not used by public API)" OFF)
|
---|
| 159 | +opt(ZIPPER "Enable Zip file compression/decompression" OFF)
|
---|
| 160 | +
|
---|
| 161 | +set(GMSH_MAJOR_VERSION 4)
|
---|
| 162 | +set(GMSH_MINOR_VERSION 7)
|
---|
| 163 | +set(GMSH_PATCH_VERSION 0)
|
---|
| 164 | +if(NOT GMSH_EXTRA_VERSION)
|
---|
| 165 | + set(GMSH_EXTRA_VERSION "")
|
---|
| 166 | +endif()
|
---|
| 167 | +set(GMSH_EXTRA_VERSION_TEXI "${GMSH_EXTRA_VERSION}")
|
---|
| 168 | +set(GMSH_EXTRA_VERSION_ORIG ${GMSH_EXTRA_VERSION})
|
---|
| 169 | +
|
---|
| 170 | +if(NOT GMSH_RELEASE)
|
---|
| 171 | + find_package(Git)
|
---|
| 172 | + if(GIT_FOUND)
|
---|
| 173 | + execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --format=%h
|
---|
| 174 | + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ERROR_QUIET
|
---|
| 175 | + OUTPUT_VARIABLE GIT_COMMIT_HASH
|
---|
| 176 | + OUTPUT_STRIP_TRAILING_WHITESPACE)
|
---|
| 177 | + endif()
|
---|
| 178 | + if(GIT_COMMIT_HASH)
|
---|
| 179 | + set(GMSH_EXTRA_VERSION "${GMSH_EXTRA_VERSION}-git-${GIT_COMMIT_HASH}")
|
---|
| 180 | + endif()
|
---|
| 181 | + set(GMSH_EXTRA_VERSION_TEXI "${GMSH_EXTRA_VERSION_TEXI} (development version)")
|
---|
| 182 | +endif()
|
---|
| 183 | +
|
---|
| 184 | +set(GMSH_SHORT_VERSION
|
---|
| 185 | + "${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION}.${GMSH_PATCH_VERSION}")
|
---|
| 186 | +set(GMSH_VERSION "${GMSH_SHORT_VERSION}${GMSH_EXTRA_VERSION}")
|
---|
| 187 | +set(GMSH_SHORT_LICENSE "GNU General Public License")
|
---|
| 188 | +
|
---|
| 189 | +set(GMSH_GITLAB_PREFIX "https://gitlab.onelab.info/gmsh/gmsh")
|
---|
| 190 | +if(GMSH_RELEASE)
|
---|
| 191 | + set(GMSH_GITLAB_PREFIX "${GMSH_GITLAB_PREFIX}/blob/gmsh_${GMSH_SHORT_VERSION}")
|
---|
| 192 | +else()
|
---|
| 193 | + set(GMSH_GITLAB_PREFIX "${GMSH_GITLAB_PREFIX}/blob/master")
|
---|
| 194 | +endif()
|
---|
| 195 | +
|
---|
| 196 | +set(GMSH_API api/gmsh.h api/gmshc.h api/gmsh.h_cwrap)
|
---|
| 197 | +
|
---|
| 198 | +if(ENABLE_PRIVATE_API)
|
---|
| 199 | + message(WARNING "The private API is unsupported and undocumented. It is meant "
|
---|
| 200 | + "for expert Gmsh developers, not for regular Gmsh users, who should rely "
|
---|
| 201 | + "on the stable public API (gmsh/api) instead.")
|
---|
| 202 | + file(GLOB_RECURSE HEADERS Common/*.h Numeric/*.h Geo/*.h Mesh/*.h Solver/*.h
|
---|
| 203 | + Post/*.h Plugin/*.h Graphics/*.h contrib/kbipack/*.h
|
---|
| 204 | + contrib/DiscreteIntegration/*.h contrib/HighOrderMeshOptimizer/*.h
|
---|
| 205 | + contrib/MeshOptimizer/*.h contrib/MeshQualityOptimizer/*.h)
|
---|
| 206 | + set(GMSH_PRIVATE_API ${CMAKE_CURRENT_BINARY_DIR}/Common/GmshConfig.h
|
---|
| 207 | + ${CMAKE_CURRENT_BINARY_DIR}/Common/GmshVersion.h ${HEADERS})
|
---|
| 208 | + get_property(IAMCHILD DIRECTORY PROPERTY PARENT_DIRECTORY)
|
---|
| 209 | + if(IAMCHILD)
|
---|
| 210 | + set(GMSH_PRIVATE_API ${GMSH_PRIVATE_API} PARENT_SCOPE)
|
---|
| 211 | + endif()
|
---|
| 212 | + if(ENABLE_WRAP_PYTHON OR ENABLE_WRAP_JAVA)
|
---|
| 213 | + set(ENABLE_BUILD_DYNAMIC ON)
|
---|
| 214 | + message(WARNING "SWIG wrappers for the private API are unsupported and "
|
---|
| 215 | + "undocumented. The stable public Python API does not required SWIG.")
|
---|
| 216 | + endif()
|
---|
| 217 | +endif()
|
---|
| 218 | +
|
---|
| 219 | +set(ONELAB_PY contrib/onelab/python/onelab.py)
|
---|
| 220 | +set(GMSH_PY api/gmsh.py)
|
---|
| 221 | +set(GMSH_JL api/gmsh.jl)
|
---|
| 222 | +
|
---|
| 223 | +if(${CMAKE_MAJOR_VERSION} GREATER 2)
|
---|
| 224 | + string(TIMESTAMP DATE "%Y%m%d")
|
---|
| 225 | +else()
|
---|
| 226 | + execute_process(COMMAND date "+%Y%m%d" OUTPUT_VARIABLE DATE
|
---|
| 227 | + OUTPUT_STRIP_TRAILING_WHITESPACE)
|
---|
| 228 | +endif()
|
---|
| 229 | +
|
---|
| 230 | +if(NOT DATE)
|
---|
| 231 | + set(DATE "unknown")
|
---|
| 232 | +endif()
|
---|
| 233 | +set(GMSH_DATE "${DATE}")
|
---|
| 234 | +
|
---|
| 235 | +if(NOT GMSH_HOST)
|
---|
| 236 | + execute_process(COMMAND hostname OUTPUT_VARIABLE HOST
|
---|
| 237 | + OUTPUT_STRIP_TRAILING_WHITESPACE)
|
---|
| 238 | + if(NOT HOST)
|
---|
| 239 | + set(HOST "unknown")
|
---|
| 240 | + endif()
|
---|
| 241 | + set(GMSH_HOST "${HOST}")
|
---|
| 242 | +endif()
|
---|
| 243 | +
|
---|
| 244 | +if(NOT GMSH_PACKAGER)
|
---|
| 245 | + execute_process(COMMAND whoami OUTPUT_VARIABLE PACKAGER
|
---|
| 246 | + OUTPUT_STRIP_TRAILING_WHITESPACE)
|
---|
| 247 | + if(NOT PACKAGER)
|
---|
| 248 | + set(PACKAGER "unknown")
|
---|
| 249 | + endif()
|
---|
| 250 | + string(REPLACE "\\" " " PACKAGER ${PACKAGER})
|
---|
| 251 | + set(GMSH_PACKAGER "${PACKAGER}")
|
---|
| 252 | +endif()
|
---|
| 253 | +
|
---|
| 254 | +if(APPLE)
|
---|
| 255 | + set(GMSH_OS "MacOSX")
|
---|
| 256 | +elseif(CYGWIN OR MSYS)
|
---|
| 257 | + # detect if we use the MinGW compilers on Cygwin - if we do, handle the build
|
---|
| 258 | + # as a pure Windows build and make cmake find pure Windows import libraries
|
---|
| 259 | + # (.lib)
|
---|
| 260 | + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR
|
---|
| 261 | + CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
---|
| 262 | + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine
|
---|
| 263 | + OUTPUT_VARIABLE CXX_COMPILER_MACHINE
|
---|
| 264 | + OUTPUT_STRIP_TRAILING_WHITESPACE)
|
---|
| 265 | + if(CXX_COMPILER_MACHINE MATCHES "mingw")
|
---|
| 266 | + set(GMSH_OS "Windows")
|
---|
| 267 | + set(WIN32 1)
|
---|
| 268 | + add_definitions(-DWIN32)
|
---|
| 269 | + set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
|
---|
| 270 | + set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so" ".lib" ".LIB" ".dll" ".DLL" ".dll.a")
|
---|
| 271 | + endif()
|
---|
| 272 | + endif()
|
---|
| 273 | +else()
|
---|
| 274 | + set(GMSH_OS "${CMAKE_SYSTEM_NAME}")
|
---|
| 275 | +endif()
|
---|
| 276 | +
|
---|
| 277 | +include(CheckTypeSize)
|
---|
| 278 | +include(CheckFunctionExists)
|
---|
| 279 | +include(CheckIncludeFile)
|
---|
| 280 | +include(CheckCXXCompilerFlag)
|
---|
| 281 | +include(CheckCCompilerFlag)
|
---|
| 282 | +
|
---|
| 283 | +macro(set_config_option VARNAME STRING)
|
---|
| 284 | + set(${VARNAME} TRUE)
|
---|
| 285 | + list(APPEND CONFIG_OPTIONS ${STRING})
|
---|
| 286 | + message(STATUS "Found " ${STRING})
|
---|
| 287 | +endmacro()
|
---|
| 288 | +
|
---|
| 289 | +# check the size of size_t
|
---|
| 290 | +check_type_size("size_t" SIZEOF_SIZE_T)
|
---|
| 291 | +if(SIZEOF_SIZE_T EQUAL 8)
|
---|
| 292 | + set_config_option(HAVE_64BIT_SIZE_T "64Bit")
|
---|
| 293 | +endif()
|
---|
| 294 | +
|
---|
| 295 | +# append 32/64 to the build name on Linux and Windows
|
---|
| 296 | +if(NOT APPLE)
|
---|
| 297 | + if(HAVE_64BIT_SIZE_T)
|
---|
| 298 | + set(GMSH_OS "${GMSH_OS}64")
|
---|
| 299 | + else()
|
---|
| 300 | + set(GMSH_OS "${GMSH_OS}32")
|
---|
| 301 | + endif()
|
---|
| 302 | +endif()
|
---|
| 303 | +
|
---|
| 304 | +if(ENABLE_BUILD_DYNAMIC)
|
---|
| 305 | + set(GMSH_OS "${GMSH_OS}-sdk")
|
---|
| 306 | +endif()
|
---|
| 307 | +
|
---|
| 308 | +if(ENABLE_RPATH)
|
---|
| 309 | + set(CMAKE_MACOSX_RPATH 1)
|
---|
| 310 | +
|
---|
| 311 | + # make sure that dynamic libraries can be found when installing/ displacing
|
---|
| 312 | + # the binaries: from https://gitlab.kitware.com/cmake/community/wikis/doc/
|
---|
| 313 | + # cmake/RPATH-handling:
|
---|
| 314 | +
|
---|
| 315 | + # use, i.e. don't skip the full RPATH for the build tree
|
---|
| 316 | + set(CMAKE_SKIP_BUILD_RPATH FALSE)
|
---|
| 317 | +
|
---|
| 318 | + # when building, don't use the install RPATH already (but later on when
|
---|
| 319 | + # installing)
|
---|
| 320 | + set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
|
---|
| 321 | + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
|
---|
| 322 | +
|
---|
| 323 | + # add the automatically determined parts of the RPATH which point to
|
---|
| 324 | + # directories outside the build tree to the install RPATH
|
---|
| 325 | + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
---|
| 326 | +
|
---|
| 327 | + # the RPATH to be used when installing, but only if it's not a system directory
|
---|
| 328 | + list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib"
|
---|
| 329 | + isSystemDir)
|
---|
| 330 | + if("${isSystemDir}" STREQUAL "-1")
|
---|
| 331 | + if(APPLE)
|
---|
| 332 | + set(CMAKE_INSTALL_RPATH "@executable_path/../lib")
|
---|
| 333 | + else()
|
---|
| 334 | + set(CMAKE_INSTALL_RPATH "\\\$ORIGIN/../lib")
|
---|
| 335 | + endif()
|
---|
| 336 | + endif()
|
---|
| 337 | +else()
|
---|
| 338 | + set(CMAKE_MACOSX_RPATH 0)
|
---|
| 339 | + set(CMAKE_SKIP_BUILD_RPATH TRUE)
|
---|
| 340 | +endif()
|
---|
| 341 | +
|
---|
| 342 | +if(MSVC)
|
---|
| 343 | + # remove annoying warning about bool/int cast performance
|
---|
| 344 | + set(GMSH_CONFIG_PRAGMAS "#pragma warning(disable:4800 4244 4267)")
|
---|
| 345 | + foreach(VAR
|
---|
| 346 | + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
|
---|
| 347 | + CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
---|
| 348 | + CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
---|
| 349 | + CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
|
---|
| 350 | + if(ENABLE_MSVC_STATIC_RUNTIME AND ${VAR} MATCHES "/MD")
|
---|
| 351 | + string(REGEX REPLACE "/MD" "/MT" ${VAR} "${${VAR}}")
|
---|
| 352 | + endif()
|
---|
| 353 | + if(NOT ${VAR} MATCHES "/MP") # enable parallel compilation
|
---|
| 354 | + set(${VAR} "${${VAR}} /MP")
|
---|
| 355 | + endif()
|
---|
| 356 | + endforeach()
|
---|
| 357 | + if(ENABLE_PRIVATE_API)
|
---|
| 358 | + if(ENABLE_BUILD_DYNAMIC OR ENABLE_BUILD_SHARED)
|
---|
| 359 | + # automatically export .def file with all symbols (requires CMake 3.4);
|
---|
| 360 | + # depending on the compiling options this might lead to more than 64k export
|
---|
| 361 | + # symbols; just trim the .def file to keep the ones you need
|
---|
| 362 | + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
|
---|
| 363 | + endif()
|
---|
| 364 | + endif()
|
---|
| 365 | +endif()
|
---|
| 366 | +
|
---|
| 367 | +# reduce memory usage of GCC on 32 bit systems
|
---|
| 368 | +if(NOT HAVE_64BIT_SIZE_T AND CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
---|
| 369 | + set(CMAKE_CXX_FLAGS
|
---|
| 370 | + "${CMAKE_CXX_FLAGS} --param ggc-min-expand=1 --param ggc-min-heapsize=512000")
|
---|
| 371 | +endif()
|
---|
| 372 | +
|
---|
| 373 | +if(ENABLE_OPENMP)
|
---|
| 374 | + find_package(OpenMP)
|
---|
| 375 | + if(OpenMP_FOUND OR OPENMP_FOUND)
|
---|
| 376 | + set_config_option(HAVE_OPENMP "OpenMP")
|
---|
| 377 | + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
|
---|
| 378 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
|
---|
| 379 | + elseif(APPLE AND EXISTS "/opt/local/lib/libomp")
|
---|
| 380 | + # official Apple compiler with macports' libomp
|
---|
| 381 | + set_config_option(HAVE_OPENMP "OpenMP[MacPorts]")
|
---|
| 382 | + set(CMAKE_C_FLAGS
|
---|
| 383 | + "${CMAKE_C_FLAGS} -Xpreprocessor -fopenmp -I/opt/local/include/libomp")
|
---|
| 384 | + set(CMAKE_CXX_FLAGS
|
---|
| 385 | + "${CMAKE_CXX_FLAGS} -Xpreprocessor -fopenmp -I/opt/local/include/libomp")
|
---|
| 386 | + list(APPEND EXTERNAL_LIBRARIES "-L/opt/local/lib/libomp -lomp")
|
---|
| 387 | + elseif(APPLE AND EXISTS "/usr/local/lib/libomp.dylib")
|
---|
| 388 | + # official Apple compiler with homebrew's libomp
|
---|
| 389 | + set_config_option(HAVE_OPENMP "OpenMP[Homebrew]")
|
---|
| 390 | + set(CMAKE_C_FLAGS
|
---|
| 391 | + "${CMAKE_C_FLAGS} -Xpreprocessor -fopenmp")
|
---|
| 392 | + set(CMAKE_CXX_FLAGS
|
---|
| 393 | + "${CMAKE_CXX_FLAGS} -Xpreprocessor -fopenmp")
|
---|
| 394 | + list(APPEND EXTERNAL_LIBRARIES "-L/usr/local/lib -lomp")
|
---|
| 395 | + endif()
|
---|
| 396 | +endif()
|
---|
| 397 | +
|
---|
| 398 | +if(ENABLE_OPENACC)
|
---|
| 399 | + find_package(OpenACC)
|
---|
| 400 | + if(OpenACC_C_FOUND AND OpenACC_CXX_FOUND)
|
---|
| 401 | + set_config_option(HAVE_OPENACC "OpenACC")
|
---|
| 402 | + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenACC_C_FLAGS}")
|
---|
| 403 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenACC_CXX_FLAGS}")
|
---|
| 404 | + endif()
|
---|
| 405 | +endif()
|
---|
| 406 | +
|
---|
| 407 | +if(ENABLE_PROFILE)
|
---|
| 408 | + # Using the perf set of profiling tools doesn't work without the frame
|
---|
| 409 | + # pointer and a common optimisation is to remove it
|
---|
| 410 | + check_cxx_compiler_flag("-fno-omit-frame-pointer" FNOFP)
|
---|
| 411 | + if(FNOFP)
|
---|
| 412 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer")
|
---|
| 413 | + endif()
|
---|
| 414 | +endif()
|
---|
| 415 | +
|
---|
| 416 | +macro(append_gmsh_src DIRNAME FILES)
|
---|
| 417 | + foreach(FILE ${FILES})
|
---|
| 418 | + list(APPEND LIST ${DIRNAME}/${FILE})
|
---|
| 419 | + endforeach()
|
---|
| 420 | + set(GMSH_SRC ${GMSH_SRC};${LIST} PARENT_SCOPE)
|
---|
| 421 | + set(GMSH_DIRS ${GMSH_DIRS};${DIRNAME} PARENT_SCOPE)
|
---|
| 422 | +endmacro()
|
---|
| 423 | +
|
---|
| 424 | +macro(find_all_libraries VARNAME LISTNAME PATH SUFFIX)
|
---|
| 425 | + set(${VARNAME})
|
---|
| 426 | + list(LENGTH ${LISTNAME} NUM_LIST)
|
---|
| 427 | + foreach(LIB ${${LISTNAME}})
|
---|
| 428 | + if("${PATH}" STREQUAL "")
|
---|
| 429 | + find_library(FOUND_LIB ${LIB} PATH_SUFFIXES ${SUFFIX})
|
---|
| 430 | + else()
|
---|
| 431 | + find_library(FOUND_LIB ${LIB} PATHS ${PATH} NO_DEFAULT_PATH)
|
---|
| 432 | + endif()
|
---|
| 433 | + if(FOUND_LIB)
|
---|
| 434 | + list(APPEND ${VARNAME} ${FOUND_LIB})
|
---|
| 435 | + endif()
|
---|
| 436 | + unset(FOUND_LIB CACHE)
|
---|
| 437 | + endforeach()
|
---|
| 438 | + list(LENGTH ${VARNAME} NUM_FOUND_LIBRARIES)
|
---|
| 439 | + if(NUM_FOUND_LIBRARIES LESS NUM_LIST)
|
---|
| 440 | + set(${VARNAME})
|
---|
| 441 | + endif()
|
---|
| 442 | +endmacro()
|
---|
| 443 | +
|
---|
| 444 | +macro(set_compile_flags LISTNAME FLAGS)
|
---|
| 445 | + foreach(FILE ${${LISTNAME}})
|
---|
| 446 | + get_source_file_property(PROP ${FILE} COMPILE_FLAGS)
|
---|
| 447 | + if(PROP)
|
---|
| 448 | + set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS "${PROP} ${FLAGS}")
|
---|
| 449 | + else()
|
---|
| 450 | + set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS "${FLAGS}")
|
---|
| 451 | + endif()
|
---|
| 452 | + endforeach()
|
---|
| 453 | +endmacro()
|
---|
| 454 | +
|
---|
| 455 | +if(ENABLE_EIGEN)
|
---|
| 456 | + if(ENABLE_SYSTEM_CONTRIB)
|
---|
| 457 | + find_path(EIGEN_INC "Eigen/Dense" HINTS eigen3)
|
---|
| 458 | + if(EIGEN_INC)
|
---|
| 459 | + include_directories(${EIGEN_INC})
|
---|
| 460 | + set_config_option(HAVE_EIGEN "Eigen[system]")
|
---|
| 461 | + endif()
|
---|
| 462 | + endif()
|
---|
| 463 | + if(NOT HAVE_EIGEN)
|
---|
| 464 | + include_directories(contrib/eigen)
|
---|
| 465 | + set_config_option(HAVE_EIGEN "Eigen")
|
---|
| 466 | + endif()
|
---|
| 467 | + # We could also add an option to use BLAS with Eigen
|
---|
| 468 | + # add_definitions(-DEIGEN_USE_BLAS)
|
---|
| 469 | +elseif(ENABLE_BLAS_LAPACK)
|
---|
| 470 | + if(BLAS_LAPACK_LIBRARIES)
|
---|
| 471 | + # use libs as specified in the BLAS_LAPACK_LIBRARIES variable
|
---|
| 472 | + set_config_option(HAVE_BLAS "Blas[custom]")
|
---|
| 473 | + set_config_option(HAVE_LAPACK "Lapack[custom]")
|
---|
| 474 | + set(LAPACK_LIBRARIES ${BLAS_LAPACK_LIBRARIES})
|
---|
| 475 | + else()
|
---|
| 476 | + if(MSVC)
|
---|
| 477 | + # on Windows with Visual C++ try really hard to find blas/lapack *without*
|
---|
| 478 | + # requiring a Fortran compiler: 1) try to find the Intel MKL libs using
|
---|
| 479 | + # the standard search path; if not found 2) try to get the reference
|
---|
| 480 | + # blas/lapack libs (useful for users with no Fortran compiler and no MKL
|
---|
| 481 | + # license, who can just download our precompiled "gmsh-dep" package)
|
---|
| 482 | + if(HAVE_64BIT_SIZE_T)
|
---|
| 483 | + set(MKL_PATH em64t/lib)
|
---|
| 484 | + set(MKL_LIBS_REQUIRED libguide40 mkl_intel_lp64 mkl_intel_thread mkl_core)
|
---|
| 485 | + else()
|
---|
| 486 | + set(MKL_PATH ia32/lib)
|
---|
| 487 | + set(MKL_LIBS_REQUIRED libguide40 mkl_intel_c mkl_intel_thread mkl_core)
|
---|
| 488 | + endif()
|
---|
| 489 | + find_all_libraries(LAPACK_LIBRARIES MKL_LIBS_REQUIRED "" ${MKL_PATH})
|
---|
| 490 | + if(LAPACK_LIBRARIES)
|
---|
| 491 | + set_config_option(HAVE_BLAS "Blas[mkl]")
|
---|
| 492 | + set_config_option(HAVE_LAPACK "Lapack[mkl]")
|
---|
| 493 | + else()
|
---|
| 494 | + set(REFLAPACK_LIBS_REQUIRED lapack blas g2c gcc)
|
---|
| 495 | + find_all_libraries(LAPACK_LIBRARIES REFLAPACK_LIBS_REQUIRED "" "")
|
---|
| 496 | + if(LAPACK_LIBRARIES)
|
---|
| 497 | + set_config_option(HAVE_BLAS "Blas[ref]")
|
---|
| 498 | + set_config_option(HAVE_LAPACK "Lapack[ref]")
|
---|
| 499 | + endif()
|
---|
| 500 | + endif()
|
---|
| 501 | + elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
---|
| 502 | + # on Linux try to find the Intel MKL without a Fortran compiler
|
---|
| 503 | + if(HAVE_64BIT_SIZE_T)
|
---|
| 504 | + set(MKL_PATH lib/em64t)
|
---|
| 505 | + else()
|
---|
| 506 | + set(MKL_PATH lib/32)
|
---|
| 507 | + endif()
|
---|
| 508 | + set(MKL_LIBS_REQUIRED mkl_gf_lp64 iomp5 mkl_gnu_thread mkl_core guide pthread)
|
---|
| 509 | + find_all_libraries(LAPACK_LIBRARIES MKL_LIBS_REQUIRED "" ${MKL_PATH})
|
---|
| 510 | + if(NOT LAPACK_LIBRARIES)
|
---|
| 511 | + # match lapack 9.0 on 64bit
|
---|
| 512 | + set(MKL_LIBS_REQUIRED mkl_lapack mkl_em64t guide)
|
---|
| 513 | + find_all_libraries(LAPACK_LIBRARIES MKL_LIBS_REQUIRED "" ${MKL_PATH})
|
---|
| 514 | + endif()
|
---|
| 515 | + if(LAPACK_LIBRARIES)
|
---|
| 516 | + set_config_option(HAVE_BLAS "Blas[mkl]")
|
---|
| 517 | + set_config_option(HAVE_LAPACK "Lapack[mkl]")
|
---|
| 518 | + else()
|
---|
| 519 | + # on Linux also try to find ATLAS without a Fortran compiler, because
|
---|
| 520 | + # cmake ships with a buggy FindBLAS e.g. on Ubuntu Lucid Lynx
|
---|
| 521 | + set(ATLAS_LIBS_REQUIRED lapack f77blas cblas atlas)
|
---|
| 522 | + find_all_libraries(LAPACK_LIBRARIES ATLAS_LIBS_REQUIRED "" "")
|
---|
| 523 | + if(LAPACK_LIBRARIES)
|
---|
| 524 | + set_config_option(HAVE_BLAS "Blas[atlas]")
|
---|
| 525 | + set_config_option(HAVE_LAPACK "Lapack[atlas]")
|
---|
| 526 | + else()
|
---|
| 527 | + # try with generic names
|
---|
| 528 | + set(GENERIC_LIBS_REQUIRED lapack blas pthread)
|
---|
| 529 | + find_all_libraries(LAPACK_LIBRARIES GENERIC_LIBS_REQUIRED "" "")
|
---|
| 530 | + if(LAPACK_LIBRARIES)
|
---|
| 531 | + set_config_option(HAVE_BLAS "Blas[generic]")
|
---|
| 532 | + set_config_option(HAVE_LAPACK "Lapack[generic]")
|
---|
| 533 | + find_library(GFORTRAN_LIB gfortran)
|
---|
| 534 | + if(GFORTRAN_LIB)
|
---|
| 535 | + list(APPEND LAPACK_LIBRARIES ${GFORTRAN_LIB})
|
---|
| 536 | + endif()
|
---|
| 537 | + endif()
|
---|
| 538 | + endif()
|
---|
| 539 | + endif()
|
---|
| 540 | + elseif(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
|
---|
| 541 | + # on SunOS we know blas and lapack are available in sunperf
|
---|
| 542 | + set(LAPACK_LIBRARIES -library=sunperf)
|
---|
| 543 | + set_config_option(HAVE_BLAS "Blas[sunperf]")
|
---|
| 544 | + set_config_option(HAVE_LAPACK "Lapack[sunperf]")
|
---|
| 545 | + elseif(APPLE)
|
---|
| 546 | + # on Mac we also know that blas and lapack are available
|
---|
| 547 | + set(LAPACK_LIBRARIES "-llapack -lblas")
|
---|
| 548 | + set_config_option(HAVE_BLAS "Blas[veclib]")
|
---|
| 549 | + set_config_option(HAVE_LAPACK "Lapack[veclib]")
|
---|
| 550 | + endif()
|
---|
| 551 | +
|
---|
| 552 | + if(NOT HAVE_BLAS OR NOT HAVE_LAPACK)
|
---|
| 553 | + # if we haven't found blas and lapack check for OpenBlas
|
---|
| 554 | + set(OPENBLAS_LIBS_REQUIRED openblas)
|
---|
| 555 | + find_all_libraries(LAPACK_LIBRARIES OPENBLAS_LIBS_REQUIRED "" "")
|
---|
| 556 | + if(LAPACK_LIBRARIES)
|
---|
| 557 | + set_config_option(HAVE_BLAS "Blas[openblas]")
|
---|
| 558 | + set_config_option(HAVE_LAPACK "Lapack[openblas]")
|
---|
| 559 | + find_library(GFORTRAN_LIB gfortran)
|
---|
| 560 | + if(GFORTRAN_LIB)
|
---|
| 561 | + list(APPEND LAPACK_LIBRARIES ${GFORTRAN_LIB})
|
---|
| 562 | + endif()
|
---|
| 563 | + endif()
|
---|
| 564 | + endif()
|
---|
| 565 | +
|
---|
| 566 | + if(NOT HAVE_BLAS OR NOT HAVE_LAPACK)
|
---|
| 567 | + # if we still haven't found blas and lapack, use the standard cmake tests,
|
---|
| 568 | + # which require a working Fortran compiler
|
---|
| 569 | + enable_language(Fortran)
|
---|
| 570 | + find_package(BLAS)
|
---|
| 571 | + if(BLAS_FOUND)
|
---|
| 572 | + set_config_option(HAVE_BLAS "Blas")
|
---|
| 573 | + find_package(LAPACK)
|
---|
| 574 | + if(LAPACK_FOUND)
|
---|
| 575 | + set_config_option(HAVE_LAPACK "Lapack")
|
---|
| 576 | + else()
|
---|
| 577 | + set(LAPACK_LIBRARIES ${BLAS_LIBRARIES})
|
---|
| 578 | + endif()
|
---|
| 579 | + if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
|
---|
| 580 | + if(CMAKE_Fortran_COMPILER MATCHES "gfortran")
|
---|
| 581 | + list(APPEND LAPACK_LIBRARIES gfortran)
|
---|
| 582 | + elseif(CMAKE_Fortran_COMPILER MATCHES "f95")
|
---|
| 583 | + list(APPEND LAPACK_LIBRARIES gfortran)
|
---|
| 584 | + elseif(CMAKE_Fortran_COMPILER MATCHES "g77")
|
---|
| 585 | + list(APPEND LAPACK_LIBRARIES g2c)
|
---|
| 586 | + endif()
|
---|
| 587 | + elseif(CMAKE_Fortran_COMPILER MATCHES "pgi")
|
---|
| 588 | + list(APPEND LAPACK_LIBRARIES -pgf77libs)
|
---|
| 589 | + endif()
|
---|
| 590 | + endif()
|
---|
| 591 | + endif()
|
---|
| 592 | + endif()
|
---|
| 593 | +endif()
|
---|
| 594 | +
|
---|
| 595 | +if(ENABLE_TCMALLOC)
|
---|
| 596 | + find_library(TCMALLOC tcmalloc)
|
---|
| 597 | + if(TCMALLOC)
|
---|
| 598 | + set_config_option(HAVE_TCMALLOC "TCMalloc")
|
---|
| 599 | + list(APPEND EXTERNAL_LIBRARIES ${TCMALLOC})
|
---|
| 600 | + endif()
|
---|
| 601 | +endif()
|
---|
| 602 | +
|
---|
| 603 | +add_subdirectory(Common)
|
---|
| 604 | +add_subdirectory(Numeric)
|
---|
| 605 | +add_subdirectory(Geo)
|
---|
| 606 | +
|
---|
| 607 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Mesh AND ENABLE_MESH)
|
---|
| 608 | + add_subdirectory(Mesh)
|
---|
| 609 | + set_config_option(HAVE_MESH "Mesh")
|
---|
| 610 | +endif()
|
---|
| 611 | +
|
---|
| 612 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Solver AND ENABLE_SOLVER)
|
---|
| 613 | + add_subdirectory(Solver)
|
---|
| 614 | + set_config_option(HAVE_SOLVER "Solver")
|
---|
| 615 | +endif()
|
---|
| 616 | +
|
---|
| 617 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Post AND ENABLE_POST)
|
---|
| 618 | + add_subdirectory(Post)
|
---|
| 619 | + set_config_option(HAVE_POST "Post")
|
---|
| 620 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Plugin AND ENABLE_PLUGINS)
|
---|
| 621 | + add_subdirectory(Plugin)
|
---|
| 622 | + set_config_option(HAVE_PLUGINS "Plugins")
|
---|
| 623 | + endif()
|
---|
| 624 | +endif()
|
---|
| 625 | +
|
---|
| 626 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Parser AND ENABLE_PARSER)
|
---|
| 627 | + add_subdirectory(Parser)
|
---|
| 628 | + set_config_option(HAVE_PARSER "Parser")
|
---|
| 629 | +endif()
|
---|
| 630 | +
|
---|
| 631 | +if(ENABLE_VISUDEV)
|
---|
| 632 | + set_config_option(HAVE_VISUDEV "VisuDev")
|
---|
| 633 | +endif()
|
---|
| 634 | +
|
---|
| 635 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Fltk AND ENABLE_FLTK)
|
---|
| 636 | + # first, try to use fltk-config for fltk >= 1.3 (FindFLTK is buggy on Unix,
|
---|
| 637 | + # where e.g. xft and xinerama options are not dealt with)
|
---|
| 638 | + find_program(FLTK_CONFIG_SCRIPT fltk-config)
|
---|
| 639 | + if(FLTK_CONFIG_SCRIPT)
|
---|
| 640 | + execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --api-version
|
---|
| 641 | + OUTPUT_VARIABLE FLTK_VERSION)
|
---|
| 642 | + string(STRIP "${FLTK_VERSION}" FLTK_VERSION)
|
---|
| 643 | + if(FLTK_VERSION VERSION_GREATER 1.1)
|
---|
| 644 | + add_subdirectory(Fltk)
|
---|
| 645 | + set_config_option(HAVE_FLTK "Fltk")
|
---|
| 646 | + message(STATUS "Using fltk-config script for Fltk " ${FLTK_VERSION})
|
---|
| 647 | + execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --use-gl --use-images --includedir
|
---|
| 648 | + OUTPUT_VARIABLE FLTK_INCLUDE_DIR)
|
---|
| 649 | + string(STRIP ${FLTK_INCLUDE_DIR} FLTK_INCLUDE_DIR)
|
---|
| 650 | + list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR})
|
---|
| 651 | + # On linux (at least OpenSuSE) the following directories are
|
---|
| 652 | + # not existing (everything is in /usr/include). To avoid warnings
|
---|
| 653 | + # check existance of these directories before adding them
|
---|
| 654 | + if(EXISTS ${FLTK_INCLUDE_DIR}/FL/images)
|
---|
| 655 | + list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}/FL/images)
|
---|
| 656 | + endif()
|
---|
| 657 | + if(EXISTS ${FLTK_INCLUDE_DIR}/jpeg)
|
---|
| 658 | + list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}/jpeg)
|
---|
| 659 | + endif()
|
---|
| 660 | + if(EXISTS ${FLTK_INCLUDE_DIR}/zlib)
|
---|
| 661 | + list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}/zlib)
|
---|
| 662 | + endif()
|
---|
| 663 | + if(EXISTS ${FLTK_INCLUDE_DIR}/png)
|
---|
| 664 | + list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}/png)
|
---|
| 665 | + endif()
|
---|
| 666 | + execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --use-gl --use-images --ldflags
|
---|
| 667 | + OUTPUT_VARIABLE FLTK_LIBRARIES)
|
---|
| 668 | + string(STRIP ${FLTK_LIBRARIES} FLTK_LIBRARIES)
|
---|
| 669 | + string(REGEX MATCH "fltk[_ ]jpeg" FLTK_JPEG ${FLTK_LIBRARIES})
|
---|
| 670 | + string(REGEX MATCH "fltk[_ ]z" FLTK_Z ${FLTK_LIBRARIES})
|
---|
| 671 | + string(REGEX MATCH "fltk[_ ]png" FLTK_PNG ${FLTK_LIBRARIES})
|
---|
| 672 | + endif()
|
---|
| 673 | + endif()
|
---|
| 674 | + # then try the built-in FindFLTK module
|
---|
| 675 | + if(NOT HAVE_FLTK)
|
---|
| 676 | + set(FLTK_SKIP_FORMS TRUE)
|
---|
| 677 | + set(FLTK_SKIP_FLUID TRUE)
|
---|
| 678 | + find_package(FLTK)
|
---|
| 679 | + if(FLTK_FOUND)
|
---|
| 680 | + add_subdirectory(Fltk)
|
---|
| 681 | + set_config_option(HAVE_FLTK "Fltk")
|
---|
| 682 | + list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR})
|
---|
| 683 | + # find fltk jpeg
|
---|
| 684 | + find_library(FLTK_JPEG NAMES fltk_jpeg fltkjpeg)
|
---|
| 685 | + if(FLTK_JPEG)
|
---|
| 686 | + list(APPEND EXTERNAL_LIBRARIES ${FLTK_JPEG})
|
---|
| 687 | + foreach(DIR ${FLTK_INCLUDE_DIR})
|
---|
| 688 | + list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/jpeg)
|
---|
| 689 | + endforeach()
|
---|
| 690 | + endif()
|
---|
| 691 | + # find fltk zlib
|
---|
| 692 | + find_library(FLTK_Z NAMES fltk_z fltkz)
|
---|
| 693 | + if(FLTK_Z)
|
---|
| 694 | + list(APPEND EXTERNAL_LIBRARIES ${FLTK_Z})
|
---|
| 695 | + foreach(DIR ${FLTK_INCLUDE_DIR})
|
---|
| 696 | + list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/zlib)
|
---|
| 697 | + endforeach()
|
---|
| 698 | + endif()
|
---|
| 699 | + # find fltk png
|
---|
| 700 | + find_library(FLTK_PNG NAMES fltk_png fltkpng)
|
---|
| 701 | + if(FLTK_PNG)
|
---|
| 702 | + list(APPEND EXTERNAL_LIBRARIES ${FLTK_PNG})
|
---|
| 703 | + foreach(DIR ${FLTK_INCLUDE_DIR})
|
---|
| 704 | + list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/png)
|
---|
| 705 | + endforeach()
|
---|
| 706 | + endif()
|
---|
| 707 | + endif()
|
---|
| 708 | + endif()
|
---|
| 709 | + # workaround for Fedora/Suse messing up fltk-config (see issue #417)
|
---|
| 710 | + if(HAVE_FLTK AND ${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
---|
| 711 | + string(REGEX MATCH "X11" FLTK_X11 ${FLTK_LIBRARIES})
|
---|
| 712 | + if(NOT FLTK_X11)
|
---|
| 713 | + find_package(X11)
|
---|
| 714 | + if(X11_FOUND)
|
---|
| 715 | + list(APPEND EXTERNAL_INCLUDES ${X11_INCLUDE_DIR})
|
---|
| 716 | + list(APPEND EXTERNAL_LIBRARIES ${X11_LIBRARIES})
|
---|
| 717 | + endif()
|
---|
| 718 | + endif()
|
---|
| 719 | + endif()
|
---|
| 720 | +endif()
|
---|
| 721 | +
|
---|
| 722 | +if(APPLE AND HAVE_FLTK AND ENABLE_TOUCHBAR)
|
---|
| 723 | + STRING(REGEX MATCH "([0-9]+.[0-9]+)" OSX_SDK_VERSION "${CMAKE_OSX_SYSROOT}")
|
---|
| 724 | + if(OSX_SDK_VERSION)
|
---|
| 725 | + if(${OSX_SDK_VERSION} VERSION_GREATER 10.11)
|
---|
| 726 | + set(GMSH_SRC ${GMSH_SRC};Fltk/touchBar.mm)
|
---|
| 727 | + set_config_option(HAVE_TOUCHBAR "TouchBar")
|
---|
| 728 | + endif()
|
---|
| 729 | + endif()
|
---|
| 730 | +endif()
|
---|
| 731 | +
|
---|
| 732 | +if(ENABLE_ONELAB)
|
---|
| 733 | + set_config_option(HAVE_ONELAB "ONELAB")
|
---|
| 734 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/onelab)
|
---|
| 735 | + if(ENABLE_ONELAB_METAMODEL)
|
---|
| 736 | + add_subdirectory(contrib/onelab)
|
---|
| 737 | + include_directories(contrib/onelab)
|
---|
| 738 | + set_config_option(HAVE_ONELAB_METAMODEL "ONELABMetamodel")
|
---|
| 739 | + endif()
|
---|
| 740 | + file(COPY ${ONELAB_PY} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
---|
| 741 | + endif()
|
---|
| 742 | +endif()
|
---|
| 743 | +
|
---|
| 744 | +if(ENABLE_BUILD_IOS)
|
---|
| 745 | + find_file(CMAKE_TOOLCHAIN_FILE "ios.cmake")
|
---|
| 746 | + if(NOT CMAKE_TOOLCHAIN_FILE)
|
---|
| 747 | + message(FATAL_ERROR "Cannot compile Gmsh for iOS without a toolchain")
|
---|
| 748 | + endif()
|
---|
| 749 | + add_definitions(-DBUILD_IOS)
|
---|
| 750 | +endif()
|
---|
| 751 | +
|
---|
| 752 | +if(HAVE_FLTK OR ENABLE_GRAPHICS)
|
---|
| 753 | + if(NOT HAVE_MESH OR NOT HAVE_POST OR NOT HAVE_PLUGINS OR NOT HAVE_ONELAB)
|
---|
| 754 | + message(SEND_ERROR "Cannot compile GUI without Mesh, Post, Plugin and ONELAB")
|
---|
| 755 | + endif()
|
---|
| 756 | +
|
---|
| 757 | + if(FLTK_JPEG)
|
---|
| 758 | + set_config_option(HAVE_LIBJPEG "Jpeg[fltk]")
|
---|
| 759 | + else()
|
---|
| 760 | + find_package(JPEG)
|
---|
| 761 | + if(JPEG_FOUND)
|
---|
| 762 | + set_config_option(HAVE_LIBJPEG "Jpeg")
|
---|
| 763 | + list(APPEND EXTERNAL_LIBRARIES ${JPEG_LIBRARIES})
|
---|
| 764 | + list(APPEND EXTERNAL_INCLUDES ${JPEG_INCLUDE_DIR})
|
---|
| 765 | + endif()
|
---|
| 766 | + endif()
|
---|
| 767 | +
|
---|
| 768 | + if(FLTK_Z)
|
---|
| 769 | + set_config_option(HAVE_LIBZ "Zlib[fltk]")
|
---|
| 770 | + else()
|
---|
| 771 | + find_package(ZLIB)
|
---|
| 772 | + if(ZLIB_FOUND)
|
---|
| 773 | + set_config_option(HAVE_LIBZ "Zlib")
|
---|
| 774 | + list(APPEND EXTERNAL_LIBRARIES ${ZLIB_LIBRARIES})
|
---|
| 775 | + list(APPEND EXTERNAL_INCLUDES ${ZLIB_INCLUDE_DIR})
|
---|
| 776 | + endif()
|
---|
| 777 | + endif()
|
---|
| 778 | +
|
---|
| 779 | + if(HAVE_LIBZ)
|
---|
| 780 | + if(FLTK_PNG)
|
---|
| 781 | + set_config_option(HAVE_LIBPNG "Png[fltk]")
|
---|
| 782 | + else()
|
---|
| 783 | + find_package(PNG)
|
---|
| 784 | + if(PNG_FOUND)
|
---|
| 785 | + set_config_option(HAVE_LIBPNG "Png")
|
---|
| 786 | + list(APPEND EXTERNAL_LIBRARIES ${PNG_LIBRARIES})
|
---|
| 787 | + list(APPEND EXTERNAL_INCLUDES ${PNG_INCLUDE_DIR})
|
---|
| 788 | + endif()
|
---|
| 789 | + endif()
|
---|
| 790 | + endif()
|
---|
| 791 | +
|
---|
| 792 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/mpeg_encode AND
|
---|
| 793 | + ENABLE_MPEG_ENCODE)
|
---|
| 794 | + add_subdirectory(contrib/mpeg_encode)
|
---|
| 795 | + include_directories(contrib/mpeg_encode/headers)
|
---|
| 796 | + set_config_option(HAVE_MPEG_ENCODE "Mpeg")
|
---|
| 797 | + endif()
|
---|
| 798 | +
|
---|
| 799 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/3M AND ENABLE_3M)
|
---|
| 800 | + add_subdirectory(contrib/3M)
|
---|
| 801 | + include_directories(contrib/3M)
|
---|
| 802 | + set_config_option(HAVE_3M "3M")
|
---|
| 803 | + endif()
|
---|
| 804 | +
|
---|
| 805 | + if(ENABLE_OSMESA)
|
---|
| 806 | + find_library(OSMESA_LIB OSMesa)
|
---|
| 807 | + if(OSMESA_LIB)
|
---|
| 808 | + set_config_option(HAVE_OSMESA "OSMesa")
|
---|
| 809 | + list(APPEND EXTERNAL_LIBRARIES ${OSMESA_LIB})
|
---|
| 810 | + endif()
|
---|
| 811 | + endif()
|
---|
| 812 | +
|
---|
| 813 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Graphics)
|
---|
| 814 | + set(OpenGL_GL_PREFERENCE "LEGACY")
|
---|
| 815 | + find_package(OpenGL REQUIRED)
|
---|
| 816 | + if(OPENGL_GLU_FOUND AND OPENGL_FOUND)
|
---|
| 817 | + add_subdirectory(Graphics)
|
---|
| 818 | + set_config_option(HAVE_OPENGL "OpenGL")
|
---|
| 819 | + else()
|
---|
| 820 | + message(SEND_ERROR "Could not find GLU: disabling OpenGL support")
|
---|
| 821 | + endif()
|
---|
| 822 | + endif()
|
---|
| 823 | +endif()
|
---|
| 824 | +
|
---|
| 825 | +if(ENABLE_ANN)
|
---|
| 826 | + find_library(ANN_LIB ANN PATH_SUFFIXES lib)
|
---|
| 827 | + find_path(ANN_INC "ANN.h" PATH_SUFFIXES src include ANN)
|
---|
| 828 | + if(ENABLE_SYSTEM_CONTRIB AND ANN_LIB AND ANN_INC)
|
---|
| 829 | + message(STATUS "Using system version of ANN")
|
---|
| 830 | + list(APPEND EXTERNAL_LIBRARIES ${ANN_LIB})
|
---|
| 831 | + list(APPEND EXTERNAL_INCLUDES ${ANN_INC})
|
---|
| 832 | + set_config_option(HAVE_ANN "ANN[system]")
|
---|
| 833 | + elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/ANN)
|
---|
| 834 | + add_subdirectory(contrib/ANN)
|
---|
| 835 | + include_directories(contrib/ANN/include)
|
---|
| 836 | + set_config_option(HAVE_ANN "ANN")
|
---|
| 837 | + endif()
|
---|
| 838 | +endif()
|
---|
| 839 | +
|
---|
| 840 | +if(ENABLE_ALGLIB)
|
---|
| 841 | + find_library(ALGLIB_LIB alglib)
|
---|
| 842 | + find_path(ALGLIB_INC "stdafx.h" PATH_SUFFIXES libalglib)
|
---|
| 843 | + if(ENABLE_SYSTEM_CONTRIB AND ALGLIB_LIB AND ALGLIB_INC)
|
---|
| 844 | + list(APPEND EXTERNAL_LIBRARIES ${ALGLIB_LIB})
|
---|
| 845 | + list(APPEND EXTERNAL_INCLUDES ${ALGLIB_INC})
|
---|
| 846 | + set_config_option(HAVE_ALGLIB "ALGLIB[system]")
|
---|
| 847 | + elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/ALGLIB)
|
---|
| 848 | + add_subdirectory(contrib/ALGLIB)
|
---|
| 849 | + include_directories(contrib/ALGLIB)
|
---|
| 850 | + set_config_option(HAVE_ALGLIB "ALGLIB")
|
---|
| 851 | + endif()
|
---|
| 852 | +endif()
|
---|
| 853 | +
|
---|
| 854 | +if(HAVE_FLTK AND ENABLE_CAIRO)
|
---|
| 855 | + find_library(CAIRO_LIB cairo)
|
---|
| 856 | + find_path(CAIRO_INC "cairo/cairo.h" PATH_SUFFIXES include)
|
---|
| 857 | + if(CAIRO_INC AND CAIRO_LIB)
|
---|
| 858 | + set_config_option(HAVE_CAIRO "Cairo")
|
---|
| 859 | + list(APPEND EXTERNAL_LIBRARIES ${CAIRO_LIB})
|
---|
| 860 | + list(APPEND EXTERNAL_INCLUDES ${CAIRO_INC})
|
---|
| 861 | + endif()
|
---|
| 862 | +endif()
|
---|
| 863 | +
|
---|
| 864 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/DiscreteIntegration AND
|
---|
| 865 | + ENABLE_DINTEGRATION)
|
---|
| 866 | + add_subdirectory(contrib/DiscreteIntegration)
|
---|
| 867 | + include_directories(contrib/DiscreteIntegration)
|
---|
| 868 | + set_config_option(HAVE_DINTEGRATION "DIntegration")
|
---|
| 869 | +endif()
|
---|
| 870 | +
|
---|
| 871 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/HighOrderMeshOptimizer AND
|
---|
| 872 | + EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/MeshOptimizer AND
|
---|
| 873 | + EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/MeshQualityOptimizer AND
|
---|
| 874 | + ENABLE_OPTHOM AND HAVE_MESH)
|
---|
| 875 | + add_subdirectory(contrib/HighOrderMeshOptimizer)
|
---|
| 876 | + include_directories(contrib/HighOrderMeshOptimizer)
|
---|
| 877 | + add_subdirectory(contrib/MeshOptimizer)
|
---|
| 878 | + include_directories(contrib/MeshOptimizer)
|
---|
| 879 | + include_directories(${CMAKE_CURRENT_BINARY_DIR}/contrib/MeshOptimizer)
|
---|
| 880 | + add_subdirectory(contrib/MeshQualityOptimizer)
|
---|
| 881 | + include_directories(contrib/MeshQualityOptimizer)
|
---|
| 882 | + set_config_option(HAVE_OPTHOM "OptHom")
|
---|
| 883 | +endif()
|
---|
| 884 | +
|
---|
| 885 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/domhex AND
|
---|
| 886 | + ENABLE_DOMHEX AND HAVE_MESH)
|
---|
| 887 | + add_subdirectory(contrib/domhex)
|
---|
| 888 | + include_directories(contrib/domhex)
|
---|
| 889 | + set_config_option(HAVE_DOMHEX "DomHex")
|
---|
| 890 | +endif()
|
---|
| 891 | +
|
---|
| 892 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/QuadTri AND
|
---|
| 893 | + ENABLE_QUADTRI AND HAVE_MESH)
|
---|
| 894 | + add_subdirectory(contrib/QuadTri)
|
---|
| 895 | + include_directories(contrib/QuadTri)
|
---|
| 896 | + set_config_option(HAVE_QUADTRI "QuadTri")
|
---|
| 897 | +endif()
|
---|
| 898 | +
|
---|
| 899 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/kbipack AND ENABLE_KBIPACK)
|
---|
| 900 | + set_config_option(HAVE_KBIPACK "Kbipack")
|
---|
| 901 | + add_subdirectory(contrib/kbipack)
|
---|
| 902 | + include_directories(contrib/kbipack)
|
---|
| 903 | + if(ENABLE_GMP)
|
---|
| 904 | + find_library(GMP_LIB libgmp.a)
|
---|
| 905 | + find_path(GMP_INC "gmp.h" PATH_SUFFIXES src include)
|
---|
| 906 | + endif()
|
---|
| 907 | + if(GMP_LIB AND GMP_INC)
|
---|
| 908 | + set_config_option(HAVE_GMP "GMP")
|
---|
| 909 | + list(APPEND EXTERNAL_LIBRARIES ${GMP_LIB})
|
---|
| 910 | + list(APPEND EXTERNAL_INCLUDES ${GMP_INC})
|
---|
| 911 | + else()
|
---|
| 912 | + message(STATUS "GMP not found: Kbipack uses long int")
|
---|
| 913 | + endif()
|
---|
| 914 | +endif()
|
---|
| 915 | +
|
---|
| 916 | +if(ENABLE_MATHEX)
|
---|
| 917 | + find_library(MATHEX_LIB mathex PATH_SUFFIXES lib)
|
---|
| 918 | + find_path(MATHEX_INC "mathex.h" PATH_SUFFIXES src include)
|
---|
| 919 | + if(ENABLE_SYSTEM_CONTRIB AND MATHEX_LIB AND MATHEX_INC)
|
---|
| 920 | + list(APPEND EXTERNAL_LIBRARIES ${MATHEX_LIB})
|
---|
| 921 | + list(APPEND EXTERNAL_INCLUDES ${MATHEX_INC})
|
---|
| 922 | + set_config_option(HAVE_MATHEX "MathEx[system]")
|
---|
| 923 | + elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/MathEx)
|
---|
| 924 | + add_subdirectory(contrib/MathEx)
|
---|
| 925 | + include_directories(contrib/MathEx)
|
---|
| 926 | + set_config_option(HAVE_MATHEX "MathEx")
|
---|
| 927 | + endif()
|
---|
| 928 | +endif()
|
---|
| 929 | +
|
---|
| 930 | +if(ENABLE_MPI)
|
---|
| 931 | + find_package(MPI)
|
---|
| 932 | + if(MPI_FOUND)
|
---|
| 933 | + set_config_option(HAVE_MPI "MPI")
|
---|
| 934 | + list(APPEND EXTERNAL_INCLUDES ${MPI_CXX_INCLUDE_PATH})
|
---|
| 935 | + list(APPEND EXTERNAL_LIBRARIES ${MPI_CXX_LIBRARIES})
|
---|
| 936 | + set(CMAKE_C_COMPILER ${MPI_C_COMPILER})
|
---|
| 937 | + set(CMAKE_CXX_COMPILER ${MPI_CXX_COMPILER})
|
---|
| 938 | + set(CMAKE_Fortran_COMPILER ${MPI_Fortran_COMPILER})
|
---|
| 939 | + endif()
|
---|
| 940 | +endif()
|
---|
| 941 | +
|
---|
| 942 | +if(ENABLE_POPPLER)
|
---|
| 943 | + find_library(POPPLER_LIB poppler)
|
---|
| 944 | + find_library(POPPLER_CPP_LIB poppler-cpp)
|
---|
| 945 | + find_path(POPPLER_INC "poppler/cpp/poppler-document.h" PATH_SUFFIXES src include)
|
---|
| 946 | + if(POPPLER_LIB AND POPPLER_INC)
|
---|
| 947 | + set_config_option(HAVE_POPPLER "Poppler")
|
---|
| 948 | + list(APPEND EXTERNAL_LIBRARIES ${POPPLER_LIB})
|
---|
| 949 | + list(APPEND EXTERNAL_LIBRARIES ${POPPLER_CPP_LIB})
|
---|
| 950 | + list(APPEND EXTERNAL_INCLUDES ${POPPLER_INC})
|
---|
| 951 | + endif()
|
---|
| 952 | +endif()
|
---|
| 953 | +
|
---|
| 954 | +if(ENABLE_P4EST)
|
---|
| 955 | + find_library(P4EST_LIB p4est)
|
---|
| 956 | + find_path(P4EST_INC "p4est.h" PATH_SUFFIXES src)
|
---|
| 957 | + find_library(SC_LIB sc)
|
---|
| 958 | + if(P4EST_LIB AND P4EST_INC AND SC_LIB)
|
---|
| 959 | + set_config_option(HAVE_P4EST "P4est")
|
---|
| 960 | + list(APPEND EXTERNAL_LIBRARIES ${P4EST_LIB} ${SC_LIB})
|
---|
| 961 | + list(APPEND EXTERNAL_INCLUDES ${P4EST_INC})
|
---|
| 962 | + endif()
|
---|
| 963 | +endif()
|
---|
| 964 | +
|
---|
| 965 | +if(HAVE_MESH OR HAVE_SOLVER)
|
---|
| 966 | + if(ENABLE_METIS)
|
---|
| 967 | + if(METIS_LIB AND METIS_INC)
|
---|
| 968 | + list(APPEND EXTERNAL_LIBRARIES ${METIS_LIB})
|
---|
| 969 | + list(APPEND EXTERNAL_INCLUDES ${METIS_INC})
|
---|
| 970 | + set_config_option(HAVE_METIS "Metis")
|
---|
| 971 | + else()
|
---|
| 972 | + find_library(METIS_LIB metis PATH_SUFFIXES lib)
|
---|
| 973 | + find_path(METIS_INC "metis.h" PATH_SUFFIXES include)
|
---|
| 974 | + if(ENABLE_SYSTEM_CONTRIB AND METIS_LIB AND METIS_INC)
|
---|
| 975 | + message(STATUS "Using system version of METIS")
|
---|
| 976 | + list(APPEND EXTERNAL_LIBRARIES ${METIS_LIB})
|
---|
| 977 | + list(APPEND EXTERNAL_INCLUDES ${METIS_INC})
|
---|
| 978 | + set_config_option(HAVE_METIS "Metis[system]")
|
---|
| 979 | + elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/metis)
|
---|
| 980 | + add_definitions(-DUSE_GKREGEX)
|
---|
| 981 | + add_subdirectory(contrib/metis)
|
---|
| 982 | + include_directories(contrib/metis/include contrib/metis/libmetis
|
---|
| 983 | + contrib/metis/GKlib)
|
---|
| 984 | + set_config_option(HAVE_METIS "Metis")
|
---|
| 985 | + endif()
|
---|
| 986 | + endif()
|
---|
| 987 | + endif()
|
---|
| 988 | +endif()
|
---|
| 989 | +
|
---|
| 990 | +if(HAVE_MESH)
|
---|
| 991 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Mesh/tetgenBR.cxx)
|
---|
| 992 | + set_config_option(HAVE_TETGENBR "TetGen/BR")
|
---|
| 993 | + endif()
|
---|
| 994 | +
|
---|
| 995 | + if(ENABLE_VOROPP)
|
---|
| 996 | + find_library(VOROPP_LIB voro++)
|
---|
| 997 | + find_path(VOROPP_INC "voro++.hh" PATH_SUFFIXES voro++)
|
---|
| 998 | + if(ENABLE_SYSTEM_CONTRIB AND VOROPP_LIB AND VOROPP_INC)
|
---|
| 999 | + message(STATUS "Using system version of voro++")
|
---|
| 1000 | + list(APPEND EXTERNAL_LIBRARIES ${VOROPP_LIB})
|
---|
| 1001 | + list(APPEND EXTERNAL_INCLUDES ${VOROPP_INC})
|
---|
| 1002 | + set_config_option(HAVE_VOROPP "Voro++[system]")
|
---|
| 1003 | + elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/voro++)
|
---|
| 1004 | + add_subdirectory(contrib/voro++)
|
---|
| 1005 | + include_directories(contrib/voro++/src)
|
---|
| 1006 | + set_config_option(HAVE_VOROPP "Voro++")
|
---|
| 1007 | + endif()
|
---|
| 1008 | + endif()
|
---|
| 1009 | +
|
---|
| 1010 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/blossom AND ENABLE_BLOSSOM)
|
---|
| 1011 | + add_subdirectory(contrib/blossom)
|
---|
| 1012 | + include_directories(contrib/blossom/MATCH contrib/blossom/concorde97
|
---|
| 1013 | + contrib/blossom/concorde97/INCLUDE)
|
---|
| 1014 | + set_config_option(HAVE_BLOSSOM "Blossom")
|
---|
| 1015 | + endif()
|
---|
| 1016 | +
|
---|
| 1017 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/Netgen AND ENABLE_NETGEN)
|
---|
| 1018 | + add_subdirectory(contrib/Netgen)
|
---|
| 1019 | + include_directories(contrib/Netgen contrib/Netgen/libsrc/include
|
---|
| 1020 | + contrib/Netgen/nglib)
|
---|
| 1021 | + set_config_option(HAVE_NETGEN "Netgen")
|
---|
| 1022 | + add_definitions(-DNO_PARALLEL_THREADS -DNOTCL)
|
---|
| 1023 | + endif()
|
---|
| 1024 | +
|
---|
| 1025 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/bamg AND ENABLE_BAMG)
|
---|
| 1026 | + add_subdirectory(contrib/bamg)
|
---|
| 1027 | + include_directories(contrib/bamg contrib/bamg/bamglib)
|
---|
| 1028 | + set_config_option(HAVE_BAMG "Bamg")
|
---|
| 1029 | + endif()
|
---|
| 1030 | +
|
---|
| 1031 | + if(ENABLE_MMG)
|
---|
| 1032 | + find_library(MMG_LIB NAMES Mmg mmg)
|
---|
| 1033 | + find_path(MMG_INC "libmmg.h" PATH_SUFFIXES mmg)
|
---|
| 1034 | + if(MMG_LIB AND MMG_INC)
|
---|
| 1035 | + list(APPEND EXTERNAL_LIBRARIES ${MMG_LIB})
|
---|
| 1036 | + list(APPEND EXTERNAL_INCLUDES ${MMG_INC})
|
---|
| 1037 | + set_config_option(HAVE_MMG "Mmg")
|
---|
| 1038 | + endif()
|
---|
| 1039 | + endif()
|
---|
| 1040 | +endif()
|
---|
| 1041 | +
|
---|
| 1042 | +if(ENABLE_MED OR ENABLE_CGNS)
|
---|
| 1043 | + find_package(HDF5)
|
---|
| 1044 | + if(HDF5_FOUND)
|
---|
| 1045 | + set(HDF5_LIB "${HDF5_C_LIBRARIES}")
|
---|
| 1046 | + list(APPEND EXTERNAL_INCLUDES ${HDF5_INCLUDE_DIRS})
|
---|
| 1047 | + if(ENABLE_MED)
|
---|
| 1048 | + find_library(MED_LIB medC)
|
---|
| 1049 | + if(MED_LIB)
|
---|
| 1050 | + set_config_option(HAVE_MED "Med")
|
---|
| 1051 | + list(APPEND EXTERNAL_LIBRARIES ${MED_LIB})
|
---|
| 1052 | + endif()
|
---|
| 1053 | + endif()
|
---|
| 1054 | + if(ENABLE_CGNS)
|
---|
| 1055 | + find_library(CGNS_LIB cgns HINTS ENV CGNS_ROOT PATH_SUFFIXES lib)
|
---|
| 1056 | + find_path(CGNS_INC "cgnslib.h" HINTS ENV CGNS_ROOT PATH_SUFFIXES include)
|
---|
| 1057 | + if(CGNS_LIB AND CGNS_INC)
|
---|
| 1058 | + set_config_option(HAVE_LIBCGNS "Cgns")
|
---|
| 1059 | + list(APPEND EXTERNAL_LIBRARIES ${CGNS_LIB})
|
---|
| 1060 | + list(APPEND EXTERNAL_INCLUDES ${CGNS_INC})
|
---|
| 1061 | + if(ENABLE_CGNS_CPEX0045)
|
---|
| 1062 | + set_config_option(HAVE_LIBCGNS_CPEX0045 "Cgns_CPEX0045")
|
---|
| 1063 | + endif()
|
---|
| 1064 | + endif()
|
---|
| 1065 | + endif()
|
---|
| 1066 | + if(MED_LIB OR CGNS_LIB)
|
---|
| 1067 | + list(APPEND EXTERNAL_LIBRARIES ${HDF5_LIB})
|
---|
| 1068 | + find_library(SZ_LIB NAMES szlib sz)
|
---|
| 1069 | + if(SZ_LIB)
|
---|
| 1070 | + list(APPEND EXTERNAL_LIBRARIES ${SZ_LIB})
|
---|
| 1071 | + endif()
|
---|
| 1072 | + if(NOT HAVE_LIBZ) # necessary for non-GUI builds
|
---|
| 1073 | + find_package(ZLIB)
|
---|
| 1074 | + if(ZLIB_FOUND)
|
---|
| 1075 | + set_config_option(HAVE_LIBZ "Zlib")
|
---|
| 1076 | + list(APPEND EXTERNAL_LIBRARIES ${ZLIB_LIBRARIES})
|
---|
| 1077 | + endif()
|
---|
| 1078 | + endif()
|
---|
| 1079 | + endif()
|
---|
| 1080 | + else()
|
---|
| 1081 | + message(STATUS "HDF5 not found")
|
---|
| 1082 | + endif()
|
---|
| 1083 | +endif()
|
---|
| 1084 | +
|
---|
| 1085 | +if(HAVE_SOLVER)
|
---|
| 1086 | + if(ENABLE_GMM)
|
---|
| 1087 | + find_path(GMM_INC "gmm.h" PATH_SUFFIXES src include include/gmm)
|
---|
| 1088 | + if(ENABLE_SYSTEM_CONTRIB AND GMM_INC)
|
---|
| 1089 | + message(STATUS "Using system version of GMM")
|
---|
| 1090 | + list(APPEND EXTERNAL_INCLUDES ${GMM_INC})
|
---|
| 1091 | + set_config_option(HAVE_GMM "Gmm[system]")
|
---|
| 1092 | + elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/gmm)
|
---|
| 1093 | + include_directories(contrib/gmm)
|
---|
| 1094 | + set_config_option(HAVE_GMM "Gmm")
|
---|
| 1095 | + endif()
|
---|
| 1096 | + endif()
|
---|
| 1097 | +
|
---|
| 1098 | + if(ENABLE_PETSC)
|
---|
| 1099 | + if(PETSC_DIR)
|
---|
| 1100 | + set(ENV_PETSC_DIR ${PETSC_DIR})
|
---|
| 1101 | + else()
|
---|
| 1102 | + set(ENV_PETSC_DIR $ENV{PETSC_DIR})
|
---|
| 1103 | + endif()
|
---|
| 1104 | + if(PETSC_ARCH)
|
---|
| 1105 | + set(ENV_PETSC_ARCH ${PETSC_ARCH})
|
---|
| 1106 | + else()
|
---|
| 1107 | + set(ENV_PETSC_ARCH $ENV{PETSC_ARCH})
|
---|
| 1108 | + endif()
|
---|
| 1109 | + set(PETSC_POSSIBLE_CONF_FILES
|
---|
| 1110 | + ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/conf/petscvariables
|
---|
| 1111 | + ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib/petsc-conf/petscvariables
|
---|
| 1112 | + ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib/petsc/conf/petscvariables)
|
---|
| 1113 | + foreach(FILE ${PETSC_POSSIBLE_CONF_FILES})
|
---|
| 1114 | + if(EXISTS ${FILE})
|
---|
| 1115 | + # old-style PETSc installations (using PETSC_DIR and PETSC_ARCH)
|
---|
| 1116 | + message(STATUS "Using PETSc dir: ${ENV_PETSC_DIR}")
|
---|
| 1117 | + message(STATUS "Using PETSc arch: ${ENV_PETSC_ARCH}")
|
---|
| 1118 | + # find includes by parsing the petscvariables file
|
---|
| 1119 | + file(STRINGS ${FILE} PETSC_VARIABLES NEWLINE_CONSUME)
|
---|
| 1120 | + endif()
|
---|
| 1121 | + endforeach()
|
---|
| 1122 | + if(PETSC_VARIABLES)
|
---|
| 1123 | + # try to find PETSC_CC_INCLUDES for PETSc >= 3.4
|
---|
| 1124 | + string(REGEX MATCH "PETSC_CC_INCLUDES = [^\n\r]*" PETSC_PACKAGES_INCLUDES
|
---|
| 1125 | + ${PETSC_VARIABLES})
|
---|
| 1126 | + if(PETSC_PACKAGES_INCLUDES)
|
---|
| 1127 | + string(REPLACE "PETSC_CC_INCLUDES = " "" PETSC_PACKAGES_INCLUDES
|
---|
| 1128 | + ${PETSC_PACKAGES_INCLUDES})
|
---|
| 1129 | + else()
|
---|
| 1130 | + # try to find PETSC_PACKAGES_INCLUDES in older versions
|
---|
| 1131 | + list(APPEND EXTERNAL_INCLUDES ${ENV_PETSC_DIR}/include)
|
---|
| 1132 | + list(APPEND EXTERNAL_INCLUDES ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/include)
|
---|
| 1133 | + string(REGEX MATCH "PACKAGES_INCLUDES = [^\n\r]*" PETSC_PACKAGES_INCLUDES
|
---|
| 1134 | + ${PETSC_VARIABLES})
|
---|
| 1135 | + string(REPLACE "PACKAGES_INCLUDES = " "" PETSC_PACKAGES_INCLUDES
|
---|
| 1136 | + ${PETSC_PACKAGES_INCLUDES})
|
---|
| 1137 | + endif()
|
---|
| 1138 | + if(PETSC_PACKAGES_INCLUDES)
|
---|
| 1139 | + if(PETSC_PACKAGES_INCLUDES)
|
---|
| 1140 | + string(REPLACE "-I" "" PETSC_PACKAGES_INCLUDES ${PETSC_PACKAGES_INCLUDES})
|
---|
| 1141 | + string(REPLACE " " ";" PETSC_PACKAGES_INCLUDES ${PETSC_PACKAGES_INCLUDES})
|
---|
| 1142 | + foreach(VAR ${PETSC_PACKAGES_INCLUDES})
|
---|
| 1143 | + # seem to include unexisting directories (/usr/include/lib64)
|
---|
| 1144 | + # check to avoid warnings
|
---|
| 1145 | + if(EXISTS ${VAR})
|
---|
| 1146 | + list(APPEND EXTERNAL_INCLUDES ${VAR})
|
---|
| 1147 | + endif()
|
---|
| 1148 | + endforeach()
|
---|
| 1149 | + endif()
|
---|
| 1150 | + endif()
|
---|
| 1151 | + # find libraries (<= 3.0)
|
---|
| 1152 | + set(PETSC_LIBS_REQUIRED petscksp petscdm petscmat petscvec petsc)
|
---|
| 1153 | + find_all_libraries(PETSC_LIBS PETSC_LIBS_REQUIRED
|
---|
| 1154 | + ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib "")
|
---|
| 1155 | + # petsc 3.1 creates only one library (libpetsc)
|
---|
| 1156 | + if(NOT PETSC_LIBS)
|
---|
| 1157 | + find_library(PETSC_LIBS petsc PATHS ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib
|
---|
| 1158 | + NO_DEFAULT_PATH)
|
---|
| 1159 | + endif()
|
---|
| 1160 | + if(PETSC_LIBS)
|
---|
| 1161 | + set_config_option(HAVE_PETSC "PETSc")
|
---|
| 1162 | + if(NOT HAVE_BLAS)
|
---|
| 1163 | + set_config_option(HAVE_BLAS "Blas[petsc]")
|
---|
| 1164 | + endif()
|
---|
| 1165 | + if(NOT HAVE_LAPACK)
|
---|
| 1166 | + set_config_option(HAVE_LAPACK "Lapack[petsc]")
|
---|
| 1167 | + endif()
|
---|
| 1168 | + endif()
|
---|
| 1169 | + # find slepc (needs to be linked in before petsc)
|
---|
| 1170 | + if(ENABLE_SLEPC)
|
---|
| 1171 | + if(SLEPC_DIR)
|
---|
| 1172 | + set(ENV_SLEPC_DIR ${SLEPC_DIR})
|
---|
| 1173 | + else()
|
---|
| 1174 | + set(ENV_SLEPC_DIR $ENV{SLEPC_DIR})
|
---|
| 1175 | + endif()
|
---|
| 1176 | + find_library(SLEPC_LIB slepc PATHS ${ENV_SLEPC_DIR}/${ENV_PETSC_ARCH}/lib
|
---|
| 1177 | + NO_DEFAULT_PATH)
|
---|
| 1178 | + if(SLEPC_LIB)
|
---|
| 1179 | + find_path(SLEPC_INC "slepc.h" PATHS ${ENV_SLEPC_DIR} PATH_SUFFIXES include
|
---|
| 1180 | + ${ENV_PETSC_ARCH}/include include/slepc NO_DEFAULT_PATH)
|
---|
| 1181 | + if(SLEPC_INC)
|
---|
| 1182 | + message(STATUS "Using SLEPc dir: ${ENV_SLEPC_DIR}")
|
---|
| 1183 | + set_config_option(HAVE_SLEPC "SLEPc")
|
---|
| 1184 | + list(APPEND EXTERNAL_LIBRARIES ${SLEPC_LIB})
|
---|
| 1185 | + list(APPEND EXTERNAL_INCLUDES ${SLEPC_INC})
|
---|
| 1186 | + find_path(SLEPC_INC2 "slepcconf.h" PATHS ${ENV_SLEPC_DIR}
|
---|
| 1187 | + PATH_SUFFIXES ${ENV_PETSC_ARCH}/include NO_DEFAULT_PATH)
|
---|
| 1188 | + if(SLEPC_INC2)
|
---|
| 1189 | + list(APPEND EXTERNAL_INCLUDES ${SLEPC_INC2})
|
---|
| 1190 | + endif()
|
---|
| 1191 | + endif()
|
---|
| 1192 | + endif()
|
---|
| 1193 | + endif()
|
---|
| 1194 | + list(APPEND EXTERNAL_LIBRARIES ${PETSC_LIBS})
|
---|
| 1195 | + # find additional libraries to link with
|
---|
| 1196 | + string(REGEX MATCH "PACKAGES_LIBS = [^\n\r]*" PLIBS ${PETSC_VARIABLES})
|
---|
| 1197 | + if(PLIBS)
|
---|
| 1198 | + string(REPLACE "PACKAGES_LIBS = " "" PLIBS ${PLIBS})
|
---|
| 1199 | + string(STRIP ${PLIBS} PLIBS)
|
---|
| 1200 | + list(APPEND EXTERNAL_LIBRARIES "${PLIBS}")
|
---|
| 1201 | + endif()
|
---|
| 1202 | + string(REGEX MATCH "PETSC_EXTERNAL_LIB_BASIC = [^\n\r]*" PLIBS_BASIC ${PETSC_VARIABLES})
|
---|
| 1203 | + if(PLIBS_BASIC)
|
---|
| 1204 | + string(REPLACE "PETSC_EXTERNAL_LIB_BASIC = " "" PLIBS_BASIC ${PLIBS_BASIC})
|
---|
| 1205 | + string(STRIP ${PLIBS_BASIC} PLIBS_BASIC)
|
---|
| 1206 | + separate_arguments(PLIBS_BASIC)
|
---|
| 1207 | + list(APPEND EXTERNAL_LIBRARIES "${PLIBS_BASIC}")
|
---|
| 1208 | + endif()
|
---|
| 1209 | + string(REGEX MATCH "PCC_LINKER_LIBS = [^\n\r]*" LLIBS ${PETSC_VARIABLES})
|
---|
| 1210 | + if(LLIBS)
|
---|
| 1211 | + string(REPLACE "PCC_LINKER_LIBS = " "" LLIBS ${LLIBS})
|
---|
| 1212 | + string(STRIP ${LLIBS} LLIBS)
|
---|
| 1213 | + list(APPEND EXTERNAL_LIBRARIES "${LLIBS}")
|
---|
| 1214 | + endif()
|
---|
| 1215 | + else()
|
---|
| 1216 | + # new-style PETSc installations (in standard system directories)
|
---|
| 1217 | + find_library(PETSC_LIBS petsc)
|
---|
| 1218 | + find_path(PETSC_INC "petsc.h" PATH_SUFFIXES include/petsc)
|
---|
| 1219 | + if(PETSC_LIBS AND PETSC_INC)
|
---|
| 1220 | + set_config_option(HAVE_PETSC "PETSc")
|
---|
| 1221 | + if(ENABLE_SLEPC)
|
---|
| 1222 | + find_library(SLEPC_LIB slepc)
|
---|
| 1223 | + find_path(SLEPC_INC "slepc.h" PATH_SUFFIXES include/slepc)
|
---|
| 1224 | + if(SLEPC_LIB AND SLEPC_INC)
|
---|
| 1225 | + set_config_option(HAVE_SLEPC "SLEPc")
|
---|
| 1226 | + list(APPEND EXTERNAL_LIBRARIES ${SLEPC_LIB})
|
---|
| 1227 | + list(APPEND EXTERNAL_INCLUDES ${SLEPC_INC})
|
---|
| 1228 | + endif()
|
---|
| 1229 | + endif()
|
---|
| 1230 | + list(APPEND EXTERNAL_LIBRARIES ${PETSC_LIBS})
|
---|
| 1231 | + list(APPEND EXTERNAL_INCLUDES ${PETSC_INC})
|
---|
| 1232 | + endif()
|
---|
| 1233 | + endif()
|
---|
| 1234 | + endif()
|
---|
| 1235 | +
|
---|
| 1236 | + if(ENABLE_MUMPS AND HAVE_BLAS AND HAVE_LAPACK)
|
---|
| 1237 | + set(MUMPS_LIBS_REQUIRED smumps dmumps cmumps zmumps mumps_common pord)
|
---|
| 1238 | + if(NOT ENABLE_MPI)
|
---|
| 1239 | + list(APPEND MUMPS_LIBS_REQUIRED mpiseq)
|
---|
| 1240 | + endif()
|
---|
| 1241 | + find_all_libraries(MUMPS_LIBRARIES MUMPS_LIBS_REQUIRED "" "lib")
|
---|
| 1242 | + find_path(SMUMPS_INC "smumps_c.h" PATH_SUFFIXES src include)
|
---|
| 1243 | + find_path(DMUMPS_INC "dmumps_c.h" PATH_SUFFIXES src include)
|
---|
| 1244 | + find_path(CMUMPS_INC "cmumps_c.h" PATH_SUFFIXES src include)
|
---|
| 1245 | + find_path(ZMUMPS_INC "zmumps_c.h" PATH_SUFFIXES src include)
|
---|
| 1246 | + if(MUMPS_LIBRARIES AND SMUMPS_INC AND DMUMPS_INC AND CMUMPS_INC AND ZMUMPS_INC)
|
---|
| 1247 | + set_config_option(HAVE_MUMPS "MUMPS")
|
---|
| 1248 | + list(APPEND EXTERNAL_LIBRARIES ${MUMPS_LIBRARIES})
|
---|
| 1249 | + list(APPEND EXTERNAL_INCLUDES ${SMUMPS_INC})
|
---|
| 1250 | + list(APPEND EXTERNAL_INCLUDES ${DMUMPS_INC})
|
---|
| 1251 | + list(APPEND EXTERNAL_INCLUDES ${CMUMPS_INC})
|
---|
| 1252 | + list(APPEND EXTERNAL_INCLUDES ${ZMUMPS_INC})
|
---|
| 1253 | + find_library(GFORTRAN_LIB gfortran)
|
---|
| 1254 | + if(GFORTRAN_LIB)
|
---|
| 1255 | + list(APPEND EXTERNAL_LIBRARIES ${GFORTRAN_LIB})
|
---|
| 1256 | + endif()
|
---|
| 1257 | + if(ENABLE_GMM) # use GMM/MUMPS interface
|
---|
| 1258 | + add_definitions(-DGMM_USES_MUMPS)
|
---|
| 1259 | + endif()
|
---|
| 1260 | + endif()
|
---|
| 1261 | + endif()
|
---|
| 1262 | +
|
---|
| 1263 | + if(ENABLE_GETDP)
|
---|
| 1264 | + find_library(GETDP_LIB GetDP)
|
---|
| 1265 | + find_path(GETDP_INC "GetDP.h" PATH_SUFFIXES getdp)
|
---|
| 1266 | + if(GETDP_LIB AND GETDP_INC)
|
---|
| 1267 | + set_config_option(HAVE_GETDP "GetDP")
|
---|
| 1268 | + list(APPEND EXTERNAL_LIBRARIES ${GETDP_LIB})
|
---|
| 1269 | + list(APPEND EXTERNAL_INCLUDES ${GETDP_INC})
|
---|
| 1270 | + endif()
|
---|
| 1271 | + endif()
|
---|
| 1272 | +endif()
|
---|
| 1273 | +
|
---|
| 1274 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/hxt AND ENABLE_HXT)
|
---|
| 1275 | + add_subdirectory(contrib/hxt)
|
---|
| 1276 | + include_directories(BEFORE ${HXT_INC_DIRS})
|
---|
| 1277 | + set_config_option(HAVE_HXT "Hxt")
|
---|
| 1278 | + # do not use arithmetic contraction in predicates.c
|
---|
| 1279 | + if(MSVC OR (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND WIN32))
|
---|
| 1280 | + set_source_files_properties(
|
---|
| 1281 | + "${CMAKE_CURRENT_SOURCE_DIR}/contrib/hxt/predicates/src/predicates.c"
|
---|
| 1282 | + PROPERTIES COMPILE_FLAGS "/fp:strict")
|
---|
| 1283 | + elseif(CMAKE_C_COMPILER_ID STREQUAL "Intel")
|
---|
| 1284 | + set_source_files_properties(
|
---|
| 1285 | + "${CMAKE_CURRENT_SOURCE_DIR}/contrib/hxt/predicates/src/predicates.c"
|
---|
| 1286 | + PROPERTIES COMPILE_FLAGS "-fp-model strict")
|
---|
| 1287 | + elseif(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
|
---|
| 1288 | + set_source_files_properties(
|
---|
| 1289 | + "${CMAKE_CURRENT_SOURCE_DIR}/contrib/hxt/predicates/src/predicates.c"
|
---|
| 1290 | + PROPERTIES COMPILE_FLAGS "-fno-unsafe-math-optimizations -ffp-contract=off")
|
---|
| 1291 | + else()
|
---|
| 1292 | + message(WARNING
|
---|
| 1293 | + "Unsupported compiler !
|
---|
| 1294 | + Make sure compiled functions from predicates.c
|
---|
| 1295 | + do NOT use extended double precision and follow IEEE754 standard.
|
---|
| 1296 | + It is crucial for the robustness of geometric predicates.")
|
---|
| 1297 | + endif()
|
---|
| 1298 | +endif()
|
---|
| 1299 | +
|
---|
| 1300 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/pro AND ENABLE_PRO)
|
---|
| 1301 | + add_subdirectory(pro)
|
---|
| 1302 | +endif()
|
---|
| 1303 | +
|
---|
| 1304 | +if(ENABLE_OCC)
|
---|
| 1305 | + set(OCC_MINIMAL_VERSION "6.9.1")
|
---|
| 1306 | + if(WIN32)
|
---|
| 1307 | + if(HAVE_64BIT_SIZE_T)
|
---|
| 1308 | + set(OCC_SYS_NAME win64)
|
---|
| 1309 | + else()
|
---|
| 1310 | + set(OCC_SYS_NAME win32)
|
---|
| 1311 | + endif()
|
---|
| 1312 | + else()
|
---|
| 1313 | + set(OCC_SYS_NAME ${CMAKE_SYSTEM_NAME})
|
---|
| 1314 | + endif()
|
---|
| 1315 | + find_path(OCC_INC "Standard_Version.hxx" HINTS ENV CASROOT PATH_SUFFIXES
|
---|
| 1316 | + inc include include/oce opencascade include/opencascade
|
---|
| 1317 | + occt include/occt)
|
---|
| 1318 | + if(OCC_INC)
|
---|
| 1319 | + file(STRINGS ${OCC_INC}/Standard_Version.hxx
|
---|
| 1320 | + OCC_MAJOR REGEX "#define OCC_VERSION_MAJOR.*")
|
---|
| 1321 | + file(STRINGS ${OCC_INC}/Standard_Version.hxx
|
---|
| 1322 | + OCC_MINOR REGEX "#define OCC_VERSION_MINOR.*")
|
---|
| 1323 | + file(STRINGS ${OCC_INC}/Standard_Version.hxx
|
---|
| 1324 | + OCC_MAINT REGEX "#define OCC_VERSION_MAINTENANCE.*")
|
---|
| 1325 | + if(OCC_MAJOR AND OCC_MINOR AND OCC_MAINT)
|
---|
| 1326 | + string(REGEX MATCH "[0-9]+" OCC_MAJOR "${OCC_MAJOR}")
|
---|
| 1327 | + string(REGEX MATCH "[0-9]+" OCC_MINOR "${OCC_MINOR}")
|
---|
| 1328 | + string(REGEX MATCH "[0-9]+" OCC_MAINT "${OCC_MAINT}")
|
---|
| 1329 | + set(OCC_VERSION "${OCC_MAJOR}.${OCC_MINOR}.${OCC_MAINT}")
|
---|
| 1330 | + message(STATUS "Found OpenCASCADE version ${OCC_VERSION} in ${OCC_INC}")
|
---|
| 1331 | + endif()
|
---|
| 1332 | + endif()
|
---|
| 1333 | + if(OCC_VERSION AND OCC_VERSION STRLESS ${OCC_MINIMAL_VERSION})
|
---|
| 1334 | + message(WARNING "Gmsh requires OpenCASCADE >= ${OCC_MINIMAL_VERSION}. "
|
---|
| 1335 | + "Use CMAKE_PREFIX_PATH or the CASROOT environment variable "
|
---|
| 1336 | + "to explicitely specify the installation path of OpenCASCADE")
|
---|
| 1337 | + elseif(OCC_INC)
|
---|
| 1338 | + set(OCC_LIBS_REQUIRED
|
---|
| 1339 | + # subset of DataExchange
|
---|
| 1340 | + TKSTEP TKSTEP209 TKSTEPAttr TKSTEPBase TKIGES TKXSBase
|
---|
| 1341 | + # ModelingAlgorithms
|
---|
| 1342 | + TKOffset TKFeat TKFillet TKBool TKMesh TKHLR TKBO TKPrim TKShHealing
|
---|
| 1343 | + TKTopAlgo TKGeomAlgo
|
---|
| 1344 | + # ModelingData
|
---|
| 1345 | + TKBRep TKGeomBase TKG3d TKG2d
|
---|
| 1346 | + # FoundationClasses
|
---|
| 1347 | + TKMath TKernel)
|
---|
| 1348 | + if(ENABLE_OCC_TBB)
|
---|
| 1349 | + list(APPEND OCC_LIBS_REQUIRED tbb tbbmalloc)
|
---|
| 1350 | + endif()
|
---|
| 1351 | + list(LENGTH OCC_LIBS_REQUIRED NUM_OCC_LIBS_REQUIRED)
|
---|
| 1352 | + if(OCC_LIBS)
|
---|
| 1353 | + message(STATUS "OCC libraries specified explicitly: " ${OCC_LIBS})
|
---|
| 1354 | + list(LENGTH OCC_LIBS_REQUIRED NUM_OCC_LIBS)
|
---|
| 1355 | + else()
|
---|
| 1356 | + set(OCC_LIBS)
|
---|
| 1357 | + foreach(OCC ${OCC_LIBS_REQUIRED})
|
---|
| 1358 | + find_library(OCC_LIB ${OCC} HINTS ENV CASROOT PATH_SUFFIXES
|
---|
| 1359 | + lib ${OCC_SYS_NAME}/lib ${OCC_SYS_NAME}/vc8/lib
|
---|
| 1360 | + ${OCC_SYS_NAME}/gcc/lib ${OCC_SYS_NAME}/gcc/bin)
|
---|
| 1361 | + if(OCC_LIB)
|
---|
| 1362 | + list(APPEND OCC_LIBS ${OCC_LIB})
|
---|
| 1363 | + else()
|
---|
| 1364 | + message(STATUS "OCC lib " ${OCC} " not Found")
|
---|
| 1365 | + endif()
|
---|
| 1366 | + unset(OCC_LIB CACHE)
|
---|
| 1367 | + endforeach()
|
---|
| 1368 | + list(LENGTH OCC_LIBS NUM_OCC_LIBS)
|
---|
| 1369 | + endif()
|
---|
| 1370 | + endif()
|
---|
| 1371 | +
|
---|
| 1372 | + # additional OCC libraries to handle reading of STEP/IGES attributes. Oh my...
|
---|
| 1373 | + if(ENABLE_OCC_CAF)
|
---|
| 1374 | + find_package(Freetype)
|
---|
| 1375 | + if(FREETYPE_FOUND)
|
---|
| 1376 | + set(OCC_CAF_LIBS_REQUIRED
|
---|
| 1377 | + TKXDESTEP TKXDEIGES TKXCAF TKLCAF TKVCAF TKCAF TKV3d TKService TKCDF)
|
---|
| 1378 | + list(LENGTH OCC_CAF_LIBS_REQUIRED NUM_OCC_CAF_LIBS_REQUIRED)
|
---|
| 1379 | + set(OCC_CAF_LIBS)
|
---|
| 1380 | + foreach(OCC ${OCC_CAF_LIBS_REQUIRED})
|
---|
| 1381 | + find_library(OCC_CAF_LIB ${OCC} HINTS ENV CASROOT PATH_SUFFIXES
|
---|
| 1382 | + lib ${OCC_SYS_NAME}/lib ${OCC_SYS_NAME}/vc8/lib
|
---|
| 1383 | + ${OCC_SYS_NAME}/gcc/lib ${OCC_SYS_NAME}/gcc/bin)
|
---|
| 1384 | + if(OCC_CAF_LIB)
|
---|
| 1385 | + list(APPEND OCC_CAF_LIBS ${OCC_CAF_LIB})
|
---|
| 1386 | + else()
|
---|
| 1387 | + message(STATUS "OCC CAF lib " ${OCC} " not Found")
|
---|
| 1388 | + endif()
|
---|
| 1389 | + unset(OCC_CAF_LIB CACHE)
|
---|
| 1390 | + endforeach()
|
---|
| 1391 | + list(LENGTH OCC_CAF_LIBS NUM_OCC_CAF_LIBS)
|
---|
| 1392 | + endif()
|
---|
| 1393 | + endif()
|
---|
| 1394 | +
|
---|
| 1395 | + if(NUM_OCC_LIBS EQUAL NUM_OCC_LIBS_REQUIRED)
|
---|
| 1396 | + # append OCC CAF libraries first...
|
---|
| 1397 | + if(NUM_OCC_CAF_LIBS EQUAL NUM_OCC_CAF_LIBS_REQUIRED)
|
---|
| 1398 | + set_config_option(HAVE_OCC_CAF "OpenCASCADE-CAF")
|
---|
| 1399 | + list(APPEND EXTERNAL_LIBRARIES ${OCC_CAF_LIBS} ${FREETYPE_LIBRARIES})
|
---|
| 1400 | + list(APPEND EXTERNAL_INCLUDES ${FREETYPE_INCLUDE_DIRS})
|
---|
| 1401 | + if(WIN32)
|
---|
| 1402 | + list(APPEND EXTERNAL_LIBRARIES "windowscodecs")
|
---|
| 1403 | + list(APPEND EXTERNAL_LIBRARIES "ole32")
|
---|
| 1404 | + endif()
|
---|
| 1405 | + endif()
|
---|
| 1406 | + # then append OCC libraries
|
---|
| 1407 | + set_config_option(HAVE_OCC "OpenCASCADE")
|
---|
| 1408 | + list(APPEND EXTERNAL_LIBRARIES ${OCC_LIBS})
|
---|
| 1409 | + list(APPEND EXTERNAL_INCLUDES ${OCC_INC})
|
---|
| 1410 | + if(HAVE_64BIT_SIZE_T)
|
---|
| 1411 | + add_definitions(-D_OCC64)
|
---|
| 1412 | + endif()
|
---|
| 1413 | + if(WIN32)
|
---|
| 1414 | + list(APPEND EXTERNAL_LIBRARIES "winspool")
|
---|
| 1415 | + add_definitions(-DOCC_CONVERT_SIGNALS)
|
---|
| 1416 | + elseif(MSVC)
|
---|
| 1417 | + add_definitions(-DWNT)
|
---|
| 1418 | + endif()
|
---|
| 1419 | + endif()
|
---|
| 1420 | +endif()
|
---|
| 1421 | +
|
---|
| 1422 | +if(ENABLE_ZIPPER)
|
---|
| 1423 | + if(ENABLE_BUILD_IOS)
|
---|
| 1424 | + set_config_option(HAVE_LIBZ "Zlib")
|
---|
| 1425 | + endif()
|
---|
| 1426 | + if(NOT HAVE_LIBZ) # necessary for non-GUI builds
|
---|
| 1427 | + find_package(ZLIB)
|
---|
| 1428 | + if(ZLIB_FOUND)
|
---|
| 1429 | + set_config_option(HAVE_LIBZ "Zlib")
|
---|
| 1430 | + list(APPEND EXTERNAL_LIBRARIES ${ZLIB_LIBRARIES})
|
---|
| 1431 | + list(APPEND EXTERNAL_INCLUDES ${ZLIB_INCLUDE_DIR})
|
---|
| 1432 | + endif()
|
---|
| 1433 | + endif()
|
---|
| 1434 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/zipper AND HAVE_LIBZ)
|
---|
| 1435 | + add_subdirectory(contrib/zipper)
|
---|
| 1436 | + include_directories(contrib/zipper)
|
---|
| 1437 | + set_config_option(HAVE_ZIPPER "Zipper")
|
---|
| 1438 | + endif()
|
---|
| 1439 | +endif()
|
---|
| 1440 | +
|
---|
| 1441 | +if(ENABLE_PRIVATE_API AND ENABLE_WRAP_PYTHON)
|
---|
| 1442 | + find_package(SWIG REQUIRED)
|
---|
| 1443 | + include(${SWIG_USE_FILE})
|
---|
| 1444 | + find_package(PythonLibs)
|
---|
| 1445 | + if(SWIG_FOUND AND PYTHONLIBS_FOUND)
|
---|
| 1446 | + message(STATUS "Found SWIG version " ${SWIG_VERSION})
|
---|
| 1447 | + find_package(PythonInterp)
|
---|
| 1448 | + string(SUBSTRING ${SWIG_VERSION} 0 1 SWIG_MAJOR_VERSION)
|
---|
| 1449 | + if(SWIG_MAJOR_VERSION EQUAL 1)
|
---|
| 1450 | + message(WARNING "Python bindings require SWIG >= 2: disabling Python")
|
---|
| 1451 | + else()
|
---|
| 1452 | + set_config_option(HAVE_PYTHON "Python")
|
---|
| 1453 | + mark_as_advanced(CLEAR PYTHON_LIBRARY PYTHON_INCLUDE_DIR)
|
---|
| 1454 | + if(ENABLE_NUMPY)
|
---|
| 1455 | + if (NOT NUMPY_INC)
|
---|
| 1456 | + EXEC_PROGRAM (${PYTHON_EXECUTABLE}
|
---|
| 1457 | + ARGS "-c \"import numpy; print(numpy.get_include())\""
|
---|
| 1458 | + OUTPUT_VARIABLE NUMPY_INC
|
---|
| 1459 | + RETURN_VALUE NUMPY_NOT_FOUND)
|
---|
| 1460 | + endif()
|
---|
| 1461 | + if(NUMPY_INC)
|
---|
| 1462 | + list(APPEND EXTERNAL_INCLUDES ${NUMPY_INC})
|
---|
| 1463 | + set_config_option(HAVE_NUMPY "Numpy")
|
---|
| 1464 | + endif()
|
---|
| 1465 | + endif()
|
---|
| 1466 | + if(HAVE_PETSC)
|
---|
| 1467 | + if(ENABLE_PETSC4PY)
|
---|
| 1468 | + EXECUTE_PROCESS(
|
---|
| 1469 | + COMMAND ${PYTHON_EXECUTABLE} -c "import petsc4py; print(petsc4py.get_include())"
|
---|
| 1470 | + OUTPUT_VARIABLE PETSC4PY_INC
|
---|
| 1471 | + RESULT_VARIABLE PETSC4PY_NOT_FOUND
|
---|
| 1472 | + ERROR_QUIET
|
---|
| 1473 | + OUTPUT_STRIP_TRAILING_WHITESPACE)
|
---|
| 1474 | + if(PETSC4PY_INC)
|
---|
| 1475 | + list(APPEND EXTERNAL_INCLUDES ${PETSC4PY_INC})
|
---|
| 1476 | + set_config_option(HAVE_PETSC4PY "PETSc4py")
|
---|
| 1477 | + endif()
|
---|
| 1478 | + endif()
|
---|
| 1479 | + endif()
|
---|
| 1480 | + endif()
|
---|
| 1481 | + endif()
|
---|
| 1482 | +endif()
|
---|
| 1483 | +
|
---|
| 1484 | +check_function_exists(vsnprintf HAVE_VSNPRINTF)
|
---|
| 1485 | +if(NOT HAVE_VSNPRINTF AND NOT ENABLE_BUILD_IOS AND NOT ENABLE_BUILD_ANDROID)
|
---|
| 1486 | + set_config_option(HAVE_NO_VSNPRINTF "NoVsnprintf")
|
---|
| 1487 | +endif()
|
---|
| 1488 | +
|
---|
| 1489 | +check_include_file(sys/socket.h HAVE_SYS_SOCKET_H)
|
---|
| 1490 | +if(HAVE_SYS_SOCKET_H)
|
---|
| 1491 | + set(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h)
|
---|
| 1492 | +endif()
|
---|
| 1493 | +check_type_size(socklen_t SOCKLEN_T_SIZE)
|
---|
| 1494 | +set(CMAKE_EXTRA_INCLUDE_FILES)
|
---|
| 1495 | +if(NOT SOCKLEN_T_SIZE AND NOT ENABLE_BUILD_IOS AND NOT ENABLE_BUILD_ANDROID)
|
---|
| 1496 | + set_config_option(HAVE_NO_SOCKLEN_T "NoSocklenT")
|
---|
| 1497 | +endif()
|
---|
| 1498 | +
|
---|
| 1499 | +check_include_file(stdint.h HAVE_STDINT_H)
|
---|
| 1500 | +if(HAVE_STDINT_H)
|
---|
| 1501 | + set(CMAKE_EXTRA_INCLUDE_FILES stdint.h)
|
---|
| 1502 | +else()
|
---|
| 1503 | + set_config_option(HAVE_NO_STDINT_H "NoStdintH")
|
---|
| 1504 | +endif()
|
---|
| 1505 | +check_type_size(intptr_t INTPTR_T_SIZE)
|
---|
| 1506 | +set(CMAKE_EXTRA_INCLUDE_FILES)
|
---|
| 1507 | +if(NOT INTPTR_T_SIZE AND NOT ENABLE_BUILD_IOS AND NOT ENABLE_BUILD_ANDROID)
|
---|
| 1508 | + set_config_option(HAVE_NO_INTPTR_T "NoIntptrT")
|
---|
| 1509 | +endif()
|
---|
| 1510 | +
|
---|
| 1511 | +check_include_file(dlfcn.h DLFCN_H)
|
---|
| 1512 | +if(DLFCN_H)
|
---|
| 1513 | + set_config_option(HAVE_DLOPEN "Dlopen")
|
---|
| 1514 | + list(APPEND EXTERNAL_LIBRARIES ${CMAKE_DL_LIBS})
|
---|
| 1515 | +endif()
|
---|
| 1516 | +
|
---|
| 1517 | +if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
---|
| 1518 | + check_include_file(linux/joystick.h LINUX_JOYSTICK_H)
|
---|
| 1519 | + if(LINUX_JOYSTICK_H)
|
---|
| 1520 | + set_config_option(HAVE_LINUX_JOYSTICK "LinuxJoystick")
|
---|
| 1521 | + endif()
|
---|
| 1522 | +endif()
|
---|
| 1523 | +
|
---|
| 1524 | +if(WIN32)
|
---|
| 1525 | + add_definitions(-D_USE_MATH_DEFINES)
|
---|
| 1526 | + list(APPEND EXTERNAL_LIBRARIES winmm wsock32 ws2_32 psapi)
|
---|
| 1527 | +endif()
|
---|
| 1528 | +
|
---|
| 1529 | +if(MSVC)
|
---|
| 1530 | + add_definitions(-DNOMINMAX -D_CRT_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_DEPRECATE)
|
---|
| 1531 | +endif()
|
---|
| 1532 | +
|
---|
| 1533 | +# add C functions API
|
---|
| 1534 | +set(GMSH_SRC ${GMSH_SRC};api/gmshc.cpp)
|
---|
| 1535 | +
|
---|
| 1536 | +# force full warnings to encourage everybody to write clean(er) code
|
---|
| 1537 | +check_cxx_compiler_flag("-Wall" WALL)
|
---|
| 1538 | +if(WALL AND NOT MSVC)
|
---|
| 1539 | + file(GLOB_RECURSE WALL_SRC Common/*.cpp Fltk/*.cpp FunctionSpace/*.cpp
|
---|
| 1540 | + Geo/*.cpp Graphics/*.cpp Mesh/*.cpp Numeric/*.cpp Parser/*.cpp
|
---|
| 1541 | + Plugin/*.cpp Post/*.cpp Solver/*.cpp)
|
---|
| 1542 | + set(WF "-Wall")
|
---|
| 1543 | + check_cxx_compiler_flag("-Wint-to-void-pointer-cast" WCAST)
|
---|
| 1544 | + if(WCAST)
|
---|
| 1545 | + set(WF "${WF} -Wno-int-to-void-pointer-cast")
|
---|
| 1546 | + endif()
|
---|
| 1547 | + check_cxx_compiler_flag("-Wdeprecated-declarations" WDEPREC)
|
---|
| 1548 | + if(WDEPREC)
|
---|
| 1549 | + # FIXME: remove this when we have fixed the deprecated GLU code for OpenGL3
|
---|
| 1550 | + set(WF "${WF} -Wno-deprecated-declarations")
|
---|
| 1551 | + endif()
|
---|
| 1552 | + check_cxx_compiler_flag("-Wmisleading-indentation" WIND)
|
---|
| 1553 | + if(WIND)
|
---|
| 1554 | + set(WF "${WF} -Wno-misleading-indentation")
|
---|
| 1555 | + endif()
|
---|
| 1556 | + check_cxx_compiler_flag("-Wno-attributes" WATTR)
|
---|
| 1557 | + if(WATTR)
|
---|
| 1558 | + # FIXME: remove this when GCC behaves more intelligently
|
---|
| 1559 | + set(WF "${WF} -Wno-attributes")
|
---|
| 1560 | + endif()
|
---|
| 1561 | + set_compile_flags(WALL_SRC ${WF})
|
---|
| 1562 | +endif()
|
---|
| 1563 | +
|
---|
| 1564 | +# don't issue warnings for contributed libraries
|
---|
| 1565 | +check_cxx_compiler_flag("-w" NOWARN)
|
---|
| 1566 | +if(NOWARN)
|
---|
| 1567 | + file(GLOB_RECURSE NOWARN_SRC contrib/*.cpp contrib/*.cc contrib/*.cxx contrib/*.c)
|
---|
| 1568 | + set_compile_flags(NOWARN_SRC "-w")
|
---|
| 1569 | +endif()
|
---|
| 1570 | +
|
---|
| 1571 | +# disable compile optimization on some known problematic files
|
---|
| 1572 | +check_cxx_compiler_flag("-O0" NOOPT)
|
---|
| 1573 | +if(NOOPT OR ENABLE_BUILD_IOS)
|
---|
| 1574 | + if(ENABLE_BUILD_IOS) # optimized iOS 10 64 bits screws somewhere in Geo
|
---|
| 1575 | + file(GLOB_RECURSE NOOPT_SRC Numeric/robustPredicates.cpp Geo/G*.cpp Mesh/BDS.cpp
|
---|
| 1576 | + Parser/Gmsh.tab.cpp contrib/blossom/* Mesh/Background*)
|
---|
| 1577 | + else()
|
---|
| 1578 | + file(GLOB_RECURSE NOOPT_SRC Numeric/robustPredicates.cpp Mesh/BDS.cpp
|
---|
| 1579 | + Parser/Gmsh.tab.cpp contrib/blossom/* contrib/bamg/* Mesh/Background*)
|
---|
| 1580 | + endif()
|
---|
| 1581 | + set_compile_flags(NOOPT_SRC "-O0")
|
---|
| 1582 | +endif()
|
---|
| 1583 | +
|
---|
| 1584 | +# do not use arithmetic contraction in predicates.cpp
|
---|
| 1585 | +# if("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
|
---|
| 1586 | +# set_source_files_properties(Numeric/robustPredicates.cpp PROPERTIES
|
---|
| 1587 | +# COMPILE_FLAGS "/fp:strict")
|
---|
| 1588 | +# elseif(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
|
---|
| 1589 | +# set_source_files_properties(Numeric/robustPredicates.cpp PROPERTIES
|
---|
| 1590 | +# COMPILE_FLAGS "-fno-unsafe-math-optimizations -ffp-contract=off")
|
---|
| 1591 | +# elseif(CMAKE_C_COMPILER_ID STREQUAL "Intel")
|
---|
| 1592 | +# set_source_files_properties(Numeric/robustPredicates.cpp PROPERTIES
|
---|
| 1593 | +# COMPILE_FLAGS "-fp-model strict")
|
---|
| 1594 | +# endif()
|
---|
| 1595 | +
|
---|
| 1596 | +# enable Revoropt and set compile flags for the corresponding plugin
|
---|
| 1597 | +if(ENABLE_REVOROPT)
|
---|
| 1598 | + if(HAVE_EIGEN AND HAVE_MESH AND HAVE_PLUGINS AND HAVE_ANN AND HAVE_ALGLIB)
|
---|
| 1599 | + list(APPEND EXTERNAL_INCLUDES contrib/Revoropt/include)
|
---|
| 1600 | + set_config_option(HAVE_REVOROPT "Revoropt")
|
---|
| 1601 | + add_definitions(-DUSE_ANN)
|
---|
| 1602 | + else()
|
---|
| 1603 | + message(WARNING "Revoropt requires Eigen, Mesh, Plugins, ANN and ALGLIB")
|
---|
| 1604 | + endif()
|
---|
| 1605 | +endif()
|
---|
| 1606 | +
|
---|
| 1607 | +if(HAVE_MESH AND NOT HAVE_EIGEN AND NOT HAVE_LAPACK)
|
---|
| 1608 | + message(WARNING "Most meshing algorithms will not be functional without "
|
---|
| 1609 | + "Eigen or Lapack")
|
---|
| 1610 | +endif()
|
---|
| 1611 | +
|
---|
| 1612 | +list(SORT CONFIG_OPTIONS)
|
---|
| 1613 | +set(GMSH_CONFIG_OPTIONS "")
|
---|
| 1614 | +foreach(OPT ${CONFIG_OPTIONS})
|
---|
| 1615 | + set(GMSH_CONFIG_OPTIONS "${GMSH_CONFIG_OPTIONS} ${OPT}")
|
---|
| 1616 | +endforeach()
|
---|
| 1617 | +
|
---|
| 1618 | +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Common/GmshConfig.h.in
|
---|
| 1619 | + ${CMAKE_CURRENT_BINARY_DIR}/Common/GmshConfig.h)
|
---|
| 1620 | +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Common/GmshVersion.h.in
|
---|
| 1621 | + ${CMAKE_CURRENT_BINARY_DIR}/Common/GmshVersion.h)
|
---|
| 1622 | +
|
---|
| 1623 | +# the texi and pypi version files are modified in the source directory (not
|
---|
| 1624 | +# ideal for version.texi, but since git tracks the contents of the file this is
|
---|
| 1625 | +# acceptable as it will only change when the actual version is changed - not for
|
---|
| 1626 | +# each git hash; setup.py is not under version control)
|
---|
| 1627 | +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc/texinfo/version.texi.in
|
---|
| 1628 | + ${CMAKE_CURRENT_SOURCE_DIR}/doc/texinfo/version.texi)
|
---|
| 1629 | +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/utils/pypi/gmsh/setup.py.in
|
---|
| 1630 | + ${CMAKE_CURRENT_SOURCE_DIR}/utils/pypi/gmsh/setup.py)
|
---|
| 1631 | +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/utils/pypi/gmsh-dev/setup.py.in
|
---|
| 1632 | + ${CMAKE_CURRENT_SOURCE_DIR}/utils/pypi/gmsh-dev/setup.py)
|
---|
| 1633 | +
|
---|
| 1634 | +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/version.txt ${GMSH_SHORT_VERSION})
|
---|
| 1635 | +
|
---|
| 1636 | +# process cmake environment variables so we can append them to the -I include
|
---|
| 1637 | +# commands. This is not recommended (we should only use the cache variables) but
|
---|
| 1638 | +# it is very convenient: otherwise we have to remember providing the
|
---|
| 1639 | +# -D... options to cmake for each new build.
|
---|
| 1640 | +set(ENV_CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
|
---|
| 1641 | +set(ENV_CMAKE_INCLUDE_PATH $ENV{CMAKE_INCLUDE_PATH})
|
---|
| 1642 | +if(UNIX)
|
---|
| 1643 | + if(ENV_CMAKE_PREFIX_PATH)
|
---|
| 1644 | + string(REPLACE ":" ";" ENV_CMAKE_PREFIX_PATH ${ENV_CMAKE_PREFIX_PATH})
|
---|
| 1645 | + endif()
|
---|
| 1646 | + if(ENV_CMAKE_INCLUDE_PATH)
|
---|
| 1647 | + string(REPLACE ":" ";" ENV_CMAKE_INCLUDE_PATH ${ENV_CMAKE_INCLUDE_PATH})
|
---|
| 1648 | + endif()
|
---|
| 1649 | +endif()
|
---|
| 1650 | +list(APPEND EXTERNAL_INCLUDES ${CMAKE_INCLUDE_PATH} ${ENV_CMAKE_INCLUDE_PATH})
|
---|
| 1651 | +list(APPEND EXTERNAL_INCLUDES ${CMAKE_PREFIX_PATH} ${ENV_CMAKE_PREFIX_PATH})
|
---|
| 1652 | +foreach(DIR ${CMAKE_PREFIX_PATH} ${ENV_CMAKE_PREFIX_PATH})
|
---|
| 1653 | + list(APPEND EXTERNAL_INCLUDES ${DIR}/include)
|
---|
| 1654 | +endforeach()
|
---|
| 1655 | +
|
---|
| 1656 | +if(EXTERNAL_INCLUDES)
|
---|
| 1657 | + list(REMOVE_DUPLICATES EXTERNAL_INCLUDES)
|
---|
| 1658 | +endif()
|
---|
| 1659 | +
|
---|
| 1660 | +if(HAVE_FLTK)
|
---|
| 1661 | + set(LINK_LIBRARIES ${FLTK_LIBRARIES} ${EXTERNAL_LIBRARIES}
|
---|
| 1662 | + ${OPENGL_LIBRARIES} ${LAPACK_LIBRARIES})
|
---|
| 1663 | +elseif(HAVE_OPENGL)
|
---|
| 1664 | + set(LINK_LIBRARIES ${EXTERNAL_LIBRARIES} ${OPENGL_LIBRARIES}
|
---|
| 1665 | + ${LAPACK_LIBRARIES})
|
---|
| 1666 | +else()
|
---|
| 1667 | + set(LINK_LIBRARIES ${EXTERNAL_LIBRARIES} ${LAPACK_LIBRARIES})
|
---|
| 1668 | +endif()
|
---|
| 1669 | +
|
---|
| 1670 | +# try to use static gfortran on static builds (cannot do this on dynamic builds
|
---|
| 1671 | +# as e.g. Debian compiles libgfortran.a without -fPIC: sigh...)
|
---|
| 1672 | +if(NOT ENABLE_BUILD_DYNAMIC AND NOT ENABLE_BUILD_SHARED)
|
---|
| 1673 | + find_library(GFORTRAN_STATIC libgfortran.a)
|
---|
| 1674 | + if(GFORTRAN_STATIC)
|
---|
| 1675 | + set(CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES)
|
---|
| 1676 | + message(STATUS "Using static libgfortran")
|
---|
| 1677 | + foreach(STR ${LINK_LIBRARIES})
|
---|
| 1678 | + string(REPLACE "-lgfortran" ${GFORTRAN_STATIC} STR2 ${STR})
|
---|
| 1679 | + list(APPEND LINK_LIBRARIES2 ${STR2})
|
---|
| 1680 | + endforeach()
|
---|
| 1681 | + set(LINK_LIBRARIES ${LINK_LIBRARIES2})
|
---|
| 1682 | + endif()
|
---|
| 1683 | +endif()
|
---|
| 1684 | +
|
---|
| 1685 | +# Linux-specific linker options
|
---|
| 1686 | +if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
---|
| 1687 | + if(HAVE_OCC)
|
---|
| 1688 | + find_library(RT_LIB rt)
|
---|
| 1689 | + if(RT_LIB)
|
---|
| 1690 | + list(APPEND LINK_LIBRARIES ${RT_LIB})
|
---|
| 1691 | + endif()
|
---|
| 1692 | + endif()
|
---|
| 1693 | + if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Intel")
|
---|
| 1694 | + add_definitions(-fPIC)
|
---|
| 1695 | + endif()
|
---|
| 1696 | +endif()
|
---|
| 1697 | +
|
---|
| 1698 | +# we could specify include dirs more selectively, but this is simpler
|
---|
| 1699 | +include_directories(Common Fltk Geo Graphics Mesh Solver Numeric Parser
|
---|
| 1700 | + Plugin Post api ${EXTERNAL_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}/Common)
|
---|
| 1701 | +
|
---|
| 1702 | +# set this for external codes that might include this CMakeList file
|
---|
| 1703 | +set(GMSH_EXTERNAL_INCLUDE_DIRS ${EXTERNAL_INCLUDES} CACHE
|
---|
| 1704 | + STRING "External include directories" FORCE)
|
---|
| 1705 | +set(GMSH_EXTERNAL_LIBRARIES ${LINK_LIBRARIES} CACHE
|
---|
| 1706 | + STRING "External libraries" FORCE)
|
---|
| 1707 | +
|
---|
| 1708 | +# group sources for easier navigation in IDEs
|
---|
| 1709 | +foreach(DIR ${GMSH_DIRS})
|
---|
| 1710 | + string(REGEX REPLACE "\\+" "\\\\+" DIR ${DIR})
|
---|
| 1711 | + source_group(${DIR} REGULAR_EXPRESSION ${DIR}/.*)
|
---|
| 1712 | +endforeach()
|
---|
| 1713 | +
|
---|
| 1714 | +# static library target
|
---|
| 1715 | +if(ENABLE_BUILD_LIB)
|
---|
| 1716 | + add_library(lib STATIC ${GMSH_SRC})
|
---|
| 1717 | + set_target_properties(lib PROPERTIES OUTPUT_NAME gmsh)
|
---|
| 1718 | + if(MSVC)
|
---|
| 1719 | + set_target_properties(lib PROPERTIES DEBUG_POSTFIX d)
|
---|
| 1720 | + if(ENABLE_MSVC_STATIC_RUNTIME)
|
---|
| 1721 | + set_target_properties(lib PROPERTIES LINK_FLAGS_RELEASE "/nodefaultlib:LIBCMT")
|
---|
| 1722 | + endif()
|
---|
| 1723 | + endif()
|
---|
| 1724 | +endif()
|
---|
| 1725 | +
|
---|
| 1726 | +# shared library target
|
---|
| 1727 | +if(ENABLE_BUILD_SHARED OR ENABLE_BUILD_DYNAMIC)
|
---|
| 1728 | + add_library(shared SHARED ${GMSH_SRC})
|
---|
| 1729 | + set_target_properties(shared PROPERTIES OUTPUT_NAME gmsh
|
---|
| 1730 | + VERSION ${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION}.${GMSH_PATCH_VERSION}
|
---|
| 1731 | + SOVERSION ${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION})
|
---|
| 1732 | + if(WIN32)
|
---|
| 1733 | + set_target_properties(shared PROPERTIES PREFIX "" IMPORT_PREFIX ""
|
---|
| 1734 | + IMPORT_SUFFIX ".lib" COMPILE_FLAGS "-DGMSH_DLL -DGMSH_DLL_EXPORT")
|
---|
| 1735 | + endif()
|
---|
| 1736 | + target_link_libraries(shared ${LINK_LIBRARIES})
|
---|
| 1737 | + # don't define LC_RPATH in dylib for development, to not get endless warnings
|
---|
| 1738 | + # about code signing
|
---|
| 1739 | + if(APPLE AND NOT GMSH_RELEASE)
|
---|
| 1740 | + set_target_properties(shared PROPERTIES INSTALL_RPATH "")
|
---|
| 1741 | + endif()
|
---|
| 1742 | + if(MSVC AND ENABLE_MSVC_STATIC_RUNTIME)
|
---|
| 1743 | + message(STATUS "Note: By enabling ENABLE_MSVC_STATIC_RUNTIME, shared library "
|
---|
| 1744 | + "won't link. In MSVC change /MT to /MD in the shared project properties")
|
---|
| 1745 | + endif()
|
---|
| 1746 | +endif()
|
---|
| 1747 | +
|
---|
| 1748 | +# binary targets
|
---|
| 1749 | +if(HAVE_FLTK)
|
---|
| 1750 | + if(ENABLE_BUILD_DYNAMIC)
|
---|
| 1751 | + add_executable(gmsh WIN32 Common/Main.cpp)
|
---|
| 1752 | + target_link_libraries(gmsh shared)
|
---|
| 1753 | + else()
|
---|
| 1754 | + add_executable(gmsh WIN32 Common/Main.cpp ${GMSH_SRC})
|
---|
| 1755 | + endif()
|
---|
| 1756 | + # we could add this to create a minimal app bundle even without install
|
---|
| 1757 | + # if(APPLE AND NOT ENABLE_OS_SPECIFIC_INSTALL)
|
---|
| 1758 | + # set_target_properties(gmsh PROPERTIES MACOSX_BUNDLE ON
|
---|
| 1759 | + # MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/utils/misc/gmsh_dev.plist)
|
---|
| 1760 | + # endif()
|
---|
| 1761 | +else()
|
---|
| 1762 | + if(ENABLE_BUILD_DYNAMIC)
|
---|
| 1763 | + add_executable(gmsh Common/Main.cpp)
|
---|
| 1764 | + target_link_libraries(gmsh shared)
|
---|
| 1765 | + else()
|
---|
| 1766 | + add_executable(gmsh Common/Main.cpp ${GMSH_SRC})
|
---|
| 1767 | + endif()
|
---|
| 1768 | +endif()
|
---|
| 1769 | +target_link_libraries(gmsh ${LINK_LIBRARIES})
|
---|
| 1770 | +
|
---|
| 1771 | +# Windows specific linker options
|
---|
| 1772 | +if(WIN32 AND NOT MSVC)
|
---|
| 1773 | + set(FLAGS "-Wl,--stack,16777216 -static -municode")
|
---|
| 1774 | + if(HAVE_FLTK)
|
---|
| 1775 | + set(FLAGS "${FLAGS} -mwindows")
|
---|
| 1776 | + else()
|
---|
| 1777 | + set(FLAGS "${FLAGS} -mconsole")
|
---|
| 1778 | + endif()
|
---|
| 1779 | + if(HAVE_64BIT_SIZE_T)
|
---|
| 1780 | + set(FLAGS "${FLAGS} \"${CMAKE_CURRENT_SOURCE_DIR}/Fltk/Win64Icon.res\"")
|
---|
| 1781 | + else()
|
---|
| 1782 | + set(FLAGS "${FLAGS} \"${CMAKE_CURRENT_SOURCE_DIR}/Fltk/Win32Icon.res\"")
|
---|
| 1783 | + endif()
|
---|
| 1784 | + set_target_properties(gmsh PROPERTIES LINK_FLAGS "${FLAGS}")
|
---|
| 1785 | + if(ENABLE_BUILD_DYNAMIC OR ENABLE_BUILD_SHARED)
|
---|
| 1786 | + set_target_properties(shared PROPERTIES LINK_FLAGS -static)
|
---|
| 1787 | + endif()
|
---|
| 1788 | + # remove -Wl,-Bdynamic flags
|
---|
| 1789 | + set(CMAKE_EXE_LINK_DYNAMIC_C_FLAGS)
|
---|
| 1790 | + set(CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS)
|
---|
| 1791 | +elseif(MSVC)
|
---|
| 1792 | + set_target_properties(gmsh PROPERTIES LINK_FLAGS "/STACK:16777216 /SAFESEH:NO")
|
---|
| 1793 | +endif()
|
---|
| 1794 | +
|
---|
| 1795 | +# android target
|
---|
| 1796 | +if(ENABLE_BUILD_ANDROID)
|
---|
| 1797 | + find_file(CMAKE_TOOLCHAIN_FILE "android.toolchain.cmake")
|
---|
| 1798 | + if(NOT CMAKE_TOOLCHAIN_FILE)
|
---|
| 1799 | + message(FATAL_ERROR "Cannot compile Gmsh for android without android-cmake")
|
---|
| 1800 | + endif()
|
---|
| 1801 | + add_definitions(-D_GLIBCXX_USE_C99_MATH=1)
|
---|
| 1802 | + set(CMAKE_BUILD_TYPE Release)
|
---|
| 1803 | + set(LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_CURRENT_BINARY_DIR})
|
---|
| 1804 | + set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/libs/)
|
---|
| 1805 | + add_definitions(-DBUILD_ANDROID)
|
---|
| 1806 | + add_definitions(-DPICOJSON_USE_LOCALE=0)
|
---|
| 1807 | + add_library(androidGmsh SHARED ${GMSH_SRC})
|
---|
| 1808 | + set_target_properties(androidGmsh PROPERTIES OUTPUT_NAME gmsh)
|
---|
| 1809 | + target_link_libraries(androidGmsh ${EXTERNAL_LIBRARIES} ${LAPACK_LIBRARIES})
|
---|
| 1810 | + add_custom_command(TARGET androidGmsh POST_BUILD COMMAND
|
---|
| 1811 | + ${CMAKE_STRIP} ${LIBRARY_OUTPUT_PATH}/libgmsh.so)
|
---|
| 1812 | +endif()
|
---|
| 1813 | +
|
---|
| 1814 | +# parser target
|
---|
| 1815 | +find_program(BISON bison)
|
---|
| 1816 | +find_program(FLEX flex)
|
---|
| 1817 | +if(BISON AND FLEX)
|
---|
| 1818 | + add_custom_target(parser
|
---|
| 1819 | + COMMAND ${BISON} -p gmsh_yy --output Gmsh.tab.cpp -d Gmsh.y
|
---|
| 1820 | + COMMAND ${FLEX} -P gmsh_yy -o Gmsh.yy.cpp Gmsh.l
|
---|
| 1821 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Parser)
|
---|
| 1822 | +endif()
|
---|
| 1823 | +
|
---|
| 1824 | +if(UNIX)
|
---|
| 1825 | + # cannot use cmake's file search functions here (they would only find files
|
---|
| 1826 | + # existing at configuration time)
|
---|
| 1827 | + add_custom_target(purge
|
---|
| 1828 | + COMMAND rm -f `find . -name *~ -o -name *~~`
|
---|
| 1829 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
---|
| 1830 | + add_custom_target(etags
|
---|
| 1831 | + COMMAND etags `find . -name *.cpp -o -name *.h -o -name *.y`
|
---|
| 1832 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
---|
| 1833 | +endif()
|
---|
| 1834 | +
|
---|
| 1835 | +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR
|
---|
| 1836 | + CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
---|
| 1837 | + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion
|
---|
| 1838 | + OUTPUT_VARIABLE CXX_COMPILER_VERSION
|
---|
| 1839 | + OUTPUT_STRIP_TRAILING_WHITESPACE)
|
---|
| 1840 | +else()
|
---|
| 1841 | + set(CXX_COMPILER_VERSION "Unknown")
|
---|
| 1842 | +endif()
|
---|
| 1843 | +
|
---|
| 1844 | +set(WELCOME_FILE ${CMAKE_CURRENT_SOURCE_DIR}/doc/WELCOME.txt)
|
---|
| 1845 | +set(SDK_FILE ${CMAKE_CURRENT_SOURCE_DIR}/doc/SDK.txt)
|
---|
| 1846 | +set(LICENSE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt)
|
---|
| 1847 | +set(CREDITS_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CREDITS.txt)
|
---|
| 1848 | +set(CHANGELOG_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG.txt)
|
---|
| 1849 | +file(GLOB TUTORIAL_GEO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/?*.*)
|
---|
| 1850 | +file(GLOB TUTORIAL_CPP_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/c++/?*.*)
|
---|
| 1851 | +file(GLOB TUTORIAL_C_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/c/?*.*)
|
---|
| 1852 | +file(GLOB TUTORIAL_PY_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/python/?*.*)
|
---|
| 1853 | +file(GLOB TUTORIAL_JL_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/julia/?*.*)
|
---|
| 1854 | +file(GLOB DEMOS ${CMAKE_CURRENT_SOURCE_DIR}/demos/*)
|
---|
| 1855 | +foreach(SUBDIR ${DEMOS})
|
---|
| 1856 | + if(IS_DIRECTORY ${SUBDIR})
|
---|
| 1857 | + list(APPEND DEMOS_DIRS ${SUBDIR})
|
---|
| 1858 | + endif()
|
---|
| 1859 | +endforeach()
|
---|
| 1860 | +set(TEX_DIR ${CMAKE_CURRENT_SOURCE_DIR}/doc/texinfo)
|
---|
| 1861 | +file(GLOB TEX_SRC ${TEX_DIR}/*.texi)
|
---|
| 1862 | +set(TEX_OBJ ${TEX_DIR}/gmsh.aux ${TEX_DIR}/gmsh.cp ${TEX_DIR}/gmsh.cps
|
---|
| 1863 | + ${TEX_DIR}/gmsh.fn ${TEX_DIR}/gmsh.html ${TEX_DIR}/gmsh.info ${TEX_DIR}/gmsh.ky
|
---|
| 1864 | + ${TEX_DIR}/gmsh.log ${TEX_DIR}/gmsh.pdf ${TEX_DIR}/gmsh.pg ${TEX_DIR}/gmsh.toc
|
---|
| 1865 | + ${TEX_DIR}/gmsh.tp ${TEX_DIR}/gmsh.tps ${TEX_DIR}/gmsh.txt ${TEX_DIR}/gmsh.vr)
|
---|
| 1866 | +
|
---|
| 1867 | +macro(unix2dos VARNAME)
|
---|
| 1868 | + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unix2dos)
|
---|
| 1869 | + set(UNIX2DOS_FILES)
|
---|
| 1870 | + foreach(FILE ${${VARNAME}})
|
---|
| 1871 | + file(READ ${FILE} F0)
|
---|
| 1872 | + get_filename_component(N ${FILE} NAME)
|
---|
| 1873 | + if(CYGWIN)
|
---|
| 1874 | + string(REGEX REPLACE "\n" "\r\n" F1 "${F0}")
|
---|
| 1875 | + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/unix2dos/${N} "${F1}")
|
---|
| 1876 | + else() # if not in Cygwin, cmake adds '\r's automatically
|
---|
| 1877 | + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/unix2dos/${N} "${F0}")
|
---|
| 1878 | + endif()
|
---|
| 1879 | + list(APPEND UNIX2DOS_FILES ${CMAKE_CURRENT_BINARY_DIR}/unix2dos/${N})
|
---|
| 1880 | + endforeach()
|
---|
| 1881 | + set(${VARNAME} ${UNIX2DOS_FILES})
|
---|
| 1882 | +endmacro()
|
---|
| 1883 | +
|
---|
| 1884 | +if(WIN32)
|
---|
| 1885 | + if(ENABLE_OS_SPECIFIC_INSTALL)
|
---|
| 1886 | + set(GMSH_BIN .)
|
---|
| 1887 | + set(GMSH_LIB .)
|
---|
| 1888 | + set(GMSH_DOC .)
|
---|
| 1889 | + set(GMSH_MAN .)
|
---|
| 1890 | + set(GMSH_INC .)
|
---|
| 1891 | + else()
|
---|
| 1892 | + include(GNUInstallDirs)
|
---|
| 1893 | + set(GMSH_BIN ${CMAKE_INSTALL_BINDIR})
|
---|
| 1894 | + set(GMSH_LIB ${CMAKE_INSTALL_LIBDIR})
|
---|
| 1895 | + set(GMSH_DOC ${CMAKE_INSTALL_DOCDIR})
|
---|
| 1896 | + set(GMSH_MAN ${CMAKE_INSTALL_MANDIR}/man1)
|
---|
| 1897 | + set(GMSH_INC ${CMAKE_INSTALL_INCLUDEDIR})
|
---|
| 1898 | + endif()
|
---|
| 1899 | + if(CYGWIN)
|
---|
| 1900 | + unix2dos(GMSH_API)
|
---|
| 1901 | + if(ENABLE_PRIVATE_API)
|
---|
| 1902 | + unix2dos(GMSH_PRIVATE_API)
|
---|
| 1903 | + endif()
|
---|
| 1904 | + unix2dos(WELCOME_FILE)
|
---|
| 1905 | + unix2dos(SDK_FILE)
|
---|
| 1906 | + unix2dos(LICENSE_FILE)
|
---|
| 1907 | + unix2dos(CREDITS_FILE)
|
---|
| 1908 | + unix2dos(CHANGELOG_FILE)
|
---|
| 1909 | + unix2dos(TUTORIAL_GEO_FILES)
|
---|
| 1910 | + unix2dos(TUTORIAL_CPP_FILES)
|
---|
| 1911 | + unix2dos(TUTORIAL_C_FILES)
|
---|
| 1912 | + unix2dos(TUTORIAL_PY_FILES)
|
---|
| 1913 | + unix2dos(TUTORIAL_JL_FILES)
|
---|
| 1914 | + foreach(DIR ${DEMOS_DIRS})
|
---|
| 1915 | + file(GLOB DEMO_FILES ${DIR}/?*.*)
|
---|
| 1916 | + unix2dos(DEMO_FILES)
|
---|
| 1917 | + endforeach()
|
---|
| 1918 | + endif()
|
---|
| 1919 | +elseif(APPLE AND ENABLE_OS_SPECIFIC_INSTALL)
|
---|
| 1920 | + # set these so that the files get installed nicely in the MacOSX
|
---|
| 1921 | + # .app bundle
|
---|
| 1922 | + set(GMSH_BIN ../MacOS)
|
---|
| 1923 | + set(GMSH_LIB ../MacOS)
|
---|
| 1924 | + set(GMSH_DOC ../../..)
|
---|
| 1925 | + set(GMSH_MAN ../../..)
|
---|
| 1926 | + set(GMSH_INC ../MacOS)
|
---|
| 1927 | +else()
|
---|
| 1928 | + include(GNUInstallDirs)
|
---|
| 1929 | + set(GMSH_BIN ${CMAKE_INSTALL_BINDIR})
|
---|
| 1930 | + set(GMSH_LIB ${CMAKE_INSTALL_LIBDIR})
|
---|
| 1931 | + set(GMSH_DOC ${CMAKE_INSTALL_DOCDIR})
|
---|
| 1932 | + set(GMSH_MAN ${CMAKE_INSTALL_MANDIR}/man1)
|
---|
| 1933 | + set(GMSH_INC ${CMAKE_INSTALL_INCLUDEDIR})
|
---|
| 1934 | +endif()
|
---|
| 1935 | +
|
---|
| 1936 | +# mark targets as optional so we can install them separately if needed
|
---|
| 1937 | +# (e.g. "make lib" or "make shared" followed by "make install/fast")
|
---|
| 1938 | +install(TARGETS gmsh DESTINATION ${GMSH_BIN} OPTIONAL)
|
---|
| 1939 | +if(ENABLE_BUILD_LIB)
|
---|
| 1940 | + install(TARGETS lib DESTINATION ${GMSH_LIB} OPTIONAL)
|
---|
| 1941 | +endif()
|
---|
| 1942 | +if(ENABLE_BUILD_SHARED OR ENABLE_BUILD_DYNAMIC)
|
---|
| 1943 | + install(TARGETS shared DESTINATION ${GMSH_LIB} OPTIONAL)
|
---|
| 1944 | +endif()
|
---|
| 1945 | +
|
---|
| 1946 | +if(ENABLE_ONELAB)
|
---|
| 1947 | + install(FILES ${ONELAB_PY} DESTINATION ${GMSH_BIN})
|
---|
| 1948 | +endif()
|
---|
| 1949 | +if(ENABLE_BUILD_LIB OR ENABLE_BUILD_SHARED OR ENABLE_BUILD_DYNAMIC)
|
---|
| 1950 | + install(FILES ${GMSH_API} DESTINATION ${GMSH_INC})
|
---|
| 1951 | + install(FILES ${GMSH_PY} DESTINATION ${GMSH_LIB})
|
---|
| 1952 | + install(FILES ${GMSH_JL} DESTINATION ${GMSH_LIB})
|
---|
| 1953 | + if(ENABLE_PRIVATE_API)
|
---|
| 1954 | + install(FILES ${GMSH_PRIVATE_API} DESTINATION ${GMSH_INC}/gmsh)
|
---|
| 1955 | + endif()
|
---|
| 1956 | +endif()
|
---|
| 1957 | +if(INSTALL_SDK_README)
|
---|
| 1958 | + configure_file(${SDK_FILE} ${CMAKE_CURRENT_BINARY_DIR}/README.txt)
|
---|
| 1959 | + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/README.txt DESTINATION .)
|
---|
| 1960 | +endif()
|
---|
| 1961 | +install(FILES ${WELCOME_FILE} DESTINATION ${GMSH_DOC} RENAME README.txt)
|
---|
| 1962 | +install(FILES ${LICENSE_FILE} DESTINATION ${GMSH_DOC})
|
---|
| 1963 | +install(FILES ${CREDITS_FILE} DESTINATION ${GMSH_DOC})
|
---|
| 1964 | +install(FILES ${CHANGELOG_FILE} DESTINATION ${GMSH_DOC})
|
---|
| 1965 | +install(FILES ${TUTORIAL_GEO_FILES} DESTINATION ${GMSH_DOC}/tutorial)
|
---|
| 1966 | +install(FILES ${TUTORIAL_CPP_FILES} DESTINATION ${GMSH_DOC}/tutorial/c++)
|
---|
| 1967 | +install(FILES ${TUTORIAL_C_FILES} DESTINATION ${GMSH_DOC}/tutorial/c)
|
---|
| 1968 | +install(FILES ${TUTORIAL_PY_FILES} DESTINATION ${GMSH_DOC}/tutorial/python)
|
---|
| 1969 | +install(FILES ${TUTORIAL_JL_FILES} DESTINATION ${GMSH_DOC}/tutorial/julia)
|
---|
| 1970 | +foreach(DIR ${DEMOS_DIRS})
|
---|
| 1971 | + get_filename_component(DEMOS_DIR_NAME ${DIR} NAME)
|
---|
| 1972 | + file(GLOB DEMO_FILES ${DIR}/?*.*)
|
---|
| 1973 | + install(FILES ${DEMO_FILES} DESTINATION ${GMSH_DOC}/demos/${DEMOS_DIR_NAME})
|
---|
| 1974 | +endforeach()
|
---|
| 1975 | +if(UNIX AND NOT CYGWIN)
|
---|
| 1976 | + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/doc/gmsh.1 DESTINATION ${GMSH_MAN})
|
---|
| 1977 | +endif()
|
---|
| 1978 | +
|
---|
| 1979 | +add_custom_target(get_headers
|
---|
| 1980 | + COMMAND ${CMAKE_COMMAND} -E make_directory Headers/gmsh
|
---|
| 1981 | + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
---|
| 1982 | +foreach(FILE ${GMSH_API})
|
---|
| 1983 | + add_custom_command(TARGET get_headers POST_BUILD COMMAND ${CMAKE_COMMAND}
|
---|
| 1984 | + -E copy_if_different ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/Headers/
|
---|
| 1985 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
---|
| 1986 | +endforeach()
|
---|
| 1987 | +if(ENABLE_PRIVATE_API)
|
---|
| 1988 | + foreach(FILE ${GMSH_PRIVATE_API})
|
---|
| 1989 | + add_custom_command(TARGET get_headers POST_BUILD COMMAND ${CMAKE_COMMAND}
|
---|
| 1990 | + -E copy_if_different ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/Headers/gmsh/
|
---|
| 1991 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
---|
| 1992 | + endforeach()
|
---|
| 1993 | +endif()
|
---|
| 1994 | +
|
---|
| 1995 | +find_program(MAKEINFO makeinfo)
|
---|
| 1996 | +if(MAKEINFO)
|
---|
| 1997 | + add_custom_command(OUTPUT ${TEX_DIR}/gmsh.info DEPENDS ${TEX_SRC}
|
---|
| 1998 | + COMMAND ${MAKEINFO} --split-size 1000000
|
---|
| 1999 | + ARGS ${TEX_DIR}/gmsh.texi WORKING_DIRECTORY ${TEX_DIR})
|
---|
| 2000 | + add_custom_target(info DEPENDS ${TEX_DIR}/gmsh.info)
|
---|
| 2001 | + add_custom_command(OUTPUT ${TEX_DIR}/gmsh.txt DEPENDS ${TEX_SRC}
|
---|
| 2002 | + COMMAND ${MAKEINFO} --plaintext -o gmsh.txt
|
---|
| 2003 | + ARGS ${TEX_DIR}/gmsh.texi WORKING_DIRECTORY ${TEX_DIR})
|
---|
| 2004 | + add_custom_target(txt DEPENDS ${TEX_DIR}/gmsh.txt)
|
---|
| 2005 | + add_custom_command(OUTPUT ${TEX_DIR}/gmsh.html DEPENDS ${TEX_SRC}
|
---|
| 2006 | + COMMAND ${MAKEINFO} --html --css-ref=/gmsh.css
|
---|
| 2007 | + --no-split --set-customization-variable
|
---|
| 2008 | + EXTRA_HEAD='<meta name="viewport" content="width=device-width,initial-scale=1.0">'
|
---|
| 2009 | + ARGS ${TEX_DIR}/gmsh.texi WORKING_DIRECTORY ${TEX_DIR})
|
---|
| 2010 | + add_custom_target(html DEPENDS ${TEX_DIR}/gmsh.html)
|
---|
| 2011 | + install(FILES ${TEX_DIR}/gmsh.html DESTINATION ${GMSH_DOC} OPTIONAL)
|
---|
| 2012 | +else()
|
---|
| 2013 | + add_custom_target(html COMMAND ${CMAKE_COMMAND} -E touch ${TEX_DIR}/gmsh.html)
|
---|
| 2014 | +endif()
|
---|
| 2015 | +
|
---|
| 2016 | +find_program(TEXI2PDF texi2pdf)
|
---|
| 2017 | +if(TEXI2PDF)
|
---|
| 2018 | + add_custom_command(OUTPUT ${TEX_DIR}/gmsh.pdf DEPENDS ${TEX_SRC}
|
---|
| 2019 | + COMMAND ${TEXI2PDF} ARGS gmsh.texi
|
---|
| 2020 | + WORKING_DIRECTORY ${TEX_DIR})
|
---|
| 2021 | + add_custom_target(pdf DEPENDS ${TEX_DIR}/gmsh.pdf)
|
---|
| 2022 | + install(FILES ${TEX_DIR}/gmsh.pdf DESTINATION ${GMSH_DOC} OPTIONAL)
|
---|
| 2023 | +endif()
|
---|
| 2024 | +
|
---|
| 2025 | +execute_process(COMMAND ${CMAKE_COMMAND} -E echo
|
---|
| 2026 | + "@c This file was generated by cmake: do not edit manually!\n${OPT_TEXI}"
|
---|
| 2027 | + OUTPUT_FILE cmake_options.texi)
|
---|
| 2028 | +
|
---|
| 2029 | +if(MAKEINFO AND TEXI2PDF)
|
---|
| 2030 | + add_custom_target(doc COMMAND ${CMAKE_COMMAND} -E tar zcf
|
---|
| 2031 | + ${CMAKE_CURRENT_BINARY_DIR}/gmsh-${GMSH_VERSION}-doc.tgz
|
---|
| 2032 | + CREDITS.txt LICENSE.txt CHANGELOG.txt
|
---|
| 2033 | + doc/gmsh.1 doc/texinfo/gmsh.html doc/texinfo/gmsh.info
|
---|
| 2034 | + doc/texinfo/gmsh.pdf doc/texinfo/gmsh.txt
|
---|
| 2035 | + COMMAND ${CMAKE_COMMAND} -E remove ${TEX_OBJ}
|
---|
| 2036 | + DEPENDS ${TEX_DIR}/gmsh.info ${TEX_DIR}/gmsh.txt
|
---|
| 2037 | + ${TEX_DIR}/gmsh.html ${TEX_DIR}/gmsh.pdf
|
---|
| 2038 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
---|
| 2039 | +endif()
|
---|
| 2040 | +
|
---|
| 2041 | +if(MAKEINFO OR TEXI2PDF)
|
---|
| 2042 | + add_custom_target(clean_doc COMMAND ${CMAKE_COMMAND} -E remove ${TEX_OBJ})
|
---|
| 2043 | +endif()
|
---|
| 2044 | +
|
---|
| 2045 | +if(APPLE AND ENABLE_BUILD_LIB)
|
---|
| 2046 | + file(READ ${CMAKE_CURRENT_SOURCE_DIR}/utils/misc/gmsh_framework.plist F0)
|
---|
| 2047 | + string(REPLACE GMSH_VERSION "${GMSH_VERSION}" F1 "${F0}")
|
---|
| 2048 | + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/Info_framework.plist "${F1}")
|
---|
| 2049 | + set(LIBNAME $<TARGET_FILE:lib>)
|
---|
| 2050 | + add_custom_target(framework DEPENDS lib
|
---|
| 2051 | + COMMAND ${CMAKE_COMMAND} -E remove_directory gmsh.framework
|
---|
| 2052 | + COMMAND ${CMAKE_COMMAND} -E make_directory gmsh.framework/Headers
|
---|
| 2053 | + COMMAND ${CMAKE_COMMAND} -E make_directory gmsh.framework/Resources
|
---|
| 2054 | + COMMAND ${CMAKE_COMMAND} -E copy ${LIBNAME} gmsh.framework/gmsh
|
---|
| 2055 | + COMMAND ${CMAKE_COMMAND} -E copy Info_framework.plist
|
---|
| 2056 | + gmsh.framework/Resources/Info.plist
|
---|
| 2057 | + COMMAND ${CMAKE_COMMAND} -E create_symlink . gmsh.framework/Headers/gmsh
|
---|
| 2058 | + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
---|
| 2059 | + foreach(FILE ${GMSH_API})
|
---|
| 2060 | + add_custom_command(TARGET framework POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy
|
---|
| 2061 | + ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/gmsh.framework/Headers/
|
---|
| 2062 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
---|
| 2063 | + endforeach()
|
---|
| 2064 | + if(ENABLE_PRIVATE_API)
|
---|
| 2065 | + foreach(FILE ${GMSH_PRIVATE_API})
|
---|
| 2066 | + add_custom_command(TARGET framework POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy
|
---|
| 2067 | + ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/gmsh.framework/Headers/
|
---|
| 2068 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
---|
| 2069 | + endforeach()
|
---|
| 2070 | + endif()
|
---|
| 2071 | +endif()
|
---|
| 2072 | +
|
---|
| 2073 | +set(CPACK_PACKAGE_VENDOR "Christophe Geuzaine and Jean-Francois Remacle")
|
---|
| 2074 | +set(CPACK_PACKAGE_VERSION_MAJOR ${GMSH_MAJOR_VERSION})
|
---|
| 2075 | +set(CPACK_PACKAGE_VERSION_MINOR ${GMSH_MINOR_VERSION})
|
---|
| 2076 | +set(CPACK_PACKAGE_VERSION_PATCH ${GMSH_PATCH_VERSION})
|
---|
| 2077 | +set(CPACK_PACKAGE_DESCRIPTION_FILE ${WELCOME_FILE})
|
---|
| 2078 | +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY
|
---|
| 2079 | + "3D finite element mesh generator with built-in CAD engine and post-processor")
|
---|
| 2080 | +if(GMSH_EXTRA_VERSION MATCHES "-git.*") # so that we'll overwrite the archives
|
---|
| 2081 | + set(CPACK_PACKAGE_FILE_NAME gmsh${GMSH_EXTRA_VERSION_ORIG}-git-${GMSH_OS})
|
---|
| 2082 | + set(CPACK_SOURCE_PACKAGE_FILE_NAME gmsh${GMSH_EXTRA_VERSION_ORIG}-git-source)
|
---|
| 2083 | +else()
|
---|
| 2084 | + set(CPACK_PACKAGE_FILE_NAME gmsh-${GMSH_VERSION}-${GMSH_OS})
|
---|
| 2085 | + set(CPACK_SOURCE_PACKAGE_FILE_NAME gmsh-${GMSH_VERSION}-source)
|
---|
| 2086 | +endif()
|
---|
| 2087 | +set(CPACK_PACKAGE_INSTALL_DIRECTORY "gmsh")
|
---|
| 2088 | +set(CPACK_RESOURCE_FILE_LICENSE ${LICENSE_FILE})
|
---|
| 2089 | +set(CPACK_RESOURCE_FILE_README ${WELCOME_FILE})
|
---|
| 2090 | +set(CPACK_RESOURCE_FILE_WELCOME ${WELCOME_FILE})
|
---|
| 2091 | +set(CPACK_PACKAGE_EXECUTABLE "gmsh")
|
---|
| 2092 | +if(ENABLE_PACKAGE_STRIP)
|
---|
| 2093 | + set(CPACK_STRIP_FILES TRUE)
|
---|
| 2094 | +else()
|
---|
| 2095 | + set(CPACK_STRIP_FILES FALSE)
|
---|
| 2096 | +endif()
|
---|
| 2097 | +set(CPACK_SOURCE_GENERATOR TGZ)
|
---|
| 2098 | +set(CPACK_SOURCE_IGNORE_FILES "${CMAKE_CURRENT_BINARY_DIR}" "/CVS/" "/.svn" "/.git"
|
---|
| 2099 | + "~$" "DS_Store$" "GmshConfig.h$" "GmshVersion.h$" "/benchmarks/" "/tmp/"
|
---|
| 2100 | + "/bin/" "/lib/" "/nightly/" "GPATH" "GRTAGS" "GSYMS" "GTAGS" "/HTML/"
|
---|
| 2101 | + "/contrib/3M/" "/contrib/Parasolid/")
|
---|
| 2102 | +
|
---|
| 2103 | +if(UNIX)
|
---|
| 2104 | + # make sure we remove previous installs before doing the next one (on Mac for
|
---|
| 2105 | + # example "make package; make package_source" would lead to huge file lists
|
---|
| 2106 | + # getting generated due to the 'Applications' symlink in the bundle)
|
---|
| 2107 | + set(CPACK_INSTALL_COMMANDS "rm -rf ${CMAKE_CURRENT_BINARY_DIR}/_CPack_Packages")
|
---|
| 2108 | +endif()
|
---|
| 2109 | +
|
---|
| 2110 | +if(APPLE AND ENABLE_OS_SPECIFIC_INSTALL)
|
---|
| 2111 | + set(CPACK_GENERATOR Bundle)
|
---|
| 2112 | + set(CPACK_BUNDLE_NAME Gmsh)
|
---|
| 2113 | + file(READ ${CMAKE_CURRENT_SOURCE_DIR}/utils/misc/gmsh_app.plist F0)
|
---|
| 2114 | + string(REPLACE GMSH_VERSION "${GMSH_VERSION}" F1 "${F0}")
|
---|
| 2115 | + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/Info.plist "${F1}")
|
---|
| 2116 | + set(CPACK_BUNDLE_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
|
---|
| 2117 | + set(CPACK_BUNDLE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIcons.icns)
|
---|
| 2118 | + if(PACKAGER STREQUAL "geuzaine - removed: we sign on a separate machine")
|
---|
| 2119 | + # codesigning requires CMake >= 3.2
|
---|
| 2120 | + set(CPACK_BUNDLE_APPLE_CERT_APP "Developer ID Application: Christophe Geuzaine")
|
---|
| 2121 | + endif()
|
---|
| 2122 | + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsGeo.icns DESTINATION .
|
---|
| 2123 | + RENAME GmshGeo.icns)
|
---|
| 2124 | + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsMsh.icns DESTINATION .
|
---|
| 2125 | + RENAME GmshMsh.icns)
|
---|
| 2126 | + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsSol.icns DESTINATION .
|
---|
| 2127 | + RENAME GmshSol.icns)
|
---|
| 2128 | + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsPos.icns DESTINATION .
|
---|
| 2129 | + RENAME GmshPos.icns)
|
---|
| 2130 | + set(CPACK_PACKAGE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIcons.icns)
|
---|
| 2131 | +elseif(WIN32)
|
---|
| 2132 | + set(CPACK_GENERATOR ZIP)
|
---|
| 2133 | +else()
|
---|
| 2134 | + set(CPACK_GENERATOR TGZ)
|
---|
| 2135 | +endif()
|
---|
| 2136 | +
|
---|
| 2137 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/utils/wrappers/gmshpy AND
|
---|
| 2138 | + ENABLE_PRIVATE_API AND ENABLE_WRAP_PYTHON AND HAVE_PYTHON)
|
---|
| 2139 | + add_subdirectory(utils/wrappers/gmshpy)
|
---|
| 2140 | +endif()
|
---|
| 2141 | +
|
---|
| 2142 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/utils/wrappers/java AND
|
---|
| 2143 | + ENABLE_PRIVATE_API AND ENABLE_WRAP_JAVA)
|
---|
| 2144 | + add_subdirectory(utils/wrappers/java)
|
---|
| 2145 | +endif()
|
---|
| 2146 | +
|
---|
| 2147 | +include(CPack)
|
---|
| 2148 | +
|
---|
| 2149 | +macro(filter_tests IN OUT)
|
---|
| 2150 | + unset(${OUT})
|
---|
| 2151 | + foreach(FILE ${IN})
|
---|
| 2152 | + unset(BAD1)
|
---|
| 2153 | + unset(BAD2)
|
---|
| 2154 | + unset(BAD3)
|
---|
| 2155 | + # OS-specific
|
---|
| 2156 | + if(${GMSH_OS} MATCHES "Linux32")
|
---|
| 2157 | + # OCC STL generation crashes on our Linux32 docker
|
---|
| 2158 | + string(REGEX MATCH "t18" BAD1 ${FILE})
|
---|
| 2159 | + endif()
|
---|
| 2160 | + # OpenCASCADE
|
---|
| 2161 | + if(NOT HAVE_OCC AND NOT BAD1 AND NOT BAD2 AND NOT BAD3)
|
---|
| 2162 | + file(STRINGS ${FILE} BAD1 REGEX "^SetFactory.*OpenCASCADE.*")
|
---|
| 2163 | + file(STRINGS ${FILE} BAD2 REGEX ".*occ\\.synchronize.*")
|
---|
| 2164 | + file(STRINGS ${FILE} BAD3 REGEX ".*occ::synchronize.*")
|
---|
| 2165 | + endif()
|
---|
| 2166 | + # Metis
|
---|
| 2167 | + if(NOT HAVE_METIS AND NOT BAD1 AND NOT BAD2 AND NOT BAD3)
|
---|
| 2168 | + file(STRINGS ${FILE} BAD1 REGEX ".*PartitionMesh.*")
|
---|
| 2169 | + file(STRINGS ${FILE} BAD2 REGEX ".*mesh\\.partition.*")
|
---|
| 2170 | + file(STRINGS ${FILE} BAD3 REGEX ".*mesh::partition.*")
|
---|
| 2171 | + endif()
|
---|
| 2172 | + if(BAD1 OR BAD2 OR BAD3)
|
---|
| 2173 | + message("Skipping test " ${FILE})
|
---|
| 2174 | + else()
|
---|
| 2175 | + list(APPEND ${OUT} ${FILE})
|
---|
| 2176 | + endif()
|
---|
| 2177 | + endforeach()
|
---|
| 2178 | +endmacro()
|
---|
| 2179 | +
|
---|
| 2180 | +if(NOT DISABLE_GMSH_TESTS)
|
---|
| 2181 | + # disabling tests is useful when including this CMakeLists in an external project
|
---|
| 2182 | + include(CTest)
|
---|
| 2183 | + file(GLOB_RECURSE ALLFILES
|
---|
| 2184 | + tutorial/*.geo demos/*.geo benchmarks/?d/*.geo benchmarks/extrude/*.geo
|
---|
| 2185 | + benchmarks/occ/*.geo)
|
---|
| 2186 | + filter_tests("${ALLFILES}" TESTFILES)
|
---|
| 2187 | + foreach(TESTFILE ${TESTFILES})
|
---|
| 2188 | + # use relative path for Cygwin/MinGW (the pure win exe built with the MinGW
|
---|
| 2189 | + # compilers does not understand a full Cygwin-style path)
|
---|
| 2190 | + FILE(RELATIVE_PATH TEST ${CMAKE_CURRENT_BINARY_DIR} ${TESTFILE})
|
---|
| 2191 | + add_test(${TEST} ./gmsh ${TEST} -3 -nopopup -o ./tmp.msh)
|
---|
| 2192 | + endforeach()
|
---|
| 2193 | + # test c++ api tutorials with dynamic builds (except on 32 bit windows for
|
---|
| 2194 | + # now: our win32 setup does not currently handle exceptions)
|
---|
| 2195 | + if(ENABLE_BUILD_DYNAMIC AND NOT ${GMSH_OS} MATCHES "Windows32")
|
---|
| 2196 | + file(GLOB_RECURSE ALLFILES tutorial/c++/*.cpp)
|
---|
| 2197 | + filter_tests("${ALLFILES}" TESTFILES)
|
---|
| 2198 | + foreach(TESTFILE ${TESTFILES})
|
---|
| 2199 | + get_filename_component(TEST ${TESTFILE} NAME_WE)
|
---|
| 2200 | + add_executable(${TEST} WIN32 ${TESTFILE})
|
---|
| 2201 | + target_link_libraries(${TEST} shared)
|
---|
| 2202 | + if(WIN32 AND NOT MSVC)
|
---|
| 2203 | + set(FLAGS "-static")
|
---|
| 2204 | + if(HAVE_FLTK)
|
---|
| 2205 | + set(FLAGS "${FLAGS} -mwindows")
|
---|
| 2206 | + else()
|
---|
| 2207 | + set(FLAGS "${FLAGS} -mconsole")
|
---|
| 2208 | + endif()
|
---|
| 2209 | + set_target_properties(${TEST} PROPERTIES LINK_FLAGS "${FLAGS}")
|
---|
| 2210 | + endif()
|
---|
| 2211 | + add_test(${TEST}_cpp ${TEST} -nopopup)
|
---|
| 2212 | + endforeach()
|
---|
| 2213 | + endif()
|
---|
| 2214 | + # enable this once we have worked out the path issues on the build machines
|
---|
| 2215 | + if(0 AND ENABLE_BUILD_DYNAMIC)
|
---|
| 2216 | + find_package(PythonInterp)
|
---|
| 2217 | + if(PYTHONINTERP_FOUND)
|
---|
| 2218 | + file(GLOB_RECURSE ALLFILES tutorial/python/*.py demos/api/*.py)
|
---|
| 2219 | + filter_tests("${ALLFILES}" TESTFILES)
|
---|
| 2220 | + foreach(TESTFILE ${TESTFILES})
|
---|
| 2221 | + get_filename_component(TEST ${TESTFILE} NAME_WE)
|
---|
| 2222 | + add_test(NAME ${TEST}_py COMMAND ${PYTHON_EXECUTABLE} ${TESTFILE} -nopopup)
|
---|
| 2223 | + set_property(TEST ${TEST}_py APPEND PROPERTY ENVIRONMENT
|
---|
| 2224 | + "PYTHONPATH=${CMAKE_SOURCE_DIR}/api")
|
---|
| 2225 | + set_property(TEST ${TEST}_py APPEND PROPERTY ENVIRONMENT
|
---|
| 2226 | + "LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}")
|
---|
| 2227 | + endforeach()
|
---|
| 2228 | + endif()
|
---|
| 2229 | + endif()
|
---|
| 2230 | +endif()
|
---|
| 2231 | +
|
---|
| 2232 | +message(STATUS "")
|
---|
| 2233 | +message(STATUS "Gmsh ${GMSH_VERSION} has been configured for ${GMSH_OS}")
|
---|
| 2234 | +message(STATUS "")
|
---|
| 2235 | +message(STATUS " * Build options:" ${GMSH_CONFIG_OPTIONS})
|
---|
| 2236 | +message(STATUS " * Build type: " ${CMAKE_BUILD_TYPE})
|
---|
| 2237 | +message(STATUS " * C compiler: " ${CMAKE_C_COMPILER})
|
---|
| 2238 | +message(STATUS " * C++ compiler: " ${CMAKE_CXX_COMPILER})
|
---|
| 2239 | +message(STATUS " * Install prefix: " ${CMAKE_INSTALL_PREFIX})
|
---|
| 2240 | +message(STATUS "")
|
---|
| 2241 | +
|
---|
| 2242 | +mark_as_advanced(ANN_INC ANN_LIB CAIRO_LIB CAIRO_INC CGNS_INC GMM_INC
|
---|
| 2243 | + GMP_INC GMP_LIB MMG_INC MMG_LIB HDF5_LIB
|
---|
| 2244 | + MED_LIB OCC_INC SZ_LIB
|
---|
| 2245 | + PETSC_LIBS SLEPC_INC SLEPC_INC2 SLEPC_LIB
|
---|
| 2246 | + BISON FLEX MAKEINFO TEXI2PDF FLTK_CONFIG_SCRIPT
|
---|
| 2247 | + GMSH_EXTERNAL_INCLUDE_DIRS GMSH_EXTERNAL_LIBRARIES)
|
---|
| 2248 | Index: ../trunk-jpl/externalpackages/gmsh/configs/4.5.6/static/CMakeLists.txt
|
---|
| 2249 | ===================================================================
|
---|
| 2250 | --- ../trunk-jpl/externalpackages/gmsh/configs/4.5.6/static/CMakeLists.txt (nonexistent)
|
---|
| 2251 | +++ ../trunk-jpl/externalpackages/gmsh/configs/4.5.6/static/CMakeLists.txt (revision 25791)
|
---|
| 2252 | @@ -0,0 +1,2141 @@
|
---|
| 2253 | +# Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle
|
---|
| 2254 | +#
|
---|
| 2255 | +# See the LICENSE.txt file for license information. Please report all
|
---|
| 2256 | +# issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
|
---|
| 2257 | +
|
---|
| 2258 | +cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
|
---|
| 2259 | +
|
---|
| 2260 | +# do not warn about non-definition of WIN32 on Cygwin
|
---|
| 2261 | +set(CMAKE_LEGACY_CYGWIN_WIN32 0)
|
---|
| 2262 | +
|
---|
| 2263 | +# if CMAKE_BUILD_TYPE is specified use it; otherwise set the default
|
---|
| 2264 | +# build type to "RelWithDebInfo" ("-O2 -g" with gcc) prior to calling
|
---|
| 2265 | +# project()
|
---|
| 2266 | +if(DEFINED CMAKE_BUILD_TYPE)
|
---|
| 2267 | + set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Choose build type")
|
---|
| 2268 | +else()
|
---|
| 2269 | + set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose build type")
|
---|
| 2270 | +endif()
|
---|
| 2271 | +
|
---|
| 2272 | +project(gmsh CXX C)
|
---|
| 2273 | +
|
---|
| 2274 | +# this variable controls the default value of the options which are normally set
|
---|
| 2275 | +# to ON (useful if you want to configure a minimal version of Gmsh: e.g. "cmake
|
---|
| 2276 | +# -DDEFAULT=0 -DENABLE_POST=1 -DENABLE_PARSER=1")
|
---|
| 2277 | +set(DEFAULT ON CACHE INTERNAL "Default value for enabled-by-default options")
|
---|
| 2278 | +
|
---|
| 2279 | +macro(opt OPTION HELP VALUE)
|
---|
| 2280 | + option(ENABLE_${OPTION} ${HELP} ${VALUE})
|
---|
| 2281 | + set(OPT_TEXI "${OPT_TEXI}\n@item ENABLE_${OPTION}\n${HELP} (default: ${VALUE})")
|
---|
| 2282 | +endmacro()
|
---|
| 2283 | +
|
---|
| 2284 | +opt(3M "Enable proprietary 3M extension" OFF)
|
---|
| 2285 | +opt(ACIS "Enable ACIS geometrical models (experimental)" ${DEFAULT})
|
---|
| 2286 | +opt(ALGLIB "Enable ALGLIB (used by some mesh optimizers)" ${DEFAULT})
|
---|
| 2287 | +opt(ANN "Enable ANN (used for fast point search in mesh/post)" ${DEFAULT})
|
---|
| 2288 | +opt(BAMG "Enable Bamg 2D anisotropic mesh generator" ${DEFAULT})
|
---|
| 2289 | +opt(BLAS_LAPACK "Enable BLAS/Lapack for linear algebra (required for meshing)" ON)
|
---|
| 2290 | +opt(BLOSSOM "Enable Blossom algorithm (needed for full quad meshing)" ${DEFAULT})
|
---|
| 2291 | +opt(BUILD_LIB "Enable 'lib' target for building static Gmsh library" OFF)
|
---|
| 2292 | +opt(BUILD_SHARED "Enable 'shared' target for building shared Gmsh library" OFF)
|
---|
| 2293 | +opt(BUILD_DYNAMIC "Enable dynamic Gmsh executable (linked with shared library)" OFF)
|
---|
| 2294 | +opt(BUILD_ANDROID "Enable Android NDK library target (experimental)" OFF)
|
---|
| 2295 | +opt(BUILD_IOS "Enable iOS library target (experimental)" OFF)
|
---|
| 2296 | +opt(CGNS "Enable CGNS import/export (experimental)" ${DEFAULT})
|
---|
| 2297 | +opt(CGNS_CPEX0045 "Enable high-order CGNS import/export following CPEX0045 (experimental)" OFF)
|
---|
| 2298 | +opt(CAIRO "Enable Cairo to render fonts (experimental)" ${DEFAULT})
|
---|
| 2299 | +opt(CXX11 "Enable C++11" ON)
|
---|
| 2300 | +opt(C99 "Enable C99" ON)
|
---|
| 2301 | +opt(PROFILE "Enable profiling compiler flags" OFF)
|
---|
| 2302 | +opt(DINTEGRATION "Enable discrete integration (needed for levelsets)" ${DEFAULT})
|
---|
| 2303 | +opt(DOMHEX "Enable experimental DOMHEX code" ${DEFAULT})
|
---|
| 2304 | +opt(FLTK "Enable FLTK graphical user interface (requires mesh/post)" ${DEFAULT})
|
---|
| 2305 | +opt(GETDP "Enable GetDP solver (linked as a library, experimental)" ${DEFAULT})
|
---|
| 2306 | +opt(GMM "Enable GMM linear solvers (simple alternative to PETSc)" ${DEFAULT})
|
---|
| 2307 | +opt(GMP "Enable GMP for Kbipack (advanced)" ON)
|
---|
| 2308 | +opt(GRAPHICS "Enable building graphics lib even without GUI (advanced)" OFF)
|
---|
| 2309 | +opt(HXT "Enable HXT library (for reparametrization and meshing)" ${DEFAULT})
|
---|
| 2310 | +opt(KBIPACK "Enable Kbipack (neeeded by homology solver)" ${DEFAULT})
|
---|
| 2311 | +opt(MATHEX "Enable Mathex expression parser (used by plugins and options)" ${DEFAULT})
|
---|
| 2312 | +opt(MED "Enable MED mesh and post file formats" ${DEFAULT})
|
---|
| 2313 | +opt(MESH "Enable mesh module (required by GUI)" ${DEFAULT})
|
---|
| 2314 | +opt(METIS "Enable Metis mesh partitioner" ${DEFAULT})
|
---|
| 2315 | +opt(MMG3D "Enable MMG3D 3D anisotropic mesh refinement" ${DEFAULT})
|
---|
| 2316 | +opt(MPEG_ENCODE "Enable built-in MPEG movie encoder" ${DEFAULT})
|
---|
| 2317 | +opt(MPI "Enable MPI (experimental, not used for meshing)" OFF)
|
---|
| 2318 | +opt(MSVC_STATIC_RUNTIME "Enable static Visual C++ runtime" OFF)
|
---|
| 2319 | +opt(MUMPS "Enable MUMPS sparse direct linear solver" OFF)
|
---|
| 2320 | +opt(NETGEN "Enable Netgen 3D frontal mesh generator" ${DEFAULT})
|
---|
| 2321 | +opt(NUMPY "Enable fullMatrix and numpy array conversion for private API" OFF)
|
---|
| 2322 | +opt(PETSC4PY "Enable petsc4py wrappers for petsc matrices for private API" OFF)
|
---|
| 2323 | +opt(OCC "Enable OpenCASCADE CAD kernel" ${DEFAULT})
|
---|
| 2324 | +opt(OCC_CAF "Enable OpenCASCADE CAF module (for STEP/IGES attributes)" ${DEFAULT})
|
---|
| 2325 | +opt(OCC_STATIC "Link OpenCASCADE static instead of dynamic libraries (requires ENABLE_OCC)" OFF)
|
---|
| 2326 | +opt(OCC_TBB "Add TBB libraries in list of OCC libraries" OFF)
|
---|
| 2327 | +opt(ONELAB "Enable ONELAB solver interface" ${DEFAULT})
|
---|
| 2328 | +opt(ONELAB_METAMODEL "Enable ONELAB metamodels (experimental)" ${DEFAULT})
|
---|
| 2329 | +opt(OPENACC "Enable OpenACC" OFF)
|
---|
| 2330 | +opt(OPENMP "Enable OpenMP" OFF)
|
---|
| 2331 | +opt(OPTHOM "Enable high-order mesh optimization tools" ${DEFAULT})
|
---|
| 2332 | +opt(OS_SPECIFIC_INSTALL "Enable OS-specific (e.g. app bundle) installation" OFF)
|
---|
| 2333 | +opt(OSMESA "Enable OSMesa for offscreen rendering (experimental)" OFF)
|
---|
| 2334 | +opt(P4EST "Enable p4est for enabling automatic mesh size firld (experimental)" OFF)
|
---|
| 2335 | +opt(PACKAGE_STRIP "Strip symbols in install packages to reduce install size" ON)
|
---|
| 2336 | +opt(PARSER "Enable GEO file parser (required for .geo/.pos files)" ${DEFAULT})
|
---|
| 2337 | +opt(PETSC "Enable PETSc linear solvers (required for SLEPc)" OFF)
|
---|
| 2338 | +opt(PLUGINS "Enable post-processing plugins" ${DEFAULT})
|
---|
| 2339 | +opt(POST "Enable post-processing module (required by GUI)" ${DEFAULT})
|
---|
| 2340 | +opt(POPPLER "Enable Poppler for displaying PDF documents (experimental)" OFF)
|
---|
| 2341 | +opt(PRIVATE_API "Enable private API" OFF)
|
---|
| 2342 | +opt(QUADTRI "Enable QuadTri structured meshing extensions" ${DEFAULT})
|
---|
| 2343 | +opt(REVOROPT "Enable Revoropt (used for CVT remeshing)" OFF)
|
---|
| 2344 | +opt(SLEPC "Enable SLEPc eigensolvers" OFF)
|
---|
| 2345 | +opt(SOLVER "Enable built-in finite element solvers (required for compounds)" ${DEFAULT})
|
---|
| 2346 | +opt(SYSTEM_CONTRIB "Use system versions of contrib libraries, when possible" OFF)
|
---|
| 2347 | +opt(TCMALLOC "Enable libtcmalloc (fast malloc that does not release memory)" OFF)
|
---|
| 2348 | +opt(TOUCHBAR "Enable Apple Touch bar" ${DEFAULT})
|
---|
| 2349 | +opt(VISUDEV "Enable additional visualization capabilities for development purposes" OFF)
|
---|
| 2350 | +opt(VOROPP "Enable voro++ (for hex meshing, experimental)" ${DEFAULT})
|
---|
| 2351 | +opt(WRAP_JAVA "Enable generation of Java wrappers for private API" OFF)
|
---|
| 2352 | +opt(WRAP_PYTHON "Enable generation of Python wrappers for private API" OFF)
|
---|
| 2353 | +opt(ZIPPER "Enable Zip file compression/decompression" OFF)
|
---|
| 2354 | +
|
---|
| 2355 | +set(GMSH_MAJOR_VERSION 4)
|
---|
| 2356 | +set(GMSH_MINOR_VERSION 5)
|
---|
| 2357 | +set(GMSH_PATCH_VERSION 6)
|
---|
| 2358 | +set(GMSH_EXTRA_VERSION "")
|
---|
| 2359 | +set(GMSH_EXTRA_VERSION_TEXI "${GMSH_EXTRA_VERSION}")
|
---|
| 2360 | +
|
---|
| 2361 | +if(NOT GMSH_RELEASE)
|
---|
| 2362 | + find_package(Git)
|
---|
| 2363 | + if(GIT_FOUND)
|
---|
| 2364 | + execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --format=%h
|
---|
| 2365 | + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ERROR_QUIET
|
---|
| 2366 | + OUTPUT_VARIABLE GIT_COMMIT_HASH
|
---|
| 2367 | + OUTPUT_STRIP_TRAILING_WHITESPACE)
|
---|
| 2368 | + endif()
|
---|
| 2369 | + if(GIT_COMMIT_HASH)
|
---|
| 2370 | + set(GMSH_EXTRA_VERSION "${GMSH_EXTRA_VERSION}-git-${GIT_COMMIT_HASH}")
|
---|
| 2371 | + endif()
|
---|
| 2372 | + set(GMSH_EXTRA_VERSION_TEXI "${GMSH_EXTRA_VERSION_TEXI} (development version)")
|
---|
| 2373 | +endif()
|
---|
| 2374 | +
|
---|
| 2375 | +set(GMSH_VERSION "${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION}")
|
---|
| 2376 | +set(GMSH_VERSION "${GMSH_VERSION}.${GMSH_PATCH_VERSION}${GMSH_EXTRA_VERSION}")
|
---|
| 2377 | +set(GMSH_SHORT_LICENSE "GNU General Public License")
|
---|
| 2378 | +
|
---|
| 2379 | +set(GMSH_API api/gmsh.h api/gmshc.h api/gmsh.h_cwrap)
|
---|
| 2380 | +
|
---|
| 2381 | +if(ENABLE_PRIVATE_API)
|
---|
| 2382 | + message(WARNING "The private API is unsupported and undocumented. It is meant "
|
---|
| 2383 | + "for expert Gmsh developers, not for regular Gmsh users, who should rely "
|
---|
| 2384 | + "on the stable public API (gmsh/api) instead. If you are repackaging Gmsh, "
|
---|
| 2385 | + "e.g. for a Linux distribution, please DO NOT distribute the private API "
|
---|
| 2386 | + "(i.e. all the internal headers) and ship the stable public API instead "
|
---|
| 2387 | + "(i.e. only the headers and modules in gmsh/api).")
|
---|
| 2388 | + file(GLOB_RECURSE HEADERS Common/*.h Numeric/*.h Geo/*.h Mesh/*.h Solver/*.h
|
---|
| 2389 | + Post/*.h Graphics/*.h contrib/kbipack/*.h contrib/DiscreteIntegration/*.h
|
---|
| 2390 | + contrib/HighOrderMeshOptimizer/*.h contrib/MeshOptimizer/*.h
|
---|
| 2391 | + contrib/MeshQualityOptimizer/*.h)
|
---|
| 2392 | + set(GMSH_PRIVATE_API ${CMAKE_CURRENT_BINARY_DIR}/Common/GmshConfig.h
|
---|
| 2393 | + ${CMAKE_CURRENT_BINARY_DIR}/Common/GmshVersion.h ${HEADERS})
|
---|
| 2394 | + get_property(IAMCHILD DIRECTORY PROPERTY PARENT_DIRECTORY)
|
---|
| 2395 | + if(IAMCHILD)
|
---|
| 2396 | + set(GMSH_PRIVATE_API ${GMSH_PRIVATE_API} PARENT_SCOPE)
|
---|
| 2397 | + endif()
|
---|
| 2398 | +endif()
|
---|
| 2399 | +
|
---|
| 2400 | +set(ONELAB_PY contrib/onelab/python/onelab.py)
|
---|
| 2401 | +set(GMSH_PY api/gmsh.py)
|
---|
| 2402 | +set(GMSH_JL api/gmsh.jl)
|
---|
| 2403 | +
|
---|
| 2404 | +if(${CMAKE_MAJOR_VERSION} GREATER 2)
|
---|
| 2405 | + string(TIMESTAMP DATE "%Y%m%d")
|
---|
| 2406 | +else()
|
---|
| 2407 | + execute_process(COMMAND date "+%Y%m%d" OUTPUT_VARIABLE DATE
|
---|
| 2408 | + OUTPUT_STRIP_TRAILING_WHITESPACE)
|
---|
| 2409 | +endif()
|
---|
| 2410 | +
|
---|
| 2411 | +if(NOT DATE)
|
---|
| 2412 | + set(DATE "unknown")
|
---|
| 2413 | +endif()
|
---|
| 2414 | +set(GMSH_DATE "${DATE}")
|
---|
| 2415 | +
|
---|
| 2416 | +if(NOT GMSH_HOST)
|
---|
| 2417 | + execute_process(COMMAND hostname OUTPUT_VARIABLE HOSTNAME
|
---|
| 2418 | + OUTPUT_STRIP_TRAILING_WHITESPACE)
|
---|
| 2419 | + if(NOT HOSTNAME)
|
---|
| 2420 | + set(HOSTNAME "unknown")
|
---|
| 2421 | + endif()
|
---|
| 2422 | + set(GMSH_HOST "${HOSTNAME}")
|
---|
| 2423 | +endif()
|
---|
| 2424 | +
|
---|
| 2425 | +if(NOT GMSH_PACKAGER)
|
---|
| 2426 | + execute_process(COMMAND whoami OUTPUT_VARIABLE PACKAGER
|
---|
| 2427 | + OUTPUT_STRIP_TRAILING_WHITESPACE)
|
---|
| 2428 | + if(NOT PACKAGER)
|
---|
| 2429 | + set(PACKAGER "unknown")
|
---|
| 2430 | + endif()
|
---|
| 2431 | + string(REPLACE "\\" " " PACKAGER ${PACKAGER})
|
---|
| 2432 | + set(GMSH_PACKAGER "${PACKAGER}")
|
---|
| 2433 | +endif()
|
---|
| 2434 | +
|
---|
| 2435 | +if(APPLE)
|
---|
| 2436 | + set(GMSH_OS "MacOSX")
|
---|
| 2437 | +elseif(CYGWIN OR MSYS)
|
---|
| 2438 | + # detect if we use the MinGW compilers on Cygwin - if we do, handle the build
|
---|
| 2439 | + # as a pure Windows build
|
---|
| 2440 | + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR
|
---|
| 2441 | + CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
---|
| 2442 | + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine
|
---|
| 2443 | + OUTPUT_VARIABLE CXX_COMPILER_MACHINE
|
---|
| 2444 | + OUTPUT_STRIP_TRAILING_WHITESPACE)
|
---|
| 2445 | + if(CXX_COMPILER_MACHINE MATCHES "mingw")
|
---|
| 2446 | + set(GMSH_OS "Windows")
|
---|
| 2447 | + set(WIN32 1)
|
---|
| 2448 | + add_definitions(-DWIN32)
|
---|
| 2449 | + endif()
|
---|
| 2450 | + endif()
|
---|
| 2451 | +else()
|
---|
| 2452 | + set(GMSH_OS "${CMAKE_SYSTEM_NAME}")
|
---|
| 2453 | +endif()
|
---|
| 2454 | +
|
---|
| 2455 | +include(CheckTypeSize)
|
---|
| 2456 | +include(CheckFunctionExists)
|
---|
| 2457 | +include(CheckIncludeFile)
|
---|
| 2458 | +include(CheckCXXCompilerFlag)
|
---|
| 2459 | +include(CheckCCompilerFlag)
|
---|
| 2460 | +
|
---|
| 2461 | +macro(set_config_option VARNAME STRING)
|
---|
| 2462 | + set(${VARNAME} TRUE)
|
---|
| 2463 | + list(APPEND CONFIG_OPTIONS ${STRING})
|
---|
| 2464 | + message(STATUS "Found " ${STRING})
|
---|
| 2465 | +endmacro()
|
---|
| 2466 | +
|
---|
| 2467 | +# check if the machine is 64 bits (this is more reliable than using
|
---|
| 2468 | +# CMAKE_SIZEOF_VOID_P, which does not seem to work e.g. on some Suse
|
---|
| 2469 | +# machines)
|
---|
| 2470 | +check_type_size("void*" SIZEOF_VOID_P)
|
---|
| 2471 | +if(SIZEOF_VOID_P EQUAL 8)
|
---|
| 2472 | + set_config_option(HAVE_64BIT_SIZE_T "64Bit")
|
---|
| 2473 | +endif()
|
---|
| 2474 | +
|
---|
| 2475 | +# append 32/64 to the build name on Linux and Windows
|
---|
| 2476 | +if(NOT APPLE)
|
---|
| 2477 | + if(HAVE_64BIT_SIZE_T)
|
---|
| 2478 | + set(GMSH_OS "${GMSH_OS}64")
|
---|
| 2479 | + else()
|
---|
| 2480 | + set(GMSH_OS "${GMSH_OS}32")
|
---|
| 2481 | + endif()
|
---|
| 2482 | +endif()
|
---|
| 2483 | +
|
---|
| 2484 | +if(NOT ENABLE_BUILD_SHARED)
|
---|
| 2485 | + if(ENABLE_WRAP_PYTHON OR ENABLE_WRAP_JAVA)
|
---|
| 2486 | + set(ENABLE_BUILD_DYNAMIC ON)
|
---|
| 2487 | + endif()
|
---|
| 2488 | +endif()
|
---|
| 2489 | +
|
---|
| 2490 | +if(ENABLE_BUILD_DYNAMIC)
|
---|
| 2491 | + set(GMSH_OS "${GMSH_OS}-sdk")
|
---|
| 2492 | +endif()
|
---|
| 2493 | +
|
---|
| 2494 | +if(APPLE)
|
---|
| 2495 | + # FIXME: change this once we understand rpaths - the options below do not work
|
---|
| 2496 | + set(CMAKE_MACOSX_RPATH 0)
|
---|
| 2497 | +else()
|
---|
| 2498 | + # make sure that dynamic libraries can be found when installing/ displacing the
|
---|
| 2499 | + # binaries: from https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/
|
---|
| 2500 | + # RPATH-handling:
|
---|
| 2501 | +
|
---|
| 2502 | + # use, i.e. don't skip the full RPATH for the build tree
|
---|
| 2503 | + set(CMAKE_SKIP_BUILD_RPATH FALSE)
|
---|
| 2504 | +
|
---|
| 2505 | + # when building, don't use the install RPATH already (but later on when
|
---|
| 2506 | + # installing)
|
---|
| 2507 | + set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
|
---|
| 2508 | + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
|
---|
| 2509 | +
|
---|
| 2510 | + # add the automatically determined parts of the RPATH which point to
|
---|
| 2511 | + # directories outside the build tree to the install RPATH
|
---|
| 2512 | + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
---|
| 2513 | +
|
---|
| 2514 | + # the RPATH to be used when installing, but only if it's not a system directory
|
---|
| 2515 | + list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib"
|
---|
| 2516 | + isSystemDir)
|
---|
| 2517 | + if("${isSystemDir}" STREQUAL "-1")
|
---|
| 2518 | + set(CMAKE_INSTALL_RPATH "\\\$ORIGIN/../lib")
|
---|
| 2519 | + endif()
|
---|
| 2520 | +endif()
|
---|
| 2521 | +
|
---|
| 2522 | +if(MSVC)
|
---|
| 2523 | + # remove annoying warning about bool/int cast performance
|
---|
| 2524 | + set(GMSH_CONFIG_PRAGMAS "#pragma warning(disable:4800 4244 4267)")
|
---|
| 2525 | + foreach(VAR
|
---|
| 2526 | + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
|
---|
| 2527 | + CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
---|
| 2528 | + CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
---|
| 2529 | + CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
|
---|
| 2530 | + if(ENABLE_MSVC_STATIC_RUNTIME AND ${VAR} MATCHES "/MD")
|
---|
| 2531 | + string(REGEX REPLACE "/MD" "/MT" ${VAR} "${${VAR}}")
|
---|
| 2532 | + endif()
|
---|
| 2533 | + if(NOT ${VAR} MATCHES "/MP") # enable parallel compilation
|
---|
| 2534 | + set(${VAR} "${${VAR}} /MP")
|
---|
| 2535 | + endif()
|
---|
| 2536 | + endforeach()
|
---|
| 2537 | + if(ENABLE_PRIVATE_API)
|
---|
| 2538 | + if(ENABLE_BUILD_DYNAMIC OR ENABLE_BUILD_SHARED)
|
---|
| 2539 | + # automatically export .def file with all symbols (requires CMake 3.4);
|
---|
| 2540 | + # depending on the compiling options this might lead to more than 64k export
|
---|
| 2541 | + # symbols; just trim the .def file to keep the ones you need
|
---|
| 2542 | + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
|
---|
| 2543 | + endif()
|
---|
| 2544 | + endif()
|
---|
| 2545 | +endif()
|
---|
| 2546 | +
|
---|
| 2547 | +if(ENABLE_OPENMP)
|
---|
| 2548 | + find_package(OpenMP)
|
---|
| 2549 | + if(OpenMP_FOUND)
|
---|
| 2550 | + set_config_option(HAVE_OPENMP "OpenMP")
|
---|
| 2551 | + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
|
---|
| 2552 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
|
---|
| 2553 | + elseif(APPLE AND EXISTS "/opt/local/lib/libomp")
|
---|
| 2554 | + # just for testing the official Apple compiler with macports' libomp
|
---|
| 2555 | + set_config_option(HAVE_OPENMP "OpenMP[MacPorts]")
|
---|
| 2556 | + set(CMAKE_C_FLAGS
|
---|
| 2557 | + "${CMAKE_C_FLAGS} -Xpreprocessor -fopenmp -I/opt/local/include/libomp")
|
---|
| 2558 | + set(CMAKE_CXX_FLAGS
|
---|
| 2559 | + "${CMAKE_CXX_FLAGS} -Xpreprocessor -fopenmp -I/opt/local/include/libomp")
|
---|
| 2560 | + list(APPEND EXTERNAL_LIBRARIES "-L/opt/local/lib/libomp -lomp")
|
---|
| 2561 | + elseif(APPLE AND EXISTS "/usr/local/lib/libomp.dylib")
|
---|
| 2562 | + set_config_option(HAVE_OPENMP "OpenMP[usr/local]")
|
---|
| 2563 | + set(CMAKE_C_FLAGS
|
---|
| 2564 | + "${CMAKE_C_FLAGS} -Xpreprocessor -fopenmp")
|
---|
| 2565 | + set(CMAKE_CXX_FLAGS
|
---|
| 2566 | + "${CMAKE_CXX_FLAGS} -Xpreprocessor -fopenmp")
|
---|
| 2567 | + list(APPEND EXTERNAL_LIBRARIES "-lomp")
|
---|
| 2568 | + endif()
|
---|
| 2569 | +endif()
|
---|
| 2570 | +
|
---|
| 2571 | +if(ENABLE_OPENACC)
|
---|
| 2572 | + find_package(OpenACC)
|
---|
| 2573 | + if(OpenACC_C_FOUND AND OpenACC_CXX_FOUND)
|
---|
| 2574 | + set_config_option(HAVE_OPENACC "OpenACC")
|
---|
| 2575 | + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenACC_C_FLAGS}")
|
---|
| 2576 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenACC_CXX_FLAGS}")
|
---|
| 2577 | + endif()
|
---|
| 2578 | +endif()
|
---|
| 2579 | +
|
---|
| 2580 | +if(ENABLE_CXX11)
|
---|
| 2581 | + # in recent cmake versions we could do e.g. set(CMAKE_CXX_STANDARD 11)
|
---|
| 2582 | + check_cxx_compiler_flag("-std=c++11" STDCXX11)
|
---|
| 2583 | + if(STDCXX11)
|
---|
| 2584 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
---|
| 2585 | + endif()
|
---|
| 2586 | +endif()
|
---|
| 2587 | +
|
---|
| 2588 | +if(ENABLE_C99)
|
---|
| 2589 | + # in recent cmake versions we could do e.g. set(CMAKE_C_STANDARD 99)
|
---|
| 2590 | + check_c_compiler_flag("-std=c99" STDC99)
|
---|
| 2591 | + if(STDC99)
|
---|
| 2592 | + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
|
---|
| 2593 | + endif()
|
---|
| 2594 | +endif()
|
---|
| 2595 | +
|
---|
| 2596 | +if(ENABLE_PROFILE)
|
---|
| 2597 | + # Using the perf set of profiling tools doesn't work without the frame
|
---|
| 2598 | + # pointer and a common optimisation is to remove it
|
---|
| 2599 | + check_cxx_compiler_flag("-fno-omit-frame-pointer" FNOFP)
|
---|
| 2600 | + if(FNOFP)
|
---|
| 2601 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer")
|
---|
| 2602 | + endif()
|
---|
| 2603 | +endif()
|
---|
| 2604 | +
|
---|
| 2605 | +macro(append_gmsh_src DIRNAME FILES)
|
---|
| 2606 | + foreach(FILE ${FILES})
|
---|
| 2607 | + list(APPEND LIST ${DIRNAME}/${FILE})
|
---|
| 2608 | + endforeach()
|
---|
| 2609 | + set(GMSH_SRC ${GMSH_SRC};${LIST} PARENT_SCOPE)
|
---|
| 2610 | + set(GMSH_DIRS ${GMSH_DIRS};${DIRNAME} PARENT_SCOPE)
|
---|
| 2611 | +endmacro()
|
---|
| 2612 | +
|
---|
| 2613 | +macro(find_all_libraries VARNAME LISTNAME PATH SUFFIX)
|
---|
| 2614 | + set(${VARNAME})
|
---|
| 2615 | + list(LENGTH ${LISTNAME} NUM_LIST)
|
---|
| 2616 | + foreach(LIB ${${LISTNAME}})
|
---|
| 2617 | + if("${PATH}" STREQUAL "")
|
---|
| 2618 | + find_library(FOUND_LIB ${LIB} PATH_SUFFIXES ${SUFFIX})
|
---|
| 2619 | + else()
|
---|
| 2620 | + find_library(FOUND_LIB ${LIB} PATHS ${PATH} NO_DEFAULT_PATH)
|
---|
| 2621 | + endif()
|
---|
| 2622 | + if(FOUND_LIB)
|
---|
| 2623 | + list(APPEND ${VARNAME} ${FOUND_LIB})
|
---|
| 2624 | + endif()
|
---|
| 2625 | + unset(FOUND_LIB CACHE)
|
---|
| 2626 | + endforeach()
|
---|
| 2627 | + list(LENGTH ${VARNAME} NUM_FOUND_LIBRARIES)
|
---|
| 2628 | + if(NUM_FOUND_LIBRARIES LESS NUM_LIST)
|
---|
| 2629 | + set(${VARNAME})
|
---|
| 2630 | + endif()
|
---|
| 2631 | +endmacro()
|
---|
| 2632 | +
|
---|
| 2633 | +macro(set_compile_flags LISTNAME FLAGS)
|
---|
| 2634 | + foreach(FILE ${${LISTNAME}})
|
---|
| 2635 | + get_source_file_property(PROP ${FILE} COMPILE_FLAGS)
|
---|
| 2636 | + if(PROP)
|
---|
| 2637 | + set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS "${PROP} ${FLAGS}")
|
---|
| 2638 | + else()
|
---|
| 2639 | + set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS "${FLAGS}")
|
---|
| 2640 | + endif()
|
---|
| 2641 | + endforeach()
|
---|
| 2642 | +endmacro()
|
---|
| 2643 | +
|
---|
| 2644 | +if(ENABLE_BLAS_LAPACK)
|
---|
| 2645 | + if(BLAS_LAPACK_LIBRARIES)
|
---|
| 2646 | + # use libs as specified in the BLAS_LAPACK_LIBRARIES variable
|
---|
| 2647 | + set_config_option(HAVE_BLAS "Blas[custom]")
|
---|
| 2648 | + set_config_option(HAVE_LAPACK "Lapack[custom]")
|
---|
| 2649 | + set(LAPACK_LIBRARIES ${BLAS_LAPACK_LIBRARIES})
|
---|
| 2650 | + else()
|
---|
| 2651 | + if(MSVC)
|
---|
| 2652 | + # on Windows with Visual C++ try really hard to find blas/lapack *without*
|
---|
| 2653 | + # requiring a Fortran compiler: 1) try to find the Intel MKL libs using
|
---|
| 2654 | + # the standard search path; if not found 2) try to get the reference
|
---|
| 2655 | + # blas/lapack libs (useful for users with no Fortran compiler and no MKL
|
---|
| 2656 | + # license, who can just download our precompiled "gmsh-dep" package)
|
---|
| 2657 | + if(HAVE_64BIT_SIZE_T)
|
---|
| 2658 | + set(MKL_PATH em64t/lib)
|
---|
| 2659 | + set(MKL_LIBS_REQUIRED libguide40 mkl_intel_lp64 mkl_intel_thread mkl_core)
|
---|
| 2660 | + else()
|
---|
| 2661 | + set(MKL_PATH ia32/lib)
|
---|
| 2662 | + set(MKL_LIBS_REQUIRED libguide40 mkl_intel_c mkl_intel_thread mkl_core)
|
---|
| 2663 | + endif()
|
---|
| 2664 | + find_all_libraries(LAPACK_LIBRARIES MKL_LIBS_REQUIRED "" ${MKL_PATH})
|
---|
| 2665 | + if(LAPACK_LIBRARIES)
|
---|
| 2666 | + set_config_option(HAVE_BLAS "Blas[mkl]")
|
---|
| 2667 | + set_config_option(HAVE_LAPACK "Lapack[mkl]")
|
---|
| 2668 | + else()
|
---|
| 2669 | + set(REFLAPACK_LIBS_REQUIRED lapack blas g2c gcc)
|
---|
| 2670 | + find_all_libraries(LAPACK_LIBRARIES REFLAPACK_LIBS_REQUIRED "" "")
|
---|
| 2671 | + if(LAPACK_LIBRARIES)
|
---|
| 2672 | + set_config_option(HAVE_BLAS "Blas[ref]")
|
---|
| 2673 | + set_config_option(HAVE_LAPACK "Lapack[ref]")
|
---|
| 2674 | + endif()
|
---|
| 2675 | + endif()
|
---|
| 2676 | + elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
---|
| 2677 | + # on Linux try to find the Intel MKL without a Fortran compiler
|
---|
| 2678 | + if(HAVE_64BIT_SIZE_T)
|
---|
| 2679 | + set(MKL_PATH lib/em64t)
|
---|
| 2680 | + else()
|
---|
| 2681 | + set(MKL_PATH lib/32)
|
---|
| 2682 | + endif()
|
---|
| 2683 | + set(MKL_LIBS_REQUIRED mkl_gf_lp64 iomp5 mkl_gnu_thread mkl_core guide pthread)
|
---|
| 2684 | + find_all_libraries(LAPACK_LIBRARIES MKL_LIBS_REQUIRED "" ${MKL_PATH})
|
---|
| 2685 | + if(NOT LAPACK_LIBRARIES)
|
---|
| 2686 | + # match lapack 9.0 on 64bit
|
---|
| 2687 | + set(MKL_LIBS_REQUIRED mkl_lapack mkl_em64t guide)
|
---|
| 2688 | + find_all_libraries(LAPACK_LIBRARIES MKL_LIBS_REQUIRED "" ${MKL_PATH})
|
---|
| 2689 | + endif()
|
---|
| 2690 | + if(LAPACK_LIBRARIES)
|
---|
| 2691 | + set_config_option(HAVE_BLAS "Blas[mkl]")
|
---|
| 2692 | + set_config_option(HAVE_LAPACK "Lapack[mkl]")
|
---|
| 2693 | + else()
|
---|
| 2694 | + # on Linux also try to find ATLAS without a Fortran compiler, because
|
---|
| 2695 | + # cmake ships with a buggy FindBLAS e.g. on Ubuntu Lucid Lynx
|
---|
| 2696 | + set(ATLAS_LIBS_REQUIRED lapack f77blas cblas atlas)
|
---|
| 2697 | + find_all_libraries(LAPACK_LIBRARIES ATLAS_LIBS_REQUIRED "" "")
|
---|
| 2698 | + if(LAPACK_LIBRARIES)
|
---|
| 2699 | + set_config_option(HAVE_BLAS "Blas[atlas]")
|
---|
| 2700 | + set_config_option(HAVE_LAPACK "Lapack[atlas]")
|
---|
| 2701 | + else()
|
---|
| 2702 | + # try with generic names
|
---|
| 2703 | + set(GENERIC_LIBS_REQUIRED lapack blas pthread)
|
---|
| 2704 | + find_all_libraries(LAPACK_LIBRARIES GENERIC_LIBS_REQUIRED "" "")
|
---|
| 2705 | + if(LAPACK_LIBRARIES)
|
---|
| 2706 | + set_config_option(HAVE_BLAS "Blas[generic]")
|
---|
| 2707 | + set_config_option(HAVE_LAPACK "Lapack[generic]")
|
---|
| 2708 | + find_library(GFORTRAN_LIB gfortran)
|
---|
| 2709 | + if(GFORTRAN_LIB)
|
---|
| 2710 | + list(APPEND LAPACK_LIBRARIES ${GFORTRAN_LIB})
|
---|
| 2711 | + endif()
|
---|
| 2712 | + endif()
|
---|
| 2713 | + endif()
|
---|
| 2714 | + endif()
|
---|
| 2715 | + elseif(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
|
---|
| 2716 | + # on SunOS we know blas and lapack are available in sunperf
|
---|
| 2717 | + set(LAPACK_LIBRARIES -library=sunperf)
|
---|
| 2718 | + set_config_option(HAVE_BLAS "Blas[sunperf]")
|
---|
| 2719 | + set_config_option(HAVE_LAPACK "Lapack[sunperf]")
|
---|
| 2720 | + elseif(APPLE)
|
---|
| 2721 | + # on Mac we also know that blas and lapack are available
|
---|
| 2722 | + set(LAPACK_LIBRARIES "-llapack -lblas")
|
---|
| 2723 | + set_config_option(HAVE_BLAS "Blas[veclib]")
|
---|
| 2724 | + set_config_option(HAVE_LAPACK "Lapack[veclib]")
|
---|
| 2725 | + endif()
|
---|
| 2726 | +
|
---|
| 2727 | + if(NOT HAVE_BLAS OR NOT HAVE_LAPACK)
|
---|
| 2728 | + # if we haven't found blas and lapack check for OpenBlas
|
---|
| 2729 | + set(OPENBLAS_LIBS_REQUIRED openblas)
|
---|
| 2730 | + find_all_libraries(LAPACK_LIBRARIES OPENBLAS_LIBS_REQUIRED "" "")
|
---|
| 2731 | + if(LAPACK_LIBRARIES)
|
---|
| 2732 | + set_config_option(HAVE_BLAS "Blas[openblas]")
|
---|
| 2733 | + set_config_option(HAVE_LAPACK "Lapack[openblas]")
|
---|
| 2734 | + find_library(GFORTRAN_LIB gfortran)
|
---|
| 2735 | + if(GFORTRAN_LIB)
|
---|
| 2736 | + list(APPEND LAPACK_LIBRARIES ${GFORTRAN_LIB})
|
---|
| 2737 | + endif()
|
---|
| 2738 | + endif()
|
---|
| 2739 | + endif()
|
---|
| 2740 | +
|
---|
| 2741 | + if(NOT HAVE_BLAS OR NOT HAVE_LAPACK)
|
---|
| 2742 | + # if we still haven't found blas and lapack, use the standard cmake tests,
|
---|
| 2743 | + # which require a working Fortran compiler
|
---|
| 2744 | + enable_language(Fortran)
|
---|
| 2745 | + find_package(BLAS)
|
---|
| 2746 | + if(BLAS_FOUND)
|
---|
| 2747 | + set_config_option(HAVE_BLAS "Blas")
|
---|
| 2748 | + find_package(LAPACK)
|
---|
| 2749 | + if(LAPACK_FOUND)
|
---|
| 2750 | + set_config_option(HAVE_LAPACK "Lapack")
|
---|
| 2751 | + else()
|
---|
| 2752 | + set(LAPACK_LIBRARIES ${BLAS_LIBRARIES})
|
---|
| 2753 | + endif()
|
---|
| 2754 | + if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
|
---|
| 2755 | + if(CMAKE_Fortran_COMPILER MATCHES "gfortran")
|
---|
| 2756 | + list(APPEND LAPACK_LIBRARIES gfortran)
|
---|
| 2757 | + elseif(CMAKE_Fortran_COMPILER MATCHES "f95")
|
---|
| 2758 | + list(APPEND LAPACK_LIBRARIES gfortran)
|
---|
| 2759 | + elseif(CMAKE_Fortran_COMPILER MATCHES "g77")
|
---|
| 2760 | + list(APPEND LAPACK_LIBRARIES g2c)
|
---|
| 2761 | + endif()
|
---|
| 2762 | + elseif(CMAKE_Fortran_COMPILER MATCHES "pgi")
|
---|
| 2763 | + list(APPEND LAPACK_LIBRARIES -pgf77libs)
|
---|
| 2764 | + endif()
|
---|
| 2765 | + endif()
|
---|
| 2766 | + endif()
|
---|
| 2767 | +
|
---|
| 2768 | + if(NOT HAVE_BLAS OR NOT HAVE_LAPACK)
|
---|
| 2769 | + message(WARNING "Could not find Blas or Lapack: most meshing algorithms "
|
---|
| 2770 | + "will not be functional")
|
---|
| 2771 | + endif()
|
---|
| 2772 | +
|
---|
| 2773 | + endif()
|
---|
| 2774 | +endif()
|
---|
| 2775 | +
|
---|
| 2776 | +if(ENABLE_TCMALLOC)
|
---|
| 2777 | + find_library(TCMALLOC tcmalloc)
|
---|
| 2778 | + if(TCMALLOC)
|
---|
| 2779 | + set_config_option(HAVE_TCMALLOC "TCMalloc")
|
---|
| 2780 | + list(APPEND EXTERNAL_LIBRARIES ${TCMALLOC})
|
---|
| 2781 | + endif()
|
---|
| 2782 | +endif()
|
---|
| 2783 | +
|
---|
| 2784 | +add_subdirectory(Common)
|
---|
| 2785 | +add_subdirectory(Numeric)
|
---|
| 2786 | +add_subdirectory(Geo)
|
---|
| 2787 | +
|
---|
| 2788 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Mesh AND ENABLE_MESH)
|
---|
| 2789 | + add_subdirectory(Mesh)
|
---|
| 2790 | + set_config_option(HAVE_MESH "Mesh")
|
---|
| 2791 | +endif()
|
---|
| 2792 | +
|
---|
| 2793 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Solver AND ENABLE_SOLVER)
|
---|
| 2794 | + add_subdirectory(Solver)
|
---|
| 2795 | + set_config_option(HAVE_SOLVER "Solver")
|
---|
| 2796 | +endif()
|
---|
| 2797 | +
|
---|
| 2798 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Post AND ENABLE_POST)
|
---|
| 2799 | + add_subdirectory(Post)
|
---|
| 2800 | + set_config_option(HAVE_POST "Post")
|
---|
| 2801 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Plugin AND ENABLE_PLUGINS)
|
---|
| 2802 | + add_subdirectory(Plugin)
|
---|
| 2803 | + set_config_option(HAVE_PLUGINS "Plugins")
|
---|
| 2804 | + endif()
|
---|
| 2805 | +endif()
|
---|
| 2806 | +
|
---|
| 2807 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Parser AND ENABLE_PARSER)
|
---|
| 2808 | + add_subdirectory(Parser)
|
---|
| 2809 | + set_config_option(HAVE_PARSER "Parser")
|
---|
| 2810 | +endif()
|
---|
| 2811 | +
|
---|
| 2812 | +if(ENABLE_VISUDEV)
|
---|
| 2813 | + set_config_option(HAVE_VISUDEV "VisuDev")
|
---|
| 2814 | +endif()
|
---|
| 2815 | +
|
---|
| 2816 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Fltk AND ENABLE_FLTK)
|
---|
| 2817 | + # first, try to use fltk-config for fltk >= 1.3 (FindFLTK is buggy on Unix,
|
---|
| 2818 | + # where e.g. xft and xinerama options are not dealt with)
|
---|
| 2819 | + find_program(FLTK_CONFIG_SCRIPT fltk-config)
|
---|
| 2820 | + if(FLTK_CONFIG_SCRIPT)
|
---|
| 2821 | + execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --api-version
|
---|
| 2822 | + OUTPUT_VARIABLE FLTK_VERSION)
|
---|
| 2823 | + string(STRIP "${FLTK_VERSION}" FLTK_VERSION)
|
---|
| 2824 | + if(FLTK_VERSION VERSION_GREATER 1.1)
|
---|
| 2825 | + add_subdirectory(Fltk)
|
---|
| 2826 | + set_config_option(HAVE_FLTK "Fltk")
|
---|
| 2827 | + message(STATUS "Using fltk-config script for Fltk " ${FLTK_VERSION})
|
---|
| 2828 | + execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --use-gl --use-images --includedir
|
---|
| 2829 | + OUTPUT_VARIABLE FLTK_INCLUDE_DIR)
|
---|
| 2830 | + string(STRIP ${FLTK_INCLUDE_DIR} FLTK_INCLUDE_DIR)
|
---|
| 2831 | + list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR})
|
---|
| 2832 | + # On linux (at least OpenSuSE) the following directories are
|
---|
| 2833 | + # not existing (everything is in /usr/include). To avoid warnings
|
---|
| 2834 | + # check existance of these directories before adding them
|
---|
| 2835 | + if(EXISTS ${FLTK_INCLUDE_DIR}/FL/images)
|
---|
| 2836 | + list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}/FL/images)
|
---|
| 2837 | + endif()
|
---|
| 2838 | + if(EXISTS ${FLTK_INCLUDE_DIR}/jpeg)
|
---|
| 2839 | + list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}/jpeg)
|
---|
| 2840 | + endif()
|
---|
| 2841 | + if(EXISTS ${FLTK_INCLUDE_DIR}/zlib)
|
---|
| 2842 | + list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}/zlib)
|
---|
| 2843 | + endif()
|
---|
| 2844 | + if(EXISTS ${FLTK_INCLUDE_DIR}/png)
|
---|
| 2845 | + list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}/png)
|
---|
| 2846 | + endif()
|
---|
| 2847 | + execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --use-gl --use-images --ldflags
|
---|
| 2848 | + OUTPUT_VARIABLE FLTK_LIBRARIES)
|
---|
| 2849 | + string(STRIP ${FLTK_LIBRARIES} FLTK_LIBRARIES)
|
---|
| 2850 | + string(REGEX MATCH "fltk[_ ]jpeg" FLTK_JPEG ${FLTK_LIBRARIES})
|
---|
| 2851 | + string(REGEX MATCH "fltk[_ ]z" FLTK_Z ${FLTK_LIBRARIES})
|
---|
| 2852 | + string(REGEX MATCH "fltk[_ ]png" FLTK_PNG ${FLTK_LIBRARIES})
|
---|
| 2853 | + endif()
|
---|
| 2854 | + endif()
|
---|
| 2855 | + # then try the built-in FindFLTK module
|
---|
| 2856 | + if(NOT HAVE_FLTK)
|
---|
| 2857 | + set(FLTK_SKIP_FORMS TRUE)
|
---|
| 2858 | + set(FLTK_SKIP_FLUID TRUE)
|
---|
| 2859 | + find_package(FLTK)
|
---|
| 2860 | + if(FLTK_FOUND)
|
---|
| 2861 | + add_subdirectory(Fltk)
|
---|
| 2862 | + set_config_option(HAVE_FLTK "Fltk")
|
---|
| 2863 | + list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR})
|
---|
| 2864 | + # find fltk jpeg
|
---|
| 2865 | + find_library(FLTK_JPEG NAMES fltk_jpeg fltkjpeg)
|
---|
| 2866 | + if(FLTK_JPEG)
|
---|
| 2867 | + list(APPEND EXTERNAL_LIBRARIES ${FLTK_JPEG})
|
---|
| 2868 | + foreach(DIR ${FLTK_INCLUDE_DIR})
|
---|
| 2869 | + list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/jpeg)
|
---|
| 2870 | + endforeach()
|
---|
| 2871 | + endif()
|
---|
| 2872 | + # find fltk zlib
|
---|
| 2873 | + find_library(FLTK_Z NAMES fltk_z fltkz)
|
---|
| 2874 | + if(FLTK_Z)
|
---|
| 2875 | + list(APPEND EXTERNAL_LIBRARIES ${FLTK_Z})
|
---|
| 2876 | + foreach(DIR ${FLTK_INCLUDE_DIR})
|
---|
| 2877 | + list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/zlib)
|
---|
| 2878 | + endforeach()
|
---|
| 2879 | + endif()
|
---|
| 2880 | + # find fltk png
|
---|
| 2881 | + find_library(FLTK_PNG NAMES fltk_png fltkpng)
|
---|
| 2882 | + if(FLTK_PNG)
|
---|
| 2883 | + list(APPEND EXTERNAL_LIBRARIES ${FLTK_PNG})
|
---|
| 2884 | + foreach(DIR ${FLTK_INCLUDE_DIR})
|
---|
| 2885 | + list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/png)
|
---|
| 2886 | + endforeach()
|
---|
| 2887 | + endif()
|
---|
| 2888 | + endif()
|
---|
| 2889 | + endif()
|
---|
| 2890 | + # workaround for Fedora/Suse messing up fltk-config (see issue #417)
|
---|
| 2891 | + if(HAVE_FLTK AND ${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
---|
| 2892 | + string(REGEX MATCH "X11" FLTK_X11 ${FLTK_LIBRARIES})
|
---|
| 2893 | + if(NOT FLTK_X11)
|
---|
| 2894 | + find_package(X11)
|
---|
| 2895 | + if(X11_FOUND)
|
---|
| 2896 | + list(APPEND EXTERNAL_INCLUDES ${X11_INCLUDE_DIR})
|
---|
| 2897 | + list(APPEND EXTERNAL_LIBRARIES ${X11_LIBRARIES})
|
---|
| 2898 | + endif()
|
---|
| 2899 | + endif()
|
---|
| 2900 | + endif()
|
---|
| 2901 | +endif()
|
---|
| 2902 | +
|
---|
| 2903 | +if(APPLE AND HAVE_FLTK AND ENABLE_TOUCHBAR)
|
---|
| 2904 | + if(CMAKE_OSX_DEPLOYMENT_TARGET)
|
---|
| 2905 | + if(${CMAKE_OSX_DEPLOYMENT_TARGET} VERSION_GREATER 10.11)
|
---|
| 2906 | + set(GMSH_SRC ${GMSH_SRC};Fltk/touchBar.mm)
|
---|
| 2907 | + set_config_option(HAVE_TOUCHBAR "TouchBar")
|
---|
| 2908 | + endif()
|
---|
| 2909 | + endif()
|
---|
| 2910 | +endif()
|
---|
| 2911 | +
|
---|
| 2912 | +if(ENABLE_ONELAB)
|
---|
| 2913 | + set_config_option(HAVE_ONELAB "ONELAB")
|
---|
| 2914 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/onelab)
|
---|
| 2915 | + if(ENABLE_ONELAB_METAMODEL)
|
---|
| 2916 | + add_subdirectory(contrib/onelab)
|
---|
| 2917 | + include_directories(contrib/onelab)
|
---|
| 2918 | + set_config_option(HAVE_ONELAB_METAMODEL "ONELABMetamodel")
|
---|
| 2919 | + endif()
|
---|
| 2920 | + file(COPY ${ONELAB_PY} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
---|
| 2921 | + endif()
|
---|
| 2922 | +endif()
|
---|
| 2923 | +
|
---|
| 2924 | +if(ENABLE_BUILD_IOS)
|
---|
| 2925 | + find_file(CMAKE_TOOLCHAIN_FILE "ios.cmake")
|
---|
| 2926 | + if(NOT CMAKE_TOOLCHAIN_FILE)
|
---|
| 2927 | + message(FATAL_ERROR "Cannot compile Gmsh for iOS without a toolchain")
|
---|
| 2928 | + endif()
|
---|
| 2929 | + add_definitions(-DBUILD_IOS)
|
---|
| 2930 | +endif()
|
---|
| 2931 | +
|
---|
| 2932 | +if(HAVE_FLTK OR ENABLE_GRAPHICS)
|
---|
| 2933 | + if(NOT HAVE_MESH OR NOT HAVE_POST OR NOT HAVE_PLUGINS OR NOT HAVE_ONELAB)
|
---|
| 2934 | + message(SEND_ERROR "Cannot compile GUI without Mesh, Post, Plugin and ONELAB")
|
---|
| 2935 | + endif()
|
---|
| 2936 | +
|
---|
| 2937 | + if(FLTK_JPEG)
|
---|
| 2938 | + set_config_option(HAVE_LIBJPEG "Jpeg[fltk]")
|
---|
| 2939 | + else()
|
---|
| 2940 | + find_package(JPEG)
|
---|
| 2941 | + if(JPEG_FOUND)
|
---|
| 2942 | + set_config_option(HAVE_LIBJPEG "Jpeg")
|
---|
| 2943 | + list(APPEND EXTERNAL_LIBRARIES ${JPEG_LIBRARIES})
|
---|
| 2944 | + list(APPEND EXTERNAL_INCLUDES ${JPEG_INCLUDE_DIR})
|
---|
| 2945 | + endif()
|
---|
| 2946 | + endif()
|
---|
| 2947 | +
|
---|
| 2948 | + if(FLTK_Z)
|
---|
| 2949 | + set_config_option(HAVE_LIBZ "Zlib[fltk]")
|
---|
| 2950 | + else()
|
---|
| 2951 | + find_package(ZLIB)
|
---|
| 2952 | + if(ZLIB_FOUND)
|
---|
| 2953 | + set_config_option(HAVE_LIBZ "Zlib")
|
---|
| 2954 | + list(APPEND EXTERNAL_LIBRARIES ${ZLIB_LIBRARIES})
|
---|
| 2955 | + list(APPEND EXTERNAL_INCLUDES ${ZLIB_INCLUDE_DIR})
|
---|
| 2956 | + endif()
|
---|
| 2957 | + endif()
|
---|
| 2958 | +
|
---|
| 2959 | + if(HAVE_LIBZ)
|
---|
| 2960 | + if(FLTK_PNG)
|
---|
| 2961 | + set_config_option(HAVE_LIBPNG "Png[fltk]")
|
---|
| 2962 | + else()
|
---|
| 2963 | + find_package(PNG)
|
---|
| 2964 | + if(PNG_FOUND)
|
---|
| 2965 | + set_config_option(HAVE_LIBPNG "Png")
|
---|
| 2966 | + list(APPEND EXTERNAL_LIBRARIES ${PNG_LIBRARIES})
|
---|
| 2967 | + list(APPEND EXTERNAL_INCLUDES ${PNG_INCLUDE_DIR})
|
---|
| 2968 | + endif()
|
---|
| 2969 | + endif()
|
---|
| 2970 | + endif()
|
---|
| 2971 | +
|
---|
| 2972 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/mpeg_encode AND
|
---|
| 2973 | + ENABLE_MPEG_ENCODE)
|
---|
| 2974 | + add_subdirectory(contrib/mpeg_encode)
|
---|
| 2975 | + include_directories(contrib/mpeg_encode/headers)
|
---|
| 2976 | + set_config_option(HAVE_MPEG_ENCODE "Mpeg")
|
---|
| 2977 | + endif()
|
---|
| 2978 | +
|
---|
| 2979 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/3M AND ENABLE_3M)
|
---|
| 2980 | + add_subdirectory(contrib/3M)
|
---|
| 2981 | + include_directories(contrib/3M)
|
---|
| 2982 | + set_config_option(HAVE_3M "3M")
|
---|
| 2983 | + endif()
|
---|
| 2984 | +
|
---|
| 2985 | + if(ENABLE_OSMESA)
|
---|
| 2986 | + find_library(OSMESA_LIB OSMesa)
|
---|
| 2987 | + if(OSMESA_LIB)
|
---|
| 2988 | + set_config_option(HAVE_OSMESA "OSMesa")
|
---|
| 2989 | + list(APPEND EXTERNAL_LIBRARIES ${OSMESA_LIB})
|
---|
| 2990 | + endif()
|
---|
| 2991 | + endif()
|
---|
| 2992 | +
|
---|
| 2993 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Graphics)
|
---|
| 2994 | + set(OpenGL_GL_PREFERENCE "LEGACY")
|
---|
| 2995 | + find_package(OpenGL REQUIRED)
|
---|
| 2996 | + if(OPENGL_GLU_FOUND AND OPENGL_FOUND)
|
---|
| 2997 | + add_subdirectory(Graphics)
|
---|
| 2998 | + set_config_option(HAVE_OPENGL "OpenGL")
|
---|
| 2999 | + else()
|
---|
| 3000 | + message(SEND_ERROR "Could not find GLU: disabling OpenGL support")
|
---|
| 3001 | + endif()
|
---|
| 3002 | + endif()
|
---|
| 3003 | +endif()
|
---|
| 3004 | +
|
---|
| 3005 | +if(ENABLE_ANN)
|
---|
| 3006 | + find_library(ANN_LIB ANN PATH_SUFFIXES lib)
|
---|
| 3007 | + find_path(ANN_INC "ANN.h" PATH_SUFFIXES src include ANN)
|
---|
| 3008 | + if(ENABLE_SYSTEM_CONTRIB AND ANN_LIB AND ANN_INC)
|
---|
| 3009 | + message(STATUS "Using system version of ANN")
|
---|
| 3010 | + list(APPEND EXTERNAL_LIBRARIES ${ANN_LIB})
|
---|
| 3011 | + list(APPEND EXTERNAL_INCLUDES ${ANN_INC})
|
---|
| 3012 | + set_config_option(HAVE_ANN "Ann[system]")
|
---|
| 3013 | + elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/ANN)
|
---|
| 3014 | + add_subdirectory(contrib/ANN)
|
---|
| 3015 | + include_directories(contrib/ANN/include)
|
---|
| 3016 | + set_config_option(HAVE_ANN "Ann")
|
---|
| 3017 | + endif()
|
---|
| 3018 | +endif()
|
---|
| 3019 | +
|
---|
| 3020 | +if(ENABLE_ALGLIB)
|
---|
| 3021 | + find_library(ALGLIB_LIB alglib PATH_SUFFIXES lib)
|
---|
| 3022 | + find_path(ALGLIB_INC "stdafx.h" PATH_SUFFIXES include)
|
---|
| 3023 | + if(ENABLE_SYSTEM_CONTRIB AND ALGLIB_LIB AND ALGLIB_INC)
|
---|
| 3024 | + list(APPEND EXTERNAL_LIBRARIES ${ALGLIB_LIB})
|
---|
| 3025 | + list(APPEND EXTERNAL_INCLUDES ${ALGLIB_INC})
|
---|
| 3026 | + set_config_option(HAVE_ALGLIB "ALGLIB[system]")
|
---|
| 3027 | + elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/ALGLIB)
|
---|
| 3028 | + add_subdirectory(contrib/ALGLIB)
|
---|
| 3029 | + include_directories(contrib/ALGLIB)
|
---|
| 3030 | + set_config_option(HAVE_ALGLIB "ALGLIB")
|
---|
| 3031 | + endif()
|
---|
| 3032 | +endif()
|
---|
| 3033 | +
|
---|
| 3034 | +if(HAVE_FLTK AND ENABLE_CAIRO)
|
---|
| 3035 | + find_library(CAIRO_LIB cairo)
|
---|
| 3036 | + find_path(CAIRO_INC "cairo/cairo.h" PATH_SUFFIXES include)
|
---|
| 3037 | + if(CAIRO_INC AND CAIRO_LIB)
|
---|
| 3038 | + set_config_option(HAVE_CAIRO "Cairo")
|
---|
| 3039 | + list(APPEND EXTERNAL_LIBRARIES ${CAIRO_LIB})
|
---|
| 3040 | + list(APPEND EXTERNAL_INCLUDES ${CAIRO_INC})
|
---|
| 3041 | + endif()
|
---|
| 3042 | +endif()
|
---|
| 3043 | +
|
---|
| 3044 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/DiscreteIntegration AND
|
---|
| 3045 | + ENABLE_DINTEGRATION)
|
---|
| 3046 | + add_subdirectory(contrib/DiscreteIntegration)
|
---|
| 3047 | + include_directories(contrib/DiscreteIntegration)
|
---|
| 3048 | + set_config_option(HAVE_DINTEGRATION "DIntegration")
|
---|
| 3049 | +endif()
|
---|
| 3050 | +
|
---|
| 3051 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/HighOrderMeshOptimizer AND
|
---|
| 3052 | + EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/MeshOptimizer AND
|
---|
| 3053 | + EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/MeshQualityOptimizer AND
|
---|
| 3054 | + ENABLE_OPTHOM AND HAVE_MESH)
|
---|
| 3055 | + add_subdirectory(contrib/HighOrderMeshOptimizer)
|
---|
| 3056 | + include_directories(contrib/HighOrderMeshOptimizer)
|
---|
| 3057 | + add_subdirectory(contrib/MeshOptimizer)
|
---|
| 3058 | + include_directories(contrib/MeshOptimizer)
|
---|
| 3059 | + include_directories(${CMAKE_CURRENT_BINARY_DIR}/contrib/MeshOptimizer)
|
---|
| 3060 | + add_subdirectory(contrib/MeshQualityOptimizer)
|
---|
| 3061 | + include_directories(contrib/MeshQualityOptimizer)
|
---|
| 3062 | + set_config_option(HAVE_OPTHOM "OptHom")
|
---|
| 3063 | +endif()
|
---|
| 3064 | +
|
---|
| 3065 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/domhex AND
|
---|
| 3066 | + ENABLE_DOMHEX AND HAVE_MESH)
|
---|
| 3067 | + add_subdirectory(contrib/domhex)
|
---|
| 3068 | + include_directories(contrib/domhex)
|
---|
| 3069 | + set_config_option(HAVE_DOMHEX "DomHex")
|
---|
| 3070 | +endif()
|
---|
| 3071 | +
|
---|
| 3072 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/QuadTri AND
|
---|
| 3073 | + ENABLE_QUADTRI AND HAVE_MESH)
|
---|
| 3074 | + add_subdirectory(contrib/QuadTri)
|
---|
| 3075 | + include_directories(contrib/QuadTri)
|
---|
| 3076 | + set_config_option(HAVE_QUADTRI "QuadTri")
|
---|
| 3077 | +endif()
|
---|
| 3078 | +
|
---|
| 3079 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/kbipack AND ENABLE_KBIPACK)
|
---|
| 3080 | + set_config_option(HAVE_KBIPACK "Kbipack")
|
---|
| 3081 | + add_subdirectory(contrib/kbipack)
|
---|
| 3082 | + include_directories(contrib/kbipack)
|
---|
| 3083 | + if(ENABLE_GMP)
|
---|
| 3084 | + find_library(GMP_LIB libgmp.a)
|
---|
| 3085 | + find_path(GMP_INC "gmp.h" PATH_SUFFIXES src include)
|
---|
| 3086 | + endif()
|
---|
| 3087 | + if(GMP_LIB AND GMP_INC)
|
---|
| 3088 | + set_config_option(HAVE_GMP "GMP")
|
---|
| 3089 | + list(APPEND EXTERNAL_LIBRARIES ${GMP_LIB})
|
---|
| 3090 | + list(APPEND EXTERNAL_INCLUDES ${GMP_INC})
|
---|
| 3091 | + else()
|
---|
| 3092 | + message(STATUS "GMP not found: Kbipack uses long int")
|
---|
| 3093 | + endif()
|
---|
| 3094 | +endif()
|
---|
| 3095 | +
|
---|
| 3096 | +if(ENABLE_MATHEX)
|
---|
| 3097 | + find_library(MATHEX_LIB mathex PATH_SUFFIXES lib)
|
---|
| 3098 | + find_path(MATHEX_INC "mathex.h" PATH_SUFFIXES src include)
|
---|
| 3099 | + if(ENABLE_SYSTEM_CONTRIB AND MATHEX_LIB AND MATHEX_INC)
|
---|
| 3100 | + list(APPEND EXTERNAL_LIBRARIES ${MATHEX_LIB})
|
---|
| 3101 | + list(APPEND EXTERNAL_INCLUDES ${MATHEX_INC})
|
---|
| 3102 | + set_config_option(HAVE_MATHEX "MathEx[system]")
|
---|
| 3103 | + elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/MathEx)
|
---|
| 3104 | + add_subdirectory(contrib/MathEx)
|
---|
| 3105 | + include_directories(contrib/MathEx)
|
---|
| 3106 | + set_config_option(HAVE_MATHEX "MathEx")
|
---|
| 3107 | + endif()
|
---|
| 3108 | +endif()
|
---|
| 3109 | +
|
---|
| 3110 | +if(ENABLE_MPI)
|
---|
| 3111 | + find_package(MPI)
|
---|
| 3112 | + if(MPI_FOUND)
|
---|
| 3113 | + set_config_option(HAVE_MPI "MPI")
|
---|
| 3114 | + list(APPEND EXTERNAL_INCLUDES ${MPI_CXX_INCLUDE_PATH})
|
---|
| 3115 | + list(APPEND EXTERNAL_LIBRARIES ${MPI_CXX_LIBRARIES})
|
---|
| 3116 | + set(CMAKE_C_COMPILER ${MPI_C_COMPILER})
|
---|
| 3117 | + set(CMAKE_CXX_COMPILER ${MPI_CXX_COMPILER})
|
---|
| 3118 | + set(CMAKE_Fortran_COMPILER ${MPI_Fortran_COMPILER})
|
---|
| 3119 | + endif()
|
---|
| 3120 | +endif()
|
---|
| 3121 | +
|
---|
| 3122 | +if(ENABLE_POPPLER)
|
---|
| 3123 | + find_library(POPPLER_LIB poppler)
|
---|
| 3124 | + find_library(POPPLER_CPP_LIB poppler-cpp)
|
---|
| 3125 | + find_path(POPPLER_INC "poppler/cpp/poppler-document.h" PATH_SUFFIXES src include)
|
---|
| 3126 | + if(POPPLER_LIB AND POPPLER_INC)
|
---|
| 3127 | + set_config_option(HAVE_POPPLER "Poppler")
|
---|
| 3128 | + list(APPEND EXTERNAL_LIBRARIES ${POPPLER_LIB})
|
---|
| 3129 | + list(APPEND EXTERNAL_LIBRARIES ${POPPLER_CPP_LIB})
|
---|
| 3130 | + list(APPEND EXTERNAL_INCLUDES ${POPPLER_INC})
|
---|
| 3131 | + endif()
|
---|
| 3132 | +endif()
|
---|
| 3133 | +
|
---|
| 3134 | +if(ENABLE_P4EST)
|
---|
| 3135 | + find_library(P4EST_LIB p4est)
|
---|
| 3136 | + find_path(P4EST_INC "p4est.h" PATH_SUFFIXES src)
|
---|
| 3137 | + find_library(SC_LIB sc)
|
---|
| 3138 | + if(P4EST_LIB AND P4EST_INC AND SC_LIB)
|
---|
| 3139 | + set_config_option(HAVE_P4EST "P4est")
|
---|
| 3140 | + list(APPEND EXTERNAL_LIBRARIES ${P4EST_LIB} ${SC_LIB})
|
---|
| 3141 | + list(APPEND EXTERNAL_INCLUDES ${P4EST_INC})
|
---|
| 3142 | + endif()
|
---|
| 3143 | +endif()
|
---|
| 3144 | +
|
---|
| 3145 | +if(HAVE_MESH OR HAVE_SOLVER)
|
---|
| 3146 | + if(ENABLE_METIS)
|
---|
| 3147 | + if(METIS_ROOT)
|
---|
| 3148 | + find_library(METIS_LIB metis PATHS ${METIS_ROOT} PATH_SUFFIXES lib)
|
---|
| 3149 | + find_path(METIS_INC "metis.h" PATHS ${METIS_ROOT} PATH_SUFFIXES include)
|
---|
| 3150 | + list(APPEND EXTERNAL_LIBRARIES ${METIS_LIB})
|
---|
| 3151 | + list(APPEND EXTERNAL_INCLUDES ${METIS_INC})
|
---|
| 3152 | + set_config_option(HAVE_METIS "Metis")
|
---|
| 3153 | + else()
|
---|
| 3154 | + find_library(METIS_LIB metis PATH_SUFFIXES lib)
|
---|
| 3155 | + find_path(METIS_INC "metis.h" PATH_SUFFIXES include)
|
---|
| 3156 | + if(ENABLE_SYSTEM_CONTRIB AND METIS_LIB AND METIS_INC)
|
---|
| 3157 | + message(STATUS "Using system version of METIS")
|
---|
| 3158 | + list(APPEND EXTERNAL_LIBRARIES ${METIS_LIB})
|
---|
| 3159 | + list(APPEND EXTERNAL_INCLUDES ${METIS_INC})
|
---|
| 3160 | + set_config_option(HAVE_METIS "Metis[system]")
|
---|
| 3161 | + elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/metis)
|
---|
| 3162 | + add_definitions(-DUSE_GKREGEX)
|
---|
| 3163 | + add_subdirectory(contrib/metis)
|
---|
| 3164 | + include_directories(contrib/metis/include contrib/metis/libmetis
|
---|
| 3165 | + contrib/metis/GKlib)
|
---|
| 3166 | + set_config_option(HAVE_METIS "Metis")
|
---|
| 3167 | + endif()
|
---|
| 3168 | + endif()
|
---|
| 3169 | + endif()
|
---|
| 3170 | +endif()
|
---|
| 3171 | +
|
---|
| 3172 | +if(HAVE_MESH)
|
---|
| 3173 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Mesh/tetgenBR.cxx)
|
---|
| 3174 | + set_config_option(HAVE_TETGENBR "TetGen/BR")
|
---|
| 3175 | + endif()
|
---|
| 3176 | +
|
---|
| 3177 | + if(ENABLE_VOROPP)
|
---|
| 3178 | + find_library(VOROPP_LIB voro++ PATH_SUFFIXES lib)
|
---|
| 3179 | + find_path(VOROPP_INC "voro++.hh" PATH_SUFFIXES include)
|
---|
| 3180 | + if(ENABLE_SYSTEM_CONTRIB AND VOROPP_LIB AND VOROPP_INC)
|
---|
| 3181 | + message(STATUS "Using system version of voro++")
|
---|
| 3182 | + list(APPEND EXTERNAL_LIBRARIES ${VOROPP_LIB})
|
---|
| 3183 | + list(APPEND EXTERNAL_INCLUDES ${VOROPP_INC})
|
---|
| 3184 | + set_config_option(HAVE_VOROPP "Voro++[system]")
|
---|
| 3185 | + elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/voro++)
|
---|
| 3186 | + add_subdirectory(contrib/voro++)
|
---|
| 3187 | + include_directories(contrib/voro++/src)
|
---|
| 3188 | + set_config_option(HAVE_VOROPP "Voro++")
|
---|
| 3189 | + endif()
|
---|
| 3190 | + endif()
|
---|
| 3191 | +
|
---|
| 3192 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/blossom AND ENABLE_BLOSSOM)
|
---|
| 3193 | + add_subdirectory(contrib/blossom)
|
---|
| 3194 | + include_directories(contrib/blossom/MATCH contrib/blossom/concorde97
|
---|
| 3195 | + contrib/blossom/concorde97/INCLUDE)
|
---|
| 3196 | + set_config_option(HAVE_BLOSSOM "Blossom")
|
---|
| 3197 | + endif()
|
---|
| 3198 | +
|
---|
| 3199 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/Netgen AND ENABLE_NETGEN)
|
---|
| 3200 | + add_subdirectory(contrib/Netgen)
|
---|
| 3201 | + include_directories(contrib/Netgen contrib/Netgen/libsrc/include
|
---|
| 3202 | + contrib/Netgen/nglib)
|
---|
| 3203 | + set_config_option(HAVE_NETGEN "Netgen")
|
---|
| 3204 | + add_definitions(-DNO_PARALLEL_THREADS -DNOTCL)
|
---|
| 3205 | + endif()
|
---|
| 3206 | +
|
---|
| 3207 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/bamg AND ENABLE_BAMG)
|
---|
| 3208 | + add_subdirectory(contrib/bamg)
|
---|
| 3209 | + include_directories(contrib/bamg contrib/bamg/bamglib)
|
---|
| 3210 | + set_config_option(HAVE_BAMG "Bamg")
|
---|
| 3211 | + endif()
|
---|
| 3212 | +
|
---|
| 3213 | + if(ENABLE_MMG3D)
|
---|
| 3214 | + find_library(MMG3D_LIB mmg3d PATH_SUFFIXES lib)
|
---|
| 3215 | + find_path(MMG3D_INC "libmmg3d.h" PATH_SUFFIXES src include)
|
---|
| 3216 | + if(ENABLE_SYSTEM_CONTRIB AND MMG3D_LIB AND MMG3D_INC)
|
---|
| 3217 | + list(APPEND EXTERNAL_LIBRARIES ${MMG3D_LIB})
|
---|
| 3218 | + list(APPEND EXTERNAL_INCLUDES ${MMG3D_INC})
|
---|
| 3219 | + set_config_option(HAVE_MMG3D "Mmg3d[system]")
|
---|
| 3220 | + elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/mmg3d)
|
---|
| 3221 | + add_subdirectory(contrib/mmg3d)
|
---|
| 3222 | + include_directories(contrib/mmg3d/build/sources)
|
---|
| 3223 | + set_config_option(HAVE_MMG3D "Mmg3d")
|
---|
| 3224 | + endif()
|
---|
| 3225 | + endif()
|
---|
| 3226 | +endif()
|
---|
| 3227 | +
|
---|
| 3228 | +if(ENABLE_MED OR ENABLE_CGNS)
|
---|
| 3229 | + find_package(HDF5)
|
---|
| 3230 | + if(HDF5_FOUND)
|
---|
| 3231 | + set(HDF5_LIB "${HDF5_C_LIBRARIES}")
|
---|
| 3232 | + list(APPEND EXTERNAL_INCLUDES ${HDF5_INCLUDE_DIRS})
|
---|
| 3233 | + if(ENABLE_MED)
|
---|
| 3234 | + find_library(MED_LIB medC)
|
---|
| 3235 | + if(MED_LIB)
|
---|
| 3236 | + set_config_option(HAVE_MED "Med")
|
---|
| 3237 | + list(APPEND EXTERNAL_LIBRARIES ${MED_LIB})
|
---|
| 3238 | + endif()
|
---|
| 3239 | + endif()
|
---|
| 3240 | + if(ENABLE_CGNS)
|
---|
| 3241 | + find_library(CGNS_LIB cgns HINTS ENV CGNS_ROOT PATH_SUFFIXES lib)
|
---|
| 3242 | + find_path(CGNS_INC "cgnslib.h" HINTS ENV CGNS_ROOT PATH_SUFFIXES include)
|
---|
| 3243 | + if(CGNS_LIB AND CGNS_INC)
|
---|
| 3244 | + set_config_option(HAVE_LIBCGNS "Cgns")
|
---|
| 3245 | + list(APPEND EXTERNAL_LIBRARIES ${CGNS_LIB})
|
---|
| 3246 | + list(APPEND EXTERNAL_INCLUDES ${CGNS_INC})
|
---|
| 3247 | + if(ENABLE_CGNS_CPEX0045)
|
---|
| 3248 | + set_config_option(HAVE_LIBCGNS_CPEX0045 "Cgns_CPEX0045")
|
---|
| 3249 | + endif()
|
---|
| 3250 | + endif()
|
---|
| 3251 | + endif()
|
---|
| 3252 | + if(MED_LIB OR CGNS_LIB)
|
---|
| 3253 | + list(APPEND EXTERNAL_LIBRARIES ${HDF5_LIB})
|
---|
| 3254 | + find_library(SZ_LIB NAMES szlib sz)
|
---|
| 3255 | + if(SZ_LIB)
|
---|
| 3256 | + list(APPEND EXTERNAL_LIBRARIES ${SZ_LIB})
|
---|
| 3257 | + endif()
|
---|
| 3258 | + if(NOT HAVE_LIBZ) # necessary for non-GUI builds
|
---|
| 3259 | + find_package(ZLIB)
|
---|
| 3260 | + if(ZLIB_FOUND)
|
---|
| 3261 | + set_config_option(HAVE_LIBZ "Zlib")
|
---|
| 3262 | + list(APPEND EXTERNAL_LIBRARIES ${ZLIB_LIBRARIES})
|
---|
| 3263 | + endif()
|
---|
| 3264 | + endif()
|
---|
| 3265 | + endif()
|
---|
| 3266 | + else()
|
---|
| 3267 | + message(STATUS "HDF5 not found")
|
---|
| 3268 | + endif()
|
---|
| 3269 | +endif()
|
---|
| 3270 | +
|
---|
| 3271 | +if(HAVE_SOLVER)
|
---|
| 3272 | + if(ENABLE_GMM)
|
---|
| 3273 | + find_path(GMM_INC "gmm.h" PATH_SUFFIXES src include include/gmm)
|
---|
| 3274 | + if(ENABLE_SYSTEM_CONTRIB AND GMM_INC)
|
---|
| 3275 | + message(STATUS "Using system version of GMM")
|
---|
| 3276 | + list(APPEND EXTERNAL_INCLUDES ${GMM_INC})
|
---|
| 3277 | + set_config_option(HAVE_GMM "Gmm[system]")
|
---|
| 3278 | + elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/gmm)
|
---|
| 3279 | + include_directories(contrib/gmm)
|
---|
| 3280 | + set_config_option(HAVE_GMM "Gmm")
|
---|
| 3281 | + endif()
|
---|
| 3282 | + endif()
|
---|
| 3283 | +
|
---|
| 3284 | + if(ENABLE_PETSC)
|
---|
| 3285 | + if(PETSC_DIR)
|
---|
| 3286 | + set(ENV_PETSC_DIR ${PETSC_DIR})
|
---|
| 3287 | + else()
|
---|
| 3288 | + set(ENV_PETSC_DIR $ENV{PETSC_DIR})
|
---|
| 3289 | + endif()
|
---|
| 3290 | + if(PETSC_ARCH)
|
---|
| 3291 | + set(ENV_PETSC_ARCH ${PETSC_ARCH})
|
---|
| 3292 | + else()
|
---|
| 3293 | + set(ENV_PETSC_ARCH $ENV{PETSC_ARCH})
|
---|
| 3294 | + endif()
|
---|
| 3295 | + set(PETSC_POSSIBLE_CONF_FILES
|
---|
| 3296 | + ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/conf/petscvariables
|
---|
| 3297 | + ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib/petsc-conf/petscvariables
|
---|
| 3298 | + ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib/petsc/conf/petscvariables)
|
---|
| 3299 | + foreach(FILE ${PETSC_POSSIBLE_CONF_FILES})
|
---|
| 3300 | + if(EXISTS ${FILE})
|
---|
| 3301 | + # old-style PETSc installations (using PETSC_DIR and PETSC_ARCH)
|
---|
| 3302 | + message(STATUS "Using PETSc dir: ${ENV_PETSC_DIR}")
|
---|
| 3303 | + message(STATUS "Using PETSc arch: ${ENV_PETSC_ARCH}")
|
---|
| 3304 | + # find includes by parsing the petscvariables file
|
---|
| 3305 | + file(STRINGS ${FILE} PETSC_VARIABLES NEWLINE_CONSUME)
|
---|
| 3306 | + endif()
|
---|
| 3307 | + endforeach()
|
---|
| 3308 | + if(PETSC_VARIABLES)
|
---|
| 3309 | + # try to find PETSC_CC_INCLUDES for PETSc >= 3.4
|
---|
| 3310 | + string(REGEX MATCH "PETSC_CC_INCLUDES = [^\n\r]*" PETSC_PACKAGES_INCLUDES
|
---|
| 3311 | + ${PETSC_VARIABLES})
|
---|
| 3312 | + if(PETSC_PACKAGES_INCLUDES)
|
---|
| 3313 | + string(REPLACE "PETSC_CC_INCLUDES = " "" PETSC_PACKAGES_INCLUDES
|
---|
| 3314 | + ${PETSC_PACKAGES_INCLUDES})
|
---|
| 3315 | + else()
|
---|
| 3316 | + # try to find PETSC_PACKAGES_INCLUDES in older versions
|
---|
| 3317 | + list(APPEND EXTERNAL_INCLUDES ${ENV_PETSC_DIR}/include)
|
---|
| 3318 | + list(APPEND EXTERNAL_INCLUDES ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/include)
|
---|
| 3319 | + string(REGEX MATCH "PACKAGES_INCLUDES = [^\n\r]*" PETSC_PACKAGES_INCLUDES
|
---|
| 3320 | + ${PETSC_VARIABLES})
|
---|
| 3321 | + string(REPLACE "PACKAGES_INCLUDES = " "" PETSC_PACKAGES_INCLUDES
|
---|
| 3322 | + ${PETSC_PACKAGES_INCLUDES})
|
---|
| 3323 | + endif()
|
---|
| 3324 | + if(PETSC_PACKAGES_INCLUDES)
|
---|
| 3325 | + if(PETSC_PACKAGES_INCLUDES)
|
---|
| 3326 | + string(REPLACE "-I" "" PETSC_PACKAGES_INCLUDES ${PETSC_PACKAGES_INCLUDES})
|
---|
| 3327 | + string(REPLACE " " ";" PETSC_PACKAGES_INCLUDES ${PETSC_PACKAGES_INCLUDES})
|
---|
| 3328 | + foreach(VAR ${PETSC_PACKAGES_INCLUDES})
|
---|
| 3329 | + # seem to include unexisting directories (/usr/include/lib64)
|
---|
| 3330 | + # check to avoid warnings
|
---|
| 3331 | + if(EXISTS ${VAR})
|
---|
| 3332 | + list(APPEND EXTERNAL_INCLUDES ${VAR})
|
---|
| 3333 | + endif()
|
---|
| 3334 | + endforeach()
|
---|
| 3335 | + endif()
|
---|
| 3336 | + endif()
|
---|
| 3337 | + # find libraries (<= 3.0)
|
---|
| 3338 | + set(PETSC_LIBS_REQUIRED petscksp petscdm petscmat petscvec petsc)
|
---|
| 3339 | + find_all_libraries(PETSC_LIBS PETSC_LIBS_REQUIRED
|
---|
| 3340 | + ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib "")
|
---|
| 3341 | + # petsc 3.1 creates only one library (libpetsc)
|
---|
| 3342 | + if(NOT PETSC_LIBS)
|
---|
| 3343 | + find_library(PETSC_LIBS petsc PATHS ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib
|
---|
| 3344 | + NO_DEFAULT_PATH)
|
---|
| 3345 | + endif()
|
---|
| 3346 | + if(PETSC_LIBS)
|
---|
| 3347 | + set_config_option(HAVE_PETSC "PETSc")
|
---|
| 3348 | + if(NOT HAVE_BLAS)
|
---|
| 3349 | + set_config_option(HAVE_BLAS "Blas[petsc]")
|
---|
| 3350 | + endif()
|
---|
| 3351 | + if(NOT HAVE_LAPACK)
|
---|
| 3352 | + set_config_option(HAVE_LAPACK "Lapack[petsc]")
|
---|
| 3353 | + endif()
|
---|
| 3354 | + endif()
|
---|
| 3355 | + # find slepc (needs to be linked in before petsc)
|
---|
| 3356 | + if(ENABLE_SLEPC)
|
---|
| 3357 | + if(SLEPC_DIR)
|
---|
| 3358 | + set(ENV_SLEPC_DIR ${SLEPC_DIR})
|
---|
| 3359 | + else()
|
---|
| 3360 | + set(ENV_SLEPC_DIR $ENV{SLEPC_DIR})
|
---|
| 3361 | + endif()
|
---|
| 3362 | + find_library(SLEPC_LIB slepc PATHS ${ENV_SLEPC_DIR}/${ENV_PETSC_ARCH}/lib
|
---|
| 3363 | + NO_DEFAULT_PATH)
|
---|
| 3364 | + if(SLEPC_LIB)
|
---|
| 3365 | + find_path(SLEPC_INC "slepc.h" PATHS ${ENV_SLEPC_DIR} PATH_SUFFIXES include
|
---|
| 3366 | + ${ENV_PETSC_ARCH}/include include/slepc NO_DEFAULT_PATH)
|
---|
| 3367 | + if(SLEPC_INC)
|
---|
| 3368 | + message(STATUS "Using SLEPc dir: ${ENV_SLEPC_DIR}")
|
---|
| 3369 | + set_config_option(HAVE_SLEPC "SLEPc")
|
---|
| 3370 | + list(APPEND EXTERNAL_LIBRARIES ${SLEPC_LIB})
|
---|
| 3371 | + list(APPEND EXTERNAL_INCLUDES ${SLEPC_INC})
|
---|
| 3372 | + find_path(SLEPC_INC2 "slepcconf.h" PATHS ${ENV_SLEPC_DIR}
|
---|
| 3373 | + PATH_SUFFIXES ${ENV_PETSC_ARCH}/include NO_DEFAULT_PATH)
|
---|
| 3374 | + if(SLEPC_INC2)
|
---|
| 3375 | + list(APPEND EXTERNAL_INCLUDES ${SLEPC_INC2})
|
---|
| 3376 | + endif()
|
---|
| 3377 | + endif()
|
---|
| 3378 | + endif()
|
---|
| 3379 | + endif()
|
---|
| 3380 | + list(APPEND EXTERNAL_LIBRARIES ${PETSC_LIBS})
|
---|
| 3381 | + # find additional libraries to link with
|
---|
| 3382 | + string(REGEX MATCH "PACKAGES_LIBS = [^\n\r]*" PLIBS ${PETSC_VARIABLES})
|
---|
| 3383 | + if(PLIBS)
|
---|
| 3384 | + string(REPLACE "PACKAGES_LIBS = " "" PLIBS ${PLIBS})
|
---|
| 3385 | + string(STRIP ${PLIBS} PLIBS)
|
---|
| 3386 | + list(APPEND EXTERNAL_LIBRARIES "${PLIBS}")
|
---|
| 3387 | + endif()
|
---|
| 3388 | + string(REGEX MATCH "PETSC_EXTERNAL_LIB_BASIC = [^\n\r]*" PLIBS_BASIC ${PETSC_VARIABLES})
|
---|
| 3389 | + if(PLIBS_BASIC)
|
---|
| 3390 | + string(REPLACE "PETSC_EXTERNAL_LIB_BASIC = " "" PLIBS_BASIC ${PLIBS_BASIC})
|
---|
| 3391 | + string(STRIP ${PLIBS_BASIC} PLIBS_BASIC)
|
---|
| 3392 | + separate_arguments(PLIBS_BASIC)
|
---|
| 3393 | + list(APPEND EXTERNAL_LIBRARIES "${PLIBS_BASIC}")
|
---|
| 3394 | + endif()
|
---|
| 3395 | + string(REGEX MATCH "PCC_LINKER_LIBS = [^\n\r]*" LLIBS ${PETSC_VARIABLES})
|
---|
| 3396 | + if(LLIBS)
|
---|
| 3397 | + string(REPLACE "PCC_LINKER_LIBS = " "" LLIBS ${LLIBS})
|
---|
| 3398 | + string(STRIP ${LLIBS} LLIBS)
|
---|
| 3399 | + list(APPEND EXTERNAL_LIBRARIES "${LLIBS}")
|
---|
| 3400 | + endif()
|
---|
| 3401 | + else()
|
---|
| 3402 | + # new-style PETSc installations (in standard system directories)
|
---|
| 3403 | + find_library(PETSC_LIBS petsc)
|
---|
| 3404 | + find_path(PETSC_INC "petsc.h" PATH_SUFFIXES include/petsc)
|
---|
| 3405 | + if(PETSC_LIBS AND PETSC_INC)
|
---|
| 3406 | + set_config_option(HAVE_PETSC "PETSc")
|
---|
| 3407 | + if(ENABLE_SLEPC)
|
---|
| 3408 | + find_library(SLEPC_LIB slepc)
|
---|
| 3409 | + find_path(SLEPC_INC "slepc.h" PATH_SUFFIXES include/slepc)
|
---|
| 3410 | + if(SLEPC_LIB AND SLEPC_INC)
|
---|
| 3411 | + set_config_option(HAVE_SLEPC "SLEPc")
|
---|
| 3412 | + list(APPEND EXTERNAL_LIBRARIES ${SLEPC_LIB})
|
---|
| 3413 | + list(APPEND EXTERNAL_INCLUDES ${SLEPC_INC})
|
---|
| 3414 | + endif()
|
---|
| 3415 | + endif()
|
---|
| 3416 | + list(APPEND EXTERNAL_LIBRARIES ${PETSC_LIBS})
|
---|
| 3417 | + list(APPEND EXTERNAL_INCLUDES ${PETSC_INC})
|
---|
| 3418 | + endif()
|
---|
| 3419 | + endif()
|
---|
| 3420 | + endif()
|
---|
| 3421 | +
|
---|
| 3422 | + if(ENABLE_MUMPS AND HAVE_BLAS AND HAVE_LAPACK)
|
---|
| 3423 | + set(MUMPS_LIBS_REQUIRED smumps dmumps cmumps zmumps mumps_common pord)
|
---|
| 3424 | + if(NOT ENABLE_MPI)
|
---|
| 3425 | + list(APPEND MUMPS_LIBS_REQUIRED mpiseq)
|
---|
| 3426 | + endif()
|
---|
| 3427 | + find_all_libraries(MUMPS_LIBRARIES MUMPS_LIBS_REQUIRED "" "lib")
|
---|
| 3428 | + find_path(SMUMPS_INC "smumps_c.h" PATH_SUFFIXES src include)
|
---|
| 3429 | + find_path(DMUMPS_INC "dmumps_c.h" PATH_SUFFIXES src include)
|
---|
| 3430 | + find_path(CMUMPS_INC "cmumps_c.h" PATH_SUFFIXES src include)
|
---|
| 3431 | + find_path(ZMUMPS_INC "zmumps_c.h" PATH_SUFFIXES src include)
|
---|
| 3432 | + if(MUMPS_LIBRARIES AND SMUMPS_INC AND DMUMPS_INC AND CMUMPS_INC AND ZMUMPS_INC)
|
---|
| 3433 | + set_config_option(HAVE_MUMPS "MUMPS")
|
---|
| 3434 | + list(APPEND EXTERNAL_LIBRARIES ${MUMPS_LIBRARIES})
|
---|
| 3435 | + list(APPEND EXTERNAL_INCLUDES ${SMUMPS_INC})
|
---|
| 3436 | + list(APPEND EXTERNAL_INCLUDES ${DMUMPS_INC})
|
---|
| 3437 | + list(APPEND EXTERNAL_INCLUDES ${CMUMPS_INC})
|
---|
| 3438 | + list(APPEND EXTERNAL_INCLUDES ${ZMUMPS_INC})
|
---|
| 3439 | + find_library(GFORTRAN_LIB gfortran)
|
---|
| 3440 | + if(GFORTRAN_LIB)
|
---|
| 3441 | + list(APPEND EXTERNAL_LIBRARIES ${GFORTRAN_LIB})
|
---|
| 3442 | + endif()
|
---|
| 3443 | + if(ENABLE_GMM) # use GMM/MUMPS interface
|
---|
| 3444 | + add_definitions(-DGMM_USES_MUMPS)
|
---|
| 3445 | + endif()
|
---|
| 3446 | + endif()
|
---|
| 3447 | + endif()
|
---|
| 3448 | +
|
---|
| 3449 | + if(ENABLE_GETDP)
|
---|
| 3450 | + find_library(GETDP_LIB GetDP)
|
---|
| 3451 | + find_path(GETDP_INC "GetDP.h" PATH_SUFFIXES getdp)
|
---|
| 3452 | + if(GETDP_LIB AND GETDP_INC)
|
---|
| 3453 | + set_config_option(HAVE_GETDP "GetDP")
|
---|
| 3454 | + list(APPEND EXTERNAL_LIBRARIES ${GETDP_LIB})
|
---|
| 3455 | + list(APPEND EXTERNAL_INCLUDES ${GETDP_INC})
|
---|
| 3456 | + endif()
|
---|
| 3457 | + endif()
|
---|
| 3458 | +endif()
|
---|
| 3459 | +
|
---|
| 3460 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/hxt AND
|
---|
| 3461 | + ENABLE_HXT AND HAVE_METIS)
|
---|
| 3462 | + set_config_option(HAVE_HXT "Hxt")
|
---|
| 3463 | + add_subdirectory(contrib/hxt)
|
---|
| 3464 | + include_directories(BEFORE contrib/hxt)
|
---|
| 3465 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/hxt/hxt_tetDelaunay.c)
|
---|
| 3466 | + set_config_option(HAVE_HXT3D "Hxt3D")
|
---|
| 3467 | + endif()
|
---|
| 3468 | + if(MSVC)
|
---|
| 3469 | + # Visual C++ does not support C99 - force compilation as C++ code
|
---|
| 3470 | + file(GLOB_RECURSE HXT_SRC contrib/hxt/*.c)
|
---|
| 3471 | + set_compile_flags(HXT_SRC "/TP")
|
---|
| 3472 | + endif()
|
---|
| 3473 | + check_include_file("immintrin.h" HAVE_IMMINTRIN_H)
|
---|
| 3474 | + if(NOT HAVE_IMMINTRIN_H)
|
---|
| 3475 | + add_definitions(-DHAVE_NO_IMMINTRIN_H)
|
---|
| 3476 | + endif()
|
---|
| 3477 | + if(HAVE_PETSC)
|
---|
| 3478 | + add_definitions(-DHXT_HAVE_PETSC)
|
---|
| 3479 | + endif()
|
---|
| 3480 | + if(CMAKE_C_COMPILER MATCHES "pgi")
|
---|
| 3481 | + add_definitions(-DHAVE_NO_OPENMP_SIMD)
|
---|
| 3482 | + endif()
|
---|
| 3483 | +endif()
|
---|
| 3484 | +
|
---|
| 3485 | +if(ENABLE_OCC)
|
---|
| 3486 | + set(OCC_MINIMAL_VERSION "6.9.1")
|
---|
| 3487 | + if(WIN32)
|
---|
| 3488 | + if(HAVE_64BIT_SIZE_T)
|
---|
| 3489 | + set(OCC_SYS_NAME win64)
|
---|
| 3490 | + else()
|
---|
| 3491 | + set(OCC_SYS_NAME win32)
|
---|
| 3492 | + endif()
|
---|
| 3493 | + else()
|
---|
| 3494 | + set(OCC_SYS_NAME ${CMAKE_SYSTEM_NAME})
|
---|
| 3495 | + endif()
|
---|
| 3496 | + find_path(OCC_INC "Standard_Version.hxx" HINTS ENV CASROOT PATH_SUFFIXES
|
---|
| 3497 | + inc include include/oce opencascade include/opencascade
|
---|
| 3498 | + occt include/occt)
|
---|
| 3499 | + if(OCC_INC)
|
---|
| 3500 | + file(STRINGS ${OCC_INC}/Standard_Version.hxx
|
---|
| 3501 | + OCC_MAJOR REGEX "#define OCC_VERSION_MAJOR.*")
|
---|
| 3502 | + file(STRINGS ${OCC_INC}/Standard_Version.hxx
|
---|
| 3503 | + OCC_MINOR REGEX "#define OCC_VERSION_MINOR.*")
|
---|
| 3504 | + file(STRINGS ${OCC_INC}/Standard_Version.hxx
|
---|
| 3505 | + OCC_MAINT REGEX "#define OCC_VERSION_MAINTENANCE.*")
|
---|
| 3506 | + if(OCC_MAJOR AND OCC_MINOR AND OCC_MAINT)
|
---|
| 3507 | + string(REGEX MATCH "[0-9]+" OCC_MAJOR "${OCC_MAJOR}")
|
---|
| 3508 | + string(REGEX MATCH "[0-9]+" OCC_MINOR "${OCC_MINOR}")
|
---|
| 3509 | + string(REGEX MATCH "[0-9]+" OCC_MAINT "${OCC_MAINT}")
|
---|
| 3510 | + set(OCC_VERSION "${OCC_MAJOR}.${OCC_MINOR}.${OCC_MAINT}")
|
---|
| 3511 | + message(STATUS "Found OpenCASCADE version ${OCC_VERSION} in ${OCC_INC}")
|
---|
| 3512 | + endif()
|
---|
| 3513 | + endif()
|
---|
| 3514 | + if(OCC_VERSION AND OCC_VERSION STRLESS ${OCC_MINIMAL_VERSION})
|
---|
| 3515 | + message(WARNING "Gmsh requires OpenCASCADE >= ${OCC_MINIMAL_VERSION}. "
|
---|
| 3516 | + "Use CMAKE_PREFIX_PATH or the CASROOT environment variable "
|
---|
| 3517 | + "to explicitely specify the installation path of OpenCASCADE")
|
---|
| 3518 | + elseif(OCC_INC)
|
---|
| 3519 | + set(OCC_LIBS_REQUIRED
|
---|
| 3520 | + # subset of DataExchange
|
---|
| 3521 | + TKSTEP TKSTEP209 TKSTEPAttr TKSTEPBase TKIGES TKXSBase
|
---|
| 3522 | + # ModelingAlgorithms
|
---|
| 3523 | + TKOffset TKFeat TKFillet TKBool TKMesh TKHLR TKBO TKPrim TKShHealing
|
---|
| 3524 | + TKTopAlgo TKGeomAlgo
|
---|
| 3525 | + # ModelingData
|
---|
| 3526 | + TKBRep TKGeomBase TKG3d TKG2d
|
---|
| 3527 | + # FoundationClasses
|
---|
| 3528 | + TKMath TKernel)
|
---|
| 3529 | + if(ENABLE_OCC_TBB)
|
---|
| 3530 | + list(APPEND OCC_LIBS_REQUIRED tbb tbbmalloc)
|
---|
| 3531 | + endif()
|
---|
| 3532 | + list(LENGTH OCC_LIBS_REQUIRED NUM_OCC_LIBS_REQUIRED)
|
---|
| 3533 | + if(OCC_LIBS)
|
---|
| 3534 | + message(STATUS "OCC libraries specified explicitly: " ${OCC_LIBS})
|
---|
| 3535 | + list(LENGTH OCC_LIBS_REQUIRED NUM_OCC_LIBS)
|
---|
| 3536 | + else()
|
---|
| 3537 | + set(OCC_LIBS)
|
---|
| 3538 | + foreach(OCC ${OCC_LIBS_REQUIRED})
|
---|
| 3539 | + if(ENABLE_OCC_STATIC)
|
---|
| 3540 | + set(LIBNAME lib${OCC}.a)
|
---|
| 3541 | + else()
|
---|
| 3542 | + set(LIBNAME ${OCC})
|
---|
| 3543 | + endif()
|
---|
| 3544 | + find_library(OCC_LIB ${LIBNAME} HINTS ENV CASROOT PATH_SUFFIXES
|
---|
| 3545 | + lib ${OCC_SYS_NAME}/lib ${OCC_SYS_NAME}/vc8/lib)
|
---|
| 3546 | + if(OCC_LIB)
|
---|
| 3547 | + list(APPEND OCC_LIBS ${OCC_LIB})
|
---|
| 3548 | + else()
|
---|
| 3549 | + message(STATUS "OCC lib " ${LIBNAME} " not Found")
|
---|
| 3550 | + endif()
|
---|
| 3551 | + unset(OCC_LIB CACHE)
|
---|
| 3552 | + endforeach()
|
---|
| 3553 | + list(LENGTH OCC_LIBS NUM_OCC_LIBS)
|
---|
| 3554 | + endif()
|
---|
| 3555 | + endif()
|
---|
| 3556 | +
|
---|
| 3557 | + # additional OCC libraries to handle reading of STEP/IGES attributes. Oh my...
|
---|
| 3558 | + if(ENABLE_OCC_CAF)
|
---|
| 3559 | + find_package(Freetype)
|
---|
| 3560 | + if(FREETYPE_FOUND)
|
---|
| 3561 | + set(OCC_CAF_LIBS_REQUIRED
|
---|
| 3562 | + TKXDESTEP TKXDEIGES TKXCAF TKLCAF TKVCAF TKCAF TKV3d TKService TKCDF)
|
---|
| 3563 | + list(LENGTH OCC_CAF_LIBS_REQUIRED NUM_OCC_CAF_LIBS_REQUIRED)
|
---|
| 3564 | + set(OCC_CAF_LIBS)
|
---|
| 3565 | + foreach(OCC ${OCC_CAF_LIBS_REQUIRED})
|
---|
| 3566 | + find_library(OCC_CAF_LIB ${OCC} HINTS ENV CASROOT PATH_SUFFIXES
|
---|
| 3567 | + lib ${OCC_SYS_NAME}/lib ${OCC_SYS_NAME}/vc8/lib)
|
---|
| 3568 | + if(OCC_CAF_LIB)
|
---|
| 3569 | + list(APPEND OCC_CAF_LIBS ${OCC_CAF_LIB})
|
---|
| 3570 | + else()
|
---|
| 3571 | + message(STATUS "OCC CAF lib " ${OCC} " not Found")
|
---|
| 3572 | + endif()
|
---|
| 3573 | + unset(OCC_CAF_LIB CACHE)
|
---|
| 3574 | + endforeach()
|
---|
| 3575 | + list(LENGTH OCC_CAF_LIBS NUM_OCC_CAF_LIBS)
|
---|
| 3576 | + endif()
|
---|
| 3577 | + endif()
|
---|
| 3578 | +
|
---|
| 3579 | + # append OCC CAF libraries first...
|
---|
| 3580 | + if(NUM_OCC_CAF_LIBS EQUAL NUM_OCC_CAF_LIBS_REQUIRED)
|
---|
| 3581 | + set_config_option(HAVE_OCC_CAF "OpenCASCADE-CAF")
|
---|
| 3582 | + list(APPEND EXTERNAL_LIBRARIES ${OCC_CAF_LIBS} ${FREETYPE_LIBRARIES})
|
---|
| 3583 | + list(APPEND EXTERNAL_INCLUDES ${FREETYPE_INCLUDE_DIRS})
|
---|
| 3584 | + if(WIN32)
|
---|
| 3585 | + list(APPEND EXTERNAL_LIBRARIES "windowscodecs")
|
---|
| 3586 | + list(APPEND EXTERNAL_LIBRARIES "ole32")
|
---|
| 3587 | + endif()
|
---|
| 3588 | + endif()
|
---|
| 3589 | +
|
---|
| 3590 | + # then append OCC libraries
|
---|
| 3591 | + if(NUM_OCC_LIBS EQUAL NUM_OCC_LIBS_REQUIRED)
|
---|
| 3592 | + set_config_option(HAVE_OCC "OpenCASCADE")
|
---|
| 3593 | + list(APPEND EXTERNAL_LIBRARIES ${OCC_LIBS})
|
---|
| 3594 | + list(APPEND EXTERNAL_INCLUDES ${OCC_INC})
|
---|
| 3595 | + if(HAVE_64BIT_SIZE_T)
|
---|
| 3596 | + add_definitions(-D_OCC64)
|
---|
| 3597 | + endif()
|
---|
| 3598 | + if(WIN32)
|
---|
| 3599 | + list(APPEND EXTERNAL_LIBRARIES "winspool")
|
---|
| 3600 | + add_definitions(-DOCC_CONVERT_SIGNALS)
|
---|
| 3601 | + elseif(MSVC)
|
---|
| 3602 | + add_definitions(-DWNT)
|
---|
| 3603 | + endif()
|
---|
| 3604 | + endif()
|
---|
| 3605 | +endif()
|
---|
| 3606 | +
|
---|
| 3607 | +if(ENABLE_ACIS)
|
---|
| 3608 | + find_library(ACIS_LIB SpaACIS PATH_SUFFIXES bin/maci386)
|
---|
| 3609 | + if(ACIS_LIB)
|
---|
| 3610 | + find_path(ACIS_INC "kernapi.hxx" PATH_SUFFIXES include)
|
---|
| 3611 | + if(ACIS_INC)
|
---|
| 3612 | + set_config_option(HAVE_ACIS "Acis")
|
---|
| 3613 | + list(APPEND EXTERNAL_LIBRARIES ${ACIS_LIB})
|
---|
| 3614 | + list(APPEND EXTERNAL_INCLUDES ${ACIS_INC})
|
---|
| 3615 | + endif()
|
---|
| 3616 | + endif()
|
---|
| 3617 | +endif()
|
---|
| 3618 | +
|
---|
| 3619 | +if(ENABLE_ZIPPER)
|
---|
| 3620 | + if(ENABLE_BUILD_IOS)
|
---|
| 3621 | + set_config_option(HAVE_LIBZ "Zlib")
|
---|
| 3622 | + endif()
|
---|
| 3623 | + if(NOT HAVE_LIBZ) # necessary for non-GUI builds
|
---|
| 3624 | + find_package(ZLIB)
|
---|
| 3625 | + if(ZLIB_FOUND)
|
---|
| 3626 | + set_config_option(HAVE_LIBZ "Zlib")
|
---|
| 3627 | + list(APPEND EXTERNAL_LIBRARIES ${ZLIB_LIBRARIES})
|
---|
| 3628 | + list(APPEND EXTERNAL_INCLUDES ${ZLIB_INCLUDE_DIR})
|
---|
| 3629 | + endif()
|
---|
| 3630 | + endif()
|
---|
| 3631 | + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/zipper AND HAVE_LIBZ)
|
---|
| 3632 | + add_subdirectory(contrib/zipper)
|
---|
| 3633 | + include_directories(contrib/zipper)
|
---|
| 3634 | + set_config_option(HAVE_ZIPPER "Zipper")
|
---|
| 3635 | + endif()
|
---|
| 3636 | +endif()
|
---|
| 3637 | +
|
---|
| 3638 | +if(ENABLE_PRIVATE_API AND ENABLE_WRAP_PYTHON)
|
---|
| 3639 | + find_package(SWIG REQUIRED)
|
---|
| 3640 | + include(${SWIG_USE_FILE})
|
---|
| 3641 | + find_package(PythonLibs)
|
---|
| 3642 | + if(SWIG_FOUND AND PYTHONLIBS_FOUND)
|
---|
| 3643 | + message(STATUS "Found SWIG version " ${SWIG_VERSION})
|
---|
| 3644 | + find_package(PythonInterp)
|
---|
| 3645 | + string(SUBSTRING ${SWIG_VERSION} 0 1 SWIG_MAJOR_VERSION)
|
---|
| 3646 | + if(SWIG_MAJOR_VERSION EQUAL 1)
|
---|
| 3647 | + message(WARNING "Python bindings require SWIG >= 2: disabling Python")
|
---|
| 3648 | + else()
|
---|
| 3649 | + set_config_option(HAVE_PYTHON "Python")
|
---|
| 3650 | + mark_as_advanced(CLEAR PYTHON_LIBRARY PYTHON_INCLUDE_DIR)
|
---|
| 3651 | + if(ENABLE_NUMPY)
|
---|
| 3652 | + if (NOT NUMPY_INC)
|
---|
| 3653 | + EXEC_PROGRAM (${PYTHON_EXECUTABLE}
|
---|
| 3654 | + ARGS "-c \"import numpy; print(numpy.get_include())\""
|
---|
| 3655 | + OUTPUT_VARIABLE NUMPY_INC
|
---|
| 3656 | + RETURN_VALUE NUMPY_NOT_FOUND)
|
---|
| 3657 | + endif()
|
---|
| 3658 | + if(NUMPY_INC)
|
---|
| 3659 | + list(APPEND EXTERNAL_INCLUDES ${NUMPY_INC})
|
---|
| 3660 | + set_config_option(HAVE_NUMPY "Numpy")
|
---|
| 3661 | + endif()
|
---|
| 3662 | + endif()
|
---|
| 3663 | + if(HAVE_PETSC)
|
---|
| 3664 | + if(ENABLE_PETSC4PY)
|
---|
| 3665 | + EXECUTE_PROCESS(
|
---|
| 3666 | + COMMAND ${PYTHON_EXECUTABLE} -c "import petsc4py; print(petsc4py.get_include())"
|
---|
| 3667 | + OUTPUT_VARIABLE PETSC4PY_INC
|
---|
| 3668 | + RESULT_VARIABLE PETSC4PY_NOT_FOUND
|
---|
| 3669 | + ERROR_QUIET
|
---|
| 3670 | + OUTPUT_STRIP_TRAILING_WHITESPACE)
|
---|
| 3671 | + if(PETSC4PY_INC)
|
---|
| 3672 | + list(APPEND EXTERNAL_INCLUDES ${PETSC4PY_INC})
|
---|
| 3673 | + set_config_option(HAVE_PETSC4PY "PETSc4py")
|
---|
| 3674 | + endif()
|
---|
| 3675 | + endif()
|
---|
| 3676 | + endif()
|
---|
| 3677 | + endif()
|
---|
| 3678 | + endif()
|
---|
| 3679 | +endif()
|
---|
| 3680 | +
|
---|
| 3681 | +check_function_exists(vsnprintf HAVE_VSNPRINTF)
|
---|
| 3682 | +if(NOT HAVE_VSNPRINTF AND NOT ENABLE_BUILD_IOS AND NOT ENABLE_BUILD_ANDROID)
|
---|
| 3683 | + set_config_option(HAVE_NO_VSNPRINTF "NoVsnprintf")
|
---|
| 3684 | +endif()
|
---|
| 3685 | +
|
---|
| 3686 | +check_include_file(sys/socket.h HAVE_SYS_SOCKET_H)
|
---|
| 3687 | +if(HAVE_SYS_SOCKET_H)
|
---|
| 3688 | + set(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h)
|
---|
| 3689 | +endif()
|
---|
| 3690 | +check_type_size(socklen_t SOCKLEN_T_SIZE)
|
---|
| 3691 | +set(CMAKE_EXTRA_INCLUDE_FILES)
|
---|
| 3692 | +if(NOT SOCKLEN_T_SIZE AND NOT ENABLE_BUILD_IOS AND NOT ENABLE_BUILD_ANDROID)
|
---|
| 3693 | + set_config_option(HAVE_NO_SOCKLEN_T "NoSocklenT")
|
---|
| 3694 | +endif()
|
---|
| 3695 | +
|
---|
| 3696 | +check_include_file(stdint.h HAVE_STDINT_H)
|
---|
| 3697 | +if(HAVE_STDINT_H)
|
---|
| 3698 | + set(CMAKE_EXTRA_INCLUDE_FILES stdint.h)
|
---|
| 3699 | +else()
|
---|
| 3700 | + set_config_option(HAVE_NO_STDINT_H "NoStdintH")
|
---|
| 3701 | +endif()
|
---|
| 3702 | +check_type_size(intptr_t INTPTR_T_SIZE)
|
---|
| 3703 | +set(CMAKE_EXTRA_INCLUDE_FILES)
|
---|
| 3704 | +if(NOT INTPTR_T_SIZE AND NOT ENABLE_BUILD_IOS AND NOT ENABLE_BUILD_ANDROID)
|
---|
| 3705 | + set_config_option(HAVE_NO_INTPTR_T "NoIntptrT")
|
---|
| 3706 | +endif()
|
---|
| 3707 | +
|
---|
| 3708 | +check_include_file(dlfcn.h DLFCN_H)
|
---|
| 3709 | +if(DLFCN_H)
|
---|
| 3710 | + set_config_option(HAVE_DLOPEN "Dlopen")
|
---|
| 3711 | + list(APPEND EXTERNAL_LIBRARIES ${CMAKE_DL_LIBS})
|
---|
| 3712 | +endif()
|
---|
| 3713 | +
|
---|
| 3714 | +if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
---|
| 3715 | + check_include_file(linux/joystick.h LINUX_JOYSTICK_H)
|
---|
| 3716 | + if(LINUX_JOYSTICK_H)
|
---|
| 3717 | + set_config_option(HAVE_LINUX_JOYSTICK "LinuxJoystick")
|
---|
| 3718 | + endif()
|
---|
| 3719 | +endif()
|
---|
| 3720 | +
|
---|
| 3721 | +if(WIN32)
|
---|
| 3722 | + add_definitions(-D_USE_MATH_DEFINES)
|
---|
| 3723 | + list(APPEND EXTERNAL_LIBRARIES winmm wsock32 ws2_32 psapi)
|
---|
| 3724 | +endif()
|
---|
| 3725 | +
|
---|
| 3726 | +if(MSVC)
|
---|
| 3727 | + add_definitions(-DNOMINMAX -D_CRT_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_DEPRECATE)
|
---|
| 3728 | +endif()
|
---|
| 3729 | +
|
---|
| 3730 | +# add C functions API
|
---|
| 3731 | +set(GMSH_SRC ${GMSH_SRC};api/gmshc.cpp)
|
---|
| 3732 | +
|
---|
| 3733 | +# force full warnings to encourage everybody to write clean(er) code
|
---|
| 3734 | +check_cxx_compiler_flag("-Wall" WALL)
|
---|
| 3735 | +if(WALL AND NOT MSVC)
|
---|
| 3736 | + file(GLOB_RECURSE WALL_SRC Common/*.cpp Fltk/*.cpp FunctionSpace/*.cpp
|
---|
| 3737 | + Geo/*.cpp Graphics/*.cpp Mesh/*.cpp Numeric/*.cpp Parser/*.cpp
|
---|
| 3738 | + Plugin/*.cpp Post/*.cpp Solver/*.cpp)
|
---|
| 3739 | + set(WF "-Wall")
|
---|
| 3740 | + check_cxx_compiler_flag("-Wint-to-void-pointer-cast" WCAST)
|
---|
| 3741 | + if(WCAST)
|
---|
| 3742 | + set(WF "${WF} -Wno-int-to-void-pointer-cast")
|
---|
| 3743 | + endif()
|
---|
| 3744 | + check_cxx_compiler_flag("-Wdeprecated-declarations" WDEPREC)
|
---|
| 3745 | + if(WDEPREC)
|
---|
| 3746 | + # FIXME: remove this when we have fixed the deprecated GLU code for OpenGL3
|
---|
| 3747 | + set(WF "${WF} -Wno-deprecated-declarations")
|
---|
| 3748 | + endif()
|
---|
| 3749 | + check_cxx_compiler_flag("-Wmisleading-indentation" WIND)
|
---|
| 3750 | + if(WIND)
|
---|
| 3751 | + set(WF "${WF} -Wno-misleading-indentation")
|
---|
| 3752 | + endif()
|
---|
| 3753 | + set_compile_flags(WALL_SRC ${WF})
|
---|
| 3754 | +endif()
|
---|
| 3755 | +
|
---|
| 3756 | +# don't issue warnings for contributed libraries
|
---|
| 3757 | +check_cxx_compiler_flag("-w" NOWARN)
|
---|
| 3758 | +if(NOWARN)
|
---|
| 3759 | + file(GLOB_RECURSE NOWARN_SRC contrib/*.cpp contrib/*.cc contrib/*.cxx contrib/*.c)
|
---|
| 3760 | + set_compile_flags(NOWARN_SRC "-w")
|
---|
| 3761 | +endif()
|
---|
| 3762 | +
|
---|
| 3763 | +# disable compile optimization on some known problematic files
|
---|
| 3764 | +check_cxx_compiler_flag("-O0" NOOPT)
|
---|
| 3765 | +if(NOOPT OR ENABLE_BUILD_IOS)
|
---|
| 3766 | + if(ENABLE_BUILD_IOS) # optimized iOS 10 64 bits screws somewhere in Geo
|
---|
| 3767 | + file(GLOB_RECURSE NOOPT_SRC Numeric/robustPredicates.cpp Geo/G*.cpp Mesh/BDS.cpp
|
---|
| 3768 | + Parser/Gmsh.tab.cpp contrib/blossom/* Mesh/Background*)
|
---|
| 3769 | + else()
|
---|
| 3770 | + file(GLOB_RECURSE NOOPT_SRC Numeric/robustPredicates.cpp Mesh/BDS.cpp
|
---|
| 3771 | + Parser/Gmsh.tab.cpp contrib/blossom/* contrib/bamg/* Mesh/Background*)
|
---|
| 3772 | + endif()
|
---|
| 3773 | + set_compile_flags(NOOPT_SRC "-O0")
|
---|
| 3774 | +endif()
|
---|
| 3775 | +
|
---|
| 3776 | +# do not use arithmetic contraction in predicates.cpp
|
---|
| 3777 | +# if("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
|
---|
| 3778 | +# set_source_files_properties(Numeric/robustPredicates.cpp PROPERTIES
|
---|
| 3779 | +# COMPILE_FLAGS "/fp:strict")
|
---|
| 3780 | +# elseif(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
|
---|
| 3781 | +# set_source_files_properties(Numeric/robustPredicates.cpp PROPERTIES
|
---|
| 3782 | +# COMPILE_FLAGS "-fno-unsafe-math-optimizations -ffp-contract=off")
|
---|
| 3783 | +# elseif(CMAKE_C_COMPILER_ID STREQUAL "Intel")
|
---|
| 3784 | +# set_source_files_properties(Numeric/robustPredicates.cpp PROPERTIES
|
---|
| 3785 | +# COMPILE_FLAGS "-fp-model strict")
|
---|
| 3786 | +# endif()
|
---|
| 3787 | +
|
---|
| 3788 | +# enable Revoropt and set compile flags for the corresponding plugin
|
---|
| 3789 | +if(ENABLE_REVOROPT)
|
---|
| 3790 | + find_path(EIGEN3_INC "eigen3/Eigen/Dense")
|
---|
| 3791 | + if(EIGEN3_INC AND HAVE_MESH AND HAVE_PLUGINS AND HAVE_ANN AND HAVE_ALGLIB)
|
---|
| 3792 | + list(APPEND EXTERNAL_INCLUDES ${EIGEN3_INC} contrib/Revoropt/include)
|
---|
| 3793 | + message(STATUS "using contrib/Revoropt")
|
---|
| 3794 | + set_config_option(HAVE_REVOROPT "Revoropt")
|
---|
| 3795 | + add_definitions(-DUSE_ANN)
|
---|
| 3796 | + get_source_file_property(PROP Plugin/CVTRemesh.cpp COMPILE_FLAGS)
|
---|
| 3797 | + if(PROP)
|
---|
| 3798 | + set_source_files_properties(Plugin/CVTRemesh.cpp PROPERTIES
|
---|
| 3799 | + COMPILE_FLAGS "${PROP} -std=c++11")
|
---|
| 3800 | + else()
|
---|
| 3801 | + set_source_files_properties(Plugin/CVTRemesh.cpp PROPERTIES
|
---|
| 3802 | + COMPILE_FLAGS "-std=c++11")
|
---|
| 3803 | + endif()
|
---|
| 3804 | + else()
|
---|
| 3805 | + message(WARNING "Revoropt requires Eigen3, Mesh, Plugins, ANN and ALGLIB")
|
---|
| 3806 | + endif()
|
---|
| 3807 | +endif()
|
---|
| 3808 | +
|
---|
| 3809 | +list(SORT CONFIG_OPTIONS)
|
---|
| 3810 | +set(GMSH_CONFIG_OPTIONS "")
|
---|
| 3811 | +foreach(OPT ${CONFIG_OPTIONS})
|
---|
| 3812 | + set(GMSH_CONFIG_OPTIONS "${GMSH_CONFIG_OPTIONS} ${OPT}")
|
---|
| 3813 | +endforeach()
|
---|
| 3814 | +
|
---|
| 3815 | +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Common/GmshConfig.h.in
|
---|
| 3816 | + ${CMAKE_CURRENT_BINARY_DIR}/Common/GmshConfig.h)
|
---|
| 3817 | +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Common/GmshVersion.h.in
|
---|
| 3818 | + ${CMAKE_CURRENT_BINARY_DIR}/Common/GmshVersion.h)
|
---|
| 3819 | +
|
---|
| 3820 | +# the texi version file is modified in the source directory (not ideal, but
|
---|
| 3821 | +# since git tracks the contents of the file this is acceptable as it will only
|
---|
| 3822 | +# change when the actual version is changed - not for each git hash)
|
---|
| 3823 | +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc/texinfo/version.texi.in
|
---|
| 3824 | + ${CMAKE_CURRENT_SOURCE_DIR}/doc/texinfo/version.texi)
|
---|
| 3825 | +
|
---|
| 3826 | +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/version.txt
|
---|
| 3827 | + ${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION}.${GMSH_PATCH_VERSION})
|
---|
| 3828 | +
|
---|
| 3829 | +# process cmake environment variables so we can append them to the -I include
|
---|
| 3830 | +# commands. This is not recommended (we should only use the cache variables) but
|
---|
| 3831 | +# it is very convenient: otherwise we have to remember providing the
|
---|
| 3832 | +# -D... options to cmake for each new build.
|
---|
| 3833 | +set(ENV_CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
|
---|
| 3834 | +set(ENV_CMAKE_INCLUDE_PATH $ENV{CMAKE_INCLUDE_PATH})
|
---|
| 3835 | +if(UNIX)
|
---|
| 3836 | + if(ENV_CMAKE_PREFIX_PATH)
|
---|
| 3837 | + string(REPLACE ":" ";" ENV_CMAKE_PREFIX_PATH ${ENV_CMAKE_PREFIX_PATH})
|
---|
| 3838 | + endif()
|
---|
| 3839 | + if(ENV_CMAKE_INCLUDE_PATH)
|
---|
| 3840 | + string(REPLACE ":" ";" ENV_CMAKE_INCLUDE_PATH ${ENV_CMAKE_INCLUDE_PATH})
|
---|
| 3841 | + endif()
|
---|
| 3842 | +endif()
|
---|
| 3843 | +list(APPEND EXTERNAL_INCLUDES ${CMAKE_INCLUDE_PATH} ${ENV_CMAKE_INCLUDE_PATH})
|
---|
| 3844 | +list(APPEND EXTERNAL_INCLUDES ${CMAKE_PREFIX_PATH} ${ENV_CMAKE_PREFIX_PATH})
|
---|
| 3845 | +foreach(DIR ${CMAKE_PREFIX_PATH} ${ENV_CMAKE_PREFIX_PATH})
|
---|
| 3846 | + list(APPEND EXTERNAL_INCLUDES ${DIR}/include)
|
---|
| 3847 | +endforeach()
|
---|
| 3848 | +
|
---|
| 3849 | +if(EXTERNAL_INCLUDES)
|
---|
| 3850 | + list(REMOVE_DUPLICATES EXTERNAL_INCLUDES)
|
---|
| 3851 | +endif()
|
---|
| 3852 | +
|
---|
| 3853 | +if(HAVE_FLTK)
|
---|
| 3854 | + set(LINK_LIBRARIES ${FLTK_LIBRARIES} ${EXTERNAL_LIBRARIES}
|
---|
| 3855 | + ${OPENGL_LIBRARIES} ${LAPACK_LIBRARIES})
|
---|
| 3856 | +elseif(HAVE_OPENGL)
|
---|
| 3857 | + set(LINK_LIBRARIES ${EXTERNAL_LIBRARIES} ${OPENGL_LIBRARIES}
|
---|
| 3858 | + ${LAPACK_LIBRARIES})
|
---|
| 3859 | +else()
|
---|
| 3860 | + set(LINK_LIBRARIES ${EXTERNAL_LIBRARIES} ${LAPACK_LIBRARIES})
|
---|
| 3861 | +endif()
|
---|
| 3862 | +
|
---|
| 3863 | +# try to use static gfortran on static builds (cannot do this on dynamic builds
|
---|
| 3864 | +# as e.g. Debian compiles libgfortran.a without -fPIC: sigh...)
|
---|
| 3865 | +if(NOT ENABLE_BUILD_DYNAMIC AND NOT ENABLE_BUILD_SHARED)
|
---|
| 3866 | + find_library(GFORTRAN_STATIC libgfortran.a)
|
---|
| 3867 | + if(GFORTRAN_STATIC)
|
---|
| 3868 | + set(CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES)
|
---|
| 3869 | + message(STATUS "Using static libgfortran")
|
---|
| 3870 | + foreach(STR ${LINK_LIBRARIES})
|
---|
| 3871 | + string(REPLACE "-lgfortran" ${GFORTRAN_STATIC} STR2 ${STR})
|
---|
| 3872 | + list(APPEND LINK_LIBRARIES2 ${STR2})
|
---|
| 3873 | + endforeach()
|
---|
| 3874 | + set(LINK_LIBRARIES ${LINK_LIBRARIES2})
|
---|
| 3875 | + endif()
|
---|
| 3876 | +endif()
|
---|
| 3877 | +
|
---|
| 3878 | +# Linux-specific linking
|
---|
| 3879 | +if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
---|
| 3880 | + if(HAVE_OCC)
|
---|
| 3881 | + find_library(RT_LIB rt)
|
---|
| 3882 | + if(RT_LIB)
|
---|
| 3883 | + list(APPEND LINK_LIBRARIES ${RT_LIB})
|
---|
| 3884 | + endif()
|
---|
| 3885 | + endif()
|
---|
| 3886 | + if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Intel")
|
---|
| 3887 | + add_definitions(-fPIC)
|
---|
| 3888 | + endif()
|
---|
| 3889 | +endif()
|
---|
| 3890 | +
|
---|
| 3891 | +# we could specify include dirs more selectively, but this is simpler
|
---|
| 3892 | +include_directories(Common Fltk Geo Graphics Mesh Solver Numeric Parser
|
---|
| 3893 | + Plugin Post api ${EXTERNAL_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}/Common)
|
---|
| 3894 | +
|
---|
| 3895 | +# set this for external codes that might include this CMakeList file
|
---|
| 3896 | +set(GMSH_EXTERNAL_INCLUDE_DIRS ${EXTERNAL_INCLUDES} CACHE
|
---|
| 3897 | + STRING "External include directories" FORCE)
|
---|
| 3898 | +set(GMSH_EXTERNAL_LIBRARIES ${LINK_LIBRARIES} CACHE
|
---|
| 3899 | + STRING "External libraries" FORCE)
|
---|
| 3900 | +
|
---|
| 3901 | +# group sources for easier navigation in IDEs
|
---|
| 3902 | +foreach(DIR ${GMSH_DIRS})
|
---|
| 3903 | + string(REGEX REPLACE "\\+" "\\\\+" DIR ${DIR})
|
---|
| 3904 | + source_group(${DIR} REGULAR_EXPRESSION ${DIR}/.*)
|
---|
| 3905 | +endforeach()
|
---|
| 3906 | +
|
---|
| 3907 | +# static library target
|
---|
| 3908 | +if(ENABLE_BUILD_LIB)
|
---|
| 3909 | + add_library(lib STATIC ${GMSH_SRC})
|
---|
| 3910 | + set_target_properties(lib PROPERTIES OUTPUT_NAME gmsh)
|
---|
| 3911 | + if(MSVC)
|
---|
| 3912 | + set_target_properties(lib PROPERTIES DEBUG_POSTFIX d)
|
---|
| 3913 | + if(ENABLE_MSVC_STATIC_RUNTIME)
|
---|
| 3914 | + set_target_properties(lib PROPERTIES LINK_FLAGS_RELEASE "/nodefaultlib:LIBCMT")
|
---|
| 3915 | + endif()
|
---|
| 3916 | + endif()
|
---|
| 3917 | +endif()
|
---|
| 3918 | +
|
---|
| 3919 | +# shared library target
|
---|
| 3920 | +if(ENABLE_BUILD_SHARED OR ENABLE_BUILD_DYNAMIC)
|
---|
| 3921 | + add_library(shared SHARED ${GMSH_SRC})
|
---|
| 3922 | + set_target_properties(shared PROPERTIES OUTPUT_NAME gmsh
|
---|
| 3923 | + VERSION ${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION}.${GMSH_PATCH_VERSION}
|
---|
| 3924 | + SOVERSION ${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION})
|
---|
| 3925 | + if(WIN32)
|
---|
| 3926 | + set_target_properties(shared PROPERTIES PREFIX "" IMPORT_PREFIX ""
|
---|
| 3927 | + IMPORT_SUFFIX ".lib" COMPILE_FLAGS "-DGMSH_DLL -DGMSH_DLL_EXPORT")
|
---|
| 3928 | + endif()
|
---|
| 3929 | + target_link_libraries(shared ${LINK_LIBRARIES})
|
---|
| 3930 | + if(MSVC AND ENABLE_MSVC_STATIC_RUNTIME)
|
---|
| 3931 | + message(STATUS "Note: By enabling ENABLE_MSVC_STATIC_RUNTIME, shared library "
|
---|
| 3932 | + "won't link. In MSVC change /MT to /MD in the shared project properties")
|
---|
| 3933 | + endif()
|
---|
| 3934 | +endif()
|
---|
| 3935 | +
|
---|
| 3936 | +# binary targets
|
---|
| 3937 | +if(HAVE_FLTK)
|
---|
| 3938 | + if(ENABLE_BUILD_DYNAMIC)
|
---|
| 3939 | + add_executable(gmsh WIN32 Common/Main.cpp)
|
---|
| 3940 | + target_link_libraries(gmsh shared)
|
---|
| 3941 | + else()
|
---|
| 3942 | + add_executable(gmsh WIN32 Common/Main.cpp ${GMSH_SRC})
|
---|
| 3943 | + endif()
|
---|
| 3944 | + # we could add this to create a minimal app bundle even without install
|
---|
| 3945 | + # if(APPLE AND NOT ENABLE_OS_SPECIFIC_INSTALL)
|
---|
| 3946 | + # set_target_properties(gmsh PROPERTIES MACOSX_BUNDLE ON
|
---|
| 3947 | + # MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/utils/misc/gmsh_dev.plist)
|
---|
| 3948 | + # endif()
|
---|
| 3949 | +else()
|
---|
| 3950 | + if(ENABLE_BUILD_DYNAMIC)
|
---|
| 3951 | + add_executable(gmsh Common/Main.cpp)
|
---|
| 3952 | + target_link_libraries(gmsh shared)
|
---|
| 3953 | + else()
|
---|
| 3954 | + add_executable(gmsh Common/Main.cpp ${GMSH_SRC})
|
---|
| 3955 | + endif()
|
---|
| 3956 | +endif()
|
---|
| 3957 | +target_link_libraries(gmsh ${LINK_LIBRARIES})
|
---|
| 3958 | +
|
---|
| 3959 | +# Windows specific linker options
|
---|
| 3960 | +if(WIN32 AND NOT MSVC)
|
---|
| 3961 | + set(FLAGS "-Wl,--stack,16777216 -mwindows")
|
---|
| 3962 | + if(HAVE_64BIT_SIZE_T)
|
---|
| 3963 | + set(FLAGS "${FLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/Win64Icon.res")
|
---|
| 3964 | + else()
|
---|
| 3965 | + set(FLAGS "${FLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/Win32Icon.res")
|
---|
| 3966 | + endif()
|
---|
| 3967 | + set_target_properties(gmsh PROPERTIES LINK_FLAGS "${FLAGS} -static")
|
---|
| 3968 | + if(ENABLE_BUILD_DYNAMIC OR ENABLE_BUILD_SHARED)
|
---|
| 3969 | + set_target_properties(shared PROPERTIES LINK_FLAGS -static)
|
---|
| 3970 | + endif()
|
---|
| 3971 | + # remove -Wl,-Bdynamic flags
|
---|
| 3972 | + set(CMAKE_EXE_LINK_DYNAMIC_C_FLAGS)
|
---|
| 3973 | + set(CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS)
|
---|
| 3974 | +elseif(MSVC)
|
---|
| 3975 | + set_target_properties(gmsh PROPERTIES LINK_FLAGS "/STACK:16777216 /SAFESEH:NO")
|
---|
| 3976 | +endif()
|
---|
| 3977 | +
|
---|
| 3978 | +# android target
|
---|
| 3979 | +if(ENABLE_BUILD_ANDROID)
|
---|
| 3980 | + find_file(CMAKE_TOOLCHAIN_FILE "android.toolchain.cmake")
|
---|
| 3981 | + if(NOT CMAKE_TOOLCHAIN_FILE)
|
---|
| 3982 | + message(FATAL_ERROR "Cannot compile Gmsh for android without android-cmake")
|
---|
| 3983 | + endif()
|
---|
| 3984 | + add_definitions(-D_GLIBCXX_USE_C99_MATH=1)
|
---|
| 3985 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
---|
| 3986 | + set(CMAKE_BUILD_TYPE Release)
|
---|
| 3987 | + set(LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_CURRENT_BINARY_DIR})
|
---|
| 3988 | + set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/libs/)
|
---|
| 3989 | + add_definitions(-DBUILD_ANDROID)
|
---|
| 3990 | + add_definitions(-DPICOJSON_USE_LOCALE=0)
|
---|
| 3991 | + add_library(androidGmsh SHARED ${GMSH_SRC})
|
---|
| 3992 | + set_target_properties(androidGmsh PROPERTIES OUTPUT_NAME gmsh)
|
---|
| 3993 | + target_link_libraries(androidGmsh ${EXTERNAL_LIBRARIES} ${LAPACK_LIBRARIES})
|
---|
| 3994 | + add_custom_command(TARGET androidGmsh POST_BUILD COMMAND
|
---|
| 3995 | + ${CMAKE_STRIP} ${LIBRARY_OUTPUT_PATH}/libgmsh.so)
|
---|
| 3996 | +endif()
|
---|
| 3997 | +
|
---|
| 3998 | +# parser target
|
---|
| 3999 | +find_program(BISON bison)
|
---|
| 4000 | +find_program(FLEX flex)
|
---|
| 4001 | +if(BISON AND FLEX)
|
---|
| 4002 | + add_custom_target(parser
|
---|
| 4003 | + COMMAND ${BISON} -p gmsh_yy --output Gmsh.tab.cpp -d Gmsh.y
|
---|
| 4004 | + COMMAND ${FLEX} -P gmsh_yy -o Gmsh.yy.cpp Gmsh.l
|
---|
| 4005 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Parser)
|
---|
| 4006 | +endif()
|
---|
| 4007 | +
|
---|
| 4008 | +if(UNIX)
|
---|
| 4009 | + # cannot use cmake's file search functions here (they would only find files
|
---|
| 4010 | + # existing at configuration time)
|
---|
| 4011 | + add_custom_target(purge
|
---|
| 4012 | + COMMAND rm -f `find . -name *~ -o -name *~~`
|
---|
| 4013 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
---|
| 4014 | + add_custom_target(etags
|
---|
| 4015 | + COMMAND etags `find . -name *.cpp -o -name *.h -o -name *.y`
|
---|
| 4016 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
---|
| 4017 | +endif()
|
---|
| 4018 | +
|
---|
| 4019 | +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR
|
---|
| 4020 | + CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
---|
| 4021 | + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion
|
---|
| 4022 | + OUTPUT_VARIABLE CXX_COMPILER_VERSION
|
---|
| 4023 | + OUTPUT_STRIP_TRAILING_WHITESPACE)
|
---|
| 4024 | +else()
|
---|
| 4025 | + set(CXX_COMPILER_VERSION "Unknown")
|
---|
| 4026 | +endif()
|
---|
| 4027 | +
|
---|
| 4028 | +set(WELCOME_FILE ${CMAKE_CURRENT_SOURCE_DIR}/doc/WELCOME.txt)
|
---|
| 4029 | +set(SDK_FILE ${CMAKE_CURRENT_SOURCE_DIR}/doc/SDK.txt)
|
---|
| 4030 | +set(LICENSE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt)
|
---|
| 4031 | +set(CREDITS_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CREDITS.txt)
|
---|
| 4032 | +set(CHANGELOG_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG.txt)
|
---|
| 4033 | +file(GLOB TUTORIAL_GEO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/?*.*)
|
---|
| 4034 | +file(GLOB TUTORIAL_CPP_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/c++/?*.*)
|
---|
| 4035 | +file(GLOB TUTORIAL_C_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/c/?*.*)
|
---|
| 4036 | +file(GLOB TUTORIAL_PY_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/python/?*.*)
|
---|
| 4037 | +file(GLOB TUTORIAL_JL_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/julia/?*.*)
|
---|
| 4038 | +file(GLOB DEMOS ${CMAKE_CURRENT_SOURCE_DIR}/demos/*)
|
---|
| 4039 | +foreach(SUBDIR ${DEMOS})
|
---|
| 4040 | + if(IS_DIRECTORY ${SUBDIR})
|
---|
| 4041 | + list(APPEND DEMOS_DIRS ${SUBDIR})
|
---|
| 4042 | + endif()
|
---|
| 4043 | +endforeach()
|
---|
| 4044 | +set(TEX_DIR ${CMAKE_CURRENT_SOURCE_DIR}/doc/texinfo)
|
---|
| 4045 | +file(GLOB TEX_SRC ${TEX_DIR}/*.texi)
|
---|
| 4046 | +set(TEX_OBJ ${TEX_DIR}/gmsh.aux ${TEX_DIR}/gmsh.cp ${TEX_DIR}/gmsh.cps
|
---|
| 4047 | + ${TEX_DIR}/gmsh.fn ${TEX_DIR}/gmsh.html ${TEX_DIR}/gmsh.info ${TEX_DIR}/gmsh.ky
|
---|
| 4048 | + ${TEX_DIR}/gmsh.log ${TEX_DIR}/gmsh.pdf ${TEX_DIR}/gmsh.pg ${TEX_DIR}/gmsh.toc
|
---|
| 4049 | + ${TEX_DIR}/gmsh.tp ${TEX_DIR}/gmsh.tps ${TEX_DIR}/gmsh.txt ${TEX_DIR}/gmsh.vr)
|
---|
| 4050 | +
|
---|
| 4051 | +macro(unix2dos VARNAME)
|
---|
| 4052 | + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unix2dos)
|
---|
| 4053 | + set(UNIX2DOS_FILES)
|
---|
| 4054 | + foreach(FILE ${${VARNAME}})
|
---|
| 4055 | + file(READ ${FILE} F0)
|
---|
| 4056 | + get_filename_component(N ${FILE} NAME)
|
---|
| 4057 | + if(CYGWIN)
|
---|
| 4058 | + string(REGEX REPLACE "\n" "\r\n" F1 "${F0}")
|
---|
| 4059 | + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/unix2dos/${N} "${F1}")
|
---|
| 4060 | + else() # if not in Cygwin, cmake adds '\r's automatically
|
---|
| 4061 | + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/unix2dos/${N} "${F0}")
|
---|
| 4062 | + endif()
|
---|
| 4063 | + list(APPEND UNIX2DOS_FILES ${CMAKE_CURRENT_BINARY_DIR}/unix2dos/${N})
|
---|
| 4064 | + endforeach()
|
---|
| 4065 | + set(${VARNAME} ${UNIX2DOS_FILES})
|
---|
| 4066 | +endmacro()
|
---|
| 4067 | +
|
---|
| 4068 | +if(WIN32)
|
---|
| 4069 | + if(ENABLE_OS_SPECIFIC_INSTALL)
|
---|
| 4070 | + set(GMSH_BIN .)
|
---|
| 4071 | + set(GMSH_LIB .)
|
---|
| 4072 | + set(GMSH_DOC .)
|
---|
| 4073 | + set(GMSH_MAN .)
|
---|
| 4074 | + set(GMSH_INC .)
|
---|
| 4075 | + else()
|
---|
| 4076 | + include(GNUInstallDirs)
|
---|
| 4077 | + set(GMSH_BIN ${CMAKE_INSTALL_BINDIR})
|
---|
| 4078 | + set(GMSH_LIB ${CMAKE_INSTALL_LIBDIR})
|
---|
| 4079 | + set(GMSH_DOC ${CMAKE_INSTALL_DOCDIR})
|
---|
| 4080 | + set(GMSH_MAN ${CMAKE_INSTALL_MANDIR}/man1)
|
---|
| 4081 | + set(GMSH_INC ${CMAKE_INSTALL_INCLUDEDIR})
|
---|
| 4082 | + endif()
|
---|
| 4083 | + if(CYGWIN)
|
---|
| 4084 | + unix2dos(GMSH_API)
|
---|
| 4085 | + if(ENABLE_PRIVATE_API)
|
---|
| 4086 | + unix2dos(GMSH_PRIVATE_API)
|
---|
| 4087 | + endif()
|
---|
| 4088 | + unix2dos(WELCOME_FILE)
|
---|
| 4089 | + unix2dos(SDK_FILE)
|
---|
| 4090 | + unix2dos(LICENSE_FILE)
|
---|
| 4091 | + unix2dos(CREDITS_FILE)
|
---|
| 4092 | + unix2dos(CHANGELOG_FILE)
|
---|
| 4093 | + unix2dos(TUTORIAL_GEO_FILES)
|
---|
| 4094 | + unix2dos(TUTORIAL_CPP_FILES)
|
---|
| 4095 | + unix2dos(TUTORIAL_C_FILES)
|
---|
| 4096 | + unix2dos(TUTORIAL_PY_FILES)
|
---|
| 4097 | + unix2dos(TUTORIAL_JL_FILES)
|
---|
| 4098 | + foreach(DIR ${DEMOS_DIRS})
|
---|
| 4099 | + file(GLOB DEMO_FILES ${DIR}/?*.*)
|
---|
| 4100 | + unix2dos(DEMO_FILES)
|
---|
| 4101 | + endforeach()
|
---|
| 4102 | + endif()
|
---|
| 4103 | +elseif(APPLE AND ENABLE_OS_SPECIFIC_INSTALL)
|
---|
| 4104 | + # set these so that the files get installed nicely in the MacOSX
|
---|
| 4105 | + # .app bundle
|
---|
| 4106 | + set(GMSH_BIN ../MacOS)
|
---|
| 4107 | + set(GMSH_LIB ../MacOS)
|
---|
| 4108 | + set(GMSH_DOC ../../..)
|
---|
| 4109 | + set(GMSH_MAN ../../..)
|
---|
| 4110 | + set(GMSH_INC ../MacOS)
|
---|
| 4111 | +else()
|
---|
| 4112 | + include(GNUInstallDirs)
|
---|
| 4113 | + set(GMSH_BIN ${CMAKE_INSTALL_BINDIR})
|
---|
| 4114 | + set(GMSH_LIB ${CMAKE_INSTALL_LIBDIR})
|
---|
| 4115 | + set(GMSH_DOC ${CMAKE_INSTALL_DOCDIR})
|
---|
| 4116 | + set(GMSH_MAN ${CMAKE_INSTALL_MANDIR}/man1)
|
---|
| 4117 | + set(GMSH_INC ${CMAKE_INSTALL_INCLUDEDIR})
|
---|
| 4118 | +endif()
|
---|
| 4119 | +
|
---|
| 4120 | +# FIXME: change this once we understand rpaths
|
---|
| 4121 | +if(APPLE)
|
---|
| 4122 | + if(ENABLE_BUILD_DYNAMIC OR ENABLE_BUILD_SHARED)
|
---|
| 4123 | + set_target_properties(shared PROPERTIES INSTALL_NAME_DIR
|
---|
| 4124 | + ${CMAKE_INSTALL_PREFIX}/${GMSH_LIB})
|
---|
| 4125 | + endif()
|
---|
| 4126 | +endif()
|
---|
| 4127 | +
|
---|
| 4128 | +# mark targets as optional so we can install them separately if needed
|
---|
| 4129 | +# (e.g. "make lib" or "make shared" followed by "make install/fast")
|
---|
| 4130 | +install(TARGETS gmsh DESTINATION ${GMSH_BIN} OPTIONAL)
|
---|
| 4131 | +if(ENABLE_BUILD_LIB)
|
---|
| 4132 | + install(TARGETS lib DESTINATION ${GMSH_LIB} OPTIONAL)
|
---|
| 4133 | +endif()
|
---|
| 4134 | +if(ENABLE_BUILD_SHARED OR ENABLE_BUILD_DYNAMIC)
|
---|
| 4135 | + install(TARGETS shared DESTINATION ${GMSH_LIB} OPTIONAL)
|
---|
| 4136 | +endif()
|
---|
| 4137 | +
|
---|
| 4138 | +if(ENABLE_ONELAB)
|
---|
| 4139 | + install(FILES ${ONELAB_PY} DESTINATION ${GMSH_BIN})
|
---|
| 4140 | +endif()
|
---|
| 4141 | +if(ENABLE_BUILD_LIB OR ENABLE_BUILD_SHARED OR ENABLE_BUILD_DYNAMIC)
|
---|
| 4142 | + install(FILES ${GMSH_API} DESTINATION ${GMSH_INC})
|
---|
| 4143 | + install(FILES ${GMSH_PY} DESTINATION ${GMSH_LIB})
|
---|
| 4144 | + install(FILES ${GMSH_JL} DESTINATION ${GMSH_LIB})
|
---|
| 4145 | + if(ENABLE_PRIVATE_API)
|
---|
| 4146 | + install(FILES ${GMSH_PRIVATE_API} DESTINATION ${GMSH_INC}/gmsh)
|
---|
| 4147 | + endif()
|
---|
| 4148 | +endif()
|
---|
| 4149 | +if(INSTALL_SDK_README)
|
---|
| 4150 | + configure_file(${SDK_FILE} ${CMAKE_CURRENT_BINARY_DIR}/README.txt)
|
---|
| 4151 | + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/README.txt DESTINATION .)
|
---|
| 4152 | +endif()
|
---|
| 4153 | +install(FILES ${WELCOME_FILE} DESTINATION ${GMSH_DOC} RENAME README.txt)
|
---|
| 4154 | +install(FILES ${LICENSE_FILE} DESTINATION ${GMSH_DOC})
|
---|
| 4155 | +install(FILES ${CREDITS_FILE} DESTINATION ${GMSH_DOC})
|
---|
| 4156 | +install(FILES ${CHANGELOG_FILE} DESTINATION ${GMSH_DOC})
|
---|
| 4157 | +install(FILES ${TUTORIAL_GEO_FILES} DESTINATION ${GMSH_DOC}/tutorial)
|
---|
| 4158 | +install(FILES ${TUTORIAL_CPP_FILES} DESTINATION ${GMSH_DOC}/tutorial/c++)
|
---|
| 4159 | +install(FILES ${TUTORIAL_C_FILES} DESTINATION ${GMSH_DOC}/tutorial/c)
|
---|
| 4160 | +install(FILES ${TUTORIAL_PY_FILES} DESTINATION ${GMSH_DOC}/tutorial/python)
|
---|
| 4161 | +install(FILES ${TUTORIAL_JL_FILES} DESTINATION ${GMSH_DOC}/tutorial/julia)
|
---|
| 4162 | +foreach(DIR ${DEMOS_DIRS})
|
---|
| 4163 | + get_filename_component(DEMOS_DIR_NAME ${DIR} NAME)
|
---|
| 4164 | + file(GLOB DEMO_FILES ${DIR}/?*.*)
|
---|
| 4165 | + install(FILES ${DEMO_FILES} DESTINATION ${GMSH_DOC}/demos/${DEMOS_DIR_NAME})
|
---|
| 4166 | +endforeach()
|
---|
| 4167 | +if(UNIX AND NOT CYGWIN)
|
---|
| 4168 | + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/doc/gmsh.1 DESTINATION ${GMSH_MAN})
|
---|
| 4169 | +endif()
|
---|
| 4170 | +
|
---|
| 4171 | +add_custom_target(get_headers
|
---|
| 4172 | + COMMAND ${CMAKE_COMMAND} -E make_directory Headers/gmsh
|
---|
| 4173 | + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
---|
| 4174 | +foreach(FILE ${GMSH_API})
|
---|
| 4175 | + add_custom_command(TARGET get_headers POST_BUILD COMMAND ${CMAKE_COMMAND}
|
---|
| 4176 | + -E copy_if_different ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/Headers/
|
---|
| 4177 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
---|
| 4178 | +endforeach()
|
---|
| 4179 | +if(ENABLE_PRIVATE_API)
|
---|
| 4180 | + foreach(FILE ${GMSH_PRIVATE_API})
|
---|
| 4181 | + add_custom_command(TARGET get_headers POST_BUILD COMMAND ${CMAKE_COMMAND}
|
---|
| 4182 | + -E copy_if_different ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/Headers/gmsh/
|
---|
| 4183 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
---|
| 4184 | + endforeach()
|
---|
| 4185 | +endif()
|
---|
| 4186 | +
|
---|
| 4187 | +find_program(MAKEINFO makeinfo)
|
---|
| 4188 | +if(MAKEINFO)
|
---|
| 4189 | + add_custom_command(OUTPUT ${TEX_DIR}/gmsh.info DEPENDS ${TEX_SRC}
|
---|
| 4190 | + COMMAND ${MAKEINFO} --split-size 1000000
|
---|
| 4191 | + ARGS ${TEX_DIR}/gmsh.texi WORKING_DIRECTORY ${TEX_DIR})
|
---|
| 4192 | + add_custom_target(info DEPENDS ${TEX_DIR}/gmsh.info)
|
---|
| 4193 | + add_custom_command(OUTPUT ${TEX_DIR}/gmsh.txt DEPENDS ${TEX_SRC}
|
---|
| 4194 | + COMMAND ${MAKEINFO} --plaintext -o gmsh.txt
|
---|
| 4195 | + ARGS ${TEX_DIR}/gmsh.texi WORKING_DIRECTORY ${TEX_DIR})
|
---|
| 4196 | + add_custom_target(txt DEPENDS ${TEX_DIR}/gmsh.txt)
|
---|
| 4197 | + add_custom_command(OUTPUT ${TEX_DIR}/gmsh.html DEPENDS ${TEX_SRC}
|
---|
| 4198 | + COMMAND ${MAKEINFO} --html --css-ref=http://gmsh.info/gmsh.css
|
---|
| 4199 | + --no-split --set-customization-variable
|
---|
| 4200 | + EXTRA_HEAD='<meta name="viewport" content="width=device-width,initial-scale=1.0">'
|
---|
| 4201 | + ARGS ${TEX_DIR}/gmsh.texi WORKING_DIRECTORY ${TEX_DIR})
|
---|
| 4202 | + add_custom_target(html DEPENDS ${TEX_DIR}/gmsh.html)
|
---|
| 4203 | + install(FILES ${TEX_DIR}/gmsh.html DESTINATION ${GMSH_DOC} OPTIONAL)
|
---|
| 4204 | +else()
|
---|
| 4205 | + add_custom_target(html COMMAND ${CMAKE_COMMAND} -E touch ${TEX_DIR}/gmsh.html)
|
---|
| 4206 | +endif()
|
---|
| 4207 | +
|
---|
| 4208 | +find_program(TEXI2PDF texi2pdf)
|
---|
| 4209 | +if(TEXI2PDF)
|
---|
| 4210 | + add_custom_command(OUTPUT ${TEX_DIR}/gmsh.pdf DEPENDS ${TEX_SRC}
|
---|
| 4211 | + COMMAND ${TEXI2PDF} ARGS gmsh.texi
|
---|
| 4212 | + WORKING_DIRECTORY ${TEX_DIR})
|
---|
| 4213 | + add_custom_target(pdf DEPENDS ${TEX_DIR}/gmsh.pdf)
|
---|
| 4214 | + install(FILES ${TEX_DIR}/gmsh.pdf DESTINATION ${GMSH_DOC} OPTIONAL)
|
---|
| 4215 | +endif()
|
---|
| 4216 | +
|
---|
| 4217 | +execute_process(COMMAND ${CMAKE_COMMAND} -E echo
|
---|
| 4218 | + "@c This file was generated by cmake: do not edit manually!\n${OPT_TEXI}"
|
---|
| 4219 | + OUTPUT_FILE cmake_options.texi)
|
---|
| 4220 | +
|
---|
| 4221 | +if(MAKEINFO AND TEXI2PDF)
|
---|
| 4222 | + add_custom_target(doc COMMAND ${CMAKE_COMMAND} -E tar zcf
|
---|
| 4223 | + ${CMAKE_CURRENT_BINARY_DIR}/gmsh-${GMSH_VERSION}-doc.tgz
|
---|
| 4224 | + CREDITS.txt LICENSE.txt CHANGELOG.txt
|
---|
| 4225 | + doc/gmsh.1 doc/texinfo/gmsh.html doc/texinfo/gmsh.info
|
---|
| 4226 | + doc/texinfo/gmsh.pdf doc/texinfo/gmsh.txt
|
---|
| 4227 | + COMMAND ${CMAKE_COMMAND} -E remove ${TEX_OBJ}
|
---|
| 4228 | + DEPENDS ${TEX_DIR}/gmsh.info ${TEX_DIR}/gmsh.txt
|
---|
| 4229 | + ${TEX_DIR}/gmsh.html ${TEX_DIR}/gmsh.pdf
|
---|
| 4230 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
---|
| 4231 | +endif()
|
---|
| 4232 | +
|
---|
| 4233 | +if(MAKEINFO OR TEXI2PDF)
|
---|
| 4234 | + add_custom_target(clean_doc COMMAND ${CMAKE_COMMAND} -E remove ${TEX_OBJ})
|
---|
| 4235 | +endif()
|
---|
| 4236 | +
|
---|
| 4237 | +if(APPLE AND ENABLE_BUILD_LIB)
|
---|
| 4238 | + file(READ ${CMAKE_CURRENT_SOURCE_DIR}/utils/misc/gmsh_framework.plist F0)
|
---|
| 4239 | + string(REPLACE GMSH_VERSION "${GMSH_VERSION}" F1 "${F0}")
|
---|
| 4240 | + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/Info_framework.plist "${F1}")
|
---|
| 4241 | + get_target_property(LIBNAME lib LOCATION) # depracated
|
---|
| 4242 | + #set(LIBNAME $<TARGET_FILE:lib>) # FIXME: use this in the future
|
---|
| 4243 | + add_custom_target(framework DEPENDS lib
|
---|
| 4244 | + COMMAND ${CMAKE_COMMAND} -E remove_directory gmsh.framework
|
---|
| 4245 | + COMMAND ${CMAKE_COMMAND} -E make_directory gmsh.framework/Headers
|
---|
| 4246 | + COMMAND ${CMAKE_COMMAND} -E make_directory gmsh.framework/Resources
|
---|
| 4247 | + COMMAND ${CMAKE_COMMAND} -E copy ${LIBNAME} gmsh.framework/gmsh
|
---|
| 4248 | + COMMAND ${CMAKE_COMMAND} -E copy Info_framework.plist
|
---|
| 4249 | + gmsh.framework/Resources/Info.plist
|
---|
| 4250 | + COMMAND ${CMAKE_COMMAND} -E create_symlink . gmsh.framework/Headers/gmsh
|
---|
| 4251 | + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
---|
| 4252 | + foreach(FILE ${GMSH_API})
|
---|
| 4253 | + add_custom_command(TARGET framework POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy
|
---|
| 4254 | + ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/gmsh.framework/Headers/
|
---|
| 4255 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
---|
| 4256 | + endforeach()
|
---|
| 4257 | + if(ENABLE_PRIVATE_API)
|
---|
| 4258 | + foreach(FILE ${GMSH_PRIVATE_API})
|
---|
| 4259 | + add_custom_command(TARGET framework POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy
|
---|
| 4260 | + ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/gmsh.framework/Headers/
|
---|
| 4261 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
---|
| 4262 | + endforeach()
|
---|
| 4263 | + endif()
|
---|
| 4264 | +endif()
|
---|
| 4265 | +
|
---|
| 4266 | +set(CPACK_PACKAGE_VENDOR "Christophe Geuzaine and Jean-Francois Remacle")
|
---|
| 4267 | +set(CPACK_PACKAGE_VERSION_MAJOR ${GMSH_MAJOR_VERSION})
|
---|
| 4268 | +set(CPACK_PACKAGE_VERSION_MINOR ${GMSH_MINOR_VERSION})
|
---|
| 4269 | +set(CPACK_PACKAGE_VERSION_PATCH ${GMSH_PATCH_VERSION})
|
---|
| 4270 | +set(CPACK_PACKAGE_DESCRIPTION_FILE ${WELCOME_FILE})
|
---|
| 4271 | +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY
|
---|
| 4272 | + "3D finite element mesh generator with built-in CAD engine and post-processor")
|
---|
| 4273 | +if(GMSH_EXTRA_VERSION MATCHES "-git.*") # so that we'll overwrite the archives
|
---|
| 4274 | + set(CPACK_PACKAGE_FILE_NAME gmsh-git-${GMSH_OS})
|
---|
| 4275 | + set(CPACK_SOURCE_PACKAGE_FILE_NAME gmsh-git-source)
|
---|
| 4276 | +else()
|
---|
| 4277 | + set(CPACK_PACKAGE_FILE_NAME gmsh-${GMSH_VERSION}-${GMSH_OS})
|
---|
| 4278 | + set(CPACK_SOURCE_PACKAGE_FILE_NAME gmsh-${GMSH_VERSION}-source)
|
---|
| 4279 | +endif()
|
---|
| 4280 | +set(CPACK_PACKAGE_INSTALL_DIRECTORY "gmsh")
|
---|
| 4281 | +set(CPACK_RESOURCE_FILE_LICENSE ${LICENSE_FILE})
|
---|
| 4282 | +set(CPACK_RESOURCE_FILE_README ${WELCOME_FILE})
|
---|
| 4283 | +set(CPACK_RESOURCE_FILE_WELCOME ${WELCOME_FILE})
|
---|
| 4284 | +set(CPACK_PACKAGE_EXECUTABLE "gmsh")
|
---|
| 4285 | +if(ENABLE_PACKAGE_STRIP)
|
---|
| 4286 | + set(CPACK_STRIP_FILES TRUE)
|
---|
| 4287 | +else()
|
---|
| 4288 | + set(CPACK_STRIP_FILES FALSE)
|
---|
| 4289 | +endif()
|
---|
| 4290 | +set(CPACK_SOURCE_GENERATOR TGZ)
|
---|
| 4291 | +set(CPACK_SOURCE_IGNORE_FILES "${CMAKE_CURRENT_BINARY_DIR}" "/CVS/" "/.svn" "/.git"
|
---|
| 4292 | + "~$" "DS_Store$" "GmshConfig.h$" "GmshVersion.h$" "/benchmarks/" "/tmp/"
|
---|
| 4293 | + "/bin/" "/lib/" "/nightly/" "GPATH" "GRTAGS" "GSYMS" "GTAGS" "/HTML/"
|
---|
| 4294 | + "/contrib/3M/" "/contrib/Parasolid/")
|
---|
| 4295 | +
|
---|
| 4296 | +if(UNIX)
|
---|
| 4297 | + # make sure we remove previous installs before doing the next one (on Mac for
|
---|
| 4298 | + # example "make package; make package_source" would lead to huge file lists
|
---|
| 4299 | + # getting generated due to the 'Applications' symlink in the bundle)
|
---|
| 4300 | + set(CPACK_INSTALL_COMMANDS "rm -rf ${CMAKE_CURRENT_BINARY_DIR}/_CPack_Packages")
|
---|
| 4301 | +endif()
|
---|
| 4302 | +
|
---|
| 4303 | +if(APPLE AND ENABLE_OS_SPECIFIC_INSTALL)
|
---|
| 4304 | + set(CPACK_GENERATOR Bundle)
|
---|
| 4305 | + set(CPACK_BUNDLE_NAME Gmsh)
|
---|
| 4306 | + file(READ ${CMAKE_CURRENT_SOURCE_DIR}/utils/misc/gmsh_app.plist F0)
|
---|
| 4307 | + string(REPLACE GMSH_VERSION "${GMSH_VERSION}" F1 "${F0}")
|
---|
| 4308 | + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/Info.plist "${F1}")
|
---|
| 4309 | + set(CPACK_BUNDLE_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
|
---|
| 4310 | + set(CPACK_BUNDLE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIcons.icns)
|
---|
| 4311 | + if(PACKAGER STREQUAL "geuzaine - removed: we sign on a separate machine")
|
---|
| 4312 | + # codesigning requires CMake >= 3.2
|
---|
| 4313 | + set(CPACK_BUNDLE_APPLE_CERT_APP "Developer ID Application: Christophe Geuzaine")
|
---|
| 4314 | + endif()
|
---|
| 4315 | + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsGeo.icns DESTINATION .
|
---|
| 4316 | + RENAME GmshGeo.icns)
|
---|
| 4317 | + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsMsh.icns DESTINATION .
|
---|
| 4318 | + RENAME GmshMsh.icns)
|
---|
| 4319 | + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsSol.icns DESTINATION .
|
---|
| 4320 | + RENAME GmshSol.icns)
|
---|
| 4321 | + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsPos.icns DESTINATION .
|
---|
| 4322 | + RENAME GmshPos.icns)
|
---|
| 4323 | + set(CPACK_PACKAGE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIcons.icns)
|
---|
| 4324 | +elseif(WIN32)
|
---|
| 4325 | + set(CPACK_GENERATOR ZIP)
|
---|
| 4326 | +else()
|
---|
| 4327 | + set(CPACK_GENERATOR TGZ)
|
---|
| 4328 | +endif()
|
---|
| 4329 | +
|
---|
| 4330 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/utils/wrappers/gmshpy AND
|
---|
| 4331 | + ENABLE_PRIVATE_API AND ENABLE_WRAP_PYTHON AND HAVE_PYTHON)
|
---|
| 4332 | + add_subdirectory(utils/wrappers/gmshpy)
|
---|
| 4333 | +endif()
|
---|
| 4334 | +
|
---|
| 4335 | +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/utils/wrappers/java AND
|
---|
| 4336 | + ENABLE_PRIVATE_API AND ENABLE_WRAP_JAVA)
|
---|
| 4337 | + add_subdirectory(utils/wrappers/java)
|
---|
| 4338 | +endif()
|
---|
| 4339 | +
|
---|
| 4340 | +include(CPack)
|
---|
| 4341 | +
|
---|
| 4342 | +if(NOT DISABLE_GMSH_TESTS)
|
---|
| 4343 | + # disabling tests is useful when including this CMakeLists in an external project
|
---|
| 4344 | + include(CTest)
|
---|
| 4345 | + file(GLOB_RECURSE TESTFILES
|
---|
| 4346 | + tutorial/*.geo demos/*.geo benchmarks/?d/*.geo benchmarks/extrude/*.geo
|
---|
| 4347 | + benchmarks/occ/*.geo)
|
---|
| 4348 | + # disable this test for now on our Linux32 machine - the current config
|
---|
| 4349 | + # crashes on the OCC STL generation
|
---|
| 4350 | + if(${GMSH_OS} MATCHES "Linux32")
|
---|
| 4351 | + list(REMOVE_ITEM TESTFILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/t18.geo)
|
---|
| 4352 | + endif()
|
---|
| 4353 | + foreach(TESTFILE ${TESTFILES})
|
---|
| 4354 | + # use relative path for Cygwin/MinGW (the pure win exe built with the MinGW
|
---|
| 4355 | + # compilers does not understand a full Cygwin-style path)
|
---|
| 4356 | + FILE(RELATIVE_PATH TEST ${CMAKE_CURRENT_BINARY_DIR} ${TESTFILE})
|
---|
| 4357 | + if(HAVE_OCC OR NOT ${TEST} MATCHES "boolean" OR NOT ${TEST} MATCHES "occ")
|
---|
| 4358 | + add_test(${TEST} ./gmsh ${TEST} -3 -nopopup -o ./tmp.msh)
|
---|
| 4359 | + endif()
|
---|
| 4360 | + endforeach()
|
---|
| 4361 | + # test c++ api tutorials with dynamic builds (except on 32 bit windows for
|
---|
| 4362 | + # now: our win32 setup does not currently handle exceptions)
|
---|
| 4363 | + if(ENABLE_BUILD_DYNAMIC AND NOT ${GMSH_OS} MATCHES "Windows32")
|
---|
| 4364 | + file(GLOB_RECURSE TESTFILES tutorial/c++/*.cpp)
|
---|
| 4365 | + foreach(TESTFILE ${TESTFILES})
|
---|
| 4366 | + get_filename_component(TEST ${TESTFILE} NAME_WE)
|
---|
| 4367 | + add_executable(${TEST} WIN32 ${TESTFILE})
|
---|
| 4368 | + target_link_libraries(${TEST} shared)
|
---|
| 4369 | + if(WIN32 AND NOT MSVC)
|
---|
| 4370 | + set_target_properties(${TEST} PROPERTIES LINK_FLAGS "-mwindows -static")
|
---|
| 4371 | + endif()
|
---|
| 4372 | + add_test(${TEST}_cpp ${TEST})
|
---|
| 4373 | + endforeach()
|
---|
| 4374 | + endif()
|
---|
| 4375 | +endif()
|
---|
| 4376 | +
|
---|
| 4377 | +message(STATUS "")
|
---|
| 4378 | +message(STATUS "Gmsh ${GMSH_VERSION} has been configured for ${GMSH_OS}")
|
---|
| 4379 | +message(STATUS "")
|
---|
| 4380 | +message(STATUS " * Build options:" ${GMSH_CONFIG_OPTIONS})
|
---|
| 4381 | +message(STATUS " * Build type: " ${CMAKE_BUILD_TYPE})
|
---|
| 4382 | +message(STATUS " * C compiler: " ${CMAKE_C_COMPILER})
|
---|
| 4383 | +message(STATUS " * C++ compiler: " ${CMAKE_CXX_COMPILER})
|
---|
| 4384 | +message(STATUS " * Install prefix: " ${CMAKE_INSTALL_PREFIX})
|
---|
| 4385 | +message(STATUS "")
|
---|
| 4386 | +
|
---|
| 4387 | +mark_as_advanced(GMSH_EXTRA_VERSION
|
---|
| 4388 | + ACIS_LIB ANN_INC ANN_LIB CAIRO_LIB CAIRO_INC CGNS_INC GMM_INC
|
---|
| 4389 | + GMP_INC GMP_LIB MMG3D_INC MMG3D_LIB HDF5_LIB
|
---|
| 4390 | + MED_LIB OCC_INC SZ_LIB
|
---|
| 4391 | + PETSC_LIBS SLEPC_INC SLEPC_INC2 SLEPC_LIB
|
---|
| 4392 | + BISON FLEX MAKEINFO TEXI2PDF FLTK_CONFIG_SCRIPT
|
---|
| 4393 | + GMSH_EXTERNAL_INCLUDE_DIRS GMSH_EXTERNAL_LIBRARIES)
|
---|
| 4394 | Index: ../trunk-jpl/packagers/linux/package-issm-linux-binaries-matlab.sh
|
---|
| 4395 | ===================================================================
|
---|
| 4396 | --- ../trunk-jpl/packagers/linux/package-issm-linux-binaries-matlab.sh (nonexistent)
|
---|
| 4397 | +++ ../trunk-jpl/packagers/linux/package-issm-linux-binaries-matlab.sh (revision 25791)
|
---|
| 4398 | @@ -0,0 +1,178 @@
|
---|
| 4399 | +#!/bin/bash
|
---|
| 4400 | +
|
---|
| 4401 | +################################################################################
|
---|
| 4402 | +# To be used after running,
|
---|
| 4403 | +#
|
---|
| 4404 | +# ${ISSM_DIR}/jenkins/jenkins.sh ${ISSM_DIR}/jenkins/ross-debian_linux-binaries-matlab
|
---|
| 4405 | +#
|
---|
| 4406 | +# in the context of a Jenkins project.
|
---|
| 4407 | +#
|
---|
| 4408 | +# When no runtime errors occur, performs the following:
|
---|
| 4409 | +# - Checks resulting executables and libraries against test suite.
|
---|
| 4410 | +# - Packages and compresses executables and libraries.
|
---|
| 4411 | +# - Transmits it to ISSM Web site for distribution.
|
---|
| 4412 | +################################################################################
|
---|
| 4413 | +
|
---|
| 4414 | +# Expand aliases within the context of this script
|
---|
| 4415 | +shopt -s expand_aliases
|
---|
| 4416 | +
|
---|
| 4417 | +## Override certain aliases
|
---|
| 4418 | +#
|
---|
| 4419 | +alias grep=$(which grep)
|
---|
| 4420 | +
|
---|
| 4421 | +## Constants
|
---|
| 4422 | +#
|
---|
| 4423 | +LIBGFORTRAN="/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0" # Important that this is the library itself
|
---|
| 4424 | +LIBGFORTRAN_DIST="${ISSM_DIR}/lib/libgfortran.so.5" # Important the file name matches the SONAME entry in the binaries and other shared libraries which link to it
|
---|
| 4425 | +MATLAB_NROPTIONS="'benchmark','all','exclude',[125,126,234,235,418,420,435,444,445,701,702,703,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1201,1202,1203,1204,1205,1206,1207,1208,1301,1302,1303,1304,1401,1402,1601,1602,2002,2003,2005,2006,2010,2020,2021,2051,2052,2053,2101,2102,3001:3200,3201,3202,3300,3480,3481,4001,4002,4003]" # NOTE: Combination of test suites from basic, Dakota, and Solid Earth builds, with tests that require a restart and those that require the JVM excluded
|
---|
| 4426 | +MATLAB_PATH="/usr/local/MATLAB/R2019b"
|
---|
| 4427 | +PKG="ISSM-Linux-MATLAB" # Name of directory to copy distributable files to
|
---|
| 4428 | +
|
---|
| 4429 | +COMPRESSED_PKG="${PKG}.tar.gz"
|
---|
| 4430 | +
|
---|
| 4431 | +## Environment
|
---|
| 4432 | +#
|
---|
| 4433 | +export PATH="${ISSM_DIR}/bin:$(getconf PATH)" # Ensure that we pick up binaries from 'bin' directory rather than 'externalpackages'
|
---|
| 4434 | +
|
---|
| 4435 | +## Parse options
|
---|
| 4436 | +#
|
---|
| 4437 | +if [ $# -gt 1 ]; then
|
---|
| 4438 | + echo "Can use only one option at a time"
|
---|
| 4439 | + exit 1
|
---|
| 4440 | +fi
|
---|
| 4441 | +
|
---|
| 4442 | +skip_tests=0
|
---|
| 4443 | +transfer_only=0
|
---|
| 4444 | +while [ $# -gt 0 ]; do
|
---|
| 4445 | + case $1 in
|
---|
| 4446 | + -s|--skiptests) skip_tests=1; shift ;;
|
---|
| 4447 | + -t|--transferonly) transfer_only=1; shift ;;
|
---|
| 4448 | + *) echo "Unknown parameter passed: $1"; exit 1 ;;
|
---|
| 4449 | + esac
|
---|
| 4450 | + shift
|
---|
| 4451 | +done
|
---|
| 4452 | +
|
---|
| 4453 | +if [ ${transfer_only} -eq 0 ]; then
|
---|
| 4454 | + # Check if MATLAB exists
|
---|
| 4455 | + if ! [ -d ${MATLAB_PATH} ]; then
|
---|
| 4456 | + echo "${MATLAB_PATH} does not point to a MATLAB installation! Please modify MATLAB_PATH variable in $(basename $0) and try again."
|
---|
| 4457 | + exit 1
|
---|
| 4458 | + fi
|
---|
| 4459 | +
|
---|
| 4460 | + # Clean up from previous packaging
|
---|
| 4461 | + echo "Cleaning up existing assets"
|
---|
| 4462 | + cd ${ISSM_DIR}
|
---|
| 4463 | + rm -rf ${PKG} ${COMPRESSED_PKG}
|
---|
| 4464 | + mkdir ${PKG}
|
---|
| 4465 | +
|
---|
| 4466 | + # Add/modify required binaries and libraries
|
---|
| 4467 | + cd ${ISSM_DIR}/bin
|
---|
| 4468 | +
|
---|
| 4469 | + echo "Modify generic"
|
---|
| 4470 | + cat generic_static.m | sed -e "s/generic_static/generic/g" > generic.m
|
---|
| 4471 | +
|
---|
| 4472 | + echo "Moving MPICH binaries to bin/"
|
---|
| 4473 | + if [ -f ${ISSM_DIR}/externalpackages/petsc/install/bin/mpiexec ]; then
|
---|
| 4474 | + cp ${ISSM_DIR}/externalpackages/petsc/install/bin/mpiexec .
|
---|
| 4475 | + cp ${ISSM_DIR}/externalpackages/petsc/install/bin/hydra_pmi_proxy .
|
---|
| 4476 | + elif [ -f ${ISSM_DIR}/externalpackages/mpich/install/bin/mpiexec ]; then
|
---|
| 4477 | + cp ${ISSM_DIR}/externalpackages/mpich/install/bin/mpiexec .
|
---|
| 4478 | + cp ${ISSM_DIR}/externalpackages/mpich/install/bin/hydra_pmi_proxy .
|
---|
| 4479 | + else
|
---|
| 4480 | + echo "MPICH not found"
|
---|
| 4481 | + exit 1
|
---|
| 4482 | + fi
|
---|
| 4483 | +
|
---|
| 4484 | + echo "Moving GDAL binaries to bin/"
|
---|
| 4485 | + if [ -f ${ISSM_DIR}/externalpackages/gdal/install/bin/gdal-config ]; then
|
---|
| 4486 | + cp ${ISSM_DIR}/externalpackages/gdal/install/bin/gdalsrsinfo .
|
---|
| 4487 | + cp ${ISSM_DIR}/externalpackages/gdal/install/bin/gdaltransform .
|
---|
| 4488 | + else
|
---|
| 4489 | + echo "GDAL not found"
|
---|
| 4490 | + exit 1
|
---|
| 4491 | + fi
|
---|
| 4492 | +
|
---|
| 4493 | + echo "Moving GMT binaries to bin/"
|
---|
| 4494 | + if [ -f ${ISSM_DIR}/externalpackages/gmt/install/bin/gmt-config ]; then
|
---|
| 4495 | + cp ${ISSM_DIR}/externalpackages/gmt/install/bin/gmt .
|
---|
| 4496 | + cp ${ISSM_DIR}/externalpackages/gmt/install/bin/gmtselect .
|
---|
| 4497 | + else
|
---|
| 4498 | + echo "GMT not found"
|
---|
| 4499 | + exit 1
|
---|
| 4500 | + fi
|
---|
| 4501 | +
|
---|
| 4502 | + echo "Moving Gmsh binaries to bin/"
|
---|
| 4503 | + if [ -f ${ISSM_DIR}/externalpackages/gmsh/install/bin/gmsh ]; then
|
---|
| 4504 | + cp ${ISSM_DIR}/externalpackages/gmsh/install/bin/gmsh .
|
---|
| 4505 | + else
|
---|
| 4506 | + echo "Gmsh not found"
|
---|
| 4507 | + exit 1
|
---|
| 4508 | + fi
|
---|
| 4509 | +
|
---|
| 4510 | + echo "Moving libgfortran to lib/"
|
---|
| 4511 | + cp ${LIBGFORTRAN} ${LIBGFORTRAN_DIST} 2> /dev/null
|
---|
| 4512 | +
|
---|
| 4513 | +
|
---|
| 4514 | + # Run tests
|
---|
| 4515 | + if [ ${skip_tests} -eq 0 ]; then
|
---|
| 4516 | + echo "Running tests"
|
---|
| 4517 | + cd ${ISSM_DIR}/test/NightlyRun
|
---|
| 4518 | + rm matlab.log 2> /dev/null
|
---|
| 4519 | +
|
---|
| 4520 | + # Run tests, redirecting output to logfile and suppressing output to console
|
---|
| 4521 | + ${MATLAB_PATH}/bin/matlab -nojvm -nosplash -r "try, addpath ${ISSM_DIR}/bin ${ISSM_DIR}/lib; runme(${MATLAB_NROPTIONS}); exit; catch me,fprintf('%s',getReport(me)); exit; end" -logfile matlab.log &> /dev/null
|
---|
| 4522 | +
|
---|
| 4523 | + # Check that MATLAB did not exit in error
|
---|
| 4524 | + matlabExitCode=`echo $?`
|
---|
| 4525 | + matlabExitedInError=`grep -E "Activation cannot proceed|license|Error" matlab.log | wc -l`
|
---|
| 4526 | +
|
---|
| 4527 | + if [[ ${matlabExitCode} -ne 0 || ${matlabExitedInError} -ne 0 ]]; then
|
---|
| 4528 | + echo "----------MATLAB exited in error!----------"
|
---|
| 4529 | + cat matlab.log
|
---|
| 4530 | + echo "-----------End of matlab.log-----------"
|
---|
| 4531 | +
|
---|
| 4532 | + # Clean up execution directory
|
---|
| 4533 | + rm -rf ${ISSM_DIR}/execution/*
|
---|
| 4534 | +
|
---|
| 4535 | + exit 1
|
---|
| 4536 | + fi
|
---|
| 4537 | +
|
---|
| 4538 | + # Check that all tests passed
|
---|
| 4539 | + numTestsFailed=`cat matlab.log | grep -c -e "FAILED|ERROR"`
|
---|
| 4540 | +
|
---|
| 4541 | + if [[ ${numTestsFailed} -ne 0 ]]; then
|
---|
| 4542 | + echo "One or more tests FAILED"
|
---|
| 4543 | + exit 1
|
---|
| 4544 | + else
|
---|
| 4545 | + echo "All tests PASSED"
|
---|
| 4546 | + fi
|
---|
| 4547 | + else
|
---|
| 4548 | + echo "Skipping tests"
|
---|
| 4549 | + fi
|
---|
| 4550 | +
|
---|
| 4551 | + # Create package
|
---|
| 4552 | + cd ${ISSM_DIR}
|
---|
| 4553 | + svn cleanup --remove-ignored --remove-unversioned test # Clean up test directory (before copying to package)
|
---|
| 4554 | + echo "Copying assets to package: ${PKG}"
|
---|
| 4555 | + cp -rf bin examples lib scripts test ${PKG}/
|
---|
| 4556 | + mkdir ${PKG}/execution
|
---|
| 4557 | + echo "Cleaning up unneeded/unwanted files"
|
---|
| 4558 | + rm -f ${PKG}/bin/generic_static.* # Remove static versions of generic cluster classes
|
---|
| 4559 | + rm -f ${PKG}/lib/*.a # Remove static libraries from package
|
---|
| 4560 | + rm -f ${PKG}/lib/*.la # Remove libtool libraries from package
|
---|
| 4561 | + rm -rf ${PKG}/test/SandBox # Remove testing sandbox from package
|
---|
| 4562 | +
|
---|
| 4563 | + # Compress package
|
---|
| 4564 | + echo "Compressing package"
|
---|
| 4565 | + tar -czf ${COMPRESSED_PKG} ${PKG}
|
---|
| 4566 | + ls -lah ${ISSM_DIR}/${COMPRESSED_PKG}
|
---|
| 4567 | +fi
|
---|
| 4568 | +
|
---|
| 4569 | +# Transfer package to ISSM Web site
|
---|
| 4570 | +echo "Transferring package to ISSM Web site"
|
---|
| 4571 | +scp -i ~/.ssh/debian_linux-vm_to_ross ${COMPRESSED_PKG} jenkins@ross.ics.uci.edu:/var/www/html/${COMPRESSED_PKG}
|
---|
| 4572 | +
|
---|
| 4573 | +if [ $? -ne 0 ]; then
|
---|
| 4574 | + echo "Transfer failed! Verify connection then build this project again."
|
---|
| 4575 | + exit 1
|
---|
| 4576 | +fi
|
---|
| 4577 |
|
---|
| 4578 | Property changes on: ../trunk-jpl/packagers/linux/package-issm-linux-binaries-matlab.sh
|
---|
| 4579 | ___________________________________________________________________
|
---|
| 4580 | Added: svn:executable
|
---|
| 4581 | ## -0,0 +1 ##
|
---|
| 4582 | +*
|
---|
| 4583 | \ No newline at end of property
|
---|
| 4584 | Index: ../trunk-jpl/jenkins/ross-debian_linux-binaries-matlab
|
---|
| 4585 | ===================================================================
|
---|
| 4586 | --- ../trunk-jpl/jenkins/ross-debian_linux-binaries-matlab (nonexistent)
|
---|
| 4587 | +++ ../trunk-jpl/jenkins/ross-debian_linux-binaries-matlab (revision 25791)
|
---|
| 4588 | @@ -0,0 +1,88 @@
|
---|
| 4589 | +#--------------------#
|
---|
| 4590 | +# ISSM Configuration #
|
---|
| 4591 | +#--------------------#
|
---|
| 4592 | +
|
---|
| 4593 | +MATLAB_PATH="/usr/local/MATLAB/R2019b"
|
---|
| 4594 | +
|
---|
| 4595 | +# NOTE:
|
---|
| 4596 | +# - We can disable dependency tracking in the Autotools because the binaries
|
---|
| 4597 | +# should always be a one-time build.
|
---|
| 4598 | +# - libgfortran will not be available in $ISSM_DIR/lib at compile time: it is
|
---|
| 4599 | +# copied by packaging script.
|
---|
| 4600 | +#
|
---|
| 4601 | +ISSM_CONFIG='\
|
---|
| 4602 | + --prefix=${ISSM_DIR} \
|
---|
| 4603 | + --enable-standalone-executables \
|
---|
| 4604 | + --enable-standalone-modules \
|
---|
| 4605 | + --enable-standalone-libraries \
|
---|
| 4606 | + --disable-dependency-tracking \
|
---|
| 4607 | + --with-pic \
|
---|
| 4608 | + --with-matlab-dir=${MATLAB_PATH} \
|
---|
| 4609 | + --with-fortran-lib="-L${ISSM_DIR}/lib -lgfortran" \
|
---|
| 4610 | + --with-mpi-include=${ISSM_DIR}/externalpackages/petsc/install/include \
|
---|
| 4611 | + --with-mpi-libflags="-L${ISSM_DIR}/externalpackages/petsc/install/lib -lmpi -lmpicxx -lmpifort" \
|
---|
| 4612 | + --with-blas-lapack-dir=${ISSM_DIR}/externalpackages/petsc/install \
|
---|
| 4613 | + --with-metis-dir=${ISSM_DIR}/externalpackages/petsc/install \
|
---|
| 4614 | + --with-scalapack-dir=${ISSM_DIR}/externalpackages/petsc/install \
|
---|
| 4615 | + --with-mumps-dir=${ISSM_DIR}/externalpackages/petsc/install \
|
---|
| 4616 | + --with-hdf5-dir=${ISSM_DIR}/externalpackages/petsc/install \
|
---|
| 4617 | + --with-petsc-dir=${ISSM_DIR}/externalpackages/petsc/install \
|
---|
| 4618 | + --with-gsl-dir=${ISSM_DIR}/externalpackages/gsl/install \
|
---|
| 4619 | + --with-boost-dir=${ISSM_DIR}/externalpackages/boost/install \
|
---|
| 4620 | + --with-dakota-dir=${ISSM_DIR}/externalpackages/dakota/install \
|
---|
| 4621 | + --with-triangle-dir=${ISSM_DIR}/externalpackages/triangle/install \
|
---|
| 4622 | + --with-chaco-dir=${ISSM_DIR}/externalpackages/chaco/install \
|
---|
| 4623 | + --with-m1qn3-dir=${ISSM_DIR}/externalpackages/m1qn3/install \
|
---|
| 4624 | + --with-semic-dir=${ISSM_DIR}/externalpackages/semic/install \
|
---|
| 4625 | +'
|
---|
| 4626 | +#-------------------#
|
---|
| 4627 | +# External Packages #
|
---|
| 4628 | +#-------------------#
|
---|
| 4629 | +
|
---|
| 4630 | +EXTERNALPACKAGES="
|
---|
| 4631 | + autotools install-debian-linux.sh
|
---|
| 4632 | + cmake install.sh
|
---|
| 4633 | + petsc install-3.12-linux-static.sh
|
---|
| 4634 | + gsl install-static.sh
|
---|
| 4635 | + boost install-1.7-linux-static.sh
|
---|
| 4636 | + dakota install-6.2-linux-static.sh
|
---|
| 4637 | + curl install-7-static.sh
|
---|
| 4638 | + netcdf install-4.7-parallel-static.sh
|
---|
| 4639 | + proj install-6.2-static.sh
|
---|
| 4640 | + gdal install-3-netcdf-static.sh
|
---|
| 4641 | + gshhg install.sh
|
---|
| 4642 | + gmt install-6-linux-static.sh
|
---|
| 4643 | + gmsh install-4-linux-static.sh
|
---|
| 4644 | + triangle install-linux-static.sh
|
---|
| 4645 | + chaco install.sh
|
---|
| 4646 | + m1qn3 install.sh
|
---|
| 4647 | + semic install.sh
|
---|
| 4648 | + shell2junit install.sh
|
---|
| 4649 | +"
|
---|
| 4650 | +
|
---|
| 4651 | +#---------#
|
---|
| 4652 | +# Testing #
|
---|
| 4653 | +#---------#
|
---|
| 4654 | +
|
---|
| 4655 | +# Test suites
|
---|
| 4656 | +MATLAB_TEST=0
|
---|
| 4657 | +PYTHON_TEST=0
|
---|
| 4658 | +JAVASCRIPT_TEST=0
|
---|
| 4659 | +EXAMPLES_TEST=0
|
---|
| 4660 | +
|
---|
| 4661 | +# Number of CPUs used in ISSM compilation
|
---|
| 4662 | +#
|
---|
| 4663 | +# NOTE: One is usually safer as some packages are very sensitive to parallel
|
---|
| 4664 | +# compilation.
|
---|
| 4665 | +#
|
---|
| 4666 | +NUMCPUS_INSTALL=8
|
---|
| 4667 | +
|
---|
| 4668 | +# Number of CPUs used in the nightly runs
|
---|
| 4669 | +NUMCPUS_RUN=1
|
---|
| 4670 | +
|
---|
| 4671 | +# Nightly run options
|
---|
| 4672 | +#
|
---|
| 4673 | +# See documentation in test/NightlyRun/runme.* for more information.
|
---|
| 4674 | +#
|
---|
| 4675 | +MATLAB_NROPTIONS=""
|
---|
| 4676 | +PYTHON_NROPTIONS=""
|
---|
| 4677 |
|
---|
| 4678 | Property changes on: ../trunk-jpl/jenkins/ross-debian_linux-binaries-matlab
|
---|
| 4679 | ___________________________________________________________________
|
---|
| 4680 | Added: svn:executable
|
---|
| 4681 | ## -0,0 +1 ##
|
---|
| 4682 | +*
|
---|
| 4683 | \ No newline at end of property
|
---|