diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2016-12-05 15:57:49 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2016-12-05 15:57:49 +0200 |
commit | 8c7987abed3acd873613327cb40facbfec2997f4 (patch) | |
tree | f9a32ffb176f76defaa913093f0b20c4ec1956e3 /build2 | |
parent | 54870fb76b5f59cc2e6d69a8c7a8ef17853a0029 (diff) |
Add optional actualize argument to $path.normalize()
Diffstat (limited to 'build2')
-rw-r--r-- | build2/functions-path.cxx | 55 |
1 files changed, 46 insertions, 9 deletions
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<value> a) + { + p.normalize (a && convert<bool> (move (*a))); + return p; + }; + + f["normalize"] = [](dir_path p, optional<value> a) + { + p.normalize (a && convert<bool> (move (*a))); + return p; + }; + + f["normalize"] = [](paths v, optional<value> a) + { + bool act (a && convert<bool> (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<value> a) { + bool act (a && convert<bool> (move (*a))); + + for (auto& p: v) + p.normalize (act); + return v; + }; + + f[".normalize"] = [](names ns, optional<value> a) + { + bool act (a && convert<bool> (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<path> (move (n)).normalize ().string (); + n.value = convert<path> (move (n)).normalize (act).string (); } return ns; }; |