X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fconfig.cpp;h=fbb36ac3d5cc32b1e3bec7fb63b917cc3879ab03;hb=a2adbd9c0a8d7a7567848c4c6bdbf0de6ba32bb1;hp=afa60e87e45f10fe3a0e0c9780e2c52c9a607741;hpb=b6dcf65b5e1b99f6c65454358c7610f3e9c8af2b;p=builder.git diff --git a/source/config.cpp b/source/config.cpp index afa60e8..fbb36ac 100644 --- a/source/config.cpp +++ b/source/config.cpp @@ -1,15 +1,26 @@ -#include -#include -#include +/* $Id$ + +This file is part of builder +Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions +Distributed under the LGPL +*/ + +#include +#include +#include +#include +#include +#include +#include #include #include "builder.h" #include "config.h" -#include "package.h" +#include "sourcepackage.h" using namespace std; using namespace Msp; -Config::Config(Package &p): +Config::Config(SourcePackage &p): package(p), freeze_mtime(false) { } @@ -53,13 +64,15 @@ default profile is assumed. */ void Config::select_last_profile() { - ifstream in((package.get_source()/".profile.cache").str().c_str()); - if(in) + try { + IO::File in((package.get_source()/".profile.cache").str()); string profile; - getline(in, profile); + in.getline(profile); set_option("profile", profile); } + catch(const IO::FileNotFound &) + { } freeze_mtime=true; package.get_builder().apply_profile_template(*this, get_option("profile").value); @@ -78,9 +91,8 @@ void Config::select_profile(const string &profile) if(!package.get_builder().get_dry_run()) { - ofstream out((package.get_source()/".profile.cache").str().c_str()); - if(out) - out<second.value+".cache"); - ofstream out(fn.str().c_str()); - if(!out) return; - + IO::File out(fn.str(), IO::M_WRITE); + for(i=options.begin(); i!=options.end(); ++i) - out<<"option \""<second.name<<"\" \""<second.value<<"\";\n"; + IO::print(out, "option \"%s\" \"%s\";\n", i->second.name, i->second.value); } bool Config::set_option(const string &opt, const string &val) @@ -194,22 +207,25 @@ bool Config::set_option(const string &opt, const string &val) void Config::load() { - Path::Path fn=package.get_source()/".options.cache"; + FS::Path fn=package.get_source()/".options.cache"; OptionMap::iterator i=options.find("profile"); if(i!=options.end()) fn=package.get_source()/(".options."+i->second.value+".cache"); - ifstream in(fn.str().c_str()); - if(!in) return; + try + { + IO::File inf(fn.str()); + IO::Buffered in(inf); - struct stat st; - Path::stat(fn, st); - mtime=Time::TimeStamp::from_unixtime(st.st_mtime); + mtime=Time::TimeStamp::from_unixtime(FS::stat(fn).st_mtime); - Parser::Parser parser(in, fn.str()); - Loader loader(*this); - loader.load(parser); + DataFile::Parser parser(in, fn.str()); + Loader loader(*this); + loader.load(parser); + } + catch(const IO::FileNotFound &) + { } }