@@ -541,23 +541,34 @@ void VSGenerator::generate(const SwBuild &b)
541541 {
542542 auto &p = s.projects .find (tgt->getPackage ().toString ())->second ;
543543 auto &data = p.getData (tgt->getSettings ());
544- auto deps = tgt->getDependencies ();
545- for (auto &d : deps)
546- {
547- // filter out predefined targets
548- auto &pd1 = b.getContext ().getPredefinedTargets ();
549- if (pd1.find (d->getUnresolvedPackage ().ppath ) != pd1.end (d->getUnresolvedPackage ().ppath ))
550- continue ;
544+ auto &is = tgt->getInterfaceSettings ();
551545
552- // filter out predefined & deps targets
553- auto &pd = ttb;
554- if (pd. find (d-> getUnresolvedPackage (). ppath ) == pd. end (d-> getUnresolvedPackage (). ppath ) )
546+ auto add_deps = [&ttb, &data, &s, &b, &p]( auto &is)
547+ {
548+ for ( auto &[id, v] : is )
555549 {
556- data.dependencies .insert (&d->getTarget ());
557- continue ;
550+ PackageId d (id);
551+ // filter out predefined targets
552+ if (b.getContext ().getPredefinedTargets ().find (d) != b.getContext ().getPredefinedTargets ().end ())
553+ continue ;
554+
555+ // filter out NON TARGET TO BUILD deps
556+ // add them to just deps list
557+ auto &pd = ttb;
558+ if (pd.find (d) == pd.end ())
559+ {
560+ auto i = b.getTargets ().find (d, v.getSettings ());
561+ if (!i)
562+ throw SW_LOGIC_ERROR (" Cannot find dependency: " + d.toString ());
563+ data.dependencies .insert (i);
564+ continue ;
565+ }
566+ p.dependencies .insert (&s.projects .find (d.toString ())->second );
558567 }
559- p.dependencies .insert (&s.projects .find (d->getTarget ().getPackage ().toString ())->second );
560- }
568+ };
569+
570+ add_deps (is[" dependencies" ][" link" ].getSettings ());
571+ add_deps (is[" dependencies" ][" dummy" ].getSettings ());
561572
562573 //
563574 if (!s.first_project && n_executables == 1 && tgt->getInterfaceSettings ()[" type" ] == " native_executable" )
0 commit comments