@@ -1413,7 +1413,7 @@ bool ProjMgrWorker::ProcessDevice(ContextItem& context, BoardOrDevice process) {
14131413 if (!deviceItem.pname .empty ()) {
14141414 ProjMgrLogger::Get ().Error (" processor name '" + deviceItem.pname + " ' was not found" , context.name );
14151415 return false ;
1416- } else if (!HasVarDefineError ()) {
1416+ } else if (!HasVarDefineError () && process != BoardOrDevice::SkipProcessor ) {
14171417 string msg = " one of the following processors must be specified:" ;
14181418 const auto & processors = matchedDevice->GetProcessors ();
14191419 for (const auto & p : processors) {
@@ -4187,11 +4187,11 @@ bool ProjMgrWorker::ListDependencies(vector<string>& dependencies, const string&
41874187 return true ;
41884188}
41894189
4190- vector<RteBoard*> ProjMgrWorker::GetCompatibleBoards (ContextItem& context) {
4190+ vector<RteBoard*> ProjMgrWorker::GetCompatibleBoards (const ContextItem& context) {
41914191 vector<RteBoard*> compatibleBoards;
4192- if (! context.board . empty () ) {
4192+ if (context.rteBoard ) {
41934193 compatibleBoards.push_back (context.rteBoard );
4194- } else if (! context.device . empty () ) {
4194+ } else if (context.rteDevice ) {
41954195 context.rteFilteredModel ->GetCompatibleBoards (compatibleBoards, context.rteDevice );
41964196 }
41974197 return compatibleBoards;
@@ -4224,11 +4224,23 @@ bool ProjMgrWorker::IsBoardListCompatible(const ContextItem& context, const vect
42244224 return false ;
42254225}
42264226
4227- std::vector<ExampleItem> ProjMgrWorker::CollectExamples (ContextItem& context) {
4227+ bool ProjMgrWorker::IsEnvironmentCompatible (const std::string& environment, const StrVec& filter) {
4228+ return (filter.empty () || find (filter.begin (), filter.end (), environment) != filter.end ());
4229+ }
4230+
4231+ bool ProjMgrWorker::HasCompatibleEnvironment (const Collection<RteItem*>& environments, const StrVec& filter) {
4232+ for (const auto & environment : environments) {
4233+ if (IsEnvironmentCompatible (environment->GetName (), filter)) {
4234+ return true ;
4235+ }
4236+ }
4237+ return false ;
4238+ }
4239+
4240+ std::vector<ExampleItem> ProjMgrWorker::CollectExamples (const ContextItem& context, const StrVec& filter) {
42284241 std::vector<ExampleItem> examples;
42294242 vector<const RteItem*> rteExamples;
4230- const auto & packs = context.rteFilteredModel ->GetPackages ();
4231- for (const auto & [_, pack] : packs) {
4243+ for (const auto & pack : m_loadedPacks) {
42324244 const RteItem* packExamples = pack->GetExamples ();
42334245 if (packExamples) {
42344246 const Collection<RteItem*> items = packExamples->GetChildren ();
@@ -4246,6 +4258,11 @@ std::vector<ExampleItem> ProjMgrWorker::CollectExamples(ContextItem& context) {
42464258 if (!IsBoardListCompatible (context, compatibleBoards, boards)) {
42474259 continue ;
42484260 }
4261+ Collection<RteItem*> environments;
4262+ environments = rteExample->GetChildrenByTag (" environment" , environments);
4263+ if (!HasCompatibleEnvironment (environments, filter)) {
4264+ continue ;
4265+ }
42494266 ExampleItem example;
42504267 example.name = rteExample->GetName ();
42514268 example.description = rteExample->GetDescription ();
@@ -4262,17 +4279,18 @@ std::vector<ExampleItem> ProjMgrWorker::CollectExamples(ContextItem& context) {
42624279 for (const auto & board : boards) {
42634280 example.boards .push_back (BoardItem{ board->GetVendorString (), board->GetName () });
42644281 }
4265- const auto & version = rteExample->GetVersionString ( );
4282+ const auto & version = rteExample->GetAttribute ( " version " );
42664283 if (!version.empty ()) {
42674284 example.version = version;
42684285 }
42694286
4270- Collection<RteItem*> environments;
4271- environments = rteExample->GetChildrenByTag (" environment" , environments);
42724287 for (const auto & item : environments) {
4288+ const auto & name = item->GetName ();
4289+ if (!IsEnvironmentCompatible (name, filter)) {
4290+ continue ;
4291+ }
42734292 string load = item->GetAttribute (" load" );
42744293 RteFsUtils::NormalizePath (load, folder);
4275- const auto & name = item->GetName ();
42764294 example.environments [name].load = load;
42774295 example.environments [name].folder = item->GetFolderString ();
42784296 RteFsUtils::NormalizePath (example.environments [name].folder , folder);
@@ -4296,7 +4314,9 @@ std::vector<ExampleItem> ProjMgrWorker::CollectExamples(ContextItem& context) {
42964314 example.keywords .push_back (item->GetText ());
42974315 }
42984316
4299- examples.push_back (example);
4317+ if (find (examples.begin (), examples.end (), example) == examples.end ()) {
4318+ examples.push_back (example);
4319+ }
43004320 }
43014321 return examples;
43024322}
@@ -4316,7 +4336,7 @@ bool ProjMgrWorker::ListExamples(vector<string>& examples, const string& filter)
43164336 return false ;
43174337 }
43184338
4319- const auto & collectedExamples = CollectExamples (context);
4339+ const auto & collectedExamples = CollectExamples (context, StrVec () );
43204340
43214341 for (const auto & exampleItem : collectedExamples) {
43224342 if (!filter.empty () && exampleItem.name .find (filter) == string::npos) {
@@ -4348,7 +4368,7 @@ bool ProjMgrWorker::ListExamples(vector<string>& examples, const string& filter)
43484368 return true ;
43494369}
43504370
4351- std::vector<TemplateItem> ProjMgrWorker::CollectTemplates (ContextItem& context) {
4371+ std::vector<TemplateItem> ProjMgrWorker::CollectTemplates (const ContextItem& context) {
43524372 std::vector<TemplateItem> templates;
43534373 const auto & rteTemplates = context.rteFilteredModel ->GetProjectDescriptors ();
43544374 for (const auto & rteTemplate : rteTemplates) {
0 commit comments