]> git.tdb.fi Git - builder.git/blobdiff - plugins/gnu/gnulinker.cpp
Explicitly create import libraries from BinaryComponent
[builder.git] / plugins / gnu / gnulinker.cpp
index c8e6606d8d540691692c361bc4efd8e3995a463e..3d81fcca6156236a58d9f943dc05136eb1d8ff9b 100644 (file)
@@ -37,6 +37,19 @@ Target *GnuLinker::create_target(const vector<Target *> &sources, const string &
 {
        if(sources.empty())
                throw invalid_argument("GnuLinker::create_target");
+
+       if(arg=="import")
+       {
+               if(sources.size()!=1)
+                       throw invalid_argument("GnuLinker::create_target");
+               SharedLibrary &shlib = dynamic_cast<SharedLibrary &>(*sources.front());
+               if(architecture->get_system()!="windows")
+                       return 0;
+
+               Tool &dlltool = builder.get_toolchain().get_tool("DLL");
+               return dlltool.create_target(shlib);
+       }
+
        vector<ObjectFile *> objs;
        objs.reserve(sources.size());
        for(Target *s: sources)
@@ -45,15 +58,7 @@ Target *GnuLinker::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);
-               if(architecture->get_system()=="windows")
-               {
-                       Tool &dlltool = builder.get_toolchain().get_tool("DLL");
-                       dlltool.create_target(*shlib);
-               }
-               bin = shlib;
-       }
+               bin = new SharedLibrary(builder, comp, objs);
        else
                bin = new Executable(builder, comp, objs);
        bin->set_tool(*this);
@@ -66,9 +71,7 @@ Target *GnuLinker::create_install(Target &target) const
        {
                Tool &copy = builder.get_toolchain().get_tool("CP");
                InstalledFile *inst_tgt = dynamic_cast<InstalledFile *>(copy.create_target(target));
-               if(architecture->get_system()=="windows")
-                       builder.get_build_graph().add_installed_target(*shlib->get_import_library());
-               else
+               if(architecture->get_system()!="windows")
                {
                        string link_name = architecture->create_filename<SharedLibrary>(shlib->get_libname());
                        if(link_name!=FS::basename(inst_tgt->get_path()))