aboutsummaryrefslogtreecommitdiff
path: root/build2/test/script/builtin
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-11-01 14:20:49 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-11-04 09:26:37 +0200
commit89f8e08550d437eedd16f6aa0cc5333a7db75bea (patch)
treed66ef7452c9d0a26dabe71fbacef6ddb84a580ca /build2/test/script/builtin
parent5583ffaa2581858cb7f7f75e28660bc038bcc8ec (diff)
Establish testscript builtins infrastructure
Diffstat (limited to 'build2/test/script/builtin')
-rw-r--r--build2/test/script/builtin45
1 files changed, 45 insertions, 0 deletions
diff --git a/build2/test/script/builtin b/build2/test/script/builtin
new file mode 100644
index 0000000..805e5fd
--- /dev/null
+++ b/build2/test/script/builtin
@@ -0,0 +1,45 @@
+// file : build2/test/script/builtin -*- C++ -*-
+// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd
+// license : MIT; see accompanying LICENSE file
+
+#ifndef BUILD2_TEST_SCRIPT_BUILTIN
+#define BUILD2_TEST_SCRIPT_BUILTIN
+
+#include <build2/types>
+#include <build2/utility>
+
+#include <map>
+
+namespace build2
+{
+ namespace test
+ {
+ namespace script
+ {
+ // Note that unlike argc/argv, our args don't include the program name.
+ //
+ using builtin = int (*) (const strings& args,
+ int in_fd, int out_fd, int err_fd);
+
+ class builtin_map: public std::map<string, builtin>
+ {
+ public:
+ using base = std::map<string, builtin>;
+ using base::base;
+
+ // Return NULL if not a builtin.
+ //
+ builtin
+ find (const string& n) const
+ {
+ auto i (base::find (n));
+ return i != end () ? i->second : nullptr;
+ }
+ };
+
+ extern const builtin_map builtins;
+ }
+ }
+}
+
+#endif // BUILD2_TEST_SCRIPT_BUILTIN