// file : build/prerequisite -*- C++ -*- // copyright : Copyright (c) 2014-2015 Code Synthesis Tools CC // license : MIT; see accompanying LICENSE file #ifndef BUILD_PREREQUISITE #define BUILD_PREREQUISITE #include #include #include #include // move #include #include #include // extension_pool #include namespace build { class scope; class target; class target_type; class prerequisite { public: typedef build::target target_type; typedef build::target_type target_type_type; typedef build::scope scope_type; prerequisite (const target_type_type& t, path d, std::string n, const std::string* e, scope_type& s) : type (t), dir (std::move (d)), name (std::move (n)), ext (e), scope (s), target (0) {} public: const target_type_type& type; const path dir; // Normalized absolute or relative (to scope). const std::string name; const std::string* ext; // NULL if unspecified. scope_type& scope; target_type* target; // NULL if not yet resolved. }; std::ostream& operator<< (std::ostream&, const prerequisite&); bool operator< (const prerequisite&, const prerequisite&); struct prerequisite_set: std::set { std::pair insert (const target_type&, path dir, std::string name, const std::string* ext, scope&, tracer&); }; } #endif // BUILD_PREREQUISITE