]> git.tdb.fi Git - builder.git/blobdiff - source/tool.h
Adjust build signatures to contain the tool tag
[builder.git] / source / tool.h
index 7531bbf86b945e82638ea0044a106001b4a45931..c49b4c473257b0ff06f8e2e07cca2a4fbc444b54 100644 (file)
@@ -4,6 +4,8 @@
 #include <list>
 #include <string>
 #include <msp/fs/path.h>
+#include "buildinfo.h"
+#include "virtualfilesystem.h"
 
 class Architecture;
 class Builder;
@@ -20,8 +22,12 @@ Examples include compilers and linkers.
 class Tool
 {
 public:
-       typedef std::list<Msp::FS::Path> SearchPath;
-       typedef std::list<std::string> SuffixList;
+       enum ProcessingUnit
+       {
+               ONE_FILE,
+               DIRECTORY,
+               COMPONENT
+       };
 
 protected:
        Builder &builder;
@@ -29,9 +35,11 @@ protected:
        std::string tag;
        std::string command;
        FileTarget *executable;
-       SuffixList input_suffixes;
-       SuffixList aux_suffixes;
-       SearchPath system_path;
+       std::list<std::string> input_suffixes;
+       std::list<std::string> aux_suffixes;
+       ProcessingUnit processing_unit;
+       VirtualFileSystem::SearchPath system_path;
+       BuildInfo build_info;
        bool prepared;
        std::list<std::string> problems;
 
@@ -58,18 +66,25 @@ public:
        FileTarget *get_executable() const { return executable; }
 
        /// Returns a list of suffixes that can be processed with this tool.
-       const SuffixList &get_input_suffixes() const { return input_suffixes; }
+       const std::list<std::string> &get_input_suffixes() const { return input_suffixes; }
 
        /** Returns a list of suffixes that are associated with this tool, but can't
        be processed directly.  For example C and C++ headers. */
-       const SuffixList &get_auxiliary_suffixes() const { return aux_suffixes; }
+       const std::list<std::string> &get_auxiliary_suffixes() const { return aux_suffixes; }
 
        /** Indicates whether the tool can accept a suffix.  If aux is true,
        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; }
+       const VirtualFileSystem::SearchPath &get_system_path() const { return system_path; }
+
+       /** Returns tool-specific build info.  This can be used by other tools down
+       the chain. */
+       const BuildInfo &get_build_info() const { return build_info; }
 
        /// Creates a source file appropriate for this tool.
        virtual Target *create_source(const Component &, const Msp::FS::Path &) const { return 0; }
@@ -91,7 +106,7 @@ public:
        null if the tool does not want to handle installing in a special way. */
        virtual Target *create_install(Target &) const { return 0; }
 
-       virtual std::string create_build_signature(const BuildInfo &) const { return std::string(); }
+       virtual std::string create_build_signature(const BuildInfo &) const;
 
        void prepare();
 
@@ -117,6 +132,16 @@ protected:
        Tool &parent;
 
        SubTool(Tool &);
+
+public:
+       Target *create_source(const Component &, const Msp::FS::Path &) const override;
+       Target *create_source(const Msp::FS::Path &) const override;
+       Target *create_target(const std::list<Target *> &, const std::string & = std::string()) override;
+       Target *create_install(Target &) const override;
+       std::string create_build_signature(const BuildInfo &) const override;
 };
 
+
+void operator>>(const Msp::LexicalConverter &, Tool::ProcessingUnit &);
+
 #endif