X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuildercli.cpp;h=0ce2bdc4ababa4a259820e0097e1214789df250c;hb=9fe1e6827bba49c102f0186904922ca0a78852c6;hp=c470f047f6a930653f2d3ddb63dd0b86d3f8eef5;hpb=cb286fd20b9b194947b6b583bf18f8d7e57ae995;p=builder.git diff --git a/source/buildercli.cpp b/source/buildercli.cpp index c470f04..0ce2bdc 100644 --- a/source/buildercli.cpp +++ b/source/buildercli.cpp @@ -8,6 +8,8 @@ #include "buildercli.h" #include "filetarget.h" #include "sourcepackage.h" +#include "tool.h" +#include "toolchain.h" using namespace std; using namespace Msp; @@ -165,6 +167,18 @@ BuilderCLI::BuilderCLI(int argc, char **argv): builder.set_build_type(build_type); builder.add_default_tools(); + + const Toolchain &toolchain = builder.get_toolchain(); + for(Config::InputOptions::iterator i=cmdline_options.begin(); i!=cmdline_options.end(); ) + { + if(toolchain.has_tool(i->first)) + { + toolchain.get_tool(i->first).set_command(i->second); + cmdline_options.erase(i++); + } + else + ++i; + } } BuilderCLI::~BuilderCLI() @@ -255,12 +269,12 @@ int BuilderCLI::main() if(analyzer) analyzer->analyze(); - const Builder::ProblemList &problems = builder.get_problems(); - if(!problems.empty()) + if(build_graph.get_goals().is_broken()) { + list problems = builder.collect_problems(); IO::print(IO::cerr, "The following problems were detected:\n"); - for(Builder::ProblemList::const_iterator i=problems.begin(); i!=problems.end(); ++i) - IO::print(IO::cerr, " %s: %s\n", i->package, i->descr); + for(list::const_iterator i=problems.begin(); i!=problems.end(); ++i) + IO::print(IO::cerr, " %s\n", *i); if(!analyzer) IO::print(IO::cerr, "Please fix them and try again.\n"); return 1; @@ -315,11 +329,7 @@ bool BuilderCLI::prepare_build() build_graph.force_full_rebuild(); if(!dry_run) - { - const PackageManager::PackageMap &packages = package_manager.get_packages(); - for(PackageManager::PackageMap::const_iterator i=packages.begin(); i!=packages.end(); ++i) - i->second->save_caches(); - } + package_manager.save_all_caches(); return true; } @@ -350,13 +360,29 @@ void BuilderCLI::package_help() IO::print(", "); IO::print((*i)->get_name()); } - IO::print("\n\nPackage configuration:\n"); - for(Config::OptionMap::const_iterator i=options.begin(); i!=options.end(); ++i) + IO::print("\n"); + + if(!options.empty()) { - const Config::Option &opt = i->second; - IO::print(" %s: %s (%s)", opt.name, opt.description, opt.value); - if(opt.value!=opt.default_value) - IO::print(" [%s]", opt.default_value); - IO::print("\n"); + IO::print("\nPackage configuration:\n"); + for(Config::OptionMap::const_iterator i=options.begin(); i!=options.end(); ++i) + { + const Config::Option &opt = i->second; + string line = format(" %s: %s (%s)", opt.name, opt.description, opt.value); + if(!opt.choices.empty()) + { + line += " {"; + for(list::const_iterator j=opt.choices.begin(); j!=opt.choices.end(); ++j) + { + if(j!=opt.choices.begin()) + line += ' '; + line += *j; + } + line += '}'; + } + else if(opt.value!=opt.default_value) + line += format(" [%s]", opt.default_value); + IO::print("%s\n", line); + } } }