We cannot generate dune.module because that file is read by dunecontrol before the build starts. It therefore make sense to let it be the original and let the build system read it instead of duplicating the information in CMakeLists.txt This module is a adaption of Andreas Lauser's OpmParseDuneModule in opm-material, modified to handle the more sparse info provided by the other modules as well.
60 lines
2.1 KiB
CMake
60 lines
2.1 KiB
CMake
# - Initialize project-specific variables
|
|
#
|
|
# This will read the dune.module file for project information and
|
|
# set the following variables:
|
|
#
|
|
# project From the Module: field
|
|
# ${project}_NAME Same as above
|
|
# ${project}_DESCRIPTION From the Description: field
|
|
# ${project}_VERSION_MAJOR From the Version: field
|
|
# ${project}_VERSION_MINOR From the Version: field also
|
|
#
|
|
# This module should be the first to be included in the project,
|
|
# because most of the others (OpmXxx.cmake) use these variables.
|
|
|
|
# helper macro to retrieve a single field of a dune.module file
|
|
macro(OpmGetDuneModuleDirective field variable contents)
|
|
string (REGEX MATCH ".*${field}:[ ]*([^\n]+).*" ${variable} "${contents}")
|
|
string (REGEX REPLACE ".*${field}:[ ]*([^\n]+).*" "\\1" "${variable}" "${${variable}}")
|
|
string (STRIP "${${variable}}" ${variable})
|
|
endmacro()
|
|
|
|
function (OpmInitProjVars)
|
|
# locate the "dune.module" file
|
|
set (DUNE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/dune.module")
|
|
|
|
# read this file into a variable
|
|
file (READ "${DUNE_MODULE_PATH}" DUNE_MODULE)
|
|
|
|
# read fields from the file
|
|
OpmGetDuneModuleDirective ("Module" project "${DUNE_MODULE}")
|
|
OpmGetDuneModuleDirective ("Description" description "${DUNE_MODULE}")
|
|
OpmGetDuneModuleDirective ("Version" version "${DUNE_MODULE}")
|
|
|
|
# parse the version number
|
|
set (verno_regex "^([0-9]*)\\.([0-9]*).*\$")
|
|
string (REGEX REPLACE "${verno_regex}" "\\1" major "${version}")
|
|
string (REGEX REPLACE "${verno_regex}" "\\2" minor "${version}")
|
|
|
|
# return these variables
|
|
set (project "${project}" PARENT_SCOPE)
|
|
set (${project}_NAME "${project}" PARENT_SCOPE)
|
|
set (${project}_DESCRIPTION "${description}" PARENT_SCOPE)
|
|
set (${project}_VERSION_MAJOR "${major}" PARENT_SCOPE)
|
|
set (${project}_VERSION_MINOR "${minor}" PARENT_SCOPE)
|
|
endfunction ()
|
|
|
|
macro (OpmInitDirVars)
|
|
# these are the most common (and desired locations)
|
|
set (${project}_DIR "opm")
|
|
set (doxy_dir "doc/doxygen")
|
|
|
|
# but for backward compatibility we can override it
|
|
if (COMMAND dir_hook)
|
|
dir_hook ()
|
|
endif (COMMAND dir_hook)
|
|
endmacro ()
|
|
|
|
OpmInitProjVars ()
|
|
OpmInitDirVars ()
|