void Maker::CancelOne(Depends *depend) { for (Depends::iterator it = depend->begin(); it != depend->end(); ++it) { CancelOne(*it); } std::string path = filePaths[depend->GetGoal()]; if (path.size() != 0) { Variable *v = VariableContainer::Instance()->Lookup("GPATH"); if (v) { std::string t = v->GetValue(); if (v->GetFlavor() == Variable::f_recursive) { Eval e(t, false); t = e.Evaluate(); } if (!ScanList(t, path)) filePaths[depend->GetGoal()] = ""; } // else // filePaths[depend->GetGoal()] = ""; } }
bool Maker::CreateDependencyTree() { if (goals.size() == 0) { Variable *dg = VariableContainer::Instance()->Lookup(".DEFAULT_GOAL"); std::string value; if (dg && dg->GetValue().size() != 0) { value = dg->GetValue(); if (dg->GetFlavor() == Variable::f_recursive) { Eval r(value, false); value = r.Evaluate(); } } else { value = firstGoal; } if (value.size() == 0) return true; // nothing to do AddGoal(value); } EnterSuffixTerminals(); std::string intermediate; Variable *v = VariableContainer::Instance()->Lookup(".INTERMEDIATE"); if (v) { intermediate = v->GetValue(); } for (std::deque<std::string>::iterator it = goals.begin(); it != goals.end(); ++it) { Time tv1, tv2; Depends *t = Dependencies(*it, "", tv1); if (t || OnList(*it,".PHONY")) { depends.push_back(t); } else if (t) delete t; } v = VariableContainer::Instance()->Lookup(".INTERMEDIATE"); if (v) { v->SetValue(intermediate); } return !missingTarget; }
bool Include::AddFileList(const std::string &name, bool ignoreOk, bool MakeFile) { Eval e(name, false); std::string iname = e.Evaluate(); bool rv = true; CmdFiles cmdFiles; std::string seps(" "); seps += CmdFiles::PATH_SEP; std::string includeDirs; Variable *id = VariableContainer::Instance()->Lookup(".INCLUDE_DIRS"); if (id) { includeDirs = id->GetValue(); if (id->GetFlavor() == Variable::f_recursive) { Eval r(includeDirs, false); includeDirs = r.Evaluate(); } } while (iname.size()) { std::string current = Eval::ExtractFirst(iname, seps); cmdFiles.AddFromPath(current, includeDirs); } for (CmdFiles::FileNameIterator it = cmdFiles.FileNameBegin(); rv && it != cmdFiles.FileNameEnd(); ++it) { Variable *v = VariableContainer::Instance()->Lookup("MAKEFILE_LIST"); if (!v) { v = new Variable(std::string("MAKEFILE_LIST"), *(*it), Variable::f_simple, Variable::o_file); *VariableContainer::Instance() += v; } else { v->SetValue(v->GetValue() +" " + *(*it)); } files.push_back(*(*it)); rv &= Parse(*(*it), ignoreOk | MakeFile, MakeFile); } return rv; }