X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ftool.cpp;h=e2afe79a204ccea8aebda5294c0dc8a0fd3f583e;hb=4e2a160d94ca808cfb511cc2d38e115d989809f2;hp=65a45041286e6a054649461bd65770cccc614d69;hpb=7ed7c30ee0ceb734f17fe0c6d4bc6d37fb2ab5a7;p=builder.git diff --git a/source/tool.cpp b/source/tool.cpp index 65a4504..e2afe79 100644 --- a/source/tool.cpp +++ b/source/tool.cpp @@ -12,6 +12,7 @@ Tool::Tool(Builder &b, const string &t): architecture(0), tag(t), executable(0), + processing_unit(ONE_FILE), prepared(false) { } @@ -20,9 +21,21 @@ Tool::Tool(Builder &b, const Architecture &a, const string &t): architecture(&a), tag(t), executable(0), + processing_unit(ONE_FILE), prepared(false) { } +void Tool::set_command(const string &cmd, bool cross) +{ + if(cmd.empty()) + throw invalid_argument("Tool::set_command"); + + if(cross && architecture->is_cross() && !FS::Path(cmd).is_absolute()) + command = format("%s-%s", architecture->get_cross_prefix(), cmd); + else + command = cmd; +} + bool Tool::accepts_suffix(const string &suffix, bool aux) const { if(find(input_suffixes.begin(), input_suffixes.end(), suffix)!=input_suffixes.end()) @@ -47,16 +60,12 @@ void Tool::prepare() 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) - builder.problem(string(), format("Can't find executable %s for tool %s", command, tag)); + if(!executable && !command.empty()) + { + executable = builder.get_vfs().find_binary(command); + if(!executable) + problems.push_back(format("Can't find executable %s", command)); + } } @@ -64,3 +73,17 @@ SubTool::SubTool(Tool &p): Tool(p), parent(p) { } + + +void operator>>(const LexicalConverter &conv, Tool::ProcessingUnit &unit) +{ + const string &str = conv.get(); + if(str=="FILE") + unit = Tool::ONE_FILE; + else if(str=="DIRECTORY") + unit = Tool::DIRECTORY; + else if(str=="COMPONENT") + unit = Tool::COMPONENT; + else + throw lexical_error(format("conversion of '%s' to ProcessingUnit", str)); +}