]> git.tdb.fi Git - builder.git/blobdiff - source/builder.cpp
Replace the overly generic configuration profiles with something more purposeful
[builder.git] / source / builder.cpp
index 927b3026c93b7e40755924bc5d99da927d34f23f..c0574e924d51512ba5af04ff11e14517e78bebf0 100644 (file)
@@ -37,6 +37,7 @@ Builder::Builder(int argc, char **argv):
        package_manager(*this),
        main_pkg(0),
        native_arch(*this, string()),
+       build_type(0),
        vfs(*this),
        analyzer(0),
        build(false),
@@ -62,6 +63,7 @@ Builder::Builder(int argc, char **argv):
        unsigned verbose = 1;
        bool silent = false;
        list<string> log_channels;
+       string build_type_name;
 
        GetOpt getopt;
        getopt.add_option('a', "analyze",    analyze_mode,  GetOpt::REQUIRED_ARG).set_help("Perform analysis.  MODE can be deps, alldeps or rebuild.", "MODE");
@@ -73,6 +75,7 @@ Builder::Builder(int argc, char **argv):
        getopt.add_option('l', "log",        log_channels,  GetOpt::REQUIRED_ARG).set_help("Set log channels to be displayed.", "LIST");
        getopt.add_option('n', "dry-run",    dry_run,       GetOpt::NO_ARG).set_help("Don't actually do anything, only show what would be done.");
        getopt.add_option('s', "silent",     silent,        GetOpt::NO_ARG).set_help("Don't print any messages other than errors.");
+       getopt.add_option('t', "build-type", build_type_name, GetOpt::REQUIRED_ARG).set_help("Set build type.", "TYPE");
        getopt.add_option('v', "verbose",    verbose,       GetOpt::NO_ARG).set_help("Print more information about what's going on.");
        getopt.add_option('x', "no-externals",  no_externals, GetOpt::NO_ARG).set_help("Do not load external source packages.");
        getopt.add_option('A', "conf-all",   conf_all,      GetOpt::NO_ARG).set_help("Apply configuration to all packages.");
@@ -184,6 +187,14 @@ Builder::Builder(int argc, char **argv):
        else
                prefix = FS::getcwd()/prfx;
 
+       if(!build_type_name.empty())
+       {
+               BuildTypeMap::iterator i = build_types.find(build_type_name);
+               if(i==build_types.end())
+                       throw usage_error("Unknown build type");
+               build_type = &i->second;
+       }
+
        warnings.push_back("all");
        warnings.push_back("extra");
        warnings.push_back("shadow");
@@ -265,6 +276,8 @@ int Builder::main()
        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", prefix));
+       if(build_type)
+               logger.log("environment", format("Build type is %s", build_type->get_name()));
 
        const PackageManager::PackageMap &packages = package_manager.get_packages();
        list<string> package_details;
@@ -332,20 +345,6 @@ Target *Builder::get_target(const string &n) const
        return 0;
 }
 
-void Builder::apply_profile_template(Config &config, const string &pt) const
-{
-       vector<string> parts = split(pt, '-');
-
-       for(vector<string>::iterator i=parts.begin(); i!=parts.end(); ++i)
-       {
-               ProfileTemplateMap::const_iterator j = profile_tmpl.find(*i);
-               if(j==profile_tmpl.end())
-                       continue;
-
-               config.update(j->second);
-       }
-}
-
 void Builder::problem(const string &p, const string &d)
 {
        problems.push_back(Problem(p, d));
@@ -604,6 +603,7 @@ Builder::Loader::Loader(Builder &b, const FS::Path &s):
 {
        add("architecture", &Loader::architecture);
        add("binary_package", &Loader::binpkg);
+       add("build_type", &Loader::build_type);
        add("profile", &Loader::profile);
        add("package", &Loader::package);
 }
@@ -620,12 +620,18 @@ void Builder::Loader::binpkg(const string &n)
        load_sub(*pkg);
 }
 
-void Builder::Loader::profile(const string &n)
+void Builder::Loader::build_type(const string &n)
 {
-       StringMap prf;
-       ProfileLoader ldr(prf);
-       load_sub_with(ldr);
-       obj.profile_tmpl.insert(ProfileTemplateMap::value_type(n, prf));
+       BuildType btype(n);
+       load_sub(btype);
+       BuildTypeMap::iterator i = obj.build_types.insert(BuildTypeMap::value_type(n, btype)).first;
+       if(!obj.build_type)
+               obj.build_type = &i->second;
+}
+
+void Builder::Loader::profile(const string &)
+{
+       IO::print("Profiles are deprecated\n");
 }
 
 void Builder::Loader::package(const string &n)
@@ -635,16 +641,6 @@ void Builder::Loader::package(const string &n)
                obj.main_pkg = pkg;
 
        load_sub(*pkg);
-}
-
-
-Builder::ProfileLoader::ProfileLoader(StringMap &p):
-       profile(p)
-{
-       add("option", &ProfileLoader::option);
-}
-
-void Builder::ProfileLoader::option(const string &o, const string &v)
-{
-       profile.insert(StringMap::value_type(o, v));
+       if(obj.build_type)
+               pkg->set_build_type(*obj.build_type);
 }