about summary refs log tree commit diff
path: root/src/libexpr/common-opts.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2007-01-14T12·32+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2007-01-14T12·32+0000
commite418976107ed1581c108c82cd5b3b06c2f4ba9db (patch)
treee4346ab680095c66ecd49610548b18aa10c33a04 /src/libexpr/common-opts.cc
parent4e329f173f738dfc83e58bdb8ad2ced6c452a395 (diff)
* Option --argstr for passing string arguments easily. (NIX-75)
Diffstat (limited to 'src/libexpr/common-opts.cc')
-rw-r--r--src/libexpr/common-opts.cc32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/libexpr/common-opts.cc b/src/libexpr/common-opts.cc
new file mode 100644
index 0000000000..9e3f8f9614
--- /dev/null
+++ b/src/libexpr/common-opts.cc
@@ -0,0 +1,32 @@
+#include "common-opts.hh"
+#include "../libmain/shared.hh"
+#include "util.hh"
+#include "parser.hh"
+
+
+namespace nix {
+
+
+bool parseOptionArg(const string & arg, Strings::iterator & i,
+    const Strings::iterator & argsEnd, EvalState & state,
+    ATermMap & autoArgs)
+{
+    if (arg != "--arg" && arg != "--argstr") return false;
+
+    UsageError error(format("`%1%' requires two arguments") % arg);
+    
+    if (i == argsEnd) throw error;
+    string name = *i++;
+    if (i == argsEnd) throw error;
+    string value = *i++;
+    
+    Expr e = arg == "--arg"
+        ? parseExprFromString(state, value, absPath("."))
+        : makeStr(value);
+    autoArgs.set(toATerm(name), e);
+    
+    return true;
+}
+
+ 
+}