// file : build2/context.txx -*- C++ -*- // copyright : Copyright (c) 2014-2016 Code Synthesis Ltd // license : MIT; see accompanying LICENSE file namespace build2 { template basic_path relative (const basic_path& p) { typedef basic_path path; const dir_path& b (*relative_base); if (p.simple () || b.empty ()) return p; if (p.sub (b)) return p.leaf (b); // If base is a sub-path of {src,out}_root and this path is also a // sub-path of it, then use '..' to form a relative path. // // Don't think this is a good heuristic. For example, why shouldn't // we display paths from imported projects as relative if they are // more readable than absolute? // /* if ((work.sub (src_root) && p.sub (src_root)) || (work.sub (out_root) && p.sub (out_root))) return p.relative (work); */ if (p.root_directory () == b.root_directory ()) { path r (p.relative (b)); if (r.string ().size () < p.string ().size ()) return r; } return p; } }