source:
issm/oecreview/Archive/24684-25833/ISSM-25790-25791.diff
Last change on this file was 25834, checked in by , 4 years ago | |
---|---|
File size: 179.4 KB |
-
../trunk-jpl/externalpackages/gmsh/install-4-linux-python-static.sh
33 33 rm -rf gmsh-${VER}-source 34 34 35 35 # Copy customized source and config files to 'src' directory 36 cp configs/ 4/linux/static/CMakeLists.txt src36 cp configs/${VER}/static/CMakeLists.txt src 37 37 38 38 # Configure 39 39 # … … 55 55 -DENABLE_MPEG_ENCODE=0 \ 56 56 -DENABLE_MPI=1 \ 57 57 -DENABLE_OCC=0 \ 58 -DENABLE_TOUCHBAR=0 \59 58 -DMETIS_ROOT="${PETSC_ROOT}" 60 59 61 60 # Compile and install -
../trunk-jpl/externalpackages/gmsh/install-4-linux-static.sh
31 31 rm -rf gmsh-${VER}-source 32 32 33 33 # Copy customized source and config files to 'src' directory 34 cp configs/ 4/mac/static/CMakeLists.txt src34 cp configs/${VER}/static/CMakeLists.txt src 35 35 36 36 # Configure 37 37 # … … 41 41 # movies. 42 42 # - Option -DENABLE_OCC=0 is used because we do not need CAD kernel and are not 43 43 # importing STEP/IGES files. 44 # - Option -DENABLE_TOUCHBAR=0 is used because we do not have GUI, therefore we45 # do not need to support Apple Touch bar.46 44 # 47 45 cd install 48 46 cmake ../src \ … … 53 51 -DENABLE_MPEG_ENCODE=0 \ 54 52 -DENABLE_MPI=1 \ 55 53 -DENABLE_OCC=0 \ 56 -DENABLE_TOUCHBAR=0 \57 54 -DMETIS_ROOT="${PETSC_ROOT}" 58 55 59 56 # Compile and install -
../trunk-jpl/externalpackages/gmsh/configs/4.7.0/static/CMakeLists.txt
1 # Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle 2 # 3 # See the LICENSE.txt file for license information. Please report all 4 # issues on https://gitlab.onelab.info/gmsh/gmsh/issues. 5 6 cmake_minimum_required(VERSION 3.1 FATAL_ERROR) 7 8 # if CMAKE_BUILD_TYPE is specified use it; otherwise set the default 9 # build type to "RelWithDebInfo" ("-O2 -g" with gcc) prior to calling 10 # project() 11 if(DEFINED CMAKE_BUILD_TYPE) 12 set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Choose build type") 13 else() 14 set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose build type") 15 endif() 16 17 project(gmsh CXX C) 18 19 # require C++11 and request C99 20 set(CMAKE_CXX_STANDARD 11) 21 set(CMAKE_CXX_STANDARD_REQUIRED ON) 22 set(CMAKE_C_STANDARD 99) 23 24 # this variable controls the default value of the options which are normally set 25 # to ON (useful if you want to configure a minimal version of Gmsh: e.g. "cmake 26 # -DDEFAULT=0 -DENABLE_POST=1 -DENABLE_PARSER=1") 27 set(DEFAULT ON CACHE INTERNAL "Default value for enabled-by-default options") 28 29 macro(opt OPTION HELP VALUE) 30 option(ENABLE_${OPTION} ${HELP} ${VALUE}) 31 set(OPT_TEXI "${OPT_TEXI}\n@item ENABLE_${OPTION}\n${HELP} (default: ${VALUE})") 32 endmacro() 33 34 opt(3M "Enable proprietary 3M extension" OFF) 35 opt(ALGLIB "Enable ALGLIB (used by some mesh optimizers)" ${DEFAULT}) 36 opt(ANN "Enable ANN (used for fast point search in mesh/post)" ${DEFAULT}) 37 opt(BAMG "Enable Bamg 2D anisotropic mesh generator" ${DEFAULT}) 38 opt(BLAS_LAPACK "Enable BLAS/Lapack for linear algebra (if Eigen if disabled)" OFF) 39 opt(BLOSSOM "Enable Blossom algorithm (needed for full quad meshing)" ${DEFAULT}) 40 opt(BUILD_LIB "Enable 'lib' target for building static Gmsh library" OFF) 41 opt(BUILD_SHARED "Enable 'shared' target for building shared Gmsh library" OFF) 42 opt(BUILD_DYNAMIC "Enable dynamic Gmsh executable (linked with shared library)" OFF) 43 opt(BUILD_ANDROID "Enable Android NDK library target (experimental)" OFF) 44 opt(BUILD_IOS "Enable iOS library target (experimental)" OFF) 45 opt(CGNS "Enable CGNS import/export (experimental)" ${DEFAULT}) 46 opt(CGNS_CPEX0045 "Enable high-order CGNS import/export following CPEX0045 (experimental)" OFF) 47 opt(CAIRO "Enable Cairo to render fonts (experimental)" ${DEFAULT}) 48 opt(PROFILE "Enable profiling compiler flags" OFF) 49 opt(DINTEGRATION "Enable discrete integration (needed for levelsets)" ${DEFAULT}) 50 opt(DOMHEX "Enable experimental DOMHEX code" ${DEFAULT}) 51 opt(EIGEN "Enable Eigen for linear algebra (instead of Blas/Lapack)" ON) 52 opt(FLTK "Enable FLTK graphical user interface (requires mesh/post)" ${DEFAULT}) 53 opt(GETDP "Enable GetDP solver (linked as a library, experimental)" ${DEFAULT}) 54 opt(GMM "Enable GMM linear solvers (simple alternative to PETSc)" ${DEFAULT}) 55 opt(GMP "Enable GMP for Kbipack (advanced)" ON) 56 opt(GRAPHICS "Enable building graphics lib even without GUI (advanced)" OFF) 57 opt(HXT "Enable HXT library (for reparametrization and meshing)" ${DEFAULT}) 58 opt(KBIPACK "Enable Kbipack (neeeded by homology solver)" ${DEFAULT}) 59 opt(MATHEX "Enable Mathex expression parser (used by plugins and options)" ${DEFAULT}) 60 opt(MED "Enable MED mesh and post file formats" ${DEFAULT}) 61 opt(MESH "Enable mesh module (required by GUI)" ${DEFAULT}) 62 opt(METIS "Enable Metis mesh partitioner" ${DEFAULT}) 63 opt(MMG "Enable Mmg mesh adaptation interface" ${DEFAULT}) 64 opt(MPEG_ENCODE "Enable built-in MPEG movie encoder" ${DEFAULT}) 65 opt(MPI "Enable MPI (experimental, not used for meshing)" OFF) 66 opt(MSVC_STATIC_RUNTIME "Enable static Visual C++ runtime" OFF) 67 opt(MUMPS "Enable MUMPS sparse direct linear solver" OFF) 68 opt(NETGEN "Enable Netgen 3D frontal mesh generator" ${DEFAULT}) 69 opt(NUMPY "Enable fullMatrix and numpy array conversion for private API" OFF) 70 opt(PETSC4PY "Enable petsc4py wrappers for petsc matrices for private API" OFF) 71 opt(OCC "Enable OpenCASCADE CAD kernel" ${DEFAULT}) 72 opt(OCC_CAF "Enable OpenCASCADE CAF module (for STEP/IGES attributes)" ${DEFAULT}) 73 opt(OCC_STATIC "Link OpenCASCADE static instead of dynamic libraries (requires ENABLE_OCC)" OFF) 74 opt(OCC_TBB "Add TBB libraries in list of OCC libraries" OFF) 75 opt(ONELAB "Enable ONELAB solver interface" ${DEFAULT}) 76 opt(ONELAB_METAMODEL "Enable ONELAB metamodels (experimental)" ${DEFAULT}) 77 opt(OPENACC "Enable OpenACC" OFF) 78 opt(OPENMP "Enable OpenMP" OFF) 79 opt(OPTHOM "Enable high-order mesh optimization tools" ${DEFAULT}) 80 opt(OS_SPECIFIC_INSTALL "Enable OS-specific (e.g. app bundle) installation" OFF) 81 opt(OSMESA "Enable OSMesa for offscreen rendering (experimental)" OFF) 82 opt(P4EST "Enable p4est for enabling automatic mesh size field (experimental)" OFF) 83 opt(PACKAGE_STRIP "Strip symbols in install packages to reduce install size" ON) 84 opt(PARSER "Enable GEO file parser (required for .geo/.pos scripts)" ${DEFAULT}) 85 opt(PETSC "Enable PETSc linear solvers (required for SLEPc)" OFF) 86 opt(PLUGINS "Enable post-processing plugins" ${DEFAULT}) 87 opt(POST "Enable post-processing module (required by GUI)" ${DEFAULT}) 88 opt(POPPLER "Enable Poppler for displaying PDF documents (experimental)" OFF) 89 opt(PRIVATE_API "Enable private API" OFF) 90 opt(PRO "Enable PRO extensions" ${DEFAULT}) 91 opt(QUADTRI "Enable QuadTri structured meshing extensions" ${DEFAULT}) 92 opt(REVOROPT "Enable Revoropt (used for CVT remeshing)" OFF) 93 opt(RPATH "Use RPATH in dynamically linked targets" ON) 94 opt(SLEPC "Enable SLEPc eigensolvers" OFF) 95 opt(SOLVER "Enable built-in finite element solvers (required for reparametrization)" ${DEFAULT}) 96 opt(SYSTEM_CONTRIB "Use system versions of contrib libraries, when possible" OFF) 97 opt(TCMALLOC "Enable libtcmalloc (fast malloc that does not release memory)" OFF) 98 opt(TOUCHBAR "Enable Apple Touch bar" ${DEFAULT}) 99 opt(VISUDEV "Enable additional visualization capabilities for development purposes" OFF) 100 opt(VOROPP "Enable voro++ (for hex meshing, experimental)" ${DEFAULT}) 101 opt(WRAP_JAVA "Generate SWIG Java wrappers for private API" OFF) 102 opt(WRAP_PYTHON "Generate SWIG Python wrappers for private API (not used by public API)" OFF) 103 opt(ZIPPER "Enable Zip file compression/decompression" OFF) 104 105 set(GMSH_MAJOR_VERSION 4) 106 set(GMSH_MINOR_VERSION 7) 107 set(GMSH_PATCH_VERSION 0) 108 if(NOT GMSH_EXTRA_VERSION) 109 set(GMSH_EXTRA_VERSION "") 110 endif() 111 set(GMSH_EXTRA_VERSION_TEXI "${GMSH_EXTRA_VERSION}") 112 set(GMSH_EXTRA_VERSION_ORIG ${GMSH_EXTRA_VERSION}) 113 114 if(NOT GMSH_RELEASE) 115 find_package(Git) 116 if(GIT_FOUND) 117 execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --format=%h 118 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ERROR_QUIET 119 OUTPUT_VARIABLE GIT_COMMIT_HASH 120 OUTPUT_STRIP_TRAILING_WHITESPACE) 121 endif() 122 if(GIT_COMMIT_HASH) 123 set(GMSH_EXTRA_VERSION "${GMSH_EXTRA_VERSION}-git-${GIT_COMMIT_HASH}") 124 endif() 125 set(GMSH_EXTRA_VERSION_TEXI "${GMSH_EXTRA_VERSION_TEXI} (development version)") 126 endif() 127 128 set(GMSH_SHORT_VERSION 129 "${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION}.${GMSH_PATCH_VERSION}") 130 set(GMSH_VERSION "${GMSH_SHORT_VERSION}${GMSH_EXTRA_VERSION}") 131 set(GMSH_SHORT_LICENSE "GNU General Public License") 132 133 set(GMSH_GITLAB_PREFIX "https://gitlab.onelab.info/gmsh/gmsh") 134 if(GMSH_RELEASE) 135 set(GMSH_GITLAB_PREFIX "${GMSH_GITLAB_PREFIX}/blob/gmsh_${GMSH_SHORT_VERSION}") 136 else() 137 set(GMSH_GITLAB_PREFIX "${GMSH_GITLAB_PREFIX}/blob/master") 138 endif() 139 140 set(GMSH_API api/gmsh.h api/gmshc.h api/gmsh.h_cwrap) 141 142 if(ENABLE_PRIVATE_API) 143 message(WARNING "The private API is unsupported and undocumented. It is meant " 144 "for expert Gmsh developers, not for regular Gmsh users, who should rely " 145 "on the stable public API (gmsh/api) instead.") 146 file(GLOB_RECURSE HEADERS Common/*.h Numeric/*.h Geo/*.h Mesh/*.h Solver/*.h 147 Post/*.h Plugin/*.h Graphics/*.h contrib/kbipack/*.h 148 contrib/DiscreteIntegration/*.h contrib/HighOrderMeshOptimizer/*.h 149 contrib/MeshOptimizer/*.h contrib/MeshQualityOptimizer/*.h) 150 set(GMSH_PRIVATE_API ${CMAKE_CURRENT_BINARY_DIR}/Common/GmshConfig.h 151 ${CMAKE_CURRENT_BINARY_DIR}/Common/GmshVersion.h ${HEADERS}) 152 get_property(IAMCHILD DIRECTORY PROPERTY PARENT_DIRECTORY) 153 if(IAMCHILD) 154 set(GMSH_PRIVATE_API ${GMSH_PRIVATE_API} PARENT_SCOPE) 155 endif() 156 if(ENABLE_WRAP_PYTHON OR ENABLE_WRAP_JAVA) 157 set(ENABLE_BUILD_DYNAMIC ON) 158 message(WARNING "SWIG wrappers for the private API are unsupported and " 159 "undocumented. The stable public Python API does not required SWIG.") 160 endif() 161 endif() 162 163 set(ONELAB_PY contrib/onelab/python/onelab.py) 164 set(GMSH_PY api/gmsh.py) 165 set(GMSH_JL api/gmsh.jl) 166 167 if(${CMAKE_MAJOR_VERSION} GREATER 2) 168 string(TIMESTAMP DATE "%Y%m%d") 169 else() 170 execute_process(COMMAND date "+%Y%m%d" OUTPUT_VARIABLE DATE 171 OUTPUT_STRIP_TRAILING_WHITESPACE) 172 endif() 173 174 if(NOT DATE) 175 set(DATE "unknown") 176 endif() 177 set(GMSH_DATE "${DATE}") 178 179 if(NOT GMSH_HOST) 180 execute_process(COMMAND hostname OUTPUT_VARIABLE HOST 181 OUTPUT_STRIP_TRAILING_WHITESPACE) 182 if(NOT HOST) 183 set(HOST "unknown") 184 endif() 185 set(GMSH_HOST "${HOST}") 186 endif() 187 188 if(NOT GMSH_PACKAGER) 189 execute_process(COMMAND whoami OUTPUT_VARIABLE PACKAGER 190 OUTPUT_STRIP_TRAILING_WHITESPACE) 191 if(NOT PACKAGER) 192 set(PACKAGER "unknown") 193 endif() 194 string(REPLACE "\\" " " PACKAGER ${PACKAGER}) 195 set(GMSH_PACKAGER "${PACKAGER}") 196 endif() 197 198 if(APPLE) 199 set(GMSH_OS "MacOSX") 200 elseif(CYGWIN OR MSYS) 201 # detect if we use the MinGW compilers on Cygwin - if we do, handle the build 202 # as a pure Windows build and make cmake find pure Windows import libraries 203 # (.lib) 204 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR 205 CMAKE_CXX_COMPILER_ID MATCHES "Clang") 206 execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine 207 OUTPUT_VARIABLE CXX_COMPILER_MACHINE 208 OUTPUT_STRIP_TRAILING_WHITESPACE) 209 if(CXX_COMPILER_MACHINE MATCHES "mingw") 210 set(GMSH_OS "Windows") 211 set(WIN32 1) 212 add_definitions(-DWIN32) 213 set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "") 214 set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".so" ".lib" ".LIB" ".dll" ".DLL" ".dll.a") 215 endif() 216 endif() 217 else() 218 set(GMSH_OS "${CMAKE_SYSTEM_NAME}") 219 endif() 220 221 include(CheckTypeSize) 222 include(CheckFunctionExists) 223 include(CheckIncludeFile) 224 include(CheckCXXCompilerFlag) 225 include(CheckCCompilerFlag) 226 227 macro(set_config_option VARNAME STRING) 228 set(${VARNAME} TRUE) 229 list(APPEND CONFIG_OPTIONS ${STRING}) 230 message(STATUS "Found " ${STRING}) 231 endmacro() 232 233 # check the size of size_t 234 check_type_size("size_t" SIZEOF_SIZE_T) 235 if(SIZEOF_SIZE_T EQUAL 8) 236 set_config_option(HAVE_64BIT_SIZE_T "64Bit") 237 endif() 238 239 # append 32/64 to the build name on Linux and Windows 240 if(NOT APPLE) 241 if(HAVE_64BIT_SIZE_T) 242 set(GMSH_OS "${GMSH_OS}64") 243 else() 244 set(GMSH_OS "${GMSH_OS}32") 245 endif() 246 endif() 247 248 if(ENABLE_BUILD_DYNAMIC) 249 set(GMSH_OS "${GMSH_OS}-sdk") 250 endif() 251 252 if(ENABLE_RPATH) 253 set(CMAKE_MACOSX_RPATH 1) 254 255 # make sure that dynamic libraries can be found when installing/ displacing 256 # the binaries: from https://gitlab.kitware.com/cmake/community/wikis/doc/ 257 # cmake/RPATH-handling: 258 259 # use, i.e. don't skip the full RPATH for the build tree 260 set(CMAKE_SKIP_BUILD_RPATH FALSE) 261 262 # when building, don't use the install RPATH already (but later on when 263 # installing) 264 set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) 265 set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") 266 267 # add the automatically determined parts of the RPATH which point to 268 # directories outside the build tree to the install RPATH 269 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) 270 271 # the RPATH to be used when installing, but only if it's not a system directory 272 list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" 273 isSystemDir) 274 if("${isSystemDir}" STREQUAL "-1") 275 if(APPLE) 276 set(CMAKE_INSTALL_RPATH "@executable_path/../lib") 277 else() 278 set(CMAKE_INSTALL_RPATH "\\\$ORIGIN/../lib") 279 endif() 280 endif() 281 else() 282 set(CMAKE_MACOSX_RPATH 0) 283 set(CMAKE_SKIP_BUILD_RPATH TRUE) 284 endif() 285 286 if(MSVC) 287 # remove annoying warning about bool/int cast performance 288 set(GMSH_CONFIG_PRAGMAS "#pragma warning(disable:4800 4244 4267)") 289 foreach(VAR 290 CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE 291 CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO 292 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE 293 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO) 294 if(ENABLE_MSVC_STATIC_RUNTIME AND ${VAR} MATCHES "/MD") 295 string(REGEX REPLACE "/MD" "/MT" ${VAR} "${${VAR}}") 296 endif() 297 if(NOT ${VAR} MATCHES "/MP") # enable parallel compilation 298 set(${VAR} "${${VAR}} /MP") 299 endif() 300 endforeach() 301 if(ENABLE_PRIVATE_API) 302 if(ENABLE_BUILD_DYNAMIC OR ENABLE_BUILD_SHARED) 303 # automatically export .def file with all symbols (requires CMake 3.4); 304 # depending on the compiling options this might lead to more than 64k export 305 # symbols; just trim the .def file to keep the ones you need 306 set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) 307 endif() 308 endif() 309 endif() 310 311 # reduce memory usage of GCC on 32 bit systems 312 if(NOT HAVE_64BIT_SIZE_T AND CMAKE_CXX_COMPILER_ID MATCHES "GNU") 313 set(CMAKE_CXX_FLAGS 314 "${CMAKE_CXX_FLAGS} --param ggc-min-expand=1 --param ggc-min-heapsize=512000") 315 endif() 316 317 if(ENABLE_OPENMP) 318 find_package(OpenMP) 319 if(OpenMP_FOUND OR OPENMP_FOUND) 320 set_config_option(HAVE_OPENMP "OpenMP") 321 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") 322 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") 323 elseif(APPLE AND EXISTS "/opt/local/lib/libomp") 324 # official Apple compiler with macports' libomp 325 set_config_option(HAVE_OPENMP "OpenMP[MacPorts]") 326 set(CMAKE_C_FLAGS 327 "${CMAKE_C_FLAGS} -Xpreprocessor -fopenmp -I/opt/local/include/libomp") 328 set(CMAKE_CXX_FLAGS 329 "${CMAKE_CXX_FLAGS} -Xpreprocessor -fopenmp -I/opt/local/include/libomp") 330 list(APPEND EXTERNAL_LIBRARIES "-L/opt/local/lib/libomp -lomp") 331 elseif(APPLE AND EXISTS "/usr/local/lib/libomp.dylib") 332 # official Apple compiler with homebrew's libomp 333 set_config_option(HAVE_OPENMP "OpenMP[Homebrew]") 334 set(CMAKE_C_FLAGS 335 "${CMAKE_C_FLAGS} -Xpreprocessor -fopenmp") 336 set(CMAKE_CXX_FLAGS 337 "${CMAKE_CXX_FLAGS} -Xpreprocessor -fopenmp") 338 list(APPEND EXTERNAL_LIBRARIES "-L/usr/local/lib -lomp") 339 endif() 340 endif() 341 342 if(ENABLE_OPENACC) 343 find_package(OpenACC) 344 if(OpenACC_C_FOUND AND OpenACC_CXX_FOUND) 345 set_config_option(HAVE_OPENACC "OpenACC") 346 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenACC_C_FLAGS}") 347 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenACC_CXX_FLAGS}") 348 endif() 349 endif() 350 351 if(ENABLE_PROFILE) 352 # Using the perf set of profiling tools doesn't work without the frame 353 # pointer and a common optimisation is to remove it 354 check_cxx_compiler_flag("-fno-omit-frame-pointer" FNOFP) 355 if(FNOFP) 356 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer") 357 endif() 358 endif() 359 360 macro(append_gmsh_src DIRNAME FILES) 361 foreach(FILE ${FILES}) 362 list(APPEND LIST ${DIRNAME}/${FILE}) 363 endforeach() 364 set(GMSH_SRC ${GMSH_SRC};${LIST} PARENT_SCOPE) 365 set(GMSH_DIRS ${GMSH_DIRS};${DIRNAME} PARENT_SCOPE) 366 endmacro() 367 368 macro(find_all_libraries VARNAME LISTNAME PATH SUFFIX) 369 set(${VARNAME}) 370 list(LENGTH ${LISTNAME} NUM_LIST) 371 foreach(LIB ${${LISTNAME}}) 372 if("${PATH}" STREQUAL "") 373 find_library(FOUND_LIB ${LIB} PATH_SUFFIXES ${SUFFIX}) 374 else() 375 find_library(FOUND_LIB ${LIB} PATHS ${PATH} NO_DEFAULT_PATH) 376 endif() 377 if(FOUND_LIB) 378 list(APPEND ${VARNAME} ${FOUND_LIB}) 379 endif() 380 unset(FOUND_LIB CACHE) 381 endforeach() 382 list(LENGTH ${VARNAME} NUM_FOUND_LIBRARIES) 383 if(NUM_FOUND_LIBRARIES LESS NUM_LIST) 384 set(${VARNAME}) 385 endif() 386 endmacro() 387 388 macro(set_compile_flags LISTNAME FLAGS) 389 foreach(FILE ${${LISTNAME}}) 390 get_source_file_property(PROP ${FILE} COMPILE_FLAGS) 391 if(PROP) 392 set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS "${PROP} ${FLAGS}") 393 else() 394 set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS "${FLAGS}") 395 endif() 396 endforeach() 397 endmacro() 398 399 if(ENABLE_EIGEN) 400 if(ENABLE_SYSTEM_CONTRIB) 401 find_path(EIGEN_INC "Eigen/Dense" HINTS eigen3) 402 if(EIGEN_INC) 403 include_directories(${EIGEN_INC}) 404 set_config_option(HAVE_EIGEN "Eigen[system]") 405 endif() 406 endif() 407 if(NOT HAVE_EIGEN) 408 include_directories(contrib/eigen) 409 set_config_option(HAVE_EIGEN "Eigen") 410 endif() 411 # We could also add an option to use BLAS with Eigen 412 # add_definitions(-DEIGEN_USE_BLAS) 413 elseif(ENABLE_BLAS_LAPACK) 414 if(BLAS_LAPACK_LIBRARIES) 415 # use libs as specified in the BLAS_LAPACK_LIBRARIES variable 416 set_config_option(HAVE_BLAS "Blas[custom]") 417 set_config_option(HAVE_LAPACK "Lapack[custom]") 418 set(LAPACK_LIBRARIES ${BLAS_LAPACK_LIBRARIES}) 419 else() 420 if(MSVC) 421 # on Windows with Visual C++ try really hard to find blas/lapack *without* 422 # requiring a Fortran compiler: 1) try to find the Intel MKL libs using 423 # the standard search path; if not found 2) try to get the reference 424 # blas/lapack libs (useful for users with no Fortran compiler and no MKL 425 # license, who can just download our precompiled "gmsh-dep" package) 426 if(HAVE_64BIT_SIZE_T) 427 set(MKL_PATH em64t/lib) 428 set(MKL_LIBS_REQUIRED libguide40 mkl_intel_lp64 mkl_intel_thread mkl_core) 429 else() 430 set(MKL_PATH ia32/lib) 431 set(MKL_LIBS_REQUIRED libguide40 mkl_intel_c mkl_intel_thread mkl_core) 432 endif() 433 find_all_libraries(LAPACK_LIBRARIES MKL_LIBS_REQUIRED "" ${MKL_PATH}) 434 if(LAPACK_LIBRARIES) 435 set_config_option(HAVE_BLAS "Blas[mkl]") 436 set_config_option(HAVE_LAPACK "Lapack[mkl]") 437 else() 438 set(REFLAPACK_LIBS_REQUIRED lapack blas g2c gcc) 439 find_all_libraries(LAPACK_LIBRARIES REFLAPACK_LIBS_REQUIRED "" "") 440 if(LAPACK_LIBRARIES) 441 set_config_option(HAVE_BLAS "Blas[ref]") 442 set_config_option(HAVE_LAPACK "Lapack[ref]") 443 endif() 444 endif() 445 elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") 446 # on Linux try to find the Intel MKL without a Fortran compiler 447 if(HAVE_64BIT_SIZE_T) 448 set(MKL_PATH lib/em64t) 449 else() 450 set(MKL_PATH lib/32) 451 endif() 452 set(MKL_LIBS_REQUIRED mkl_gf_lp64 iomp5 mkl_gnu_thread mkl_core guide pthread) 453 find_all_libraries(LAPACK_LIBRARIES MKL_LIBS_REQUIRED "" ${MKL_PATH}) 454 if(NOT LAPACK_LIBRARIES) 455 # match lapack 9.0 on 64bit 456 set(MKL_LIBS_REQUIRED mkl_lapack mkl_em64t guide) 457 find_all_libraries(LAPACK_LIBRARIES MKL_LIBS_REQUIRED "" ${MKL_PATH}) 458 endif() 459 if(LAPACK_LIBRARIES) 460 set_config_option(HAVE_BLAS "Blas[mkl]") 461 set_config_option(HAVE_LAPACK "Lapack[mkl]") 462 else() 463 # on Linux also try to find ATLAS without a Fortran compiler, because 464 # cmake ships with a buggy FindBLAS e.g. on Ubuntu Lucid Lynx 465 set(ATLAS_LIBS_REQUIRED lapack f77blas cblas atlas) 466 find_all_libraries(LAPACK_LIBRARIES ATLAS_LIBS_REQUIRED "" "") 467 if(LAPACK_LIBRARIES) 468 set_config_option(HAVE_BLAS "Blas[atlas]") 469 set_config_option(HAVE_LAPACK "Lapack[atlas]") 470 else() 471 # try with generic names 472 set(GENERIC_LIBS_REQUIRED lapack blas pthread) 473 find_all_libraries(LAPACK_LIBRARIES GENERIC_LIBS_REQUIRED "" "") 474 if(LAPACK_LIBRARIES) 475 set_config_option(HAVE_BLAS "Blas[generic]") 476 set_config_option(HAVE_LAPACK "Lapack[generic]") 477 find_library(GFORTRAN_LIB gfortran) 478 if(GFORTRAN_LIB) 479 list(APPEND LAPACK_LIBRARIES ${GFORTRAN_LIB}) 480 endif() 481 endif() 482 endif() 483 endif() 484 elseif(${CMAKE_SYSTEM_NAME} MATCHES "SunOS") 485 # on SunOS we know blas and lapack are available in sunperf 486 set(LAPACK_LIBRARIES -library=sunperf) 487 set_config_option(HAVE_BLAS "Blas[sunperf]") 488 set_config_option(HAVE_LAPACK "Lapack[sunperf]") 489 elseif(APPLE) 490 # on Mac we also know that blas and lapack are available 491 set(LAPACK_LIBRARIES "-llapack -lblas") 492 set_config_option(HAVE_BLAS "Blas[veclib]") 493 set_config_option(HAVE_LAPACK "Lapack[veclib]") 494 endif() 495 496 if(NOT HAVE_BLAS OR NOT HAVE_LAPACK) 497 # if we haven't found blas and lapack check for OpenBlas 498 set(OPENBLAS_LIBS_REQUIRED openblas) 499 find_all_libraries(LAPACK_LIBRARIES OPENBLAS_LIBS_REQUIRED "" "") 500 if(LAPACK_LIBRARIES) 501 set_config_option(HAVE_BLAS "Blas[openblas]") 502 set_config_option(HAVE_LAPACK "Lapack[openblas]") 503 find_library(GFORTRAN_LIB gfortran) 504 if(GFORTRAN_LIB) 505 list(APPEND LAPACK_LIBRARIES ${GFORTRAN_LIB}) 506 endif() 507 endif() 508 endif() 509 510 if(NOT HAVE_BLAS OR NOT HAVE_LAPACK) 511 # if we still haven't found blas and lapack, use the standard cmake tests, 512 # which require a working Fortran compiler 513 enable_language(Fortran) 514 find_package(BLAS) 515 if(BLAS_FOUND) 516 set_config_option(HAVE_BLAS "Blas") 517 find_package(LAPACK) 518 if(LAPACK_FOUND) 519 set_config_option(HAVE_LAPACK "Lapack") 520 else() 521 set(LAPACK_LIBRARIES ${BLAS_LIBRARIES}) 522 endif() 523 if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") 524 if(CMAKE_Fortran_COMPILER MATCHES "gfortran") 525 list(APPEND LAPACK_LIBRARIES gfortran) 526 elseif(CMAKE_Fortran_COMPILER MATCHES "f95") 527 list(APPEND LAPACK_LIBRARIES gfortran) 528 elseif(CMAKE_Fortran_COMPILER MATCHES "g77") 529 list(APPEND LAPACK_LIBRARIES g2c) 530 endif() 531 elseif(CMAKE_Fortran_COMPILER MATCHES "pgi") 532 list(APPEND LAPACK_LIBRARIES -pgf77libs) 533 endif() 534 endif() 535 endif() 536 endif() 537 endif() 538 539 if(ENABLE_TCMALLOC) 540 find_library(TCMALLOC tcmalloc) 541 if(TCMALLOC) 542 set_config_option(HAVE_TCMALLOC "TCMalloc") 543 list(APPEND EXTERNAL_LIBRARIES ${TCMALLOC}) 544 endif() 545 endif() 546 547 add_subdirectory(Common) 548 add_subdirectory(Numeric) 549 add_subdirectory(Geo) 550 551 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Mesh AND ENABLE_MESH) 552 add_subdirectory(Mesh) 553 set_config_option(HAVE_MESH "Mesh") 554 endif() 555 556 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Solver AND ENABLE_SOLVER) 557 add_subdirectory(Solver) 558 set_config_option(HAVE_SOLVER "Solver") 559 endif() 560 561 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Post AND ENABLE_POST) 562 add_subdirectory(Post) 563 set_config_option(HAVE_POST "Post") 564 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Plugin AND ENABLE_PLUGINS) 565 add_subdirectory(Plugin) 566 set_config_option(HAVE_PLUGINS "Plugins") 567 endif() 568 endif() 569 570 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Parser AND ENABLE_PARSER) 571 add_subdirectory(Parser) 572 set_config_option(HAVE_PARSER "Parser") 573 endif() 574 575 if(ENABLE_VISUDEV) 576 set_config_option(HAVE_VISUDEV "VisuDev") 577 endif() 578 579 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Fltk AND ENABLE_FLTK) 580 # first, try to use fltk-config for fltk >= 1.3 (FindFLTK is buggy on Unix, 581 # where e.g. xft and xinerama options are not dealt with) 582 find_program(FLTK_CONFIG_SCRIPT fltk-config) 583 if(FLTK_CONFIG_SCRIPT) 584 execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --api-version 585 OUTPUT_VARIABLE FLTK_VERSION) 586 string(STRIP "${FLTK_VERSION}" FLTK_VERSION) 587 if(FLTK_VERSION VERSION_GREATER 1.1) 588 add_subdirectory(Fltk) 589 set_config_option(HAVE_FLTK "Fltk") 590 message(STATUS "Using fltk-config script for Fltk " ${FLTK_VERSION}) 591 execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --use-gl --use-images --includedir 592 OUTPUT_VARIABLE FLTK_INCLUDE_DIR) 593 string(STRIP ${FLTK_INCLUDE_DIR} FLTK_INCLUDE_DIR) 594 list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}) 595 # On linux (at least OpenSuSE) the following directories are 596 # not existing (everything is in /usr/include). To avoid warnings 597 # check existance of these directories before adding them 598 if(EXISTS ${FLTK_INCLUDE_DIR}/FL/images) 599 list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}/FL/images) 600 endif() 601 if(EXISTS ${FLTK_INCLUDE_DIR}/jpeg) 602 list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}/jpeg) 603 endif() 604 if(EXISTS ${FLTK_INCLUDE_DIR}/zlib) 605 list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}/zlib) 606 endif() 607 if(EXISTS ${FLTK_INCLUDE_DIR}/png) 608 list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}/png) 609 endif() 610 execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --use-gl --use-images --ldflags 611 OUTPUT_VARIABLE FLTK_LIBRARIES) 612 string(STRIP ${FLTK_LIBRARIES} FLTK_LIBRARIES) 613 string(REGEX MATCH "fltk[_ ]jpeg" FLTK_JPEG ${FLTK_LIBRARIES}) 614 string(REGEX MATCH "fltk[_ ]z" FLTK_Z ${FLTK_LIBRARIES}) 615 string(REGEX MATCH "fltk[_ ]png" FLTK_PNG ${FLTK_LIBRARIES}) 616 endif() 617 endif() 618 # then try the built-in FindFLTK module 619 if(NOT HAVE_FLTK) 620 set(FLTK_SKIP_FORMS TRUE) 621 set(FLTK_SKIP_FLUID TRUE) 622 find_package(FLTK) 623 if(FLTK_FOUND) 624 add_subdirectory(Fltk) 625 set_config_option(HAVE_FLTK "Fltk") 626 list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}) 627 # find fltk jpeg 628 find_library(FLTK_JPEG NAMES fltk_jpeg fltkjpeg) 629 if(FLTK_JPEG) 630 list(APPEND EXTERNAL_LIBRARIES ${FLTK_JPEG}) 631 foreach(DIR ${FLTK_INCLUDE_DIR}) 632 list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/jpeg) 633 endforeach() 634 endif() 635 # find fltk zlib 636 find_library(FLTK_Z NAMES fltk_z fltkz) 637 if(FLTK_Z) 638 list(APPEND EXTERNAL_LIBRARIES ${FLTK_Z}) 639 foreach(DIR ${FLTK_INCLUDE_DIR}) 640 list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/zlib) 641 endforeach() 642 endif() 643 # find fltk png 644 find_library(FLTK_PNG NAMES fltk_png fltkpng) 645 if(FLTK_PNG) 646 list(APPEND EXTERNAL_LIBRARIES ${FLTK_PNG}) 647 foreach(DIR ${FLTK_INCLUDE_DIR}) 648 list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/png) 649 endforeach() 650 endif() 651 endif() 652 endif() 653 # workaround for Fedora/Suse messing up fltk-config (see issue #417) 654 if(HAVE_FLTK AND ${CMAKE_SYSTEM_NAME} MATCHES "Linux") 655 string(REGEX MATCH "X11" FLTK_X11 ${FLTK_LIBRARIES}) 656 if(NOT FLTK_X11) 657 find_package(X11) 658 if(X11_FOUND) 659 list(APPEND EXTERNAL_INCLUDES ${X11_INCLUDE_DIR}) 660 list(APPEND EXTERNAL_LIBRARIES ${X11_LIBRARIES}) 661 endif() 662 endif() 663 endif() 664 endif() 665 666 if(APPLE AND HAVE_FLTK AND ENABLE_TOUCHBAR) 667 STRING(REGEX MATCH "([0-9]+.[0-9]+)" OSX_SDK_VERSION "${CMAKE_OSX_SYSROOT}") 668 if(OSX_SDK_VERSION) 669 if(${OSX_SDK_VERSION} VERSION_GREATER 10.11) 670 set(GMSH_SRC ${GMSH_SRC};Fltk/touchBar.mm) 671 set_config_option(HAVE_TOUCHBAR "TouchBar") 672 endif() 673 endif() 674 endif() 675 676 if(ENABLE_ONELAB) 677 set_config_option(HAVE_ONELAB "ONELAB") 678 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/onelab) 679 if(ENABLE_ONELAB_METAMODEL) 680 add_subdirectory(contrib/onelab) 681 include_directories(contrib/onelab) 682 set_config_option(HAVE_ONELAB_METAMODEL "ONELABMetamodel") 683 endif() 684 file(COPY ${ONELAB_PY} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) 685 endif() 686 endif() 687 688 if(ENABLE_BUILD_IOS) 689 find_file(CMAKE_TOOLCHAIN_FILE "ios.cmake") 690 if(NOT CMAKE_TOOLCHAIN_FILE) 691 message(FATAL_ERROR "Cannot compile Gmsh for iOS without a toolchain") 692 endif() 693 add_definitions(-DBUILD_IOS) 694 endif() 695 696 if(HAVE_FLTK OR ENABLE_GRAPHICS) 697 if(NOT HAVE_MESH OR NOT HAVE_POST OR NOT HAVE_PLUGINS OR NOT HAVE_ONELAB) 698 message(SEND_ERROR "Cannot compile GUI without Mesh, Post, Plugin and ONELAB") 699 endif() 700 701 if(FLTK_JPEG) 702 set_config_option(HAVE_LIBJPEG "Jpeg[fltk]") 703 else() 704 find_package(JPEG) 705 if(JPEG_FOUND) 706 set_config_option(HAVE_LIBJPEG "Jpeg") 707 list(APPEND EXTERNAL_LIBRARIES ${JPEG_LIBRARIES}) 708 list(APPEND EXTERNAL_INCLUDES ${JPEG_INCLUDE_DIR}) 709 endif() 710 endif() 711 712 if(FLTK_Z) 713 set_config_option(HAVE_LIBZ "Zlib[fltk]") 714 else() 715 find_package(ZLIB) 716 if(ZLIB_FOUND) 717 set_config_option(HAVE_LIBZ "Zlib") 718 list(APPEND EXTERNAL_LIBRARIES ${ZLIB_LIBRARIES}) 719 list(APPEND EXTERNAL_INCLUDES ${ZLIB_INCLUDE_DIR}) 720 endif() 721 endif() 722 723 if(HAVE_LIBZ) 724 if(FLTK_PNG) 725 set_config_option(HAVE_LIBPNG "Png[fltk]") 726 else() 727 find_package(PNG) 728 if(PNG_FOUND) 729 set_config_option(HAVE_LIBPNG "Png") 730 list(APPEND EXTERNAL_LIBRARIES ${PNG_LIBRARIES}) 731 list(APPEND EXTERNAL_INCLUDES ${PNG_INCLUDE_DIR}) 732 endif() 733 endif() 734 endif() 735 736 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/mpeg_encode AND 737 ENABLE_MPEG_ENCODE) 738 add_subdirectory(contrib/mpeg_encode) 739 include_directories(contrib/mpeg_encode/headers) 740 set_config_option(HAVE_MPEG_ENCODE "Mpeg") 741 endif() 742 743 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/3M AND ENABLE_3M) 744 add_subdirectory(contrib/3M) 745 include_directories(contrib/3M) 746 set_config_option(HAVE_3M "3M") 747 endif() 748 749 if(ENABLE_OSMESA) 750 find_library(OSMESA_LIB OSMesa) 751 if(OSMESA_LIB) 752 set_config_option(HAVE_OSMESA "OSMesa") 753 list(APPEND EXTERNAL_LIBRARIES ${OSMESA_LIB}) 754 endif() 755 endif() 756 757 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Graphics) 758 set(OpenGL_GL_PREFERENCE "LEGACY") 759 find_package(OpenGL REQUIRED) 760 if(OPENGL_GLU_FOUND AND OPENGL_FOUND) 761 add_subdirectory(Graphics) 762 set_config_option(HAVE_OPENGL "OpenGL") 763 else() 764 message(SEND_ERROR "Could not find GLU: disabling OpenGL support") 765 endif() 766 endif() 767 endif() 768 769 if(ENABLE_ANN) 770 find_library(ANN_LIB ANN PATH_SUFFIXES lib) 771 find_path(ANN_INC "ANN.h" PATH_SUFFIXES src include ANN) 772 if(ENABLE_SYSTEM_CONTRIB AND ANN_LIB AND ANN_INC) 773 message(STATUS "Using system version of ANN") 774 list(APPEND EXTERNAL_LIBRARIES ${ANN_LIB}) 775 list(APPEND EXTERNAL_INCLUDES ${ANN_INC}) 776 set_config_option(HAVE_ANN "ANN[system]") 777 elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/ANN) 778 add_subdirectory(contrib/ANN) 779 include_directories(contrib/ANN/include) 780 set_config_option(HAVE_ANN "ANN") 781 endif() 782 endif() 783 784 if(ENABLE_ALGLIB) 785 find_library(ALGLIB_LIB alglib) 786 find_path(ALGLIB_INC "stdafx.h" PATH_SUFFIXES libalglib) 787 if(ENABLE_SYSTEM_CONTRIB AND ALGLIB_LIB AND ALGLIB_INC) 788 list(APPEND EXTERNAL_LIBRARIES ${ALGLIB_LIB}) 789 list(APPEND EXTERNAL_INCLUDES ${ALGLIB_INC}) 790 set_config_option(HAVE_ALGLIB "ALGLIB[system]") 791 elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/ALGLIB) 792 add_subdirectory(contrib/ALGLIB) 793 include_directories(contrib/ALGLIB) 794 set_config_option(HAVE_ALGLIB "ALGLIB") 795 endif() 796 endif() 797 798 if(HAVE_FLTK AND ENABLE_CAIRO) 799 find_library(CAIRO_LIB cairo) 800 find_path(CAIRO_INC "cairo/cairo.h" PATH_SUFFIXES include) 801 if(CAIRO_INC AND CAIRO_LIB) 802 set_config_option(HAVE_CAIRO "Cairo") 803 list(APPEND EXTERNAL_LIBRARIES ${CAIRO_LIB}) 804 list(APPEND EXTERNAL_INCLUDES ${CAIRO_INC}) 805 endif() 806 endif() 807 808 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/DiscreteIntegration AND 809 ENABLE_DINTEGRATION) 810 add_subdirectory(contrib/DiscreteIntegration) 811 include_directories(contrib/DiscreteIntegration) 812 set_config_option(HAVE_DINTEGRATION "DIntegration") 813 endif() 814 815 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/HighOrderMeshOptimizer AND 816 EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/MeshOptimizer AND 817 EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/MeshQualityOptimizer AND 818 ENABLE_OPTHOM AND HAVE_MESH) 819 add_subdirectory(contrib/HighOrderMeshOptimizer) 820 include_directories(contrib/HighOrderMeshOptimizer) 821 add_subdirectory(contrib/MeshOptimizer) 822 include_directories(contrib/MeshOptimizer) 823 include_directories(${CMAKE_CURRENT_BINARY_DIR}/contrib/MeshOptimizer) 824 add_subdirectory(contrib/MeshQualityOptimizer) 825 include_directories(contrib/MeshQualityOptimizer) 826 set_config_option(HAVE_OPTHOM "OptHom") 827 endif() 828 829 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/domhex AND 830 ENABLE_DOMHEX AND HAVE_MESH) 831 add_subdirectory(contrib/domhex) 832 include_directories(contrib/domhex) 833 set_config_option(HAVE_DOMHEX "DomHex") 834 endif() 835 836 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/QuadTri AND 837 ENABLE_QUADTRI AND HAVE_MESH) 838 add_subdirectory(contrib/QuadTri) 839 include_directories(contrib/QuadTri) 840 set_config_option(HAVE_QUADTRI "QuadTri") 841 endif() 842 843 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/kbipack AND ENABLE_KBIPACK) 844 set_config_option(HAVE_KBIPACK "Kbipack") 845 add_subdirectory(contrib/kbipack) 846 include_directories(contrib/kbipack) 847 if(ENABLE_GMP) 848 find_library(GMP_LIB libgmp.a) 849 find_path(GMP_INC "gmp.h" PATH_SUFFIXES src include) 850 endif() 851 if(GMP_LIB AND GMP_INC) 852 set_config_option(HAVE_GMP "GMP") 853 list(APPEND EXTERNAL_LIBRARIES ${GMP_LIB}) 854 list(APPEND EXTERNAL_INCLUDES ${GMP_INC}) 855 else() 856 message(STATUS "GMP not found: Kbipack uses long int") 857 endif() 858 endif() 859 860 if(ENABLE_MATHEX) 861 find_library(MATHEX_LIB mathex PATH_SUFFIXES lib) 862 find_path(MATHEX_INC "mathex.h" PATH_SUFFIXES src include) 863 if(ENABLE_SYSTEM_CONTRIB AND MATHEX_LIB AND MATHEX_INC) 864 list(APPEND EXTERNAL_LIBRARIES ${MATHEX_LIB}) 865 list(APPEND EXTERNAL_INCLUDES ${MATHEX_INC}) 866 set_config_option(HAVE_MATHEX "MathEx[system]") 867 elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/MathEx) 868 add_subdirectory(contrib/MathEx) 869 include_directories(contrib/MathEx) 870 set_config_option(HAVE_MATHEX "MathEx") 871 endif() 872 endif() 873 874 if(ENABLE_MPI) 875 find_package(MPI) 876 if(MPI_FOUND) 877 set_config_option(HAVE_MPI "MPI") 878 list(APPEND EXTERNAL_INCLUDES ${MPI_CXX_INCLUDE_PATH}) 879 list(APPEND EXTERNAL_LIBRARIES ${MPI_CXX_LIBRARIES}) 880 set(CMAKE_C_COMPILER ${MPI_C_COMPILER}) 881 set(CMAKE_CXX_COMPILER ${MPI_CXX_COMPILER}) 882 set(CMAKE_Fortran_COMPILER ${MPI_Fortran_COMPILER}) 883 endif() 884 endif() 885 886 if(ENABLE_POPPLER) 887 find_library(POPPLER_LIB poppler) 888 find_library(POPPLER_CPP_LIB poppler-cpp) 889 find_path(POPPLER_INC "poppler/cpp/poppler-document.h" PATH_SUFFIXES src include) 890 if(POPPLER_LIB AND POPPLER_INC) 891 set_config_option(HAVE_POPPLER "Poppler") 892 list(APPEND EXTERNAL_LIBRARIES ${POPPLER_LIB}) 893 list(APPEND EXTERNAL_LIBRARIES ${POPPLER_CPP_LIB}) 894 list(APPEND EXTERNAL_INCLUDES ${POPPLER_INC}) 895 endif() 896 endif() 897 898 if(ENABLE_P4EST) 899 find_library(P4EST_LIB p4est) 900 find_path(P4EST_INC "p4est.h" PATH_SUFFIXES src) 901 find_library(SC_LIB sc) 902 if(P4EST_LIB AND P4EST_INC AND SC_LIB) 903 set_config_option(HAVE_P4EST "P4est") 904 list(APPEND EXTERNAL_LIBRARIES ${P4EST_LIB} ${SC_LIB}) 905 list(APPEND EXTERNAL_INCLUDES ${P4EST_INC}) 906 endif() 907 endif() 908 909 if(HAVE_MESH OR HAVE_SOLVER) 910 if(ENABLE_METIS) 911 if(METIS_LIB AND METIS_INC) 912 list(APPEND EXTERNAL_LIBRARIES ${METIS_LIB}) 913 list(APPEND EXTERNAL_INCLUDES ${METIS_INC}) 914 set_config_option(HAVE_METIS "Metis") 915 else() 916 find_library(METIS_LIB metis PATH_SUFFIXES lib) 917 find_path(METIS_INC "metis.h" PATH_SUFFIXES include) 918 if(ENABLE_SYSTEM_CONTRIB AND METIS_LIB AND METIS_INC) 919 message(STATUS "Using system version of METIS") 920 list(APPEND EXTERNAL_LIBRARIES ${METIS_LIB}) 921 list(APPEND EXTERNAL_INCLUDES ${METIS_INC}) 922 set_config_option(HAVE_METIS "Metis[system]") 923 elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/metis) 924 add_definitions(-DUSE_GKREGEX) 925 add_subdirectory(contrib/metis) 926 include_directories(contrib/metis/include contrib/metis/libmetis 927 contrib/metis/GKlib) 928 set_config_option(HAVE_METIS "Metis") 929 endif() 930 endif() 931 endif() 932 endif() 933 934 if(HAVE_MESH) 935 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Mesh/tetgenBR.cxx) 936 set_config_option(HAVE_TETGENBR "TetGen/BR") 937 endif() 938 939 if(ENABLE_VOROPP) 940 find_library(VOROPP_LIB voro++) 941 find_path(VOROPP_INC "voro++.hh" PATH_SUFFIXES voro++) 942 if(ENABLE_SYSTEM_CONTRIB AND VOROPP_LIB AND VOROPP_INC) 943 message(STATUS "Using system version of voro++") 944 list(APPEND EXTERNAL_LIBRARIES ${VOROPP_LIB}) 945 list(APPEND EXTERNAL_INCLUDES ${VOROPP_INC}) 946 set_config_option(HAVE_VOROPP "Voro++[system]") 947 elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/voro++) 948 add_subdirectory(contrib/voro++) 949 include_directories(contrib/voro++/src) 950 set_config_option(HAVE_VOROPP "Voro++") 951 endif() 952 endif() 953 954 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/blossom AND ENABLE_BLOSSOM) 955 add_subdirectory(contrib/blossom) 956 include_directories(contrib/blossom/MATCH contrib/blossom/concorde97 957 contrib/blossom/concorde97/INCLUDE) 958 set_config_option(HAVE_BLOSSOM "Blossom") 959 endif() 960 961 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/Netgen AND ENABLE_NETGEN) 962 add_subdirectory(contrib/Netgen) 963 include_directories(contrib/Netgen contrib/Netgen/libsrc/include 964 contrib/Netgen/nglib) 965 set_config_option(HAVE_NETGEN "Netgen") 966 add_definitions(-DNO_PARALLEL_THREADS -DNOTCL) 967 endif() 968 969 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/bamg AND ENABLE_BAMG) 970 add_subdirectory(contrib/bamg) 971 include_directories(contrib/bamg contrib/bamg/bamglib) 972 set_config_option(HAVE_BAMG "Bamg") 973 endif() 974 975 if(ENABLE_MMG) 976 find_library(MMG_LIB NAMES Mmg mmg) 977 find_path(MMG_INC "libmmg.h" PATH_SUFFIXES mmg) 978 if(MMG_LIB AND MMG_INC) 979 list(APPEND EXTERNAL_LIBRARIES ${MMG_LIB}) 980 list(APPEND EXTERNAL_INCLUDES ${MMG_INC}) 981 set_config_option(HAVE_MMG "Mmg") 982 endif() 983 endif() 984 endif() 985 986 if(ENABLE_MED OR ENABLE_CGNS) 987 find_package(HDF5) 988 if(HDF5_FOUND) 989 set(HDF5_LIB "${HDF5_C_LIBRARIES}") 990 list(APPEND EXTERNAL_INCLUDES ${HDF5_INCLUDE_DIRS}) 991 if(ENABLE_MED) 992 find_library(MED_LIB medC) 993 if(MED_LIB) 994 set_config_option(HAVE_MED "Med") 995 list(APPEND EXTERNAL_LIBRARIES ${MED_LIB}) 996 endif() 997 endif() 998 if(ENABLE_CGNS) 999 find_library(CGNS_LIB cgns HINTS ENV CGNS_ROOT PATH_SUFFIXES lib) 1000 find_path(CGNS_INC "cgnslib.h" HINTS ENV CGNS_ROOT PATH_SUFFIXES include) 1001 if(CGNS_LIB AND CGNS_INC) 1002 set_config_option(HAVE_LIBCGNS "Cgns") 1003 list(APPEND EXTERNAL_LIBRARIES ${CGNS_LIB}) 1004 list(APPEND EXTERNAL_INCLUDES ${CGNS_INC}) 1005 if(ENABLE_CGNS_CPEX0045) 1006 set_config_option(HAVE_LIBCGNS_CPEX0045 "Cgns_CPEX0045") 1007 endif() 1008 endif() 1009 endif() 1010 if(MED_LIB OR CGNS_LIB) 1011 list(APPEND EXTERNAL_LIBRARIES ${HDF5_LIB}) 1012 find_library(SZ_LIB NAMES szlib sz) 1013 if(SZ_LIB) 1014 list(APPEND EXTERNAL_LIBRARIES ${SZ_LIB}) 1015 endif() 1016 if(NOT HAVE_LIBZ) # necessary for non-GUI builds 1017 find_package(ZLIB) 1018 if(ZLIB_FOUND) 1019 set_config_option(HAVE_LIBZ "Zlib") 1020 list(APPEND EXTERNAL_LIBRARIES ${ZLIB_LIBRARIES}) 1021 endif() 1022 endif() 1023 endif() 1024 else() 1025 message(STATUS "HDF5 not found") 1026 endif() 1027 endif() 1028 1029 if(HAVE_SOLVER) 1030 if(ENABLE_GMM) 1031 find_path(GMM_INC "gmm.h" PATH_SUFFIXES src include include/gmm) 1032 if(ENABLE_SYSTEM_CONTRIB AND GMM_INC) 1033 message(STATUS "Using system version of GMM") 1034 list(APPEND EXTERNAL_INCLUDES ${GMM_INC}) 1035 set_config_option(HAVE_GMM "Gmm[system]") 1036 elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/gmm) 1037 include_directories(contrib/gmm) 1038 set_config_option(HAVE_GMM "Gmm") 1039 endif() 1040 endif() 1041 1042 if(ENABLE_PETSC) 1043 if(PETSC_DIR) 1044 set(ENV_PETSC_DIR ${PETSC_DIR}) 1045 else() 1046 set(ENV_PETSC_DIR $ENV{PETSC_DIR}) 1047 endif() 1048 if(PETSC_ARCH) 1049 set(ENV_PETSC_ARCH ${PETSC_ARCH}) 1050 else() 1051 set(ENV_PETSC_ARCH $ENV{PETSC_ARCH}) 1052 endif() 1053 set(PETSC_POSSIBLE_CONF_FILES 1054 ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/conf/petscvariables 1055 ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib/petsc-conf/petscvariables 1056 ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib/petsc/conf/petscvariables) 1057 foreach(FILE ${PETSC_POSSIBLE_CONF_FILES}) 1058 if(EXISTS ${FILE}) 1059 # old-style PETSc installations (using PETSC_DIR and PETSC_ARCH) 1060 message(STATUS "Using PETSc dir: ${ENV_PETSC_DIR}") 1061 message(STATUS "Using PETSc arch: ${ENV_PETSC_ARCH}") 1062 # find includes by parsing the petscvariables file 1063 file(STRINGS ${FILE} PETSC_VARIABLES NEWLINE_CONSUME) 1064 endif() 1065 endforeach() 1066 if(PETSC_VARIABLES) 1067 # try to find PETSC_CC_INCLUDES for PETSc >= 3.4 1068 string(REGEX MATCH "PETSC_CC_INCLUDES = [^\n\r]*" PETSC_PACKAGES_INCLUDES 1069 ${PETSC_VARIABLES}) 1070 if(PETSC_PACKAGES_INCLUDES) 1071 string(REPLACE "PETSC_CC_INCLUDES = " "" PETSC_PACKAGES_INCLUDES 1072 ${PETSC_PACKAGES_INCLUDES}) 1073 else() 1074 # try to find PETSC_PACKAGES_INCLUDES in older versions 1075 list(APPEND EXTERNAL_INCLUDES ${ENV_PETSC_DIR}/include) 1076 list(APPEND EXTERNAL_INCLUDES ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/include) 1077 string(REGEX MATCH "PACKAGES_INCLUDES = [^\n\r]*" PETSC_PACKAGES_INCLUDES 1078 ${PETSC_VARIABLES}) 1079 string(REPLACE "PACKAGES_INCLUDES = " "" PETSC_PACKAGES_INCLUDES 1080 ${PETSC_PACKAGES_INCLUDES}) 1081 endif() 1082 if(PETSC_PACKAGES_INCLUDES) 1083 if(PETSC_PACKAGES_INCLUDES) 1084 string(REPLACE "-I" "" PETSC_PACKAGES_INCLUDES ${PETSC_PACKAGES_INCLUDES}) 1085 string(REPLACE " " ";" PETSC_PACKAGES_INCLUDES ${PETSC_PACKAGES_INCLUDES}) 1086 foreach(VAR ${PETSC_PACKAGES_INCLUDES}) 1087 # seem to include unexisting directories (/usr/include/lib64) 1088 # check to avoid warnings 1089 if(EXISTS ${VAR}) 1090 list(APPEND EXTERNAL_INCLUDES ${VAR}) 1091 endif() 1092 endforeach() 1093 endif() 1094 endif() 1095 # find libraries (<= 3.0) 1096 set(PETSC_LIBS_REQUIRED petscksp petscdm petscmat petscvec petsc) 1097 find_all_libraries(PETSC_LIBS PETSC_LIBS_REQUIRED 1098 ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib "") 1099 # petsc 3.1 creates only one library (libpetsc) 1100 if(NOT PETSC_LIBS) 1101 find_library(PETSC_LIBS petsc PATHS ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib 1102 NO_DEFAULT_PATH) 1103 endif() 1104 if(PETSC_LIBS) 1105 set_config_option(HAVE_PETSC "PETSc") 1106 if(NOT HAVE_BLAS) 1107 set_config_option(HAVE_BLAS "Blas[petsc]") 1108 endif() 1109 if(NOT HAVE_LAPACK) 1110 set_config_option(HAVE_LAPACK "Lapack[petsc]") 1111 endif() 1112 endif() 1113 # find slepc (needs to be linked in before petsc) 1114 if(ENABLE_SLEPC) 1115 if(SLEPC_DIR) 1116 set(ENV_SLEPC_DIR ${SLEPC_DIR}) 1117 else() 1118 set(ENV_SLEPC_DIR $ENV{SLEPC_DIR}) 1119 endif() 1120 find_library(SLEPC_LIB slepc PATHS ${ENV_SLEPC_DIR}/${ENV_PETSC_ARCH}/lib 1121 NO_DEFAULT_PATH) 1122 if(SLEPC_LIB) 1123 find_path(SLEPC_INC "slepc.h" PATHS ${ENV_SLEPC_DIR} PATH_SUFFIXES include 1124 ${ENV_PETSC_ARCH}/include include/slepc NO_DEFAULT_PATH) 1125 if(SLEPC_INC) 1126 message(STATUS "Using SLEPc dir: ${ENV_SLEPC_DIR}") 1127 set_config_option(HAVE_SLEPC "SLEPc") 1128 list(APPEND EXTERNAL_LIBRARIES ${SLEPC_LIB}) 1129 list(APPEND EXTERNAL_INCLUDES ${SLEPC_INC}) 1130 find_path(SLEPC_INC2 "slepcconf.h" PATHS ${ENV_SLEPC_DIR} 1131 PATH_SUFFIXES ${ENV_PETSC_ARCH}/include NO_DEFAULT_PATH) 1132 if(SLEPC_INC2) 1133 list(APPEND EXTERNAL_INCLUDES ${SLEPC_INC2}) 1134 endif() 1135 endif() 1136 endif() 1137 endif() 1138 list(APPEND EXTERNAL_LIBRARIES ${PETSC_LIBS}) 1139 # find additional libraries to link with 1140 string(REGEX MATCH "PACKAGES_LIBS = [^\n\r]*" PLIBS ${PETSC_VARIABLES}) 1141 if(PLIBS) 1142 string(REPLACE "PACKAGES_LIBS = " "" PLIBS ${PLIBS}) 1143 string(STRIP ${PLIBS} PLIBS) 1144 list(APPEND EXTERNAL_LIBRARIES "${PLIBS}") 1145 endif() 1146 string(REGEX MATCH "PETSC_EXTERNAL_LIB_BASIC = [^\n\r]*" PLIBS_BASIC ${PETSC_VARIABLES}) 1147 if(PLIBS_BASIC) 1148 string(REPLACE "PETSC_EXTERNAL_LIB_BASIC = " "" PLIBS_BASIC ${PLIBS_BASIC}) 1149 string(STRIP ${PLIBS_BASIC} PLIBS_BASIC) 1150 separate_arguments(PLIBS_BASIC) 1151 list(APPEND EXTERNAL_LIBRARIES "${PLIBS_BASIC}") 1152 endif() 1153 string(REGEX MATCH "PCC_LINKER_LIBS = [^\n\r]*" LLIBS ${PETSC_VARIABLES}) 1154 if(LLIBS) 1155 string(REPLACE "PCC_LINKER_LIBS = " "" LLIBS ${LLIBS}) 1156 string(STRIP ${LLIBS} LLIBS) 1157 list(APPEND EXTERNAL_LIBRARIES "${LLIBS}") 1158 endif() 1159 else() 1160 # new-style PETSc installations (in standard system directories) 1161 find_library(PETSC_LIBS petsc) 1162 find_path(PETSC_INC "petsc.h" PATH_SUFFIXES include/petsc) 1163 if(PETSC_LIBS AND PETSC_INC) 1164 set_config_option(HAVE_PETSC "PETSc") 1165 if(ENABLE_SLEPC) 1166 find_library(SLEPC_LIB slepc) 1167 find_path(SLEPC_INC "slepc.h" PATH_SUFFIXES include/slepc) 1168 if(SLEPC_LIB AND SLEPC_INC) 1169 set_config_option(HAVE_SLEPC "SLEPc") 1170 list(APPEND EXTERNAL_LIBRARIES ${SLEPC_LIB}) 1171 list(APPEND EXTERNAL_INCLUDES ${SLEPC_INC}) 1172 endif() 1173 endif() 1174 list(APPEND EXTERNAL_LIBRARIES ${PETSC_LIBS}) 1175 list(APPEND EXTERNAL_INCLUDES ${PETSC_INC}) 1176 endif() 1177 endif() 1178 endif() 1179 1180 if(ENABLE_MUMPS AND HAVE_BLAS AND HAVE_LAPACK) 1181 set(MUMPS_LIBS_REQUIRED smumps dmumps cmumps zmumps mumps_common pord) 1182 if(NOT ENABLE_MPI) 1183 list(APPEND MUMPS_LIBS_REQUIRED mpiseq) 1184 endif() 1185 find_all_libraries(MUMPS_LIBRARIES MUMPS_LIBS_REQUIRED "" "lib") 1186 find_path(SMUMPS_INC "smumps_c.h" PATH_SUFFIXES src include) 1187 find_path(DMUMPS_INC "dmumps_c.h" PATH_SUFFIXES src include) 1188 find_path(CMUMPS_INC "cmumps_c.h" PATH_SUFFIXES src include) 1189 find_path(ZMUMPS_INC "zmumps_c.h" PATH_SUFFIXES src include) 1190 if(MUMPS_LIBRARIES AND SMUMPS_INC AND DMUMPS_INC AND CMUMPS_INC AND ZMUMPS_INC) 1191 set_config_option(HAVE_MUMPS "MUMPS") 1192 list(APPEND EXTERNAL_LIBRARIES ${MUMPS_LIBRARIES}) 1193 list(APPEND EXTERNAL_INCLUDES ${SMUMPS_INC}) 1194 list(APPEND EXTERNAL_INCLUDES ${DMUMPS_INC}) 1195 list(APPEND EXTERNAL_INCLUDES ${CMUMPS_INC}) 1196 list(APPEND EXTERNAL_INCLUDES ${ZMUMPS_INC}) 1197 find_library(GFORTRAN_LIB gfortran) 1198 if(GFORTRAN_LIB) 1199 list(APPEND EXTERNAL_LIBRARIES ${GFORTRAN_LIB}) 1200 endif() 1201 if(ENABLE_GMM) # use GMM/MUMPS interface 1202 add_definitions(-DGMM_USES_MUMPS) 1203 endif() 1204 endif() 1205 endif() 1206 1207 if(ENABLE_GETDP) 1208 find_library(GETDP_LIB GetDP) 1209 find_path(GETDP_INC "GetDP.h" PATH_SUFFIXES getdp) 1210 if(GETDP_LIB AND GETDP_INC) 1211 set_config_option(HAVE_GETDP "GetDP") 1212 list(APPEND EXTERNAL_LIBRARIES ${GETDP_LIB}) 1213 list(APPEND EXTERNAL_INCLUDES ${GETDP_INC}) 1214 endif() 1215 endif() 1216 endif() 1217 1218 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/hxt AND ENABLE_HXT) 1219 add_subdirectory(contrib/hxt) 1220 include_directories(BEFORE ${HXT_INC_DIRS}) 1221 set_config_option(HAVE_HXT "Hxt") 1222 # do not use arithmetic contraction in predicates.c 1223 if(MSVC OR (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND WIN32)) 1224 set_source_files_properties( 1225 "${CMAKE_CURRENT_SOURCE_DIR}/contrib/hxt/predicates/src/predicates.c" 1226 PROPERTIES COMPILE_FLAGS "/fp:strict") 1227 elseif(CMAKE_C_COMPILER_ID STREQUAL "Intel") 1228 set_source_files_properties( 1229 "${CMAKE_CURRENT_SOURCE_DIR}/contrib/hxt/predicates/src/predicates.c" 1230 PROPERTIES COMPILE_FLAGS "-fp-model strict") 1231 elseif(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") 1232 set_source_files_properties( 1233 "${CMAKE_CURRENT_SOURCE_DIR}/contrib/hxt/predicates/src/predicates.c" 1234 PROPERTIES COMPILE_FLAGS "-fno-unsafe-math-optimizations -ffp-contract=off") 1235 else() 1236 message(WARNING 1237 "Unsupported compiler ! 1238 Make sure compiled functions from predicates.c 1239 do NOT use extended double precision and follow IEEE754 standard. 1240 It is crucial for the robustness of geometric predicates.") 1241 endif() 1242 endif() 1243 1244 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/pro AND ENABLE_PRO) 1245 add_subdirectory(pro) 1246 endif() 1247 1248 if(ENABLE_OCC) 1249 set(OCC_MINIMAL_VERSION "6.9.1") 1250 if(WIN32) 1251 if(HAVE_64BIT_SIZE_T) 1252 set(OCC_SYS_NAME win64) 1253 else() 1254 set(OCC_SYS_NAME win32) 1255 endif() 1256 else() 1257 set(OCC_SYS_NAME ${CMAKE_SYSTEM_NAME}) 1258 endif() 1259 find_path(OCC_INC "Standard_Version.hxx" HINTS ENV CASROOT PATH_SUFFIXES 1260 inc include include/oce opencascade include/opencascade 1261 occt include/occt) 1262 if(OCC_INC) 1263 file(STRINGS ${OCC_INC}/Standard_Version.hxx 1264 OCC_MAJOR REGEX "#define OCC_VERSION_MAJOR.*") 1265 file(STRINGS ${OCC_INC}/Standard_Version.hxx 1266 OCC_MINOR REGEX "#define OCC_VERSION_MINOR.*") 1267 file(STRINGS ${OCC_INC}/Standard_Version.hxx 1268 OCC_MAINT REGEX "#define OCC_VERSION_MAINTENANCE.*") 1269 if(OCC_MAJOR AND OCC_MINOR AND OCC_MAINT) 1270 string(REGEX MATCH "[0-9]+" OCC_MAJOR "${OCC_MAJOR}") 1271 string(REGEX MATCH "[0-9]+" OCC_MINOR "${OCC_MINOR}") 1272 string(REGEX MATCH "[0-9]+" OCC_MAINT "${OCC_MAINT}") 1273 set(OCC_VERSION "${OCC_MAJOR}.${OCC_MINOR}.${OCC_MAINT}") 1274 message(STATUS "Found OpenCASCADE version ${OCC_VERSION} in ${OCC_INC}") 1275 endif() 1276 endif() 1277 if(OCC_VERSION AND OCC_VERSION STRLESS ${OCC_MINIMAL_VERSION}) 1278 message(WARNING "Gmsh requires OpenCASCADE >= ${OCC_MINIMAL_VERSION}. " 1279 "Use CMAKE_PREFIX_PATH or the CASROOT environment variable " 1280 "to explicitely specify the installation path of OpenCASCADE") 1281 elseif(OCC_INC) 1282 set(OCC_LIBS_REQUIRED 1283 # subset of DataExchange 1284 TKSTEP TKSTEP209 TKSTEPAttr TKSTEPBase TKIGES TKXSBase 1285 # ModelingAlgorithms 1286 TKOffset TKFeat TKFillet TKBool TKMesh TKHLR TKBO TKPrim TKShHealing 1287 TKTopAlgo TKGeomAlgo 1288 # ModelingData 1289 TKBRep TKGeomBase TKG3d TKG2d 1290 # FoundationClasses 1291 TKMath TKernel) 1292 if(ENABLE_OCC_TBB) 1293 list(APPEND OCC_LIBS_REQUIRED tbb tbbmalloc) 1294 endif() 1295 list(LENGTH OCC_LIBS_REQUIRED NUM_OCC_LIBS_REQUIRED) 1296 if(OCC_LIBS) 1297 message(STATUS "OCC libraries specified explicitly: " ${OCC_LIBS}) 1298 list(LENGTH OCC_LIBS_REQUIRED NUM_OCC_LIBS) 1299 else() 1300 set(OCC_LIBS) 1301 foreach(OCC ${OCC_LIBS_REQUIRED}) 1302 find_library(OCC_LIB ${OCC} HINTS ENV CASROOT PATH_SUFFIXES 1303 lib ${OCC_SYS_NAME}/lib ${OCC_SYS_NAME}/vc8/lib 1304 ${OCC_SYS_NAME}/gcc/lib ${OCC_SYS_NAME}/gcc/bin) 1305 if(OCC_LIB) 1306 list(APPEND OCC_LIBS ${OCC_LIB}) 1307 else() 1308 message(STATUS "OCC lib " ${OCC} " not Found") 1309 endif() 1310 unset(OCC_LIB CACHE) 1311 endforeach() 1312 list(LENGTH OCC_LIBS NUM_OCC_LIBS) 1313 endif() 1314 endif() 1315 1316 # additional OCC libraries to handle reading of STEP/IGES attributes. Oh my... 1317 if(ENABLE_OCC_CAF) 1318 find_package(Freetype) 1319 if(FREETYPE_FOUND) 1320 set(OCC_CAF_LIBS_REQUIRED 1321 TKXDESTEP TKXDEIGES TKXCAF TKLCAF TKVCAF TKCAF TKV3d TKService TKCDF) 1322 list(LENGTH OCC_CAF_LIBS_REQUIRED NUM_OCC_CAF_LIBS_REQUIRED) 1323 set(OCC_CAF_LIBS) 1324 foreach(OCC ${OCC_CAF_LIBS_REQUIRED}) 1325 find_library(OCC_CAF_LIB ${OCC} HINTS ENV CASROOT PATH_SUFFIXES 1326 lib ${OCC_SYS_NAME}/lib ${OCC_SYS_NAME}/vc8/lib 1327 ${OCC_SYS_NAME}/gcc/lib ${OCC_SYS_NAME}/gcc/bin) 1328 if(OCC_CAF_LIB) 1329 list(APPEND OCC_CAF_LIBS ${OCC_CAF_LIB}) 1330 else() 1331 message(STATUS "OCC CAF lib " ${OCC} " not Found") 1332 endif() 1333 unset(OCC_CAF_LIB CACHE) 1334 endforeach() 1335 list(LENGTH OCC_CAF_LIBS NUM_OCC_CAF_LIBS) 1336 endif() 1337 endif() 1338 1339 if(NUM_OCC_LIBS EQUAL NUM_OCC_LIBS_REQUIRED) 1340 # append OCC CAF libraries first... 1341 if(NUM_OCC_CAF_LIBS EQUAL NUM_OCC_CAF_LIBS_REQUIRED) 1342 set_config_option(HAVE_OCC_CAF "OpenCASCADE-CAF") 1343 list(APPEND EXTERNAL_LIBRARIES ${OCC_CAF_LIBS} ${FREETYPE_LIBRARIES}) 1344 list(APPEND EXTERNAL_INCLUDES ${FREETYPE_INCLUDE_DIRS}) 1345 if(WIN32) 1346 list(APPEND EXTERNAL_LIBRARIES "windowscodecs") 1347 list(APPEND EXTERNAL_LIBRARIES "ole32") 1348 endif() 1349 endif() 1350 # then append OCC libraries 1351 set_config_option(HAVE_OCC "OpenCASCADE") 1352 list(APPEND EXTERNAL_LIBRARIES ${OCC_LIBS}) 1353 list(APPEND EXTERNAL_INCLUDES ${OCC_INC}) 1354 if(HAVE_64BIT_SIZE_T) 1355 add_definitions(-D_OCC64) 1356 endif() 1357 if(WIN32) 1358 list(APPEND EXTERNAL_LIBRARIES "winspool") 1359 add_definitions(-DOCC_CONVERT_SIGNALS) 1360 elseif(MSVC) 1361 add_definitions(-DWNT) 1362 endif() 1363 endif() 1364 endif() 1365 1366 if(ENABLE_ZIPPER) 1367 if(ENABLE_BUILD_IOS) 1368 set_config_option(HAVE_LIBZ "Zlib") 1369 endif() 1370 if(NOT HAVE_LIBZ) # necessary for non-GUI builds 1371 find_package(ZLIB) 1372 if(ZLIB_FOUND) 1373 set_config_option(HAVE_LIBZ "Zlib") 1374 list(APPEND EXTERNAL_LIBRARIES ${ZLIB_LIBRARIES}) 1375 list(APPEND EXTERNAL_INCLUDES ${ZLIB_INCLUDE_DIR}) 1376 endif() 1377 endif() 1378 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/zipper AND HAVE_LIBZ) 1379 add_subdirectory(contrib/zipper) 1380 include_directories(contrib/zipper) 1381 set_config_option(HAVE_ZIPPER "Zipper") 1382 endif() 1383 endif() 1384 1385 if(ENABLE_PRIVATE_API AND ENABLE_WRAP_PYTHON) 1386 find_package(SWIG REQUIRED) 1387 include(${SWIG_USE_FILE}) 1388 find_package(PythonLibs) 1389 if(SWIG_FOUND AND PYTHONLIBS_FOUND) 1390 message(STATUS "Found SWIG version " ${SWIG_VERSION}) 1391 find_package(PythonInterp) 1392 string(SUBSTRING ${SWIG_VERSION} 0 1 SWIG_MAJOR_VERSION) 1393 if(SWIG_MAJOR_VERSION EQUAL 1) 1394 message(WARNING "Python bindings require SWIG >= 2: disabling Python") 1395 else() 1396 set_config_option(HAVE_PYTHON "Python") 1397 mark_as_advanced(CLEAR PYTHON_LIBRARY PYTHON_INCLUDE_DIR) 1398 if(ENABLE_NUMPY) 1399 if (NOT NUMPY_INC) 1400 EXEC_PROGRAM (${PYTHON_EXECUTABLE} 1401 ARGS "-c \"import numpy; print(numpy.get_include())\"" 1402 OUTPUT_VARIABLE NUMPY_INC 1403 RETURN_VALUE NUMPY_NOT_FOUND) 1404 endif() 1405 if(NUMPY_INC) 1406 list(APPEND EXTERNAL_INCLUDES ${NUMPY_INC}) 1407 set_config_option(HAVE_NUMPY "Numpy") 1408 endif() 1409 endif() 1410 if(HAVE_PETSC) 1411 if(ENABLE_PETSC4PY) 1412 EXECUTE_PROCESS( 1413 COMMAND ${PYTHON_EXECUTABLE} -c "import petsc4py; print(petsc4py.get_include())" 1414 OUTPUT_VARIABLE PETSC4PY_INC 1415 RESULT_VARIABLE PETSC4PY_NOT_FOUND 1416 ERROR_QUIET 1417 OUTPUT_STRIP_TRAILING_WHITESPACE) 1418 if(PETSC4PY_INC) 1419 list(APPEND EXTERNAL_INCLUDES ${PETSC4PY_INC}) 1420 set_config_option(HAVE_PETSC4PY "PETSc4py") 1421 endif() 1422 endif() 1423 endif() 1424 endif() 1425 endif() 1426 endif() 1427 1428 check_function_exists(vsnprintf HAVE_VSNPRINTF) 1429 if(NOT HAVE_VSNPRINTF AND NOT ENABLE_BUILD_IOS AND NOT ENABLE_BUILD_ANDROID) 1430 set_config_option(HAVE_NO_VSNPRINTF "NoVsnprintf") 1431 endif() 1432 1433 check_include_file(sys/socket.h HAVE_SYS_SOCKET_H) 1434 if(HAVE_SYS_SOCKET_H) 1435 set(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h) 1436 endif() 1437 check_type_size(socklen_t SOCKLEN_T_SIZE) 1438 set(CMAKE_EXTRA_INCLUDE_FILES) 1439 if(NOT SOCKLEN_T_SIZE AND NOT ENABLE_BUILD_IOS AND NOT ENABLE_BUILD_ANDROID) 1440 set_config_option(HAVE_NO_SOCKLEN_T "NoSocklenT") 1441 endif() 1442 1443 check_include_file(stdint.h HAVE_STDINT_H) 1444 if(HAVE_STDINT_H) 1445 set(CMAKE_EXTRA_INCLUDE_FILES stdint.h) 1446 else() 1447 set_config_option(HAVE_NO_STDINT_H "NoStdintH") 1448 endif() 1449 check_type_size(intptr_t INTPTR_T_SIZE) 1450 set(CMAKE_EXTRA_INCLUDE_FILES) 1451 if(NOT INTPTR_T_SIZE AND NOT ENABLE_BUILD_IOS AND NOT ENABLE_BUILD_ANDROID) 1452 set_config_option(HAVE_NO_INTPTR_T "NoIntptrT") 1453 endif() 1454 1455 check_include_file(dlfcn.h DLFCN_H) 1456 if(DLFCN_H) 1457 set_config_option(HAVE_DLOPEN "Dlopen") 1458 list(APPEND EXTERNAL_LIBRARIES ${CMAKE_DL_LIBS}) 1459 endif() 1460 1461 if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") 1462 check_include_file(linux/joystick.h LINUX_JOYSTICK_H) 1463 if(LINUX_JOYSTICK_H) 1464 set_config_option(HAVE_LINUX_JOYSTICK "LinuxJoystick") 1465 endif() 1466 endif() 1467 1468 if(WIN32) 1469 add_definitions(-D_USE_MATH_DEFINES) 1470 list(APPEND EXTERNAL_LIBRARIES winmm wsock32 ws2_32 psapi) 1471 endif() 1472 1473 if(MSVC) 1474 add_definitions(-DNOMINMAX -D_CRT_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_DEPRECATE) 1475 endif() 1476 1477 # add C functions API 1478 set(GMSH_SRC ${GMSH_SRC};api/gmshc.cpp) 1479 1480 # force full warnings to encourage everybody to write clean(er) code 1481 check_cxx_compiler_flag("-Wall" WALL) 1482 if(WALL AND NOT MSVC) 1483 file(GLOB_RECURSE WALL_SRC Common/*.cpp Fltk/*.cpp FunctionSpace/*.cpp 1484 Geo/*.cpp Graphics/*.cpp Mesh/*.cpp Numeric/*.cpp Parser/*.cpp 1485 Plugin/*.cpp Post/*.cpp Solver/*.cpp) 1486 set(WF "-Wall") 1487 check_cxx_compiler_flag("-Wint-to-void-pointer-cast" WCAST) 1488 if(WCAST) 1489 set(WF "${WF} -Wno-int-to-void-pointer-cast") 1490 endif() 1491 check_cxx_compiler_flag("-Wdeprecated-declarations" WDEPREC) 1492 if(WDEPREC) 1493 # FIXME: remove this when we have fixed the deprecated GLU code for OpenGL3 1494 set(WF "${WF} -Wno-deprecated-declarations") 1495 endif() 1496 check_cxx_compiler_flag("-Wmisleading-indentation" WIND) 1497 if(WIND) 1498 set(WF "${WF} -Wno-misleading-indentation") 1499 endif() 1500 check_cxx_compiler_flag("-Wno-attributes" WATTR) 1501 if(WATTR) 1502 # FIXME: remove this when GCC behaves more intelligently 1503 set(WF "${WF} -Wno-attributes") 1504 endif() 1505 set_compile_flags(WALL_SRC ${WF}) 1506 endif() 1507 1508 # don't issue warnings for contributed libraries 1509 check_cxx_compiler_flag("-w" NOWARN) 1510 if(NOWARN) 1511 file(GLOB_RECURSE NOWARN_SRC contrib/*.cpp contrib/*.cc contrib/*.cxx contrib/*.c) 1512 set_compile_flags(NOWARN_SRC "-w") 1513 endif() 1514 1515 # disable compile optimization on some known problematic files 1516 check_cxx_compiler_flag("-O0" NOOPT) 1517 if(NOOPT OR ENABLE_BUILD_IOS) 1518 if(ENABLE_BUILD_IOS) # optimized iOS 10 64 bits screws somewhere in Geo 1519 file(GLOB_RECURSE NOOPT_SRC Numeric/robustPredicates.cpp Geo/G*.cpp Mesh/BDS.cpp 1520 Parser/Gmsh.tab.cpp contrib/blossom/* Mesh/Background*) 1521 else() 1522 file(GLOB_RECURSE NOOPT_SRC Numeric/robustPredicates.cpp Mesh/BDS.cpp 1523 Parser/Gmsh.tab.cpp contrib/blossom/* contrib/bamg/* Mesh/Background*) 1524 endif() 1525 set_compile_flags(NOOPT_SRC "-O0") 1526 endif() 1527 1528 # do not use arithmetic contraction in predicates.cpp 1529 # if("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC") 1530 # set_source_files_properties(Numeric/robustPredicates.cpp PROPERTIES 1531 # COMPILE_FLAGS "/fp:strict") 1532 # elseif(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") 1533 # set_source_files_properties(Numeric/robustPredicates.cpp PROPERTIES 1534 # COMPILE_FLAGS "-fno-unsafe-math-optimizations -ffp-contract=off") 1535 # elseif(CMAKE_C_COMPILER_ID STREQUAL "Intel") 1536 # set_source_files_properties(Numeric/robustPredicates.cpp PROPERTIES 1537 # COMPILE_FLAGS "-fp-model strict") 1538 # endif() 1539 1540 # enable Revoropt and set compile flags for the corresponding plugin 1541 if(ENABLE_REVOROPT) 1542 if(HAVE_EIGEN AND HAVE_MESH AND HAVE_PLUGINS AND HAVE_ANN AND HAVE_ALGLIB) 1543 list(APPEND EXTERNAL_INCLUDES contrib/Revoropt/include) 1544 set_config_option(HAVE_REVOROPT "Revoropt") 1545 add_definitions(-DUSE_ANN) 1546 else() 1547 message(WARNING "Revoropt requires Eigen, Mesh, Plugins, ANN and ALGLIB") 1548 endif() 1549 endif() 1550 1551 if(HAVE_MESH AND NOT HAVE_EIGEN AND NOT HAVE_LAPACK) 1552 message(WARNING "Most meshing algorithms will not be functional without " 1553 "Eigen or Lapack") 1554 endif() 1555 1556 list(SORT CONFIG_OPTIONS) 1557 set(GMSH_CONFIG_OPTIONS "") 1558 foreach(OPT ${CONFIG_OPTIONS}) 1559 set(GMSH_CONFIG_OPTIONS "${GMSH_CONFIG_OPTIONS} ${OPT}") 1560 endforeach() 1561 1562 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Common/GmshConfig.h.in 1563 ${CMAKE_CURRENT_BINARY_DIR}/Common/GmshConfig.h) 1564 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Common/GmshVersion.h.in 1565 ${CMAKE_CURRENT_BINARY_DIR}/Common/GmshVersion.h) 1566 1567 # the texi and pypi version files are modified in the source directory (not 1568 # ideal for version.texi, but since git tracks the contents of the file this is 1569 # acceptable as it will only change when the actual version is changed - not for 1570 # each git hash; setup.py is not under version control) 1571 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc/texinfo/version.texi.in 1572 ${CMAKE_CURRENT_SOURCE_DIR}/doc/texinfo/version.texi) 1573 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/utils/pypi/gmsh/setup.py.in 1574 ${CMAKE_CURRENT_SOURCE_DIR}/utils/pypi/gmsh/setup.py) 1575 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/utils/pypi/gmsh-dev/setup.py.in 1576 ${CMAKE_CURRENT_SOURCE_DIR}/utils/pypi/gmsh-dev/setup.py) 1577 1578 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/version.txt ${GMSH_SHORT_VERSION}) 1579 1580 # process cmake environment variables so we can append them to the -I include 1581 # commands. This is not recommended (we should only use the cache variables) but 1582 # it is very convenient: otherwise we have to remember providing the 1583 # -D... options to cmake for each new build. 1584 set(ENV_CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH}) 1585 set(ENV_CMAKE_INCLUDE_PATH $ENV{CMAKE_INCLUDE_PATH}) 1586 if(UNIX) 1587 if(ENV_CMAKE_PREFIX_PATH) 1588 string(REPLACE ":" ";" ENV_CMAKE_PREFIX_PATH ${ENV_CMAKE_PREFIX_PATH}) 1589 endif() 1590 if(ENV_CMAKE_INCLUDE_PATH) 1591 string(REPLACE ":" ";" ENV_CMAKE_INCLUDE_PATH ${ENV_CMAKE_INCLUDE_PATH}) 1592 endif() 1593 endif() 1594 list(APPEND EXTERNAL_INCLUDES ${CMAKE_INCLUDE_PATH} ${ENV_CMAKE_INCLUDE_PATH}) 1595 list(APPEND EXTERNAL_INCLUDES ${CMAKE_PREFIX_PATH} ${ENV_CMAKE_PREFIX_PATH}) 1596 foreach(DIR ${CMAKE_PREFIX_PATH} ${ENV_CMAKE_PREFIX_PATH}) 1597 list(APPEND EXTERNAL_INCLUDES ${DIR}/include) 1598 endforeach() 1599 1600 if(EXTERNAL_INCLUDES) 1601 list(REMOVE_DUPLICATES EXTERNAL_INCLUDES) 1602 endif() 1603 1604 if(HAVE_FLTK) 1605 set(LINK_LIBRARIES ${FLTK_LIBRARIES} ${EXTERNAL_LIBRARIES} 1606 ${OPENGL_LIBRARIES} ${LAPACK_LIBRARIES}) 1607 elseif(HAVE_OPENGL) 1608 set(LINK_LIBRARIES ${EXTERNAL_LIBRARIES} ${OPENGL_LIBRARIES} 1609 ${LAPACK_LIBRARIES}) 1610 else() 1611 set(LINK_LIBRARIES ${EXTERNAL_LIBRARIES} ${LAPACK_LIBRARIES}) 1612 endif() 1613 1614 # try to use static gfortran on static builds (cannot do this on dynamic builds 1615 # as e.g. Debian compiles libgfortran.a without -fPIC: sigh...) 1616 if(NOT ENABLE_BUILD_DYNAMIC AND NOT ENABLE_BUILD_SHARED) 1617 find_library(GFORTRAN_STATIC libgfortran.a) 1618 if(GFORTRAN_STATIC) 1619 set(CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES) 1620 message(STATUS "Using static libgfortran") 1621 foreach(STR ${LINK_LIBRARIES}) 1622 string(REPLACE "-lgfortran" ${GFORTRAN_STATIC} STR2 ${STR}) 1623 list(APPEND LINK_LIBRARIES2 ${STR2}) 1624 endforeach() 1625 set(LINK_LIBRARIES ${LINK_LIBRARIES2}) 1626 endif() 1627 endif() 1628 1629 # Linux-specific linker options 1630 if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") 1631 if(HAVE_OCC) 1632 find_library(RT_LIB rt) 1633 if(RT_LIB) 1634 list(APPEND LINK_LIBRARIES ${RT_LIB}) 1635 endif() 1636 endif() 1637 if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Intel") 1638 add_definitions(-fPIC) 1639 endif() 1640 endif() 1641 1642 # we could specify include dirs more selectively, but this is simpler 1643 include_directories(Common Fltk Geo Graphics Mesh Solver Numeric Parser 1644 Plugin Post api ${EXTERNAL_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}/Common) 1645 1646 # set this for external codes that might include this CMakeList file 1647 set(GMSH_EXTERNAL_INCLUDE_DIRS ${EXTERNAL_INCLUDES} CACHE 1648 STRING "External include directories" FORCE) 1649 set(GMSH_EXTERNAL_LIBRARIES ${LINK_LIBRARIES} CACHE 1650 STRING "External libraries" FORCE) 1651 1652 # group sources for easier navigation in IDEs 1653 foreach(DIR ${GMSH_DIRS}) 1654 string(REGEX REPLACE "\\+" "\\\\+" DIR ${DIR}) 1655 source_group(${DIR} REGULAR_EXPRESSION ${DIR}/.*) 1656 endforeach() 1657 1658 # static library target 1659 if(ENABLE_BUILD_LIB) 1660 add_library(lib STATIC ${GMSH_SRC}) 1661 set_target_properties(lib PROPERTIES OUTPUT_NAME gmsh) 1662 if(MSVC) 1663 set_target_properties(lib PROPERTIES DEBUG_POSTFIX d) 1664 if(ENABLE_MSVC_STATIC_RUNTIME) 1665 set_target_properties(lib PROPERTIES LINK_FLAGS_RELEASE "/nodefaultlib:LIBCMT") 1666 endif() 1667 endif() 1668 endif() 1669 1670 # shared library target 1671 if(ENABLE_BUILD_SHARED OR ENABLE_BUILD_DYNAMIC) 1672 add_library(shared SHARED ${GMSH_SRC}) 1673 set_target_properties(shared PROPERTIES OUTPUT_NAME gmsh 1674 VERSION ${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION}.${GMSH_PATCH_VERSION} 1675 SOVERSION ${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION}) 1676 if(WIN32) 1677 set_target_properties(shared PROPERTIES PREFIX "" IMPORT_PREFIX "" 1678 IMPORT_SUFFIX ".lib" COMPILE_FLAGS "-DGMSH_DLL -DGMSH_DLL_EXPORT") 1679 endif() 1680 target_link_libraries(shared ${LINK_LIBRARIES}) 1681 # don't define LC_RPATH in dylib for development, to not get endless warnings 1682 # about code signing 1683 if(APPLE AND NOT GMSH_RELEASE) 1684 set_target_properties(shared PROPERTIES INSTALL_RPATH "") 1685 endif() 1686 if(MSVC AND ENABLE_MSVC_STATIC_RUNTIME) 1687 message(STATUS "Note: By enabling ENABLE_MSVC_STATIC_RUNTIME, shared library " 1688 "won't link. In MSVC change /MT to /MD in the shared project properties") 1689 endif() 1690 endif() 1691 1692 # binary targets 1693 if(HAVE_FLTK) 1694 if(ENABLE_BUILD_DYNAMIC) 1695 add_executable(gmsh WIN32 Common/Main.cpp) 1696 target_link_libraries(gmsh shared) 1697 else() 1698 add_executable(gmsh WIN32 Common/Main.cpp ${GMSH_SRC}) 1699 endif() 1700 # we could add this to create a minimal app bundle even without install 1701 # if(APPLE AND NOT ENABLE_OS_SPECIFIC_INSTALL) 1702 # set_target_properties(gmsh PROPERTIES MACOSX_BUNDLE ON 1703 # MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/utils/misc/gmsh_dev.plist) 1704 # endif() 1705 else() 1706 if(ENABLE_BUILD_DYNAMIC) 1707 add_executable(gmsh Common/Main.cpp) 1708 target_link_libraries(gmsh shared) 1709 else() 1710 add_executable(gmsh Common/Main.cpp ${GMSH_SRC}) 1711 endif() 1712 endif() 1713 target_link_libraries(gmsh ${LINK_LIBRARIES}) 1714 1715 # Windows specific linker options 1716 if(WIN32 AND NOT MSVC) 1717 set(FLAGS "-Wl,--stack,16777216 -static -municode") 1718 if(HAVE_FLTK) 1719 set(FLAGS "${FLAGS} -mwindows") 1720 else() 1721 set(FLAGS "${FLAGS} -mconsole") 1722 endif() 1723 if(HAVE_64BIT_SIZE_T) 1724 set(FLAGS "${FLAGS} \"${CMAKE_CURRENT_SOURCE_DIR}/Fltk/Win64Icon.res\"") 1725 else() 1726 set(FLAGS "${FLAGS} \"${CMAKE_CURRENT_SOURCE_DIR}/Fltk/Win32Icon.res\"") 1727 endif() 1728 set_target_properties(gmsh PROPERTIES LINK_FLAGS "${FLAGS}") 1729 if(ENABLE_BUILD_DYNAMIC OR ENABLE_BUILD_SHARED) 1730 set_target_properties(shared PROPERTIES LINK_FLAGS -static) 1731 endif() 1732 # remove -Wl,-Bdynamic flags 1733 set(CMAKE_EXE_LINK_DYNAMIC_C_FLAGS) 1734 set(CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS) 1735 elseif(MSVC) 1736 set_target_properties(gmsh PROPERTIES LINK_FLAGS "/STACK:16777216 /SAFESEH:NO") 1737 endif() 1738 1739 # android target 1740 if(ENABLE_BUILD_ANDROID) 1741 find_file(CMAKE_TOOLCHAIN_FILE "android.toolchain.cmake") 1742 if(NOT CMAKE_TOOLCHAIN_FILE) 1743 message(FATAL_ERROR "Cannot compile Gmsh for android without android-cmake") 1744 endif() 1745 add_definitions(-D_GLIBCXX_USE_C99_MATH=1) 1746 set(CMAKE_BUILD_TYPE Release) 1747 set(LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_CURRENT_BINARY_DIR}) 1748 set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/libs/) 1749 add_definitions(-DBUILD_ANDROID) 1750 add_definitions(-DPICOJSON_USE_LOCALE=0) 1751 add_library(androidGmsh SHARED ${GMSH_SRC}) 1752 set_target_properties(androidGmsh PROPERTIES OUTPUT_NAME gmsh) 1753 target_link_libraries(androidGmsh ${EXTERNAL_LIBRARIES} ${LAPACK_LIBRARIES}) 1754 add_custom_command(TARGET androidGmsh POST_BUILD COMMAND 1755 ${CMAKE_STRIP} ${LIBRARY_OUTPUT_PATH}/libgmsh.so) 1756 endif() 1757 1758 # parser target 1759 find_program(BISON bison) 1760 find_program(FLEX flex) 1761 if(BISON AND FLEX) 1762 add_custom_target(parser 1763 COMMAND ${BISON} -p gmsh_yy --output Gmsh.tab.cpp -d Gmsh.y 1764 COMMAND ${FLEX} -P gmsh_yy -o Gmsh.yy.cpp Gmsh.l 1765 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Parser) 1766 endif() 1767 1768 if(UNIX) 1769 # cannot use cmake's file search functions here (they would only find files 1770 # existing at configuration time) 1771 add_custom_target(purge 1772 COMMAND rm -f `find . -name *~ -o -name *~~` 1773 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 1774 add_custom_target(etags 1775 COMMAND etags `find . -name *.cpp -o -name *.h -o -name *.y` 1776 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 1777 endif() 1778 1779 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR 1780 CMAKE_CXX_COMPILER_ID MATCHES "Clang") 1781 execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion 1782 OUTPUT_VARIABLE CXX_COMPILER_VERSION 1783 OUTPUT_STRIP_TRAILING_WHITESPACE) 1784 else() 1785 set(CXX_COMPILER_VERSION "Unknown") 1786 endif() 1787 1788 set(WELCOME_FILE ${CMAKE_CURRENT_SOURCE_DIR}/doc/WELCOME.txt) 1789 set(SDK_FILE ${CMAKE_CURRENT_SOURCE_DIR}/doc/SDK.txt) 1790 set(LICENSE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt) 1791 set(CREDITS_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CREDITS.txt) 1792 set(CHANGELOG_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG.txt) 1793 file(GLOB TUTORIAL_GEO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/?*.*) 1794 file(GLOB TUTORIAL_CPP_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/c++/?*.*) 1795 file(GLOB TUTORIAL_C_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/c/?*.*) 1796 file(GLOB TUTORIAL_PY_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/python/?*.*) 1797 file(GLOB TUTORIAL_JL_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/julia/?*.*) 1798 file(GLOB DEMOS ${CMAKE_CURRENT_SOURCE_DIR}/demos/*) 1799 foreach(SUBDIR ${DEMOS}) 1800 if(IS_DIRECTORY ${SUBDIR}) 1801 list(APPEND DEMOS_DIRS ${SUBDIR}) 1802 endif() 1803 endforeach() 1804 set(TEX_DIR ${CMAKE_CURRENT_SOURCE_DIR}/doc/texinfo) 1805 file(GLOB TEX_SRC ${TEX_DIR}/*.texi) 1806 set(TEX_OBJ ${TEX_DIR}/gmsh.aux ${TEX_DIR}/gmsh.cp ${TEX_DIR}/gmsh.cps 1807 ${TEX_DIR}/gmsh.fn ${TEX_DIR}/gmsh.html ${TEX_DIR}/gmsh.info ${TEX_DIR}/gmsh.ky 1808 ${TEX_DIR}/gmsh.log ${TEX_DIR}/gmsh.pdf ${TEX_DIR}/gmsh.pg ${TEX_DIR}/gmsh.toc 1809 ${TEX_DIR}/gmsh.tp ${TEX_DIR}/gmsh.tps ${TEX_DIR}/gmsh.txt ${TEX_DIR}/gmsh.vr) 1810 1811 macro(unix2dos VARNAME) 1812 file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unix2dos) 1813 set(UNIX2DOS_FILES) 1814 foreach(FILE ${${VARNAME}}) 1815 file(READ ${FILE} F0) 1816 get_filename_component(N ${FILE} NAME) 1817 if(CYGWIN) 1818 string(REGEX REPLACE "\n" "\r\n" F1 "${F0}") 1819 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/unix2dos/${N} "${F1}") 1820 else() # if not in Cygwin, cmake adds '\r's automatically 1821 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/unix2dos/${N} "${F0}") 1822 endif() 1823 list(APPEND UNIX2DOS_FILES ${CMAKE_CURRENT_BINARY_DIR}/unix2dos/${N}) 1824 endforeach() 1825 set(${VARNAME} ${UNIX2DOS_FILES}) 1826 endmacro() 1827 1828 if(WIN32) 1829 if(ENABLE_OS_SPECIFIC_INSTALL) 1830 set(GMSH_BIN .) 1831 set(GMSH_LIB .) 1832 set(GMSH_DOC .) 1833 set(GMSH_MAN .) 1834 set(GMSH_INC .) 1835 else() 1836 include(GNUInstallDirs) 1837 set(GMSH_BIN ${CMAKE_INSTALL_BINDIR}) 1838 set(GMSH_LIB ${CMAKE_INSTALL_LIBDIR}) 1839 set(GMSH_DOC ${CMAKE_INSTALL_DOCDIR}) 1840 set(GMSH_MAN ${CMAKE_INSTALL_MANDIR}/man1) 1841 set(GMSH_INC ${CMAKE_INSTALL_INCLUDEDIR}) 1842 endif() 1843 if(CYGWIN) 1844 unix2dos(GMSH_API) 1845 if(ENABLE_PRIVATE_API) 1846 unix2dos(GMSH_PRIVATE_API) 1847 endif() 1848 unix2dos(WELCOME_FILE) 1849 unix2dos(SDK_FILE) 1850 unix2dos(LICENSE_FILE) 1851 unix2dos(CREDITS_FILE) 1852 unix2dos(CHANGELOG_FILE) 1853 unix2dos(TUTORIAL_GEO_FILES) 1854 unix2dos(TUTORIAL_CPP_FILES) 1855 unix2dos(TUTORIAL_C_FILES) 1856 unix2dos(TUTORIAL_PY_FILES) 1857 unix2dos(TUTORIAL_JL_FILES) 1858 foreach(DIR ${DEMOS_DIRS}) 1859 file(GLOB DEMO_FILES ${DIR}/?*.*) 1860 unix2dos(DEMO_FILES) 1861 endforeach() 1862 endif() 1863 elseif(APPLE AND ENABLE_OS_SPECIFIC_INSTALL) 1864 # set these so that the files get installed nicely in the MacOSX 1865 # .app bundle 1866 set(GMSH_BIN ../MacOS) 1867 set(GMSH_LIB ../MacOS) 1868 set(GMSH_DOC ../../..) 1869 set(GMSH_MAN ../../..) 1870 set(GMSH_INC ../MacOS) 1871 else() 1872 include(GNUInstallDirs) 1873 set(GMSH_BIN ${CMAKE_INSTALL_BINDIR}) 1874 set(GMSH_LIB ${CMAKE_INSTALL_LIBDIR}) 1875 set(GMSH_DOC ${CMAKE_INSTALL_DOCDIR}) 1876 set(GMSH_MAN ${CMAKE_INSTALL_MANDIR}/man1) 1877 set(GMSH_INC ${CMAKE_INSTALL_INCLUDEDIR}) 1878 endif() 1879 1880 # mark targets as optional so we can install them separately if needed 1881 # (e.g. "make lib" or "make shared" followed by "make install/fast") 1882 install(TARGETS gmsh DESTINATION ${GMSH_BIN} OPTIONAL) 1883 if(ENABLE_BUILD_LIB) 1884 install(TARGETS lib DESTINATION ${GMSH_LIB} OPTIONAL) 1885 endif() 1886 if(ENABLE_BUILD_SHARED OR ENABLE_BUILD_DYNAMIC) 1887 install(TARGETS shared DESTINATION ${GMSH_LIB} OPTIONAL) 1888 endif() 1889 1890 if(ENABLE_ONELAB) 1891 install(FILES ${ONELAB_PY} DESTINATION ${GMSH_BIN}) 1892 endif() 1893 if(ENABLE_BUILD_LIB OR ENABLE_BUILD_SHARED OR ENABLE_BUILD_DYNAMIC) 1894 install(FILES ${GMSH_API} DESTINATION ${GMSH_INC}) 1895 install(FILES ${GMSH_PY} DESTINATION ${GMSH_LIB}) 1896 install(FILES ${GMSH_JL} DESTINATION ${GMSH_LIB}) 1897 if(ENABLE_PRIVATE_API) 1898 install(FILES ${GMSH_PRIVATE_API} DESTINATION ${GMSH_INC}/gmsh) 1899 endif() 1900 endif() 1901 if(INSTALL_SDK_README) 1902 configure_file(${SDK_FILE} ${CMAKE_CURRENT_BINARY_DIR}/README.txt) 1903 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/README.txt DESTINATION .) 1904 endif() 1905 install(FILES ${WELCOME_FILE} DESTINATION ${GMSH_DOC} RENAME README.txt) 1906 install(FILES ${LICENSE_FILE} DESTINATION ${GMSH_DOC}) 1907 install(FILES ${CREDITS_FILE} DESTINATION ${GMSH_DOC}) 1908 install(FILES ${CHANGELOG_FILE} DESTINATION ${GMSH_DOC}) 1909 install(FILES ${TUTORIAL_GEO_FILES} DESTINATION ${GMSH_DOC}/tutorial) 1910 install(FILES ${TUTORIAL_CPP_FILES} DESTINATION ${GMSH_DOC}/tutorial/c++) 1911 install(FILES ${TUTORIAL_C_FILES} DESTINATION ${GMSH_DOC}/tutorial/c) 1912 install(FILES ${TUTORIAL_PY_FILES} DESTINATION ${GMSH_DOC}/tutorial/python) 1913 install(FILES ${TUTORIAL_JL_FILES} DESTINATION ${GMSH_DOC}/tutorial/julia) 1914 foreach(DIR ${DEMOS_DIRS}) 1915 get_filename_component(DEMOS_DIR_NAME ${DIR} NAME) 1916 file(GLOB DEMO_FILES ${DIR}/?*.*) 1917 install(FILES ${DEMO_FILES} DESTINATION ${GMSH_DOC}/demos/${DEMOS_DIR_NAME}) 1918 endforeach() 1919 if(UNIX AND NOT CYGWIN) 1920 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/doc/gmsh.1 DESTINATION ${GMSH_MAN}) 1921 endif() 1922 1923 add_custom_target(get_headers 1924 COMMAND ${CMAKE_COMMAND} -E make_directory Headers/gmsh 1925 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) 1926 foreach(FILE ${GMSH_API}) 1927 add_custom_command(TARGET get_headers POST_BUILD COMMAND ${CMAKE_COMMAND} 1928 -E copy_if_different ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/Headers/ 1929 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 1930 endforeach() 1931 if(ENABLE_PRIVATE_API) 1932 foreach(FILE ${GMSH_PRIVATE_API}) 1933 add_custom_command(TARGET get_headers POST_BUILD COMMAND ${CMAKE_COMMAND} 1934 -E copy_if_different ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/Headers/gmsh/ 1935 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 1936 endforeach() 1937 endif() 1938 1939 find_program(MAKEINFO makeinfo) 1940 if(MAKEINFO) 1941 add_custom_command(OUTPUT ${TEX_DIR}/gmsh.info DEPENDS ${TEX_SRC} 1942 COMMAND ${MAKEINFO} --split-size 1000000 1943 ARGS ${TEX_DIR}/gmsh.texi WORKING_DIRECTORY ${TEX_DIR}) 1944 add_custom_target(info DEPENDS ${TEX_DIR}/gmsh.info) 1945 add_custom_command(OUTPUT ${TEX_DIR}/gmsh.txt DEPENDS ${TEX_SRC} 1946 COMMAND ${MAKEINFO} --plaintext -o gmsh.txt 1947 ARGS ${TEX_DIR}/gmsh.texi WORKING_DIRECTORY ${TEX_DIR}) 1948 add_custom_target(txt DEPENDS ${TEX_DIR}/gmsh.txt) 1949 add_custom_command(OUTPUT ${TEX_DIR}/gmsh.html DEPENDS ${TEX_SRC} 1950 COMMAND ${MAKEINFO} --html --css-ref=/gmsh.css 1951 --no-split --set-customization-variable 1952 EXTRA_HEAD='<meta name="viewport" content="width=device-width,initial-scale=1.0">' 1953 ARGS ${TEX_DIR}/gmsh.texi WORKING_DIRECTORY ${TEX_DIR}) 1954 add_custom_target(html DEPENDS ${TEX_DIR}/gmsh.html) 1955 install(FILES ${TEX_DIR}/gmsh.html DESTINATION ${GMSH_DOC} OPTIONAL) 1956 else() 1957 add_custom_target(html COMMAND ${CMAKE_COMMAND} -E touch ${TEX_DIR}/gmsh.html) 1958 endif() 1959 1960 find_program(TEXI2PDF texi2pdf) 1961 if(TEXI2PDF) 1962 add_custom_command(OUTPUT ${TEX_DIR}/gmsh.pdf DEPENDS ${TEX_SRC} 1963 COMMAND ${TEXI2PDF} ARGS gmsh.texi 1964 WORKING_DIRECTORY ${TEX_DIR}) 1965 add_custom_target(pdf DEPENDS ${TEX_DIR}/gmsh.pdf) 1966 install(FILES ${TEX_DIR}/gmsh.pdf DESTINATION ${GMSH_DOC} OPTIONAL) 1967 endif() 1968 1969 execute_process(COMMAND ${CMAKE_COMMAND} -E echo 1970 "@c This file was generated by cmake: do not edit manually!\n${OPT_TEXI}" 1971 OUTPUT_FILE cmake_options.texi) 1972 1973 if(MAKEINFO AND TEXI2PDF) 1974 add_custom_target(doc COMMAND ${CMAKE_COMMAND} -E tar zcf 1975 ${CMAKE_CURRENT_BINARY_DIR}/gmsh-${GMSH_VERSION}-doc.tgz 1976 CREDITS.txt LICENSE.txt CHANGELOG.txt 1977 doc/gmsh.1 doc/texinfo/gmsh.html doc/texinfo/gmsh.info 1978 doc/texinfo/gmsh.pdf doc/texinfo/gmsh.txt 1979 COMMAND ${CMAKE_COMMAND} -E remove ${TEX_OBJ} 1980 DEPENDS ${TEX_DIR}/gmsh.info ${TEX_DIR}/gmsh.txt 1981 ${TEX_DIR}/gmsh.html ${TEX_DIR}/gmsh.pdf 1982 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 1983 endif() 1984 1985 if(MAKEINFO OR TEXI2PDF) 1986 add_custom_target(clean_doc COMMAND ${CMAKE_COMMAND} -E remove ${TEX_OBJ}) 1987 endif() 1988 1989 if(APPLE AND ENABLE_BUILD_LIB) 1990 file(READ ${CMAKE_CURRENT_SOURCE_DIR}/utils/misc/gmsh_framework.plist F0) 1991 string(REPLACE GMSH_VERSION "${GMSH_VERSION}" F1 "${F0}") 1992 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/Info_framework.plist "${F1}") 1993 set(LIBNAME $<TARGET_FILE:lib>) 1994 add_custom_target(framework DEPENDS lib 1995 COMMAND ${CMAKE_COMMAND} -E remove_directory gmsh.framework 1996 COMMAND ${CMAKE_COMMAND} -E make_directory gmsh.framework/Headers 1997 COMMAND ${CMAKE_COMMAND} -E make_directory gmsh.framework/Resources 1998 COMMAND ${CMAKE_COMMAND} -E copy ${LIBNAME} gmsh.framework/gmsh 1999 COMMAND ${CMAKE_COMMAND} -E copy Info_framework.plist 2000 gmsh.framework/Resources/Info.plist 2001 COMMAND ${CMAKE_COMMAND} -E create_symlink . gmsh.framework/Headers/gmsh 2002 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) 2003 foreach(FILE ${GMSH_API}) 2004 add_custom_command(TARGET framework POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy 2005 ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/gmsh.framework/Headers/ 2006 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 2007 endforeach() 2008 if(ENABLE_PRIVATE_API) 2009 foreach(FILE ${GMSH_PRIVATE_API}) 2010 add_custom_command(TARGET framework POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy 2011 ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/gmsh.framework/Headers/ 2012 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 2013 endforeach() 2014 endif() 2015 endif() 2016 2017 set(CPACK_PACKAGE_VENDOR "Christophe Geuzaine and Jean-Francois Remacle") 2018 set(CPACK_PACKAGE_VERSION_MAJOR ${GMSH_MAJOR_VERSION}) 2019 set(CPACK_PACKAGE_VERSION_MINOR ${GMSH_MINOR_VERSION}) 2020 set(CPACK_PACKAGE_VERSION_PATCH ${GMSH_PATCH_VERSION}) 2021 set(CPACK_PACKAGE_DESCRIPTION_FILE ${WELCOME_FILE}) 2022 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY 2023 "3D finite element mesh generator with built-in CAD engine and post-processor") 2024 if(GMSH_EXTRA_VERSION MATCHES "-git.*") # so that we'll overwrite the archives 2025 set(CPACK_PACKAGE_FILE_NAME gmsh${GMSH_EXTRA_VERSION_ORIG}-git-${GMSH_OS}) 2026 set(CPACK_SOURCE_PACKAGE_FILE_NAME gmsh${GMSH_EXTRA_VERSION_ORIG}-git-source) 2027 else() 2028 set(CPACK_PACKAGE_FILE_NAME gmsh-${GMSH_VERSION}-${GMSH_OS}) 2029 set(CPACK_SOURCE_PACKAGE_FILE_NAME gmsh-${GMSH_VERSION}-source) 2030 endif() 2031 set(CPACK_PACKAGE_INSTALL_DIRECTORY "gmsh") 2032 set(CPACK_RESOURCE_FILE_LICENSE ${LICENSE_FILE}) 2033 set(CPACK_RESOURCE_FILE_README ${WELCOME_FILE}) 2034 set(CPACK_RESOURCE_FILE_WELCOME ${WELCOME_FILE}) 2035 set(CPACK_PACKAGE_EXECUTABLE "gmsh") 2036 if(ENABLE_PACKAGE_STRIP) 2037 set(CPACK_STRIP_FILES TRUE) 2038 else() 2039 set(CPACK_STRIP_FILES FALSE) 2040 endif() 2041 set(CPACK_SOURCE_GENERATOR TGZ) 2042 set(CPACK_SOURCE_IGNORE_FILES "${CMAKE_CURRENT_BINARY_DIR}" "/CVS/" "/.svn" "/.git" 2043 "~$" "DS_Store$" "GmshConfig.h$" "GmshVersion.h$" "/benchmarks/" "/tmp/" 2044 "/bin/" "/lib/" "/nightly/" "GPATH" "GRTAGS" "GSYMS" "GTAGS" "/HTML/" 2045 "/contrib/3M/" "/contrib/Parasolid/") 2046 2047 if(UNIX) 2048 # make sure we remove previous installs before doing the next one (on Mac for 2049 # example "make package; make package_source" would lead to huge file lists 2050 # getting generated due to the 'Applications' symlink in the bundle) 2051 set(CPACK_INSTALL_COMMANDS "rm -rf ${CMAKE_CURRENT_BINARY_DIR}/_CPack_Packages") 2052 endif() 2053 2054 if(APPLE AND ENABLE_OS_SPECIFIC_INSTALL) 2055 set(CPACK_GENERATOR Bundle) 2056 set(CPACK_BUNDLE_NAME Gmsh) 2057 file(READ ${CMAKE_CURRENT_SOURCE_DIR}/utils/misc/gmsh_app.plist F0) 2058 string(REPLACE GMSH_VERSION "${GMSH_VERSION}" F1 "${F0}") 2059 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/Info.plist "${F1}") 2060 set(CPACK_BUNDLE_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) 2061 set(CPACK_BUNDLE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIcons.icns) 2062 if(PACKAGER STREQUAL "geuzaine - removed: we sign on a separate machine") 2063 # codesigning requires CMake >= 3.2 2064 set(CPACK_BUNDLE_APPLE_CERT_APP "Developer ID Application: Christophe Geuzaine") 2065 endif() 2066 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsGeo.icns DESTINATION . 2067 RENAME GmshGeo.icns) 2068 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsMsh.icns DESTINATION . 2069 RENAME GmshMsh.icns) 2070 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsSol.icns DESTINATION . 2071 RENAME GmshSol.icns) 2072 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsPos.icns DESTINATION . 2073 RENAME GmshPos.icns) 2074 set(CPACK_PACKAGE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIcons.icns) 2075 elseif(WIN32) 2076 set(CPACK_GENERATOR ZIP) 2077 else() 2078 set(CPACK_GENERATOR TGZ) 2079 endif() 2080 2081 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/utils/wrappers/gmshpy AND 2082 ENABLE_PRIVATE_API AND ENABLE_WRAP_PYTHON AND HAVE_PYTHON) 2083 add_subdirectory(utils/wrappers/gmshpy) 2084 endif() 2085 2086 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/utils/wrappers/java AND 2087 ENABLE_PRIVATE_API AND ENABLE_WRAP_JAVA) 2088 add_subdirectory(utils/wrappers/java) 2089 endif() 2090 2091 include(CPack) 2092 2093 macro(filter_tests IN OUT) 2094 unset(${OUT}) 2095 foreach(FILE ${IN}) 2096 unset(BAD1) 2097 unset(BAD2) 2098 unset(BAD3) 2099 # OS-specific 2100 if(${GMSH_OS} MATCHES "Linux32") 2101 # OCC STL generation crashes on our Linux32 docker 2102 string(REGEX MATCH "t18" BAD1 ${FILE}) 2103 endif() 2104 # OpenCASCADE 2105 if(NOT HAVE_OCC AND NOT BAD1 AND NOT BAD2 AND NOT BAD3) 2106 file(STRINGS ${FILE} BAD1 REGEX "^SetFactory.*OpenCASCADE.*") 2107 file(STRINGS ${FILE} BAD2 REGEX ".*occ\\.synchronize.*") 2108 file(STRINGS ${FILE} BAD3 REGEX ".*occ::synchronize.*") 2109 endif() 2110 # Metis 2111 if(NOT HAVE_METIS AND NOT BAD1 AND NOT BAD2 AND NOT BAD3) 2112 file(STRINGS ${FILE} BAD1 REGEX ".*PartitionMesh.*") 2113 file(STRINGS ${FILE} BAD2 REGEX ".*mesh\\.partition.*") 2114 file(STRINGS ${FILE} BAD3 REGEX ".*mesh::partition.*") 2115 endif() 2116 if(BAD1 OR BAD2 OR BAD3) 2117 message("Skipping test " ${FILE}) 2118 else() 2119 list(APPEND ${OUT} ${FILE}) 2120 endif() 2121 endforeach() 2122 endmacro() 2123 2124 if(NOT DISABLE_GMSH_TESTS) 2125 # disabling tests is useful when including this CMakeLists in an external project 2126 include(CTest) 2127 file(GLOB_RECURSE ALLFILES 2128 tutorial/*.geo demos/*.geo benchmarks/?d/*.geo benchmarks/extrude/*.geo 2129 benchmarks/occ/*.geo) 2130 filter_tests("${ALLFILES}" TESTFILES) 2131 foreach(TESTFILE ${TESTFILES}) 2132 # use relative path for Cygwin/MinGW (the pure win exe built with the MinGW 2133 # compilers does not understand a full Cygwin-style path) 2134 FILE(RELATIVE_PATH TEST ${CMAKE_CURRENT_BINARY_DIR} ${TESTFILE}) 2135 add_test(${TEST} ./gmsh ${TEST} -3 -nopopup -o ./tmp.msh) 2136 endforeach() 2137 # test c++ api tutorials with dynamic builds (except on 32 bit windows for 2138 # now: our win32 setup does not currently handle exceptions) 2139 if(ENABLE_BUILD_DYNAMIC AND NOT ${GMSH_OS} MATCHES "Windows32") 2140 file(GLOB_RECURSE ALLFILES tutorial/c++/*.cpp) 2141 filter_tests("${ALLFILES}" TESTFILES) 2142 foreach(TESTFILE ${TESTFILES}) 2143 get_filename_component(TEST ${TESTFILE} NAME_WE) 2144 add_executable(${TEST} WIN32 ${TESTFILE}) 2145 target_link_libraries(${TEST} shared) 2146 if(WIN32 AND NOT MSVC) 2147 set(FLAGS "-static") 2148 if(HAVE_FLTK) 2149 set(FLAGS "${FLAGS} -mwindows") 2150 else() 2151 set(FLAGS "${FLAGS} -mconsole") 2152 endif() 2153 set_target_properties(${TEST} PROPERTIES LINK_FLAGS "${FLAGS}") 2154 endif() 2155 add_test(${TEST}_cpp ${TEST} -nopopup) 2156 endforeach() 2157 endif() 2158 # enable this once we have worked out the path issues on the build machines 2159 if(0 AND ENABLE_BUILD_DYNAMIC) 2160 find_package(PythonInterp) 2161 if(PYTHONINTERP_FOUND) 2162 file(GLOB_RECURSE ALLFILES tutorial/python/*.py demos/api/*.py) 2163 filter_tests("${ALLFILES}" TESTFILES) 2164 foreach(TESTFILE ${TESTFILES}) 2165 get_filename_component(TEST ${TESTFILE} NAME_WE) 2166 add_test(NAME ${TEST}_py COMMAND ${PYTHON_EXECUTABLE} ${TESTFILE} -nopopup) 2167 set_property(TEST ${TEST}_py APPEND PROPERTY ENVIRONMENT 2168 "PYTHONPATH=${CMAKE_SOURCE_DIR}/api") 2169 set_property(TEST ${TEST}_py APPEND PROPERTY ENVIRONMENT 2170 "LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}") 2171 endforeach() 2172 endif() 2173 endif() 2174 endif() 2175 2176 message(STATUS "") 2177 message(STATUS "Gmsh ${GMSH_VERSION} has been configured for ${GMSH_OS}") 2178 message(STATUS "") 2179 message(STATUS " * Build options:" ${GMSH_CONFIG_OPTIONS}) 2180 message(STATUS " * Build type: " ${CMAKE_BUILD_TYPE}) 2181 message(STATUS " * C compiler: " ${CMAKE_C_COMPILER}) 2182 message(STATUS " * C++ compiler: " ${CMAKE_CXX_COMPILER}) 2183 message(STATUS " * Install prefix: " ${CMAKE_INSTALL_PREFIX}) 2184 message(STATUS "") 2185 2186 mark_as_advanced(ANN_INC ANN_LIB CAIRO_LIB CAIRO_INC CGNS_INC GMM_INC 2187 GMP_INC GMP_LIB MMG_INC MMG_LIB HDF5_LIB 2188 MED_LIB OCC_INC SZ_LIB 2189 PETSC_LIBS SLEPC_INC SLEPC_INC2 SLEPC_LIB 2190 BISON FLEX MAKEINFO TEXI2PDF FLTK_CONFIG_SCRIPT 2191 GMSH_EXTERNAL_INCLUDE_DIRS GMSH_EXTERNAL_LIBRARIES) -
../trunk-jpl/externalpackages/gmsh/configs/4.5.6/static/CMakeLists.txt
1 # Gmsh - Copyright (C) 1997-2020 C. Geuzaine, J.-F. Remacle 2 # 3 # See the LICENSE.txt file for license information. Please report all 4 # issues on https://gitlab.onelab.info/gmsh/gmsh/issues. 5 6 cmake_minimum_required(VERSION 2.8 FATAL_ERROR) 7 8 # do not warn about non-definition of WIN32 on Cygwin 9 set(CMAKE_LEGACY_CYGWIN_WIN32 0) 10 11 # if CMAKE_BUILD_TYPE is specified use it; otherwise set the default 12 # build type to "RelWithDebInfo" ("-O2 -g" with gcc) prior to calling 13 # project() 14 if(DEFINED CMAKE_BUILD_TYPE) 15 set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Choose build type") 16 else() 17 set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose build type") 18 endif() 19 20 project(gmsh CXX C) 21 22 # this variable controls the default value of the options which are normally set 23 # to ON (useful if you want to configure a minimal version of Gmsh: e.g. "cmake 24 # -DDEFAULT=0 -DENABLE_POST=1 -DENABLE_PARSER=1") 25 set(DEFAULT ON CACHE INTERNAL "Default value for enabled-by-default options") 26 27 macro(opt OPTION HELP VALUE) 28 option(ENABLE_${OPTION} ${HELP} ${VALUE}) 29 set(OPT_TEXI "${OPT_TEXI}\n@item ENABLE_${OPTION}\n${HELP} (default: ${VALUE})") 30 endmacro() 31 32 opt(3M "Enable proprietary 3M extension" OFF) 33 opt(ACIS "Enable ACIS geometrical models (experimental)" ${DEFAULT}) 34 opt(ALGLIB "Enable ALGLIB (used by some mesh optimizers)" ${DEFAULT}) 35 opt(ANN "Enable ANN (used for fast point search in mesh/post)" ${DEFAULT}) 36 opt(BAMG "Enable Bamg 2D anisotropic mesh generator" ${DEFAULT}) 37 opt(BLAS_LAPACK "Enable BLAS/Lapack for linear algebra (required for meshing)" ON) 38 opt(BLOSSOM "Enable Blossom algorithm (needed for full quad meshing)" ${DEFAULT}) 39 opt(BUILD_LIB "Enable 'lib' target for building static Gmsh library" OFF) 40 opt(BUILD_SHARED "Enable 'shared' target for building shared Gmsh library" OFF) 41 opt(BUILD_DYNAMIC "Enable dynamic Gmsh executable (linked with shared library)" OFF) 42 opt(BUILD_ANDROID "Enable Android NDK library target (experimental)" OFF) 43 opt(BUILD_IOS "Enable iOS library target (experimental)" OFF) 44 opt(CGNS "Enable CGNS import/export (experimental)" ${DEFAULT}) 45 opt(CGNS_CPEX0045 "Enable high-order CGNS import/export following CPEX0045 (experimental)" OFF) 46 opt(CAIRO "Enable Cairo to render fonts (experimental)" ${DEFAULT}) 47 opt(CXX11 "Enable C++11" ON) 48 opt(C99 "Enable C99" ON) 49 opt(PROFILE "Enable profiling compiler flags" OFF) 50 opt(DINTEGRATION "Enable discrete integration (needed for levelsets)" ${DEFAULT}) 51 opt(DOMHEX "Enable experimental DOMHEX code" ${DEFAULT}) 52 opt(FLTK "Enable FLTK graphical user interface (requires mesh/post)" ${DEFAULT}) 53 opt(GETDP "Enable GetDP solver (linked as a library, experimental)" ${DEFAULT}) 54 opt(GMM "Enable GMM linear solvers (simple alternative to PETSc)" ${DEFAULT}) 55 opt(GMP "Enable GMP for Kbipack (advanced)" ON) 56 opt(GRAPHICS "Enable building graphics lib even without GUI (advanced)" OFF) 57 opt(HXT "Enable HXT library (for reparametrization and meshing)" ${DEFAULT}) 58 opt(KBIPACK "Enable Kbipack (neeeded by homology solver)" ${DEFAULT}) 59 opt(MATHEX "Enable Mathex expression parser (used by plugins and options)" ${DEFAULT}) 60 opt(MED "Enable MED mesh and post file formats" ${DEFAULT}) 61 opt(MESH "Enable mesh module (required by GUI)" ${DEFAULT}) 62 opt(METIS "Enable Metis mesh partitioner" ${DEFAULT}) 63 opt(MMG3D "Enable MMG3D 3D anisotropic mesh refinement" ${DEFAULT}) 64 opt(MPEG_ENCODE "Enable built-in MPEG movie encoder" ${DEFAULT}) 65 opt(MPI "Enable MPI (experimental, not used for meshing)" OFF) 66 opt(MSVC_STATIC_RUNTIME "Enable static Visual C++ runtime" OFF) 67 opt(MUMPS "Enable MUMPS sparse direct linear solver" OFF) 68 opt(NETGEN "Enable Netgen 3D frontal mesh generator" ${DEFAULT}) 69 opt(NUMPY "Enable fullMatrix and numpy array conversion for private API" OFF) 70 opt(PETSC4PY "Enable petsc4py wrappers for petsc matrices for private API" OFF) 71 opt(OCC "Enable OpenCASCADE CAD kernel" ${DEFAULT}) 72 opt(OCC_CAF "Enable OpenCASCADE CAF module (for STEP/IGES attributes)" ${DEFAULT}) 73 opt(OCC_STATIC "Link OpenCASCADE static instead of dynamic libraries (requires ENABLE_OCC)" OFF) 74 opt(OCC_TBB "Add TBB libraries in list of OCC libraries" OFF) 75 opt(ONELAB "Enable ONELAB solver interface" ${DEFAULT}) 76 opt(ONELAB_METAMODEL "Enable ONELAB metamodels (experimental)" ${DEFAULT}) 77 opt(OPENACC "Enable OpenACC" OFF) 78 opt(OPENMP "Enable OpenMP" OFF) 79 opt(OPTHOM "Enable high-order mesh optimization tools" ${DEFAULT}) 80 opt(OS_SPECIFIC_INSTALL "Enable OS-specific (e.g. app bundle) installation" OFF) 81 opt(OSMESA "Enable OSMesa for offscreen rendering (experimental)" OFF) 82 opt(P4EST "Enable p4est for enabling automatic mesh size firld (experimental)" OFF) 83 opt(PACKAGE_STRIP "Strip symbols in install packages to reduce install size" ON) 84 opt(PARSER "Enable GEO file parser (required for .geo/.pos files)" ${DEFAULT}) 85 opt(PETSC "Enable PETSc linear solvers (required for SLEPc)" OFF) 86 opt(PLUGINS "Enable post-processing plugins" ${DEFAULT}) 87 opt(POST "Enable post-processing module (required by GUI)" ${DEFAULT}) 88 opt(POPPLER "Enable Poppler for displaying PDF documents (experimental)" OFF) 89 opt(PRIVATE_API "Enable private API" OFF) 90 opt(QUADTRI "Enable QuadTri structured meshing extensions" ${DEFAULT}) 91 opt(REVOROPT "Enable Revoropt (used for CVT remeshing)" OFF) 92 opt(SLEPC "Enable SLEPc eigensolvers" OFF) 93 opt(SOLVER "Enable built-in finite element solvers (required for compounds)" ${DEFAULT}) 94 opt(SYSTEM_CONTRIB "Use system versions of contrib libraries, when possible" OFF) 95 opt(TCMALLOC "Enable libtcmalloc (fast malloc that does not release memory)" OFF) 96 opt(TOUCHBAR "Enable Apple Touch bar" ${DEFAULT}) 97 opt(VISUDEV "Enable additional visualization capabilities for development purposes" OFF) 98 opt(VOROPP "Enable voro++ (for hex meshing, experimental)" ${DEFAULT}) 99 opt(WRAP_JAVA "Enable generation of Java wrappers for private API" OFF) 100 opt(WRAP_PYTHON "Enable generation of Python wrappers for private API" OFF) 101 opt(ZIPPER "Enable Zip file compression/decompression" OFF) 102 103 set(GMSH_MAJOR_VERSION 4) 104 set(GMSH_MINOR_VERSION 5) 105 set(GMSH_PATCH_VERSION 6) 106 set(GMSH_EXTRA_VERSION "") 107 set(GMSH_EXTRA_VERSION_TEXI "${GMSH_EXTRA_VERSION}") 108 109 if(NOT GMSH_RELEASE) 110 find_package(Git) 111 if(GIT_FOUND) 112 execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --format=%h 113 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ERROR_QUIET 114 OUTPUT_VARIABLE GIT_COMMIT_HASH 115 OUTPUT_STRIP_TRAILING_WHITESPACE) 116 endif() 117 if(GIT_COMMIT_HASH) 118 set(GMSH_EXTRA_VERSION "${GMSH_EXTRA_VERSION}-git-${GIT_COMMIT_HASH}") 119 endif() 120 set(GMSH_EXTRA_VERSION_TEXI "${GMSH_EXTRA_VERSION_TEXI} (development version)") 121 endif() 122 123 set(GMSH_VERSION "${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION}") 124 set(GMSH_VERSION "${GMSH_VERSION}.${GMSH_PATCH_VERSION}${GMSH_EXTRA_VERSION}") 125 set(GMSH_SHORT_LICENSE "GNU General Public License") 126 127 set(GMSH_API api/gmsh.h api/gmshc.h api/gmsh.h_cwrap) 128 129 if(ENABLE_PRIVATE_API) 130 message(WARNING "The private API is unsupported and undocumented. It is meant " 131 "for expert Gmsh developers, not for regular Gmsh users, who should rely " 132 "on the stable public API (gmsh/api) instead. If you are repackaging Gmsh, " 133 "e.g. for a Linux distribution, please DO NOT distribute the private API " 134 "(i.e. all the internal headers) and ship the stable public API instead " 135 "(i.e. only the headers and modules in gmsh/api).") 136 file(GLOB_RECURSE HEADERS Common/*.h Numeric/*.h Geo/*.h Mesh/*.h Solver/*.h 137 Post/*.h Graphics/*.h contrib/kbipack/*.h contrib/DiscreteIntegration/*.h 138 contrib/HighOrderMeshOptimizer/*.h contrib/MeshOptimizer/*.h 139 contrib/MeshQualityOptimizer/*.h) 140 set(GMSH_PRIVATE_API ${CMAKE_CURRENT_BINARY_DIR}/Common/GmshConfig.h 141 ${CMAKE_CURRENT_BINARY_DIR}/Common/GmshVersion.h ${HEADERS}) 142 get_property(IAMCHILD DIRECTORY PROPERTY PARENT_DIRECTORY) 143 if(IAMCHILD) 144 set(GMSH_PRIVATE_API ${GMSH_PRIVATE_API} PARENT_SCOPE) 145 endif() 146 endif() 147 148 set(ONELAB_PY contrib/onelab/python/onelab.py) 149 set(GMSH_PY api/gmsh.py) 150 set(GMSH_JL api/gmsh.jl) 151 152 if(${CMAKE_MAJOR_VERSION} GREATER 2) 153 string(TIMESTAMP DATE "%Y%m%d") 154 else() 155 execute_process(COMMAND date "+%Y%m%d" OUTPUT_VARIABLE DATE 156 OUTPUT_STRIP_TRAILING_WHITESPACE) 157 endif() 158 159 if(NOT DATE) 160 set(DATE "unknown") 161 endif() 162 set(GMSH_DATE "${DATE}") 163 164 if(NOT GMSH_HOST) 165 execute_process(COMMAND hostname OUTPUT_VARIABLE HOSTNAME 166 OUTPUT_STRIP_TRAILING_WHITESPACE) 167 if(NOT HOSTNAME) 168 set(HOSTNAME "unknown") 169 endif() 170 set(GMSH_HOST "${HOSTNAME}") 171 endif() 172 173 if(NOT GMSH_PACKAGER) 174 execute_process(COMMAND whoami OUTPUT_VARIABLE PACKAGER 175 OUTPUT_STRIP_TRAILING_WHITESPACE) 176 if(NOT PACKAGER) 177 set(PACKAGER "unknown") 178 endif() 179 string(REPLACE "\\" " " PACKAGER ${PACKAGER}) 180 set(GMSH_PACKAGER "${PACKAGER}") 181 endif() 182 183 if(APPLE) 184 set(GMSH_OS "MacOSX") 185 elseif(CYGWIN OR MSYS) 186 # detect if we use the MinGW compilers on Cygwin - if we do, handle the build 187 # as a pure Windows build 188 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR 189 CMAKE_CXX_COMPILER_ID MATCHES "Clang") 190 execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine 191 OUTPUT_VARIABLE CXX_COMPILER_MACHINE 192 OUTPUT_STRIP_TRAILING_WHITESPACE) 193 if(CXX_COMPILER_MACHINE MATCHES "mingw") 194 set(GMSH_OS "Windows") 195 set(WIN32 1) 196 add_definitions(-DWIN32) 197 endif() 198 endif() 199 else() 200 set(GMSH_OS "${CMAKE_SYSTEM_NAME}") 201 endif() 202 203 include(CheckTypeSize) 204 include(CheckFunctionExists) 205 include(CheckIncludeFile) 206 include(CheckCXXCompilerFlag) 207 include(CheckCCompilerFlag) 208 209 macro(set_config_option VARNAME STRING) 210 set(${VARNAME} TRUE) 211 list(APPEND CONFIG_OPTIONS ${STRING}) 212 message(STATUS "Found " ${STRING}) 213 endmacro() 214 215 # check if the machine is 64 bits (this is more reliable than using 216 # CMAKE_SIZEOF_VOID_P, which does not seem to work e.g. on some Suse 217 # machines) 218 check_type_size("void*" SIZEOF_VOID_P) 219 if(SIZEOF_VOID_P EQUAL 8) 220 set_config_option(HAVE_64BIT_SIZE_T "64Bit") 221 endif() 222 223 # append 32/64 to the build name on Linux and Windows 224 if(NOT APPLE) 225 if(HAVE_64BIT_SIZE_T) 226 set(GMSH_OS "${GMSH_OS}64") 227 else() 228 set(GMSH_OS "${GMSH_OS}32") 229 endif() 230 endif() 231 232 if(NOT ENABLE_BUILD_SHARED) 233 if(ENABLE_WRAP_PYTHON OR ENABLE_WRAP_JAVA) 234 set(ENABLE_BUILD_DYNAMIC ON) 235 endif() 236 endif() 237 238 if(ENABLE_BUILD_DYNAMIC) 239 set(GMSH_OS "${GMSH_OS}-sdk") 240 endif() 241 242 if(APPLE) 243 # FIXME: change this once we understand rpaths - the options below do not work 244 set(CMAKE_MACOSX_RPATH 0) 245 else() 246 # make sure that dynamic libraries can be found when installing/ displacing the 247 # binaries: from https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/ 248 # RPATH-handling: 249 250 # use, i.e. don't skip the full RPATH for the build tree 251 set(CMAKE_SKIP_BUILD_RPATH FALSE) 252 253 # when building, don't use the install RPATH already (but later on when 254 # installing) 255 set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) 256 set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") 257 258 # add the automatically determined parts of the RPATH which point to 259 # directories outside the build tree to the install RPATH 260 set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) 261 262 # the RPATH to be used when installing, but only if it's not a system directory 263 list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" 264 isSystemDir) 265 if("${isSystemDir}" STREQUAL "-1") 266 set(CMAKE_INSTALL_RPATH "\\\$ORIGIN/../lib") 267 endif() 268 endif() 269 270 if(MSVC) 271 # remove annoying warning about bool/int cast performance 272 set(GMSH_CONFIG_PRAGMAS "#pragma warning(disable:4800 4244 4267)") 273 foreach(VAR 274 CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE 275 CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO 276 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE 277 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO) 278 if(ENABLE_MSVC_STATIC_RUNTIME AND ${VAR} MATCHES "/MD") 279 string(REGEX REPLACE "/MD" "/MT" ${VAR} "${${VAR}}") 280 endif() 281 if(NOT ${VAR} MATCHES "/MP") # enable parallel compilation 282 set(${VAR} "${${VAR}} /MP") 283 endif() 284 endforeach() 285 if(ENABLE_PRIVATE_API) 286 if(ENABLE_BUILD_DYNAMIC OR ENABLE_BUILD_SHARED) 287 # automatically export .def file with all symbols (requires CMake 3.4); 288 # depending on the compiling options this might lead to more than 64k export 289 # symbols; just trim the .def file to keep the ones you need 290 set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) 291 endif() 292 endif() 293 endif() 294 295 if(ENABLE_OPENMP) 296 find_package(OpenMP) 297 if(OpenMP_FOUND) 298 set_config_option(HAVE_OPENMP "OpenMP") 299 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") 300 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") 301 elseif(APPLE AND EXISTS "/opt/local/lib/libomp") 302 # just for testing the official Apple compiler with macports' libomp 303 set_config_option(HAVE_OPENMP "OpenMP[MacPorts]") 304 set(CMAKE_C_FLAGS 305 "${CMAKE_C_FLAGS} -Xpreprocessor -fopenmp -I/opt/local/include/libomp") 306 set(CMAKE_CXX_FLAGS 307 "${CMAKE_CXX_FLAGS} -Xpreprocessor -fopenmp -I/opt/local/include/libomp") 308 list(APPEND EXTERNAL_LIBRARIES "-L/opt/local/lib/libomp -lomp") 309 elseif(APPLE AND EXISTS "/usr/local/lib/libomp.dylib") 310 set_config_option(HAVE_OPENMP "OpenMP[usr/local]") 311 set(CMAKE_C_FLAGS 312 "${CMAKE_C_FLAGS} -Xpreprocessor -fopenmp") 313 set(CMAKE_CXX_FLAGS 314 "${CMAKE_CXX_FLAGS} -Xpreprocessor -fopenmp") 315 list(APPEND EXTERNAL_LIBRARIES "-lomp") 316 endif() 317 endif() 318 319 if(ENABLE_OPENACC) 320 find_package(OpenACC) 321 if(OpenACC_C_FOUND AND OpenACC_CXX_FOUND) 322 set_config_option(HAVE_OPENACC "OpenACC") 323 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenACC_C_FLAGS}") 324 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenACC_CXX_FLAGS}") 325 endif() 326 endif() 327 328 if(ENABLE_CXX11) 329 # in recent cmake versions we could do e.g. set(CMAKE_CXX_STANDARD 11) 330 check_cxx_compiler_flag("-std=c++11" STDCXX11) 331 if(STDCXX11) 332 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 333 endif() 334 endif() 335 336 if(ENABLE_C99) 337 # in recent cmake versions we could do e.g. set(CMAKE_C_STANDARD 99) 338 check_c_compiler_flag("-std=c99" STDC99) 339 if(STDC99) 340 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") 341 endif() 342 endif() 343 344 if(ENABLE_PROFILE) 345 # Using the perf set of profiling tools doesn't work without the frame 346 # pointer and a common optimisation is to remove it 347 check_cxx_compiler_flag("-fno-omit-frame-pointer" FNOFP) 348 if(FNOFP) 349 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer") 350 endif() 351 endif() 352 353 macro(append_gmsh_src DIRNAME FILES) 354 foreach(FILE ${FILES}) 355 list(APPEND LIST ${DIRNAME}/${FILE}) 356 endforeach() 357 set(GMSH_SRC ${GMSH_SRC};${LIST} PARENT_SCOPE) 358 set(GMSH_DIRS ${GMSH_DIRS};${DIRNAME} PARENT_SCOPE) 359 endmacro() 360 361 macro(find_all_libraries VARNAME LISTNAME PATH SUFFIX) 362 set(${VARNAME}) 363 list(LENGTH ${LISTNAME} NUM_LIST) 364 foreach(LIB ${${LISTNAME}}) 365 if("${PATH}" STREQUAL "") 366 find_library(FOUND_LIB ${LIB} PATH_SUFFIXES ${SUFFIX}) 367 else() 368 find_library(FOUND_LIB ${LIB} PATHS ${PATH} NO_DEFAULT_PATH) 369 endif() 370 if(FOUND_LIB) 371 list(APPEND ${VARNAME} ${FOUND_LIB}) 372 endif() 373 unset(FOUND_LIB CACHE) 374 endforeach() 375 list(LENGTH ${VARNAME} NUM_FOUND_LIBRARIES) 376 if(NUM_FOUND_LIBRARIES LESS NUM_LIST) 377 set(${VARNAME}) 378 endif() 379 endmacro() 380 381 macro(set_compile_flags LISTNAME FLAGS) 382 foreach(FILE ${${LISTNAME}}) 383 get_source_file_property(PROP ${FILE} COMPILE_FLAGS) 384 if(PROP) 385 set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS "${PROP} ${FLAGS}") 386 else() 387 set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS "${FLAGS}") 388 endif() 389 endforeach() 390 endmacro() 391 392 if(ENABLE_BLAS_LAPACK) 393 if(BLAS_LAPACK_LIBRARIES) 394 # use libs as specified in the BLAS_LAPACK_LIBRARIES variable 395 set_config_option(HAVE_BLAS "Blas[custom]") 396 set_config_option(HAVE_LAPACK "Lapack[custom]") 397 set(LAPACK_LIBRARIES ${BLAS_LAPACK_LIBRARIES}) 398 else() 399 if(MSVC) 400 # on Windows with Visual C++ try really hard to find blas/lapack *without* 401 # requiring a Fortran compiler: 1) try to find the Intel MKL libs using 402 # the standard search path; if not found 2) try to get the reference 403 # blas/lapack libs (useful for users with no Fortran compiler and no MKL 404 # license, who can just download our precompiled "gmsh-dep" package) 405 if(HAVE_64BIT_SIZE_T) 406 set(MKL_PATH em64t/lib) 407 set(MKL_LIBS_REQUIRED libguide40 mkl_intel_lp64 mkl_intel_thread mkl_core) 408 else() 409 set(MKL_PATH ia32/lib) 410 set(MKL_LIBS_REQUIRED libguide40 mkl_intel_c mkl_intel_thread mkl_core) 411 endif() 412 find_all_libraries(LAPACK_LIBRARIES MKL_LIBS_REQUIRED "" ${MKL_PATH}) 413 if(LAPACK_LIBRARIES) 414 set_config_option(HAVE_BLAS "Blas[mkl]") 415 set_config_option(HAVE_LAPACK "Lapack[mkl]") 416 else() 417 set(REFLAPACK_LIBS_REQUIRED lapack blas g2c gcc) 418 find_all_libraries(LAPACK_LIBRARIES REFLAPACK_LIBS_REQUIRED "" "") 419 if(LAPACK_LIBRARIES) 420 set_config_option(HAVE_BLAS "Blas[ref]") 421 set_config_option(HAVE_LAPACK "Lapack[ref]") 422 endif() 423 endif() 424 elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") 425 # on Linux try to find the Intel MKL without a Fortran compiler 426 if(HAVE_64BIT_SIZE_T) 427 set(MKL_PATH lib/em64t) 428 else() 429 set(MKL_PATH lib/32) 430 endif() 431 set(MKL_LIBS_REQUIRED mkl_gf_lp64 iomp5 mkl_gnu_thread mkl_core guide pthread) 432 find_all_libraries(LAPACK_LIBRARIES MKL_LIBS_REQUIRED "" ${MKL_PATH}) 433 if(NOT LAPACK_LIBRARIES) 434 # match lapack 9.0 on 64bit 435 set(MKL_LIBS_REQUIRED mkl_lapack mkl_em64t guide) 436 find_all_libraries(LAPACK_LIBRARIES MKL_LIBS_REQUIRED "" ${MKL_PATH}) 437 endif() 438 if(LAPACK_LIBRARIES) 439 set_config_option(HAVE_BLAS "Blas[mkl]") 440 set_config_option(HAVE_LAPACK "Lapack[mkl]") 441 else() 442 # on Linux also try to find ATLAS without a Fortran compiler, because 443 # cmake ships with a buggy FindBLAS e.g. on Ubuntu Lucid Lynx 444 set(ATLAS_LIBS_REQUIRED lapack f77blas cblas atlas) 445 find_all_libraries(LAPACK_LIBRARIES ATLAS_LIBS_REQUIRED "" "") 446 if(LAPACK_LIBRARIES) 447 set_config_option(HAVE_BLAS "Blas[atlas]") 448 set_config_option(HAVE_LAPACK "Lapack[atlas]") 449 else() 450 # try with generic names 451 set(GENERIC_LIBS_REQUIRED lapack blas pthread) 452 find_all_libraries(LAPACK_LIBRARIES GENERIC_LIBS_REQUIRED "" "") 453 if(LAPACK_LIBRARIES) 454 set_config_option(HAVE_BLAS "Blas[generic]") 455 set_config_option(HAVE_LAPACK "Lapack[generic]") 456 find_library(GFORTRAN_LIB gfortran) 457 if(GFORTRAN_LIB) 458 list(APPEND LAPACK_LIBRARIES ${GFORTRAN_LIB}) 459 endif() 460 endif() 461 endif() 462 endif() 463 elseif(${CMAKE_SYSTEM_NAME} MATCHES "SunOS") 464 # on SunOS we know blas and lapack are available in sunperf 465 set(LAPACK_LIBRARIES -library=sunperf) 466 set_config_option(HAVE_BLAS "Blas[sunperf]") 467 set_config_option(HAVE_LAPACK "Lapack[sunperf]") 468 elseif(APPLE) 469 # on Mac we also know that blas and lapack are available 470 set(LAPACK_LIBRARIES "-llapack -lblas") 471 set_config_option(HAVE_BLAS "Blas[veclib]") 472 set_config_option(HAVE_LAPACK "Lapack[veclib]") 473 endif() 474 475 if(NOT HAVE_BLAS OR NOT HAVE_LAPACK) 476 # if we haven't found blas and lapack check for OpenBlas 477 set(OPENBLAS_LIBS_REQUIRED openblas) 478 find_all_libraries(LAPACK_LIBRARIES OPENBLAS_LIBS_REQUIRED "" "") 479 if(LAPACK_LIBRARIES) 480 set_config_option(HAVE_BLAS "Blas[openblas]") 481 set_config_option(HAVE_LAPACK "Lapack[openblas]") 482 find_library(GFORTRAN_LIB gfortran) 483 if(GFORTRAN_LIB) 484 list(APPEND LAPACK_LIBRARIES ${GFORTRAN_LIB}) 485 endif() 486 endif() 487 endif() 488 489 if(NOT HAVE_BLAS OR NOT HAVE_LAPACK) 490 # if we still haven't found blas and lapack, use the standard cmake tests, 491 # which require a working Fortran compiler 492 enable_language(Fortran) 493 find_package(BLAS) 494 if(BLAS_FOUND) 495 set_config_option(HAVE_BLAS "Blas") 496 find_package(LAPACK) 497 if(LAPACK_FOUND) 498 set_config_option(HAVE_LAPACK "Lapack") 499 else() 500 set(LAPACK_LIBRARIES ${BLAS_LIBRARIES}) 501 endif() 502 if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") 503 if(CMAKE_Fortran_COMPILER MATCHES "gfortran") 504 list(APPEND LAPACK_LIBRARIES gfortran) 505 elseif(CMAKE_Fortran_COMPILER MATCHES "f95") 506 list(APPEND LAPACK_LIBRARIES gfortran) 507 elseif(CMAKE_Fortran_COMPILER MATCHES "g77") 508 list(APPEND LAPACK_LIBRARIES g2c) 509 endif() 510 elseif(CMAKE_Fortran_COMPILER MATCHES "pgi") 511 list(APPEND LAPACK_LIBRARIES -pgf77libs) 512 endif() 513 endif() 514 endif() 515 516 if(NOT HAVE_BLAS OR NOT HAVE_LAPACK) 517 message(WARNING "Could not find Blas or Lapack: most meshing algorithms " 518 "will not be functional") 519 endif() 520 521 endif() 522 endif() 523 524 if(ENABLE_TCMALLOC) 525 find_library(TCMALLOC tcmalloc) 526 if(TCMALLOC) 527 set_config_option(HAVE_TCMALLOC "TCMalloc") 528 list(APPEND EXTERNAL_LIBRARIES ${TCMALLOC}) 529 endif() 530 endif() 531 532 add_subdirectory(Common) 533 add_subdirectory(Numeric) 534 add_subdirectory(Geo) 535 536 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Mesh AND ENABLE_MESH) 537 add_subdirectory(Mesh) 538 set_config_option(HAVE_MESH "Mesh") 539 endif() 540 541 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Solver AND ENABLE_SOLVER) 542 add_subdirectory(Solver) 543 set_config_option(HAVE_SOLVER "Solver") 544 endif() 545 546 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Post AND ENABLE_POST) 547 add_subdirectory(Post) 548 set_config_option(HAVE_POST "Post") 549 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Plugin AND ENABLE_PLUGINS) 550 add_subdirectory(Plugin) 551 set_config_option(HAVE_PLUGINS "Plugins") 552 endif() 553 endif() 554 555 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Parser AND ENABLE_PARSER) 556 add_subdirectory(Parser) 557 set_config_option(HAVE_PARSER "Parser") 558 endif() 559 560 if(ENABLE_VISUDEV) 561 set_config_option(HAVE_VISUDEV "VisuDev") 562 endif() 563 564 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Fltk AND ENABLE_FLTK) 565 # first, try to use fltk-config for fltk >= 1.3 (FindFLTK is buggy on Unix, 566 # where e.g. xft and xinerama options are not dealt with) 567 find_program(FLTK_CONFIG_SCRIPT fltk-config) 568 if(FLTK_CONFIG_SCRIPT) 569 execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --api-version 570 OUTPUT_VARIABLE FLTK_VERSION) 571 string(STRIP "${FLTK_VERSION}" FLTK_VERSION) 572 if(FLTK_VERSION VERSION_GREATER 1.1) 573 add_subdirectory(Fltk) 574 set_config_option(HAVE_FLTK "Fltk") 575 message(STATUS "Using fltk-config script for Fltk " ${FLTK_VERSION}) 576 execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --use-gl --use-images --includedir 577 OUTPUT_VARIABLE FLTK_INCLUDE_DIR) 578 string(STRIP ${FLTK_INCLUDE_DIR} FLTK_INCLUDE_DIR) 579 list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}) 580 # On linux (at least OpenSuSE) the following directories are 581 # not existing (everything is in /usr/include). To avoid warnings 582 # check existance of these directories before adding them 583 if(EXISTS ${FLTK_INCLUDE_DIR}/FL/images) 584 list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}/FL/images) 585 endif() 586 if(EXISTS ${FLTK_INCLUDE_DIR}/jpeg) 587 list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}/jpeg) 588 endif() 589 if(EXISTS ${FLTK_INCLUDE_DIR}/zlib) 590 list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}/zlib) 591 endif() 592 if(EXISTS ${FLTK_INCLUDE_DIR}/png) 593 list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}/png) 594 endif() 595 execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --use-gl --use-images --ldflags 596 OUTPUT_VARIABLE FLTK_LIBRARIES) 597 string(STRIP ${FLTK_LIBRARIES} FLTK_LIBRARIES) 598 string(REGEX MATCH "fltk[_ ]jpeg" FLTK_JPEG ${FLTK_LIBRARIES}) 599 string(REGEX MATCH "fltk[_ ]z" FLTK_Z ${FLTK_LIBRARIES}) 600 string(REGEX MATCH "fltk[_ ]png" FLTK_PNG ${FLTK_LIBRARIES}) 601 endif() 602 endif() 603 # then try the built-in FindFLTK module 604 if(NOT HAVE_FLTK) 605 set(FLTK_SKIP_FORMS TRUE) 606 set(FLTK_SKIP_FLUID TRUE) 607 find_package(FLTK) 608 if(FLTK_FOUND) 609 add_subdirectory(Fltk) 610 set_config_option(HAVE_FLTK "Fltk") 611 list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR}) 612 # find fltk jpeg 613 find_library(FLTK_JPEG NAMES fltk_jpeg fltkjpeg) 614 if(FLTK_JPEG) 615 list(APPEND EXTERNAL_LIBRARIES ${FLTK_JPEG}) 616 foreach(DIR ${FLTK_INCLUDE_DIR}) 617 list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/jpeg) 618 endforeach() 619 endif() 620 # find fltk zlib 621 find_library(FLTK_Z NAMES fltk_z fltkz) 622 if(FLTK_Z) 623 list(APPEND EXTERNAL_LIBRARIES ${FLTK_Z}) 624 foreach(DIR ${FLTK_INCLUDE_DIR}) 625 list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/zlib) 626 endforeach() 627 endif() 628 # find fltk png 629 find_library(FLTK_PNG NAMES fltk_png fltkpng) 630 if(FLTK_PNG) 631 list(APPEND EXTERNAL_LIBRARIES ${FLTK_PNG}) 632 foreach(DIR ${FLTK_INCLUDE_DIR}) 633 list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/png) 634 endforeach() 635 endif() 636 endif() 637 endif() 638 # workaround for Fedora/Suse messing up fltk-config (see issue #417) 639 if(HAVE_FLTK AND ${CMAKE_SYSTEM_NAME} MATCHES "Linux") 640 string(REGEX MATCH "X11" FLTK_X11 ${FLTK_LIBRARIES}) 641 if(NOT FLTK_X11) 642 find_package(X11) 643 if(X11_FOUND) 644 list(APPEND EXTERNAL_INCLUDES ${X11_INCLUDE_DIR}) 645 list(APPEND EXTERNAL_LIBRARIES ${X11_LIBRARIES}) 646 endif() 647 endif() 648 endif() 649 endif() 650 651 if(APPLE AND HAVE_FLTK AND ENABLE_TOUCHBAR) 652 if(CMAKE_OSX_DEPLOYMENT_TARGET) 653 if(${CMAKE_OSX_DEPLOYMENT_TARGET} VERSION_GREATER 10.11) 654 set(GMSH_SRC ${GMSH_SRC};Fltk/touchBar.mm) 655 set_config_option(HAVE_TOUCHBAR "TouchBar") 656 endif() 657 endif() 658 endif() 659 660 if(ENABLE_ONELAB) 661 set_config_option(HAVE_ONELAB "ONELAB") 662 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/onelab) 663 if(ENABLE_ONELAB_METAMODEL) 664 add_subdirectory(contrib/onelab) 665 include_directories(contrib/onelab) 666 set_config_option(HAVE_ONELAB_METAMODEL "ONELABMetamodel") 667 endif() 668 file(COPY ${ONELAB_PY} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) 669 endif() 670 endif() 671 672 if(ENABLE_BUILD_IOS) 673 find_file(CMAKE_TOOLCHAIN_FILE "ios.cmake") 674 if(NOT CMAKE_TOOLCHAIN_FILE) 675 message(FATAL_ERROR "Cannot compile Gmsh for iOS without a toolchain") 676 endif() 677 add_definitions(-DBUILD_IOS) 678 endif() 679 680 if(HAVE_FLTK OR ENABLE_GRAPHICS) 681 if(NOT HAVE_MESH OR NOT HAVE_POST OR NOT HAVE_PLUGINS OR NOT HAVE_ONELAB) 682 message(SEND_ERROR "Cannot compile GUI without Mesh, Post, Plugin and ONELAB") 683 endif() 684 685 if(FLTK_JPEG) 686 set_config_option(HAVE_LIBJPEG "Jpeg[fltk]") 687 else() 688 find_package(JPEG) 689 if(JPEG_FOUND) 690 set_config_option(HAVE_LIBJPEG "Jpeg") 691 list(APPEND EXTERNAL_LIBRARIES ${JPEG_LIBRARIES}) 692 list(APPEND EXTERNAL_INCLUDES ${JPEG_INCLUDE_DIR}) 693 endif() 694 endif() 695 696 if(FLTK_Z) 697 set_config_option(HAVE_LIBZ "Zlib[fltk]") 698 else() 699 find_package(ZLIB) 700 if(ZLIB_FOUND) 701 set_config_option(HAVE_LIBZ "Zlib") 702 list(APPEND EXTERNAL_LIBRARIES ${ZLIB_LIBRARIES}) 703 list(APPEND EXTERNAL_INCLUDES ${ZLIB_INCLUDE_DIR}) 704 endif() 705 endif() 706 707 if(HAVE_LIBZ) 708 if(FLTK_PNG) 709 set_config_option(HAVE_LIBPNG "Png[fltk]") 710 else() 711 find_package(PNG) 712 if(PNG_FOUND) 713 set_config_option(HAVE_LIBPNG "Png") 714 list(APPEND EXTERNAL_LIBRARIES ${PNG_LIBRARIES}) 715 list(APPEND EXTERNAL_INCLUDES ${PNG_INCLUDE_DIR}) 716 endif() 717 endif() 718 endif() 719 720 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/mpeg_encode AND 721 ENABLE_MPEG_ENCODE) 722 add_subdirectory(contrib/mpeg_encode) 723 include_directories(contrib/mpeg_encode/headers) 724 set_config_option(HAVE_MPEG_ENCODE "Mpeg") 725 endif() 726 727 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/3M AND ENABLE_3M) 728 add_subdirectory(contrib/3M) 729 include_directories(contrib/3M) 730 set_config_option(HAVE_3M "3M") 731 endif() 732 733 if(ENABLE_OSMESA) 734 find_library(OSMESA_LIB OSMesa) 735 if(OSMESA_LIB) 736 set_config_option(HAVE_OSMESA "OSMesa") 737 list(APPEND EXTERNAL_LIBRARIES ${OSMESA_LIB}) 738 endif() 739 endif() 740 741 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Graphics) 742 set(OpenGL_GL_PREFERENCE "LEGACY") 743 find_package(OpenGL REQUIRED) 744 if(OPENGL_GLU_FOUND AND OPENGL_FOUND) 745 add_subdirectory(Graphics) 746 set_config_option(HAVE_OPENGL "OpenGL") 747 else() 748 message(SEND_ERROR "Could not find GLU: disabling OpenGL support") 749 endif() 750 endif() 751 endif() 752 753 if(ENABLE_ANN) 754 find_library(ANN_LIB ANN PATH_SUFFIXES lib) 755 find_path(ANN_INC "ANN.h" PATH_SUFFIXES src include ANN) 756 if(ENABLE_SYSTEM_CONTRIB AND ANN_LIB AND ANN_INC) 757 message(STATUS "Using system version of ANN") 758 list(APPEND EXTERNAL_LIBRARIES ${ANN_LIB}) 759 list(APPEND EXTERNAL_INCLUDES ${ANN_INC}) 760 set_config_option(HAVE_ANN "Ann[system]") 761 elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/ANN) 762 add_subdirectory(contrib/ANN) 763 include_directories(contrib/ANN/include) 764 set_config_option(HAVE_ANN "Ann") 765 endif() 766 endif() 767 768 if(ENABLE_ALGLIB) 769 find_library(ALGLIB_LIB alglib PATH_SUFFIXES lib) 770 find_path(ALGLIB_INC "stdafx.h" PATH_SUFFIXES include) 771 if(ENABLE_SYSTEM_CONTRIB AND ALGLIB_LIB AND ALGLIB_INC) 772 list(APPEND EXTERNAL_LIBRARIES ${ALGLIB_LIB}) 773 list(APPEND EXTERNAL_INCLUDES ${ALGLIB_INC}) 774 set_config_option(HAVE_ALGLIB "ALGLIB[system]") 775 elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/ALGLIB) 776 add_subdirectory(contrib/ALGLIB) 777 include_directories(contrib/ALGLIB) 778 set_config_option(HAVE_ALGLIB "ALGLIB") 779 endif() 780 endif() 781 782 if(HAVE_FLTK AND ENABLE_CAIRO) 783 find_library(CAIRO_LIB cairo) 784 find_path(CAIRO_INC "cairo/cairo.h" PATH_SUFFIXES include) 785 if(CAIRO_INC AND CAIRO_LIB) 786 set_config_option(HAVE_CAIRO "Cairo") 787 list(APPEND EXTERNAL_LIBRARIES ${CAIRO_LIB}) 788 list(APPEND EXTERNAL_INCLUDES ${CAIRO_INC}) 789 endif() 790 endif() 791 792 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/DiscreteIntegration AND 793 ENABLE_DINTEGRATION) 794 add_subdirectory(contrib/DiscreteIntegration) 795 include_directories(contrib/DiscreteIntegration) 796 set_config_option(HAVE_DINTEGRATION "DIntegration") 797 endif() 798 799 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/HighOrderMeshOptimizer AND 800 EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/MeshOptimizer AND 801 EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/MeshQualityOptimizer AND 802 ENABLE_OPTHOM AND HAVE_MESH) 803 add_subdirectory(contrib/HighOrderMeshOptimizer) 804 include_directories(contrib/HighOrderMeshOptimizer) 805 add_subdirectory(contrib/MeshOptimizer) 806 include_directories(contrib/MeshOptimizer) 807 include_directories(${CMAKE_CURRENT_BINARY_DIR}/contrib/MeshOptimizer) 808 add_subdirectory(contrib/MeshQualityOptimizer) 809 include_directories(contrib/MeshQualityOptimizer) 810 set_config_option(HAVE_OPTHOM "OptHom") 811 endif() 812 813 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/domhex AND 814 ENABLE_DOMHEX AND HAVE_MESH) 815 add_subdirectory(contrib/domhex) 816 include_directories(contrib/domhex) 817 set_config_option(HAVE_DOMHEX "DomHex") 818 endif() 819 820 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/QuadTri AND 821 ENABLE_QUADTRI AND HAVE_MESH) 822 add_subdirectory(contrib/QuadTri) 823 include_directories(contrib/QuadTri) 824 set_config_option(HAVE_QUADTRI "QuadTri") 825 endif() 826 827 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/kbipack AND ENABLE_KBIPACK) 828 set_config_option(HAVE_KBIPACK "Kbipack") 829 add_subdirectory(contrib/kbipack) 830 include_directories(contrib/kbipack) 831 if(ENABLE_GMP) 832 find_library(GMP_LIB libgmp.a) 833 find_path(GMP_INC "gmp.h" PATH_SUFFIXES src include) 834 endif() 835 if(GMP_LIB AND GMP_INC) 836 set_config_option(HAVE_GMP "GMP") 837 list(APPEND EXTERNAL_LIBRARIES ${GMP_LIB}) 838 list(APPEND EXTERNAL_INCLUDES ${GMP_INC}) 839 else() 840 message(STATUS "GMP not found: Kbipack uses long int") 841 endif() 842 endif() 843 844 if(ENABLE_MATHEX) 845 find_library(MATHEX_LIB mathex PATH_SUFFIXES lib) 846 find_path(MATHEX_INC "mathex.h" PATH_SUFFIXES src include) 847 if(ENABLE_SYSTEM_CONTRIB AND MATHEX_LIB AND MATHEX_INC) 848 list(APPEND EXTERNAL_LIBRARIES ${MATHEX_LIB}) 849 list(APPEND EXTERNAL_INCLUDES ${MATHEX_INC}) 850 set_config_option(HAVE_MATHEX "MathEx[system]") 851 elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/MathEx) 852 add_subdirectory(contrib/MathEx) 853 include_directories(contrib/MathEx) 854 set_config_option(HAVE_MATHEX "MathEx") 855 endif() 856 endif() 857 858 if(ENABLE_MPI) 859 find_package(MPI) 860 if(MPI_FOUND) 861 set_config_option(HAVE_MPI "MPI") 862 list(APPEND EXTERNAL_INCLUDES ${MPI_CXX_INCLUDE_PATH}) 863 list(APPEND EXTERNAL_LIBRARIES ${MPI_CXX_LIBRARIES}) 864 set(CMAKE_C_COMPILER ${MPI_C_COMPILER}) 865 set(CMAKE_CXX_COMPILER ${MPI_CXX_COMPILER}) 866 set(CMAKE_Fortran_COMPILER ${MPI_Fortran_COMPILER}) 867 endif() 868 endif() 869 870 if(ENABLE_POPPLER) 871 find_library(POPPLER_LIB poppler) 872 find_library(POPPLER_CPP_LIB poppler-cpp) 873 find_path(POPPLER_INC "poppler/cpp/poppler-document.h" PATH_SUFFIXES src include) 874 if(POPPLER_LIB AND POPPLER_INC) 875 set_config_option(HAVE_POPPLER "Poppler") 876 list(APPEND EXTERNAL_LIBRARIES ${POPPLER_LIB}) 877 list(APPEND EXTERNAL_LIBRARIES ${POPPLER_CPP_LIB}) 878 list(APPEND EXTERNAL_INCLUDES ${POPPLER_INC}) 879 endif() 880 endif() 881 882 if(ENABLE_P4EST) 883 find_library(P4EST_LIB p4est) 884 find_path(P4EST_INC "p4est.h" PATH_SUFFIXES src) 885 find_library(SC_LIB sc) 886 if(P4EST_LIB AND P4EST_INC AND SC_LIB) 887 set_config_option(HAVE_P4EST "P4est") 888 list(APPEND EXTERNAL_LIBRARIES ${P4EST_LIB} ${SC_LIB}) 889 list(APPEND EXTERNAL_INCLUDES ${P4EST_INC}) 890 endif() 891 endif() 892 893 if(HAVE_MESH OR HAVE_SOLVER) 894 if(ENABLE_METIS) 895 if(METIS_ROOT) 896 find_library(METIS_LIB metis PATHS ${METIS_ROOT} PATH_SUFFIXES lib) 897 find_path(METIS_INC "metis.h" PATHS ${METIS_ROOT} PATH_SUFFIXES include) 898 list(APPEND EXTERNAL_LIBRARIES ${METIS_LIB}) 899 list(APPEND EXTERNAL_INCLUDES ${METIS_INC}) 900 set_config_option(HAVE_METIS "Metis") 901 else() 902 find_library(METIS_LIB metis PATH_SUFFIXES lib) 903 find_path(METIS_INC "metis.h" PATH_SUFFIXES include) 904 if(ENABLE_SYSTEM_CONTRIB AND METIS_LIB AND METIS_INC) 905 message(STATUS "Using system version of METIS") 906 list(APPEND EXTERNAL_LIBRARIES ${METIS_LIB}) 907 list(APPEND EXTERNAL_INCLUDES ${METIS_INC}) 908 set_config_option(HAVE_METIS "Metis[system]") 909 elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/metis) 910 add_definitions(-DUSE_GKREGEX) 911 add_subdirectory(contrib/metis) 912 include_directories(contrib/metis/include contrib/metis/libmetis 913 contrib/metis/GKlib) 914 set_config_option(HAVE_METIS "Metis") 915 endif() 916 endif() 917 endif() 918 endif() 919 920 if(HAVE_MESH) 921 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Mesh/tetgenBR.cxx) 922 set_config_option(HAVE_TETGENBR "TetGen/BR") 923 endif() 924 925 if(ENABLE_VOROPP) 926 find_library(VOROPP_LIB voro++ PATH_SUFFIXES lib) 927 find_path(VOROPP_INC "voro++.hh" PATH_SUFFIXES include) 928 if(ENABLE_SYSTEM_CONTRIB AND VOROPP_LIB AND VOROPP_INC) 929 message(STATUS "Using system version of voro++") 930 list(APPEND EXTERNAL_LIBRARIES ${VOROPP_LIB}) 931 list(APPEND EXTERNAL_INCLUDES ${VOROPP_INC}) 932 set_config_option(HAVE_VOROPP "Voro++[system]") 933 elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/voro++) 934 add_subdirectory(contrib/voro++) 935 include_directories(contrib/voro++/src) 936 set_config_option(HAVE_VOROPP "Voro++") 937 endif() 938 endif() 939 940 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/blossom AND ENABLE_BLOSSOM) 941 add_subdirectory(contrib/blossom) 942 include_directories(contrib/blossom/MATCH contrib/blossom/concorde97 943 contrib/blossom/concorde97/INCLUDE) 944 set_config_option(HAVE_BLOSSOM "Blossom") 945 endif() 946 947 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/Netgen AND ENABLE_NETGEN) 948 add_subdirectory(contrib/Netgen) 949 include_directories(contrib/Netgen contrib/Netgen/libsrc/include 950 contrib/Netgen/nglib) 951 set_config_option(HAVE_NETGEN "Netgen") 952 add_definitions(-DNO_PARALLEL_THREADS -DNOTCL) 953 endif() 954 955 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/bamg AND ENABLE_BAMG) 956 add_subdirectory(contrib/bamg) 957 include_directories(contrib/bamg contrib/bamg/bamglib) 958 set_config_option(HAVE_BAMG "Bamg") 959 endif() 960 961 if(ENABLE_MMG3D) 962 find_library(MMG3D_LIB mmg3d PATH_SUFFIXES lib) 963 find_path(MMG3D_INC "libmmg3d.h" PATH_SUFFIXES src include) 964 if(ENABLE_SYSTEM_CONTRIB AND MMG3D_LIB AND MMG3D_INC) 965 list(APPEND EXTERNAL_LIBRARIES ${MMG3D_LIB}) 966 list(APPEND EXTERNAL_INCLUDES ${MMG3D_INC}) 967 set_config_option(HAVE_MMG3D "Mmg3d[system]") 968 elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/mmg3d) 969 add_subdirectory(contrib/mmg3d) 970 include_directories(contrib/mmg3d/build/sources) 971 set_config_option(HAVE_MMG3D "Mmg3d") 972 endif() 973 endif() 974 endif() 975 976 if(ENABLE_MED OR ENABLE_CGNS) 977 find_package(HDF5) 978 if(HDF5_FOUND) 979 set(HDF5_LIB "${HDF5_C_LIBRARIES}") 980 list(APPEND EXTERNAL_INCLUDES ${HDF5_INCLUDE_DIRS}) 981 if(ENABLE_MED) 982 find_library(MED_LIB medC) 983 if(MED_LIB) 984 set_config_option(HAVE_MED "Med") 985 list(APPEND EXTERNAL_LIBRARIES ${MED_LIB}) 986 endif() 987 endif() 988 if(ENABLE_CGNS) 989 find_library(CGNS_LIB cgns HINTS ENV CGNS_ROOT PATH_SUFFIXES lib) 990 find_path(CGNS_INC "cgnslib.h" HINTS ENV CGNS_ROOT PATH_SUFFIXES include) 991 if(CGNS_LIB AND CGNS_INC) 992 set_config_option(HAVE_LIBCGNS "Cgns") 993 list(APPEND EXTERNAL_LIBRARIES ${CGNS_LIB}) 994 list(APPEND EXTERNAL_INCLUDES ${CGNS_INC}) 995 if(ENABLE_CGNS_CPEX0045) 996 set_config_option(HAVE_LIBCGNS_CPEX0045 "Cgns_CPEX0045") 997 endif() 998 endif() 999 endif() 1000 if(MED_LIB OR CGNS_LIB) 1001 list(APPEND EXTERNAL_LIBRARIES ${HDF5_LIB}) 1002 find_library(SZ_LIB NAMES szlib sz) 1003 if(SZ_LIB) 1004 list(APPEND EXTERNAL_LIBRARIES ${SZ_LIB}) 1005 endif() 1006 if(NOT HAVE_LIBZ) # necessary for non-GUI builds 1007 find_package(ZLIB) 1008 if(ZLIB_FOUND) 1009 set_config_option(HAVE_LIBZ "Zlib") 1010 list(APPEND EXTERNAL_LIBRARIES ${ZLIB_LIBRARIES}) 1011 endif() 1012 endif() 1013 endif() 1014 else() 1015 message(STATUS "HDF5 not found") 1016 endif() 1017 endif() 1018 1019 if(HAVE_SOLVER) 1020 if(ENABLE_GMM) 1021 find_path(GMM_INC "gmm.h" PATH_SUFFIXES src include include/gmm) 1022 if(ENABLE_SYSTEM_CONTRIB AND GMM_INC) 1023 message(STATUS "Using system version of GMM") 1024 list(APPEND EXTERNAL_INCLUDES ${GMM_INC}) 1025 set_config_option(HAVE_GMM "Gmm[system]") 1026 elseif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/gmm) 1027 include_directories(contrib/gmm) 1028 set_config_option(HAVE_GMM "Gmm") 1029 endif() 1030 endif() 1031 1032 if(ENABLE_PETSC) 1033 if(PETSC_DIR) 1034 set(ENV_PETSC_DIR ${PETSC_DIR}) 1035 else() 1036 set(ENV_PETSC_DIR $ENV{PETSC_DIR}) 1037 endif() 1038 if(PETSC_ARCH) 1039 set(ENV_PETSC_ARCH ${PETSC_ARCH}) 1040 else() 1041 set(ENV_PETSC_ARCH $ENV{PETSC_ARCH}) 1042 endif() 1043 set(PETSC_POSSIBLE_CONF_FILES 1044 ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/conf/petscvariables 1045 ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib/petsc-conf/petscvariables 1046 ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib/petsc/conf/petscvariables) 1047 foreach(FILE ${PETSC_POSSIBLE_CONF_FILES}) 1048 if(EXISTS ${FILE}) 1049 # old-style PETSc installations (using PETSC_DIR and PETSC_ARCH) 1050 message(STATUS "Using PETSc dir: ${ENV_PETSC_DIR}") 1051 message(STATUS "Using PETSc arch: ${ENV_PETSC_ARCH}") 1052 # find includes by parsing the petscvariables file 1053 file(STRINGS ${FILE} PETSC_VARIABLES NEWLINE_CONSUME) 1054 endif() 1055 endforeach() 1056 if(PETSC_VARIABLES) 1057 # try to find PETSC_CC_INCLUDES for PETSc >= 3.4 1058 string(REGEX MATCH "PETSC_CC_INCLUDES = [^\n\r]*" PETSC_PACKAGES_INCLUDES 1059 ${PETSC_VARIABLES}) 1060 if(PETSC_PACKAGES_INCLUDES) 1061 string(REPLACE "PETSC_CC_INCLUDES = " "" PETSC_PACKAGES_INCLUDES 1062 ${PETSC_PACKAGES_INCLUDES}) 1063 else() 1064 # try to find PETSC_PACKAGES_INCLUDES in older versions 1065 list(APPEND EXTERNAL_INCLUDES ${ENV_PETSC_DIR}/include) 1066 list(APPEND EXTERNAL_INCLUDES ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/include) 1067 string(REGEX MATCH "PACKAGES_INCLUDES = [^\n\r]*" PETSC_PACKAGES_INCLUDES 1068 ${PETSC_VARIABLES}) 1069 string(REPLACE "PACKAGES_INCLUDES = " "" PETSC_PACKAGES_INCLUDES 1070 ${PETSC_PACKAGES_INCLUDES}) 1071 endif() 1072 if(PETSC_PACKAGES_INCLUDES) 1073 if(PETSC_PACKAGES_INCLUDES) 1074 string(REPLACE "-I" "" PETSC_PACKAGES_INCLUDES ${PETSC_PACKAGES_INCLUDES}) 1075 string(REPLACE " " ";" PETSC_PACKAGES_INCLUDES ${PETSC_PACKAGES_INCLUDES}) 1076 foreach(VAR ${PETSC_PACKAGES_INCLUDES}) 1077 # seem to include unexisting directories (/usr/include/lib64) 1078 # check to avoid warnings 1079 if(EXISTS ${VAR}) 1080 list(APPEND EXTERNAL_INCLUDES ${VAR}) 1081 endif() 1082 endforeach() 1083 endif() 1084 endif() 1085 # find libraries (<= 3.0) 1086 set(PETSC_LIBS_REQUIRED petscksp petscdm petscmat petscvec petsc) 1087 find_all_libraries(PETSC_LIBS PETSC_LIBS_REQUIRED 1088 ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib "") 1089 # petsc 3.1 creates only one library (libpetsc) 1090 if(NOT PETSC_LIBS) 1091 find_library(PETSC_LIBS petsc PATHS ${ENV_PETSC_DIR}/${ENV_PETSC_ARCH}/lib 1092 NO_DEFAULT_PATH) 1093 endif() 1094 if(PETSC_LIBS) 1095 set_config_option(HAVE_PETSC "PETSc") 1096 if(NOT HAVE_BLAS) 1097 set_config_option(HAVE_BLAS "Blas[petsc]") 1098 endif() 1099 if(NOT HAVE_LAPACK) 1100 set_config_option(HAVE_LAPACK "Lapack[petsc]") 1101 endif() 1102 endif() 1103 # find slepc (needs to be linked in before petsc) 1104 if(ENABLE_SLEPC) 1105 if(SLEPC_DIR) 1106 set(ENV_SLEPC_DIR ${SLEPC_DIR}) 1107 else() 1108 set(ENV_SLEPC_DIR $ENV{SLEPC_DIR}) 1109 endif() 1110 find_library(SLEPC_LIB slepc PATHS ${ENV_SLEPC_DIR}/${ENV_PETSC_ARCH}/lib 1111 NO_DEFAULT_PATH) 1112 if(SLEPC_LIB) 1113 find_path(SLEPC_INC "slepc.h" PATHS ${ENV_SLEPC_DIR} PATH_SUFFIXES include 1114 ${ENV_PETSC_ARCH}/include include/slepc NO_DEFAULT_PATH) 1115 if(SLEPC_INC) 1116 message(STATUS "Using SLEPc dir: ${ENV_SLEPC_DIR}") 1117 set_config_option(HAVE_SLEPC "SLEPc") 1118 list(APPEND EXTERNAL_LIBRARIES ${SLEPC_LIB}) 1119 list(APPEND EXTERNAL_INCLUDES ${SLEPC_INC}) 1120 find_path(SLEPC_INC2 "slepcconf.h" PATHS ${ENV_SLEPC_DIR} 1121 PATH_SUFFIXES ${ENV_PETSC_ARCH}/include NO_DEFAULT_PATH) 1122 if(SLEPC_INC2) 1123 list(APPEND EXTERNAL_INCLUDES ${SLEPC_INC2}) 1124 endif() 1125 endif() 1126 endif() 1127 endif() 1128 list(APPEND EXTERNAL_LIBRARIES ${PETSC_LIBS}) 1129 # find additional libraries to link with 1130 string(REGEX MATCH "PACKAGES_LIBS = [^\n\r]*" PLIBS ${PETSC_VARIABLES}) 1131 if(PLIBS) 1132 string(REPLACE "PACKAGES_LIBS = " "" PLIBS ${PLIBS}) 1133 string(STRIP ${PLIBS} PLIBS) 1134 list(APPEND EXTERNAL_LIBRARIES "${PLIBS}") 1135 endif() 1136 string(REGEX MATCH "PETSC_EXTERNAL_LIB_BASIC = [^\n\r]*" PLIBS_BASIC ${PETSC_VARIABLES}) 1137 if(PLIBS_BASIC) 1138 string(REPLACE "PETSC_EXTERNAL_LIB_BASIC = " "" PLIBS_BASIC ${PLIBS_BASIC}) 1139 string(STRIP ${PLIBS_BASIC} PLIBS_BASIC) 1140 separate_arguments(PLIBS_BASIC) 1141 list(APPEND EXTERNAL_LIBRARIES "${PLIBS_BASIC}") 1142 endif() 1143 string(REGEX MATCH "PCC_LINKER_LIBS = [^\n\r]*" LLIBS ${PETSC_VARIABLES}) 1144 if(LLIBS) 1145 string(REPLACE "PCC_LINKER_LIBS = " "" LLIBS ${LLIBS}) 1146 string(STRIP ${LLIBS} LLIBS) 1147 list(APPEND EXTERNAL_LIBRARIES "${LLIBS}") 1148 endif() 1149 else() 1150 # new-style PETSc installations (in standard system directories) 1151 find_library(PETSC_LIBS petsc) 1152 find_path(PETSC_INC "petsc.h" PATH_SUFFIXES include/petsc) 1153 if(PETSC_LIBS AND PETSC_INC) 1154 set_config_option(HAVE_PETSC "PETSc") 1155 if(ENABLE_SLEPC) 1156 find_library(SLEPC_LIB slepc) 1157 find_path(SLEPC_INC "slepc.h" PATH_SUFFIXES include/slepc) 1158 if(SLEPC_LIB AND SLEPC_INC) 1159 set_config_option(HAVE_SLEPC "SLEPc") 1160 list(APPEND EXTERNAL_LIBRARIES ${SLEPC_LIB}) 1161 list(APPEND EXTERNAL_INCLUDES ${SLEPC_INC}) 1162 endif() 1163 endif() 1164 list(APPEND EXTERNAL_LIBRARIES ${PETSC_LIBS}) 1165 list(APPEND EXTERNAL_INCLUDES ${PETSC_INC}) 1166 endif() 1167 endif() 1168 endif() 1169 1170 if(ENABLE_MUMPS AND HAVE_BLAS AND HAVE_LAPACK) 1171 set(MUMPS_LIBS_REQUIRED smumps dmumps cmumps zmumps mumps_common pord) 1172 if(NOT ENABLE_MPI) 1173 list(APPEND MUMPS_LIBS_REQUIRED mpiseq) 1174 endif() 1175 find_all_libraries(MUMPS_LIBRARIES MUMPS_LIBS_REQUIRED "" "lib") 1176 find_path(SMUMPS_INC "smumps_c.h" PATH_SUFFIXES src include) 1177 find_path(DMUMPS_INC "dmumps_c.h" PATH_SUFFIXES src include) 1178 find_path(CMUMPS_INC "cmumps_c.h" PATH_SUFFIXES src include) 1179 find_path(ZMUMPS_INC "zmumps_c.h" PATH_SUFFIXES src include) 1180 if(MUMPS_LIBRARIES AND SMUMPS_INC AND DMUMPS_INC AND CMUMPS_INC AND ZMUMPS_INC) 1181 set_config_option(HAVE_MUMPS "MUMPS") 1182 list(APPEND EXTERNAL_LIBRARIES ${MUMPS_LIBRARIES}) 1183 list(APPEND EXTERNAL_INCLUDES ${SMUMPS_INC}) 1184 list(APPEND EXTERNAL_INCLUDES ${DMUMPS_INC}) 1185 list(APPEND EXTERNAL_INCLUDES ${CMUMPS_INC}) 1186 list(APPEND EXTERNAL_INCLUDES ${ZMUMPS_INC}) 1187 find_library(GFORTRAN_LIB gfortran) 1188 if(GFORTRAN_LIB) 1189 list(APPEND EXTERNAL_LIBRARIES ${GFORTRAN_LIB}) 1190 endif() 1191 if(ENABLE_GMM) # use GMM/MUMPS interface 1192 add_definitions(-DGMM_USES_MUMPS) 1193 endif() 1194 endif() 1195 endif() 1196 1197 if(ENABLE_GETDP) 1198 find_library(GETDP_LIB GetDP) 1199 find_path(GETDP_INC "GetDP.h" PATH_SUFFIXES getdp) 1200 if(GETDP_LIB AND GETDP_INC) 1201 set_config_option(HAVE_GETDP "GetDP") 1202 list(APPEND EXTERNAL_LIBRARIES ${GETDP_LIB}) 1203 list(APPEND EXTERNAL_INCLUDES ${GETDP_INC}) 1204 endif() 1205 endif() 1206 endif() 1207 1208 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/hxt AND 1209 ENABLE_HXT AND HAVE_METIS) 1210 set_config_option(HAVE_HXT "Hxt") 1211 add_subdirectory(contrib/hxt) 1212 include_directories(BEFORE contrib/hxt) 1213 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/hxt/hxt_tetDelaunay.c) 1214 set_config_option(HAVE_HXT3D "Hxt3D") 1215 endif() 1216 if(MSVC) 1217 # Visual C++ does not support C99 - force compilation as C++ code 1218 file(GLOB_RECURSE HXT_SRC contrib/hxt/*.c) 1219 set_compile_flags(HXT_SRC "/TP") 1220 endif() 1221 check_include_file("immintrin.h" HAVE_IMMINTRIN_H) 1222 if(NOT HAVE_IMMINTRIN_H) 1223 add_definitions(-DHAVE_NO_IMMINTRIN_H) 1224 endif() 1225 if(HAVE_PETSC) 1226 add_definitions(-DHXT_HAVE_PETSC) 1227 endif() 1228 if(CMAKE_C_COMPILER MATCHES "pgi") 1229 add_definitions(-DHAVE_NO_OPENMP_SIMD) 1230 endif() 1231 endif() 1232 1233 if(ENABLE_OCC) 1234 set(OCC_MINIMAL_VERSION "6.9.1") 1235 if(WIN32) 1236 if(HAVE_64BIT_SIZE_T) 1237 set(OCC_SYS_NAME win64) 1238 else() 1239 set(OCC_SYS_NAME win32) 1240 endif() 1241 else() 1242 set(OCC_SYS_NAME ${CMAKE_SYSTEM_NAME}) 1243 endif() 1244 find_path(OCC_INC "Standard_Version.hxx" HINTS ENV CASROOT PATH_SUFFIXES 1245 inc include include/oce opencascade include/opencascade 1246 occt include/occt) 1247 if(OCC_INC) 1248 file(STRINGS ${OCC_INC}/Standard_Version.hxx 1249 OCC_MAJOR REGEX "#define OCC_VERSION_MAJOR.*") 1250 file(STRINGS ${OCC_INC}/Standard_Version.hxx 1251 OCC_MINOR REGEX "#define OCC_VERSION_MINOR.*") 1252 file(STRINGS ${OCC_INC}/Standard_Version.hxx 1253 OCC_MAINT REGEX "#define OCC_VERSION_MAINTENANCE.*") 1254 if(OCC_MAJOR AND OCC_MINOR AND OCC_MAINT) 1255 string(REGEX MATCH "[0-9]+" OCC_MAJOR "${OCC_MAJOR}") 1256 string(REGEX MATCH "[0-9]+" OCC_MINOR "${OCC_MINOR}") 1257 string(REGEX MATCH "[0-9]+" OCC_MAINT "${OCC_MAINT}") 1258 set(OCC_VERSION "${OCC_MAJOR}.${OCC_MINOR}.${OCC_MAINT}") 1259 message(STATUS "Found OpenCASCADE version ${OCC_VERSION} in ${OCC_INC}") 1260 endif() 1261 endif() 1262 if(OCC_VERSION AND OCC_VERSION STRLESS ${OCC_MINIMAL_VERSION}) 1263 message(WARNING "Gmsh requires OpenCASCADE >= ${OCC_MINIMAL_VERSION}. " 1264 "Use CMAKE_PREFIX_PATH or the CASROOT environment variable " 1265 "to explicitely specify the installation path of OpenCASCADE") 1266 elseif(OCC_INC) 1267 set(OCC_LIBS_REQUIRED 1268 # subset of DataExchange 1269 TKSTEP TKSTEP209 TKSTEPAttr TKSTEPBase TKIGES TKXSBase 1270 # ModelingAlgorithms 1271 TKOffset TKFeat TKFillet TKBool TKMesh TKHLR TKBO TKPrim TKShHealing 1272 TKTopAlgo TKGeomAlgo 1273 # ModelingData 1274 TKBRep TKGeomBase TKG3d TKG2d 1275 # FoundationClasses 1276 TKMath TKernel) 1277 if(ENABLE_OCC_TBB) 1278 list(APPEND OCC_LIBS_REQUIRED tbb tbbmalloc) 1279 endif() 1280 list(LENGTH OCC_LIBS_REQUIRED NUM_OCC_LIBS_REQUIRED) 1281 if(OCC_LIBS) 1282 message(STATUS "OCC libraries specified explicitly: " ${OCC_LIBS}) 1283 list(LENGTH OCC_LIBS_REQUIRED NUM_OCC_LIBS) 1284 else() 1285 set(OCC_LIBS) 1286 foreach(OCC ${OCC_LIBS_REQUIRED}) 1287 if(ENABLE_OCC_STATIC) 1288 set(LIBNAME lib${OCC}.a) 1289 else() 1290 set(LIBNAME ${OCC}) 1291 endif() 1292 find_library(OCC_LIB ${LIBNAME} HINTS ENV CASROOT PATH_SUFFIXES 1293 lib ${OCC_SYS_NAME}/lib ${OCC_SYS_NAME}/vc8/lib) 1294 if(OCC_LIB) 1295 list(APPEND OCC_LIBS ${OCC_LIB}) 1296 else() 1297 message(STATUS "OCC lib " ${LIBNAME} " not Found") 1298 endif() 1299 unset(OCC_LIB CACHE) 1300 endforeach() 1301 list(LENGTH OCC_LIBS NUM_OCC_LIBS) 1302 endif() 1303 endif() 1304 1305 # additional OCC libraries to handle reading of STEP/IGES attributes. Oh my... 1306 if(ENABLE_OCC_CAF) 1307 find_package(Freetype) 1308 if(FREETYPE_FOUND) 1309 set(OCC_CAF_LIBS_REQUIRED 1310 TKXDESTEP TKXDEIGES TKXCAF TKLCAF TKVCAF TKCAF TKV3d TKService TKCDF) 1311 list(LENGTH OCC_CAF_LIBS_REQUIRED NUM_OCC_CAF_LIBS_REQUIRED) 1312 set(OCC_CAF_LIBS) 1313 foreach(OCC ${OCC_CAF_LIBS_REQUIRED}) 1314 find_library(OCC_CAF_LIB ${OCC} HINTS ENV CASROOT PATH_SUFFIXES 1315 lib ${OCC_SYS_NAME}/lib ${OCC_SYS_NAME}/vc8/lib) 1316 if(OCC_CAF_LIB) 1317 list(APPEND OCC_CAF_LIBS ${OCC_CAF_LIB}) 1318 else() 1319 message(STATUS "OCC CAF lib " ${OCC} " not Found") 1320 endif() 1321 unset(OCC_CAF_LIB CACHE) 1322 endforeach() 1323 list(LENGTH OCC_CAF_LIBS NUM_OCC_CAF_LIBS) 1324 endif() 1325 endif() 1326 1327 # append OCC CAF libraries first... 1328 if(NUM_OCC_CAF_LIBS EQUAL NUM_OCC_CAF_LIBS_REQUIRED) 1329 set_config_option(HAVE_OCC_CAF "OpenCASCADE-CAF") 1330 list(APPEND EXTERNAL_LIBRARIES ${OCC_CAF_LIBS} ${FREETYPE_LIBRARIES}) 1331 list(APPEND EXTERNAL_INCLUDES ${FREETYPE_INCLUDE_DIRS}) 1332 if(WIN32) 1333 list(APPEND EXTERNAL_LIBRARIES "windowscodecs") 1334 list(APPEND EXTERNAL_LIBRARIES "ole32") 1335 endif() 1336 endif() 1337 1338 # then append OCC libraries 1339 if(NUM_OCC_LIBS EQUAL NUM_OCC_LIBS_REQUIRED) 1340 set_config_option(HAVE_OCC "OpenCASCADE") 1341 list(APPEND EXTERNAL_LIBRARIES ${OCC_LIBS}) 1342 list(APPEND EXTERNAL_INCLUDES ${OCC_INC}) 1343 if(HAVE_64BIT_SIZE_T) 1344 add_definitions(-D_OCC64) 1345 endif() 1346 if(WIN32) 1347 list(APPEND EXTERNAL_LIBRARIES "winspool") 1348 add_definitions(-DOCC_CONVERT_SIGNALS) 1349 elseif(MSVC) 1350 add_definitions(-DWNT) 1351 endif() 1352 endif() 1353 endif() 1354 1355 if(ENABLE_ACIS) 1356 find_library(ACIS_LIB SpaACIS PATH_SUFFIXES bin/maci386) 1357 if(ACIS_LIB) 1358 find_path(ACIS_INC "kernapi.hxx" PATH_SUFFIXES include) 1359 if(ACIS_INC) 1360 set_config_option(HAVE_ACIS "Acis") 1361 list(APPEND EXTERNAL_LIBRARIES ${ACIS_LIB}) 1362 list(APPEND EXTERNAL_INCLUDES ${ACIS_INC}) 1363 endif() 1364 endif() 1365 endif() 1366 1367 if(ENABLE_ZIPPER) 1368 if(ENABLE_BUILD_IOS) 1369 set_config_option(HAVE_LIBZ "Zlib") 1370 endif() 1371 if(NOT HAVE_LIBZ) # necessary for non-GUI builds 1372 find_package(ZLIB) 1373 if(ZLIB_FOUND) 1374 set_config_option(HAVE_LIBZ "Zlib") 1375 list(APPEND EXTERNAL_LIBRARIES ${ZLIB_LIBRARIES}) 1376 list(APPEND EXTERNAL_INCLUDES ${ZLIB_INCLUDE_DIR}) 1377 endif() 1378 endif() 1379 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/zipper AND HAVE_LIBZ) 1380 add_subdirectory(contrib/zipper) 1381 include_directories(contrib/zipper) 1382 set_config_option(HAVE_ZIPPER "Zipper") 1383 endif() 1384 endif() 1385 1386 if(ENABLE_PRIVATE_API AND ENABLE_WRAP_PYTHON) 1387 find_package(SWIG REQUIRED) 1388 include(${SWIG_USE_FILE}) 1389 find_package(PythonLibs) 1390 if(SWIG_FOUND AND PYTHONLIBS_FOUND) 1391 message(STATUS "Found SWIG version " ${SWIG_VERSION}) 1392 find_package(PythonInterp) 1393 string(SUBSTRING ${SWIG_VERSION} 0 1 SWIG_MAJOR_VERSION) 1394 if(SWIG_MAJOR_VERSION EQUAL 1) 1395 message(WARNING "Python bindings require SWIG >= 2: disabling Python") 1396 else() 1397 set_config_option(HAVE_PYTHON "Python") 1398 mark_as_advanced(CLEAR PYTHON_LIBRARY PYTHON_INCLUDE_DIR) 1399 if(ENABLE_NUMPY) 1400 if (NOT NUMPY_INC) 1401 EXEC_PROGRAM (${PYTHON_EXECUTABLE} 1402 ARGS "-c \"import numpy; print(numpy.get_include())\"" 1403 OUTPUT_VARIABLE NUMPY_INC 1404 RETURN_VALUE NUMPY_NOT_FOUND) 1405 endif() 1406 if(NUMPY_INC) 1407 list(APPEND EXTERNAL_INCLUDES ${NUMPY_INC}) 1408 set_config_option(HAVE_NUMPY "Numpy") 1409 endif() 1410 endif() 1411 if(HAVE_PETSC) 1412 if(ENABLE_PETSC4PY) 1413 EXECUTE_PROCESS( 1414 COMMAND ${PYTHON_EXECUTABLE} -c "import petsc4py; print(petsc4py.get_include())" 1415 OUTPUT_VARIABLE PETSC4PY_INC 1416 RESULT_VARIABLE PETSC4PY_NOT_FOUND 1417 ERROR_QUIET 1418 OUTPUT_STRIP_TRAILING_WHITESPACE) 1419 if(PETSC4PY_INC) 1420 list(APPEND EXTERNAL_INCLUDES ${PETSC4PY_INC}) 1421 set_config_option(HAVE_PETSC4PY "PETSc4py") 1422 endif() 1423 endif() 1424 endif() 1425 endif() 1426 endif() 1427 endif() 1428 1429 check_function_exists(vsnprintf HAVE_VSNPRINTF) 1430 if(NOT HAVE_VSNPRINTF AND NOT ENABLE_BUILD_IOS AND NOT ENABLE_BUILD_ANDROID) 1431 set_config_option(HAVE_NO_VSNPRINTF "NoVsnprintf") 1432 endif() 1433 1434 check_include_file(sys/socket.h HAVE_SYS_SOCKET_H) 1435 if(HAVE_SYS_SOCKET_H) 1436 set(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h) 1437 endif() 1438 check_type_size(socklen_t SOCKLEN_T_SIZE) 1439 set(CMAKE_EXTRA_INCLUDE_FILES) 1440 if(NOT SOCKLEN_T_SIZE AND NOT ENABLE_BUILD_IOS AND NOT ENABLE_BUILD_ANDROID) 1441 set_config_option(HAVE_NO_SOCKLEN_T "NoSocklenT") 1442 endif() 1443 1444 check_include_file(stdint.h HAVE_STDINT_H) 1445 if(HAVE_STDINT_H) 1446 set(CMAKE_EXTRA_INCLUDE_FILES stdint.h) 1447 else() 1448 set_config_option(HAVE_NO_STDINT_H "NoStdintH") 1449 endif() 1450 check_type_size(intptr_t INTPTR_T_SIZE) 1451 set(CMAKE_EXTRA_INCLUDE_FILES) 1452 if(NOT INTPTR_T_SIZE AND NOT ENABLE_BUILD_IOS AND NOT ENABLE_BUILD_ANDROID) 1453 set_config_option(HAVE_NO_INTPTR_T "NoIntptrT") 1454 endif() 1455 1456 check_include_file(dlfcn.h DLFCN_H) 1457 if(DLFCN_H) 1458 set_config_option(HAVE_DLOPEN "Dlopen") 1459 list(APPEND EXTERNAL_LIBRARIES ${CMAKE_DL_LIBS}) 1460 endif() 1461 1462 if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") 1463 check_include_file(linux/joystick.h LINUX_JOYSTICK_H) 1464 if(LINUX_JOYSTICK_H) 1465 set_config_option(HAVE_LINUX_JOYSTICK "LinuxJoystick") 1466 endif() 1467 endif() 1468 1469 if(WIN32) 1470 add_definitions(-D_USE_MATH_DEFINES) 1471 list(APPEND EXTERNAL_LIBRARIES winmm wsock32 ws2_32 psapi) 1472 endif() 1473 1474 if(MSVC) 1475 add_definitions(-DNOMINMAX -D_CRT_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_DEPRECATE) 1476 endif() 1477 1478 # add C functions API 1479 set(GMSH_SRC ${GMSH_SRC};api/gmshc.cpp) 1480 1481 # force full warnings to encourage everybody to write clean(er) code 1482 check_cxx_compiler_flag("-Wall" WALL) 1483 if(WALL AND NOT MSVC) 1484 file(GLOB_RECURSE WALL_SRC Common/*.cpp Fltk/*.cpp FunctionSpace/*.cpp 1485 Geo/*.cpp Graphics/*.cpp Mesh/*.cpp Numeric/*.cpp Parser/*.cpp 1486 Plugin/*.cpp Post/*.cpp Solver/*.cpp) 1487 set(WF "-Wall") 1488 check_cxx_compiler_flag("-Wint-to-void-pointer-cast" WCAST) 1489 if(WCAST) 1490 set(WF "${WF} -Wno-int-to-void-pointer-cast") 1491 endif() 1492 check_cxx_compiler_flag("-Wdeprecated-declarations" WDEPREC) 1493 if(WDEPREC) 1494 # FIXME: remove this when we have fixed the deprecated GLU code for OpenGL3 1495 set(WF "${WF} -Wno-deprecated-declarations") 1496 endif() 1497 check_cxx_compiler_flag("-Wmisleading-indentation" WIND) 1498 if(WIND) 1499 set(WF "${WF} -Wno-misleading-indentation") 1500 endif() 1501 set_compile_flags(WALL_SRC ${WF}) 1502 endif() 1503 1504 # don't issue warnings for contributed libraries 1505 check_cxx_compiler_flag("-w" NOWARN) 1506 if(NOWARN) 1507 file(GLOB_RECURSE NOWARN_SRC contrib/*.cpp contrib/*.cc contrib/*.cxx contrib/*.c) 1508 set_compile_flags(NOWARN_SRC "-w") 1509 endif() 1510 1511 # disable compile optimization on some known problematic files 1512 check_cxx_compiler_flag("-O0" NOOPT) 1513 if(NOOPT OR ENABLE_BUILD_IOS) 1514 if(ENABLE_BUILD_IOS) # optimized iOS 10 64 bits screws somewhere in Geo 1515 file(GLOB_RECURSE NOOPT_SRC Numeric/robustPredicates.cpp Geo/G*.cpp Mesh/BDS.cpp 1516 Parser/Gmsh.tab.cpp contrib/blossom/* Mesh/Background*) 1517 else() 1518 file(GLOB_RECURSE NOOPT_SRC Numeric/robustPredicates.cpp Mesh/BDS.cpp 1519 Parser/Gmsh.tab.cpp contrib/blossom/* contrib/bamg/* Mesh/Background*) 1520 endif() 1521 set_compile_flags(NOOPT_SRC "-O0") 1522 endif() 1523 1524 # do not use arithmetic contraction in predicates.cpp 1525 # if("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC") 1526 # set_source_files_properties(Numeric/robustPredicates.cpp PROPERTIES 1527 # COMPILE_FLAGS "/fp:strict") 1528 # elseif(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") 1529 # set_source_files_properties(Numeric/robustPredicates.cpp PROPERTIES 1530 # COMPILE_FLAGS "-fno-unsafe-math-optimizations -ffp-contract=off") 1531 # elseif(CMAKE_C_COMPILER_ID STREQUAL "Intel") 1532 # set_source_files_properties(Numeric/robustPredicates.cpp PROPERTIES 1533 # COMPILE_FLAGS "-fp-model strict") 1534 # endif() 1535 1536 # enable Revoropt and set compile flags for the corresponding plugin 1537 if(ENABLE_REVOROPT) 1538 find_path(EIGEN3_INC "eigen3/Eigen/Dense") 1539 if(EIGEN3_INC AND HAVE_MESH AND HAVE_PLUGINS AND HAVE_ANN AND HAVE_ALGLIB) 1540 list(APPEND EXTERNAL_INCLUDES ${EIGEN3_INC} contrib/Revoropt/include) 1541 message(STATUS "using contrib/Revoropt") 1542 set_config_option(HAVE_REVOROPT "Revoropt") 1543 add_definitions(-DUSE_ANN) 1544 get_source_file_property(PROP Plugin/CVTRemesh.cpp COMPILE_FLAGS) 1545 if(PROP) 1546 set_source_files_properties(Plugin/CVTRemesh.cpp PROPERTIES 1547 COMPILE_FLAGS "${PROP} -std=c++11") 1548 else() 1549 set_source_files_properties(Plugin/CVTRemesh.cpp PROPERTIES 1550 COMPILE_FLAGS "-std=c++11") 1551 endif() 1552 else() 1553 message(WARNING "Revoropt requires Eigen3, Mesh, Plugins, ANN and ALGLIB") 1554 endif() 1555 endif() 1556 1557 list(SORT CONFIG_OPTIONS) 1558 set(GMSH_CONFIG_OPTIONS "") 1559 foreach(OPT ${CONFIG_OPTIONS}) 1560 set(GMSH_CONFIG_OPTIONS "${GMSH_CONFIG_OPTIONS} ${OPT}") 1561 endforeach() 1562 1563 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Common/GmshConfig.h.in 1564 ${CMAKE_CURRENT_BINARY_DIR}/Common/GmshConfig.h) 1565 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Common/GmshVersion.h.in 1566 ${CMAKE_CURRENT_BINARY_DIR}/Common/GmshVersion.h) 1567 1568 # the texi version file is modified in the source directory (not ideal, but 1569 # since git tracks the contents of the file this is acceptable as it will only 1570 # change when the actual version is changed - not for each git hash) 1571 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc/texinfo/version.texi.in 1572 ${CMAKE_CURRENT_SOURCE_DIR}/doc/texinfo/version.texi) 1573 1574 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/version.txt 1575 ${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION}.${GMSH_PATCH_VERSION}) 1576 1577 # process cmake environment variables so we can append them to the -I include 1578 # commands. This is not recommended (we should only use the cache variables) but 1579 # it is very convenient: otherwise we have to remember providing the 1580 # -D... options to cmake for each new build. 1581 set(ENV_CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH}) 1582 set(ENV_CMAKE_INCLUDE_PATH $ENV{CMAKE_INCLUDE_PATH}) 1583 if(UNIX) 1584 if(ENV_CMAKE_PREFIX_PATH) 1585 string(REPLACE ":" ";" ENV_CMAKE_PREFIX_PATH ${ENV_CMAKE_PREFIX_PATH}) 1586 endif() 1587 if(ENV_CMAKE_INCLUDE_PATH) 1588 string(REPLACE ":" ";" ENV_CMAKE_INCLUDE_PATH ${ENV_CMAKE_INCLUDE_PATH}) 1589 endif() 1590 endif() 1591 list(APPEND EXTERNAL_INCLUDES ${CMAKE_INCLUDE_PATH} ${ENV_CMAKE_INCLUDE_PATH}) 1592 list(APPEND EXTERNAL_INCLUDES ${CMAKE_PREFIX_PATH} ${ENV_CMAKE_PREFIX_PATH}) 1593 foreach(DIR ${CMAKE_PREFIX_PATH} ${ENV_CMAKE_PREFIX_PATH}) 1594 list(APPEND EXTERNAL_INCLUDES ${DIR}/include) 1595 endforeach() 1596 1597 if(EXTERNAL_INCLUDES) 1598 list(REMOVE_DUPLICATES EXTERNAL_INCLUDES) 1599 endif() 1600 1601 if(HAVE_FLTK) 1602 set(LINK_LIBRARIES ${FLTK_LIBRARIES} ${EXTERNAL_LIBRARIES} 1603 ${OPENGL_LIBRARIES} ${LAPACK_LIBRARIES}) 1604 elseif(HAVE_OPENGL) 1605 set(LINK_LIBRARIES ${EXTERNAL_LIBRARIES} ${OPENGL_LIBRARIES} 1606 ${LAPACK_LIBRARIES}) 1607 else() 1608 set(LINK_LIBRARIES ${EXTERNAL_LIBRARIES} ${LAPACK_LIBRARIES}) 1609 endif() 1610 1611 # try to use static gfortran on static builds (cannot do this on dynamic builds 1612 # as e.g. Debian compiles libgfortran.a without -fPIC: sigh...) 1613 if(NOT ENABLE_BUILD_DYNAMIC AND NOT ENABLE_BUILD_SHARED) 1614 find_library(GFORTRAN_STATIC libgfortran.a) 1615 if(GFORTRAN_STATIC) 1616 set(CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES) 1617 message(STATUS "Using static libgfortran") 1618 foreach(STR ${LINK_LIBRARIES}) 1619 string(REPLACE "-lgfortran" ${GFORTRAN_STATIC} STR2 ${STR}) 1620 list(APPEND LINK_LIBRARIES2 ${STR2}) 1621 endforeach() 1622 set(LINK_LIBRARIES ${LINK_LIBRARIES2}) 1623 endif() 1624 endif() 1625 1626 # Linux-specific linking 1627 if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") 1628 if(HAVE_OCC) 1629 find_library(RT_LIB rt) 1630 if(RT_LIB) 1631 list(APPEND LINK_LIBRARIES ${RT_LIB}) 1632 endif() 1633 endif() 1634 if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Intel") 1635 add_definitions(-fPIC) 1636 endif() 1637 endif() 1638 1639 # we could specify include dirs more selectively, but this is simpler 1640 include_directories(Common Fltk Geo Graphics Mesh Solver Numeric Parser 1641 Plugin Post api ${EXTERNAL_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}/Common) 1642 1643 # set this for external codes that might include this CMakeList file 1644 set(GMSH_EXTERNAL_INCLUDE_DIRS ${EXTERNAL_INCLUDES} CACHE 1645 STRING "External include directories" FORCE) 1646 set(GMSH_EXTERNAL_LIBRARIES ${LINK_LIBRARIES} CACHE 1647 STRING "External libraries" FORCE) 1648 1649 # group sources for easier navigation in IDEs 1650 foreach(DIR ${GMSH_DIRS}) 1651 string(REGEX REPLACE "\\+" "\\\\+" DIR ${DIR}) 1652 source_group(${DIR} REGULAR_EXPRESSION ${DIR}/.*) 1653 endforeach() 1654 1655 # static library target 1656 if(ENABLE_BUILD_LIB) 1657 add_library(lib STATIC ${GMSH_SRC}) 1658 set_target_properties(lib PROPERTIES OUTPUT_NAME gmsh) 1659 if(MSVC) 1660 set_target_properties(lib PROPERTIES DEBUG_POSTFIX d) 1661 if(ENABLE_MSVC_STATIC_RUNTIME) 1662 set_target_properties(lib PROPERTIES LINK_FLAGS_RELEASE "/nodefaultlib:LIBCMT") 1663 endif() 1664 endif() 1665 endif() 1666 1667 # shared library target 1668 if(ENABLE_BUILD_SHARED OR ENABLE_BUILD_DYNAMIC) 1669 add_library(shared SHARED ${GMSH_SRC}) 1670 set_target_properties(shared PROPERTIES OUTPUT_NAME gmsh 1671 VERSION ${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION}.${GMSH_PATCH_VERSION} 1672 SOVERSION ${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION}) 1673 if(WIN32) 1674 set_target_properties(shared PROPERTIES PREFIX "" IMPORT_PREFIX "" 1675 IMPORT_SUFFIX ".lib" COMPILE_FLAGS "-DGMSH_DLL -DGMSH_DLL_EXPORT") 1676 endif() 1677 target_link_libraries(shared ${LINK_LIBRARIES}) 1678 if(MSVC AND ENABLE_MSVC_STATIC_RUNTIME) 1679 message(STATUS "Note: By enabling ENABLE_MSVC_STATIC_RUNTIME, shared library " 1680 "won't link. In MSVC change /MT to /MD in the shared project properties") 1681 endif() 1682 endif() 1683 1684 # binary targets 1685 if(HAVE_FLTK) 1686 if(ENABLE_BUILD_DYNAMIC) 1687 add_executable(gmsh WIN32 Common/Main.cpp) 1688 target_link_libraries(gmsh shared) 1689 else() 1690 add_executable(gmsh WIN32 Common/Main.cpp ${GMSH_SRC}) 1691 endif() 1692 # we could add this to create a minimal app bundle even without install 1693 # if(APPLE AND NOT ENABLE_OS_SPECIFIC_INSTALL) 1694 # set_target_properties(gmsh PROPERTIES MACOSX_BUNDLE ON 1695 # MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/utils/misc/gmsh_dev.plist) 1696 # endif() 1697 else() 1698 if(ENABLE_BUILD_DYNAMIC) 1699 add_executable(gmsh Common/Main.cpp) 1700 target_link_libraries(gmsh shared) 1701 else() 1702 add_executable(gmsh Common/Main.cpp ${GMSH_SRC}) 1703 endif() 1704 endif() 1705 target_link_libraries(gmsh ${LINK_LIBRARIES}) 1706 1707 # Windows specific linker options 1708 if(WIN32 AND NOT MSVC) 1709 set(FLAGS "-Wl,--stack,16777216 -mwindows") 1710 if(HAVE_64BIT_SIZE_T) 1711 set(FLAGS "${FLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/Win64Icon.res") 1712 else() 1713 set(FLAGS "${FLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/Win32Icon.res") 1714 endif() 1715 set_target_properties(gmsh PROPERTIES LINK_FLAGS "${FLAGS} -static") 1716 if(ENABLE_BUILD_DYNAMIC OR ENABLE_BUILD_SHARED) 1717 set_target_properties(shared PROPERTIES LINK_FLAGS -static) 1718 endif() 1719 # remove -Wl,-Bdynamic flags 1720 set(CMAKE_EXE_LINK_DYNAMIC_C_FLAGS) 1721 set(CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS) 1722 elseif(MSVC) 1723 set_target_properties(gmsh PROPERTIES LINK_FLAGS "/STACK:16777216 /SAFESEH:NO") 1724 endif() 1725 1726 # android target 1727 if(ENABLE_BUILD_ANDROID) 1728 find_file(CMAKE_TOOLCHAIN_FILE "android.toolchain.cmake") 1729 if(NOT CMAKE_TOOLCHAIN_FILE) 1730 message(FATAL_ERROR "Cannot compile Gmsh for android without android-cmake") 1731 endif() 1732 add_definitions(-D_GLIBCXX_USE_C99_MATH=1) 1733 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 1734 set(CMAKE_BUILD_TYPE Release) 1735 set(LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_CURRENT_BINARY_DIR}) 1736 set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/libs/) 1737 add_definitions(-DBUILD_ANDROID) 1738 add_definitions(-DPICOJSON_USE_LOCALE=0) 1739 add_library(androidGmsh SHARED ${GMSH_SRC}) 1740 set_target_properties(androidGmsh PROPERTIES OUTPUT_NAME gmsh) 1741 target_link_libraries(androidGmsh ${EXTERNAL_LIBRARIES} ${LAPACK_LIBRARIES}) 1742 add_custom_command(TARGET androidGmsh POST_BUILD COMMAND 1743 ${CMAKE_STRIP} ${LIBRARY_OUTPUT_PATH}/libgmsh.so) 1744 endif() 1745 1746 # parser target 1747 find_program(BISON bison) 1748 find_program(FLEX flex) 1749 if(BISON AND FLEX) 1750 add_custom_target(parser 1751 COMMAND ${BISON} -p gmsh_yy --output Gmsh.tab.cpp -d Gmsh.y 1752 COMMAND ${FLEX} -P gmsh_yy -o Gmsh.yy.cpp Gmsh.l 1753 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Parser) 1754 endif() 1755 1756 if(UNIX) 1757 # cannot use cmake's file search functions here (they would only find files 1758 # existing at configuration time) 1759 add_custom_target(purge 1760 COMMAND rm -f `find . -name *~ -o -name *~~` 1761 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 1762 add_custom_target(etags 1763 COMMAND etags `find . -name *.cpp -o -name *.h -o -name *.y` 1764 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 1765 endif() 1766 1767 if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR 1768 CMAKE_CXX_COMPILER_ID MATCHES "Clang") 1769 execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion 1770 OUTPUT_VARIABLE CXX_COMPILER_VERSION 1771 OUTPUT_STRIP_TRAILING_WHITESPACE) 1772 else() 1773 set(CXX_COMPILER_VERSION "Unknown") 1774 endif() 1775 1776 set(WELCOME_FILE ${CMAKE_CURRENT_SOURCE_DIR}/doc/WELCOME.txt) 1777 set(SDK_FILE ${CMAKE_CURRENT_SOURCE_DIR}/doc/SDK.txt) 1778 set(LICENSE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt) 1779 set(CREDITS_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CREDITS.txt) 1780 set(CHANGELOG_FILE ${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG.txt) 1781 file(GLOB TUTORIAL_GEO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/?*.*) 1782 file(GLOB TUTORIAL_CPP_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/c++/?*.*) 1783 file(GLOB TUTORIAL_C_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/c/?*.*) 1784 file(GLOB TUTORIAL_PY_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/python/?*.*) 1785 file(GLOB TUTORIAL_JL_FILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/julia/?*.*) 1786 file(GLOB DEMOS ${CMAKE_CURRENT_SOURCE_DIR}/demos/*) 1787 foreach(SUBDIR ${DEMOS}) 1788 if(IS_DIRECTORY ${SUBDIR}) 1789 list(APPEND DEMOS_DIRS ${SUBDIR}) 1790 endif() 1791 endforeach() 1792 set(TEX_DIR ${CMAKE_CURRENT_SOURCE_DIR}/doc/texinfo) 1793 file(GLOB TEX_SRC ${TEX_DIR}/*.texi) 1794 set(TEX_OBJ ${TEX_DIR}/gmsh.aux ${TEX_DIR}/gmsh.cp ${TEX_DIR}/gmsh.cps 1795 ${TEX_DIR}/gmsh.fn ${TEX_DIR}/gmsh.html ${TEX_DIR}/gmsh.info ${TEX_DIR}/gmsh.ky 1796 ${TEX_DIR}/gmsh.log ${TEX_DIR}/gmsh.pdf ${TEX_DIR}/gmsh.pg ${TEX_DIR}/gmsh.toc 1797 ${TEX_DIR}/gmsh.tp ${TEX_DIR}/gmsh.tps ${TEX_DIR}/gmsh.txt ${TEX_DIR}/gmsh.vr) 1798 1799 macro(unix2dos VARNAME) 1800 file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unix2dos) 1801 set(UNIX2DOS_FILES) 1802 foreach(FILE ${${VARNAME}}) 1803 file(READ ${FILE} F0) 1804 get_filename_component(N ${FILE} NAME) 1805 if(CYGWIN) 1806 string(REGEX REPLACE "\n" "\r\n" F1 "${F0}") 1807 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/unix2dos/${N} "${F1}") 1808 else() # if not in Cygwin, cmake adds '\r's automatically 1809 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/unix2dos/${N} "${F0}") 1810 endif() 1811 list(APPEND UNIX2DOS_FILES ${CMAKE_CURRENT_BINARY_DIR}/unix2dos/${N}) 1812 endforeach() 1813 set(${VARNAME} ${UNIX2DOS_FILES}) 1814 endmacro() 1815 1816 if(WIN32) 1817 if(ENABLE_OS_SPECIFIC_INSTALL) 1818 set(GMSH_BIN .) 1819 set(GMSH_LIB .) 1820 set(GMSH_DOC .) 1821 set(GMSH_MAN .) 1822 set(GMSH_INC .) 1823 else() 1824 include(GNUInstallDirs) 1825 set(GMSH_BIN ${CMAKE_INSTALL_BINDIR}) 1826 set(GMSH_LIB ${CMAKE_INSTALL_LIBDIR}) 1827 set(GMSH_DOC ${CMAKE_INSTALL_DOCDIR}) 1828 set(GMSH_MAN ${CMAKE_INSTALL_MANDIR}/man1) 1829 set(GMSH_INC ${CMAKE_INSTALL_INCLUDEDIR}) 1830 endif() 1831 if(CYGWIN) 1832 unix2dos(GMSH_API) 1833 if(ENABLE_PRIVATE_API) 1834 unix2dos(GMSH_PRIVATE_API) 1835 endif() 1836 unix2dos(WELCOME_FILE) 1837 unix2dos(SDK_FILE) 1838 unix2dos(LICENSE_FILE) 1839 unix2dos(CREDITS_FILE) 1840 unix2dos(CHANGELOG_FILE) 1841 unix2dos(TUTORIAL_GEO_FILES) 1842 unix2dos(TUTORIAL_CPP_FILES) 1843 unix2dos(TUTORIAL_C_FILES) 1844 unix2dos(TUTORIAL_PY_FILES) 1845 unix2dos(TUTORIAL_JL_FILES) 1846 foreach(DIR ${DEMOS_DIRS}) 1847 file(GLOB DEMO_FILES ${DIR}/?*.*) 1848 unix2dos(DEMO_FILES) 1849 endforeach() 1850 endif() 1851 elseif(APPLE AND ENABLE_OS_SPECIFIC_INSTALL) 1852 # set these so that the files get installed nicely in the MacOSX 1853 # .app bundle 1854 set(GMSH_BIN ../MacOS) 1855 set(GMSH_LIB ../MacOS) 1856 set(GMSH_DOC ../../..) 1857 set(GMSH_MAN ../../..) 1858 set(GMSH_INC ../MacOS) 1859 else() 1860 include(GNUInstallDirs) 1861 set(GMSH_BIN ${CMAKE_INSTALL_BINDIR}) 1862 set(GMSH_LIB ${CMAKE_INSTALL_LIBDIR}) 1863 set(GMSH_DOC ${CMAKE_INSTALL_DOCDIR}) 1864 set(GMSH_MAN ${CMAKE_INSTALL_MANDIR}/man1) 1865 set(GMSH_INC ${CMAKE_INSTALL_INCLUDEDIR}) 1866 endif() 1867 1868 # FIXME: change this once we understand rpaths 1869 if(APPLE) 1870 if(ENABLE_BUILD_DYNAMIC OR ENABLE_BUILD_SHARED) 1871 set_target_properties(shared PROPERTIES INSTALL_NAME_DIR 1872 ${CMAKE_INSTALL_PREFIX}/${GMSH_LIB}) 1873 endif() 1874 endif() 1875 1876 # mark targets as optional so we can install them separately if needed 1877 # (e.g. "make lib" or "make shared" followed by "make install/fast") 1878 install(TARGETS gmsh DESTINATION ${GMSH_BIN} OPTIONAL) 1879 if(ENABLE_BUILD_LIB) 1880 install(TARGETS lib DESTINATION ${GMSH_LIB} OPTIONAL) 1881 endif() 1882 if(ENABLE_BUILD_SHARED OR ENABLE_BUILD_DYNAMIC) 1883 install(TARGETS shared DESTINATION ${GMSH_LIB} OPTIONAL) 1884 endif() 1885 1886 if(ENABLE_ONELAB) 1887 install(FILES ${ONELAB_PY} DESTINATION ${GMSH_BIN}) 1888 endif() 1889 if(ENABLE_BUILD_LIB OR ENABLE_BUILD_SHARED OR ENABLE_BUILD_DYNAMIC) 1890 install(FILES ${GMSH_API} DESTINATION ${GMSH_INC}) 1891 install(FILES ${GMSH_PY} DESTINATION ${GMSH_LIB}) 1892 install(FILES ${GMSH_JL} DESTINATION ${GMSH_LIB}) 1893 if(ENABLE_PRIVATE_API) 1894 install(FILES ${GMSH_PRIVATE_API} DESTINATION ${GMSH_INC}/gmsh) 1895 endif() 1896 endif() 1897 if(INSTALL_SDK_README) 1898 configure_file(${SDK_FILE} ${CMAKE_CURRENT_BINARY_DIR}/README.txt) 1899 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/README.txt DESTINATION .) 1900 endif() 1901 install(FILES ${WELCOME_FILE} DESTINATION ${GMSH_DOC} RENAME README.txt) 1902 install(FILES ${LICENSE_FILE} DESTINATION ${GMSH_DOC}) 1903 install(FILES ${CREDITS_FILE} DESTINATION ${GMSH_DOC}) 1904 install(FILES ${CHANGELOG_FILE} DESTINATION ${GMSH_DOC}) 1905 install(FILES ${TUTORIAL_GEO_FILES} DESTINATION ${GMSH_DOC}/tutorial) 1906 install(FILES ${TUTORIAL_CPP_FILES} DESTINATION ${GMSH_DOC}/tutorial/c++) 1907 install(FILES ${TUTORIAL_C_FILES} DESTINATION ${GMSH_DOC}/tutorial/c) 1908 install(FILES ${TUTORIAL_PY_FILES} DESTINATION ${GMSH_DOC}/tutorial/python) 1909 install(FILES ${TUTORIAL_JL_FILES} DESTINATION ${GMSH_DOC}/tutorial/julia) 1910 foreach(DIR ${DEMOS_DIRS}) 1911 get_filename_component(DEMOS_DIR_NAME ${DIR} NAME) 1912 file(GLOB DEMO_FILES ${DIR}/?*.*) 1913 install(FILES ${DEMO_FILES} DESTINATION ${GMSH_DOC}/demos/${DEMOS_DIR_NAME}) 1914 endforeach() 1915 if(UNIX AND NOT CYGWIN) 1916 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/doc/gmsh.1 DESTINATION ${GMSH_MAN}) 1917 endif() 1918 1919 add_custom_target(get_headers 1920 COMMAND ${CMAKE_COMMAND} -E make_directory Headers/gmsh 1921 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) 1922 foreach(FILE ${GMSH_API}) 1923 add_custom_command(TARGET get_headers POST_BUILD COMMAND ${CMAKE_COMMAND} 1924 -E copy_if_different ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/Headers/ 1925 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 1926 endforeach() 1927 if(ENABLE_PRIVATE_API) 1928 foreach(FILE ${GMSH_PRIVATE_API}) 1929 add_custom_command(TARGET get_headers POST_BUILD COMMAND ${CMAKE_COMMAND} 1930 -E copy_if_different ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/Headers/gmsh/ 1931 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 1932 endforeach() 1933 endif() 1934 1935 find_program(MAKEINFO makeinfo) 1936 if(MAKEINFO) 1937 add_custom_command(OUTPUT ${TEX_DIR}/gmsh.info DEPENDS ${TEX_SRC} 1938 COMMAND ${MAKEINFO} --split-size 1000000 1939 ARGS ${TEX_DIR}/gmsh.texi WORKING_DIRECTORY ${TEX_DIR}) 1940 add_custom_target(info DEPENDS ${TEX_DIR}/gmsh.info) 1941 add_custom_command(OUTPUT ${TEX_DIR}/gmsh.txt DEPENDS ${TEX_SRC} 1942 COMMAND ${MAKEINFO} --plaintext -o gmsh.txt 1943 ARGS ${TEX_DIR}/gmsh.texi WORKING_DIRECTORY ${TEX_DIR}) 1944 add_custom_target(txt DEPENDS ${TEX_DIR}/gmsh.txt) 1945 add_custom_command(OUTPUT ${TEX_DIR}/gmsh.html DEPENDS ${TEX_SRC} 1946 COMMAND ${MAKEINFO} --html --css-ref=http://gmsh.info/gmsh.css 1947 --no-split --set-customization-variable 1948 EXTRA_HEAD='<meta name="viewport" content="width=device-width,initial-scale=1.0">' 1949 ARGS ${TEX_DIR}/gmsh.texi WORKING_DIRECTORY ${TEX_DIR}) 1950 add_custom_target(html DEPENDS ${TEX_DIR}/gmsh.html) 1951 install(FILES ${TEX_DIR}/gmsh.html DESTINATION ${GMSH_DOC} OPTIONAL) 1952 else() 1953 add_custom_target(html COMMAND ${CMAKE_COMMAND} -E touch ${TEX_DIR}/gmsh.html) 1954 endif() 1955 1956 find_program(TEXI2PDF texi2pdf) 1957 if(TEXI2PDF) 1958 add_custom_command(OUTPUT ${TEX_DIR}/gmsh.pdf DEPENDS ${TEX_SRC} 1959 COMMAND ${TEXI2PDF} ARGS gmsh.texi 1960 WORKING_DIRECTORY ${TEX_DIR}) 1961 add_custom_target(pdf DEPENDS ${TEX_DIR}/gmsh.pdf) 1962 install(FILES ${TEX_DIR}/gmsh.pdf DESTINATION ${GMSH_DOC} OPTIONAL) 1963 endif() 1964 1965 execute_process(COMMAND ${CMAKE_COMMAND} -E echo 1966 "@c This file was generated by cmake: do not edit manually!\n${OPT_TEXI}" 1967 OUTPUT_FILE cmake_options.texi) 1968 1969 if(MAKEINFO AND TEXI2PDF) 1970 add_custom_target(doc COMMAND ${CMAKE_COMMAND} -E tar zcf 1971 ${CMAKE_CURRENT_BINARY_DIR}/gmsh-${GMSH_VERSION}-doc.tgz 1972 CREDITS.txt LICENSE.txt CHANGELOG.txt 1973 doc/gmsh.1 doc/texinfo/gmsh.html doc/texinfo/gmsh.info 1974 doc/texinfo/gmsh.pdf doc/texinfo/gmsh.txt 1975 COMMAND ${CMAKE_COMMAND} -E remove ${TEX_OBJ} 1976 DEPENDS ${TEX_DIR}/gmsh.info ${TEX_DIR}/gmsh.txt 1977 ${TEX_DIR}/gmsh.html ${TEX_DIR}/gmsh.pdf 1978 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 1979 endif() 1980 1981 if(MAKEINFO OR TEXI2PDF) 1982 add_custom_target(clean_doc COMMAND ${CMAKE_COMMAND} -E remove ${TEX_OBJ}) 1983 endif() 1984 1985 if(APPLE AND ENABLE_BUILD_LIB) 1986 file(READ ${CMAKE_CURRENT_SOURCE_DIR}/utils/misc/gmsh_framework.plist F0) 1987 string(REPLACE GMSH_VERSION "${GMSH_VERSION}" F1 "${F0}") 1988 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/Info_framework.plist "${F1}") 1989 get_target_property(LIBNAME lib LOCATION) # depracated 1990 #set(LIBNAME $<TARGET_FILE:lib>) # FIXME: use this in the future 1991 add_custom_target(framework DEPENDS lib 1992 COMMAND ${CMAKE_COMMAND} -E remove_directory gmsh.framework 1993 COMMAND ${CMAKE_COMMAND} -E make_directory gmsh.framework/Headers 1994 COMMAND ${CMAKE_COMMAND} -E make_directory gmsh.framework/Resources 1995 COMMAND ${CMAKE_COMMAND} -E copy ${LIBNAME} gmsh.framework/gmsh 1996 COMMAND ${CMAKE_COMMAND} -E copy Info_framework.plist 1997 gmsh.framework/Resources/Info.plist 1998 COMMAND ${CMAKE_COMMAND} -E create_symlink . gmsh.framework/Headers/gmsh 1999 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) 2000 foreach(FILE ${GMSH_API}) 2001 add_custom_command(TARGET framework POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy 2002 ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/gmsh.framework/Headers/ 2003 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 2004 endforeach() 2005 if(ENABLE_PRIVATE_API) 2006 foreach(FILE ${GMSH_PRIVATE_API}) 2007 add_custom_command(TARGET framework POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy 2008 ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/gmsh.framework/Headers/ 2009 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) 2010 endforeach() 2011 endif() 2012 endif() 2013 2014 set(CPACK_PACKAGE_VENDOR "Christophe Geuzaine and Jean-Francois Remacle") 2015 set(CPACK_PACKAGE_VERSION_MAJOR ${GMSH_MAJOR_VERSION}) 2016 set(CPACK_PACKAGE_VERSION_MINOR ${GMSH_MINOR_VERSION}) 2017 set(CPACK_PACKAGE_VERSION_PATCH ${GMSH_PATCH_VERSION}) 2018 set(CPACK_PACKAGE_DESCRIPTION_FILE ${WELCOME_FILE}) 2019 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY 2020 "3D finite element mesh generator with built-in CAD engine and post-processor") 2021 if(GMSH_EXTRA_VERSION MATCHES "-git.*") # so that we'll overwrite the archives 2022 set(CPACK_PACKAGE_FILE_NAME gmsh-git-${GMSH_OS}) 2023 set(CPACK_SOURCE_PACKAGE_FILE_NAME gmsh-git-source) 2024 else() 2025 set(CPACK_PACKAGE_FILE_NAME gmsh-${GMSH_VERSION}-${GMSH_OS}) 2026 set(CPACK_SOURCE_PACKAGE_FILE_NAME gmsh-${GMSH_VERSION}-source) 2027 endif() 2028 set(CPACK_PACKAGE_INSTALL_DIRECTORY "gmsh") 2029 set(CPACK_RESOURCE_FILE_LICENSE ${LICENSE_FILE}) 2030 set(CPACK_RESOURCE_FILE_README ${WELCOME_FILE}) 2031 set(CPACK_RESOURCE_FILE_WELCOME ${WELCOME_FILE}) 2032 set(CPACK_PACKAGE_EXECUTABLE "gmsh") 2033 if(ENABLE_PACKAGE_STRIP) 2034 set(CPACK_STRIP_FILES TRUE) 2035 else() 2036 set(CPACK_STRIP_FILES FALSE) 2037 endif() 2038 set(CPACK_SOURCE_GENERATOR TGZ) 2039 set(CPACK_SOURCE_IGNORE_FILES "${CMAKE_CURRENT_BINARY_DIR}" "/CVS/" "/.svn" "/.git" 2040 "~$" "DS_Store$" "GmshConfig.h$" "GmshVersion.h$" "/benchmarks/" "/tmp/" 2041 "/bin/" "/lib/" "/nightly/" "GPATH" "GRTAGS" "GSYMS" "GTAGS" "/HTML/" 2042 "/contrib/3M/" "/contrib/Parasolid/") 2043 2044 if(UNIX) 2045 # make sure we remove previous installs before doing the next one (on Mac for 2046 # example "make package; make package_source" would lead to huge file lists 2047 # getting generated due to the 'Applications' symlink in the bundle) 2048 set(CPACK_INSTALL_COMMANDS "rm -rf ${CMAKE_CURRENT_BINARY_DIR}/_CPack_Packages") 2049 endif() 2050 2051 if(APPLE AND ENABLE_OS_SPECIFIC_INSTALL) 2052 set(CPACK_GENERATOR Bundle) 2053 set(CPACK_BUNDLE_NAME Gmsh) 2054 file(READ ${CMAKE_CURRENT_SOURCE_DIR}/utils/misc/gmsh_app.plist F0) 2055 string(REPLACE GMSH_VERSION "${GMSH_VERSION}" F1 "${F0}") 2056 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/Info.plist "${F1}") 2057 set(CPACK_BUNDLE_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) 2058 set(CPACK_BUNDLE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIcons.icns) 2059 if(PACKAGER STREQUAL "geuzaine - removed: we sign on a separate machine") 2060 # codesigning requires CMake >= 3.2 2061 set(CPACK_BUNDLE_APPLE_CERT_APP "Developer ID Application: Christophe Geuzaine") 2062 endif() 2063 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsGeo.icns DESTINATION . 2064 RENAME GmshGeo.icns) 2065 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsMsh.icns DESTINATION . 2066 RENAME GmshMsh.icns) 2067 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsSol.icns DESTINATION . 2068 RENAME GmshSol.icns) 2069 install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIconsPos.icns DESTINATION . 2070 RENAME GmshPos.icns) 2071 set(CPACK_PACKAGE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/Fltk/MacIcons.icns) 2072 elseif(WIN32) 2073 set(CPACK_GENERATOR ZIP) 2074 else() 2075 set(CPACK_GENERATOR TGZ) 2076 endif() 2077 2078 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/utils/wrappers/gmshpy AND 2079 ENABLE_PRIVATE_API AND ENABLE_WRAP_PYTHON AND HAVE_PYTHON) 2080 add_subdirectory(utils/wrappers/gmshpy) 2081 endif() 2082 2083 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/utils/wrappers/java AND 2084 ENABLE_PRIVATE_API AND ENABLE_WRAP_JAVA) 2085 add_subdirectory(utils/wrappers/java) 2086 endif() 2087 2088 include(CPack) 2089 2090 if(NOT DISABLE_GMSH_TESTS) 2091 # disabling tests is useful when including this CMakeLists in an external project 2092 include(CTest) 2093 file(GLOB_RECURSE TESTFILES 2094 tutorial/*.geo demos/*.geo benchmarks/?d/*.geo benchmarks/extrude/*.geo 2095 benchmarks/occ/*.geo) 2096 # disable this test for now on our Linux32 machine - the current config 2097 # crashes on the OCC STL generation 2098 if(${GMSH_OS} MATCHES "Linux32") 2099 list(REMOVE_ITEM TESTFILES ${CMAKE_CURRENT_SOURCE_DIR}/tutorial/t18.geo) 2100 endif() 2101 foreach(TESTFILE ${TESTFILES}) 2102 # use relative path for Cygwin/MinGW (the pure win exe built with the MinGW 2103 # compilers does not understand a full Cygwin-style path) 2104 FILE(RELATIVE_PATH TEST ${CMAKE_CURRENT_BINARY_DIR} ${TESTFILE}) 2105 if(HAVE_OCC OR NOT ${TEST} MATCHES "boolean" OR NOT ${TEST} MATCHES "occ") 2106 add_test(${TEST} ./gmsh ${TEST} -3 -nopopup -o ./tmp.msh) 2107 endif() 2108 endforeach() 2109 # test c++ api tutorials with dynamic builds (except on 32 bit windows for 2110 # now: our win32 setup does not currently handle exceptions) 2111 if(ENABLE_BUILD_DYNAMIC AND NOT ${GMSH_OS} MATCHES "Windows32") 2112 file(GLOB_RECURSE TESTFILES tutorial/c++/*.cpp) 2113 foreach(TESTFILE ${TESTFILES}) 2114 get_filename_component(TEST ${TESTFILE} NAME_WE) 2115 add_executable(${TEST} WIN32 ${TESTFILE}) 2116 target_link_libraries(${TEST} shared) 2117 if(WIN32 AND NOT MSVC) 2118 set_target_properties(${TEST} PROPERTIES LINK_FLAGS "-mwindows -static") 2119 endif() 2120 add_test(${TEST}_cpp ${TEST}) 2121 endforeach() 2122 endif() 2123 endif() 2124 2125 message(STATUS "") 2126 message(STATUS "Gmsh ${GMSH_VERSION} has been configured for ${GMSH_OS}") 2127 message(STATUS "") 2128 message(STATUS " * Build options:" ${GMSH_CONFIG_OPTIONS}) 2129 message(STATUS " * Build type: " ${CMAKE_BUILD_TYPE}) 2130 message(STATUS " * C compiler: " ${CMAKE_C_COMPILER}) 2131 message(STATUS " * C++ compiler: " ${CMAKE_CXX_COMPILER}) 2132 message(STATUS " * Install prefix: " ${CMAKE_INSTALL_PREFIX}) 2133 message(STATUS "") 2134 2135 mark_as_advanced(GMSH_EXTRA_VERSION 2136 ACIS_LIB ANN_INC ANN_LIB CAIRO_LIB CAIRO_INC CGNS_INC GMM_INC 2137 GMP_INC GMP_LIB MMG3D_INC MMG3D_LIB HDF5_LIB 2138 MED_LIB OCC_INC SZ_LIB 2139 PETSC_LIBS SLEPC_INC SLEPC_INC2 SLEPC_LIB 2140 BISON FLEX MAKEINFO TEXI2PDF FLTK_CONFIG_SCRIPT 2141 GMSH_EXTERNAL_INCLUDE_DIRS GMSH_EXTERNAL_LIBRARIES) -
../trunk-jpl/packagers/linux/package-issm-linux-binaries-matlab.sh
1 #!/bin/bash 2 3 ################################################################################ 4 # To be used after running, 5 # 6 # ${ISSM_DIR}/jenkins/jenkins.sh ${ISSM_DIR}/jenkins/ross-debian_linux-binaries-matlab 7 # 8 # in the context of a Jenkins project. 9 # 10 # When no runtime errors occur, performs the following: 11 # - Checks resulting executables and libraries against test suite. 12 # - Packages and compresses executables and libraries. 13 # - Transmits it to ISSM Web site for distribution. 14 ################################################################################ 15 16 # Expand aliases within the context of this script 17 shopt -s expand_aliases 18 19 ## Override certain aliases 20 # 21 alias grep=$(which grep) 22 23 ## Constants 24 # 25 LIBGFORTRAN="/usr/lib/x86_64-linux-gnu/libgfortran.so.5.0.0" # Important that this is the library itself 26 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 27 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 28 MATLAB_PATH="/usr/local/MATLAB/R2019b" 29 PKG="ISSM-Linux-MATLAB" # Name of directory to copy distributable files to 30 31 COMPRESSED_PKG="${PKG}.tar.gz" 32 33 ## Environment 34 # 35 export PATH="${ISSM_DIR}/bin:$(getconf PATH)" # Ensure that we pick up binaries from 'bin' directory rather than 'externalpackages' 36 37 ## Parse options 38 # 39 if [ $# -gt 1 ]; then 40 echo "Can use only one option at a time" 41 exit 1 42 fi 43 44 skip_tests=0 45 transfer_only=0 46 while [ $# -gt 0 ]; do 47 case $1 in 48 -s|--skiptests) skip_tests=1; shift ;; 49 -t|--transferonly) transfer_only=1; shift ;; 50 *) echo "Unknown parameter passed: $1"; exit 1 ;; 51 esac 52 shift 53 done 54 55 if [ ${transfer_only} -eq 0 ]; then 56 # Check if MATLAB exists 57 if ! [ -d ${MATLAB_PATH} ]; then 58 echo "${MATLAB_PATH} does not point to a MATLAB installation! Please modify MATLAB_PATH variable in $(basename $0) and try again." 59 exit 1 60 fi 61 62 # Clean up from previous packaging 63 echo "Cleaning up existing assets" 64 cd ${ISSM_DIR} 65 rm -rf ${PKG} ${COMPRESSED_PKG} 66 mkdir ${PKG} 67 68 # Add/modify required binaries and libraries 69 cd ${ISSM_DIR}/bin 70 71 echo "Modify generic" 72 cat generic_static.m | sed -e "s/generic_static/generic/g" > generic.m 73 74 echo "Moving MPICH binaries to bin/" 75 if [ -f ${ISSM_DIR}/externalpackages/petsc/install/bin/mpiexec ]; then 76 cp ${ISSM_DIR}/externalpackages/petsc/install/bin/mpiexec . 77 cp ${ISSM_DIR}/externalpackages/petsc/install/bin/hydra_pmi_proxy . 78 elif [ -f ${ISSM_DIR}/externalpackages/mpich/install/bin/mpiexec ]; then 79 cp ${ISSM_DIR}/externalpackages/mpich/install/bin/mpiexec . 80 cp ${ISSM_DIR}/externalpackages/mpich/install/bin/hydra_pmi_proxy . 81 else 82 echo "MPICH not found" 83 exit 1 84 fi 85 86 echo "Moving GDAL binaries to bin/" 87 if [ -f ${ISSM_DIR}/externalpackages/gdal/install/bin/gdal-config ]; then 88 cp ${ISSM_DIR}/externalpackages/gdal/install/bin/gdalsrsinfo . 89 cp ${ISSM_DIR}/externalpackages/gdal/install/bin/gdaltransform . 90 else 91 echo "GDAL not found" 92 exit 1 93 fi 94 95 echo "Moving GMT binaries to bin/" 96 if [ -f ${ISSM_DIR}/externalpackages/gmt/install/bin/gmt-config ]; then 97 cp ${ISSM_DIR}/externalpackages/gmt/install/bin/gmt . 98 cp ${ISSM_DIR}/externalpackages/gmt/install/bin/gmtselect . 99 else 100 echo "GMT not found" 101 exit 1 102 fi 103 104 echo "Moving Gmsh binaries to bin/" 105 if [ -f ${ISSM_DIR}/externalpackages/gmsh/install/bin/gmsh ]; then 106 cp ${ISSM_DIR}/externalpackages/gmsh/install/bin/gmsh . 107 else 108 echo "Gmsh not found" 109 exit 1 110 fi 111 112 echo "Moving libgfortran to lib/" 113 cp ${LIBGFORTRAN} ${LIBGFORTRAN_DIST} 2> /dev/null 114 115 116 # Run tests 117 if [ ${skip_tests} -eq 0 ]; then 118 echo "Running tests" 119 cd ${ISSM_DIR}/test/NightlyRun 120 rm matlab.log 2> /dev/null 121 122 # Run tests, redirecting output to logfile and suppressing output to console 123 ${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 124 125 # Check that MATLAB did not exit in error 126 matlabExitCode=`echo $?` 127 matlabExitedInError=`grep -E "Activation cannot proceed|license|Error" matlab.log | wc -l` 128 129 if [[ ${matlabExitCode} -ne 0 || ${matlabExitedInError} -ne 0 ]]; then 130 echo "----------MATLAB exited in error!----------" 131 cat matlab.log 132 echo "-----------End of matlab.log-----------" 133 134 # Clean up execution directory 135 rm -rf ${ISSM_DIR}/execution/* 136 137 exit 1 138 fi 139 140 # Check that all tests passed 141 numTestsFailed=`cat matlab.log | grep -c -e "FAILED|ERROR"` 142 143 if [[ ${numTestsFailed} -ne 0 ]]; then 144 echo "One or more tests FAILED" 145 exit 1 146 else 147 echo "All tests PASSED" 148 fi 149 else 150 echo "Skipping tests" 151 fi 152 153 # Create package 154 cd ${ISSM_DIR} 155 svn cleanup --remove-ignored --remove-unversioned test # Clean up test directory (before copying to package) 156 echo "Copying assets to package: ${PKG}" 157 cp -rf bin examples lib scripts test ${PKG}/ 158 mkdir ${PKG}/execution 159 echo "Cleaning up unneeded/unwanted files" 160 rm -f ${PKG}/bin/generic_static.* # Remove static versions of generic cluster classes 161 rm -f ${PKG}/lib/*.a # Remove static libraries from package 162 rm -f ${PKG}/lib/*.la # Remove libtool libraries from package 163 rm -rf ${PKG}/test/SandBox # Remove testing sandbox from package 164 165 # Compress package 166 echo "Compressing package" 167 tar -czf ${COMPRESSED_PKG} ${PKG} 168 ls -lah ${ISSM_DIR}/${COMPRESSED_PKG} 169 fi 170 171 # Transfer package to ISSM Web site 172 echo "Transferring package to ISSM Web site" 173 scp -i ~/.ssh/debian_linux-vm_to_ross ${COMPRESSED_PKG} jenkins@ross.ics.uci.edu:/var/www/html/${COMPRESSED_PKG} 174 175 if [ $? -ne 0 ]; then 176 echo "Transfer failed! Verify connection then build this project again." 177 exit 1 178 fi -
../trunk-jpl/jenkins/ross-debian_linux-binaries-matlab
Property changes on: ../trunk-jpl/packagers/linux/package-issm-linux-binaries-matlab.sh ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property
1 #--------------------# 2 # ISSM Configuration # 3 #--------------------# 4 5 MATLAB_PATH="/usr/local/MATLAB/R2019b" 6 7 # NOTE: 8 # - We can disable dependency tracking in the Autotools because the binaries 9 # should always be a one-time build. 10 # - libgfortran will not be available in $ISSM_DIR/lib at compile time: it is 11 # copied by packaging script. 12 # 13 ISSM_CONFIG='\ 14 --prefix=${ISSM_DIR} \ 15 --enable-standalone-executables \ 16 --enable-standalone-modules \ 17 --enable-standalone-libraries \ 18 --disable-dependency-tracking \ 19 --with-pic \ 20 --with-matlab-dir=${MATLAB_PATH} \ 21 --with-fortran-lib="-L${ISSM_DIR}/lib -lgfortran" \ 22 --with-mpi-include=${ISSM_DIR}/externalpackages/petsc/install/include \ 23 --with-mpi-libflags="-L${ISSM_DIR}/externalpackages/petsc/install/lib -lmpi -lmpicxx -lmpifort" \ 24 --with-blas-lapack-dir=${ISSM_DIR}/externalpackages/petsc/install \ 25 --with-metis-dir=${ISSM_DIR}/externalpackages/petsc/install \ 26 --with-scalapack-dir=${ISSM_DIR}/externalpackages/petsc/install \ 27 --with-mumps-dir=${ISSM_DIR}/externalpackages/petsc/install \ 28 --with-hdf5-dir=${ISSM_DIR}/externalpackages/petsc/install \ 29 --with-petsc-dir=${ISSM_DIR}/externalpackages/petsc/install \ 30 --with-gsl-dir=${ISSM_DIR}/externalpackages/gsl/install \ 31 --with-boost-dir=${ISSM_DIR}/externalpackages/boost/install \ 32 --with-dakota-dir=${ISSM_DIR}/externalpackages/dakota/install \ 33 --with-triangle-dir=${ISSM_DIR}/externalpackages/triangle/install \ 34 --with-chaco-dir=${ISSM_DIR}/externalpackages/chaco/install \ 35 --with-m1qn3-dir=${ISSM_DIR}/externalpackages/m1qn3/install \ 36 --with-semic-dir=${ISSM_DIR}/externalpackages/semic/install \ 37 ' 38 #-------------------# 39 # External Packages # 40 #-------------------# 41 42 EXTERNALPACKAGES=" 43 autotools install-debian-linux.sh 44 cmake install.sh 45 petsc install-3.12-linux-static.sh 46 gsl install-static.sh 47 boost install-1.7-linux-static.sh 48 dakota install-6.2-linux-static.sh 49 curl install-7-static.sh 50 netcdf install-4.7-parallel-static.sh 51 proj install-6.2-static.sh 52 gdal install-3-netcdf-static.sh 53 gshhg install.sh 54 gmt install-6-linux-static.sh 55 gmsh install-4-linux-static.sh 56 triangle install-linux-static.sh 57 chaco install.sh 58 m1qn3 install.sh 59 semic install.sh 60 shell2junit install.sh 61 " 62 63 #---------# 64 # Testing # 65 #---------# 66 67 # Test suites 68 MATLAB_TEST=0 69 PYTHON_TEST=0 70 JAVASCRIPT_TEST=0 71 EXAMPLES_TEST=0 72 73 # Number of CPUs used in ISSM compilation 74 # 75 # NOTE: One is usually safer as some packages are very sensitive to parallel 76 # compilation. 77 # 78 NUMCPUS_INSTALL=8 79 80 # Number of CPUs used in the nightly runs 81 NUMCPUS_RUN=1 82 83 # Nightly run options 84 # 85 # See documentation in test/NightlyRun/runme.* for more information. 86 # 87 MATLAB_NROPTIONS="" 88 PYTHON_NROPTIONS=""
Note:
See TracBrowser
for help on using the repository browser.