@@ -57,6 +57,8 @@ function(_cpp_library_track_find_package package_name)
5757 if (TEMP_MATCH MATCHES "^(.+) +OPTIONAL_COMPONENTS" )
5858 set (TEMP_MATCH "${CMAKE_MATCH_1} " )
5959 endif ()
60+ # Strip keywords (CONFIG, NO_MODULE, REQUIRED) that aren't component names
61+ string (REGEX REPLACE " +(REQUIRED|CONFIG|NO_MODULE).*$" "" TEMP_MATCH "${TEMP_MATCH} " )
6062 string (REGEX REPLACE " +" ";" EXISTING_COMPONENTS "${TEMP_MATCH} " )
6163 endif ()
6264
@@ -215,6 +217,41 @@ else()
215217 message (FATAL_ERROR "✗ FAIL: Expected '${EXPECTED_CONFIG2} ' but got '${CONFIG_MERGED} '" )
216218endif ()
217219
220+ # Test: CONFIG keyword in component list bug fix
221+ message (STATUS "" )
222+ message (STATUS "Test: CONFIG not treated as component when merging" )
223+
224+ # Clear state
225+ set_property (GLOBAL PROPERTY "_CPP_LIBRARY_TRACKED_DEP_Qt6" )
226+ set_property (GLOBAL PROPERTY _CPP_LIBRARY_ALL_TRACKED_DEPS "" )
227+
228+ # First call: find_package(Qt6 6.5.0 COMPONENTS Core CONFIG)
229+ _cpp_library_track_find_package ("Qt6" "6.5.0" "COMPONENTS" "Core" "CONFIG" )
230+
231+ get_property (FIRST_CONFIG GLOBAL PROPERTY "_CPP_LIBRARY_TRACKED_DEP_Qt6" )
232+ message (STATUS "After first call: ${FIRST_CONFIG} " )
233+
234+ # Verify initial state
235+ set (EXPECTED_FIRST "Qt6 6.5.0 COMPONENTS Core CONFIG" )
236+ if (NOT "${FIRST_CONFIG} " STREQUAL "${EXPECTED_FIRST} " )
237+ message (FATAL_ERROR "✗ FAIL: Expected '${EXPECTED_FIRST} ' but got '${FIRST_CONFIG} '" )
238+ endif ()
239+
240+ # Second call: find_package(Qt6 6.5.0 COMPONENTS Widgets CONFIG)
241+ # This should merge components but NOT treat CONFIG as a component
242+ _cpp_library_track_find_package ("Qt6" "6.5.0" "COMPONENTS" "Widgets" "CONFIG" )
243+
244+ get_property (MERGED_CONFIG GLOBAL PROPERTY "_CPP_LIBRARY_TRACKED_DEP_Qt6" )
245+ message (STATUS "After second call: ${MERGED_CONFIG} " )
246+
247+ # Verify CONFIG is at the end, not in the component list
248+ set (EXPECTED_MERGED "Qt6 6.5.0 COMPONENTS Core Widgets CONFIG" )
249+ if ("${MERGED_CONFIG} " STREQUAL "${EXPECTED_MERGED} " )
250+ message (STATUS "✓ PASS: CONFIG keyword not treated as component" )
251+ else ()
252+ message (FATAL_ERROR "✗ FAIL: Expected '${EXPECTED_MERGED} ' but got '${MERGED_CONFIG} '" )
253+ endif ()
254+
218255message (STATUS "" )
219256message (STATUS "===========================================" )
220257message (STATUS "All provider merging tests passed!" )
0 commit comments