Skip to content
Snippets Groups Projects
Verified Commit 715ee8f1 authored by Lars Bilke's avatar Lars Bilke
Browse files

[cmake-format] Remaining cmake files.

parent a155fe83
No related branches found
No related tags found
No related merge requests found
Showing
with 583 additions and 443 deletions
...@@ -26,12 +26,6 @@ repos: ...@@ -26,12 +26,6 @@ repos:
language: system language: system
files: '.*\.cpp' files: '.*\.cpp'
stages: [commit, manual] stages: [commit, manual]
- id: cmake-format
name: Format CMake files
entry: scripts/hooks/pre-commit-cmake-format.sh
language: system
files: 'CMakeLists.txt'
stages: [commit, manual]
- repo: https://github.com/ambv/black - repo: https://github.com/ambv/black
rev: stable rev: stable
hooks: hooks:
...@@ -47,7 +41,7 @@ repos: ...@@ -47,7 +41,7 @@ repos:
hooks: hooks:
- id: cmake-format - id: cmake-format
additional_dependencies: ["cmakelang[YAML]"] additional_dependencies: ["cmakelang[YAML]"]
exclude: '.*' # Disabled for now exclude: 'scripts/cmake/jedbrown/.*|PackagingMacros.cmake|conan.cmake|CPM.cmake|FindFilesystem.cmake|ConanSetup.cmake|Tests.cmake'
- id: cmake-lint - id: cmake-lint
additional_dependencies: ["cmakelang[YAML]"] additional_dependencies: ["cmakelang[YAML]"]
exclude: 'scripts/cmake/jedbrown/.*|PackagingMacros.cmake|conan.cmake|CPM.cmake|FindFilesystem.cmake|ConanSetup.cmake' exclude: 'scripts/cmake/jedbrown/.*|PackagingMacros.cmake|conan.cmake|CPM.cmake|FindFilesystem.cmake|ConanSetup.cmake'
# Source files # Source files
set(SOURCES set(SOURCES mainwindow.cpp mainwindow.h
mainwindow.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Img/icons.qrc
mainwindow.h
${CMAKE_CURRENT_SOURCE_DIR}/Img/icons.qrc
) )
set(SOURCE_DIR_REL ${CMAKE_CURRENT_SOURCE_DIR}/../..) set(SOURCE_DIR_REL ${CMAKE_CURRENT_SOURCE_DIR}/../..)
...@@ -23,15 +21,10 @@ source_group("UI Files" FILES ${UIS}) ...@@ -23,15 +21,10 @@ source_group("UI Files" FILES ${UIS})
set(APP_ICON ${SOURCE_DIR_REL}/scripts/packaging/ogs-de-icon.icns) set(APP_ICON ${SOURCE_DIR_REL}/scripts/packaging/ogs-de-icon.icns)
# Create the executable # Create the executable
add_executable(DataExplorer add_executable(DataExplorer main.cpp ${SOURCES} ${UIS} ${APP_ICON} exe-icon.rc)
main.cpp
${SOURCES}
${UIS}
${APP_ICON}
exe-icon.rc
)
target_link_libraries(DataExplorer target_link_libraries(
DataExplorer
BaseLib BaseLib
GeoLib GeoLib
GitInfoLib GitInfoLib
...@@ -64,12 +57,14 @@ if(OGS_USE_CONAN AND WIN32) ...@@ -64,12 +57,14 @@ if(OGS_USE_CONAN AND WIN32)
endif() endif()
if(GEOTIFF_FOUND) if(GEOTIFF_FOUND)
target_link_libraries(DataExplorer ${GEOTIFF_LIBRARIES} ) target_link_libraries(DataExplorer ${GEOTIFF_LIBRARIES})
endif() endif()
if(MSVC) if(MSVC)
# Set linker flags # Set linker flags
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:MSVCRT /IGNORE:4099") set(CMAKE_EXE_LINKER_FLAGS_DEBUG
"${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:MSVCRT /IGNORE:4099"
)
target_link_libraries(DataExplorer winmm) target_link_libraries(DataExplorer winmm)
endif() endif()
...@@ -78,11 +73,15 @@ set_property(TARGET DataExplorer PROPERTY FOLDER "DataExplorer") ...@@ -78,11 +73,15 @@ set_property(TARGET DataExplorer PROPERTY FOLDER "DataExplorer")
# ---- Installation ---- # ---- Installation ----
install(TARGETS DataExplorer RUNTIME DESTINATION bin) install(TARGETS DataExplorer RUNTIME DESTINATION bin)
cpack_add_component(ogs_gui cpack_add_component(
ogs_gui
DISPLAY_NAME "OGS Data Explorer" DISPLAY_NAME "OGS Data Explorer"
DESCRIPTION "The graphical user interface for OpenGeoSys." DESCRIPTION "The graphical user interface for OpenGeoSys."
GROUP Applications GROUP Applications
) )
set(CPACK_PACKAGE_EXECUTABLES ${CPACK_PACKAGE_EXECUTABLES} "DataExplorer" "OGS Data Explorer" PARENT_SCOPE) set(CPACK_PACKAGE_EXECUTABLES ${CPACK_PACKAGE_EXECUTABLES} "DataExplorer"
set(CPACK_NSIS_MENU_LINKS ${CPACK_NSIS_MENU_LINKS} "bin/DataExplorer.exe" "Data Explorer" PARENT_SCOPE) "OGS Data Explorer" PARENT_SCOPE
)
set(CPACK_NSIS_MENU_LINKS ${CPACK_NSIS_MENU_LINKS} "bin/DataExplorer.exe"
"Data Explorer" PARENT_SCOPE
)
...@@ -4,14 +4,15 @@ endif() ...@@ -4,14 +4,15 @@ endif()
# Check ccache version # Check ccache version
set(CCACHE_VERSION_REQUIRED 3.2.0) set(CCACHE_VERSION_REQUIRED 3.2.0)
execute_process(COMMAND ${CCACHE_TOOL_PATH} --version execute_process(
OUTPUT_VARIABLE CCACHE_VERSION COMMAND ${CCACHE_TOOL_PATH} --version OUTPUT_VARIABLE CCACHE_VERSION
) )
set(CCACHE_VERSION_GREATER_EQUAL_3_2_5 ON) set(CCACHE_VERSION_GREATER_EQUAL_3_2_5 ON)
if("${CCACHE_VERSION}" MATCHES "ccache version ([0-9]\\.[0-9]\\.[0-9])") if("${CCACHE_VERSION}" MATCHES "ccache version ([0-9]\\.[0-9]\\.[0-9])")
if(${CMAKE_MATCH_1} VERSION_LESS ${CCACHE_VERSION_REQUIRED}) if(${CMAKE_MATCH_1} VERSION_LESS ${CCACHE_VERSION_REQUIRED})
message(STATUS "CCache outdated. Installed: ${CMAKE_MATCH_1}, \ message(STATUS "CCache outdated. Installed: ${CMAKE_MATCH_1}, \
required: ${CCACHE_VERSION_REQUIRED}. Caching disabled.") required: ${CCACHE_VERSION_REQUIRED}. Caching disabled."
)
return() return()
endif() endif()
if(${CMAKE_MATCH_1} VERSION_LESS 3.2.5) if(${CMAKE_MATCH_1} VERSION_LESS 3.2.5)
...@@ -28,27 +29,33 @@ if(COMPILER_IS_CLANG) ...@@ -28,27 +29,33 @@ if(COMPILER_IS_CLANG)
endif() endif()
# Check ccache pre-compiled headers config # Check ccache pre-compiled headers config
execute_process(COMMAND ${CCACHE_TOOL_PATH} -p execute_process(
COMMAND ${CCACHE_TOOL_PATH} -p
OUTPUT_VARIABLE CCACHE_CONFIG OUTPUT_VARIABLE CCACHE_CONFIG
ERROR_VARIABLE CCACHE_CONFIG ERROR_VARIABLE CCACHE_CONFIG
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
) )
string(REGEX MATCH ".*time_macros.*" string(REGEX MATCH ".*time_macros.*" COTIRE_CCACHE_CONFIG_TIME_MACROS
COTIRE_CCACHE_CONFIG_TIME_MACROS ${CCACHE_CONFIG} ${CCACHE_CONFIG}
) )
string(REGEX MATCH ".*pch_defines.*" string(REGEX MATCH ".*pch_defines.*" COTIRE_CCACHE_CONFIG_PCH_DEFINES
COTIRE_CCACHE_CONFIG_PCH_DEFINES ${CCACHE_CONFIG} ${CCACHE_CONFIG}
) )
# Regex should be "sloppiness.*time_macros.*pch_defines.*" but due to bug fixed # Regex should be "sloppiness.*time_macros.*pch_defines.*" but due to bug fixed
# in https://ccache.samba.org/releasenotes.html#_ccache_3_2_5 we have to leave # in https://ccache.samba.org/releasenotes.html#_ccache_3_2_5 we have to leave
# out pch_defines if ccache version is older than 3.2.5. # out pch_defines if ccache version is older than 3.2.5. Ubuntu 16.04 comes with
# Ubuntu 16.04 comes with ccache 3.2.4 ... # ccache 3.2.4 ...
if(NOT COTIRE_CCACHE_CONFIG_TIME_MACROS OR (CCACHE_VERSION_GREATER_EQUAL_3_2_5 AND NOT COTIRE_CCACHE_CONFIG_PCH_DEFINES)) if(NOT COTIRE_CCACHE_CONFIG_TIME_MACROS
message(FATAL_ERROR "CCache configuration does not set sloppiness to pch_defines,time_macros. \ OR (CCACHE_VERSION_GREATER_EQUAL_3_2_5 AND NOT
COTIRE_CCACHE_CONFIG_PCH_DEFINES)
)
message(
FATAL_ERROR
"CCache configuration does not set sloppiness to pch_defines,time_macros. \
Current options are: '${CCACHE_CONFIG}'. \ Current options are: '${CCACHE_CONFIG}'. \
See https://docs.opengeosys.org/docs/devguide/advanced/using-ccache") See https://docs.opengeosys.org/docs/devguide/advanced/using-ccache"
)
endif() endif()
# Disallow in-source builds as the git project cluttered with generated files # Disallow in-source builds as the git project cluttered with generated files
# probably confuses people. source/build* is still allowed! # probably confuses people. source/build* is still allowed!
if("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}") if("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}")
message(FATAL_ERROR "In-source builds are not allowed!\n" message(
"Make sure to remove CMakeCache.txt and CMakeFiles/ " FATAL_ERROR
"from the source directory!") "In-source builds are not allowed!\n"
"Make sure to remove CMakeCache.txt and CMakeFiles/ "
"from the source directory!"
)
endif() endif()
# Set additional CMake modules path # Set additional CMake modules path
...@@ -13,17 +16,21 @@ CPMAddPackage( ...@@ -13,17 +16,21 @@ CPMAddPackage(
GIT_TAG cdc041689061fbb2df086b059fe71ac868cf626d GIT_TAG cdc041689061fbb2df086b059fe71ac868cf626d
DOWNLOAD_ONLY YES DOWNLOAD_ONLY YES
) )
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} set(CMAKE_MODULE_PATH
"${PROJECT_SOURCE_DIR}/scripts/cmake" ${CMAKE_MODULE_PATH}
"${PROJECT_SOURCE_DIR}/scripts/cmake/jedbrown" "${PROJECT_SOURCE_DIR}/scripts/cmake"
"${PROJECT_SOURCE_DIR}/scripts/cmake/vector-of-bool" "${PROJECT_SOURCE_DIR}/scripts/cmake/jedbrown"
"${cmake-modules_SOURCE_DIR}" "${PROJECT_SOURCE_DIR}/scripts/cmake/vector-of-bool"
"${cmake-modules_SOURCE_DIR}"
) )
list(APPEND CMAKE_PREFIX_PATH list(
$ENV{HOMEBREW_ROOT} # Homebrew package manager on Mac OS APPEND
$ENV{CMAKE_LIBRARY_SEARCH_PATH} # Environment variable, Windows CMAKE_PREFIX_PATH
${CMAKE_LIBRARY_SEARCH_PATH}) # CMake option, Windows $ENV{HOMEBREW_ROOT} # Homebrew package manager on Mac OS
$ENV{CMAKE_LIBRARY_SEARCH_PATH} # Environment variable, Windows
${CMAKE_LIBRARY_SEARCH_PATH}
) # CMake option, Windows
# Load additional modules # Load additional modules
include(GNUInstallDirs) include(GNUInstallDirs)
...@@ -38,11 +45,14 @@ if(NOT PROJECT_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) ...@@ -38,11 +45,14 @@ if(NOT PROJECT_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
endif() endif()
if((NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) if((NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
OR (NOT CMAKE_BUILD_TYPE AND MSVC AND OGS_USE_CONAN)) OR (NOT CMAKE_BUILD_TYPE AND MSVC AND OGS_USE_CONAN)
)
message(STATUS "Setting build type to 'Debug' as none was specified.") message(STATUS "Setting build type to 'Debug' as none was specified.")
set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE) set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS set_property(
"Debug" "Release" "MinSizeRel" "RelWithDebInfo") CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel"
"RelWithDebInfo"
)
endif() endif()
# Get the hostname # Get the hostname
......
...@@ -2,12 +2,15 @@ ...@@ -2,12 +2,15 @@
get_directory_property(INCLUDE_DIRS INCLUDE_DIRECTORIES) get_directory_property(INCLUDE_DIRS INCLUDE_DIRECTORIES)
set(CMAKE_REQUIRED_FLAGS "-c") set(CMAKE_REQUIRED_FLAGS "-c")
add_custom_target(check-header add_custom_target(
check-header
COMMAND ${CMAKE_COMMAND} -E remove -f CMakeFiles/CMakeError.log COMMAND ${CMAKE_COMMAND} -E remove -f CMakeFiles/CMakeError.log
COMMAND ${CMAKE_COMMAND} . -DOGS_CHECK_HEADER_COMPILATION=ON COMMAND ${CMAKE_COMMAND} . -DOGS_CHECK_HEADER_COMPILATION=ON
COMMAND ${CMAKE_COMMAND} . -DOGS_CHECK_HEADER_COMPILATION=OFF || true COMMAND ${CMAKE_COMMAND} . -DOGS_CHECK_HEADER_COMPILATION=OFF || true
COMMAND if [ -f CMakeFiles/CMakeError.log ]\; then cat CMakeFiles/CMakeError.log\; return 1\; else return 0\; fi\; COMMAND
WORKING_DIRECTOY ${PROJECT_BINARY_DIR} if [ -f CMakeFiles/CMakeError.log ]\; then cat
CMakeFiles/CMakeError.log\; return 1\; else return 0\; fi\;
WORKING_DIRECTOY ${PROJECT_BINARY_DIR}
COMMENT "Checking header files" COMMENT "Checking header files"
USES_TERMINAL USES_TERMINAL
) )
...@@ -56,10 +59,9 @@ function(_check_header_compilation target) ...@@ -56,10 +59,9 @@ function(_check_header_compilation target)
set(CMAKE_REQUIRED_INCLUDES ${INCLUDE_DIRS} ${SOURCE_DIR}) set(CMAKE_REQUIRED_INCLUDES ${INCLUDE_DIRS} ${SOURCE_DIR})
# HACK, maybe add Gui Widgets Xml XmlPatterns as well # HACK, maybe add Gui Widgets Xml XmlPatterns as well
if(OGS_BUILD_GUI) if(OGS_BUILD_GUI)
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} set(CMAKE_REQUIRED_INCLUDES
${Qt5Core_INCLUDE_DIRS} ${CMAKE_REQUIRED_INCLUDES} ${Qt5Core_INCLUDE_DIRS}
${Qt5Gui_INCLUDE_DIRS} ${Qt5Gui_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS}
${Qt5Widgets_INCLUDE_DIRS}
) )
endif() endif()
set(CMAKE_REQUIRED_DEFINITIONS ${DEFS_CLEANED}) set(CMAKE_REQUIRED_DEFINITIONS ${DEFS_CLEANED})
...@@ -135,6 +137,9 @@ function(check_header_compilation) ...@@ -135,6 +137,9 @@ function(check_header_compilation)
endif() endif()
if(_HEADER_COMPILE_ERROR) if(_HEADER_COMPILE_ERROR)
message(FATAL_ERROR "... header compilation check failed, see CMakeFiles/CMakeError.log for details!") message(
FATAL_ERROR
"... header compilation check failed, see CMakeFiles/CMakeError.log for details!"
)
endif() endif()
endfunction() endfunction()
...@@ -3,7 +3,9 @@ if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.6") ...@@ -3,7 +3,9 @@ if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.6")
endif() endif()
option(OGS_ADDRESS_SANITIZER OFF "Use Clangs AddressSanitizer") option(OGS_ADDRESS_SANITIZER OFF "Use Clangs AddressSanitizer")
option(OGS_UNDEFINED_BEHAVIOR_SANITIZER OFF "Use Clangs UndefinedBehaviorSanitizer") option(OGS_UNDEFINED_BEHAVIOR_SANITIZER OFF
"Use Clangs UndefinedBehaviorSanitizer"
)
if(OGS_ADDRESS_SANITIZER) if(OGS_ADDRESS_SANITIZER)
set(SANITIZE_FLAG_VALUE "address") set(SANITIZE_FLAG_VALUE "address")
...@@ -11,7 +13,9 @@ if(OGS_ADDRESS_SANITIZER) ...@@ -11,7 +13,9 @@ if(OGS_ADDRESS_SANITIZER)
endif() endif()
if(OGS_UNDEFINED_BEHAVIOR_SANITIZER) if(OGS_UNDEFINED_BEHAVIOR_SANITIZER)
set(SANITIZE_FLAG_VALUE "${SANITIZE_FLAG_VALUE},undefined,integer;-fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/scripts/test/clang_sanitizer_blacklist.txt") set(SANITIZE_FLAG_VALUE
"${SANITIZE_FLAG_VALUE},undefined,integer;-fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/scripts/test/clang_sanitizer_blacklist.txt"
)
endif() endif()
if(DEFINED SANITIZE_FLAG_VALUE) if(DEFINED SANITIZE_FLAG_VALUE)
......
...@@ -3,7 +3,9 @@ set(CMAKE_CXX_STANDARD 20) ...@@ -3,7 +3,9 @@ set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_EXTENSIONS OFF)
if(${CMAKE_CXX_COMPILER} MATCHES "clcache" AND CMAKE_BUILD_TYPE STREQUAL "Debug") if(${CMAKE_CXX_COMPILER} MATCHES "clcache" AND CMAKE_BUILD_TYPE STREQUAL
"Debug"
)
message(WARNING "clcache does not cache in Debug config!") message(WARNING "clcache does not cache in Debug config!")
endif() endif()
...@@ -21,7 +23,7 @@ elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC") ...@@ -21,7 +23,7 @@ elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC")
set(COMPILER_IS_MSVC TRUE CACHE BOOL "") set(COMPILER_IS_MSVC TRUE CACHE BOOL "")
endif() # CMAKE_CXX_COMPILER_ID endif() # CMAKE_CXX_COMPILER_ID
### GNU-like compiler # GNU-like compiler
if(COMPILER_IS_GCC OR COMPILER_IS_CLANG OR COMPILER_IS_INTEL) if(COMPILER_IS_GCC OR COMPILER_IS_CLANG OR COMPILER_IS_INTEL)
if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
message(STATUS "Set release compiler flags") message(STATUS "Set release compiler flags")
...@@ -29,39 +31,36 @@ if(COMPILER_IS_GCC OR COMPILER_IS_CLANG OR COMPILER_IS_INTEL) ...@@ -29,39 +31,36 @@ if(COMPILER_IS_GCC OR COMPILER_IS_CLANG OR COMPILER_IS_INTEL)
elseif(NOT STL_NO_DEBUG) elseif(NOT STL_NO_DEBUG)
# Enable assertions in STL in debug mode. # Enable assertions in STL in debug mode.
add_compile_options( add_compile_options(
-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_ASSERT -D_GLIBCXX_DEBUG_PEDASSERT
-D_GLIBCXX_DEBUG_ASSERT
-D_GLIBCXX_DEBUG_PEDASSERT
-D_GLIBCXX_DEBUG_VERIFY -D_GLIBCXX_DEBUG_VERIFY
) )
endif() endif()
# Coloring output # Coloring output
option (FORCE_COLORED_OUTPUT "Always produce ANSI-colored output (GNU/Clang only)." ON) option(FORCE_COLORED_OUTPUT
if (${FORCE_COLORED_OUTPUT}) "Always produce ANSI-colored output (GNU/Clang only)." ON
if (COMPILER_IS_GCC) )
add_compile_options (-fdiagnostics-color=always) if(${FORCE_COLORED_OUTPUT})
elseif (COMPILER_IS_CLANG) if(COMPILER_IS_GCC)
add_compile_options (-fcolor-diagnostics) add_compile_options(-fdiagnostics-color=always)
endif () elseif(COMPILER_IS_CLANG)
add_compile_options(-fcolor-diagnostics)
endif()
endif() endif()
# Profiling # Profiling
if(OGS_PROFILE) if(OGS_PROFILE)
if(NOT CMAKE_BUILD_TYPE STREQUAL "Release") if(NOT CMAKE_BUILD_TYPE STREQUAL "Release")
message(STATUS "When using profiling you should set CMAKE_BUILD_TYPE \ message(
to Release.") STATUS "When using profiling you should set CMAKE_BUILD_TYPE \
to Release."
)
endif() endif()
set(PROFILE_FLAGS set(PROFILE_FLAGS -pg -fno-omit-frame-pointer -O2 -DNDEBUG)
-pg
-fno-omit-frame-pointer
-O2
-DNDEBUG
)
# clang compiler does not know the following flags # clang compiler does not know the following flags
if(NOT COMPILER_IS_CLANG) if(NOT COMPILER_IS_CLANG)
set(PROFILE_FLAGS ${PROFILE_FLAGS} set(PROFILE_FLAGS
-fno-inline-functions-called-once ${PROFILE_FLAGS} -fno-inline-functions-called-once
-fno-optimize-sibling-calls -fno-optimize-sibling-calls
) )
endif() endif()
...@@ -78,9 +77,13 @@ if(COMPILER_IS_GCC OR COMPILER_IS_CLANG OR COMPILER_IS_INTEL) ...@@ -78,9 +77,13 @@ if(COMPILER_IS_GCC OR COMPILER_IS_CLANG OR COMPILER_IS_INTEL)
if(COMPILER_IS_GCC) if(COMPILER_IS_GCC)
if(NOT "${HOSTNAME}" MATCHES "frontend.*") # TODO: remove later if(NOT "${HOSTNAME}" MATCHES "frontend.*") # TODO: remove later
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${ogs.minimum_version.gcc}) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS
message(FATAL_ERROR "Aborting: GCC ${ogs.minimum_version.gcc} is \ ${ogs.minimum_version.gcc}
required! Found version ${CMAKE_CXX_COMPILER_VERSION}.") )
message(
FATAL_ERROR "Aborting: GCC ${ogs.minimum_version.gcc} is \
required! Found version ${CMAKE_CXX_COMPILER_VERSION}."
)
endif() endif()
endif() endif()
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fext-numeric-literals>) add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fext-numeric-literals>)
...@@ -88,38 +91,57 @@ if(COMPILER_IS_GCC OR COMPILER_IS_CLANG OR COMPILER_IS_INTEL) ...@@ -88,38 +91,57 @@ if(COMPILER_IS_GCC OR COMPILER_IS_CLANG OR COMPILER_IS_INTEL)
endif() endif()
if(COMPILER_IS_CLANG) if(COMPILER_IS_CLANG)
# see https://en.wikipedia.org/wiki/Xcode#Xcode_7.0_-_12.x_(since_Free_On-Device_Development) # see
# https://en.wikipedia.org/wiki/Xcode#Xcode_7.0_-_12.x_(since_Free_On-Device_Development)
if(COMPILER_IS_APPLE_CLANG) if(COMPILER_IS_APPLE_CLANG)
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${ogs.minimum_version.apple_clang}) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS
message(FATAL_ERROR "Aborting: Apple Clang ${ogs.minimum_version.apple_clang} \ ${ogs.minimum_version.apple_clang}
is required! Found version ${CMAKE_CXX_COMPILER_VERSION}. Update Xcode!") )
message(
FATAL_ERROR
"Aborting: Apple Clang ${ogs.minimum_version.apple_clang} \
is required! Found version ${CMAKE_CXX_COMPILER_VERSION}. Update Xcode!"
)
endif() endif()
else() else()
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${ogs.minimum_version.clang}) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS
message(FATAL_ERROR "Aborting: Clang ${ogs.minimum_version.clang} \ ${ogs.minimum_version.clang}
is required! Found version ${CMAKE_CXX_COMPILER_VERSION}") )
message(
FATAL_ERROR "Aborting: Clang ${ogs.minimum_version.clang} \
is required! Found version ${CMAKE_CXX_COMPILER_VERSION}"
)
endif() endif()
endif() endif()
include(ClangSanitizer) include(ClangSanitizer)
endif() endif()
if(COMPILER_IS_INTEL) if(COMPILER_IS_INTEL)
# Use highest instruction set available on the compilation host processor # Use highest instruction set available on the compilation host
# processor
add_compile_options(-xHOST) add_compile_options(-xHOST)
endif() endif()
endif() endif()
if(MSVC) if(MSVC)
if(${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS ${ogs.minimum_version.msvc.compiler}) if(${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS
message(FATAL_ERROR "Aborting: Visual Studio compiler \ ${ogs.minimum_version.msvc.compiler}
)
message(
FATAL_ERROR
"Aborting: Visual Studio compiler \
${ogs.minimum_version.msvc.compiler} is required. Found version \ ${ogs.minimum_version.msvc.compiler} is required. Found version \
${CMAKE_CXX_COMPILER_VERSION}.") ${CMAKE_CXX_COMPILER_VERSION}."
)
endif() endif()
if(${MSVC_TOOLSET_VERSION} LESS ${ogs.minimum_version.msvc.toolset}) if(${MSVC_TOOLSET_VERSION} LESS ${ogs.minimum_version.msvc.toolset})
message(FATAL_ERROR "Aborting: Visual Studio ${ogs.minimum_version.msvc.year} \ message(
FATAL_ERROR
"Aborting: Visual Studio ${ogs.minimum_version.msvc.year} \
is required! Found Visual Studio with toolset version \ is required! Found Visual Studio with toolset version \
${MSVC_TOOLSET_VERSION}. See the following link for version info: \ ${MSVC_TOOLSET_VERSION}. See the following link for version info: \
https://cmake.org/cmake/help/v3.16/variable/MSVC_TOOLSET_VERSION.html") https://cmake.org/cmake/help/v3.16/variable/MSVC_TOOLSET_VERSION.html"
)
endif() endif()
if(OGS_CPU_ARCHITECTURE STREQUAL "native") if(OGS_CPU_ARCHITECTURE STREQUAL "native")
set(CPU_FLAGS /favor:blend) set(CPU_FLAGS /favor:blend)
...@@ -131,19 +153,22 @@ if(MSVC) ...@@ -131,19 +153,22 @@ if(MSVC)
endif() endif()
add_compile_options( add_compile_options(
/MP # multi-core compilation /MP # multi-core compilation
/wd4290 /wd4267 /wd4996 /wd4290
/wd4267
/wd4996
/bigobj /bigobj
-D_CRT_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS
-D_CRT_NONSTDC_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS
-D_CRT_XNONSTDC_NO_WARNINGS -D_CRT_XNONSTDC_NO_WARNINGS
-D__restrict__=__restrict # this fixes #5 -D__restrict__=__restrict # this fixes #5
# This fixes compile errors with # This fixes compile errors with std::numeric_limits<T>::min() / max()
# std::numeric_limits<T>::min() / max()
-DNOMINMAX -DNOMINMAX
-DBOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE # when VC is newer than Boost -DBOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE # when VC is newer than Boost
# Disables all warnings coming from include with <>-syntax # Disables all warnings coming from include with <>-syntax
# https://devblogs.microsoft.com/cppblog/broken-warnings-theory/ # https://devblogs.microsoft.com/cppblog/broken-warnings-theory/
/experimental:external /external:anglebrackets /external:W0 /experimental:external
/external:anglebrackets
/external:W0
) )
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ignore:4099") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ignore:4099")
endif() endif()
......
...@@ -8,12 +8,15 @@ append_coverage_compiler_flags() ...@@ -8,12 +8,15 @@ append_coverage_compiler_flags()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Og") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Og")
if(NOT FASTCOV_PATH) if(NOT FASTCOV_PATH)
execute_process(COMMAND ${_CMD_COMMAND} poetry add fastcov==1.10 execute_process(
COMMAND ${_CMD_COMMAND} poetry add fastcov==1.10
WORKING_DIRECTORY ${PROJECT_BINARY_DIR} WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
) )
find_program(FASTCOV_PATH NAMES fastcov find_program(
HINTS ${LOCAL_VIRTUALENV_BIN_DIRS} FASTCOV_PATH
REQUIRED NO_DEFAULT_PATH NAMES fastcov
HINTS ${LOCAL_VIRTUALENV_BIN_DIRS} REQUIRED
NO_DEFAULT_PATH
) )
endif() endif()
...@@ -23,27 +26,42 @@ endif() ...@@ -23,27 +26,42 @@ endif()
# TODO: segfault in MeshLibMappedPropertyVector.Double|Int # TODO: segfault in MeshLibMappedPropertyVector.Double|Int
setup_target_for_coverage_fastcov( setup_target_for_coverage_fastcov(
NAME testrunner_coverage NAME
EXECUTABLE $<TARGET_FILE:testrunner> -l warn --gtest_filter=-MeshLibMappedPropertyVector.*:GeoLib.SearchNearestPointsInDenseGrid testrunner_coverage
DEPENDENCIES testrunner EXECUTABLE
FASTCOV_ARGS --include ${PROJECT_SOURCE_DIR} $<TARGET_FILE:testrunner>
-l
warn
--gtest_filter=-MeshLibMappedPropertyVector.*:GeoLib.SearchNearestPointsInDenseGrid
DEPENDENCIES
testrunner
FASTCOV_ARGS
--include
${PROJECT_SOURCE_DIR}
${COVERAGE_ADDITIONAL_ARGS} ${COVERAGE_ADDITIONAL_ARGS}
EXCLUDE EXCLUDE
Applications/CLI/ Applications/CLI/
ProcessLib/ ProcessLib/
Tests/ Tests/
) )
# TODO: segfault in Vtu2Grid # TODO: segfault in Vtu2Grid
setup_target_for_coverage_fastcov( setup_target_for_coverage_fastcov(
NAME ctest_coverage NAME
EXECUTABLE ctest -E "Vtu2Grid" ctest_coverage
DEPENDENCIES all EXECUTABLE
FASTCOV_ARGS --include ${PROJECT_SOURCE_DIR} ctest
-E
"Vtu2Grid"
DEPENDENCIES
all
FASTCOV_ARGS
--include
${PROJECT_SOURCE_DIR}
${COVERAGE_ADDITIONAL_ARGS} ${COVERAGE_ADDITIONAL_ARGS}
EXCLUDE EXCLUDE
Applications/CLI/ Applications/CLI/
Tests/ Tests/
) )
if(UNIX) if(UNIX)
......
...@@ -8,26 +8,24 @@ if(DEFINED ENV{CMAKE_BUILD_PARALLEL_LEVEL}) ...@@ -8,26 +8,24 @@ if(DEFINED ENV{CMAKE_BUILD_PARALLEL_LEVEL})
elseif(DEFINED CMAKE_BUILD_PARALLEL_LEVEL) elseif(DEFINED CMAKE_BUILD_PARALLEL_LEVEL)
set(CPPCHECK_PARALLEL ${CMAKE_BUILD_PARALLEL_LEVEL}) set(CPPCHECK_PARALLEL ${CMAKE_BUILD_PARALLEL_LEVEL})
endif() endif()
configure_file(${PROJECT_SOURCE_DIR}/scripts/test/cppcheck.in.sh ${PROJECT_BINARY_DIR}/cppcheck.sh) configure_file(
${PROJECT_SOURCE_DIR}/scripts/test/cppcheck.in.sh
${PROJECT_BINARY_DIR}/cppcheck.sh
)
if(DEFINED ENV{NUM_THREADS}) if(DEFINED ENV{NUM_THREADS})
set(CPPCHECK_THREADS -j $ENV{NUM_THREADS}) set(CPPCHECK_THREADS -j $ENV{NUM_THREADS})
endif() endif()
add_custom_target(cppcheck add_custom_target(
COMMAND ${CPPCHECK_TOOL_PATH} cppcheck
--project=${PROJECT_BINARY_DIR}/compile_commands.json COMMAND
--language=c++ ${CPPCHECK_TOOL_PATH}
--std=c++20 --project=${PROJECT_BINARY_DIR}/compile_commands.json --language=c++
--enable=all --std=c++20 --enable=all --inconclusive ${CPPCHECK_THREADS} -i
--inconclusive ${PROJECT_BINARY_DIR}/CMakeFiles -i ${PROJECT_BINARY_DIR}/_deps -i
${CPPCHECK_THREADS} ${PROJECT_SOURCE_DIR}/ThirdParty -i
-i ${PROJECT_BINARY_DIR}/CMakeFiles ${PROJECT_SOURCE_DIR}/Applications/DataExplorer -i
-i ${PROJECT_BINARY_DIR}/_deps ${PROJECT_SOURCE_DIR}/Tests --xml --xml-version=2
-i ${PROJECT_SOURCE_DIR}/ThirdParty --output-file=${PROJECT_BINARY_DIR}/cppcheck.log ${PROJECT_SOURCE_DIR}
-i ${PROJECT_SOURCE_DIR}/Applications/DataExplorer
-i ${PROJECT_SOURCE_DIR}/Tests
--xml --xml-version=2
--output-file=${PROJECT_BINARY_DIR}/cppcheck.log
${PROJECT_SOURCE_DIR}
) )
...@@ -3,9 +3,7 @@ if(OGS_BUILD_TESTING) ...@@ -3,9 +3,7 @@ if(OGS_BUILD_TESTING)
NAME googletest NAME googletest
GITHUB_REPOSITORY google/googletest GITHUB_REPOSITORY google/googletest
GIT_TAG 389cb68b87193358358ae87cc56d257fd0d80189 GIT_TAG 389cb68b87193358358ae87cc56d257fd0d80189
OPTIONS OPTIONS "INSTALL_GTEST OFF" "gtest_force_shared_crt ON"
"INSTALL_GTEST OFF"
"gtest_force_shared_crt ON"
EXCLUDE_FROM_ALL YES EXCLUDE_FROM_ALL YES
) )
...@@ -17,7 +15,9 @@ if(OGS_BUILD_TESTING) ...@@ -17,7 +15,9 @@ if(OGS_BUILD_TESTING)
) )
if(autocheck_ADDED) if(autocheck_ADDED)
add_library(autocheck INTERFACE IMPORTED) add_library(autocheck INTERFACE IMPORTED)
target_include_directories(autocheck SYSTEM INTERFACE ${autocheck_SOURCE_DIR}/include) target_include_directories(
autocheck SYSTEM INTERFACE ${autocheck_SOURCE_DIR}/include
)
endif() endif()
endif() endif()
...@@ -32,11 +32,7 @@ if(exprtk_ADDED) ...@@ -32,11 +32,7 @@ if(exprtk_ADDED)
target_include_directories(exprtk SYSTEM INTERFACE ${exprtk_SOURCE_DIR}) target_include_directories(exprtk SYSTEM INTERFACE ${exprtk_SOURCE_DIR})
endif() endif()
CPMAddPackage( CPMAddPackage(NAME spdlog GITHUB_REPOSITORY gabime/spdlog VERSION 1.8.2)
NAME spdlog
GITHUB_REPOSITORY gabime/spdlog
VERSION 1.8.2
)
CPMAddPackage( CPMAddPackage(
NAME tclap NAME tclap
...@@ -46,12 +42,13 @@ CPMAddPackage( ...@@ -46,12 +42,13 @@ CPMAddPackage(
) )
if(tclap_ADDED) if(tclap_ADDED)
add_library(tclap INTERFACE IMPORTED) add_library(tclap INTERFACE IMPORTED)
target_include_directories(tclap SYSTEM INTERFACE ${tclap_SOURCE_DIR}/include) target_include_directories(
tclap SYSTEM INTERFACE ${tclap_SOURCE_DIR}/include
)
endif() endif()
CPMAddPackage( CPMAddPackage(
NAME tetgen NAME tetgen GITHUB_REPOSITORY ufz/tetgen
GITHUB_REPOSITORY ufz/tetgen
GIT_TAG 603ba181ebfaed38eec88532720e282606009b73 GIT_TAG 603ba181ebfaed38eec88532720e282606009b73
) )
if(tetgen_ADDED) if(tetgen_ADDED)
...@@ -64,18 +61,18 @@ if(OGS_USE_PYTHON) ...@@ -64,18 +61,18 @@ if(OGS_USE_PYTHON)
NAME pybind11 NAME pybind11
GITHUB_REPOSITORY pybind/pybind11 GITHUB_REPOSITORY pybind/pybind11
GIT_TAG f1abf5d9159b805674197f6bc443592e631c9130 GIT_TAG f1abf5d9159b805674197f6bc443592e631c9130
# pybind11 uses old CMake find functionality, pass variables to use # pybind11 uses old CMake find functionality, pass variables to use the
# the same Python installation. # same Python installation.
OPTIONS OPTIONS "PYTHON_INCLUDE_DIR ${Python3_INCLUDE_DIRS}"
"PYTHON_INCLUDE_DIR ${Python3_INCLUDE_DIRS}" "PYTHON_LIBRARIES ${Python3_LIBRARIES}"
"PYTHON_LIBRARIES ${Python3_LIBRARIES}" "PYTHON_EXECUTABLE ${Python3_EXECUTABLE}"
"PYTHON_EXECUTABLE ${Python3_EXECUTABLE}" "PYBIND11_PYTHON_VERSION ${Python3_VERSION}"
"PYBIND11_PYTHON_VERSION ${Python3_VERSION}"
) )
endif() endif()
if (OGS_BUILD_PROCESS_ComponentTransport if(OGS_BUILD_PROCESS_ComponentTransport
OR OGS_BUILD_PROCESS_RichardsComponentTransport) OR OGS_BUILD_PROCESS_RichardsComponentTransport
)
CPMAddPackage( CPMAddPackage(
NAME iphreeqc NAME iphreeqc
GITHUB_REPOSITORY ufz/iphreeqc GITHUB_REPOSITORY ufz/iphreeqc
...@@ -96,7 +93,9 @@ CPMFindPackage( ...@@ -96,7 +93,9 @@ CPMFindPackage(
) )
if(Eigen3_ADDED) if(Eigen3_ADDED)
add_library(Eigen3::Eigen INTERFACE IMPORTED) add_library(Eigen3::Eigen INTERFACE IMPORTED)
target_include_directories(Eigen3::Eigen SYSTEM INTERFACE ${Eigen3_SOURCE_DIR}) target_include_directories(
Eigen3::Eigen SYSTEM INTERFACE ${Eigen3_SOURCE_DIR}
)
endif() endif()
if(OGS_USE_MFRONT) if(OGS_USE_MFRONT)
...@@ -104,9 +103,7 @@ if(OGS_USE_MFRONT) ...@@ -104,9 +103,7 @@ if(OGS_USE_MFRONT)
NAME MGIS NAME MGIS
GITHUB_REPOSITORY ufz/MFrontGenericInterfaceSupport GITHUB_REPOSITORY ufz/MFrontGenericInterfaceSupport
GIT_TAG 04e7d1bfad83fdc36a5fedb9c3d2e3b0d4b7fccf GIT_TAG 04e7d1bfad83fdc36a5fedb9c3d2e3b0d4b7fccf
OPTIONS OPTIONS "enable-doxygen-doc OFF" "enable-fortran-bindings OFF"
"enable-doxygen-doc OFF"
"enable-fortran-bindings OFF"
EXCLUDE_FROM_ALL YES EXCLUDE_FROM_ALL YES
) )
if(MGIS_ADDED) if(MGIS_ADDED)
...@@ -148,16 +145,15 @@ if(OGS_USE_XDMF) ...@@ -148,16 +145,15 @@ if(OGS_USE_XDMF)
GITHUB_REPOSITORY HDFGroup/hdf5 GITHUB_REPOSITORY HDFGroup/hdf5
GIT_TAG hdf5-${HDF5_TAG} GIT_TAG hdf5-${HDF5_TAG}
VERSION ${ogs.minimum_version.hdf5} VERSION ${ogs.minimum_version.hdf5}
OPTIONS OPTIONS "HDF5_EXTERNALLY_CONFIGURED 1"
"HDF5_EXTERNALLY_CONFIGURED 1" "HDF5_GENERATE_HEADERS OFF"
"HDF5_GENERATE_HEADERS OFF" "HDF5_BUILD_TOOLS OFF"
"HDF5_BUILD_TOOLS OFF" "HDF5_BUILD_EXAMPLES OFF"
"HDF5_BUILD_EXAMPLES OFF" "HDF5_BUILD_HL_LIB OFF"
"HDF5_BUILD_HL_LIB OFF" "HDF5_BUILD_FORTRAN OFF"
"HDF5_BUILD_FORTRAN OFF" "HDF5_BUILD_CPP_LIB OFF"
"HDF5_BUILD_CPP_LIB OFF" "HDF5_BUILD_JAVA OFF"
"HDF5_BUILD_JAVA OFF" ${_hdf5_options}
${_hdf5_options}
EXCLUDE_FROM_ALL YES EXCLUDE_FROM_ALL YES
) )
if(HDF5_ADDED) if(HDF5_ADDED)
...@@ -173,14 +169,13 @@ if(OGS_USE_XDMF) ...@@ -173,14 +169,13 @@ if(OGS_USE_XDMF)
GITHUB_REPOSITORY GNOME/libxml2 GITHUB_REPOSITORY GNOME/libxml2
VERSION ${ogs.minimum_version.libxml2} VERSION ${ogs.minimum_version.libxml2}
GIT_TAG f93ca3e140a371b26366f747a408588c631e0fd1 GIT_TAG f93ca3e140a371b26366f747a408588c631e0fd1
OPTIONS OPTIONS "LIBXML2_WITH_TESTS OFF"
"LIBXML2_WITH_TESTS OFF" "LIBXML2_WITH_PROGRAMS OFF"
"LIBXML2_WITH_PROGRAMS OFF" "LIBXML2_WITH_ICONV OFF"
"LIBXML2_WITH_ICONV OFF" "LIBXML2_WITH_ICU OFF"
"LIBXML2_WITH_ICU OFF" "LIBXML2_WITH_LZMA OFF"
"LIBXML2_WITH_LZMA OFF" "LIBXML2_WITH_PYTHON OFF"
"LIBXML2_WITH_PYTHON OFF" "LIBXML2_WITH_ZLIB OFF"
"LIBXML2_WITH_ZLIB OFF"
EXCLUDE_FROM_ALL YES EXCLUDE_FROM_ALL YES
) )
if(LibXml2_ADDED) if(LibXml2_ADDED)
...@@ -196,28 +191,32 @@ if(OGS_USE_XDMF) ...@@ -196,28 +191,32 @@ if(OGS_USE_XDMF)
OPTIONS "XDMF_LIBNAME OgsXdmf" OPTIONS "XDMF_LIBNAME OgsXdmf"
) )
if(xdmf_ADDED) if(xdmf_ADDED)
target_include_directories(OgsXdmf PUBLIC target_include_directories(
${xdmf_SOURCE_DIR} OgsXdmf PUBLIC ${xdmf_SOURCE_DIR} ${xdmf_BINARY_DIR}
${xdmf_BINARY_DIR}
) )
target_link_libraries(OgsXdmf Boost::boost ZLIB::ZLIB) target_link_libraries(OgsXdmf Boost::boost ZLIB::ZLIB)
target_include_directories(OgsXdmfCore target_include_directories(
PUBLIC OgsXdmfCore PUBLIC ${xdmf_SOURCE_DIR}/core ${xdmf_BINARY_DIR}/core
${xdmf_SOURCE_DIR}/core PRIVATE ${xdmf_SOURCE_DIR}/CMake/VersionSuite
${xdmf_BINARY_DIR}/core )
PRIVATE target_link_libraries(
${xdmf_SOURCE_DIR}/CMake/VersionSuite OgsXdmfCore PUBLIC Boost::boost LibXml2::LibXml2 ${HDF5_LIBRARIES}
) )
target_link_libraries(OgsXdmfCore PUBLIC Boost::boost LibXml2::LibXml2 ${HDF5_LIBRARIES})
set_target_properties(OgsXdmf OgsXdmfCore PROPERTIES set_target_properties(
RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR} OgsXdmf OgsXdmfCore
LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR} ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}
LIBRARY_OUTPUT_DIRECTORY
${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}
ARCHIVE_OUTPUT_DIRECTORY
${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}
) )
if(BUILD_SHARED_LIBS) if(BUILD_SHARED_LIBS)
install(TARGETS OgsXdmf OgsXdmfCore LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(TARGETS OgsXdmf OgsXdmfCore
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
endif() endif()
list(APPEND DISABLE_WARNINGS_TARGETS OgsXdmf OgsXdmfCore) list(APPEND DISABLE_WARNINGS_TARGETS OgsXdmf OgsXdmfCore)
endif() endif()
...@@ -225,12 +224,13 @@ endif() ...@@ -225,12 +224,13 @@ endif()
if(OGS_BUILD_SWMM) if(OGS_BUILD_SWMM)
CPMAddPackage( CPMAddPackage(
NAME SWMMInterface NAME SWMMInterface GITHUB_REPOSITORY ufz/SwmmInterface
GITHUB_REPOSITORY ufz/SwmmInterface
GIT_TAG 141e05ae1f419918799d7bf9178ebcd97feb1ed3 GIT_TAG 141e05ae1f419918799d7bf9178ebcd97feb1ed3
) )
if(SWMMInterface_ADDED) if(SWMMInterface_ADDED)
target_include_directories(SwmmInterface SYSTEM PUBLIC ${SWMMInterface_SOURCE_DIR}) target_include_directories(
SwmmInterface SYSTEM PUBLIC ${SWMMInterface_SOURCE_DIR}
)
list(APPEND DISABLE_WARNINGS_TARGETS SWMM SwmmInterface) list(APPEND DISABLE_WARNINGS_TARGETS SWMM SwmmInterface)
endif() endif()
endif() endif()
...@@ -238,13 +238,17 @@ endif() ...@@ -238,13 +238,17 @@ endif()
CPMAddPackage( CPMAddPackage(
NAME nlohmann_json NAME nlohmann_json
VERSION 3.6.1 VERSION 3.6.1
# the git repo is incredibly large, so we download the archived include directory # the git repo is incredibly large, so we download the archived include
# directory
URL https://github.com/nlohmann/json/releases/download/v3.6.1/include.zip URL https://github.com/nlohmann/json/releases/download/v3.6.1/include.zip
URL_HASH SHA256=69cc88207ce91347ea530b227ff0776db82dcb8de6704e1a3d74f4841bc651cf URL_HASH
SHA256=69cc88207ce91347ea530b227ff0776db82dcb8de6704e1a3d74f4841bc651cf
) )
if(nlohmann_json_ADDED) if(nlohmann_json_ADDED)
add_library(nlohmann_json INTERFACE IMPORTED) add_library(nlohmann_json INTERFACE IMPORTED)
target_include_directories(nlohmann_json INTERFACE ${nlohmann_json_SOURCE_DIR}) target_include_directories(
nlohmann_json INTERFACE ${nlohmann_json_SOURCE_DIR}
)
endif() endif()
if(OGS_BUILD_GUI) if(OGS_BUILD_GUI)
...@@ -274,7 +278,9 @@ if(OGS_BUILD_GUI) ...@@ -274,7 +278,9 @@ if(OGS_BUILD_GUI)
VERSION 1.5.0 VERSION 1.5.0
EXCLUDE_FROM_ALL YES EXCLUDE_FROM_ALL YES
) )
target_include_directories(shp INTERFACE $<BUILD_INTERFACE:${Shapelib_SOURCE_DIR}>) target_include_directories(
shp INTERFACE $<BUILD_INTERFACE:${Shapelib_SOURCE_DIR}>
)
endif() endif()
endif() endif()
...@@ -289,25 +295,33 @@ if(OGS_USE_CVODE) ...@@ -289,25 +295,33 @@ if(OGS_USE_CVODE)
) )
if(CVODE_ADDED) if(CVODE_ADDED)
add_library(CVODE::CVODE INTERFACE IMPORTED) add_library(CVODE::CVODE INTERFACE IMPORTED)
target_include_directories(CVODE::CVODE INTERFACE target_include_directories(
${CVODE_SOURCE_DIR}/include CVODE::CVODE INTERFACE ${CVODE_SOURCE_DIR}/include
${CVODE_BINARY_DIR}/include ${CVODE_BINARY_DIR}/include
) )
target_link_libraries(CVODE::CVODE INTERFACE target_link_libraries(
sundials_cvode_static CVODE::CVODE INTERFACE sundials_cvode_static
sundials_nvecserial_static sundials_nvecserial_static
) )
endif() endif()
endif() endif()
### VTK ### # VTK ###
set(VTK_COMPONENTS vtkIOXML vtkIOLegacy) set(VTK_COMPONENTS vtkIOXML vtkIOLegacy)
if(OGS_BUILD_GUI) if(OGS_BUILD_GUI)
list(APPEND VTK_COMPONENTS list(
vtkIOExport vtkImagingCore APPEND
vtkInteractionStyle vtkInteractionWidgets VTK_COMPONENTS
vtkGUISupportQt vtkRenderingOpenGL2 vtkRenderingContextOpenGL2 vtkIOExport
vtkFiltersTexture vtkRenderingAnnotation vtkRenderingCore vtkImagingCore
vtkInteractionStyle
vtkInteractionWidgets
vtkGUISupportQt
vtkRenderingOpenGL2
vtkRenderingContextOpenGL2
vtkFiltersTexture
vtkRenderingAnnotation
vtkRenderingCore
) )
if(OGS_BUILD_UTILS) if(OGS_BUILD_UTILS)
list(APPEND VTK_COMPONENTS vtkFiltersParallel) list(APPEND VTK_COMPONENTS vtkFiltersParallel)
...@@ -316,16 +330,15 @@ endif() ...@@ -316,16 +330,15 @@ endif()
if(OGS_USE_MPI) if(OGS_USE_MPI)
list(APPEND VTK_COMPONENTS vtkIOParallelXML vtkParallelMPI) list(APPEND VTK_COMPONENTS vtkIOParallelXML vtkParallelMPI)
endif() endif()
# TODO: # TODO: if(OGS_INSITU) find_package(ParaView REQUIRED) end()
# if(OGS_INSITU)
# find_package(ParaView REQUIRED)
# end()
find_package(VTK ${ogs.minimum_version.vtk} QUIET COMPONENTS ${VTK_COMPONENTS}) find_package(VTK ${ogs.minimum_version.vtk} QUIET COMPONENTS ${VTK_COMPONENTS})
if(VTK_FOUND) if(VTK_FOUND)
include(${VTK_USE_FILE}) include(${VTK_USE_FILE})
else() else()
list(APPEND VTK_OPTIONS list(
APPEND
VTK_OPTIONS
"BUILD_SHARED_LIBS OFF" "BUILD_SHARED_LIBS OFF"
"BUILD_TESTING OFF" "BUILD_TESTING OFF"
"VTK_BUILD_EXAMPLES OFF" "VTK_BUILD_EXAMPLES OFF"
...@@ -344,17 +357,15 @@ else() ...@@ -344,17 +357,15 @@ else()
GITHUB_REPOSITORY kitware/vtk GITHUB_REPOSITORY kitware/vtk
VERSION ${ogs.minimum_version.vtk} VERSION ${ogs.minimum_version.vtk}
OPTIONS ${VTK_OPTIONS} OPTIONS ${VTK_OPTIONS}
EXCLUDE_FROM_ALL YES EXCLUDE_FROM_ALL YES GIT_SUBMODULES "" # Disable submodules
GIT_SUBMODULES "" # Disable submodules
) )
include(${VTK_BINARY_DIR}/VTKConfig.cmake) include(${VTK_BINARY_DIR}/VTKConfig.cmake)
endif() endif()
### end VTK ### # end VTK ###
if(OGS_BUILD_TESTING) if(OGS_BUILD_TESTING)
CPMAddPackage( CPMAddPackage(
NAME vtkdiff NAME vtkdiff GITHUB_REPOSITORY ufz/vtkdiff
GITHUB_REPOSITORY ufz/vtkdiff
GIT_TAG 49403cee266bb8e80405a02d677dbb5f71afc61a GIT_TAG 49403cee266bb8e80405a02d677dbb5f71afc61a
) )
if(vtkdiff_ADDED) if(vtkdiff_ADDED)
...@@ -367,13 +378,17 @@ endif() ...@@ -367,13 +378,17 @@ endif()
# Disable warnings # Disable warnings
foreach(target ${DISABLE_WARNINGS_TARGETS}) foreach(target ${DISABLE_WARNINGS_TARGETS})
target_compile_options(${target} PRIVATE target_compile_options(
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>,$<CXX_COMPILER_ID:GNU>>:-w> ${target}
$<$<CXX_COMPILER_ID:MSVC>:/W0>) PRIVATE
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>,$<CXX_COMPILER_ID:GNU>>:-w>
$<$<CXX_COMPILER_ID:MSVC>:/W0>
)
endforeach() endforeach()
# Hack: Disable tests from dependencies # Hack: Disable tests from dependencies
configure_file(${PROJECT_SOURCE_DIR}/scripts/cmake/test/CTestCustom.in.cmake configure_file(
${PROJECT_SOURCE_DIR}/scripts/cmake/test/CTestCustom.in.cmake
${PROJECT_BINARY_DIR}/CTestCustom.cmake @ONLY ${PROJECT_BINARY_DIR}/CTestCustom.cmake @ONLY
) )
...@@ -385,11 +400,11 @@ if(CLANG_FORMAT_PROGRAM OR CMAKE_FORMAT_PROGRAM) ...@@ -385,11 +400,11 @@ if(CLANG_FORMAT_PROGRAM OR CMAKE_FORMAT_PROGRAM)
set(_skip_cmake "FORMAT_SKIP_CMAKE YES") set(_skip_cmake "FORMAT_SKIP_CMAKE YES")
endif() endif()
CPMAddPackage( CPMAddPackage(
NAME Format.cmake NAME Format.cmake
VERSION 1.7.0 VERSION 1.7.0
GITHUB_REPOSITORY TheLartians/Format.cmake GITHUB_REPOSITORY TheLartians/Format.cmake
OPTIONS OPTIONS
${_skip_cmake} ${_skip_cmake}
"CMAKE_FORMAT_EXCLUDE scripts/cmake/CPM.cmake|.*/Tests.cmake|scripts/cmake/jedbrown/.*|scripts/cmake/conan/conan.cmake|scripts/cmake/vector-of-bool/.*" "CMAKE_FORMAT_EXCLUDE scripts/cmake/CPM.cmake|.*/Tests.cmake|scripts/cmake/jedbrown/.*|scripts/cmake/conan/conan.cmake|scripts/cmake/vector-of-bool/.*"
) )
endif() endif()
...@@ -5,47 +5,52 @@ cmake_policy(SET CMP0009 NEW) ...@@ -5,47 +5,52 @@ cmake_policy(SET CMP0009 NEW)
# pages and the page title. # pages and the page title.
function(documentationProjectFilePutIntoPlace dir) function(documentationProjectFilePutIntoPlace dir)
# cmake-lint: disable=R0912,R0915 # cmake-lint: disable=R0912,R0915
file(RELATIVE_PATH relative_path ${DOCUMENTATION_PROJECTFILE_INPUTDIR} ${dir}) file(RELATIVE_PATH relative_path ${DOCUMENTATION_PROJECTFILE_INPUTDIR}
${dir}
)
get_filename_component(dir_name ${relative_path} DIRECTORY) get_filename_component(dir_name ${relative_path} DIRECTORY)
get_filename_component(otagname ${relative_path} NAME_WE) get_filename_component(otagname ${relative_path} NAME_WE)
if (otagname MATCHES ^[ic]_) if(otagname MATCHES ^[ic]_)
# if the file name starts with an underscore, then this files is # if the file name starts with an underscore, then this files is the
# the "table of contents of the current directory # "table of contents of the current directory
file(MAKE_DIRECTORY "${DOCUMENTATION_PROJECTFILE_BUILDDIR}/${dir_name}") file(MAKE_DIRECTORY "${DOCUMENTATION_PROJECTFILE_BUILDDIR}/${dir_name}")
set(postfix "# Child parameters, attributes and cases\n\n") set(postfix "# Child parameters, attributes and cases\n\n")
# gather other parameter files # gather other parameter files the loop below will effects a page
# the loop below will effects a page hierarchy to be built # hierarchy to be built
file(GLOB param_files ${DOCUMENTATION_PROJECTFILE_INPUTDIR}/${dir_name}/*) file(GLOB param_files
${DOCUMENTATION_PROJECTFILE_INPUTDIR}/${dir_name}/*
)
set(subpagelist "") set(subpagelist "")
foreach(pf ${param_files}) foreach(pf ${param_files})
# ignore hidden files # ignore hidden files
if (pf MATCHES /[.][^/]+) if(pf MATCHES /[.][^/]+)
continue() continue()
endif() endif()
get_filename_component(rel_pf ${pf} NAME_WE) get_filename_component(rel_pf ${pf} NAME_WE)
# if the file name matches ^[ic]_, then this # if the file name matches ^[ic]_, then this is the "table of
# is the "table of contents" file already processed outside # contents" file already processed outside of this loop
# of this loop if(NOT rel_pf MATCHES ^[ic]_)
if (NOT rel_pf MATCHES ^[ic]_)
if(IS_DIRECTORY ${pf}) if(IS_DIRECTORY ${pf})
set(pf_tagname ${rel_pf}) set(pf_tagname ${rel_pf})
else() else()
if (NOT "${rel_pf}" MATCHES ^._) if(NOT "${rel_pf}" MATCHES ^._)
message(SEND_ERROR "Path `${rel_pf}' has a wrong name." message(SEND_ERROR "Path `${rel_pf}' has a wrong name."
" Full path is `${pf}'.") " Full path is `${pf}'."
)
continue() continue()
endif() endif()
string(SUBSTRING "${rel_pf}" 2 -1 pf_tagname) string(SUBSTRING "${rel_pf}" 2 -1 pf_tagname)
endif() endif()
if ("${dir_name}" STREQUAL "") # toplevel dir must be treated slightly different # toplevel dir must be treated slightly different
if("${dir_name}" STREQUAL "")
set(pf_tagpath "${pf_tagname}") set(pf_tagpath "${pf_tagname}")
else() else()
set(pf_tagpath "${dir_name}/${pf_tagname}") set(pf_tagpath "${dir_name}/${pf_tagname}")
...@@ -53,22 +58,25 @@ function(documentationProjectFilePutIntoPlace dir) ...@@ -53,22 +58,25 @@ function(documentationProjectFilePutIntoPlace dir)
endif() endif()
message(" t.o.c. entry ${pf_tagpath}") message(" t.o.c. entry ${pf_tagpath}")
if (rel_pf MATCHES ^a_) if(rel_pf MATCHES ^a_)
set(pagenameprefix "ogs_file_attr__") set(pagenameprefix "ogs_file_attr__")
else() else()
set(pagenameprefix "ogs_file_param__") set(pagenameprefix "ogs_file_param__")
endif() endif()
list(FIND subpagelist "${pagenameprefix}${pf_tagpath}" idx) list(FIND subpagelist "${pagenameprefix}${pf_tagpath}" idx)
if (NOT idx EQUAL -1) if(NOT idx EQUAL -1)
message(SEND_ERROR "The subpagelist already contains" message(
" ${pagenameprefix}${pf_tagpath}. Maybe there are" SEND_ERROR
" duplicate documentation files.") "The subpagelist already contains"
" ${pagenameprefix}${pf_tagpath}. Maybe there are"
" duplicate documentation files."
)
else() else()
list(APPEND subpagelist "${pagenameprefix}${pf_tagpath}") list(APPEND subpagelist "${pagenameprefix}${pf_tagpath}")
endif() endif()
if (NOT IS_DIRECTORY "${pf}") if(NOT IS_DIRECTORY "${pf}")
documentationProjectFilePutIntoPlace("${pf}") documentationProjectFilePutIntoPlace("${pf}")
endif() endif()
endif() endif()
...@@ -83,10 +91,10 @@ function(documentationProjectFilePutIntoPlace dir) ...@@ -83,10 +91,10 @@ function(documentationProjectFilePutIntoPlace dir)
endif() endif()
string(SUBSTRING ${otagname} 2 -1 tagname) string(SUBSTRING ${otagname} 2 -1 tagname)
if (dir_name STREQUAL "") # toplevel dir must be treated slightly different if(dir_name STREQUAL "") # toplevel dir must be treated slightly different
set(tagpath "${tagname}") set(tagpath "${tagname}")
else() else()
if (otagname MATCHES ^[ic]_) # treat "table of contents" file special if(otagname MATCHES ^[ic]_) # treat "table of contents" file special
string(REPLACE "/" "__" tagpath "${dir_name}") string(REPLACE "/" "__" tagpath "${dir_name}")
else() else()
string(REPLACE "/" "__" tagpath "${dir_name}/${tagname}") string(REPLACE "/" "__" tagpath "${dir_name}/${tagname}")
...@@ -95,7 +103,7 @@ function(documentationProjectFilePutIntoPlace dir) ...@@ -95,7 +103,7 @@ function(documentationProjectFilePutIntoPlace dir)
message(" child param ${tagpath}") message(" child param ${tagpath}")
set(pagenameprefix "ogs_file_param__") set(pagenameprefix "ogs_file_param__")
if (otagname MATCHES ^i_ AND dir_name STREQUAL "") if(otagname MATCHES ^i_ AND dir_name STREQUAL "")
set(pagetitle "OGS Input File Parameters") set(pagetitle "OGS Input File Parameters")
elseif(otagname MATCHES ^c_) elseif(otagname MATCHES ^c_)
set(pagetitle "[case]&emsp;${tagname}") set(pagetitle "[case]&emsp;${tagname}")
...@@ -105,34 +113,48 @@ function(documentationProjectFilePutIntoPlace dir) ...@@ -105,34 +113,48 @@ function(documentationProjectFilePutIntoPlace dir)
set(pagetitle "[attr]&emsp;${tagname}") set(pagetitle "[attr]&emsp;${tagname}")
set(pagenameprefix "ogs_file_attr__") set(pagenameprefix "ogs_file_attr__")
else() else()
message(SEND_ERROR "Tag name ${otagname} does not match in any case." message(
" Maybe there is a file with a wrong name in the documentation" SEND_ERROR
" directory.") "Tag name ${otagname} does not match in any case."
" Maybe there is a file with a wrong name in the documentation"
" directory."
)
endif() endif()
# read, augment, write file content # read, augment, write file content
file(READ ${dir} content) file(READ ${dir} content)
set(content "/*! \\page ${pagenameprefix}${tagpath} ${pagetitle}\n${content}\n\n${postfix}\n") set(content
if (NOT doc_use_external_tools) "/*! \\page ${pagenameprefix}${tagpath} ${pagetitle}\n${content}\n\n${postfix}\n"
)
if(NOT doc_use_external_tools)
set(ending "\n*/\n") set(ending "\n*/\n")
else() else()
set(ending "") # external tools shall finish the file set(ending "") # external tools shall finish the file
endif() endif()
string(REGEX REPLACE .md$ .dox output_file "${DOCUMENTATION_PROJECTFILE_BUILDDIR}/${relative_path}") string(REGEX
REPLACE .md$ .dox output_file
"${DOCUMENTATION_PROJECTFILE_BUILDDIR}/${relative_path}"
)
file(WRITE "${output_file}" "${content}${ending}") file(WRITE "${output_file}" "${content}${ending}")
endfunction() endfunction()
set(DOCUMENTATION_PROJECTFILE_BUILDDIR ${PROJECT_BINARY_DIR}/DocAux/dox/ProjectFile) set(DOCUMENTATION_PROJECTFILE_BUILDDIR
set(DOCUMENTATION_PROJECTFILE_INPUTDIR ${PROJECT_SOURCE_DIR}/Documentation/ProjectFile) ${PROJECT_BINARY_DIR}/DocAux/dox/ProjectFile
)
set(DOCUMENTATION_PROJECTFILE_INPUTDIR
${PROJECT_SOURCE_DIR}/Documentation/ProjectFile
)
# remove old output # remove old output
if (IS_DIRECTORY ${DOCUMENTATION_PROJECTFILE_BUILDDIR}) if(IS_DIRECTORY ${DOCUMENTATION_PROJECTFILE_BUILDDIR})
file(REMOVE_RECURSE ${DOCUMENTATION_PROJECTFILE_BUILDDIR}) file(REMOVE_RECURSE ${DOCUMENTATION_PROJECTFILE_BUILDDIR})
endif() endif()
# traverse input file hierarchy # traverse input file hierarchy
file(GLOB_RECURSE input_paths FOLLOW_SYMLINKS file(GLOB_RECURSE input_paths FOLLOW_SYMLINKS
${DOCUMENTATION_PROJECTFILE_INPUTDIR}/c_* ${DOCUMENTATION_PROJECTFILE_INPUTDIR}/i_*) ${DOCUMENTATION_PROJECTFILE_INPUTDIR}/c_*
${DOCUMENTATION_PROJECTFILE_INPUTDIR}/i_*
)
foreach(path ${input_paths}) foreach(path ${input_paths})
message("directory index file ${path}") message("directory index file ${path}")
......
...@@ -6,16 +6,17 @@ endif() ...@@ -6,16 +6,17 @@ endif()
set(DOXYGEN_LATEX_MAKEINDEX_CMD "makeindex") set(DOXYGEN_LATEX_MAKEINDEX_CMD "makeindex")
set(DOXYGEN_EXCLUDE set(DOXYGEN_EXCLUDE
${PROJECT_SOURCE_DIR}/ThirdParty ${PROJECT_SOURCE_DIR}/ThirdParty ${PROJECT_SOURCE_DIR}/scripts
${PROJECT_SOURCE_DIR}/scripts ${PROJECT_SOURCE_DIR}/Tests ${PROJECT_SOURCE_DIR}/Documentation/ProjectFile
${PROJECT_SOURCE_DIR}/Tests ${PROJECT_SOURCE_DIR}/web
${PROJECT_SOURCE_DIR}/Documentation/ProjectFile )
${PROJECT_SOURCE_DIR}/web)
set(DOXYGEN_FILE_PATTERNS *.h *.cpp *.tpp *.dox) set(DOXYGEN_FILE_PATTERNS *.h *.cpp *.tpp *.dox)
set(DOXYGEN_PROJECT_NAME "OGS") set(DOXYGEN_PROJECT_NAME "OGS")
set(DOXYGEN_PROJECT_NUMBER "${OGS_GIT_BRANCH}") set(DOXYGEN_PROJECT_NUMBER "${OGS_GIT_BRANCH}")
set(DOXYGEN_PROJECT_VERSION ${GIT_SHA1_SHORT}) set(DOXYGEN_PROJECT_VERSION ${GIT_SHA1_SHORT})
set(DOXYGEN_PROJECT_LOGO ${PROJECT_SOURCE_DIR}/Documentation/OpenGeoSys-Logo.png) set(DOXYGEN_PROJECT_LOGO
${PROJECT_SOURCE_DIR}/Documentation/OpenGeoSys-Logo.png
)
set(DOXYGEN_HTML_OUTPUT ${PROJECT_BINARY_DIR}/docs) set(DOXYGEN_HTML_OUTPUT ${PROJECT_BINARY_DIR}/docs)
if("${OGS_GIT_BRANCH}" MATCHES "^v[0-9]\\.[0-9]\\.[0-9]") if("${OGS_GIT_BRANCH}" MATCHES "^v[0-9]\\.[0-9]\\.[0-9]")
set(DOXYGEN_HTML_COLORSTYLE_HUE 190) set(DOXYGEN_HTML_COLORSTYLE_HUE 190)
...@@ -40,7 +41,9 @@ set(DOXYGEN_REFERENCED_BY_RELATION YES) ...@@ -40,7 +41,9 @@ set(DOXYGEN_REFERENCED_BY_RELATION YES)
set(DOXYGEN_REFERENCES_RELATION YES) set(DOXYGEN_REFERENCES_RELATION YES)
set(DOXYGEN_GENERATE_TREEVIEW YES) set(DOXYGEN_GENERATE_TREEVIEW YES)
set(DOXYGEN_USE_MATHJAX YES) set(DOXYGEN_USE_MATHJAX YES)
set(DOXYGEN_MATHJAX_RELPATH https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/) set(DOXYGEN_MATHJAX_RELPATH
https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/
)
set(DOXYGEN_GENERATE_LATEX NO) set(DOXYGEN_GENERATE_LATEX NO)
set(DOXYGEN_EXTRA_PACKAGES amsmath amsfonts) set(DOXYGEN_EXTRA_PACKAGES amsmath amsfonts)
set(DOXYGEN_PREDEFINED set(DOXYGEN_PREDEFINED
...@@ -68,40 +71,47 @@ set(DOXYGEN_ALIASES ...@@ -68,40 +71,47 @@ set(DOXYGEN_ALIASES
"ogs_file_special = \\xrefitem ogs_file_param \\\"Input File Parameter\\\" \\\"List of all Input File Parameters\\\" special OGS input file parameter" "ogs_file_special = \\xrefitem ogs_file_param \\\"Input File Parameter\\\" \\\"List of all Input File Parameters\\\" special OGS input file parameter"
"ogs_file_param_special{1} = \\xrefitem ogs_file_param \\\"Input File Parameter\\\" \\\"List of all Input File Parameters\\\" \\ref ogs_file_param__\\1 \\\"\\1\\\"" "ogs_file_param_special{1} = \\xrefitem ogs_file_param \\\"Input File Parameter\\\" \\\"List of all Input File Parameters\\\" \\ref ogs_file_param__\\1 \\\"\\1\\\""
"ogs_file_attr_special{1} = \\xrefitem ogs_file_param \\\"Input File Parameter\\\" \\\"List of all Input File Parameters\\\" \\ref ogs_file_attr__\\1 \\\"\\1\\\"" "ogs_file_attr_special{1} = \\xrefitem ogs_file_param \\\"Input File Parameter\\\" \\\"List of all Input File Parameters\\\" \\ref ogs_file_attr__\\1 \\\"\\1\\\""
"ogs_missing_documentation = \\xrefitem ogs_missing_documentation \\\"Missing Documentation\\\" \\\"OGS Input File Parameters&mdash\;List of incomplete documentation pages\\\" Documentation missing/incomplete") "ogs_missing_documentation = \\xrefitem ogs_missing_documentation \\\"Missing Documentation\\\" \\\"OGS Input File Parameters&mdash\;List of incomplete documentation pages\\\" Documentation missing/incomplete"
)
set(DOXYGEN_CREATE_SUBDIRS YES) set(DOXYGEN_CREATE_SUBDIRS YES)
configure_file(${PROJECT_SOURCE_DIR}/Documentation/mainpage.dox.in ${PROJECT_BINARY_DIR}/DocAux/dox/mainpage.dox) configure_file(
${PROJECT_SOURCE_DIR}/Documentation/mainpage.dox.in
${PROJECT_BINARY_DIR}/DocAux/dox/mainpage.dox
)
doxygen_add_docs(doc doxygen_add_docs(doc ${PROJECT_SOURCE_DIR}/ ${PROJECT_BINARY_DIR}/DocAux/dox)
${PROJECT_SOURCE_DIR}/
${PROJECT_BINARY_DIR}/DocAux/dox)
if (BASH_TOOL_PATH AND Python3_EXECUTABLE) if(BASH_TOOL_PATH AND Python3_EXECUTABLE)
set(_doc_use_external_tools TRUE) set(_doc_use_external_tools TRUE)
else() else()
set(_doc_use_external_tools FALSE) set(_doc_use_external_tools FALSE)
endif() endif()
# TODO that will always transform all of the input files no matter if they changed # TODO that will always transform all of the input files no matter if they
# maybe this behaviour can be changed to on-demand processing # changed maybe this behaviour can be changed to on-demand processing
add_custom_target(internal_pre_doc add_custom_target(
internal_pre_doc
${CMAKE_COMMAND} ${CMAKE_COMMAND}
-DPROJECT_BINARY_DIR=${PROJECT_BINARY_DIR} -DPROJECT_BINARY_DIR=${PROJECT_BINARY_DIR}
-DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR} -DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}
-Ddoc_use_external_tools=${_doc_use_external_tools} -Ddoc_use_external_tools=${_doc_use_external_tools}
-P ${PROJECT_SOURCE_DIR}/scripts/cmake/DocumentationProjectFile.cmake -P
${PROJECT_SOURCE_DIR}/scripts/cmake/DocumentationProjectFile.cmake
WORKING_DIRECTORY ${PROJECT_BINARY_DIR} WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
COMMENT "Generating project file documentation hierarchy." VERBATIM) COMMENT "Generating project file documentation hierarchy."
VERBATIM
)
add_dependencies(doc internal_pre_doc) add_dependencies(doc internal_pre_doc)
if (_doc_use_external_tools) if(_doc_use_external_tools)
add_custom_target(internal_pre_doc_qa_page add_custom_target(
internal_pre_doc_qa_page
${BASH_TOOL_PATH} ${BASH_TOOL_PATH}
"${PROJECT_SOURCE_DIR}/scripts/doc/generate-project-file-doc-qa.sh" "${PROJECT_SOURCE_DIR}/scripts/doc/generate-project-file-doc-qa.sh"
${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR} "${Data_SOURCE_DIR}"
${PROJECT_BINARY_DIR}
"${Data_SOURCE_DIR}"
WORKING_DIRECTORY ${PROJECT_BINARY_DIR} WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
COMMENT "Generating project file documentation quality assurance pages." VERBATIM) COMMENT "Generating project file documentation quality assurance pages."
VERBATIM
)
add_dependencies(doc internal_pre_doc_qa_page) add_dependencies(doc internal_pre_doc_qa_page)
add_dependencies(internal_pre_doc_qa_page internal_pre_doc) add_dependencies(internal_pre_doc_qa_page internal_pre_doc)
endif() endif()
###################### # ##############################################################################
### Find tools ### # Find tools
###################### # ##############################################################################
string(REPLACE ".windows.1" "" GIT_VERSION_STRING ${GIT_VERSION_STRING}) string(REPLACE ".windows.1" "" GIT_VERSION_STRING ${GIT_VERSION_STRING})
if(${GIT_VERSION_STRING} VERSION_LESS ${ogs.minimum_version.git}) if(${GIT_VERSION_STRING} VERSION_LESS ${ogs.minimum_version.git})
message(FATAL_ERROR "Git version ${ogs.minimum_version.git} is required. \ message(FATAL_ERROR "Git version ${ogs.minimum_version.git} is required. \
Found version ${GIT_VERSION_STRING}.") Found version ${GIT_VERSION_STRING}."
)
endif() endif()
find_package(Doxygen OPTIONAL_COMPONENTS dot) find_package(Doxygen OPTIONAL_COMPONENTS dot)
...@@ -16,21 +17,9 @@ find_program(GPROF_PATH gprof DOC "GNU profiler gprof" QUIET) ...@@ -16,21 +17,9 @@ find_program(GPROF_PATH gprof DOC "GNU profiler gprof" QUIET)
find_program(CPPCHECK_TOOL_PATH cppcheck) find_program(CPPCHECK_TOOL_PATH cppcheck)
# Find bash itself ... # Find bash itself ...
find_program(BASH_TOOL_PATH bash find_program(
HINTS ${GITHUB_BIN_DIR} DOC "The bash executable") BASH_TOOL_PATH bash HINTS ${GITHUB_BIN_DIR} DOC "The bash executable"
)
# Dumpbin is a windows dependency analaysis tool required for packaging.
# Variable has to be named gp_cmd to override the outdated find routines
# of the GetPrerequisites CMake-module.
if(WIN32)
include(MSVCPaths)
find_program(gp_cmd dumpbin DOC "Windows dependency analysis tool"
PATHS ${MSVC_INSTALL_PATHS} PATH_SUFFIXES VC/bin)
if(gp_cmd)
get_filename_component(dir ${gp_cmd} PATH)
set(ENV{PATH} "${dir}/../../../Common7/IDE;$ENV{PATH}")
endif()
endif()
find_program(CURL_TOOL_PATH curl DOC "The curl-tool") find_program(CURL_TOOL_PATH curl DOC "The curl-tool")
...@@ -43,8 +32,10 @@ else() ...@@ -43,8 +32,10 @@ else()
endif() endif()
# Tools for web # Tools for web
find_program(VTKJS_CONVERTER vtkDataConverter find_program(
PATHS ${PROJECT_SOURCE_DIR}/web/node_modules/.bin) VTKJS_CONVERTER vtkDataConverter
PATHS ${PROJECT_SOURCE_DIR}/web/node_modules/.bin
)
find_program(HUGO hugo) find_program(HUGO hugo)
find_program(NPM npm) find_program(NPM npm)
find_program(YARN yarn) find_program(YARN yarn)
...@@ -57,11 +48,11 @@ find_program(SNAKEMAKE snakemake HINTS ${LOCAL_VIRTUALENV_BIN_DIRS}) ...@@ -57,11 +48,11 @@ find_program(SNAKEMAKE snakemake HINTS ${LOCAL_VIRTUALENV_BIN_DIRS})
find_program(GMSH gmsh) find_program(GMSH gmsh)
###################### # ##############################################################################
### Find libraries ### # Find libraries
###################### # ##############################################################################
if(OGS_USE_MFRONT) if(OGS_USE_MFRONT)
## pthread, is a requirement of mfront ## # pthread, is a requirement of mfront ##
set(CMAKE_THREAD_PREFER_PTHREAD ON) set(CMAKE_THREAD_PREFER_PTHREAD ON)
set(THREADS_PREFER_PTHREAD_FLAG ON) set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED) find_package(Threads REQUIRED)
...@@ -84,10 +75,12 @@ find_package(OpenMP) ...@@ -84,10 +75,12 @@ find_package(OpenMP)
if(OPENMP_FOUND) if(OPENMP_FOUND)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}"
)
endif() endif()
## Qt5 library ## # Qt5 library ##
if(OGS_BUILD_GUI) if(OGS_BUILD_GUI)
set(QT_MODULES Gui Widgets Xml XmlPatterns) set(QT_MODULES Gui Widgets Xml XmlPatterns)
if(UNIX AND NOT APPLE) if(UNIX AND NOT APPLE)
...@@ -107,23 +100,24 @@ endif() ...@@ -107,23 +100,24 @@ endif()
# lapack # lapack
find_package(LAPACK QUIET) find_package(LAPACK QUIET)
## geotiff ## # geotiff ##
find_package(GEOTIFF) find_package(GEOTIFF)
## lis ## # lis ##
if(OGS_USE_LIS) if(OGS_USE_LIS)
find_package( LIS REQUIRED ) find_package(LIS REQUIRED)
endif() endif()
if(OGS_USE_MKL) if(OGS_USE_MKL)
find_package( MKL REQUIRED ) find_package(MKL REQUIRED)
endif() endif()
if(OGS_USE_PETSC) if(OGS_USE_PETSC)
message(STATUS "Configuring for PETSc") message(STATUS "Configuring for PETSc")
option(FORCE_PETSC_EXECUTABLE_RUNS option(FORCE_PETSC_EXECUTABLE_RUNS
"Force CMake to accept a given PETSc configuration" ON) "Force CMake to accept a given PETSc configuration" ON
)
# Force CMake to accept a given PETSc configuration in case the failure of # Force CMake to accept a given PETSc configuration in case the failure of
# MPI tests. This may cause the compilation broken. # MPI tests. This may cause the compilation broken.
...@@ -136,11 +130,13 @@ if(OGS_USE_PETSC) ...@@ -136,11 +130,13 @@ if(OGS_USE_PETSC)
include_directories(SYSTEM ${PETSC_INCLUDES}) include_directories(SYSTEM ${PETSC_INCLUDES})
endif() endif()
## Check MPI package # Check MPI package
if(OGS_USE_MPI) if(OGS_USE_MPI)
find_package(MPI REQUIRED) find_package(MPI REQUIRED)
endif() endif()
find_package(Filesystem REQUIRED COMPONENTS Final Experimental) find_package(Filesystem REQUIRED COMPONENTS Final Experimental)
configure_file(${PROJECT_SOURCE_DIR}/BaseLib/filesystem.h.in configure_file(
${PROJECT_BINARY_DIR}/BaseLib/filesystem.h) ${PROJECT_SOURCE_DIR}/BaseLib/filesystem.h.in
${PROJECT_BINARY_DIR}/BaseLib/filesystem.h
)
# - Try to find libgeotiff # * Try to find libgeotiff
# #
# Once done, this will define # Once done, this will define
# #
# GEOTIFF_FOUND # * GEOTIFF_FOUND
# GEOTIFF_INCLUDE_DIRS # * GEOTIFF_INCLUDE_DIRS
# GEOTIFF_LIBRARIES # * GEOTIFF_LIBRARIES
###
# Dependencies
###
set(_deps_libs) set(_deps_libs)
set(_deps_includes) set(_deps_includes)
set(_deps_check) set(_deps_check)
find_path( libgeotiff_INCLUDE_DIR geotiff.h) find_path(libgeotiff_INCLUDE_DIR geotiff.h)
find_library(libgeotiff_LIBRARY geotiff) find_library(libgeotiff_LIBRARY geotiff)
find_path( xtiff_INCLUDE_DIR xtiffio.h) find_path(xtiff_INCLUDE_DIR xtiffio.h)
if(MSVC) if(MSVC)
find_library(xtiff_LIBRARY xtiff) find_library(xtiff_LIBRARY xtiff)
list(APPEND _deps_libs ${xtiff_LIBRARY}) list(APPEND _deps_libs ${xtiff_LIBRARY})
...@@ -29,15 +26,14 @@ list(APPEND _deps_includes ${TIFF_INCLUDE_DIRS}) ...@@ -29,15 +26,14 @@ list(APPEND _deps_includes ${TIFF_INCLUDE_DIRS})
list(APPEND _deps_check TIFF_FOUND) list(APPEND _deps_check TIFF_FOUND)
include(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(GEOTIFF find_package_handle_standard_args(
REQUIRED_VARS GEOTIFF REQUIRED_VARS libgeotiff_LIBRARY libgeotiff_INCLUDE_DIR
libgeotiff_LIBRARY xtiff_INCLUDE_DIR ${_deps_check}
libgeotiff_INCLUDE_DIR
xtiff_INCLUDE_DIR
${_deps_check}
) )
if(GEOTIFF_FOUND) if(GEOTIFF_FOUND)
set(GEOTIFF_INCLUDE_DIRS ${libgeotiff_INCLUDE_DIR} ${xtiff_INCLUDE_DIR} ${_deps_includes}) set(GEOTIFF_INCLUDE_DIRS ${libgeotiff_INCLUDE_DIR} ${xtiff_INCLUDE_DIR}
${_deps_includes}
)
set(GEOTIFF_LIBRARIES ${libgeotiff_LIBRARY} ${_deps_libs}) set(GEOTIFF_LIBRARIES ${libgeotiff_LIBRARY} ${_deps_libs})
endif() endif()
# Returns the current subdirectory in the sources directory. # Returns the current subdirectory in the sources directory.
macro(GET_CURRENT_SOURCE_SUBDIRECTORY current_source_subdirectory) macro(GET_CURRENT_SOURCE_SUBDIRECTORY current_source_subdirectory)
string(REGEX REPLACE ".*/([^/]*)" "\\1" REGEX_RESULT "${CMAKE_CURRENT_SOURCE_DIR}" ) string(REGEX REPLACE ".*/([^/]*)" "\\1" REGEX_RESULT
"${CMAKE_CURRENT_SOURCE_DIR}"
)
set(${current_source_subdirectory} ${REGEX_RESULT}) set(${current_source_subdirectory} ${REGEX_RESULT})
endmacro() endmacro()
# Returns a list of source files (*.h and *.cpp) in source_files and creates a Visual # Returns a list of source files (*.h and *.cpp) in source_files and creates a
# Studio folder. A (relative) subdirectory can be passed as second parameter (optional). # Visual Studio folder. A (relative) subdirectory can be passed as second
# parameter (optional).
macro(GET_SOURCE_FILES source_files) macro(GET_SOURCE_FILES source_files)
if(${ARGC} EQUAL 2) if(${ARGC} EQUAL 2)
set(DIR "${ARGV1}") set(DIR "${ARGV1}")
...@@ -14,11 +17,20 @@ macro(GET_SOURCE_FILES source_files) ...@@ -14,11 +17,20 @@ macro(GET_SOURCE_FILES source_files)
endif() endif()
# Get all files in the directory # Get all files in the directory
file(GLOB GET_SOURCE_FILES_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS ${DIR}/*.h) file(GLOB GET_SOURCE_FILES_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
file(GLOB GET_SOURCE_FILES_TEMPLATES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS ${DIR}/*.tpp) CONFIGURE_DEPENDS ${DIR}/*.h
file(GLOB GET_SOURCE_FILES_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS ${DIR}/*.cpp) )
file(GLOB GET_SOURCE_FILES_TEMPLATES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
CONFIGURE_DEPENDS ${DIR}/*.tpp
)
file(GLOB GET_SOURCE_FILES_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
CONFIGURE_DEPENDS ${DIR}/*.cpp
)
set(${source_files} ${GET_SOURCE_FILES_HEADERS} ${GET_SOURCE_FILES_TEMPLATES} ${GET_SOURCE_FILES_SOURCES}) set(${source_files}
${GET_SOURCE_FILES_HEADERS} ${GET_SOURCE_FILES_TEMPLATES}
${GET_SOURCE_FILES_SOURCES}
)
list(LENGTH ${source_files} NUM_FILES) list(LENGTH ${source_files} NUM_FILES)
if(${NUM_FILES} EQUAL 0) if(${NUM_FILES} EQUAL 0)
message(FATAL_ERROR "No source files found in ${DIR}") message(FATAL_ERROR "No source files found in ${DIR}")
...@@ -33,15 +45,17 @@ macro(GET_SOURCE_FILES source_files) ...@@ -33,15 +45,17 @@ macro(GET_SOURCE_FILES source_files)
endif() endif()
GET_CURRENT_SOURCE_SUBDIRECTORY(DIRECTORY) GET_CURRENT_SOURCE_SUBDIRECTORY(DIRECTORY)
source_group("${DIRECTORY}${DIR}" FILES source_group(
${GET_SOURCE_FILES_HEADERS} "${DIRECTORY}${DIR}"
${GET_SOURCE_FILES_SOURCES} FILES ${GET_SOURCE_FILES_HEADERS} ${GET_SOURCE_FILES_SOURCES}
${GET_SOURCE_FILES_TEMPLATES}) ${GET_SOURCE_FILES_TEMPLATES}
)
endmacro() endmacro()
# Appends a list of source files (*.h and *.cpp) to source_files and creates a Visual # Appends a list of source files (*.h and *.cpp) to source_files and creates a
# Studio folder. A (relative) subdirectory can be passed as second parameter (optional). # Visual Studio folder. A (relative) subdirectory can be passed as second
# parameter (optional).
macro(APPEND_SOURCE_FILES source_files) macro(APPEND_SOURCE_FILES source_files)
if(${ARGC} EQUAL 2) if(${ARGC} EQUAL 2)
set(DIR "${ARGV1}") set(DIR "${ARGV1}")
...@@ -53,15 +67,22 @@ macro(APPEND_SOURCE_FILES source_files) ...@@ -53,15 +67,22 @@ macro(APPEND_SOURCE_FILES source_files)
set(${source_files} ${${source_files}} ${TMP_SOURCES}) set(${source_files} ${${source_files}} ${TMP_SOURCES})
endmacro() endmacro()
# Creates one ctest for each googletest found in source files passed as arguments # Creates one ctest for each googletest found in source files passed as
# number two onwards. Argument one specifies the testrunner executable. # arguments number two onwards. Argument one specifies the testrunner
# executable.
macro(ADD_GOOGLE_TESTS executable) macro(ADD_GOOGLE_TESTS executable)
foreach(source ${ARGN}) foreach(source ${ARGN})
file(READ "${source}" contents) file(READ "${source}" contents)
string(REGEX MATCHALL "TEST_?F?\\(([A-Za-z_0-9 ,]+)\\)" found_tests ${contents}) string(REGEX MATCHALL "TEST_?F?\\(([A-Za-z_0-9 ,]+)\\)" found_tests
${contents}
)
foreach(hit ${found_tests}) foreach(hit ${found_tests})
string(REGEX REPLACE ".*\\(([A-Za-z_0-9]+)[, ]*([A-Za-z_0-9]+)\\).*" "\\1.\\2" test_name ${hit}) string(REGEX REPLACE ".*\\(([A-Za-z_0-9]+)[, ]*([A-Za-z_0-9]+)\\).*"
add_test(${test_name} ${executable} --gtest_output=xml --gtest_filter=${test_name} ${MI3CTestingDir}) "\\1.\\2" test_name ${hit}
)
add_test(${test_name} ${executable} --gtest_output=xml
--gtest_filter=${test_name} ${MI3CTestingDir}
)
endforeach() endforeach()
endforeach() endforeach()
endmacro() endmacro()
...@@ -71,28 +92,43 @@ endmacro() ...@@ -71,28 +92,43 @@ endmacro()
function(add_autogen_include target) function(add_autogen_include target)
get_property(IsMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) get_property(IsMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(IsMultiConfig) if(IsMultiConfig)
target_include_directories(${target} PUBLIC target_include_directories(
${CMAKE_CURRENT_BINARY_DIR}/${target}_autogen/include_$<CONFIG>) ${target}
PUBLIC
${CMAKE_CURRENT_BINARY_DIR}/${target}_autogen/include_$<CONFIG>
)
else() else()
target_include_directories(${target} PUBLIC target_include_directories(
${CMAKE_CURRENT_BINARY_DIR}/${target}_autogen/include) ${target}
PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/${target}_autogen/include
)
endif() endif()
endfunction() endfunction()
# Replacement for add_library() for ogs targets # Replacement for add_library() for ogs targets
function(ogs_add_library targetName) function(ogs_add_library targetName)
add_library(${targetName} ${ARGN}) add_library(${targetName} ${ARGN})
target_compile_options(${targetName} PRIVATE target_compile_options(
# OR does not work with cotire ${targetName}
# $<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>, PRIVATE # OR does not work with cotire
# $<CXX_COMPILER_ID:GNU>>:-Wall -Wextra> # $<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>,
$<$<CXX_COMPILER_ID:Clang>:-Wall -Wextra -Wunreachable-code> # $<CXX_COMPILER_ID:GNU>>:-Wall -Wextra>
$<$<CXX_COMPILER_ID:AppleClang>:-Wall -Wextra -Wunreachable-code> $<$<CXX_COMPILER_ID:Clang>:-Wall
$<$<CXX_COMPILER_ID:GNU>:-Wall -Wextra -Wunreachable-code> -Wextra
$<$<CXX_COMPILER_ID:MSVC>:/W3>) -Wunreachable-code>
$<$<CXX_COMPILER_ID:AppleClang>:-Wall
-Wextra
-Wunreachable-code>
$<$<CXX_COMPILER_ID:GNU>:-Wall
-Wextra
-Wunreachable-code>
$<$<CXX_COMPILER_ID:MSVC>:/W3>
)
if(BUILD_SHARED_LIBS) if(BUILD_SHARED_LIBS)
install(TARGETS ${targetName} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(TARGETS ${targetName}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
endif() endif()
include(GenerateExportHeader) include(GenerateExportHeader)
...@@ -100,14 +136,17 @@ function(ogs_add_library targetName) ...@@ -100,14 +136,17 @@ function(ogs_add_library targetName)
target_include_directories(${targetName} PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) target_include_directories(${targetName} PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.16) if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.16)
set_target_properties(${targetName} PROPERTIES set_target_properties(
UNITY_BUILD ${OGS_USE_UNITY_BUILDS}) ${targetName} PROPERTIES UNITY_BUILD ${OGS_USE_UNITY_BUILDS}
)
endif() endif()
endfunction() endfunction()
# Parses current directory into a list # Parses current directory into a list
function(current_dir_as_list baseDir outList) function(current_dir_as_list baseDir outList)
file(RELATIVE_PATH REL_DIR ${PROJECT_SOURCE_DIR}/${baseDir} ${CMAKE_CURRENT_LIST_DIR}) file(RELATIVE_PATH REL_DIR ${PROJECT_SOURCE_DIR}/${baseDir}
${CMAKE_CURRENT_LIST_DIR}
)
string(REPLACE "/" ";" DIR_LIST ${REL_DIR}) string(REPLACE "/" ";" DIR_LIST ${REL_DIR})
set(${outList} ${DIR_LIST} PARENT_SCOPE) set(${outList} ${DIR_LIST} PARENT_SCOPE)
endfunction() endfunction()
option(OGS_ADDRESS_SANITIZER OFF "Use GCCs AddressSanitizer") option(OGS_ADDRESS_SANITIZER OFF "Use GCCs AddressSanitizer")
option(OGS_UNDEFINED_BEHAVIOR_SANITIZER OFF "Use GCCs UndefinedBehaviorSanitizer") option(OGS_UNDEFINED_BEHAVIOR_SANITIZER OFF
"Use GCCs UndefinedBehaviorSanitizer"
)
if(OGS_ADDRESS_SANITIZER) if(OGS_ADDRESS_SANITIZER)
set(SANITIZE_FLAG_VALUE "address") set(SANITIZE_FLAG_VALUE "address")
...@@ -7,7 +9,9 @@ if(OGS_ADDRESS_SANITIZER) ...@@ -7,7 +9,9 @@ if(OGS_ADDRESS_SANITIZER)
endif() endif()
if(OGS_UNDEFINED_BEHAVIOR_SANITIZER) if(OGS_UNDEFINED_BEHAVIOR_SANITIZER)
set(SANITIZE_FLAG_VALUE "${SANITIZE_FLAG_VALUE},undefined,unreachable,integer-divide-by-zero,vla-bound,bounds,null") set(SANITIZE_FLAG_VALUE
"${SANITIZE_FLAG_VALUE},undefined,unreachable,integer-divide-by-zero,vla-bound,bounds,null"
)
endif() endif()
if(DEFINED SANITIZE_FLAG_VALUE) if(DEFINED SANITIZE_FLAG_VALUE)
......
### Git detection ### # Git detection
find_package(Git REQUIRED) find_package(Git REQUIRED)
# cmake-lint: disable=W0106 # cmake-lint: disable=W0106
...@@ -10,19 +10,27 @@ elseif(DEFINED OGS_VERSION) ...@@ -10,19 +10,27 @@ elseif(DEFINED OGS_VERSION)
endif() endif()
if(NOT _IS_GIT_REPO) if(NOT _IS_GIT_REPO)
execute_process(COMMAND ${GIT_EXECUTABLE} status execute_process(
COMMAND ${GIT_EXECUTABLE} status
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
RESULT_VARIABLE _IS_GIT_REPO RESULT_VARIABLE _IS_GIT_REPO
OUTPUT_QUIET) OUTPUT_QUIET
)
if(_IS_GIT_REPO GREATER 0) if(_IS_GIT_REPO GREATER 0)
set(_IS_GIT_REPO FALSE CACHE INTERNAL "") set(_IS_GIT_REPO FALSE CACHE INTERNAL "")
if(DEFINED OGS_VERSION) if(DEFINED OGS_VERSION)
message(WARNING "Using user-provided OGS_VERSION; Submodule setup is skipped!") message(
WARNING
"Using user-provided OGS_VERSION; Submodule setup is skipped!"
)
else() else()
message(FATAL_ERROR "No git repository found at ${PROJECT_SOURCE_DIR}! " message(
"Please use git to obtain the source code! See " FATAL_ERROR
"https://www.opengeosys.org/docs/devguide/getting-started/get-the-source-code/" "No git repository found at ${PROJECT_SOURCE_DIR}! "
" OR manually set the OGS_VERSION variable.") "Please use git to obtain the source code! See "
"https://www.opengeosys.org/docs/devguide/getting-started/get-the-source-code/"
" OR manually set the OGS_VERSION variable."
)
endif() endif()
else() else()
set(_IS_GIT_REPO TRUE CACHE INTERNAL "") set(_IS_GIT_REPO TRUE CACHE INTERNAL "")
...@@ -72,19 +80,26 @@ if(_IS_GIT_REPO AND NOT OGS_VERSION) ...@@ -72,19 +80,26 @@ if(_IS_GIT_REPO AND NOT OGS_VERSION)
set(OGS_VERSION ${DESCRIBE_TAG}) set(OGS_VERSION ${DESCRIBE_TAG})
if(DESCRIBE_COMMIT_COUNT GREATER 0) if(DESCRIBE_COMMIT_COUNT GREATER 0)
set(OGS_VERSION "${OGS_VERSION}-${DESCRIBE_COMMIT_COUNT}-${DESCRIBE_COMMIT_NAME}") set(OGS_VERSION
"${OGS_VERSION}-${DESCRIBE_COMMIT_COUNT}-${DESCRIBE_COMMIT_NAME}"
)
endif() endif()
if(DESCRIBE_DIRTY) if(DESCRIBE_DIRTY)
set(OGS_VERSION "${OGS_VERSION}.dirty") set(OGS_VERSION "${OGS_VERSION}.dirty")
if(DEFINED ENV{CI}) if(DEFINED ENV{CI})
string(TIMESTAMP DESCRIBE_DIRTY_TIMESTAMP "%Y%m%d%H%M%S" UTC) string(TIMESTAMP DESCRIBE_DIRTY_TIMESTAMP "%Y%m%d%H%M%S" UTC)
set(OGS_VERSION "${OGS_VERSION}.dirty.${DESCRIBE_DIRTY_TIMESTAMP}") set(OGS_VERSION
"${OGS_VERSION}.dirty.${DESCRIBE_DIRTY_TIMESTAMP}"
)
endif() endif()
endif() endif()
message(STATUS "OGS VERSION: ${OGS_VERSION} (reported by git)") message(STATUS "OGS VERSION: ${OGS_VERSION} (reported by git)")
else() else()
message(WARNING "Git repository contains no tags! Please run: git fetch --tags") message(
WARNING
"Git repository contains no tags! Please run: git fetch --tags"
)
endif() endif()
# Get git commit # Get git commit
......
# This set MSVC_INSTALL_PATHS cache variable to a list of possible Visual Studio
# install directories.
# Usage:
#
# include(MSVCPaths)
# find_program(DUMPBIN_TOOL_PATH dumpbin DOC "Windows dependency analysis tool"
# PATHS MSVC_INSTALL_PATHS PATH_SUFFIXES VC/bin)
if(MSVC)
if(MSVC_VERSION EQUAL 1700)
set(MSVC_NUMBER 11.0)
elseif(MSVC_VERSION EQUAL 1800)
set(MSVC_NUMBER 12.0)
endif()
get_filename_component(VS_DIR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${MSVC_NUMBER}\\Setup\\VS;ProductDir]" REALPATH)
get_filename_component(VS_EXPRESS_DIR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\${MSVC_NUMBER}\\Setup\\VS;ProductDir]" REALPATH)
set(X86_TMP "ProgramFiles(x86)")
set(MSVC_INSTALL_PATHS
${VS_DIR} ${VS_EXPRESS_DIR}
"$ENV{ProgramFiles}/Microsoft\ Visual\ Studio\ ${MSVC_NUMBER}"
"$ENV{${X86_TMP}}/Microsoft\ Visual\ Studio\ ${MSVC_NUMBER}"
CACHE STRING "" FORCE)
endif()
message( STATUS "The METIS package is copyrighted by the Regents of the University of Minnesota." ) message(
message( STATUS "Please read the license of the METIS package carefully before you use the METIS." ) STATUS
"The METIS package is copyrighted by the Regents of the University of Minnesota."
)
message(
STATUS
"Please read the license of the METIS package carefully before you use the METIS."
)
set(METIS_PATH ${metis_SOURCE_DIR}) set(METIS_PATH ${metis_SOURCE_DIR})
add_definitions(-DUSE_GKREGEX) add_definitions(-DUSE_GKREGEX)
...@@ -15,9 +21,8 @@ include(${GKLIB_PATH}/GKlibSystem.cmake) ...@@ -15,9 +21,8 @@ include(${GKLIB_PATH}/GKlibSystem.cmake)
include_directories(${GKLIB_PATH}) include_directories(${GKLIB_PATH})
include_directories(${METIS_PATH}/include) include_directories(${METIS_PATH}/include)
# From ${METIS_PATH}/libmetis/CMakeLists.txt # From ${METIS_PATH}/libmetis/CMakeLists.txt Removed linking to conan Add this
# Removed linking to conan # directory for internal users.
# Add this directory for internal users.
include_directories(BEFORE ${METIS_PATH}/libmetis) include_directories(BEFORE ${METIS_PATH}/libmetis)
# Find sources. # Find sources.
file(GLOB metis_sources ${METIS_PATH}/libmetis/*.c) file(GLOB metis_sources ${METIS_PATH}/libmetis/*.c)
...@@ -37,16 +42,14 @@ elseif(MSVC) ...@@ -37,16 +42,14 @@ elseif(MSVC)
generate_export_header(ogs_metis) generate_export_header(ogs_metis)
endif() endif()
## Compile mpmetis # Compile mpmetis
add_compile_definitions(IDXTYPEWIDTH=64) add_compile_definitions(IDXTYPEWIDTH=64)
add_definitions(-DSVNINFO="") add_definitions(-DSVNINFO="")
include_directories(${METIS_PATH}/libmetis) include_directories(${METIS_PATH}/libmetis)
include_directories(${METIS_PATH}/programs) include_directories(${METIS_PATH}/programs)
set(METIS_SOURCES set(METIS_SOURCES
${METIS_PATH}/programs/mpmetis.c ${METIS_PATH}/programs/mpmetis.c ${METIS_PATH}/programs/cmdline_mpmetis.c
${METIS_PATH}/programs/cmdline_mpmetis.c ${METIS_PATH}/programs/io.c ${METIS_PATH}/programs/stat.c
${METIS_PATH}/programs/io.c
${METIS_PATH}/programs/stat.c
) )
add_executable(mpmetis ${METIS_SOURCES}) add_executable(mpmetis ${METIS_SOURCES})
target_link_libraries(mpmetis ogs_metis) target_link_libraries(mpmetis ogs_metis)
......
# Implementation from https://stackoverflow.com/questions/10205986 # Implementation from https://stackoverflow.com/questions/10205986
# #
# Captures not-yet cached CMake variables. # Captures not-yet cached CMake variables. On first CMake run via cmake-cli this
# On first CMake run via cmake-cli this works as expected. # works as expected. Once the variables are cached this will not work anymore
# Once the variables are cached this will not work anymore (and is # (and is therefore skipped).
# therefore skipped).
# #
# When running CMake -D.. passed args can be retrieved with by the # When running CMake -D.. passed args can be retrieved with by the
# CACHE_VARIABLES CMake property. On sub-sequent CMake runs it is # CACHE_VARIABLES CMake property. On sub-sequent CMake runs it is no longer
# no longer possible to differentiate between variables already cached # possible to differentiate between variables already cached by option()-calls
# by option()-calls and variables passed to the CMake call with -D.. # and variables passed to the CMake call with -D..
# #
# A (cached) map data structure would solve this. # A (cached) map data structure would solve this. Tried the following map
# Tried the following map implementations without luck: # implementations without luck: - https://github.com/toeb/cmakepp (not cached) -
# - https://github.com/toeb/cmakepp (not cached) # https://github.com/j3lamp/mcl (did not work at all)
# - https://github.com/j3lamp/mcl (did not work at all)
if(EXISTS ${PROJECT_BINARY_DIR}/CMakeCache.txt) if(EXISTS ${PROJECT_BINARY_DIR}/CMakeCache.txt)
return() return()
...@@ -22,18 +20,24 @@ endif() ...@@ -22,18 +20,24 @@ endif()
get_cmake_property(CACHE_VARS CACHE_VARIABLES) get_cmake_property(CACHE_VARS CACHE_VARIABLES)
foreach(cache_var ${CACHE_VARS}) foreach(cache_var ${CACHE_VARS})
get_property(CACHE_VAR_HELPSTRING CACHE ${cache_var} PROPERTY HELPSTRING) get_property(CACHE_VAR_HELPSTRING CACHE ${cache_var} PROPERTY HELPSTRING)
if(CACHE_VAR_HELPSTRING STREQUAL "No help, variable specified on the command line.") if(CACHE_VAR_HELPSTRING STREQUAL
"No help, variable specified on the command line."
)
get_property(CACHE_VAR_TYPE CACHE ${cache_var} PROPERTY TYPE) get_property(CACHE_VAR_TYPE CACHE ${cache_var} PROPERTY TYPE)
if(CACHE_VAR_TYPE STREQUAL "UNINITIALIZED") if(CACHE_VAR_TYPE STREQUAL "UNINITIALIZED")
set(CACHE_VAR_TYPE) set(CACHE_VAR_TYPE)
else() else()
set(CACHE_VAR_TYPE :${CACHE_VAR_TYPE}) set(CACHE_VAR_TYPE :${CACHE_VAR_TYPE})
endif() endif()
set(CMAKE_ARGS "${CMAKE_ARGS} -D${cache_var}${CACHE_VAR_TYPE}=\"${${cache_var}}\"") set(CMAKE_ARGS
"${CMAKE_ARGS} -D${cache_var}${CACHE_VAR_TYPE}=\"${${cache_var}}\""
)
endif() endif()
endforeach() endforeach()
set(CMAKE_ARGS "${CMAKE_ARGS} -DCMAKE_BUILD_TYPE=\"${CMAKE_BUILD_TYPE}\"" CACHE STRING "") set(CMAKE_ARGS "${CMAKE_ARGS} -DCMAKE_BUILD_TYPE=\"${CMAKE_BUILD_TYPE}\""
CACHE STRING ""
)
string(REPLACE "\"" "\\\"" CMAKE_ARGS_ESCAPED ${CMAKE_ARGS}) string(REPLACE "\"" "\\\"" CMAKE_ARGS_ESCAPED ${CMAKE_ARGS})
set(CMAKE_ARGS_ESCAPED "${CMAKE_ARGS_ESCAPED}" CACHE STRING "") set(CMAKE_ARGS_ESCAPED "${CMAKE_ARGS_ESCAPED}" CACHE STRING "")
file(WRITE ${PROJECT_BINARY_DIR}/cmake-args "${CMAKE_ARGS}\n") file(WRITE ${PROJECT_BINARY_DIR}/cmake-args "${CMAKE_ARGS}\n")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment