aboutsummaryrefslogtreecommitdiff
path: root/build2/install/rule.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-08-18 15:03:42 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-08-18 15:03:42 +0200
commitca55c178784779e13245ae2e8760d5ff7c7a4a9f (patch)
tree6ea0eccc472dfe80a771c073a89ca88830d2fce8 /build2/install/rule.cxx
parent10af8b3e73ef64c4065acb0f016ce77f55815bc1 (diff)
Add global config.install.{cmd,options,sudo,mode,dir_mode}
This way we can do: b install \ config.install.data_root=/tmp/data \ config.install.exec_root=/tmp/exec \ config.install.sudo=sudo
Diffstat (limited to 'build2/install/rule.cxx')
-rw-r--r--build2/install/rule.cxx25
1 files changed, 19 insertions, 6 deletions
diff --git a/build2/install/rule.cxx b/build2/install/rule.cxx
index 39741bd..ac2fc8f 100644
--- a/build2/install/rule.cxx
+++ b/build2/install/rule.cxx
@@ -395,12 +395,12 @@ namespace build2
info << "did you forget to specify config." << var << "?";
}
+ scope& s (t.base_scope ());
+
// Override components in install_dir if we have our own.
//
if (var != nullptr)
{
- scope& s (t.base_scope ());
-
if (auto l = s[*var + ".sudo"]) r.sudo = cast<string> (l);
if (auto l = s[*var + ".cmd"]) r.cmd = cast<path> (l);
if (auto l = s[*var + ".mode"]) r.mode = cast<string> (l);
@@ -429,11 +429,24 @@ namespace build2
}
}
- // Set defaults for unspecified components.
+ // Set globals for unspecified components.
//
- if (r.cmd.empty ()) r.cmd = path ("install");
- if (r.mode.empty ()) r.mode = "644";
- if (r.dir_mode.empty ()) r.dir_mode = "755";
+ if (r.sudo.empty ())
+ if (auto l = s["config.install.sudo"])
+ r.sudo = cast<string> (l);
+
+ if (r.cmd.empty ())
+ r.cmd = cast<path> (s["config.install.cmd"]);
+
+ if (r.options.empty ())
+ if (auto l = s["config.install.options"])
+ r.options = cast<strings> (l);
+
+ if (r.mode.empty ())
+ r.mode = cast<string> (s["config.install.mode"]);
+
+ if (r.dir_mode.empty ())
+ r.dir_mode = cast<string> (s["config.install.dir_mode"]);
// If the directory still doesn't exist, then this means it was
// specified as absolute (it will normally be install.root with