aboutsummaryrefslogtreecommitdiff
path: root/build/rule
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2014-12-10 10:20:26 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2014-12-10 10:20:26 +0200
commit5e9eb843f6ccadfb47fa603260783425da9e7805 (patch)
tree3778f76de37f5258a07a8fae0e58a843b8a49f1d /build/rule
parent20e3aedeb7df742c38276fb41cae8f3eb027b6dd (diff)
Add rules
g++-4.9 -std=c++11 -g -I.. -o bd bd.cxx target.cxx native.cxx rule.cxx cxx/rule.cxx cxx/target.cxx process.cxx timestamp.cxx path.cxx
Diffstat (limited to 'build/rule')
-rw-r--r--build/rule39
1 files changed, 39 insertions, 0 deletions
diff --git a/build/rule b/build/rule
new file mode 100644
index 0000000..6bb58fe
--- /dev/null
+++ b/build/rule
@@ -0,0 +1,39 @@
+// file : build/rule -*- C++ -*-
+// copyright : Copyright (c) 2014-2015 Code Synthesis Tools CC
+// license : MIT; see accompanying LICENSE file
+
+#ifndef BUILD_RULE
+#define BUILD_RULE
+
+#include <typeindex>
+#include <functional> // reference_wrapper
+#include <unordered_map>
+
+#include <build/target>
+
+namespace build
+{
+ class rule
+ {
+ public:
+ virtual recipe
+ match (target&) const = 0;
+ };
+
+ typedef std::unordered_multimap<std::type_index,
+ std::reference_wrapper<rule>> rule_map;
+
+ extern rule_map rules;
+
+ class default_path_rule: public rule
+ {
+ public:
+ virtual recipe
+ match (target&) const;
+
+ static target_state
+ update (target&);
+ };
+}
+
+#endif // BUILD_RULE