From ab4421747146aa7995f0cfb1a639c9121c82c915 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 8 Jan 2015 13:27:15 +0200 Subject: Implement tracing support Also use to-relative path translation in diagnostics. --- build/context.cxx | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'build/context.cxx') 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 + #include 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 (); + } } -- cgit v1.1