X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ftool.h;h=41b8c5f24dd92387ae4bf454653c3984d34694b5;hb=266697cea92aed098fff31c1ddd4a4bfab3a683f;hp=ad89e47431b3b47eee53c8d7a747ef98cce2707c;hpb=c51411c4b3ed4e6a0d8343b848db3dc736bc7857;p=builder.git diff --git a/source/tool.h b/source/tool.h index ad89e47..41b8c5f 100644 --- a/source/tool.h +++ b/source/tool.h @@ -21,6 +21,13 @@ Examples include compilers and linkers. class Tool { public: + enum ProcessingUnit + { + ONE_FILE, + DIRECTORY, + COMPONENT + }; + typedef std::list SearchPath; typedef std::list SuffixList; @@ -32,6 +39,7 @@ protected: FileTarget *executable; SuffixList input_suffixes; SuffixList aux_suffixes; + ProcessingUnit processing_unit; SearchPath system_path; BuildInfo build_info; bool prepared; @@ -70,6 +78,9 @@ public: auxiliary suffixes are considered as well */ bool accepts_suffix(const std::string &, bool aux = false) const; + /** Returns the grouping unit this tool prefers to process. */ + ProcessingUnit get_processing_unit() const { return processing_unit; } + /// Returns the systemwide search path for source files. const SearchPath &get_system_path() const { return system_path; } @@ -123,6 +134,16 @@ protected: Tool &parent; SubTool(Tool &); + +public: + virtual Target *create_source(const Component &, const Msp::FS::Path &) const; + virtual Target *create_source(const Msp::FS::Path &) const; + virtual Target *create_target(const std::list &, const std::string & = std::string()); + virtual Target *create_install(Target &) const; + virtual std::string create_build_signature(const BuildInfo &) const; }; + +void operator>>(const Msp::LexicalConverter &, Tool::ProcessingUnit &); + #endif