]> git.tdb.fi Git - builder.git/blobdiff - plugins/msvc/msvclinker.cpp
Explicitly create import libraries from BinaryComponent
[builder.git] / plugins / msvc / msvclinker.cpp
index d768b236cbb5d7dd7b80812af8776ed0688295e4..31f9a4f8189f8ff9be0549edbb88751e7767b72e 100644 (file)
@@ -34,6 +34,20 @@ Target *MsvcLinker::create_target(const vector<Target *> &sources, const string
        if(sources.empty())
                throw invalid_argument("MsvcLinker::create_target");
 
+       if(arg=="import")
+       {
+               if(sources.size()!=1)
+                       throw invalid_argument("MsvcLinker::create_target");
+               SharedLibrary &shlib = dynamic_cast<SharedLibrary &>(*sources.front());
+
+               ImportLibrary *imp = new ImportLibrary(builder, *shlib.get_component(), shlib);
+               for(ObjectFile *o: shlib.get_objects())
+                       imp->add_dependency(*o);
+               shlib.add_side_effect(*imp);
+
+               return imp;
+       }
+
        vector<ObjectFile *> objs;
        objs.reserve(sources.size());
        for(Target *s: sources)
@@ -42,34 +56,13 @@ Target *MsvcLinker::create_target(const vector<Target *> &sources, const string
        const Component &comp = *objs.front()->get_component();
        Binary *bin = 0;
        if(arg=="shared")
-       {
-               SharedLibrary *shlib = new SharedLibrary(builder, comp, objs);
-               bin = shlib;
-               ImportLibrary *imp = new ImportLibrary(builder, comp, *shlib);
-               for(ObjectFile *o: objs)
-                       imp->add_dependency(*o);
-               imp->set_tool(*this);
-               shlib->add_side_effect(*imp);
-       }
+               bin = new SharedLibrary(builder, comp, objs);
        else
                bin = new Executable(builder, comp, objs);
        bin->set_tool(*this);
        return bin;
 }
 
-Target *MsvcLinker::create_install(Target &target) const
-{
-       if(SharedLibrary *shlib = dynamic_cast<SharedLibrary *>(&target))
-       {
-               Tool &copy = builder.get_toolchain().get_tool("CP");
-               InstalledFile *inst_tgt = dynamic_cast<InstalledFile *>(copy.create_target(target));
-               builder.get_build_graph().add_installed_target(*shlib->get_import_library());
-               return inst_tgt;
-       }
-       else
-               return 0;
-}
-
 string MsvcLinker::create_build_signature(const BuildInfo &binfo) const
 {
        string result = Tool::create_build_signature(binfo);