]> git.tdb.fi Git - builder.git/blobdiff - source/sourcepackage.cpp
Add support for building datafiles
[builder.git] / source / sourcepackage.cpp
index 3f38acf39c1eba37024d751ef840543195d2ee1d..f5b9f09b533d7f4abbfc9336b4bddf91d6ea6bce 100644 (file)
@@ -16,21 +16,29 @@ Distributed under the LGPL
 using namespace std;
 using namespace Msp;
 
+namespace {
+
+bool component_sort(const Component &c1, const Component &c2)
+{ return c1.get_type()<c2.get_type(); }
+
+}
+
+
 SourcePackage::SourcePackage(Builder &b, const string &n, const FS::Path &s):
        Package(b, n),
        source(s),
        config(*this),
        deps_cache(*this)
 {
-       tar_files.push_back(source/"Build");
+       components.push_back(Component(*this, Component::TARBALL, "@src"));
 }
 
-Msp::FS::Path SourcePackage::get_temp_dir() const
+FS::Path SourcePackage::get_temp_dir() const
 {
        return source/config.get_option("tempdir").value/builder.get_current_arch().get_name()/config.get_option("profile").value;
 }
 
-Msp::FS::Path SourcePackage::get_out_dir() const
+FS::Path SourcePackage::get_out_dir() const
 {
        const Architecture &arch=builder.get_current_arch();
        if(arch.is_native())
@@ -114,9 +122,6 @@ void SourcePackage::do_configure(const StringMap &opts, unsigned flag)
        }
 
        deps_cache.load();
-
-       /*for(PackageList::iterator i=all_reqs.begin(); i!=all_reqs.end(); ++i)
-               (*i)->configure(opts, flag&2);*/
 }
 
 void SourcePackage::init_config()
@@ -127,7 +132,7 @@ void SourcePackage::init_config()
        config.add_option("optimize",   "0",       "Apply compiler optimizations");
        config.add_option("strip",      "0",       "Strip symbols from programs");
        config.add_option("debug",      "0",       "Produce debugging symbols");
-       config.add_option("cpu",        "auto",    "CPU type to optimize for");
+       config.add_option("cpu",        "none",    "CPU type to optimize for");
        config.add_option("staticlibs", "local",   "Use static libraries");
 
        for(FeatureList::iterator i=features.begin(); i!=features.end(); ++i)
@@ -173,7 +178,7 @@ void SourcePackage::create_build_info()
                build_info.cflags.push_back("-O"+optimize);
                build_info.ldflags.push_back("-O"+optimize);
                string cpu=config.get_option("cpu").value;
-               if(cpu!="auto")
+               if(cpu!="none")
                        build_info.cflags.push_back("-march="+cpu);
        }
 
@@ -212,13 +217,22 @@ SourcePackage::Loader::Loader(Package &p):
        add("build_info",  &Loader::build_info);
        add("feature",     &Loader::feature);
        add("if",          &Loader::condition);
-       add("program",     &Loader::program);
-       add("library",     &Loader::library);
-       add("module",      &Loader::module);
-       add("headers",     &Loader::headers);
+       add("program",     &Loader::component<Component::PROGRAM>);
+       add("library",     &Loader::component<Component::LIBRARY>);
+       add("module",      &Loader::component<Component::MODULE>);
+       add("headers",     &Loader::component<Component::HEADERS>);
+       add("install",     &Loader::component<Component::INSTALL>);
+       add("datafile",    &Loader::component<Component::DATAFILE>);
+       add("tarball",     &Loader::tarball);
        add("tar_file",    &Loader::tar_file);
 }
 
+void SourcePackage::Loader::finish()
+{
+       SourcePackage &spkg=static_cast<SourcePackage &>(pkg);
+       spkg.components.sort(component_sort);
+}
+
 void SourcePackage::Loader::feature(const string &n, const string &d)
 {
        static_cast<SourcePackage &>(pkg).features.push_back(Feature(n, d));
@@ -232,45 +246,41 @@ void SourcePackage::Loader::condition(const string &c)
        spkg.conditions.push_back(cond);
 }
 
-void SourcePackage::Loader::program(const string &n)
-{
-       SourcePackage &spkg=static_cast<SourcePackage &>(pkg);
-       Component prog(spkg, Component::PROGRAM, n);
-       load_sub(prog);
-       spkg.components.push_back(prog);
-}
-
-void SourcePackage::Loader::library(const string &n)
+template<Component::Type t>
+void SourcePackage::Loader::component(const string &n)
 {
        SourcePackage &spkg=static_cast<SourcePackage &>(pkg);
-       Component prog(spkg, Component::LIBRARY, n);
-       load_sub(prog);
-       spkg.components.push_back(prog);
+       Component comp(spkg, t, n);
+       load_sub(comp);
+       spkg.components.push_back(comp);
 }
 
-void SourcePackage::Loader::module(const string &n)
+void SourcePackage::Loader::build_info()
 {
-       SourcePackage &spkg=static_cast<SourcePackage &>(pkg);
-       Component prog(spkg, Component::MODULE, n);
-       load_sub(prog);
-       spkg.components.push_back(prog);
+       load_sub(static_cast<SourcePackage &>(pkg).build_info);
 }
 
-void SourcePackage::Loader::headers(const string &n)
+void SourcePackage::Loader::tarball(const string &n)
 {
        SourcePackage &spkg=static_cast<SourcePackage &>(pkg);
-       Component prog(spkg, Component::HEADERS, n);
-       load_sub(prog);
-       spkg.components.push_back(prog);
-}
-
-void SourcePackage::Loader::build_info()
-{
-       load_sub(static_cast<SourcePackage &>(pkg).build_info);
+       if(n=="@src")
+       {
+               for(ComponentList::iterator i=spkg.components.begin(); i!=spkg.components.end(); ++i)
+                       if(i->get_type()==Component::TARBALL && i->get_name()==n)
+                               load_sub(*i);
+       }
+       else
+       {
+               Component trbl(spkg, 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());
        SourcePackage &spkg=static_cast<SourcePackage &>(pkg);
-       spkg.tar_files.push_back(spkg.source/f);
+       for(ComponentList::iterator i=spkg.components.begin(); i!=spkg.components.end(); ++i)
+               if(i->get_type()==Component::TARBALL && i->get_name()=="@src")
+                       const_cast<PathList &>(i->get_sources()).push_back(spkg.source/f);
 }