]> git.tdb.fi Git - builder.git/blobdiff - source/lib/sourcepackage.cpp
Disallow two components with the same name
[builder.git] / source / lib / sourcepackage.cpp
index 3648df727f3f109b01c248a456679a21136fc029..34e8a1b6ec1c6009abc366960844981902a5262e 100644 (file)
@@ -179,9 +179,9 @@ SourcePackage::Loader::Loader(SourcePackage &p, const Config::InputOptions *o):
        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);
@@ -216,18 +216,12 @@ void SourcePackage::Loader::feature(const string &n, const string &d)
        }
 }
 
-template<typename C>
-void SourcePackage::Loader::component(const string &n)
+template<typename C, typename... Args>
+void SourcePackage::Loader::component(Args... args, 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)
-{
-       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);
 }