// file : build/rule -*- C++ -*- // copyright : Copyright (c) 2014-2015 Code Synthesis Tools CC // license : MIT; see accompanying LICENSE file #ifndef BUILD_RULE #define BUILD_RULE #include #include #include // reference_wrapper #include #include #include namespace build { class rule { public: virtual void* match (target&, const std::string& hint) const = 0; virtual recipe apply (target&, void*) const = 0; }; typedef std::unordered_map< std::type_index, prefix_multimap, '.'>> rule_map; extern rule_map rules; // Fallback rule that check that the path exists. // class path_rule: public rule { public: virtual void* match (target&, const std::string& hint) const; virtual recipe apply (target&, void*) const; static target_state update (target&); }; class dir_rule: public rule { public: virtual void* match (target&, const std::string& hint) const; virtual recipe apply (target&, void*) const; static target_state update (target&); }; } #endif // BUILD_RULE