Allow APT options to be specified on the command line
authorMichael Spang <mspang@csclub.uwaterloo.ca>
Mon, 21 Dec 2009 04:38:30 +0000 (23:38 -0500)
committerMichael Spang <mspang@csclub.uwaterloo.ca>
Tue, 22 Dec 2009 03:23:43 +0000 (22:23 -0500)
Signed-off-by: Michael Spang <mspang@csclub.uwaterloo.ca>
inapt.cc

index 3d4055c..bad0782 100644 (file)
--- a/inapt.cc
+++ b/inapt.cc
@@ -371,13 +371,26 @@ static void auto_profiles(std::set<std::string> *defines) {
     defines->insert(uts.nodename);
 }
 
+static void set_option(char *opt) {
+    char *eq = strchr(opt, '=');
+    if (!eq)
+        fatal("invalid syntax for '%s': must be <option>=<value>", opt);
+
+    std::string option (opt, eq - opt);
+    std::string value (eq + 1);
+
+    debug("setting '%s'='%s'", option.c_str(), value.c_str());
+
+    _config->Set(option, value);
+}
+
 int main(int argc, char *argv[]) {
     int opt;
 
     std::set<std::string> defines;
 
     prog = xstrdup(basename(argv[0]));
-    while ((opt = getopt_long(argc, argv, "p:sdg", opts, NULL)) != -1) {
+    while ((opt = getopt_long(argc, argv, "p:o:sdg", opts, NULL)) != -1) {
         switch (opt) {
             case 'p':
                 defines.insert(optarg);
@@ -397,6 +410,9 @@ int main(int argc, char *argv[]) {
             case 'd':
                 debug_enabled = true;
                 break;
+            case 'o':
+                set_option(optarg);
+                break;
             default:
                 fatal("error parsing arguments");
         }