cmake: refactor finding components
This commit is contained in:
parent
b330ea88e6
commit
8efef29544
1 changed files with 31 additions and 33 deletions
|
@ -102,51 +102,49 @@ endfunction()
|
||||||
# earlier in the component_dirs list take precedence.
|
# earlier in the component_dirs list take precedence.
|
||||||
function(components_find_all component_dirs component_paths component_names test_component_names)
|
function(components_find_all component_dirs component_paths component_names test_component_names)
|
||||||
# component_dirs entries can be files or lists of files
|
# component_dirs entries can be files or lists of files
|
||||||
set(paths "")
|
set(_paths "")
|
||||||
set(names "")
|
set(_names "")
|
||||||
set(test_names "")
|
set(_test_names "")
|
||||||
|
|
||||||
# start by expanding the component_dirs list with all subdirectories
|
# start by expanding the component_dirs list with all subdirectories
|
||||||
foreach(dir ${component_dirs})
|
foreach(dir ${component_dirs})
|
||||||
# Iterate any subdirectories for values
|
if(EXISTS ${dir}/CMakeLists.txt)
|
||||||
file(GLOB subdirs LIST_DIRECTORIES true "${dir}/*")
|
get_filename_component(_path "${dir}" ABSOLUTE)
|
||||||
foreach(subdir ${subdirs})
|
get_filename_component(_name "${_path}" NAME)
|
||||||
set(component_dirs "${component_dirs};${subdir}")
|
|
||||||
endforeach()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
# Look for a component in each component_dirs entry
|
|
||||||
foreach(dir ${component_dirs})
|
|
||||||
debug("Looking for CMakeLists.txt in ${dir}")
|
|
||||||
file(GLOB component "${dir}/CMakeLists.txt")
|
|
||||||
if(component)
|
|
||||||
debug("CMakeLists.txt file ${component}")
|
|
||||||
get_filename_component(component "${component}" DIRECTORY)
|
|
||||||
get_filename_component(name "${component}" NAME)
|
|
||||||
if(NOT name IN_LIST names)
|
if(NOT name IN_LIST names)
|
||||||
list(APPEND names "${name}")
|
list(APPEND _names "${_name}")
|
||||||
list(APPEND paths "${component}")
|
list(APPEND _paths "${_path}")
|
||||||
|
|
||||||
# Look for test component directory
|
|
||||||
file(GLOB test "${component}/test/CMakeLists.txt")
|
|
||||||
if(test)
|
|
||||||
list(APPEND test_names "${name}")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
else() # no CMakeLists.txt file
|
|
||||||
# test for legacy component.mk and warn
|
if(EXISTS "${_path}/test/CMakeLists.txt")
|
||||||
file(GLOB legacy_component "${dir}/component.mk")
|
list(APPEND _test_names "${_name}")
|
||||||
if(legacy_component)
|
endif()
|
||||||
|
else()
|
||||||
|
if(EXISTS ${dir}/component.mk)
|
||||||
get_filename_component(legacy_component "${legacy_component}" DIRECTORY)
|
get_filename_component(legacy_component "${legacy_component}" DIRECTORY)
|
||||||
message(WARNING "Component ${legacy_component} contains old-style component.mk but no CMakeLists.txt. "
|
message(WARNING "Component ${legacy_component} contains old-style component.mk but no CMakeLists.txt. "
|
||||||
"Component will be skipped.")
|
"Component will be skipped.")
|
||||||
|
else()
|
||||||
|
if(NOT __recursing) # recurse only once
|
||||||
|
file(GLOB subdirs LIST_DIRECTORIES true "${dir}/*")
|
||||||
|
|
||||||
|
set(__recursing 1)
|
||||||
|
components_find_all("${subdirs}" __paths __names __test_names)
|
||||||
|
set(__recursing 0)
|
||||||
|
|
||||||
|
if(__paths)
|
||||||
|
list(APPEND _paths "${__paths}")
|
||||||
|
list(APPEND _names "${__names}")
|
||||||
|
list(APPEND _test_names "${__test_names}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
set(${component_paths} ${paths} PARENT_SCOPE)
|
set(${test_component_names} "${_test_names}" PARENT_SCOPE)
|
||||||
set(${component_names} ${names} PARENT_SCOPE)
|
set(${component_paths} "${_paths}" PARENT_SCOPE)
|
||||||
set(${test_component_names} ${test_names} PARENT_SCOPE)
|
set(${component_names} "${_names}" PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue