@@ -112,68 +112,22 @@ void SwBuild::load()
112112{
113113 CHECK_STATE_AND_CHANGE (BuildState::NotStarted, BuildState::InputsLoaded);
114114
115- // load entry points
116- load (inputs, true );
117-
118- // and load packages
119- for (auto &i : inputs)
120- i->load (*this );
121- }
122-
123- void SwBuild::load (Inputs &inputs, bool set_eps)
124- {
125- std::vector<Input*> v;
115+ std::vector<Input *> iv;
126116 for (auto &i : inputs)
127- v.push_back (i.get ());
128- load (v, set_eps);
129- }
117+ iv.push_back ((Input*)&i.getInput ());
118+ swctx.loadEntryPoints (iv, true );
130119
131- void SwBuild::load (const std::vector<Input*> &inputs, bool set_eps)
132- {
133- std::map<IDriver *, std::vector<Input*>> active_drivers;
120+ // and load packages
134121 for (auto &i : inputs)
135122 {
136- if (!i->isLoaded ())
137- active_drivers[&i->getDriver ()].push_back (i);
138- }
139- for (auto &[d, g] : active_drivers)
140- {
141- std::vector<RawInput> inputs;
142- for (auto &i : g)
143- inputs.push_back (*i);
144- auto eps = d->load (getContext (), inputs);
145- if (eps.size () != inputs.size ())
146- throw SW_RUNTIME_ERROR (" Incorrect number of returned entry points" );
147- for (size_t i = 0 ; i < eps.size (); i++)
123+ auto tgts = i.load (*this );
124+ for (auto &tgt : tgts)
148125 {
149- // when loading installed package, eps[i] may be empty
150- // so we take ep from context
151- if (eps[i].empty ())
152- {
153- if (inputs[i].getType () != InputType::InstalledPackage)
154- throw SW_RUNTIME_ERROR (" unexpected input type" );
155- g[i]->addEntryPoint (swctx.getTargetData (inputs[i].getPackageId ()).getEntryPoint ());
156- }
157- for (auto &ep : eps[i])
158- {
159- g[i]->addEntryPoint (ep);
160- if (inputs[i].getType () != InputType::InstalledPackage)
161- continue ;
162- if (!set_eps)
163- continue ;
164- // for packages we must also register all other group packages
165- // which are located in this config AND which are deps of this input package id
166- auto m = getContext ().resolve (UnresolvedPackages{ inputs[i].getPackageId () });
167- auto &p = m.find (inputs[i].getPackageId ())->second ;
168- for (auto &d : p.getData ().dependencies )
169- {
170- auto &p2 = m.find (d)->second ;
171- if (p2.getData ().group_number != p.getData ().group_number )
172- continue ;
173- swctx.getTargetData (p2).setEntryPoint (ep);
174- }
175- }
126+ if (tgt->getSettings ()[" dry-run" ] == " true" )
127+ continue ;
128+ getTargets ()[tgt->getPackage ()].push_back (tgt);
176129 }
130+
177131 }
178132}
179133
@@ -236,15 +190,15 @@ void SwBuild::resolvePackages()
236190 auto m = install (upkgs);
237191
238192 // now we know all drivers
239- std::vector<Input*> inputs ;
193+ std::vector<Input *> iv ;
240194 for (auto &[u, p] : m)
241195 {
242196 // use addInput to prevent doubling already existing and loaded inputs
243197 // like when we loading dependency that is already loaded from the input
244198 // test: sw build org.sw.demo.gnome.pango.pangocairo-1.44
245- inputs .push_back (&addInput (p));
199+ iv .push_back (&swctx. addInput (p));
246200 }
247- load (inputs , false );
201+ swctx. loadEntryPoints (iv , false );
248202}
249203
250204void SwBuild::loadPackages ()
@@ -310,8 +264,16 @@ void SwBuild::loadPackages(const TargetMap &predefined)
310264 LOG_TRACE (logger, " build id " << this << " " __FUNCTION__ << " loading " << d.first .toString ());
311265
312266 loaded = true ;
313- swctx.getTargetData (d.first ).loadPackages (*this , s, known_packages);
267+
268+ auto tgts = swctx.getTargetData (d.first ).loadPackages (*this , s, known_packages);
314269 // swctx.getTargetData(d.first).loadPackages(*this, s, { d.first });
270+ for (auto &tgt : tgts)
271+ {
272+ if (tgt->getSettings ()[" dry-run" ] == " true" )
273+ continue ;
274+ getTargets ()[tgt->getPackage ()].push_back (tgt);
275+ }
276+
315277 auto k = d.second ->find (s);
316278 if (k == d.second ->end ())
317279 {
@@ -521,41 +483,13 @@ String SwBuild::getHash() const
521483{
522484 String s;
523485 for (auto &i : inputs)
524- s += i-> getHash ();
486+ s += i. getHash ();
525487 return shorten_hash (blake2b_512 (s), 8 );
526488}
527489
528- Input & SwBuild::addInput (const String &i)
490+ void SwBuild::addInput (const InputWithSettings &i)
529491{
530- path p (i);
531- if (fs::exists (p))
532- return addInput (p);
533- else
534- return addInput (getContext ().resolve (i));
535- }
536-
537- Input &SwBuild::addInput (const path &i)
538- {
539- return addInput1 (i);
540- }
541-
542- Input &SwBuild::addInput (const PackageId &i)
543- {
544- return addInput1 (i);
545- }
546-
547- template <class I >
548- Input &SwBuild::addInput1 (const I &i)
549- {
550- auto input = std::make_unique<Input>(i, getContext ());
551- auto it = std::find_if (inputs.begin (), inputs.end (), [&i = *input](const auto &p)
552- {
553- return *p == i;
554- });
555- if (it != inputs.end ())
556- return **it;
557- inputs.push_back (std::move (input));
558- return *inputs.back ();
492+ inputs.push_back (i);
559493}
560494
561495path SwBuild::getExecutionPlanPath () const
0 commit comments