diff options
Diffstat (limited to 'src/build.cpp')
-rw-r--r-- | src/build.cpp | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/src/build.cpp b/src/build.cpp index db14750..a7421de 100644 --- a/src/build.cpp +++ b/src/build.cpp | |||
@@ -78,17 +78,36 @@ void Build::execAction( const std::string &sWhat ) | |||
78 | 78 | ||
79 | for( pAct->begin(); !pAct->isEnded(); pAct->next() ) | 79 | for( pAct->begin(); !pAct->isEnded(); pAct->next() ) |
80 | { | 80 | { |
81 | if( mTarget.find( pAct->getWhat() ) == mTarget.end() ) | 81 | if( pAct->isGroup() ) |
82 | throw BuildException( | 82 | { |
83 | "No target matches %s in action %s.", | 83 | if( mGroup.find( pAct->getWhat() ) == mGroup.end() ) |
84 | pAct->getWhat().c_str(), | 84 | throw BuildException( |
85 | sWhat.c_str() | 85 | "No group matches %s in action %s.", |
86 | ); | 86 | pAct->getWhat().c_str(), |
87 | Target *pTarget = mTarget[pAct->getWhat()]; | 87 | sWhat.c_str() |
88 | //pView->beginCommand( pAct->getAct(), pAct->getWhat() ); | 88 | ); |
89 | if( !pTarget->wasRun() ) | 89 | TargetList &sl = mGroup[pAct->getWhat()]; |
90 | pTarget->run( pAct->getAct(), *this ); | 90 | for( TargetList::iterator i = sl.begin(); i != sl.end(); i++ ) |
91 | //pView->endCommand(); | 91 | { |
92 | Target *pTarget = *i; | ||
93 | if( !pTarget->wasRun() ) | ||
94 | pTarget->run( pAct->getAct(), *this ); | ||
95 | } | ||
96 | } | ||
97 | else | ||
98 | { | ||
99 | if( mTarget.find( pAct->getWhat() ) == mTarget.end() ) | ||
100 | throw BuildException( | ||
101 | "No target matches %s in action %s.", | ||
102 | pAct->getWhat().c_str(), | ||
103 | sWhat.c_str() | ||
104 | ); | ||
105 | Target *pTarget = mTarget[pAct->getWhat()]; | ||
106 | //pView->beginCommand( pAct->getAct(), pAct->getWhat() ); | ||
107 | if( !pTarget->wasRun() ) | ||
108 | pTarget->run( pAct->getAct(), *this ); | ||
109 | //pView->endCommand(); | ||
110 | } | ||
92 | } | 111 | } |
93 | 112 | ||
94 | pView->endAction(); | 113 | pView->endAction(); |