]> git.tdb.fi Git - builder.git/blobdiff - source/binary.cpp
Refactor build graph into its own class
[builder.git] / source / binary.cpp
index d56ab17b0b59020ae30dc2825654d6c186b485b9..05a475d71bb4b02ff82c8333f06cc1c976f6d40e 100644 (file)
@@ -31,8 +31,6 @@ void Binary::find_dependencies()
        if(!component)
                return;
 
-       BuildInfo::LibraryMode libmode = component->get_build_info().libmode;
-
        list<const Component *> queue;
        list<Target *> dep_libs;
        queue.push_back(component);
@@ -44,15 +42,19 @@ void Binary::find_dependencies()
                const BuildInfo &binfo = c->get_build_info();
                for(BuildInfo::WordList::const_iterator i=binfo.libs.begin(); i!=binfo.libs.end(); ++i)
                {
+                       BuildInfo::LibraryMode libmode = component->get_build_info().get_libmode_for(*i);
                        Target *lib = builder.get_vfs().find_library(*i, binfo.libpath, libmode);
                        if(lib)
                        {
-                               dep_libs.push_back(lib);
-
-                               lib = lib->get_real_target();
-                               if(StaticLibrary *stlib = dynamic_cast<StaticLibrary *>(lib))
+                               Target *real = lib->get_real_target();
+                               if(StaticLibrary *stlib = dynamic_cast<StaticLibrary *>(real))
+                               {
+                                       dep_libs.push_back(stlib);
                                        if(stlib->get_component())
                                                queue.push_back(stlib->get_component());
+                               }
+                               else
+                                       dep_libs.push_back(lib);
                        }
                        else
                                builder.problem(package->get_name(), format("Couldn't find library %s for %s", *i, name));