From 8c7987abed3acd873613327cb40facbfec2997f4 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 5 Dec 2016 15:57:49 +0200 Subject: Add optional actualize argument to $path.normalize() --- build2/functions-path.cxx | 55 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 9 deletions(-) (limited to 'build2/functions-path.cxx') diff --git a/build2/functions-path.cxx b/build2/functions-path.cxx index 243f0d7..fe6b421 100644 --- a/build2/functions-path.cxx +++ b/build2/functions-path.cxx @@ -98,8 +98,19 @@ namespace build2 f["canonicalize"] = [](path p) {p.canonicalize (); return p;}; f["canonicalize"] = [](dir_path p) {p.canonicalize (); return p;}; - f["canonicalize"] = [](paths v) {for (auto& p: v) p.canonicalize (); return v;}; - f["canonicalize"] = [](dir_paths v) {for (auto& p: v) p.canonicalize (); return v;}; + f["canonicalize"] = [](paths v) + { + for (auto& p: v) + p.canonicalize (); + return v; + }; + + f["canonicalize"] = [](dir_paths v) + { + for (auto& p: v) + p.canonicalize (); + return v; + }; f[".canonicalize"] = [](names ns) { @@ -119,14 +130,40 @@ namespace build2 // normalize // - f["normalize"] = [](path p) {p.normalize (); return p;}; - f["normalize"] = [](dir_path p) {p.normalize (); return p;}; + f["normalize"] = [](path p, optional a) + { + p.normalize (a && convert (move (*a))); + return p; + }; + + f["normalize"] = [](dir_path p, optional a) + { + p.normalize (a && convert (move (*a))); + return p; + }; + + f["normalize"] = [](paths v, optional a) + { + bool act (a && convert (move (*a))); - f["normalize"] = [](paths v) {for (auto& p: v) p.normalize (); return v;}; - f["normalize"] = [](dir_paths v) {for (auto& p: v) p.normalize (); return v;}; + for (auto& p: v) + p.normalize (act); - f[".normalize"] = [](names ns) + return v; + }; + f["normalize"] = [](dir_paths v, optional a) { + bool act (a && convert (move (*a))); + + for (auto& p: v) + p.normalize (act); + return v; + }; + + f[".normalize"] = [](names ns, optional a) + { + bool act (a && convert (move (*a))); + // For each path decide based on the presence of a trailing slash // whether it is a directory. Return as untyped list of (potentially // mixed) paths. @@ -134,9 +171,9 @@ namespace build2 for (name& n: ns) { if (n.directory ()) - n.dir.normalize (); + n.dir.normalize (act); else - n.value = convert (move (n)).normalize ().string (); + n.value = convert (move (n)).normalize (act).string (); } return ns; }; -- cgit v1.1