X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=plugins%2Fmsvc%2Fmsvclinker.cpp;h=8f0ac94e11dbe0e8464b8cef171b07d9111bd5fe;hb=6ce67e1469bf62156ddf64e33644851f9064c6ed;hp=d768b236cbb5d7dd7b80812af8776ed0688295e4;hpb=34c5818e80579cb1c483b5020be0b7d5291aae0b;p=builder.git diff --git a/plugins/msvc/msvclinker.cpp b/plugins/msvc/msvclinker.cpp index d768b23..8f0ac94 100644 --- a/plugins/msvc/msvclinker.cpp +++ b/plugins/msvc/msvclinker.cpp @@ -34,6 +34,20 @@ Target *MsvcLinker::create_target(const vector &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(*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 objs; objs.reserve(sources.size()); for(Target *s: sources) @@ -42,34 +56,13 @@ Target *MsvcLinker::create_target(const vector &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(&target)) - { - Tool © = builder.get_toolchain().get_tool("CP"); - InstalledFile *inst_tgt = dynamic_cast(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); @@ -145,6 +138,8 @@ ExternalTask::Arguments MsvcLinker::_run(const Binary &bin, FS::Path &work_dir) else argv.push_back("/NOIMPLIB"); + argv.push_back("/NOEXP"); + for(Target *d: bin.get_dependencies()) { FileTarget *file = dynamic_cast(d);