bool has_relative_paths = false;
for(BuildInfo::PathList::const_iterator i=export_binfo.libpath.begin(); (!has_relative_paths && i!=export_binfo.libpath.end()); ++i)
has_relative_paths = !i->is_absolute();
+ for(BuildInfo::PathList::const_iterator i=export_binfo.incpath.begin(); (!has_relative_paths && i!=export_binfo.incpath.end()); ++i)
+ has_relative_paths = !i->is_absolute();
list<FS::Path> bases;
/* If we have any relative paths that need resolving, or we have no paths at
all and are not using pkg-config, look for files in prefix */
- if(has_relative_paths || (!use_pkgconfig && export_binfo.libpath.empty()))
+ if(has_relative_paths || (!use_pkgconfig && export_binfo.libpath.empty() && export_binfo.incpath.empty()))
bases.push_back(builder.get_prefix());
// Always look in system locations
for(BuildInfo::WordList::const_iterator j=export_binfo.libs.begin(); j!=export_binfo.libs.end(); ++j)
all_found &= (builder.get_vfs().find_library(*j, libpath, export_binfo.libmode, system)!=0);
+ BuildInfo::PathList incpath = export_binfo.incpath;
+ if(!system && incpath.empty())
+ incpath.push_back("include");
+ for(BuildInfo::PathList::iterator j=incpath.begin(); j!=incpath.end(); ++j)
+ *j = prefix/ *j;
+
+ for(HeaderList::const_iterator j=headers.begin(); j!=headers.end(); ++j)
+ all_found &= (builder.get_vfs().find_header(*j, incpath, system)!=0);
+
if(all_found)
{
base_path = prefix;
if(!system && export_binfo.libpath.empty())
export_binfo.libpath.push_back(base_path/"lib");
- for(BuildInfo::PathList::iterator i=export_binfo.incpath.begin(); i!=export_binfo.incpath.end(); ++i)
- *i = base_path/ *i;
- for(BuildInfo::PathList::iterator i=export_binfo.libpath.begin(); i!=export_binfo.libpath.end(); ++i)
- *i = base_path/ *i;
+ if(has_relative_paths)
+ {
+ for(BuildInfo::PathList::iterator i=export_binfo.incpath.begin(); i!=export_binfo.incpath.end(); ++i)
+ *i = base_path/ *i;
+ for(BuildInfo::PathList::iterator i=export_binfo.libpath.begin(); i!=export_binfo.libpath.end(); ++i)
+ *i = base_path/ *i;
+ }
}
BinaryPackage *BinaryPackage::from_flags(Builder &builder, const string &name, const vector<string> &flags)
DataFile::DerivedObjectLoader<BinaryPackage, Package>(p)
{
add("build_info", &Loader::build_info);
+ add("header", &Loader::header);
}
void BinaryPackage::Loader::build_info()
{
load_sub(obj.export_binfo);
}
+
+void BinaryPackage::Loader::header(const string &h)
+{
+ obj.headers.push_back(h);
+}