Distributed under the LGPL
*/
+#include <algorithm>
#include <msp/core/except.h>
#include <msp/fs/dir.h>
#include <msp/fs/stat.h>
void Component::create_build_info()
{
- build_info.add(pkg.get_build_info());
+ const PackageList &pkg_reqs = pkg.get_requires();
+ PackageList direct_reqs = requires;
+ direct_reqs.insert(direct_reqs.end(), pkg_reqs.begin(), pkg_reqs.end());
+
+ PackageList all_reqs = direct_reqs;
+ for(PackageList::iterator i=all_reqs.begin(); i!=all_reqs.end(); ++i)
+ {
+ if(find(direct_reqs.begin(), direct_reqs.end(), *i)!=direct_reqs.end())
+ build_info.add((*i)->get_exported_binfo());
+ else
+ {
+ const BuildInfo &ebi = (*i)->get_exported_binfo();
+ build_info.cflags.insert(build_info.cflags.end(), ebi.cflags.begin(), ebi.cflags.end());
+ build_info.incpath.insert(build_info.incpath.end(), ebi.incpath.begin(), ebi.incpath.end());
+ build_info.defines.insert(build_info.defines.end(), ebi.defines.begin(), ebi.defines.end());
+ }
- for(PackageList::iterator i=requires.begin(); i!=requires.end(); ++i)
- build_info.add((*i)->get_exported_binfo());
+ const PackageList &reqs = (*i)->get_requires();
+ for(PackageList::const_iterator j=reqs.begin(); j!=reqs.end(); ++j)
+ if(find(all_reqs.begin(), all_reqs.end(), *j)==all_reqs.end())
+ all_reqs.push_back(*j);
+ }
+
+ build_info.add(pkg.get_build_info());
for(StringList::iterator i=build_info.incpath.begin(); i!=build_info.incpath.end(); ++i)
*i = (pkg.get_source() / *i).str();
if(pkg.get_library_mode()!=DYNAMIC)
{
- // XXX This may pull in some unnecessary libpaths too. More thought required.
- PackageList reqs = pkg.collect_requires();
- for(PackageList::iterator i=reqs.begin(); i!=reqs.end(); ++i)
+ for(PackageList::iterator i=all_reqs.begin(); i!=all_reqs.end(); ++i)
{
const BuildInfo &ebi = (*i)->get_exported_binfo();
build_info.libpath.insert(build_info.libpath.end(), ebi.libpath.begin(), ebi.libpath.end());