Merge branch 'bugfix/cmake_extra_component_dirs_v3.1' into 'release/v3.1'

ci: additional Cmake tests for EXTRA_COMPONENT_DIRS (backport v3.1)

See merge request espressif/esp-idf!5493
release/v3.1
Jiang Jiang Jian 2019-08-11 16:55:11 +08:00
commit 941ec097bb
2 zmienionych plików z 60 dodań i 27 usunięć

Wyświetl plik

@ -246,6 +246,41 @@ EOF
|| failure "Custom bootloader source files should be built instead of the original's"
rm -rf components
print_status "Empty directory not treated as a component"
clean_build_dir
mkdir -p components/esp32 && idf.py reconfigure
! grep "$PWD/components/esp32" $PWD/build/project_description.json || failure "Failed to build with empty esp32 directory in components"
rm -rf components
print_status "If a component directory is added to COMPONENT_DIRS, its subdirectories are not added"
clean_build_dir
mkdir -p main/test
echo "register_component()" > main/test/CMakeLists.txt
idf.py reconfigure
! grep "$PWD/main/test" $PWD/build/project_description.json || failure "COMPONENT_DIRS has added component subdirectory to the build"
grep "$PWD/main" $PWD/build/project_description.json || failure "COMPONENT_DIRS parent component directory should be included in the build"
rm -rf main/test
print_status "If a component directory is added to COMPONENT_DIRS, its sibling directories are not added"
clean_build_dir
mkdir -p mycomponents/mycomponent
echo "register_component()" > mycomponents/mycomponent/CMakeLists.txt
# first test by adding single component directory to EXTRA_COMPONENT_DIRS
mkdir -p mycomponents/esp32
echo "register_component()" > mycomponents/esp32/CMakeLists.txt
(export EXTRA_COMPONENT_DIRS=$PWD/mycomponents/mycomponent && idf.py reconfigure)
! grep "$PWD/mycomponents/esp32" $PWD/build/project_description.json || failure "EXTRA_COMPONENT_DIRS has added a sibling directory"
grep "$PWD/mycomponents/mycomponent" $PWD/build/project_description.json || failure "EXTRA_COMPONENT_DIRS valid sibling directory should be in the build"
rm -rf mycomponents/esp32
# now the same thing, but add a components directory
mkdir -p esp32
echo "register_component()" > esp32/CMakeLists.txt
(export EXTRA_COMPONENT_DIRS=$PWD/mycomponents/mycomponent && idf.py reconfigure)
! grep "$PWD/esp32" $PWD/build/project_description.json || failure "EXTRA_COMPONENT_DIRS has added a sibling directory"
grep "$PWD/mycomponents/mycomponent" $PWD/build/project_description.json || failure "EXTRA_COMPONENT_DIRS valid sibling directory should be in the build"
rm -rf esp32
rm -rf mycomponents
print_status "All tests completed"
if [ -n "${FAILURES}" ]; then
echo "Some failures were detected:"

Wyświetl plik

@ -85,47 +85,45 @@ endfunction()
# earlier in the component_dirs list take precedence.
function(components_find_all component_dirs component_paths component_names)
# component_dirs entries can be files or lists of files
set(paths "")
set(names "")
set(_paths "")
set(_names "")
# start by expanding the component_dirs list with all subdirectories
foreach(dir ${component_dirs})
# Iterate any subdirectories for values
file(GLOB subdirs LIST_DIRECTORIES true "${dir}/*")
foreach(subdir ${subdirs})
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(EXISTS ${dir}/CMakeLists.txt)
get_filename_component(_path "${dir}" ABSOLUTE)
get_filename_component(_name "${_path}" NAME)
if(NOT name IN_LIST names)
set(names "${names};${name}")
set(paths "${paths};${component}")
list(APPEND _names "${_name}")
list(APPEND _paths "${_path}")
endif()
else() # no CMakeLists.txt file
# test for legacy component.mk and warn
file(GLOB legacy_component "${dir}/component.mk")
if(legacy_component)
else()
if(EXISTS ${dir}/component.mk)
get_filename_component(legacy_component "${legacy_component}" DIRECTORY)
message(WARNING "Component ${legacy_component} contains old-style component.mk but no CMakeLists.txt. "
"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)
set(__recursing 0)
if(__paths)
list(APPEND _paths "${__paths}")
list(APPEND _names "${__names}")
endif()
endif()
endif()
endif()
endforeach()
set(${component_paths} ${paths} PARENT_SCOPE)
set(${component_names} ${names} PARENT_SCOPE)
set(${component_paths} "${_paths}" PARENT_SCOPE)
set(${component_names} "${_names}" PARENT_SCOPE)
endfunction()
# expand_component_requirements: Recursively expand a component's requirements,
# setting global properties BUILD_COMPONENTS & BUILD_COMPONENT_PATHS and
# also invoking the components to call register_component() above,