@@ -585,13 +585,27 @@ fn ensure_dependency_requirement(
585585) {
586586 let condition = requirement_condition ( & requirement. features ) ;
587587 let identity = package_identity ( & requirement. name ) ;
588- let existing = plan. dependencies . iter_mut ( ) . find ( |dependency| {
588+ let mut found = false ;
589+ for dependency in & mut plan. dependencies {
589590 let effective_name = dependency. eb_name . as_deref ( ) . unwrap_or ( & dependency. name ) ;
590- package_identity ( effective_name) == identity
591- && ( condition == ConditionExpr :: Always || dependency. condition == condition)
592- } ) ;
593- if let Some ( dependency) = existing {
594- dependency. eb_name = Some ( requirement. name . clone ( ) ) ;
591+ if package_identity ( effective_name) != identity
592+ || !( condition == ConditionExpr :: Always || dependency. condition == condition)
593+ {
594+ continue ;
595+ }
596+ // A virtual fftw row is not EasyBuild FFTW. Matching it would mark
597+ // found and leave virtual_capability set, so SAT never sees FFTW.
598+ if dependency. virtual_capability . is_some ( ) {
599+ continue ;
600+ }
601+ found = true ;
602+ if dependency
603+ . eb_name
604+ . as_deref ( )
605+ . is_none_or ( |name| name. is_empty ( ) )
606+ {
607+ dependency. eb_name = Some ( requirement. name . clone ( ) ) ;
608+ }
595609 if let Some ( constraint) = & requirement. constraint {
596610 dependency. constraint = Some ( constraint. clone ( ) ) ;
597611 }
@@ -611,8 +625,10 @@ fn ensure_dependency_requirement(
611625 }
612626 }
613627 }
614- dependency. condition = condition;
628+ dependency. condition = condition. clone ( ) ;
615629 dependency. solver_excluded = false ;
630+ }
631+ if found {
616632 return ;
617633 }
618634
0 commit comments