// file : build/algorithm -*- C++ -*- // copyright : Copyright (c) 2014-2015 Code Synthesis Ltd // license : MIT; see accompanying LICENSE file #ifndef BUILD_ALGORITHM #define BUILD_ALGORITHM #include #include #include namespace build { class prerequisite; class prerequisite_key; // The default prerequisite search implementation. It first calls the // target-type-specific search function. If that doesn't yeld anything, // it creates a new target. // target& search (prerequisite&); // As above but specify the prerequisite to search as a key. Useful // for searching for target group members where we need to search // for a different target type. // target& search (const prerequisite_key&); // Match a rule to the action/target with ambiguity detection. // void match (action, target&); // The default prerequisite search and match implementation. It calls // search() and then match() for each prerequisite in a loop. If this // target is a member of a group, then it first does this to the group's // prerequisites. // void search_and_match (action, target&); // As above but ignores (does not match) prerequisites that are not // in the same or a subdirectory of dir. // void search_and_match (action, target&, const dir_path& dir); // Inject dependency on the parent directory's fsdir{}, unless it is // the project's out_root (or is outside of any project; say, for // example, an install directory). // void inject_parent_fsdir (action, target&); // Execute the action on target, assuming a rule has been matched // and the recipe for this action has been set. This is the default // executor implementation. // target_state execute (action, target&); // The default prerequisite execute implementation. It calls execute() // on each non-ignored (non-NULL) prerequisite target in a loop. If this // target is a member of a group, then it first does this to the group's // prerequisites. Returns target_state::changed if any of them were // changed and target_state::unchanged otherwise. It treats targets // with postponed execution the same as ignored. Note that this // function can be used as a recipe. // target_state execute_prerequisites (action, target&); // As above but iterates over the prerequisites in reverse. // target_state reverse_execute_prerequisites (action, target&); // A version of the above that also determines whether the action // needs to be executed on the target based on the passed timestamp. // bool execute_prerequisites (action, target&, const timestamp&); // Another version of the above that does two extra things for the // caller: it determines whether the action needs to be executed on // the target based on the passed timestamp and, if so, finds a // prerequisite of the specified type (e.g., a source file). If // there are multiple prerequisites of this type, then the last // is returned. // template T* execute_find_prerequisites (action, target&, const timestamp&); // Return noop_recipe instead of using this function directly. // target_state noop_action (action, target&); // Default action implementation which forwards to the prerequisites. // Use default_recipe instead of using this function directly. // target_state default_action (action, target&); // Standard perform(clean) action implementation for the file target // or derived. // target_state perform_clean (action, target&); } #include #include #endif // BUILD_ALGORITHM