X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ftool.cpp;h=8aa75dcafd982646980871b59ff74c796d5a00ca;hb=0d95fee118a3fcd78f153dca5721d9fe19b6f6bf;hp=5556cb346e7c1efeeee808aa275818545f185518;hpb=dceec8d95c63aaf4d8d4b367c9846caf9e32a6bf;p=builder.git diff --git a/source/tool.cpp b/source/tool.cpp index 5556cb3..8aa75dc 100644 --- a/source/tool.cpp +++ b/source/tool.cpp @@ -1,11 +1,26 @@ #include +#include +#include "architecture.h" +#include "builder.h" #include "tool.h" using namespace std; +using namespace Msp; Tool::Tool(Builder &b, const string &t): builder(b), - tag(t) + architecture(0), + tag(t), + executable(0), + prepared(false) +{ } + +Tool::Tool(Builder &b, const Architecture &a, const string &t): + builder(b), + architecture(&a), + tag(t), + executable(0), + prepared(false) { } bool Tool::accepts_suffix(const string &suffix, bool aux) const @@ -18,9 +33,34 @@ bool Tool::accepts_suffix(const string &suffix, bool aux) const return false; } -Target *Tool::create_target(Target &source, const string &arg) const +Target *Tool::create_target(Target &source, const string &arg) { list sources; sources.push_back(&source); return create_target(sources, arg); } + +void Tool::prepare() +{ + if(prepared) + return; + + prepared = true; + do_prepare(); +} + +void Tool::set_executable(const string &command, bool cross) +{ + if(cross && architecture->is_cross()) + return set_executable(format("%s-%s", architecture->get_cross_prefix(), command), false); + + executable = builder.get_vfs().find_binary(command); + if(!executable) + problems.push_back(format("Can't find executable %s", command)); +} + + +SubTool::SubTool(Tool &p): + Tool(p), + parent(p) +{ }