]> git.tdb.fi Git - builder.git/blobdiff - source/lib/sourcepackage.cpp
Install headers of non-installed components in a staging directory
[builder.git] / source / lib / sourcepackage.cpp
index 014bd83eb9dcc99be81409c7d5e5291c2b9f41a2..dabda21c99735ec0983171ccba76682848044c87 100644 (file)
@@ -5,22 +5,16 @@
 #include <msp/io/print.h>
 #include <msp/strings/lexicalcast.h>
 #include <msp/strings/utils.h>
-#include "android/androidapplicationcomponent.h"
 #include "binarycomponent.h"
 #include "binarypackage.h"
 #include "builder.h"
-#include "builtin/compilecommandsjson.h"
-#include "datafile/datapackcomponent.h"
 #include "file.h"
 #include "installcomponent.h"
-#include "builtin/pkgconfigfile.h"
 #include "plugin.h"
 #include "sourcearchivecomponent.h"
 #include "sourcegenerator.h"
 #include "sourcepackage.h"
 #include "tool.h"
-#include "builtin/vcxprojectfile.h"
-#include "builtin/vssolutionfile.h"
 
 using namespace std;
 using namespace Msp;
@@ -71,6 +65,11 @@ FS::Path SourcePackage::get_output_directory() const
                return source_dir/arch.get_name();
 }
 
+FS::Path SourcePackage::get_staging_directory() const
+{
+       return get_temp_directory()/"staging";
+}
+
 const Component &SourcePackage::get_component(const string &n) const
 {
        auto i = find_if(components, [&n](const Component *c){ return c->get_name()==n; });
@@ -103,8 +102,9 @@ void SourcePackage::do_prepare()
        final_build_info.update_from(build_info);
        build_info = final_build_info;
 
-       build_info.incpath.push_back((builder.get_prefix()/"include").str());
-       build_info.libpath.push_back((builder.get_prefix()/"lib").str());
+       build_info.incpath.push_back(get_staging_directory()/"include");
+       build_info.incpath.push_back(builder.get_prefix()/"include");
+       build_info.libpath.push_back(builder.get_prefix()/"lib");
 
        for(const Feature &f: features)
        {
@@ -136,29 +136,14 @@ void SourcePackage::do_prepare()
        for(Component *c: components)
                c->create_targets();
 
-       const Architecture &arch = builder.get_native_arch();
        if(!export_binfo.libs.empty())
        {
                export_binfo.incpath.push_back((builder.get_prefix()/"include").str());
                export_binfo.libpath.push_back((builder.get_prefix()/"lib").str());
-
-               if(arch.get_system()=="linux")
-               {
-                       PkgConfigFile *pc = new PkgConfigFile(builder, *this);
-                       builder.get_build_graph().get_target("install")->add_dependency(*builder.get_toolchain().get_tool("CP").create_target(*pc));
-               }
        }
 
        export_binfo.standards = build_info.standards;
 
-       if(arch.get_system()=="windows")
-       {
-               new VcxProjectFile(builder, *this);
-               new VsSolutionFile(builder, *this);
-       }
-
-       new CompileCommandsJson(builder, *this);
-
        builder.call_plugins([this](const Plugin &p){ p.create_targets(*this); });
 }
 
@@ -174,10 +159,9 @@ SourcePackage::Loader::Loader(SourcePackage &p, const Config::InputOptions *o):
        FeatureConditional(p, p.name),
        options(o)
 {
-       add("android_application", &Loader::component<AndroidApplicationComponent>);
        add("build_info",  &Loader::build_info);
-       add("datapack",    &Loader::component<DataPackComponent>);
        add("description", &SourcePackage::description);
+       add("export",      &Loader::exported);
        add("feature",     &Loader::feature);
        add("generate",    &Loader::generate);
        add("install",     &Loader::component<InstallComponent>);
@@ -189,6 +173,8 @@ SourcePackage::Loader::Loader(SourcePackage &p, const Config::InputOptions *o):
        add("source_tarball", &Loader::source_archive);
        add("tarball",     &Loader::tarball);
        add("version",     &Loader::version);
+
+       p.builder.get_component_registry().invoke_all(*this);
 }
 
 void SourcePackage::Loader::finish()
@@ -203,6 +189,12 @@ void SourcePackage::Loader::finish()
        }
 }
 
+void SourcePackage::Loader::exported()
+{
+       ExportLoader ldr(obj);
+       load_sub_with(ldr);
+}
+
 void SourcePackage::Loader::feature(const string &n, const string &d)
 {
        Feature feat(n);
@@ -219,16 +211,6 @@ void SourcePackage::Loader::feature(const string &n, const string &d)
        }
 }
 
-template<typename C, typename... Args>
-void SourcePackage::Loader::component(Args... args, const string &n)
-{
-       if(any_of(obj.components.begin(), obj.components.end(), [&n](const Component *c){ return c->get_name()==n; }))
-               throw key_error(n);
-       C *comp = new C(obj, n, args...);
-       load_sub(*comp);
-       obj.components.push_back(comp);
-}
-
 void SourcePackage::Loader::build_info()
 {
        load_sub(obj.build_info);
@@ -268,3 +250,18 @@ void SourcePackage::Loader::version(const string &v)
                        break;
        obj.interface_version = obj.version.substr(0, i);
 }
+
+
+SourcePackage::ExportLoader::ExportLoader(SourcePackage &p):
+       ObjectLoader<SourcePackage>(p)
+{
+       add("build_info", &ExportLoader::build_info);
+}
+
+void SourcePackage::ExportLoader::build_info()
+{
+       BuildInfo bi;
+       load_sub(bi);
+       obj.build_info.update_from(bi);
+       obj.export_binfo.update_from(bi);
+}