From c0c85b67516653c181fbce7c61c2df3e31e4edd8 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 18 Dec 2014 07:14:53 +0200 Subject: Initial support for loading dependency info from buildfiles Also a new iteration on the overall architecture. Now, for the first time, build can read the buildfile and build itself. g++-4.9 -std=c++14 -g -I.. -o bd bd.cxx algorithm.cxx scope.cxx parser.cxx lexer.cxx target.cxx prerequisite.cxx rule.cxx native.cxx cxx/target.cxx cxx/rule.cxx process.cxx timestamp.cxx path.cxx g++-4.9 -std=c++14 -g -I../../.. -o driver driver.cxx ../../../build/lexer.cxx g++-4.9 -std=c++14 -g -I../../.. -o driver driver.cxx ../../../build/lexer.cxx ../../../build/parser.cxx ../../../build/scope.cxx ../../../build/target.cxx ../../../build/native.cxx ../../../build/prerequisite.cxx ../../../build/path.cxx ../../../build/timestamp.cxx --- build/scope | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 build/scope (limited to 'build/scope') diff --git a/build/scope b/build/scope new file mode 100644 index 0000000..760fc03 --- /dev/null +++ b/build/scope @@ -0,0 +1,59 @@ +// file : build/scope -*- C++ -*- +// copyright : Copyright (c) 2014-2015 Code Synthesis Tools CC +// license : MIT; see accompanying LICENSE file + +#ifndef BUILD_SCOPE +#define BUILD_SCOPE + +#include + +#include +#include + +namespace build +{ + class scope + { + public: + typedef build::path path_type; + + const path_type& + path () const {return i_->first;} // Absolute and normalized. + + private: + friend class scope_map; + + typedef std::map::const_iterator iterator; + + scope () = default; + + void + init (const iterator& i) {i_ = i;} + + public: + prerequisite_set prerequisites; + + private: + iterator i_; + }; + + class scope_map: std::map + { + public: + scope& + operator[] (const path& k) + { + auto i (emplace (k, scope ())); + auto& r (i.first->second); + + if (i.second) + r.init (i.first); + + return r; + } + }; + + extern scope_map scopes; +} + +#endif // BUILD_SCOPE -- cgit v1.1