default_pkg->create_build_info();
- /*cout<<"Active packages:";
- for(PackageMap::iterator i=packages.begin(); i!=packages.end(); ++i)
- {
- cout<<' '<<i->second->get_name();
- if(i->second->get_buildable())
- cout<<'*';
- }
- cout<<'\n';*/
-
if(create_targets())
return 1;
}
}
- //cout<<"Active targets: "<<targets.size()<<'\n';
-
if(analyzer)
analyzer->analyze();
while(!finish)
{
- if(actions.size()<jobs && !finish)
+ if(actions.size()<jobs && !fail)
{
Target *tgt=cmdline->get_buildable_target();
if(tgt)
delete actions[i];
actions.erase(actions.begin()+i);
if(status>0)
- finish=fail=true;
+ fail=true;
+ if(actions.empty() && fail)
+ finish=true;
}
else
++i;
struct stat st;
Path::stat(fn, st);
mtime=Time::TimeStamp::from_unixtime(st.st_mtime);
+
+ Parser::Parser parser(in, fn.str());
+ Loader loader(*this);
+ loader.load(parser);
+}
+
+void Config::save(const Path::Path &fn) const
+{
+ ofstream out(fn.str().c_str());
+ if(!out) return;
+
+ for(OptionMap::const_iterator i=options.begin(); i!=options.end(); ++i)
+ out<<"option \""<<i->second.name<<"\" \""<<i->second.value<<"\";\n";
}
Config::Option::Option(const string &n, const string &v, const string &d):
descr(d),
value(v)
{ }
+
+Config::Loader::Loader(Config &c):
+ conf(c)
+{
+ add("option", &Loader::option);
+}
+
+void Config::Loader::option(const string &n, const string &v)
+{
+ OptionMap::iterator i=conf.options.find(n);
+ if(i!=conf.options.end())
+ i->second.value=v;
+}
bool is_option(const std::string &) const;
bool process(const RawOptionMap &);
void load(const Msp::Path::Path &);
+ void save(const Msp::Path::Path &) const;
private:
class Loader: public Msp::Parser::Loader
{
+ public:
+ Loader(Config &);
+ private:
+ Config &conf;
+
+ void option(const std::string &, const std::string &);
};
OptionMap options;
void Package::process_options(const RawOptionMap &opts)
{
- config.process(opts);
+ if(config.process(opts))
+ config.save(source/".options.cache");
}
Package *Package::create(Builder &b, const string &name)
config.add_option("includedir", "$prefix/lib", "Library installation directory");
if(flags&DATA)
config.add_option("includedir", "$prefix/share", "Data installation directory");*/
+
+ config.load(source/".options.cache");
}
unsigned Package::get_install_flags()