From: Thiago Farina Date: Fri, 26 Aug 2011 23:58:28 +0000 (-0300) Subject: Factor out State struct from ninja_jumble.cc into its header/source files. X-Git-Tag: release-120715~306^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3bf1d4b3f0528157caca622595de53e40b2849a0;p=platform%2Fupstream%2Fninja.git Factor out State struct from ninja_jumble.cc into its header/source files. This was a TODO in src/ninja_jumble.cc. Now this task is completed. Signed-off-by: Thiago Farina --- diff --git a/configure.py b/configure.py index c374f6d..8308c6d 100755 --- a/configure.py +++ b/configure.py @@ -131,8 +131,7 @@ if platform not in ('mingw'): n.comment('Core source files all build into ninja library.') for name in ['build', 'build_log', 'clean', 'eval_env', 'graph', 'graphviz', - 'parsers', 'util', 'stat_cache', - 'ninja_jumble', 'disk_interface']: + 'parsers', 'util', 'stat_cache', 'disk_interface', 'state']: objs += cxx(name) if platform == 'mingw': objs += cxx('subprocess-win32') diff --git a/src/browse.cc b/src/browse.cc index d51bb44..bab3f36 100644 --- a/src/browse.cc +++ b/src/browse.cc @@ -15,10 +15,10 @@ #include "browse.h" #include +#include #include #include "../build/browse_py.h" -#include "ninja.h" void RunBrowsePython(State* state, const char* ninja_command, const char* initial_target) { diff --git a/src/build.cc b/src/build.cc index 1c8a4fa..3b7d5b8 100644 --- a/src/build.cc +++ b/src/build.cc @@ -14,6 +14,7 @@ #include "build.h" +#include #include #ifdef _WIN32 @@ -27,7 +28,7 @@ #include "build_log.h" #include "disk_interface.h" #include "graph.h" -#include "ninja.h" +#include "state.h" #include "subprocess.h" #include "util.h" diff --git a/src/build_log.cc b/src/build_log.cc index c3ae1ab..b21a755 100644 --- a/src/build_log.cc +++ b/src/build_log.cc @@ -17,11 +17,11 @@ #include #include #include +#include #include #include "build.h" #include "graph.h" -#include "ninja.h" // Implementation details: // Each run's log appends to the log file. diff --git a/src/clean.cc b/src/clean.cc index 31641d2..16ca5e5 100644 --- a/src/clean.cc +++ b/src/clean.cc @@ -23,7 +23,7 @@ #include "build.h" #include "disk_interface.h" #include "graph.h" -#include "ninja.h" +#include "state.h" #include "util.h" Cleaner::Cleaner(State* state, const BuildConfig& config) diff --git a/src/graph.cc b/src/graph.cc index 5517f17..9b5f10b 100644 --- a/src/graph.cc +++ b/src/graph.cc @@ -14,12 +14,13 @@ #include "graph.h" +#include #include #include "build_log.h" #include "disk_interface.h" -#include "ninja.h" #include "parsers.h" +#include "state.h" #include "util.h" bool FileStat::Stat(DiskInterface* disk_interface) { diff --git a/src/ninja.cc b/src/ninja.cc index 6bf7fbd..8f972f3 100644 --- a/src/ninja.cc +++ b/src/ninja.cc @@ -12,8 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "ninja.h" - #include #include #include @@ -37,11 +35,12 @@ #include "browse.h" #include "build.h" #include "build_log.h" +#include "clean.h" #include "graph.h" #include "graphviz.h" #include "parsers.h" +#include "state.h" #include "util.h" -#include "clean.h" namespace { diff --git a/src/ninja_test.cc b/src/ninja_test.cc index a5ef3ab..2bdd08f 100644 --- a/src/ninja_test.cc +++ b/src/ninja_test.cc @@ -12,8 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "ninja.h" - #ifdef _WIN32 #include #include diff --git a/src/parsers.cc b/src/parsers.cc index 420a6cf..7f587a6 100644 --- a/src/parsers.cc +++ b/src/parsers.cc @@ -20,7 +20,7 @@ #include #include "graph.h" -#include "ninja.h" +#include "state.h" #include "util.h" string Token::AsString() const { diff --git a/src/parsers_test.cc b/src/parsers_test.cc index b5d253f..1ac5990 100644 --- a/src/parsers_test.cc +++ b/src/parsers_test.cc @@ -17,7 +17,7 @@ #include #include "graph.h" -#include "ninja.h" +#include "state.h" struct ParserTest : public testing::Test, public ManifestParser::FileReader { diff --git a/src/ninja_jumble.cc b/src/state.cc similarity index 92% rename from src/ninja_jumble.cc rename to src/state.cc index faea156..e1fe675 100644 --- a/src/ninja_jumble.cc +++ b/src/state.cc @@ -12,17 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -// This file is all the code that used to be in one file. -// TODO: split into modules, delete this file. +#include "state.h" -#include "ninja.h" +#include -#include -#include -#include -#include - -#include "build_log.h" #include "graph.h" #include "util.h" @@ -32,6 +25,11 @@ State::State() : build_log_(NULL) { AddRule(&kPhonyRule); } +void State::AddRule(const Rule* rule) { + assert(LookupRule(rule->name_) == NULL); + rules_[rule->name_] = rule; +} + const Rule* State::LookupRule(const string& rule_name) { map::iterator i = rules_.find(rule_name); if (i == rules_.end()) @@ -39,11 +37,6 @@ const Rule* State::LookupRule(const string& rule_name) { return i->second; } -void State::AddRule(const Rule* rule) { - assert(LookupRule(rule->name_) == NULL); - rules_[rule->name_] = rule; -} - Edge* State::AddEdge(const Rule* rule) { Edge* edge = new Edge(); edge->rule_ = rule; @@ -52,17 +45,17 @@ Edge* State::AddEdge(const Rule* rule) { return edge; } -Node* State::LookupNode(const string& path) { +Node* State::GetNode(const string& path) { FileStat* file = stat_cache_.GetFile(path); if (!file->node_) - return NULL; + file->node_ = new Node(file); return file->node_; } -Node* State::GetNode(const string& path) { +Node* State::LookupNode(const string& path) { FileStat* file = stat_cache_.GetFile(path); if (!file->node_) - file->node_ = new Node(file); + return NULL; return file->node_; } @@ -87,7 +80,7 @@ bool State::AddDefault(const string& path, string* err) { if (!node) { *err = "unknown target '" + path + "'"; return false; - } + } defaults_.push_back(node); return true; } diff --git a/src/ninja.h b/src/state.h similarity index 91% rename from src/ninja.h rename to src/state.h index 448a060..ceb7c05 100644 --- a/src/ninja.h +++ b/src/state.h @@ -12,14 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef NINJA_NINJA_H_ -#define NINJA_NINJA_H_ +#ifndef NINJA_STATE_H_ +#define NINJA_STATE_H_ +#pragma once -#include - -#include -#include -#include +#include #include #include @@ -28,16 +25,16 @@ using namespace std; +struct BuildLog; struct Edge; -struct FileStat; struct Node; struct Rule; /// Global state (file status, loaded rules) for a single run. struct State { - State(); + static const Rule kPhonyRule; - StatCache* stat_cache() { return &stat_cache_; } + State(); void AddRule(const Rule* rule); const Rule* LookupRule(const string& rule_name); @@ -47,21 +44,25 @@ struct State { void AddIn(Edge* edge, const string& path); void AddOut(Edge* edge, const string& path); bool AddDefault(const string& path, string* error); + /// @return the root node(s) of the graph. (Root nodes have no output edges). /// @param error where to write the error message if somethings went wrong. vector RootNodes(string* error); vector DefaultNodes(string* error); + StatCache* stat_cache() { return &stat_cache_; } + StatCache stat_cache_; + /// All the rules used in the graph. map rules_; + /// All the edges of the graph. vector edges_; + BindingEnv bindings_; vector defaults_; struct BuildLog* build_log_; - - static const Rule kPhonyRule; }; -#endif // NINJA_NINJA_H_ +#endif // NINJA_STATE_H_ diff --git a/src/test.h b/src/test.h index 3436ef1..c27e051 100644 --- a/src/test.h +++ b/src/test.h @@ -18,7 +18,7 @@ #include #include "disk_interface.h" -#include "ninja.h" +#include "state.h" // Support utilites for tests.