]> git.tdb.fi Git - builder.git/blobdiff - source/binarypackage.cpp
Force shared linking on Android
[builder.git] / source / binarypackage.cpp
index 7e2435a4a6fce6b138d3f319f40069ecf4bafb40..94667c989dede480f3b36afbddb04108f84881cb 100644 (file)
@@ -17,12 +17,14 @@ void BinaryPackage::do_prepare()
        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
@@ -51,6 +53,15 @@ void BinaryPackage::do_prepare()
                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, 0, incpath, system)!=0);
+
                if(all_found)
                {
                        base_path = prefix;
@@ -61,7 +72,8 @@ void BinaryPackage::do_prepare()
 
        if(base_path.empty())
        {
-               builder.problem(name, "Cannot locate files");
+               // TODO report which files were not found
+               problems.push_back("Cannot locate files");
                return;
        }
 
@@ -72,10 +84,13 @@ void BinaryPackage::do_prepare()
        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)
@@ -109,12 +124,18 @@ BinaryPackage *BinaryPackage::from_flags(Builder &builder, const string &name, c
 
 
 BinaryPackage::Loader::Loader(BinaryPackage &p):
-       DataFile::DerivedObjectLoader<BinaryPackage, Package>(p)
+       DataFile::DerivedObjectLoader<BinaryPackage, Package::Loader>(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);
+}