diff options
author | Mike Buland <eichlan@xagasoft.com> | 2009-12-21 23:52:22 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2009-12-21 23:52:22 +0000 |
commit | b87c8d2eb4f0c7fb25cee10e8fdb2c8331343f8c (patch) | |
tree | dfd82e31b0da2e48482f00fb3061dfdcd61e7c9d | |
parent | 97c0fcbbef19012f825cba0fc3f16037322ce84c (diff) | |
download | build-b87c8d2eb4f0c7fb25cee10e8fdb2c8331343f8c.tar.gz build-b87c8d2eb4f0c7fb25cee10e8fdb2c8331343f8c.tar.bz2 build-b87c8d2eb4f0c7fb25cee10e8fdb2c8331343f8c.tar.xz build-b87c8d2eb4f0c7fb25cee10e8fdb2c8331343f8c.zip |
Wow, that was aweful. There was a horrible problem with rule generated targets
not getting the variables from the parent target.
Diffstat (limited to '')
-rw-r--r-- | share/autoinclude/general-rules.bld | 1 | ||||
-rw-r--r-- | src/context.cpp | 13 | ||||
-rw-r--r-- | src/functiongetmakedeps.cpp | 5 | ||||
-rw-r--r-- | src/rule.cpp | 5 | ||||
-rw-r--r-- | src/rule.h | 3 | ||||
-rw-r--r-- | src/target.cpp | 1 |
6 files changed, 21 insertions, 7 deletions
diff --git a/share/autoinclude/general-rules.bld b/share/autoinclude/general-rules.bld index 30a4376..95a5e0c 100644 --- a/share/autoinclude/general-rules.bld +++ b/share/autoinclude/general-rules.bld | |||
@@ -79,7 +79,6 @@ rule "cpp" | |||
79 | { | 79 | { |
80 | input "*.cpp"; | 80 | input "*.cpp"; |
81 | output INPUT.cppToObj(); | 81 | output INPUT.cppToObj(); |
82 | // output replace(".cpp", ".o"); | ||
83 | requires getMakeDeps("${CXX} ${CXXFLAGS} -M ${INPUT}"); | 82 | requires getMakeDeps("${CXX} ${CXXFLAGS} -M ${INPUT}"); |
84 | profile "build" | 83 | profile "build" |
85 | { | 84 | { |
diff --git a/src/context.cpp b/src/context.cpp index e9330e5..efe8098 100644 --- a/src/context.cpp +++ b/src/context.cpp | |||
@@ -144,13 +144,20 @@ void Context::pushScope() | |||
144 | 144 | ||
145 | void Context::pushScope( const VarHash &hNewVars ) | 145 | void Context::pushScope( const VarHash &hNewVars ) |
146 | { | 146 | { |
147 | // sio << "Pushing scope, merging contexts." << sio.nl << sio.nl; | ||
147 | VarHash h = hNewVars; | 148 | VarHash h = hNewVars; |
148 | if( !sVars.isEmpty() ) | 149 | if( !sVars.isEmpty() ) |
149 | { | 150 | { |
151 | // sio << "hNewVars = " << h << sio.nl << sio.nl | ||
152 | // << "sVars = " << sVars.peek() << sio.nl; | ||
150 | for( VarHash::iterator i = sVars.peek().begin(); i; i++ ) | 153 | for( VarHash::iterator i = sVars.peek().begin(); i; i++ ) |
151 | { | 154 | { |
155 | // sio << "Checking '" << i.getKey() << "' (" << i.getValue() << ")." << sio.nl; | ||
152 | if( !h.has( i.getKey() ) ) | 156 | if( !h.has( i.getKey() ) ) |
157 | { | ||
158 | // sio << " Context doesn't have '" << i.getKey() << "' adding... '" << i.getValue() << "'." << sio.nl; | ||
153 | h.insert( i.getKey(), i.getValue() ); | 159 | h.insert( i.getKey(), i.getValue() ); |
160 | } | ||
154 | } | 161 | } |
155 | } | 162 | } |
156 | sVars.push( h ); | 163 | sVars.push( h ); |
@@ -158,7 +165,7 @@ void Context::pushScope( const VarHash &hNewVars ) | |||
158 | 165 | ||
159 | VarHash &Context::getScope() | 166 | VarHash &Context::getScope() |
160 | { | 167 | { |
161 | return sVars.first(); | 168 | return sVars.peek(); |
162 | } | 169 | } |
163 | 170 | ||
164 | void Context::popScope() | 171 | void Context::popScope() |
@@ -344,14 +351,14 @@ void Context::buildTargetTree( Runner &r ) | |||
344 | } | 351 | } |
345 | } | 352 | } |
346 | 353 | ||
347 | void Context::buildTargetTree( class Runner &r, class Target * /*pTarget*/, const Bu::FString &sInput, Rule *pMaster, StrList &lNewIns ) | 354 | void Context::buildTargetTree( class Runner &r, class Target *pTarget, const Bu::FString &sInput, Rule *pMaster, StrList &lNewIns ) |
348 | { | 355 | { |
349 | Target *pNewTarget = NULL; | 356 | Target *pNewTarget = NULL; |
350 | for( RuleHash::iterator i = hRule.begin(); i; i++ ) | 357 | for( RuleHash::iterator i = hRule.begin(); i; i++ ) |
351 | { | 358 | { |
352 | if( (*i)->hasOutputs() && (*i)->ruleMatches( r, sInput ) ) | 359 | if( (*i)->hasOutputs() && (*i)->ruleMatches( r, sInput ) ) |
353 | { | 360 | { |
354 | pNewTarget = (*i)->createTarget( r, sInput ); | 361 | pNewTarget = (*i)->createTarget( r, sInput, pTarget ); |
355 | 362 | ||
356 | Bu::Hash<ptrdiff_t, bool> hDone; | 363 | Bu::Hash<ptrdiff_t, bool> hDone; |
357 | for( StrList::const_iterator oi = | 364 | for( StrList::const_iterator oi = |
diff --git a/src/functiongetmakedeps.cpp b/src/functiongetmakedeps.cpp index 1aded15..008a509 100644 --- a/src/functiongetmakedeps.cpp +++ b/src/functiongetmakedeps.cpp | |||
@@ -1,4 +1,6 @@ | |||
1 | #include "functiongetmakedeps.h" | 1 | #include "functiongetmakedeps.h" |
2 | #include "context.h" | ||
3 | #include "view.h" | ||
2 | 4 | ||
3 | #include <bu/process.h> | 5 | #include <bu/process.h> |
4 | #include <bu/sio.h> | 6 | #include <bu/sio.h> |
@@ -19,6 +21,7 @@ Bu::FString FunctionGetMakeDeps::getName() const | |||
19 | 21 | ||
20 | Variable FunctionGetMakeDeps::call( Variable &/*input*/, VarList lParams ) | 22 | Variable FunctionGetMakeDeps::call( Variable &/*input*/, VarList lParams ) |
21 | { | 23 | { |
24 | pContext->getView()->cmdStarted( lParams.first().getString().getStr() ); | ||
22 | Process p( Process::StdOut, "/bin/bash", "/bin/bash", "-c", | 25 | Process p( Process::StdOut, "/bin/bash", "/bin/bash", "-c", |
23 | lParams.first().getString().getStr(), NULL ); | 26 | lParams.first().getString().getStr(), NULL ); |
24 | 27 | ||
@@ -31,6 +34,8 @@ Variable FunctionGetMakeDeps::call( Variable &/*input*/, VarList lParams ) | |||
31 | sBuf.append( buf, iRead ); | 34 | sBuf.append( buf, iRead ); |
32 | } | 35 | } |
33 | 36 | ||
37 | pContext->getView()->cmdFinished( "", "", p.childExitStatus() ); | ||
38 | |||
34 | Variable vRet( Variable::typeList ); | 39 | Variable vRet( Variable::typeList ); |
35 | 40 | ||
36 | Bu::FString::iterator i, j; | 41 | Bu::FString::iterator i, j; |
diff --git a/src/rule.cpp b/src/rule.cpp index 4c42346..7578707 100644 --- a/src/rule.cpp +++ b/src/rule.cpp | |||
@@ -73,9 +73,10 @@ void Rule::prepTarget( class Target *pTarget ) | |||
73 | } | 73 | } |
74 | } | 74 | } |
75 | 75 | ||
76 | Target *Rule::createTarget( class Runner &r, const Bu::FString &sInput ) | 76 | Target *Rule::createTarget( class Runner &r, const Bu::FString &sInput, |
77 | Target *pParent ) | ||
77 | { | 78 | { |
78 | r.getContext().pushScope(); | 79 | r.getContext().pushScope( pParent->getVars() ); |
79 | r.getContext().addVariable("INPUT", sInput ); | 80 | r.getContext().addVariable("INPUT", sInput ); |
80 | Target *pTrg = new Target( false ); | 81 | Target *pTrg = new Target( false ); |
81 | for( AstBranchList::iterator i = lOutput.begin(); i; i++ ) | 82 | for( AstBranchList::iterator i = lOutput.begin(); i; i++ ) |
@@ -22,7 +22,8 @@ public: | |||
22 | void addProfile( const AstBranch *pProfile ); | 22 | void addProfile( const AstBranch *pProfile ); |
23 | 23 | ||
24 | void prepTarget( class Target *pTarget ); | 24 | void prepTarget( class Target *pTarget ); |
25 | class Target *createTarget( class Runner &r, const Bu::FString &sInput ); | 25 | class Target *createTarget( class Runner &r, const Bu::FString &sInput, |
26 | class Target *pParent ); | ||
26 | bool ruleMatches( class Runner &r, const Bu::FString &sInput ); | 27 | bool ruleMatches( class Runner &r, const Bu::FString &sInput ); |
27 | 28 | ||
28 | void addTag( const Bu::FString &sTag ); | 29 | void addTag( const Bu::FString &sTag ); |
diff --git a/src/target.cpp b/src/target.cpp index f3e54b7..8eec07a 100644 --- a/src/target.cpp +++ b/src/target.cpp | |||
@@ -191,6 +191,7 @@ const Profile *Target::getProfile( const Bu::FString &sName ) const | |||
191 | 191 | ||
192 | void Target::setVars( const VarHash &hNewVars ) | 192 | void Target::setVars( const VarHash &hNewVars ) |
193 | { | 193 | { |
194 | |||
194 | hVars = hNewVars; | 195 | hVars = hNewVars; |
195 | } | 196 | } |
196 | 197 | ||