From 440ebdc157e35568abcd98b7c983d4ea9313d75f Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sat, 12 Dec 2015 14:19:13 +0200 Subject: Implement sudo support in install module --- build/install/rule.cxx | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'build/install/rule.cxx') diff --git a/build/install/rule.cxx b/build/install/rule.cxx index 3f8c16a..eb48bbe 100644 --- a/build/install/rule.cxx +++ b/build/install/rule.cxx @@ -213,6 +213,7 @@ namespace build struct install_dir { dir_path dir; + string sudo; string cmd; //@@ VAR type const_strings_value options {nullptr}; string mode; @@ -226,7 +227,13 @@ namespace build { path reld (relative (d)); - cstrings args {base.cmd.c_str (), "-d"}; + cstrings args; + + if (!base.sudo.empty ()) + args.push_back (base.sudo.c_str ()); + + args.push_back (base.cmd.c_str ()); + args.push_back ("-d"); if (base.options.d != nullptr) //@@ VAR config::append_options (args, base.options); @@ -267,7 +274,12 @@ namespace build path reld (relative (base.dir)); path relf (relative (t.path ())); - cstrings args {base.cmd.c_str ()}; + cstrings args; + + if (!base.sudo.empty ()) + args.push_back (base.sudo.c_str ()); + + args.push_back (base.cmd.c_str ()); if (base.options.d != nullptr) //@@ VAR config::append_options (args, base.options); @@ -347,10 +359,11 @@ namespace build // if (var != nullptr) { - if (auto l = s[*var + ".cmd"]) r.cmd = as (*l); - if (auto l = s[*var + ".mode"]) r.mode = as (*l); + if (auto l = s[*var + ".sudo"]) r.sudo = as (*l); + if (auto l = s[*var + ".cmd"]) r.cmd = as (*l); + if (auto l = s[*var + ".mode"]) r.mode = as (*l); if (auto l = s[*var + ".dir_mode"]) r.dir_mode = as (*l); - if (auto l = s[*var + ".options"]) r.options = as (*l); + if (auto l = s[*var + ".options"]) r.options = as (*l); } // Set defaults for unspecified components. -- cgit v1.1