]> git.tdb.fi Git - builder.git/blobdiff - source/buildercli.cpp
Use default member initializers and constructor delegation
[builder.git] / source / buildercli.cpp
index 94b8f52e2bda19245801438ba0127251f3fe2e9a..bc18eed9f37366f4250cc2955d47026cba5f3b33 100644 (file)
@@ -15,19 +15,7 @@ using namespace std;
 using namespace Msp;
 
 BuilderCLI::BuilderCLI(int argc, char **argv):
-       RegisteredApplication<BuilderCLI>("builder"),
-       analyzer(0),
-       build(false),
-       clean(0),
-       dry_run(false),
-       help(false),
-       show_progress(false),
-       build_file("Build"),
-       jobs(1),
-       conf_all(false),
-       conf_only(false),
-       build_all(false),
-       create_makefile(false)
+       RegisteredApplication<BuilderCLI>("builder")
 {
        string analyze_mode;
        string work_dir;
@@ -39,7 +27,7 @@ BuilderCLI::BuilderCLI(int argc, char **argv):
        bool no_externals = false;
        unsigned verbose = 1;
        bool silent = false;
-       list<string> log_channels;
+       vector<string> log_channels;
        string build_type;
 
        GetOpt getopt;
@@ -121,18 +109,6 @@ BuilderCLI::BuilderCLI(int argc, char **argv):
        else if(!clean && !create_makefile)
                build = true;
 
-       for(auto i=cmdline_targets.begin(); i!=cmdline_targets.end(); )
-       {
-               string::size_type equal = i->find('=');
-               if(equal!=string::npos)
-               {
-                       cmdline_options.insert({ i->substr(0, equal), i->substr(equal+1) });
-                       cmdline_targets.erase(i++);
-               }
-               else
-                       ++i;
-       }
-
        if(!work_dir.empty())
                FS::chdir(work_dir);
 
@@ -148,7 +124,7 @@ BuilderCLI::BuilderCLI(int argc, char **argv):
 
        builder.set_architecture(tolower(arch));
 
-       list<FS::Path> start_files;
+       vector<FS::Path> start_files;
        start_files.push_back(FS::get_sys_data_dir()/"builderrc");
        start_files.push_back(FS::get_user_data_dir()/"rc");
        for(const FS::Path &f: start_files)
@@ -167,12 +143,18 @@ BuilderCLI::BuilderCLI(int argc, char **argv):
        builder.add_default_tools();
 
        const Toolchain &toolchain = builder.get_toolchain();
-       for(auto i=cmdline_options.begin(); i!=cmdline_options.end(); )
+       for(auto i=cmdline_targets.begin(); i!=cmdline_targets.end(); )
        {
-               if(toolchain.has_tool(i->first))
+               string::size_type equal = i->find('=');
+               if(equal!=string::npos)
                {
-                       toolchain.get_tool(i->first).set_command(i->second);
-                       cmdline_options.erase(i++);
+                       string key = i->substr(0, equal);
+                       string value = i->substr(equal+1);
+                       if(toolchain.has_tool(key))
+                               toolchain.get_tool(key).set_command(value);
+                       else
+                               cmdline_options.insert({ key, value });
+                       i = cmdline_targets.erase(i);
                }
                else
                        ++i;
@@ -201,36 +183,36 @@ int BuilderCLI::main()
 
        if(help)
        {
-               IO::print("Builder 1.0\n"
-                       "Copyright © 2006-2013  Mikkosoft Productions, Mikko Rasa\n"
+               IO::print("Builder 3.0\n"
+                       "Copyright © 2006-2022  Mikkosoft Productions, Mikko Rasa\n"
                        "Licensed under the GPL\n\n"
                        "%s", helpmsg);
                package_help();
                return 0;
        }
 
-       if(!prepare_build())
-               return 1;
-
-       if(conf_only)
-               return 0;
-
        const Architecture &native_arch = builder.get_native_arch();
        const Architecture &current_arch = builder.get_current_arch();
-       logger.log("environment", format("Building on %s, for %s%s", native_arch.get_name(),
-               current_arch.get_name(), (current_arch.is_native() ? " (native)" : "")));
-       logger.log("environment", format("Prefix is %s", builder.get_prefix()));
+       logger.log("environment", "Building on %s, for %s%s", native_arch.get_name(),
+               current_arch.get_name(), (current_arch.is_native() ? " (native)" : ""));
+       logger.log("environment", "Prefix is %s", builder.get_prefix());
        const FS::Path &tempdir = builder.get_temp_directory();
        if(tempdir.is_absolute())
-               logger.log("environment", format("Temporary directory is %s", tempdir));
+               logger.log("environment", "Temporary directory is %s", tempdir);
        else
-               logger.log("environment", format("Using per-package temporary directory %s", tempdir));
+               logger.log("environment", "Using per-package temporary directory %s", tempdir);
        const BuildType &build_type = builder.get_build_type();
-       logger.log("environment", format("Build type is %s", build_type.get_name()));
+       logger.log("environment", "Build type is %s", build_type.get_name());
+
+       if(!prepare_build())
+               return 1;
+
+       if(conf_only)
+               return 0;
 
        BuildGraph &build_graph = builder.get_build_graph();
        PackageManager &package_manager = builder.get_package_manager();
-       list<string> package_details;
+       vector<string> package_details;
        for(const auto &kvp: package_manager.get_packages())
        {
                if(!kvp.second->is_prepared())
@@ -262,7 +244,7 @@ int BuilderCLI::main()
                package_details.push_back(line);
        }
 
-       logger.log("summary", format("%d active packages, %d targets", package_details.size(), build_graph.get_targets().size()));
+       logger.log("summary", "%d active packages, %d targets", package_details.size(), build_graph.get_targets().size());
        for(const string &d: package_details)
                logger.log("packages", d);
 
@@ -271,7 +253,7 @@ int BuilderCLI::main()
 
        if(build_graph.get_goals().is_broken())
        {
-               list<string> problems = builder.collect_problems();
+               vector<string> problems = builder.collect_problems();
                IO::print(IO::cerr, "The following problems were detected:\n");
                for(const string &p: problems)
                        IO::print(IO::cerr, "  %s\n", p);
@@ -353,7 +335,7 @@ void BuilderCLI::package_help()
 
        SourcePackage &main_pkg = dynamic_cast<SourcePackage &>(package_manager.get_main_package());
        const Config &config = main_pkg.get_config();
-       const Config::OptionMap &options = config.get_options();
+       const auto &options = config.get_options();
        const Package::Requirements &requires = main_pkg.get_required_packages();
 
        if(!requires.empty() || !options.empty())