#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;
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); });
}
void SourcePackage::save_caches()
add("generate", &Loader::generate);
add("install", &Loader::component<InstallComponent>);
add("interface_version", &Loader::interface_version);
- add("library", &Loader::component_arg<BinaryComponent, BinaryComponent::Type>, BinaryComponent::LIBRARY);
- add("module", &Loader::component_arg<BinaryComponent, BinaryComponent::Type>, BinaryComponent::MODULE);
- add("program", &Loader::component_arg<BinaryComponent, BinaryComponent::Type>, BinaryComponent::PROGRAM);
+ add("library", &Loader::component<BinaryComponent, BinaryComponent::Type>, BinaryComponent::LIBRARY);
+ add("module", &Loader::component<BinaryComponent, BinaryComponent::Type>, BinaryComponent::MODULE);
+ add("program", &Loader::component<BinaryComponent, BinaryComponent::Type>, BinaryComponent::PROGRAM);
add("source_archive", &Loader::source_archive);
add("source_tarball", &Loader::source_archive);
add("tarball", &Loader::tarball);
}
}
-template<typename C>
-void SourcePackage::Loader::component(const string &n)
-{
- C *comp = new C(obj, n);
- load_sub(*comp);
- obj.components.push_back(comp);
-}
-
-template<typename C, typename A>
-void SourcePackage::Loader::component_arg(A a, const string &n)
+template<typename C, typename... Args>
+void SourcePackage::Loader::component(Args... args, const string &n)
{
- C *comp = new C(obj, n, a);
+ 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);
}