From 102de418e552cb1e1f91bb85954c4c101fdea82d Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Thu, 21 Jun 2012 00:02:55 +0300 Subject: [PATCH] Move some target creation logic to SourcePackage --- source/builder.cpp | 21 ++------------------- source/package.h | 3 +++ source/sourcepackage.cpp | 19 +++++++++++++++++++ source/sourcepackage.h | 2 ++ 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/source/builder.cpp b/source/builder.cpp index e8f8927..1159689 100644 --- a/source/builder.cpp +++ b/source/builder.cpp @@ -24,7 +24,6 @@ #include "gnulinker.h" #include "installedfile.h" #include "package.h" -#include "pkgconfigfile.h" #include "pkgconfiggenerator.h" #include "sharedlibrary.h" #include "sourcepackage.h" @@ -495,24 +494,8 @@ int Builder::create_targets() world->add_depend(tarballs); for(PackageMap::const_iterator i=packages.begin(); i!=packages.end(); ++i) - { - if(!i->second || !i->second->is_configured()) - continue; - - SourcePackage *spkg = dynamic_cast(i->second); - if(!spkg) - continue; - - const ComponentList &components = spkg->get_components(); - for(ComponentList::const_iterator j=components.begin(); j!=components.end(); ++j) - j->create_targets(); - - if(spkg->get_install_flags()&(SourcePackage::LIB|SourcePackage::INCLUDE)) - { - PkgConfigFile *pc = new PkgConfigFile(*this, *spkg); - install->add_depend(toolchain.get_tool("CP").create_target(*pc)); - } - } + if(i->second && i->second->is_configured()) + i->second->create_targets(); // Apply what-ifs // XXX This does not currently work with targets found during dependency discovery diff --git a/source/package.h b/source/package.h index e63fd77..e107abc 100644 --- a/source/package.h +++ b/source/package.h @@ -62,6 +62,9 @@ public: protected: virtual void do_configure(const StringMap &, unsigned) { } virtual void create_build_info() { } + +public: + virtual void create_targets() { } }; #endif diff --git a/source/sourcepackage.cpp b/source/sourcepackage.cpp index 7d0ed1d..246a6db 100644 --- a/source/sourcepackage.cpp +++ b/source/sourcepackage.cpp @@ -5,6 +5,8 @@ #include "binarypackage.h" #include "builder.h" #include "misc.h" +#include "pkgconfigfile.h" +#include "tool.h" #include "sourcepackage.h" using namespace std; @@ -226,6 +228,23 @@ void SourcePackage::create_build_info() } } +void SourcePackage::create_targets() +{ + bool pc_needed = false; + for(ComponentList::const_iterator i=components.begin(); i!=components.end(); ++i) + { + i->create_targets(); + if(i->get_type()==Component::LIBRARY || i->get_type()==Component::HEADERS) + pc_needed = true; + } + + if(pc_needed) + { + PkgConfigFile *pc = new PkgConfigFile(builder, *this); + builder.get_target("install")->add_depend(builder.get_toolchain().get_tool("CP").create_target(*pc)); + } +} + SourcePackage::Loader::Loader(Package &p): Package::Loader(p) diff --git a/source/sourcepackage.h b/source/sourcepackage.h index cf63b0e..b09ccf2 100644 --- a/source/sourcepackage.h +++ b/source/sourcepackage.h @@ -92,6 +92,8 @@ private: /** Fills in build info based on configuration. All required packages must be configured when this is called. */ virtual void create_build_info(); + + virtual void create_targets(); }; #endif -- 2.43.0