From 50b8b797f7a32fc91d77a50c62b341cf5d739ea9 Mon Sep 17 00:00:00 2001 From: Wayne Stambaugh Date: Tue, 4 Mar 2025 07:59:45 -0500 Subject: [PATCH] Test full LIB_ID in symbol footprint filter match DRC. Apparently newer symbol libraries are using the library nickname in the footprint filter string. The symbol footprint filter match DRC was only checking the footprint name against the new filter which would always fail. A test against the full LIB_ID string is now performed when the filter string contains the library separator character ':'. The ERC test already performed this check. (cherry picked from commit 001d3dfd884efb120d491514294306ecc9b132d0) --- pcbnew/drc/drc_test_provider_schematic_parity.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pcbnew/drc/drc_test_provider_schematic_parity.cpp b/pcbnew/drc/drc_test_provider_schematic_parity.cpp index a01f8503f4..24a7e733e0 100644 --- a/pcbnew/drc/drc_test_provider_schematic_parity.cpp +++ b/pcbnew/drc/drc_test_provider_schematic_parity.cpp @@ -156,12 +156,18 @@ void DRC_TEST_PROVIDER_SCHEMATIC_PARITY::testNetlist( NETLIST& aNetlist ) if( !m_drcEngine->IsErrorLimitExceeded( DRCE_FOOTPRINT_FILTERS ) ) { + wxString libId = footprint->GetFPID().GetUniStringLibId(); wxString fpName = footprint->GetFPID().GetUniStringLibItemName(); size_t filtercount = component->GetFootprintFilters().GetCount(); bool found = ( 0 == filtercount ); // if no entries, do not filter for( size_t jj = 0; jj < filtercount && !found; jj++ ) - found = fpName.Matches( component->GetFootprintFilters()[jj] ); + { + if( component->GetFootprintFilters()[jj].Find( ':' ) == wxNOT_FOUND ) + found = fpName.Matches( component->GetFootprintFilters()[jj] ); + else + found = libId.Matches( component->GetFootprintFilters()[jj] ); + } if( !found ) {