mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'bugfix/cmake_extra_component_dirs_v3.3' into 'release/v3.3'
CI: additional CMake build system tests wrt EXTRA_COMPONENT_DIRS (v3.3) See merge request espressif/esp-idf!5109
This commit is contained in:
commit
3be1c70d46
@ -380,6 +380,41 @@ EOF
|
||||
|| failure "ccache should not be used even when present if --no-ccache is specified"
|
||||
rm -f ccache
|
||||
|
||||
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
|
||||
idf.py reconfigure -DEXTRA_COMPONENT_DIRS=$PWD/mycomponents/mycomponent
|
||||
! 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
|
||||
idf.py reconfigure -DEXTRA_COMPONENT_DIRS=$PWD/mycomponents
|
||||
! 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:"
|
||||
|
@ -28,49 +28,47 @@ endfunction()
|
||||
# earlier in the component_dirs list take precedence.
|
||||
function(components_find_all component_dirs component_paths component_names test_component_names)
|
||||
# component_dirs entries can be files or lists of files
|
||||
set(paths "")
|
||||
set(names "")
|
||||
set(test_names "")
|
||||
set(_paths "")
|
||||
set(_names "")
|
||||
set(_test_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)
|
||||
list(APPEND names "${name}")
|
||||
list(APPEND paths "${component}")
|
||||
|
||||
# Look for test component directory
|
||||
file(GLOB test "${component}/test/CMakeLists.txt")
|
||||
if(test)
|
||||
list(APPEND test_names "${name}")
|
||||
endif()
|
||||
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)
|
||||
|
||||
if(EXISTS "${_path}/test/CMakeLists.txt")
|
||||
list(APPEND _test_names "${_name}")
|
||||
endif()
|
||||
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 __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()
|
||||
endforeach()
|
||||
|
||||
set(${component_paths} ${paths} PARENT_SCOPE)
|
||||
set(${component_names} ${names} PARENT_SCOPE)
|
||||
set(${test_component_names} ${test_names} PARENT_SCOPE)
|
||||
set(${test_component_names} "${_test_names}" PARENT_SCOPE)
|
||||
set(${component_paths} "${_paths}" PARENT_SCOPE)
|
||||
set(${component_names} "${_names}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
Loading…
Reference in New Issue
Block a user