Skip to content
Snippets Groups Projects
Commit d7a1f326 authored by Markus Blatt's avatar Markus Blatt
Browse files

[bugfix,cmake] Fixes precendence issues in module path

When working with installed modules, the cmake scripts and
modules of the current module should take precendence over
any installed ones. This was not the case before this patch.

Furthermore, modules downstream in the
dependency tree should be able to overwrite tests in  modules
that they depend on. This patch more caredfully crafts the
CMAKE_MODULE_PATH to reflect the module dependency in it.
parent 862b6d93
No related branches found
No related tags found
No related merge requests found
......@@ -482,8 +482,8 @@ endif()
#find dune-common and set the module path
find_package(dune-common)
list(APPEND CMAKE_MODULE_PATH \${dune-common_MODULE_PATH}
"\${PROJECT_SOURCE_DIR}/cmake/modules")
list(APPEND CMAKE_MODULE_PATH "\${PROJECT_SOURCE_DIR}/cmake/modules"
\${dune-common_MODULE_PATH})
#include the dune macros
include(DuneMacros)
......
......@@ -87,12 +87,14 @@ macro(dune_module_to_uppercase _upper _module)
endmacro(dune_module_to_uppercase _upper _module)
macro(find_dune_package module)
if(NOT (${module}_DIR OR ${module}_ROOT OR
"${CMAKE_PREFIX_PATH}" MATCHES ".*${module}.*"))
string(REPLACE ${ProjectName} ${module} ${module}_DIR
${PROJECT_BINARY_DIR})
endif()
find_package(${ARGV} NO_CMAKE_PACKAGE_REGISTRY)
if(NOT ${module}_FOUND)
if(NOT (${module}_DIR OR ${module}_ROOT OR
"${CMAKE_PREFIX_PATH}" MATCHES ".*${module}.*"))
string(REPLACE ${ProjectName} ${module} ${module}_DIR
${PROJECT_BINARY_DIR})
endif()
find_package(${ARGV} NO_CMAKE_PACKAGE_REGISTRY)
endif(NOT ${module}_FOUND)
endmacro(find_dune_package module)
macro(extract_line HEADER OUTPUT FILE_CONTENT)
......@@ -213,9 +215,6 @@ macro(dune_process_dependency_leafs modules versions is_required next_level_deps
foreach(i RANGE 0 ${length})
list(GET mmodules ${i} _mod)
find_dune_package(${_mod} ${REQUIRED})
if(${_mod}_MODULE_PATH)
list(APPEND CMAKE_MODULE_PATH ${${_mod}_MODULE_PATH})
endif(${_mod}_MODULE_PATH)
set(${_mod}_SEARCHED ON)
if(NOT "${is_required}" STREQUAL "")
set(${_mod}_REQUIRED ON)
......@@ -226,6 +225,12 @@ macro(dune_process_dependency_leafs modules versions is_required next_level_deps
set(${next_level_sugs} ${${_mod}_SUGGESTS} ${${next_level_sugs}})
endforeach(i RANGE 0 ${length})
endif(mlength GREATER 0)
if(${next_level_sugs})
list(REMOVE_DUPLICATES ${next_level_sugs})
endif(${next_level_sugs})
if(${next_level_deps})
list(REMOVE_DUPLICATES ${next_level_deps})
endif(${next_level_deps})
endmacro(dune_process_dependency_leafs)
function(remove_processed_modules modules versions is_required)
......@@ -247,8 +252,7 @@ function(remove_processed_modules modules versions is_required)
set(${versions} ${${versions}} PARENT_SCOPE)
endfunction(remove_processed_modules modules versions is_required)
macro(dune_create_dependency_leafs depends depends_versions suggests suggests_versions
global_depends global_suggests)
macro(dune_create_dependency_leafs depends depends_versions suggests suggests_versions)
set(deps "")
set(sugs "")
#Process dependencies
......@@ -260,47 +264,62 @@ macro(dune_create_dependency_leafs depends depends_versions suggests suggests_ve
dune_process_dependency_leafs("${suggests}" "${suggests_versions}" "" deps sugs)
endif(NOT "${suggests}" STREQUAL "")
split_module_version("${deps}" next_mod_depends next_depends_versions)
#remove_processed_modules(next_mod_depends next_depends_versions REQUIRED)
set(${global_depends} "${${global_depends}}" ${next_mod_depends})
split_module_version("${sugs}" next_mod_suggests next_suggests_versions)
#remove_processed_modules(next_mod_suggests next_suggests_versions "")
set(${global_suggests} "${${global_suggests}}" ${next_mod_suggests})
set(ALL_DEPENDENCIES ${ALL_DEPENDENCIES} ${next_mod_depends} ${next_mod_suggests})
# Move to next level
if(next_mod_suggests OR next_mod_depends)
dune_create_dependency_leafs("${next_mod_depends}" "${next_depends_versions}"
"${next_mod_suggests}" "${next_suggests_versions}" global_depends global_suggests)
"${next_mod_suggests}" "${next_suggests_versions}")
endif(next_mod_suggests OR next_mod_depends)
endmacro(dune_create_dependency_leafs)
macro(dune_create_dependency_tree)
list(REMOVE_ITEM CMAKE_MODULE_PATH ${dune-common_MODULE_PATH})
list(FIND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/modules start)
set(ALL_DEPENDENCIES "")
if(DEPENDS_MODULE OR SUGGESTS_MODULE)
set(global_depends ${DEPENDS_MODULE})
set(global_suggests ${SUGGESTS_MODULE})
foreach(_mod ${DEPENDS_MODULE})
find_dune_package(${_mod} REQUIRED)
if(${_mod}_MODULE_PATH)
list(APPEND CMAKE_MODULE_PATH ${${_mod}_MODULE_PATH})
endif(${_mod}_MODULE_PATH)
set(${_mod}_REQUIRED ON)
endforeach(_mod ${DEPENDS_MODULE})
foreach(_mod ${SUGGESTS_MODULE})
find_dune_package(${_mod})
if(${_mod}_MODULE_PATH)
list(APPEND CMAKE_MODULE_PATH ${${_mod}_MODULE_PATH})
endif(${_mod}_MODULE_PATH)
set(${_mod}_REQUIRED ON)
endforeach(_mod ${SUGGESTS_MODULE})
set(ALL_DEPENDENCIES ${DEPENDS_MODULE} ${SUGGESTS_MODULE})
dune_create_dependency_leafs("${DEPENDS_MODULE}" "${DEPENDS_VERSIONS}"
"${SUGGESTS_MODULE}" "${SUGGESTS_VERSIONS}" global_depends
global_suggests)
set(ALL_DEPENDENCIES "${global_depends}" "${global_suggests}")
"${SUGGESTS_MODULE}" "${SUGGESTS_VERSIONS}")
endif(DEPENDS_MODULE OR SUGGESTS_MODULE)
# reverse ALL_DEPENDENCIES
list(REVERSE ALL_DEPENDENCIES)
list(REMOVE_DUPLICATES ALL_DEPENDENCIES)
list(REMOVE_DUPLICATES CMAKE_MODULE_PATH)
endmacro(dune_create_dependency_tree _immediates)
set(_my_path "")
if(ALL_DEPENDENCIES)
set(NEW_ALL_DEPS "")
list(LENGTH ALL_DEPENDENCIES length)
if(length GREATER 0)
math(EXPR length "${length}-1")
list(GET ALL_DEPENDENCIES ${length} _mod)
set(${_mod}_cmake_path_processed 1)
set(_my_path ${${_mod}_MODULE_PATH})
list(APPEND NEW_ALL_DEPS ${_mod})
math(EXPR length "${length}-1")
if(length GREATER 0)
foreach(i RANGE ${length} 0 -1)
list(GET ALL_DEPENDENCIES ${i} _mod)
if(NOT ${_mod}_cmake_path_processed)
set(${_mod}_cmake_path_processed 1)
if(${_mod}_MODULE_PATH)
list(INSERT _my_path 0 ${${_mod}_MODULE_PATH})
list(APPEND NEW_ALL_DEPS ${_mod})
endif(${_mod}_MODULE_PATH)
endif(NOT ${_mod}_cmake_path_processed)
endforeach(i RANGE ${length} 0 -1)
endif(length GREATER 0)
list(LENGTH CMAKE_MODULE_PATH length)
math(EXPR length "${length}-1")
if(start EQUAL -1)
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/modules ${_my_path})
else(start EQUAL -1)
if(start EQUAL ${length})
list(APPEND CMAKE_MODULE_PATH ${_my_path})
else(start EQUAL ${length})
list(INSERT CMAKE_MODULE_PATH ${start} ${_my_path})
endif(start EQUAL ${length})
endif(start EQUAL -1)
endif(length GREATER 0)
set(ALL_DEPENDENCIES ${NEW_ALL_DEPS})
endif(ALL_DEPENDENCIES)
endmacro(dune_create_dependency_tree)
# Converts a module name given by _dune_module into a string _macro_name
# where all dashes (-) are removed and letters after a dash are capitalized
......@@ -937,4 +956,4 @@ macro(add_dune_all_flags targets)
APPEND_STRING
PROPERTY COMPILE_FLAGS ${FLAGSTR})
endforeach()
endmacro(add_dune_all_flags targets)
\ No newline at end of file
endmacro(add_dune_all_flags targets)
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