aboutsummaryrefslogtreecommitdiff
path: root/libbuild2
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2020-12-05 14:16:26 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2020-12-08 14:26:22 +0300
commita56c7a5d4e707e51fea407d44bd751426bfdc8f5 (patch)
tree3bacfbd63e89830f9d67f3ecf1aa5d124de36656 /libbuild2
parentd38dbf711c9532eea99607368278a8396b3db667 (diff)
Redo $normalize(true) as separate $actualize()
Diffstat (limited to 'libbuild2')
-rw-r--r--libbuild2/functions-path.cxx75
1 files changed, 49 insertions, 26 deletions
diff --git a/libbuild2/functions-path.cxx b/libbuild2/functions-path.cxx
index fdf712c..b0acc63 100644
--- a/libbuild2/functions-path.cxx
+++ b/libbuild2/functions-path.cxx
@@ -221,43 +221,66 @@ namespace build2
// normalize
//
- // @@ TODO: normalize(true) is not pure, redo as a separate actualize()
- // function.
- //
- f["normalize"] += [](path p, optional<value> a)
- {
- p.normalize (a && convert<bool> (move (*a)));
- return p;
- };
+ f["normalize"] += [](path p) {p.normalize (); return p;};
+ f["normalize"] += [](dir_path p) {p.normalize (); return p;};
- f["normalize"] += [](dir_path p, optional<value> a)
+ f["normalize"] += [](paths v)
{
- p.normalize (a && convert<bool> (move (*a)));
- return p;
+ for (auto& p: v)
+ p.normalize ();
+ return v;
};
- f["normalize"] += [](paths v, optional<value> a)
+ f["normalize"] += [](dir_paths v)
{
- bool act (a && convert<bool> (move (*a)));
-
for (auto& p: v)
- p.normalize (act);
-
+ p.normalize ();
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)
+ {
+ // 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.
+ //
+ for (name& n: ns)
+ {
+ if (n.directory ())
+ n.dir.normalize ();
+ else
+ n.value = convert<path> (move (n)).normalize ().string ();
+ }
+ return ns;
};
- f[".normalize"] += [](names ns, optional<value> a)
+ // actualize
+ //
+ // Note that this function is not pure.
+ //
{
- bool act (a && convert<bool> (move (*a)));
+ auto e (f.insert ("actualize", false));
+
+ e += [](path p) {p.normalize (true); return p;};
+ e += [](dir_path p) {p.normalize (true); return p;};
+ e += [](paths v)
+ {
+ for (auto& p: v)
+ p.normalize (true);
+ return v;
+ };
+
+ e += [](dir_paths v)
+ {
+ for (auto& p: v)
+ p.normalize (true);
+ return v;
+ };
+ }
+
+ f.insert (".actualize", false) += [](names ns)
+ {
// 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.
@@ -265,9 +288,9 @@ namespace build2
for (name& n: ns)
{
if (n.directory ())
- n.dir.normalize (act);
+ n.dir.normalize (true);
else
- n.value = convert<path> (move (n)).normalize (act).string ();
+ n.value = convert<path> (move (n)).normalize (true).string ();
}
return ns;
};