// file : build/context -*- C++ -*- // copyright : Copyright (c) 2014-2015 Code Synthesis Tools CC // license : MIT; see accompanying LICENSE file #ifndef BUILD_CONTEXT #define BUILD_CONTEXT #include #include #include #include #include #include namespace build { class scope; class file; extern path work; extern path home; // Current action (meta/operation). // extern execution_mode current_mode; extern const target_rule_map* current_rules; // Reset the dependency state. In particular, this removes all the // targets, scopes, and variable names. // void reset (); // Create the directory and print the standard diagnostics. Note that // this implementation is not suitable if it is expected that the // directory will exist in the majority of case and performance is // important. See the fsdir{} rule for details. // mkdir_status mkdir (const path&); // Remove the file and print the standard diagnostics. The second // argument is only used in diagnostics, to print the target name. // Passing the path for target will result in the relative path // being printed. // template rmfile_status rmfile (const path&, const T& target); inline rmfile_status rmfile (const path& f) {return rmfile (f, f);} // Similar to rmfile() but for directories. // template rmdir_status rmdir (const path&, const T& target); inline rmdir_status rmdir (const path& d) {return rmdir (d, d);} // Return the src/out directory corresponding to the given out/src. The // passed directory should be a sub-directory of out/src_root. // path src_out (const path& out, scope&); path src_out (const path& out, const path& out_root, const path& src_root); path out_src (const path& src, scope&); path out_src (const path& src, const path& out_root, const path& src_root); // If possible and beneficial, translate an absolute, normalized path // into relative to the relative_base directory, which is normally // work. // path relative (const path&); // By default this points to work. Setting this to something else // should only be done in tightly controlled, non-parallel // situations (see dump). If base is empty, then relative() // returns the original path. // extern const path* relative_base; } #include #endif // BUILD_CONTEXT