diff options
Diffstat (limited to 'build/context.cxx')
-rw-r--r-- | build/context.cxx | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/build/context.cxx b/build/context.cxx index ce80324..fc4ec1c 100644 --- a/build/context.cxx +++ b/build/context.cxx @@ -2,6 +2,8 @@ // copyright : Copyright (c) 2014-2015 Code Synthesis Tools CC // license : MIT; see accompanying LICENSE file +#include <ostream> + #include <build/context> using namespace std; @@ -16,4 +18,38 @@ namespace build path src_base; path out_base; + + path + translate (const path& p) + { + if (p.sub (work)) + return p.leaf (work); + + // If work is a sub-path of {src,out}_root and this path is also a + // sub-bath of it, then use '..' to form a relative path. + // + if (work.sub (src_root) && p.sub (src_root) || + work.sub (out_root) && p.sub (out_root)) // @@ cache + return p.relative (work); + + return p; + } + + std::string + diagnostic_string (const path& p) + { + if (p.absolute ()) + { + path rp (translate (p)); + +#ifndef _WIN32 + if (rp.absolute () && rp.sub (home)) + return "~/" + rp.leaf (home).string (); +#endif + + return rp.string (); + } + + return p.string (); + } } |