]> git.tdb.fi Git - builder.git/blobdiff - source/msvclinker.cpp
Convert all list containers to vectors
[builder.git] / source / msvclinker.cpp
index 46d89f7194a5565692b0a1c032f0d2a206180cc2..f6d514ba8bbd99a664f7fdb4f8ca753805288e96 100644 (file)
@@ -29,19 +29,15 @@ MsvcLinker::MsvcLinker(Builder &b, const Architecture &a, const MicrosoftTools &
        set_command((ms_tools.get_vc_bin_dir()/"link.exe").str(), false);
 }
 
-Target *MsvcLinker::create_target(const list<Target *> &sources, const string &arg)
+Target *MsvcLinker::create_target(const vector<Target *> &sources, const string &arg)
 {
        if(sources.empty())
                throw invalid_argument("MsvcLinker::create_target");
 
-       list<ObjectFile *> objs;
-       for(list<Target *>::const_iterator i=sources.begin(); i!=sources.end(); ++i)
-       {
-               if(ObjectFile *obj = dynamic_cast<ObjectFile *>(*i))
-                       objs.push_back(obj);
-               else
-                       throw invalid_argument("MsvcLinker::create_target");
-       }
+       vector<ObjectFile *> objs;
+       objs.reserve(sources.size());
+       for(Target *s: sources)
+               objs.push_back(&dynamic_cast<ObjectFile &>(*s));
 
        const Component &comp = *objs.front()->get_component();
        Binary *bin = 0;
@@ -55,7 +51,7 @@ Target *MsvcLinker::create_target(const list<Target *> &sources, const string &a
 
 string MsvcLinker::create_build_signature(const BuildInfo &binfo) const
 {
-       string result = FS::basename(executable->get_path());
+       string result = Tool::create_build_signature(binfo);
        result += ',';
        if(binfo.strip)
                result += 's';
@@ -80,10 +76,10 @@ void MsvcLinker::do_prepare()
        system_path.push_back(win_sdk_dir/"lib"/win_sdk_ver/"um"/arch_dir);
 
        string path;
-       for(SearchPath::const_iterator i=system_path.begin(); i!=system_path.end(); ++i)
+       for(const FS::Path &p: system_path)
        {
-               append(path, ";", i->str());
-               builder.get_logger().log("tools", format("Got %s system path: %s", tag, *i));
+               append(path, ";", p.str());
+               builder.get_logger().log("tools", format("Got %s system path: %s", tag, p));
        }
 
        setenv("LIB", path);
@@ -105,8 +101,8 @@ Task *MsvcLinker::run(const Target &target) const
        BuildInfo binfo;
        target.collect_build_info(binfo);
 
-       /*for(BuildInfo::PathList::const_iterator i=binfo.libpath.begin(); i!=binfo.libpath.end(); ++i)
-               argv.push_back("/LIBPATH:"+i->str());*/
+       /*for(const FS::Path &p: binfo.libpath)
+               argv.push_back("/LIBPATH:"+p.str());*/
        if(binfo.strip)
                argv.push_back("/INCREMENTAL:NO");
        else
@@ -114,11 +110,10 @@ Task *MsvcLinker::run(const Target &target) const
 
        argv.push_back("/OUT:"+relative(bin.get_path(), work_dir).str());
 
-       const Target::Dependencies &depends = target.get_dependencies();
-       for(Target::Dependencies::const_iterator i=depends.begin(); i!=depends.end(); ++i)
+       for(Target *d: target.get_dependencies())
        {
-               FileTarget *file = dynamic_cast<FileTarget *>(*i);
-               Target *tgt = (*i)->get_real_target();
+               FileTarget *file = dynamic_cast<FileTarget *>(d);
+               Target *tgt = d->get_real_target();
 
                if(ObjectFile *obj = dynamic_cast<ObjectFile *>(tgt))
                        argv.push_back(relative(obj->get_path(), work_dir).str());