X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgnulinker.cpp;h=72c8b07a423a08bacc1e2238fc9354ba70a10230;hb=aa053d637e8259755af7d2e4b510a242f4d29c7b;hp=c592cc86cf1e7bd888eefa753957f5988bea2e0b;hpb=7c2db9e2b91da953701be233336c5bfa1f3c4af0;p=builder.git diff --git a/source/gnulinker.cpp b/source/gnulinker.cpp index c592cc8..72c8b07 100644 --- a/source/gnulinker.cpp +++ b/source/gnulinker.cpp @@ -39,22 +39,19 @@ GnuLinker::~GnuLinker() delete cxx_linker; } -Target *GnuLinker::create_target(const list &sources, const string &arg) +Target *GnuLinker::create_target(const vector &sources, const string &arg) { if(sources.empty()) throw invalid_argument("GnuLinker::create_target"); - list objs; + vector objs; + objs.reserve(sources.size()); Linker *linker = default_linker; for(Target *s: sources) { - if(ObjectFile *obj = dynamic_cast(s)) - { - objs.push_back(obj); - if(obj->get_tool()->get_tag()=="CXX") - linker = cxx_linker; - } - else - throw invalid_argument("GnuLinker::create_target"); + ObjectFile &obj = dynamic_cast(*s); + objs.push_back(&obj); + if(obj.get_tool()->get_tag()=="CXX") + linker = cxx_linker; } const Component &comp = *objs.front()->get_component(); @@ -174,7 +171,7 @@ void GnuLinker::do_prepare() } } else - system_path.push_back("/usr/"+architecture->get_cross_prefix()+"/lib"); + system_path.push_back(format("/usr/%s/lib", architecture->get_cross_prefix())); } } @@ -198,7 +195,7 @@ GnuLinker::Linker::Linker(GnuLinker &p, const string &ct): string GnuLinker::Linker::create_build_signature(const BuildInfo &binfo) const { - string result = FS::basename(executable->get_path()); + string result = Tool::create_build_signature(binfo); result += ','; if(binfo.libmode<=BuildInfo::STATIC) result += 't'; @@ -232,7 +229,7 @@ Task *GnuLinker::Linker::run(const Target &target) const { const Binary &bin = dynamic_cast(target); - vector argv; + ExternalTask::Arguments argv; argv.push_back(executable->get_path().str()); FS::Path work_dir = bin.get_component()->get_package().get_source_directory(); @@ -337,7 +334,7 @@ Task *GnuLinker::Linker::run(const Target &target) const { if(compiler_tag=="CXX") { - BuildInfo::LibModeMap::const_iterator i = binfo.libmodes.find("stdc++"); + auto i = binfo.libmodes.find("stdc++"); if(i!=binfo.libmodes.end() && i->second<=BuildInfo::STATIC) argv.push_back("-static-libstdc++"); }