From bd20824b87f37907e53d161f932721108599a793 Mon Sep 17 00:00:00 2001 From: Christian Engwer <christi@dune-project.org> Date: Mon, 29 Jun 2015 09:33:36 +0200 Subject: [PATCH] [bugfix,cmake] allow cmake to parse dune.module files containing shell snippets The duncontrol / dune.module mechanism allowes to overload the run_* commands, which are executed in order to setup/build/etc. a module. This patch fixes a bug in the cmake parsing of the dune.module file. Somehow cmake tried to interpret the content of the dune.module as cmake code. We now use a different strategy to parse the file and avoid storing the content in a temporary variable. >> please backport to 2.4 --- cmake/modules/DuneMacros.cmake | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/cmake/modules/DuneMacros.cmake b/cmake/modules/DuneMacros.cmake index 39b7ff5fc..96f5ad260 100644 --- a/cmake/modules/DuneMacros.cmake +++ b/cmake/modules/DuneMacros.cmake @@ -212,9 +212,9 @@ macro(find_dune_package module) set(DUNE_${module}_FOUND ${${module}_FOUND}) endmacro(find_dune_package module) -macro(extract_line HEADER OUTPUT FILE_CONTENT) - set(REGEX "${HEADER}[ ]*[^\n]+") - string(REGEX MATCH ${REGEX} OUTPUT1 "${FILE_CONTENT}") +macro(extract_line HEADER OUTPUT FILE_NAME) + set(REGEX "^${HEADER}[ ]*[^\\n]+") + file(STRINGS "${FILE_NAME}" OUTPUT1 REGEX "${REGEX}") if(OUTPUT1) set(REGEX "^[ ]*${HEADER}[ ]*(.+)[ ]*$") string(REGEX REPLACE ${REGEX} "\\1" ${OUTPUT} "${OUTPUT1}") @@ -278,10 +278,8 @@ endfunction(extract_major_minor_version version_string varname) # add dune-common version from dune.module to config.h # optional second argument is verbosity macro(dune_module_information MODULE_DIR) - file(READ "${MODULE_DIR}/dune.module" DUNE_MODULE) - # find version strings - extract_line("Version:" MODULE_LINE "${DUNE_MODULE}") + extract_line("Version:" MODULE_LINE "${MODULE_DIR}/dune.module") if(NOT MODULE_LINE MATCHES ".+") message(FATAL_ERROR "${MODULE_DIR}/dune.module is missing a version.") endif(NOT MODULE_LINE MATCHES ".+") @@ -291,19 +289,19 @@ macro(dune_module_information MODULE_DIR) # find strings for module name, maintainer # 1. Check for line starting with Module - extract_line("Module:" DUNE_MOD_NAME "${DUNE_MODULE}") + extract_line("Module:" DUNE_MOD_NAME "${MODULE_DIR}/dune.module") if(NOT DUNE_MOD_NAME) message(FATAL_ERROR "${MODULE_DIR}/dune.module is missing a module name.") endif(NOT DUNE_MOD_NAME) # 2. Check for line starting with Maintainer - extract_line("Maintainer:" DUNE_MAINTAINER "${DUNE_MODULE}") + extract_line("Maintainer:" DUNE_MAINTAINER "${MODULE_DIR}/dune.module") if(NOT DUNE_MAINTAINER) message(FATAL_ERROR "${MODULE_DIR}/dune.module is missing a maintainer.") endif(NOT DUNE_MAINTAINER) # 3. Check for line starting with Depends - extract_line("Depends:" ${DUNE_MOD_NAME}_DEPENDS "${DUNE_MODULE}") + extract_line("Depends:" ${DUNE_MOD_NAME}_DEPENDS "${MODULE_DIR}/dune.module") if(${DUNE_MOD_NAME}_DEPENDS) split_module_version(${${DUNE_MOD_NAME}_DEPENDS} ${DUNE_MOD_NAME}_DEPENDS_MODULE ${DUNE_MOD_NAME}_DEPENDS_VERSION) foreach(_mod ${${DUNE_MOD_NAME}_DEPENDS}) @@ -316,7 +314,7 @@ macro(dune_module_information MODULE_DIR) endif(${DUNE_MOD_NAME}_DEPENDS) # 4. Check for line starting with Suggests - extract_line("Suggests:" ${DUNE_MOD_NAME}_SUGGESTS "${DUNE_MODULE}") + extract_line("Suggests:" ${DUNE_MOD_NAME}_SUGGESTS "${MODULE_DIR}/dune.module") if(${DUNE_MOD_NAME}_SUGGESTS) split_module_version(${${DUNE_MOD_NAME}_SUGGESTS} ${DUNE_MOD_NAME}_SUGGESTS_MODULE ${DUNE_MOD_NAME}_SUGGESTS_VERSION) convert_deps_to_list(${DUNE_MOD_NAME}_SUGGESTS) -- GitLab