Skip to content
Snippets Groups Projects
Find.cmake 3.78 KiB
Newer Older
  • Learn to ignore specific revisions
  • # ##############################################################################
    # Find tools
    # ##############################################################################
    
    Lars Bilke's avatar
    Lars Bilke committed
    string(REPLACE ".windows.1" "" GIT_VERSION_STRING ${GIT_VERSION_STRING})
    if(${GIT_VERSION_STRING} VERSION_LESS ${ogs.minimum_version.git})
        message(FATAL_ERROR "Git version ${ogs.minimum_version.git} is required. \
    
            Found version ${GIT_VERSION_STRING}."
        )
    
    Lars Bilke's avatar
    Lars Bilke committed
    endif()
    
    
    find_package(Doxygen OPTIONAL_COMPONENTS dot)
    
    find_program(GPROF_PATH gprof DOC "GNU profiler gprof" QUIET)
    
    find_program(CPPCHECK_TOOL_PATH cppcheck)
    
    # Find bash itself ...
    
    find_program(
        BASH_TOOL_PATH bash HINTS ${GITHUB_BIN_DIR} DOC "The bash executable"
    )
    
    find_program(CURL_TOOL_PATH curl DOC "The curl-tool")
    
    find_program(S3CMD_TOOL_PATH s3cmd DOC "S3cmd tool for uploading to Amazon S3")
    
    
    if(WIN32)
        find_program(CLCACHE_TOOL_PATH clcache)
    else()
        find_program(CCACHE_TOOL_PATH ccache)
    endif()
    
    # Tools for web
    
    find_program(
        VTKJS_CONVERTER vtkDataConverter
        PATHS ${PROJECT_SOURCE_DIR}/web/node_modules/.bin
    )
    
    find_program(HUGO hugo)
    find_program(NPM npm)
    find_program(YARN yarn)
    find_program(PIP pip)
    
    find_program(PANDOC_CITEPROC pandoc-citeproc)
    
    find_program(MODULE_CMD lmod PATHS /software/lmod/lmod/libexec)
    
    find_program(SNAKEMAKE snakemake HINTS ${LOCAL_VIRTUALENV_BIN_DIRS})
    
    # ##############################################################################
    # Find libraries
    # ##############################################################################
    
    if(OGS_USE_MFRONT)
    
        # pthread, is a requirement of mfront ##
    
        set(CMAKE_THREAD_PREFER_PTHREAD ON)
        set(THREADS_PREFER_PTHREAD_FLAG ON)
        find_package(Threads REQUIRED)
        if(CMAKE_USE_PTHREADS_INIT)
            set(HAVE_PTHREADS TRUE)
            add_definitions(-DHAVE_PTHREADS)
        endif()
    
        if(OGS_USE_CONAN)
    
            # cmake-lint: disable=C0103
    
            set(TFELHOME ${CONAN_TFEL_ROOT} CACHE INTERNAL "")
    
    # Do not search for libs if this option is set
    
    if(OGS_NO_EXTERNAL_LIBS)
    
    endif() # OGS_NO_EXTERNAL_LIBS
    
    find_package(OpenMP)
    
    if(OPENMP_FOUND)
    
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
    
        set(CMAKE_EXE_LINKER_FLAGS
            "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}"
        )
    
    # Qt5 library ##
    
    if(OGS_BUILD_GUI)
    
        set(QT_MODULES Gui Widgets Xml XmlPatterns)
    
    Lars Bilke's avatar
    Lars Bilke committed
        if(UNIX AND NOT APPLE)
            list(APPEND QT_MODULES X11Extras)
    
        find_package(Qt5 ${ogs.minimum_version.qt} REQUIRED ${QT_MODULES})
    
        cmake_policy(SET CMP0020 NEW)
    
    endif()
    
    if(OGS_USE_NETCDF)
        set(NETCDF_ROOT ${CONAN_NETCDF-C_ROOT})
        set(NETCDF_CXX_ROOT ${CONAN_NETCDF-CXX_ROOT})
        find_package(NetCDF REQUIRED)
    
        add_compile_options(-DOGS_USE_NETCDF)
    
    find_package(LAPACK QUIET)
    
    # geotiff ##
    
    find_package(GEOTIFF)
    
        find_package(LIS REQUIRED)
    
    if(OGS_USE_MKL)
    
        find_package(MKL REQUIRED)
    
    if(OGS_USE_PETSC)
    
        message(STATUS "Configuring for PETSc")
    
        option(FORCE_PETSC_EXECUTABLE_RUNS
    
               "Force CMake to accept a given PETSc configuration" ON
        )
    
        # Force CMake to accept a given PETSc configuration in case the failure of
        # MPI tests. This may cause the compilation broken.
    
        if(FORCE_PETSC_EXECUTABLE_RUNS)
            set(PETSC_EXECUTABLE_RUNS YES)
        endif()
    
        find_package(PETSc ${ogs.minimum_version.petsc} REQUIRED)
    
        include_directories(SYSTEM ${PETSC_INCLUDES})
    
    # Check MPI package
    
        find_package(MPI REQUIRED)
    
    find_package(Filesystem REQUIRED COMPONENTS Final Experimental)
    
    configure_file(
        ${PROJECT_SOURCE_DIR}/BaseLib/filesystem.h.in
        ${PROJECT_BINARY_DIR}/BaseLib/filesystem.h
    )