mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
This let you specify a bunch of directory names on the command line to *all* packages, without getting annoying warnings that they are defined but not used.
210 lines
6.5 KiB
CMake
210 lines
6.5 KiB
CMake
# -*- mode: cmake; tab-width: 2; indent-tabs-mode: t; truncate-lines: t; compile-command: "cmake -Wdev" -*-
|
|
# vim: set filetype=cmake autoindent tabstop=2 shiftwidth=2 noexpandtab softtabstop=2 nowrap:
|
|
|
|
# retrieve the meta info about the project from the dune.module file
|
|
set(project "opm-material")
|
|
string(TOUPPER "${project}" PROJECT)
|
|
string(REPLACE "-" "_" PROJECT "${PROJECT}")
|
|
set(${project}_MODULE_DIR "${CMAKE_SOURCE_DIR}/cmake/Modules")
|
|
set(PROJECT_BINARY_DIR "${CMAKE_BINARY_DIR}")
|
|
set(PROJECT_SOURCE_DIR "${CMAKE_SOURCE_DIR}")
|
|
list(APPEND CMAKE_MODULE_PATH ${${project}_MODULE_DIR})
|
|
|
|
if (CMAKE_VERSION VERSION_LESS "2.8.3")
|
|
message (STATUS "Enabling backward compatibility modules for CMake < 2.8.3")
|
|
list (APPEND CMAKE_MODULE_PATH "${${project}_MODULE_DIR}/compat-2.8.3")
|
|
endif (CMAKE_VERSION VERSION_LESS "2.8.3")
|
|
|
|
if (CMAKE_VERSION VERSION_LESS "2.8.5")
|
|
message (STATUS "Enabling backward compatibility modules for CMake < 2.8.5")
|
|
list (APPEND CMAKE_MODULE_PATH "${${project}_MODULE_DIR}/compat-2.8.5")
|
|
endif (CMAKE_VERSION VERSION_LESS "2.8.5")
|
|
|
|
include(OpmParseDuneModule)
|
|
OpmParseDuneModule("${project}" FILE_NAME "${CMAKE_SOURCE_DIR}/dune.module")
|
|
set (doxy_dir "doc/doxygen")
|
|
|
|
# defines that must be present in config.h for our headers
|
|
set (${project}_CONFIG_VAR
|
|
HAVE_NULLPTR
|
|
HAVE_ARRAY
|
|
HAVE_ATTRIBUTE_ALWAYS_INLINE
|
|
HAS_ATTRIBUTE_UNUSED
|
|
HAS_ATTRIBUTE_DEPRECATED
|
|
HAS_ATTRIBUTE_DEPRECATED_MSG
|
|
HAVE_CONSTEXPR
|
|
HAVE_INTEGRAL_CONSTANT
|
|
HAVE_STATIC_ASSERT
|
|
HAVE_VARIADIC_TEMPLATES
|
|
HAVE_VARIADIC_CONSTRUCTOR_SFINAE
|
|
HAVE_RVALUE_REFERENCES
|
|
HAVE_TUPLE
|
|
HAVE_TR1_TUPLE
|
|
)
|
|
|
|
# convert string with dependencies to a list. TODO: recursive and
|
|
# optional dependencies
|
|
string(REPLACE " " ";" ${PROJECT}_DEPENDS_LIST ${${PROJECT}_DEPENDS})
|
|
|
|
# dependencies
|
|
set (${project}_DEPS
|
|
# compile with C99 support if available
|
|
"C99"
|
|
# needs a C++0x/11 compiler
|
|
"CXX11Features REQUIRED"
|
|
# dependencies
|
|
${${PROJECT}_DEPENDS_LIST}
|
|
)
|
|
|
|
|
|
# C++ project
|
|
cmake_minimum_required (VERSION 2.8)
|
|
project(${${project}_NAME})
|
|
enable_language (C)
|
|
enable_language (CXX)
|
|
|
|
# print system information to better pinpoint issues from log alone
|
|
include (UseSystemInfo)
|
|
system_info ()
|
|
|
|
# very early try to print repo id (to pinpoint version if something goes wrong)
|
|
include (UseVCSInfo)
|
|
vcs_info ()
|
|
|
|
# print toolchain information to identify compilers with potential bugs
|
|
include (UseCompVer)
|
|
compiler_info ()
|
|
|
|
# include special
|
|
if (CMAKE_VERSION VERSION_LESS "2.8.7")
|
|
message (STATUS "Enabling backward compatibility modules for CMake ${CMAKE_VERSION}")
|
|
list (APPEND CMAKE_MODULE_PATH "${${project}_MODULE_DIR}/compat-2.8.7")
|
|
endif (CMAKE_VERSION VERSION_LESS "2.8.7")
|
|
|
|
# default settings: build static debug library
|
|
include (OpmDefaults)
|
|
opm_defaults (${project})
|
|
message (STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
|
|
|
# use tricks to do faster builds
|
|
include (UseFastBuilds)
|
|
|
|
# precompiled headers
|
|
include (UsePrecompHeaders)
|
|
|
|
# optimize full if we're not doing a debug build
|
|
include (UseOptimization)
|
|
|
|
# turn on all warnings; this must be done before adding any
|
|
# dependencies, in case they alter the list of warnings
|
|
include (UseWarnings)
|
|
|
|
# macro to set standard variables (INCLUDE_DIRS, LIBRARIES etc.)
|
|
include (OpmFind)
|
|
find_and_append_package_list_to (${project} ${${project}_DEPS})
|
|
|
|
# make sure the C++-2011 features which we rely on are supported
|
|
if (NOT HAVE_ARRAY)
|
|
message(FATAL_ERROR "std::array must be supported by the compiler for the ${project} module to work")
|
|
endif()
|
|
|
|
if (NOT HAVE_STATIC_ASSERT)
|
|
message(FATAL_ERROR "static assertations (via static_assert) must be supported for the ${project} module to work")
|
|
endif()
|
|
|
|
if (NOT HAVE_AUTO)
|
|
message(FATAL_ERROR "The 'auto' keyword must be supported by the compiler for the ${project} module to work")
|
|
endif()
|
|
|
|
# put debug information into every executable
|
|
include (UseDebugSymbols)
|
|
|
|
# needed for Debian installation scheme
|
|
include (UseMultiArch)
|
|
|
|
# this module contains code to figure out which file is where
|
|
include (OpmFiles)
|
|
opm_auto_dirs ()
|
|
|
|
# put libraries in lib/
|
|
opm_out_dirs ()
|
|
|
|
# identify the compilation units in the library; sources in opm/,
|
|
# tests files in tests/
|
|
opm_sources (${project})
|
|
|
|
# create configuration header which describes available features
|
|
# necessary to compile this library. singular version is the names that
|
|
# is required by this project alone, plural version transitively
|
|
# includes the necessary defines by the dependencies
|
|
include (ConfigVars)
|
|
list (APPEND ${project}_CONFIG_VARS ${${project}_CONFIG_VAR})
|
|
|
|
# write configuration variables to this file. note that it is a temporary.
|
|
message (STATUS "Writing config file \"${PROJECT_BINARY_DIR}/config.h\"...")
|
|
set (CONFIG_H "${PROJECT_BINARY_DIR}/config.h.tmp")
|
|
configure_vars (
|
|
FILE CXX ${CONFIG_H}
|
|
WRITE ${${project}_CONFIG_VARS}
|
|
)
|
|
|
|
# overwrite the config.h that is used by the code only if we have some
|
|
# real changes. thus, we don't have to recompile if a reconfigure is run
|
|
# due to some files being added, for instance
|
|
execute_process (COMMAND
|
|
${CMAKE_COMMAND} -E copy_if_different ${CONFIG_H} ${PROJECT_BINARY_DIR}/config.h
|
|
)
|
|
|
|
# compile main library; pull in all required includes and libraries
|
|
include (OpmCompile)
|
|
opm_compile (${project})
|
|
|
|
# installation target: copy the library together with debug and
|
|
# configuration files to system directories
|
|
include (OpmInstall)
|
|
opm_install (${project})
|
|
message (STATUS "This build defaults to installing in ${CMAKE_INSTALL_PREFIX}")
|
|
|
|
# installation of CMake modules to help user programs locate the library
|
|
include (OpmProject)
|
|
opm_cmake_config (${project})
|
|
|
|
# routines to build satellites such as tests, tutorials and samples
|
|
include (OpmSatellites)
|
|
|
|
# example programs are found in the tutorials/ and examples/ directory
|
|
opm_compile_satellites (${project} examples "" "")
|
|
|
|
# infrastructure for testing
|
|
enable_testing ()
|
|
include (CTest)
|
|
|
|
# make datafiles necessary for tests available in output directory
|
|
opm_data (tests datafiles "${tests_DIR}")
|
|
opm_compile_satellites (${project} tests "" "${tests_REGEXP}")
|
|
|
|
# use this target to run all tests
|
|
add_custom_target (check
|
|
COMMAND ${CMAKE_CTEST_COMMAND}
|
|
DEPENDS tests
|
|
COMMENT "Checking if tests work"
|
|
VERBATIM
|
|
)
|
|
|
|
# generate documentation from source code with Doxygen;
|
|
# setup install target for this documentation
|
|
include (OpmDoc)
|
|
opm_doc (${project} ${doxy_dir})
|
|
|
|
# provide compatibility with using this build in dunecontrol
|
|
include (DuneCompat)
|
|
include (LibtoolArchives)
|
|
configure_la (${project} ${${project}_TARGET} ${project}_LIBTOOL_ARCHIVE)
|
|
|
|
### clean in-source builds ###
|
|
include (OpmDistClean)
|
|
opm_dist_clean (${project})
|
|
|
|
### emulate the with-xxx feature of autotools;
|
|
include (OpmKnown)
|