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)
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 © = 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);
else
argv.push_back("/NOIMPLIB");
+ argv.push_back("/NOEXP");
+
for(Target *d: bin.get_dependencies())
{
FileTarget *file = dynamic_cast<FileTarget *>(d);