Split multi-token build.flags entries when generating ESP-IDF component CMakeLists (#17649)

This commit is contained in:
Brandon Harvey
2026-07-19 12:20:43 -10:00
committed by GitHub
parent 1f93345af8
commit 977376d55c
2 changed files with 62 additions and 0 deletions
+41
View File
@@ -193,6 +193,47 @@ target_link_libraries(${{COMPONENT_LIB}} INTERFACE
)
def test_generate_cmakelists_txt_multi_token_flag(tmp_component):
# PlatformIO shell-lexes each build.flags entry, so a single entry can
# carry a flag and its argument. The generated CMakeLists must emit them
# as separate compile options, not one argument with an embedded space.
src_dir = tmp_component.path / "src"
src_dir.mkdir()
(src_dir / "main.c").write_text("int main() {}")
tmp_component.data = {"build": {"flags": ["-include cp_custom_alloc.h", "-DTEST"]}}
content = generate_cmakelists_txt(tmp_component)
assert '"-include cp_custom_alloc.h"' not in content
assert ' "-include"\n "cp_custom_alloc.h"\n' in content
def test_generate_cmakelists_txt_space_separated_classified_flags(tmp_component):
# Space-separated -I/-L/-l entries routed to INCLUDE_DIRS and the link
# handling before the shlex split was added; splitting must not leak
# them into raw compile options.
src_dir = tmp_component.path / "src"
src_dir.mkdir()
(src_dir / "main.c").write_text("int main() {}")
(tmp_component.path / "extra_inc").mkdir()
tmp_component.data = {
"build": {"flags": ["-I extra_inc", "-L extra_lib", "-l extralib", "-DTEST"]}
}
content = generate_cmakelists_txt(tmp_component)
assert 'INCLUDE_DIRS "src" "extra_inc"' in content
assert 'target_link_directories(${COMPONENT_LIB} INTERFACE\n "extra_lib"\n)' in (
content
)
assert 'target_link_libraries(${COMPONENT_LIB} INTERFACE\n "extralib"\n)' in (
content
)
assert '"-I"' not in content
assert '"-L"' not in content
assert '"-l"' not in content
def test_generate_cmakelists_txt_references_project_managed_components_variable(
tmp_component: IDFComponent,
) -> None: