]> git.tdb.fi Git - builder.git/blobdiff - source/gnulinker.cpp
More flexible way to manage filename patterns
[builder.git] / source / gnulinker.cpp
index a132acecf5b9f0f85bb1220c2edb08098f0a4829..2d37a4d93533b4486d865a043f691f3725ff4aa5 100644 (file)
@@ -85,8 +85,7 @@ Target *GnuLinker::create_install(Target &target) const
                        builder.get_build_graph().add_installed_target(*shlib->get_import_library());
                else
                {
-                       const Pattern &pattern = architecture->get_shared_library_patterns().front();
-                       string link_name = pattern.apply(shlib->get_libname());
+                       string link_name = architecture->create_filename<SharedLibrary>(shlib->get_libname());
                        if(link_name!=FS::basename(inst_tgt->get_path()))
                                inst_tgt->set_symlink(link_name);
                }
@@ -300,9 +299,6 @@ Task *GnuLinker::Linker::run(const Target &target) const
 
        bool static_link_ok = (binfo.libmode<=BuildInfo::STATIC);
 
-       if(architecture->get_system()=="windows" && architecture->get_cross_prefix().find("mingw")!=string::npos)
-               argv.push_back("-lmingw32");
-
        const Target::Dependencies &depends = target.get_dependencies();
        for(Target::Dependencies::const_iterator i=depends.begin(); i!=depends.end(); ++i)
        {
@@ -338,8 +334,18 @@ Task *GnuLinker::Linker::run(const Target &target) const
 
        if(static_link_ok)
                argv.push_back("-static");
-       else if(architecture->get_system()=="windows")
-               argv.push_back("-Wl,--enable-auto-import");
+       else
+       {
+               if(compiler_tag=="CXX")
+               {
+                       BuildInfo::LibModeMap::const_iterator i = binfo.libmodes.find("stdc++");
+                       if(i!=binfo.libmodes.end() && i->second<=BuildInfo::STATIC)
+                               argv.push_back("-static-libstdc++");
+               }
+
+               if(architecture->get_system()=="windows")
+                       argv.push_back("-Wl,--enable-auto-import");
+       }
 
        return new ExternalTask(argv, work_dir);
 }