X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fbuilder.cpp;h=7704a9634a0e7b086276086ddac50a236a3fc9d8;hb=dad4c41302de525a1456e9d5b738831487c8acac;hp=c8091ffd822eb2de8bf28b3a70551641ecd280e1;hpb=0458300fda4f345f865a7f3ee4fc0f2020a91983;p=builder.git diff --git a/source/builder.cpp b/source/builder.cpp index c8091ff..7704a96 100644 --- a/source/builder.cpp +++ b/source/builder.cpp @@ -1,10 +1,3 @@ -/* $Id$ - -This file is part of builder -Copyright © 2006-2010 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - #include #include #include @@ -377,13 +370,20 @@ Package *Builder::get_package(const string &name) Target *Builder::get_target(const string &n) const { - // XXX Used for getting targets by path. get_target(const FS::Path &)? TargetMap::const_iterator i = targets.find(n); if(i!=targets.end()) return i->second; return 0; } +FileTarget *Builder::get_target_by_path(const FS::Path &p) const +{ + TargetMap::const_iterator i = targets_by_path.find(p.str()); + if(i!=targets_by_path.end()) + return static_cast(i->second); + return 0; +} + Target *Builder::get_header(const string &include, const FS::Path &from, const list &path) { string hash(8, 0); @@ -461,6 +461,10 @@ Target *Builder::get_library(const string &lib, const list &path, LibMod { syspath.push_back("/lib"); syspath.push_back("/usr/lib"); + if(current_arch->match_name("pc-32-linux")) + syspath.push_back("/usr/lib/i386-linux-gnu"); + else if(current_arch->match_name("pc-64-linux")) + syspath.push_back("/usr/lib/x86_64-linux-gnu"); } else syspath.push_back("/usr/"+current_arch->get_cross_prefix()+"/lib"); @@ -498,16 +502,15 @@ void Builder::problem(const string &p, const string &d) problems.push_back(Problem(p, d)); } -void Builder::add_target(FileTarget *t) +void Builder::add_target(Target *t) { - targets.insert(TargetMap::value_type(t->get_path().str(), t)); + targets.insert(TargetMap::value_type(t->get_name(), t)); new_tgts.push_back(t); } -void Builder::add_target(VirtualTarget *t) +void Builder::register_path(const FS::Path &path, FileTarget *t) { - targets.insert(TargetMap::value_type(t->get_name(), t)); - new_tgts.push_back(t); + targets_by_path.insert(TargetMap::value_type(path.str(), t)); } void Builder::usage(const char *reason, const char *argv0, bool brief) @@ -639,7 +642,7 @@ int Builder::create_targets() // Apply what-ifs for(StringList::iterator i=what_if.begin(); i!=what_if.end(); ++i) { - FileTarget *tgt = dynamic_cast(get_target((cwd/ *i).str())); + FileTarget *tgt = get_target_by_path(cwd/ *i); if(!tgt) { IO::print(IO::cerr, "Unknown what-if target %s\n", *i); @@ -654,7 +657,9 @@ int Builder::create_targets() { Target *tgt = get_target(*i); if(!tgt) - tgt = get_target((cwd/ *i).str()); + tgt = get_target_by_path(*i); + if(!tgt) + tgt = get_target_by_path(cwd/ *i); if(!tgt) { IO::print("I don't know anything about %s\n", *i); @@ -675,7 +680,7 @@ int Builder::create_targets() Target *Builder::get_header(const FS::Path &fn) { - Target *tgt = get_target(fn.str()); + Target *tgt = get_target_by_path(fn); if(tgt) return tgt; if(FS::is_reg(fn)) @@ -711,8 +716,8 @@ Target *Builder::get_library(const string &lib, const FS::Path &path, LibMode mo for(StringList::iterator i=candidates.begin(); i!=candidates.end(); ++i) { - string full = (path/ *i).str(); - Target *tgt = get_target(full); + FS::Path full = path/ *i; + Target *tgt = get_target_by_path(full); if(tgt) { @@ -727,7 +732,7 @@ Target *Builder::get_library(const string &lib, const FS::Path &path, LibMode mo } else if(FS::is_reg(full)) { - tgt = new SystemLibrary(*this, full); + tgt = new SystemLibrary(*this, full.str()); return tgt; } }