]> git.tdb.fi Git - builder.git/blobdiff - source/sourcepackage.cpp
Add and improve build signatures for some tools
[builder.git] / source / sourcepackage.cpp
index b84b22a58f0a33ea326cfc99845e9363ade5081c..dbb759205fe0eef45f3b0b1ded50cfe5ba80a077 100644 (file)
@@ -8,6 +8,7 @@
 #include "file.h"
 #include "pkgconfigfile.h"
 #include "tool.h"
+#include "sourcegenerator.h"
 #include "sourcepackage.h"
 
 using namespace std;
@@ -37,11 +38,6 @@ SourcePackage::SourcePackage(Builder &b, const string &n, const FS::Path &f):
        source_tarball = &components.back();
 }
 
-void SourcePackage::set_build_type(const BuildType &t)
-{
-       build_type = &t;
-}
-
 FS::Path SourcePackage::get_temp_directory() const
 {
        string subdir = builder.get_current_arch().get_name();
@@ -88,6 +84,11 @@ bool SourcePackage::match_feature(const string &cond) const
        }
 }
 
+void SourcePackage::set_build_type(const BuildType &t)
+{
+       build_type = &t;
+}
+
 void SourcePackage::do_prepare()
 {
        BuildInfo final_build_info;
@@ -102,8 +103,14 @@ void SourcePackage::do_prepare()
        build_info.libpath.push_back((builder.get_prefix()/"lib").str());
 
        for(FeatureList::iterator i=features.begin(); i!=features.end(); ++i)
-               if(lexical_cast<bool>(config.get_option("with_"+i->name).value))
-                       build_info.defines["WITH_"+toupper(i->name)] = "1";
+       {
+               string ident = "WITH_"+toupper(i->name);
+               string value = config.get_option("with_"+i->name).value;
+               if(!i->choices.empty())
+                       build_info.defines[ident] = value;
+               else if(lexical_cast<bool>(value))
+                       build_info.defines[ident] = "1";
+       }
 
        bool export_paths = false;
        for(list<Component>::iterator i=components.begin(); i!=components.end(); ++i)
@@ -166,67 +173,40 @@ void SourcePackage::Loader::init(const Config::InputOptions *o)
        add("description", &SourcePackage::description);
        add("build_info",  &Loader::build_info);
        add("feature",     &Loader::feature);
-       add("if",          &Loader::condition);
+       add("generate",    &Loader::generate);
        add("if_feature",  &Loader::if_feature);
        add("program",     &Loader::component<Component::PROGRAM>);
        add("library",     &Loader::component<Component::LIBRARY>);
        add("module",      &Loader::component<Component::MODULE>);
-       add("headers",     &Loader::headers);
        add("install",     &Loader::component<Component::INSTALL>);
        add("interface_version", &Loader::interface_version);
-       add("datafile",    &Loader::component<Component::DATAFILE>);
+       add("datapack",    &Loader::component<Component::DATAPACK>);
        add("source_tarball", &Loader::source_tarball);
        add("tarball",     &Loader::tarball);
-       add("tar_file",    &Loader::tar_file);
        add("version",     &Loader::version);
 }
 
 void SourcePackage::Loader::finish()
 {
        obj.components.sort(component_sort);
-
-       for(map<string, string>::const_iterator i=install_map.begin(); i!=install_map.end(); ++i)
-       {
-               for(ComponentList::iterator j=obj.components.begin(); j!=obj.components.end(); ++j)
-               {
-                       const Component::SourceList &sources = j->get_sources();
-                       for(Component::SourceList::const_iterator k=sources.begin(); k!=sources.end(); ++k)
-                       {
-                               string k_str = k->str();
-                               if(!i->first.compare(0, k_str.size(), k_str))
-                               {
-                                       const_cast<InstallMap &>(j->get_install_map()).add_mapping(obj.source_dir/i->first, i->second);
-                               }
-                       }
-               }
-       }
 }
 
 void SourcePackage::Loader::feature(const string &n, const string &d)
 {
        Feature feat(n);
-       feat.descr = d;
-       feat.def_value = "no";
+       feat.description = d;
        load_sub(feat);
        obj.features.push_back(feat);
-       string config_key = "with_"+feat.name;
-       obj.config.add_option(config_key, feat.def_value, feat.descr);
+
+       const Config::Option &opt = obj.config.add_option(feat);
        if(options)
        {
-               Config::InputOptions::const_iterator i = options->find(config_key);
+               Config::InputOptions::const_iterator i = options->find(opt.name);
                if(i!=options->end())
-                       obj.config.set_option(config_key, i->second);
+                       obj.config.set_option(opt.name, i->second);
        }
 }
 
-void SourcePackage::Loader::condition(const string &c)
-{
-       IO::print("%s: Note: Old-style conditions are deprecated\n", get_source());
-       Condition cond(obj, c);
-       if(cond.eval())
-               load_sub_with(*this);
-}
-
 template<Component::Type t>
 void SourcePackage::Loader::component(const string &n)
 {
@@ -240,14 +220,11 @@ void SourcePackage::Loader::build_info()
        load_sub(obj.build_info);
 }
 
-void SourcePackage::Loader::headers(const string &n)
+void SourcePackage::Loader::generate(const string &tag)
 {
-       IO::print("%s: Note: headers components are deprecated\n", get_source());
-       Component comp(obj, Component::LIBRARY, n);
-       load_sub(comp);
-       const Component::SourceList &sources = comp.get_sources();
-       for(Component::SourceList::const_iterator i=sources.begin(); i!=sources.end(); ++i)
-               install_map[i->str()] = "include/"+comp.get_name();
+       SourceGenerator *gen = new SourceGenerator(obj.builder, obj, tag);
+       load_sub(*gen);
+       obj.local_tools.add_tool(gen);
 }
 
 void SourcePackage::Loader::if_feature(const string &cond)
@@ -272,24 +249,8 @@ void SourcePackage::Loader::source_tarball()
 
 void SourcePackage::Loader::tarball(const string &n)
 {
-       if(n=="@src")
-       {
-               IO::print("%s: Note: Use source_tarball instead of tarball \"@src\"\n", get_source());
-               load_sub(*obj.source_tarball);
-       }
-       else
-       {
-               Component trbl(obj, Component::TARBALL, n);
-               load_sub(trbl);
-       }
-}
-
-void SourcePackage::Loader::tar_file(const string &f)
-{
-       IO::print("%s: Note: tar_file is deprecated\n", get_source());
-       for(ComponentList::iterator i=obj.components.begin(); i!=obj.components.end(); ++i)
-               if(i->get_type()==Component::TARBALL && i->get_name()=="@src")
-                       const_cast<Component::SourceList &>(i->get_sources()).push_back((obj.source_dir/f).str());
+       Component trbl(obj, Component::TARBALL, n);
+       load_sub(trbl);
 }
 
 void SourcePackage::Loader::version(const string &v)