diff --git a/cmake/modules/DuneMacros.cmake b/cmake/modules/DuneMacros.cmake index 64a07dad7c384a75d2b02d7e3435f073255511e9..d2422fafcd01db0316f31a1d77fc5eccda324e74 100644 --- a/cmake/modules/DuneMacros.cmake +++ b/cmake/modules/DuneMacros.cmake @@ -123,69 +123,75 @@ function(convert_deps_to_list var) endfunction(convert_deps_to_list var) # add dune-common version from dune.module to config.h -macro(dune_module_information MODULE_DIR) - file(READ "${MODULE_DIR}/dune.module" DUNE_MODULE) +macro(dune_module_information MODULE_DIR PREFIX) + # Is this a directory or the module file + string(REGEX MATCH "dune.module$" is_file "${MODULE_DIR}") + if(is_file) + file(READ "${MODULE_DIR}" ${PREFIX}_MODULE) + else(is_file) + file(READ "${MODULE_DIR}/dune.module" ${PREFIX}_MODULE) + endif(is_file) # find version string - extract_line("Version:" MODULE_LINE "${DUNE_MODULE}") + extract_line("Version:" MODULE_LINE "${${PREFIX}_MODULE}") if(NOT MODULE_LINE) message(FATAL_ERROR "${MODULE_DIR}/dune.module is missing a version.") endif(NOT MODULE_LINE) - string(REGEX REPLACE ".*Version:[ ]*([^ \n]+).*" "\\1" DUNE_MOD_VERSION "${MODULE_LINE}") - string(REGEX REPLACE "([0-9]).*" "\\1" DUNE_VERSION_MAJOR "${DUNE_MOD_VERSION}") - string(REGEX REPLACE "[0-9]*\\.([0-9]).*" "\\1" DUNE_VERSION_MINOR "${DUNE_MOD_VERSION}") - string(REGEX REPLACE "[0-9]*\\.[0-9]*\\.([0-9]).*" "\\1" DUNE_VERSION_REVISION "${DUNE_MOD_VERSION}") + string(REGEX REPLACE ".*Version:[ ]*([^ \n]+).*" "\\1" ${PREFIX}_MOD_VERSION "${MODULE_LINE}") + string(REGEX REPLACE "([0-9]).*" "\\1" ${PREFIX}_VERSION_MAJOR "${${PREFIX}_MOD_VERSION}") + string(REGEX REPLACE "[0-9]*\\.([0-9]).*" "\\1" ${PREFIX}_VERSION_MINOR "${${PREFIX}_MOD_VERSION}") + string(REGEX REPLACE "[0-9]*\\.[0-9]*\\.([0-9]).*" "\\1" ${PREFIX}_VERSION_REVISION "${${PREFIX}_MOD_VERSION}") # remove false matches in version string - string(REGEX MATCH "[^0-9]" NON_NUMBER_CHARACTER "${DUNE_VERSION_MINOR}") + string(REGEX MATCH "[^0-9]" NON_NUMBER_CHARACTER "${${PREFIX}_VERSION_MINOR}") if(NON_NUMBER_CHARACTER) - set(DUNE_VERSION_MINOR "0") + set(${PREFIX}_VERSION_MINOR "0") endif(NON_NUMBER_CHARACTER) - string(REGEX MATCH "[^0-9]" NON_NUMBER_CHARACTER "${DUNE_VERSION_REVISION}") + string(REGEX MATCH "[^0-9]" NON_NUMBER_CHARACTER "${${PREFIX}_VERSION_REVISION}") if(NON_NUMBER_CHARACTER) - set(DUNE_VERSION_REVISION "0") + set(${PREFIX}_VERSION_REVISION "0") endif(NON_NUMBER_CHARACTER) # find strings for module name, maintainer # 1. Check for line starting with Module - extract_line("Module:" DUNE_MOD_NAME "${DUNE_MODULE}") - if(NOT DUNE_MOD_NAME) + extract_line("Module:" ${PREFIX}_MOD_NAME "${${PREFIX}_MODULE}") + if(NOT ${PREFIX}_MOD_NAME) message(FATAL_ERROR "${MODULE_DIR}/dune.module is missing a module name.") - endif(NOT DUNE_MOD_NAME) + endif(NOT ${PREFIX}_MOD_NAME) # 2. Check for line starting with Maintainer - extract_line("Maintainer:" DUNE_MAINTAINER "${DUNE_MODULE}") - if(NOT DUNE_MAINTAINER) + extract_line("Maintainer:" ${PREFIX}_MAINTAINER "${${PREFIX}_MODULE}") + if(NOT ${PREFIX}_MAINTAINER) message(FATAL_ERROR "${MODULE_DIR}/dune.module is missing a maintainer.") - endif(NOT DUNE_MAINTAINER) + endif(NOT ${PREFIX}_MAINTAINER) # 3. Check for line starting with Depends - extract_line("Depends:" DUNE_DEPENDS "${DUNE_MODULE}") - if(DUNE_DEPENDS) - split_module_version(${DUNE_DEPENDS} DEPENDS_MODULE DEPENDS_VERSIONS) - foreach(_mod ${DUNE_DEPENDS}) + extract_line("Depends:" ${PREFIX}_DEPENDS "${${PREFIX}_MODULE}") + if(${PREFIX}_DEPENDS) + split_module_version(${${PREFIX}_DEPENDS} DEPENDS_MODULE DEPENDS_VERSIONS) + foreach(_mod ${${PREFIX}_DEPENDS}) set(${_mod}_REQUIRED REQUIRED) - endforeach(_mod ${DUNE_DEPENDS}) - convert_deps_to_list(DUNE_DEPENDS) - message(STATUS "Dependencies: ${DEPENDS_MODULE} (versions: ${DEPENDS_VERSIONS}) DUNE_DEPENDS=${DUNE_DEPENDS}") - endif(DUNE_DEPENDS) + endforeach(_mod ${${PREFIX}_DEPENDS}) + convert_deps_to_list(${PREFIX}_DEPENDS) + message(STATUS "Dependencies: ${DEPENDS_MODULE} (versions: ${DEPENDS_VERSIONS}) ${PREFIX}_DEPENDS=${${PREFIX}_DEPENDS}") + endif(${PREFIX}_DEPENDS) # 4. Check for line starting with Suggests - extract_line("Suggests:" DUNE_SUGGESTS "${DUNE_MODULE}") - if(DUNE_SUGGESTS) - split_module_version(${DUNE_SUGGESTS} SUGGESTS_MODULE SUGGESTS_VERSION) - convert_deps_to_list(DUNE_SUGGESTS) - message(STATUS "Suggestions: ${SUGGESTS_MODULE} (versions: ${SUGGESTS_VERSIONS}) DUNE_SUGGESTS=${DUNE_SUGGESTS}") - endif(DUNE_SUGGESTS) + extract_line("Suggests:" ${PREFIX}_SUGGESTS "${${PREFIX}_MODULE}") + if(${PREFIX}_SUGGESTS) + split_module_version(${${PREFIX}_SUGGESTS} SUGGESTS_MODULE SUGGESTS_VERSION) + convert_deps_to_list(${PREFIX}_SUGGESTS) + message(STATUS "Suggestions: ${SUGGESTS_MODULE} (versions: ${SUGGESTS_VERSIONS}) ${PREFIX}_SUGGESTS=${${PREFIX}_SUGGESTS}") + endif(${PREFIX}_SUGGESTS) - dune_module_to_uppercase(DUNE_MOD_NAME_UPPERCASE ${DUNE_MOD_NAME}) + dune_module_to_uppercase(DUNE_MOD_NAME_UPPERCASE ${${PREFIX}_MOD_NAME}) # set module version - set(${DUNE_MOD_NAME_UPPERCASE}_VERSION "${DUNE_MOD_VERSION}") - set(${DUNE_MOD_NAME_UPPERCASE}_VERSION_MAJOR "${DUNE_VERSION_MAJOR}") - set(${DUNE_MOD_NAME_UPPERCASE}_VERSION_MINOR "${DUNE_VERSION_MINOR}") - set(${DUNE_MOD_NAME_UPPERCASE}_VERSION_REVISION "${DUNE_VERSION_REVISION}") + set(${DUNE_MOD_NAME_UPPERCASE}_VERSION "${${PREFIX}_MOD_VERSION}") + set(${DUNE_MOD_NAME_UPPERCASE}_VERSION_MAJOR "${${PREFIX}_VERSION_MAJOR}") + set(${DUNE_MOD_NAME_UPPERCASE}_VERSION_MINOR "${${PREFIX}_VERSION_MINOR}") + set(${DUNE_MOD_NAME_UPPERCASE}_VERSION_REVISION "${${PREFIX}_VERSION_REVISION}") endmacro(dune_module_information) macro(dune_process_dependency_leafs modules versions is_required next_level_deps @@ -198,6 +204,10 @@ macro(dune_process_dependency_leafs modules versions is_required next_level_deps foreach(i RANGE 0 ${length}) list(GET mmodules ${i} _mod) find_package(${_mod} ${REQUIRED}) + set(_dune_module_dir _dune_module_dir-NOTFOUND) + find_file(_dune_module_dir dune.module HINTS ${${_mod}_DIR} ${${_mod}_INCLUDE_DIRS} + PATH_SUFFIXES ../../dunecontrol/${_mod}) + dune_module_information(${_dune_module_dir} ${_mod}) if(${_mod}_MODULE_PATH) list(APPEND CMAKE_MODULE_PATH ${${_mod}_MODULE_PATH}) endif(${_mod}_MODULE_PATH) @@ -264,6 +274,10 @@ macro(dune_create_dependency_tree) set(global_suggests ${SUGGESTS_MODULE}) foreach(_mod ${DEPENDS_MODULE}) find_package(${_mod} REQUIRED) + set(_dune_module_dir _dune_module_dir-NOTFOUND) + find_file(_dune_module_dir dune.module HINTS ${${_mod}_DIR} ${${_mod}_INCLUDE_DIRS} + PATH_SUFFIXES ../../dunecontrol/${_mod}) + dune_module_information(${_dune_module_dir} ${_mod}) if(${_mod}_MODULE_PATH) list(APPEND CMAKE_MODULE_PATH ${${_mod}_MODULE_PATH}) endif(${_mod}_MODULE_PATH) @@ -271,6 +285,10 @@ macro(dune_create_dependency_tree) endforeach(_mod ${DEPENDS_MODULE}) foreach(_mod ${SUGGESTS_MODULE}) find_package(${_mod}) + set(_dune_module_dir _dune_module_dir-NOTFOUND) + find_file(_dune_module_dir dune.module HINTS ${${_mod}_DIR} ${${_mod}_INCLUDE_DIRS} + PATH_SUFFIXES ../../dunecontrol/${_mod}) + dune_module_information(${_dune_module_dir} ${_mod}) if(${_mod}_MODULE_PATH) list(APPEND CMAKE_MODULE_PATH ${${_mod}_MODULE_PATH}) endif(${_mod}_MODULE_PATH) @@ -360,7 +378,7 @@ macro(dune_project) set(CMAKE_C_FLAGS_RELEASE "-funroll-loops -O3") # extract information from dune.module - dune_module_information(${CMAKE_SOURCE_DIR}) + dune_module_information(${CMAKE_SOURCE_DIR} DUNE) set(ProjectName "${DUNE_MOD_NAME}") set(ProjectVersion "${DUNE_MOD_VERSION}") set(ProjectMaintainerEmail "${DUNE_MAINTAINER}")