]> git.tdb.fi Git - builder.git/blobdiff - source/binary.cpp
Deal with static build flags for binary packages
[builder.git] / source / binary.cpp
index 448292cf051a5899412ba89329888053312276cc..55e517a6190ffbb36075616593b3f71110e152bf 100644 (file)
@@ -61,8 +61,7 @@ void Binary::find_dependencies()
                        static_binfo.keep_symbols.insert(static_binfo.keep_symbols.end(), binfo.keep_symbols.begin(), binfo.keep_symbols.end());
                }
 
-               list<Target *>::iterator insert_pos = j;
-               ++insert_pos;
+               list<Target *> libs_to_process;
                for(BuildInfo::WordList::const_iterator i=binfo.libs.begin(); i!=binfo.libs.end(); ++i)
                {
                        if(i->size()>10 && !i->compare(i->size()-10, 10, ".framework"))
@@ -71,16 +70,27 @@ void Binary::find_dependencies()
                        BuildInfo::LibraryMode libmode = component->get_build_info().get_libmode_for(*i);
                        Target *lib = builder.get_vfs().find_library(*i, binfo.libpath, libmode);
                        if(lib)
-                       {
-                               Target *real = lib->get_real_target();
-                               if(StaticLibrary *stlib = dynamic_cast<StaticLibrary *>(real))
-                                       queue.insert(insert_pos, stlib);
-                               else
-                                       dep_libs.push_back(lib);
-                       }
+                               libs_to_process.push_back(lib);
                        else if(missing_libs.insert(*i).second)
                                problems.push_back(format("Required library %s not found", *i));
                }
+
+               if(tgt!=this)
+               {
+                       const Target::Dependencies &tdeps = tgt->get_transitive_dependencies();
+                       libs_to_process.insert(libs_to_process.end(), tdeps.begin(), tdeps.end());
+               }
+
+               list<Target *>::iterator insert_pos = j;
+               ++insert_pos;
+               for(list<Target *>::const_iterator i=libs_to_process.begin(); i!=libs_to_process.end(); ++i)
+               {
+                       Target *real = (*i)->get_real_target();
+                       if(StaticLibrary *stlib = dynamic_cast<StaticLibrary *>(real))
+                               queue.insert(insert_pos, stlib);
+                       else
+                               dep_libs.push_back(*i);
+               }
        }
 
        queue.pop_front();