From cbb3c4c6aab7b04f7bd2178fb8f12846d532a472 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Fri, 1 Sep 2006 21:44:35 +0000 Subject: [PATCH] Package configuration is cached Correct behavior with build errors when jobs>1 --- source/builder.cpp | 17 ++++------------- source/config.cpp | 26 ++++++++++++++++++++++++++ source/config.h | 7 +++++++ source/package.cpp | 5 ++++- 4 files changed, 41 insertions(+), 14 deletions(-) diff --git a/source/builder.cpp b/source/builder.cpp index cb8ddf6..1de726b 100644 --- a/source/builder.cpp +++ b/source/builder.cpp @@ -233,15 +233,6 @@ int Builder::main() default_pkg->create_build_info(); - /*cout<<"Active packages:"; - for(PackageMap::iterator i=packages.begin(); i!=packages.end(); ++i) - { - cout<<' '<second->get_name(); - if(i->second->get_buildable()) - cout<<'*'; - } - cout<<'\n';*/ - if(create_targets()) return 1; @@ -261,8 +252,6 @@ int Builder::main() } } - //cout<<"Active targets: "<analyze(); @@ -465,7 +454,7 @@ int Builder::build() while(!finish) { - if(actions.size()get_buildable_target(); if(tgt) @@ -506,7 +495,9 @@ int Builder::build() delete actions[i]; actions.erase(actions.begin()+i); if(status>0) - finish=fail=true; + fail=true; + if(actions.empty() && fail) + finish=true; } else ++i; diff --git a/source/config.cpp b/source/config.cpp index de6b9bc..61f7322 100644 --- a/source/config.cpp +++ b/source/config.cpp @@ -54,6 +54,19 @@ void Config::load(const Path::Path &fn) 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 \""<second.name<<"\" \""<second.value<<"\";\n"; } Config::Option::Option(const string &n, const string &v, const string &d): @@ -62,3 +75,16 @@ 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; +} diff --git a/source/config.h b/source/config.h index e5c90de..9a73880 100644 --- a/source/config.h +++ b/source/config.h @@ -30,9 +30,16 @@ public: 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; diff --git a/source/package.cpp b/source/package.cpp index 3072fd6..cb19403 100644 --- a/source/package.cpp +++ b/source/package.cpp @@ -107,7 +107,8 @@ void Package::create_build_info() 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) @@ -156,6 +157,8 @@ void Package::init_buildable() 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() -- 2.45.2