diff options
author | Mike Buland <eichlan@xagasoft.com> | 2009-12-21 18:03:28 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2009-12-21 18:03:28 +0000 |
commit | 51e21a316be6e052251b3dfc7d671061ebd67cee (patch) | |
tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /src | |
parent | ad6f4dfcc671d3f8d458c42b0992956f2a2cf979 (diff) | |
download | build-51e21a316be6e052251b3dfc7d671061ebd67cee.tar.gz build-51e21a316be6e052251b3dfc7d671061ebd67cee.tar.bz2 build-51e21a316be6e052251b3dfc7d671061ebd67cee.tar.xz build-51e21a316be6e052251b3dfc7d671061ebd67cee.zip |
Removed the old trunk contents. About to load up m3
Diffstat (limited to 'src')
64 files changed, 0 insertions, 4769 deletions
diff --git a/src/action.cpp b/src/action.cpp deleted file mode 100644 index 2588caa..0000000 --- a/src/action.cpp +++ /dev/null | |||
@@ -1,53 +0,0 @@ | |||
1 | #include "action.h" | ||
2 | |||
3 | Action::Action() | ||
4 | { | ||
5 | } | ||
6 | |||
7 | Action::~Action() | ||
8 | { | ||
9 | } | ||
10 | |||
11 | void Action::addCommand( eAction act, const std::string &sWhat, bool bIsGroup ) | ||
12 | { | ||
13 | lCmds.push_back( Cmd( act, sWhat, bIsGroup ) ); | ||
14 | } | ||
15 | |||
16 | void Action::begin() | ||
17 | { | ||
18 | i = lCmds.begin(); | ||
19 | } | ||
20 | |||
21 | bool Action::isEnded() | ||
22 | { | ||
23 | return i == lCmds.end(); | ||
24 | } | ||
25 | |||
26 | void Action::next() | ||
27 | { | ||
28 | i++; | ||
29 | } | ||
30 | |||
31 | Action::eAction Action::getAct() | ||
32 | { | ||
33 | return (*i).act; | ||
34 | } | ||
35 | |||
36 | std::string Action::getWhat() | ||
37 | { | ||
38 | return (*i).sWhat; | ||
39 | } | ||
40 | |||
41 | bool Action::isGroup() | ||
42 | { | ||
43 | return (*i).bIsGroup; | ||
44 | } | ||
45 | |||
46 | void Action::setMode( eAction nAct ) | ||
47 | { | ||
48 | for( CmdList::iterator j = lCmds.begin(); j != lCmds.end(); j++ ) | ||
49 | { | ||
50 | (*j).act = nAct; | ||
51 | } | ||
52 | } | ||
53 | |||
diff --git a/src/action.h b/src/action.h deleted file mode 100644 index 929c1c5..0000000 --- a/src/action.h +++ /dev/null | |||
@@ -1,66 +0,0 @@ | |||
1 | #ifndef ACTION_H | ||
2 | #define ACTION_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include <string> | ||
7 | #include <list> | ||
8 | |||
9 | class Action | ||
10 | { | ||
11 | public: | ||
12 | enum eAction | ||
13 | { | ||
14 | actCheck, | ||
15 | actClean | ||
16 | }; | ||
17 | public: | ||
18 | Action(); | ||
19 | virtual ~Action(); | ||
20 | |||
21 | typedef struct Cmd | ||
22 | { | ||
23 | Cmd( eAction act, const std::string &sWhat, bool bIsGroup ) : | ||
24 | act( act ), sWhat( sWhat ), bIsGroup( bIsGroup ) | ||
25 | {} | ||
26 | eAction act; | ||
27 | std::string sWhat; | ||
28 | bool bIsGroup; | ||
29 | } Cmd; | ||
30 | |||
31 | void addCommand( eAction act, const std::string &sWhat, bool bIsGroup ); | ||
32 | |||
33 | void begin(); | ||
34 | bool isEnded(); | ||
35 | void next(); | ||
36 | |||
37 | int size() | ||
38 | { | ||
39 | return lCmds.size(); | ||
40 | } | ||
41 | |||
42 | eAction getAct(); | ||
43 | std::string getWhat(); | ||
44 | bool isGroup(); | ||
45 | |||
46 | void setName( const std::string &sName ) | ||
47 | { | ||
48 | this->sName = sName; | ||
49 | } | ||
50 | |||
51 | std::string getName() | ||
52 | { | ||
53 | return sName; | ||
54 | } | ||
55 | |||
56 | void setMode( eAction nAct ); | ||
57 | |||
58 | private: | ||
59 | typedef std::list<Cmd> CmdList; | ||
60 | CmdList lCmds; | ||
61 | CmdList::iterator i; | ||
62 | std::string sName; | ||
63 | |||
64 | }; | ||
65 | |||
66 | #endif | ||
diff --git a/src/bfilt/c++/bfilt-c++.l b/src/bfilt/c++/bfilt-c++.l deleted file mode 100644 index 4e71649..0000000 --- a/src/bfilt/c++/bfilt-c++.l +++ /dev/null | |||
@@ -1,64 +0,0 @@ | |||
1 | %{ | ||
2 | # include <string> | ||
3 | |||
4 | int nBC = 0; | ||
5 | %} | ||
6 | |||
7 | %s hasT | ||
8 | %x inWith | ||
9 | %x inT | ||
10 | %option noyywrap nounput batch | ||
11 | |||
12 | %% | ||
13 | |||
14 | "operator<<" { ECHO; } | ||
15 | "operator>>" { ECHO; } | ||
16 | "operator". { ECHO; } | ||
17 | |||
18 | "<<" { ECHO; } | ||
19 | ">>" { ECHO; } | ||
20 | " <<" { ECHO; } | ||
21 | " >>" { ECHO; } | ||
22 | "'<'" { ECHO; } | ||
23 | "'>'" { ECHO; } | ||
24 | |||
25 | "<anonymous>" { ECHO; } | ||
26 | |||
27 | \n+ { | ||
28 | BEGIN( INITIAL ); | ||
29 | nBC = false; | ||
30 | ECHO; | ||
31 | } | ||
32 | |||
33 | " <" { ECHO; } | ||
34 | |||
35 | "<" { | ||
36 | BEGIN( inT ); | ||
37 | printf("<...>"); | ||
38 | nBC++; | ||
39 | } | ||
40 | |||
41 | <inT>"<" { | ||
42 | nBC++; | ||
43 | |||
44 | } | ||
45 | <inT>[^<>]* { } | ||
46 | <inT>">" { | ||
47 | nBC--; | ||
48 | if( nBC == 0 ) | ||
49 | BEGIN( hasT ); | ||
50 | } | ||
51 | |||
52 | <hasT>" [with"[^\]]*"]" { } | ||
53 | |||
54 | %% | ||
55 | |||
56 | int main() | ||
57 | { | ||
58 | yyin = stdin; | ||
59 | |||
60 | yylex(); | ||
61 | |||
62 | return 0; | ||
63 | } | ||
64 | |||
diff --git a/src/build.cpp b/src/build.cpp deleted file mode 100644 index dd6db1e..0000000 --- a/src/build.cpp +++ /dev/null | |||
@@ -1,442 +0,0 @@ | |||
1 | #include "build.h" | ||
2 | #include "function.h" | ||
3 | #include "viewerfactory.h" | ||
4 | #include "bu/archive.h" | ||
5 | #include "bu/file.h" | ||
6 | |||
7 | #include <stdlib.h> | ||
8 | |||
9 | subExceptionDef( BuildException ); | ||
10 | |||
11 | Build::Build() : | ||
12 | pStrProc( NULL ), | ||
13 | pView( NULL ), | ||
14 | bCacheUpdated( false ) | ||
15 | { | ||
16 | } | ||
17 | |||
18 | Build::~Build() | ||
19 | { | ||
20 | if( sCacheName.size() > 0 && bCacheUpdated ) | ||
21 | { | ||
22 | try | ||
23 | { | ||
24 | Bu::File f( sCacheName.c_str(), | ||
25 | Bu::File::Write|Bu::File::Create|Bu::File::Truncate ); | ||
26 | Bu::Archive ar( f, Bu::Archive::save ); | ||
27 | |||
28 | ar << cRequires; | ||
29 | } | ||
30 | catch( Bu::ExceptionBase &e ) | ||
31 | { | ||
32 | } | ||
33 | } | ||
34 | } | ||
35 | |||
36 | void Build::setView( const std::string &sView ) | ||
37 | { | ||
38 | pView = ViewerFactory::getInstance().instantiate( sView.c_str() ); | ||
39 | } | ||
40 | |||
41 | void Build::setCache( const std::string &sFileName ) | ||
42 | { | ||
43 | sCacheName = sFileName; | ||
44 | |||
45 | try | ||
46 | { | ||
47 | Bu::File f( sCacheName.c_str(), Bu::File::Read ); | ||
48 | Bu::Archive ar( f, Bu::Archive::load ); | ||
49 | |||
50 | ar >> cRequires; | ||
51 | } | ||
52 | catch( Bu::ExceptionBase &e ) | ||
53 | { | ||
54 | } | ||
55 | } | ||
56 | |||
57 | void Build::setStringProc( StringProc *pStrProc ) | ||
58 | { | ||
59 | delete this->pStrProc; | ||
60 | this->pStrProc = pStrProc; | ||
61 | } | ||
62 | |||
63 | std::string Build::replVars( const std::string &sSrc, const StringList *pCont, VarMap *mExtra ) | ||
64 | { | ||
65 | if( pStrProc == NULL ) | ||
66 | throw BuildException( | ||
67 | "No valid string processor was registered with the Build object." | ||
68 | ); | ||
69 | |||
70 | return pStrProc->replVars( sSrc, pCont, mExtra ); | ||
71 | } | ||
72 | |||
73 | void Build::execAction( const std::string &sWhat ) | ||
74 | { | ||
75 | if( mAction.find( sWhat ) == mAction.end() ) | ||
76 | throw BuildException( | ||
77 | "No action matches %s, check your build.conf.", | ||
78 | sWhat.c_str() | ||
79 | ); | ||
80 | |||
81 | Action *pAct = mAction[sWhat]; | ||
82 | |||
83 | pView->beginAction( sWhat, pAct->size() ); | ||
84 | |||
85 | for( pAct->begin(); !pAct->isEnded(); pAct->next() ) | ||
86 | { | ||
87 | if( pAct->isGroup() ) | ||
88 | { | ||
89 | if( mGroup.find( pAct->getWhat() ) == mGroup.end() ) | ||
90 | throw BuildException( | ||
91 | "No group matches %s in action %s.", | ||
92 | pAct->getWhat().c_str(), | ||
93 | sWhat.c_str() | ||
94 | ); | ||
95 | TargetList &sl = mGroup[pAct->getWhat()]; | ||
96 | for( TargetList::iterator i = sl.begin(); i != sl.end(); i++ ) | ||
97 | { | ||
98 | Target *pTarget = *i; | ||
99 | if( !pTarget->wasRun() ) | ||
100 | pTarget->run( pAct->getAct(), *this ); | ||
101 | } | ||
102 | } | ||
103 | else | ||
104 | { | ||
105 | if( mTarget.find( pAct->getWhat() ) == mTarget.end() ) | ||
106 | throw BuildException( | ||
107 | "No target matches %s in action %s.", | ||
108 | pAct->getWhat().c_str(), | ||
109 | sWhat.c_str() | ||
110 | ); | ||
111 | Target *pTarget = mTarget[pAct->getWhat()]; | ||
112 | //pView->beginCommand( pAct->getAct(), pAct->getWhat() ); | ||
113 | if( !pTarget->wasRun() ) | ||
114 | pTarget->run( pAct->getAct(), *this ); | ||
115 | //pView->endCommand(); | ||
116 | } | ||
117 | } | ||
118 | |||
119 | pView->endAction(); | ||
120 | |||
121 | return; | ||
122 | } | ||
123 | |||
124 | void Build::addTarget( Target *pTarget ) | ||
125 | { | ||
126 | TargetMap::iterator i = mTarget.find( pTarget->getName() ); | ||
127 | if( i == mTarget.end() ) | ||
128 | { | ||
129 | mTarget[pTarget->getName()] = pTarget; | ||
130 | } | ||
131 | else | ||
132 | { | ||
133 | throw BuildException("Merging targets isn't working yet."); | ||
134 | } | ||
135 | } | ||
136 | |||
137 | void Build::addRequires( const std::string &who, const std::string &what ) | ||
138 | { | ||
139 | mRequires[who].push_back( what ); | ||
140 | } | ||
141 | |||
142 | void Build::addRule( Rule *pRule ) | ||
143 | { | ||
144 | mRule[pRule->getName()] = pRule; | ||
145 | } | ||
146 | |||
147 | Rule *Build::getRule( const std::string &name ) | ||
148 | { | ||
149 | if( mRule.find( name ) == mRule.end() ) | ||
150 | throw BuildException("No rule named %s found.", name.c_str() ); | ||
151 | |||
152 | return mRule[name]; | ||
153 | } | ||
154 | |||
155 | void Build::addAction( Action *pAction ) | ||
156 | { | ||
157 | mAction[pAction->getName()] = pAction; | ||
158 | } | ||
159 | |||
160 | void Build::set( const std::string &cont, const std::string &var, const std::string &val ) | ||
161 | { | ||
162 | if( cont == "" ) | ||
163 | { | ||
164 | mVars[var] = replVars( val, NULL, NULL ); | ||
165 | } | ||
166 | else | ||
167 | { | ||
168 | StringList cl; | ||
169 | cl.push_front( cont ); | ||
170 | mContVars[cont][var] = replVars( val, &cl, NULL ); | ||
171 | } | ||
172 | } | ||
173 | |||
174 | void Build::setAdd( const std::string &cont, const std::string &var, const std::string &val ) | ||
175 | { | ||
176 | if( cont == "" ) | ||
177 | { | ||
178 | mVars[var] = getVar( NULL, var, NULL ) + " " + replVars( val, NULL, NULL ); | ||
179 | } | ||
180 | else | ||
181 | { | ||
182 | StringList cl; | ||
183 | cl.push_front( cont ); | ||
184 | mContVars[cont][var] = getVar( &cl, var, NULL ) + " " + replVars( val, &cl, NULL ); | ||
185 | } | ||
186 | } | ||
187 | |||
188 | void Build::copyContext( const std::string &src, const std::string &dest ) | ||
189 | { | ||
190 | if( mContVars.find(src) == mContVars.end() ) | ||
191 | return; | ||
192 | |||
193 | VarMap &d = mContVars[dest]; | ||
194 | VarMap &s = mContVars[src]; | ||
195 | for( VarMap::iterator i = s.begin(); i != s.end(); i++ ) | ||
196 | d[(*i).first] = (*i).second; | ||
197 | } | ||
198 | |||
199 | std::string Build::getVar( const StringList *cont, const std::string &var, VarMap *mExtra ) | ||
200 | { | ||
201 | if( mExtra != NULL ) | ||
202 | { | ||
203 | if( mExtra->find(var) == mExtra->end() ) | ||
204 | { | ||
205 | return getVar( cont, var, NULL ); | ||
206 | } | ||
207 | return (*mExtra)[var]; | ||
208 | } | ||
209 | |||
210 | if( cont == NULL ) | ||
211 | { | ||
212 | if( mVars.find(var) == mVars.end() ) | ||
213 | { | ||
214 | if( getenv( var.c_str() ) == NULL ) | ||
215 | { | ||
216 | mVars[var] = ""; | ||
217 | } | ||
218 | else | ||
219 | { | ||
220 | mVars[var] = getenv( var.c_str() ); | ||
221 | } | ||
222 | } | ||
223 | return mVars[var]; | ||
224 | } | ||
225 | else | ||
226 | { | ||
227 | if( cont->empty() ) | ||
228 | { | ||
229 | return getVar( NULL, var, NULL ); | ||
230 | } | ||
231 | std::string sTop = cont->front(); | ||
232 | if( mContVars[sTop].find(var) == mContVars[sTop].end() ) | ||
233 | { | ||
234 | ((StringList *)cont)->pop_front(); | ||
235 | mContVars[sTop][var] = getVar( cont, var, NULL ); | ||
236 | ((StringList *)cont)->push_front( sTop ); | ||
237 | } | ||
238 | return mContVars[sTop][var]; | ||
239 | } | ||
240 | } | ||
241 | |||
242 | void Build::debugDump() | ||
243 | { | ||
244 | printf("Requires:\n"); | ||
245 | for( ReqMap::iterator i = mRequires.begin(); i != mRequires.end(); i++ ) | ||
246 | { | ||
247 | printf(" %s: ", (*i).first.c_str() ); | ||
248 | |||
249 | for( StringList::iterator j = (*i).second.begin(); | ||
250 | j != (*i).second.end(); j++ ) | ||
251 | { | ||
252 | if( j != (*i).second.begin() ) | ||
253 | printf(", "); | ||
254 | printf("%s", (*j).c_str() ); | ||
255 | } | ||
256 | printf("\n"); | ||
257 | } | ||
258 | |||
259 | printf("Targets:\n"); | ||
260 | for( TargetMap::iterator i = mTarget.begin(); i != mTarget.end(); i++ ) | ||
261 | { | ||
262 | printf(" %s:\n", (*i).first.c_str() ); | ||
263 | printf(" Rule: %s\n", (*i).second->getRule().c_str() ); | ||
264 | printf(" Input: "); | ||
265 | for( StringList::iterator j = (*i).second->getInput().begin(); | ||
266 | j != (*i).second->getInput().end(); j++ ) | ||
267 | { | ||
268 | if( j != (*i).second->getInput().begin() ) | ||
269 | printf(", "); | ||
270 | printf("%s", (*j).c_str() ); | ||
271 | } | ||
272 | printf("\n"); | ||
273 | } | ||
274 | |||
275 | printf("Global Variables:\n"); | ||
276 | for( VarMap::iterator i = mVars.begin(); i != mVars.end(); i++ ) | ||
277 | { | ||
278 | printf(" \"%s\" = \"%s\"\n", (*i).first.c_str(), (*i).second.c_str() ); | ||
279 | } | ||
280 | |||
281 | printf("Context Variables:\n"); | ||
282 | for( ContextMap::iterator i = mContVars.begin(); i != mContVars.end(); i++ ) | ||
283 | { | ||
284 | printf(" %s:\n", (*i).first.c_str() ); | ||
285 | |||
286 | for( VarMap::iterator j = (*i).second.begin(); | ||
287 | j != (*i).second.end(); j++ ) | ||
288 | { | ||
289 | printf(" \"%s\" = \"%s\"\n", | ||
290 | (*j).first.c_str(), | ||
291 | (*j).second.c_str() | ||
292 | ); | ||
293 | } | ||
294 | } | ||
295 | |||
296 | printf("Rules:\n"); | ||
297 | for( RuleMap::iterator i = mRule.begin(); i != mRule.end(); i++ ) | ||
298 | { | ||
299 | printf(" %s:\n", (*i).first.c_str() ); | ||
300 | printf(" Matches: func\n"); | ||
301 | printf(" Filters: %d\n", (*i).second->getFilterList().size() ); | ||
302 | printf(" Performs: %d\n", (*i).second->getPerformList().size() ); | ||
303 | printf(" Produces:\n"); | ||
304 | printf(" Requires:\n"); | ||
305 | } | ||
306 | |||
307 | printf("Actions:\n"); | ||
308 | for( ActionMap::iterator i = mAction.begin(); i != mAction.end(); i++ ) | ||
309 | { | ||
310 | printf(" %s: ", (*i).first.c_str() ); | ||
311 | for( (*i).second->begin(); !(*i).second->isEnded(); (*i).second->next() ) | ||
312 | { | ||
313 | printf("%d:%s ", (*i).second->getAct(), (*i).second->getWhat().c_str() ); | ||
314 | } | ||
315 | printf("\n"); | ||
316 | } | ||
317 | |||
318 | printf("Groups:\n"); | ||
319 | for( GroupMap::iterator i = mGroup.begin(); i != mGroup.end(); i++ ) | ||
320 | { | ||
321 | printf(" %s: ", (*i).first.c_str() ); | ||
322 | for( TargetList::iterator j = (*i).second.begin(); | ||
323 | j != (*i).second.end(); j++ ) | ||
324 | { | ||
325 | if( j != (*i).second.begin() ) printf(", "); | ||
326 | printf("%s", (*j)->getName().c_str() ); | ||
327 | } | ||
328 | printf("\n"); | ||
329 | } | ||
330 | } | ||
331 | |||
332 | RuleList Build::findChainRules( Rule *pHead ) | ||
333 | { | ||
334 | RuleList lOut; | ||
335 | FunctionList &lMatches = pHead->getMatchesList(); | ||
336 | |||
337 | for( RuleMap::iterator i = mRule.begin(); i != mRule.end(); i++ ) | ||
338 | { | ||
339 | if( (*i).second == pHead ) | ||
340 | continue; | ||
341 | |||
342 | for( FunctionList::iterator j = lMatches.begin(); | ||
343 | j != lMatches.end(); j++ ) | ||
344 | { | ||
345 | StringList lTmp; | ||
346 | (*j)->execute( NULL, (*i).second->getProducesList(), lTmp ); | ||
347 | if( !lTmp.empty() ) | ||
348 | { | ||
349 | lOut.push_back( (*i).second ); | ||
350 | break; | ||
351 | } | ||
352 | } | ||
353 | } | ||
354 | |||
355 | return lOut; | ||
356 | } | ||
357 | |||
358 | StringList &Build::getRequires( std::string sName ) | ||
359 | { | ||
360 | return mRequires[sName]; | ||
361 | } | ||
362 | |||
363 | bool Build::getCached( const std::string &sID, int nTime, StringList &lOut ) | ||
364 | { | ||
365 | Cache::Entry *pEnt = cRequires.get( sID ); | ||
366 | if( pEnt == NULL ) | ||
367 | return false; | ||
368 | if( pEnt->tCreated < nTime ) | ||
369 | return false; | ||
370 | |||
371 | lOut.insert( lOut.end(), pEnt->lData.begin(), pEnt->lData.end() ); | ||
372 | |||
373 | return true; | ||
374 | } | ||
375 | |||
376 | void Build::updateCache( const std::string &sID, FunctionList &lFunc, StringList &lOut ) | ||
377 | { | ||
378 | Cache::Entry *pEnt = new Cache::Entry; | ||
379 | getView()->beginRequiresCheck( false, sID ); | ||
380 | for( FunctionList::iterator f = lFunc.begin(); f != lFunc.end(); f++ ) | ||
381 | { | ||
382 | StringList lTmpIn; | ||
383 | lTmpIn.push_back( sID ); | ||
384 | (*f)->execute( this, lTmpIn, pEnt->lData ); | ||
385 | } | ||
386 | getView()->endRequiresCheck(); | ||
387 | |||
388 | lOut.insert( lOut.end(), pEnt->lData.begin(), pEnt->lData.end() ); | ||
389 | cRequires.put( sID, pEnt ); | ||
390 | |||
391 | pEnt->tCreated = time( NULL ); | ||
392 | |||
393 | bCacheUpdated = true; | ||
394 | } | ||
395 | |||
396 | void Build::chainTarget( const std::string &sName ) | ||
397 | { | ||
398 | TargetMap::iterator i = mTarget.find(sName); | ||
399 | if( i == mTarget.end() ) return; | ||
400 | |||
401 | if( !(*i).second->wasRun() ) | ||
402 | (*i).second->run( Action::actCheck, *this ); | ||
403 | } | ||
404 | |||
405 | void Build::printInfo() | ||
406 | { | ||
407 | printf("---- Build Info ----\n"); | ||
408 | printf("Valid actions: "); | ||
409 | for( ActionMap::iterator i = mAction.begin(); i != mAction.end(); i++ ) | ||
410 | { | ||
411 | if( i != mAction.begin() ) printf(", "); | ||
412 | if( (*i).first == "" ) | ||
413 | printf("*default*"); | ||
414 | else | ||
415 | printf("%s", (*i).first.c_str() ); | ||
416 | } | ||
417 | printf("\n\n"); | ||
418 | } | ||
419 | |||
420 | void Build::setMode( Action::eAction nAct ) | ||
421 | { | ||
422 | for( ActionMap::iterator i = mAction.begin(); i != mAction.end(); i++ ) | ||
423 | { | ||
424 | (*i).second->setMode( nAct ); | ||
425 | } | ||
426 | } | ||
427 | |||
428 | void Build::addToGroup( const std::string &sGroup, Target *pTarget ) | ||
429 | { | ||
430 | if( mGroup.find( sGroup ) == mGroup.end() ) | ||
431 | { | ||
432 | mGroup[sGroup] = TargetList(); | ||
433 | } | ||
434 | |||
435 | mGroup[sGroup].push_back( pTarget ); | ||
436 | } | ||
437 | |||
438 | bool Build::hasAction( const std::string &str ) | ||
439 | { | ||
440 | return mAction.find( str ) != mAction.end(); | ||
441 | } | ||
442 | |||
diff --git a/src/build.h b/src/build.h deleted file mode 100644 index 1ffb547..0000000 --- a/src/build.h +++ /dev/null | |||
@@ -1,107 +0,0 @@ | |||
1 | #ifndef BUILD_H | ||
2 | #define BUILD_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include <map> | ||
7 | #include <string> | ||
8 | |||
9 | #include "bu/exceptionbase.h" | ||
10 | #include "rule.h" | ||
11 | #include "target.h" | ||
12 | #include "action.h" | ||
13 | #include "stringproc.h" | ||
14 | #include "cache.h" | ||
15 | |||
16 | subExceptionDecl( BuildException ); | ||
17 | typedef std::map<std::string, std::string> VarMap; | ||
18 | typedef std::map<std::string, Target *> TargetMap; | ||
19 | typedef std::list<std::string> StringList; | ||
20 | typedef std::map<std::string, StringList> ReqMap; | ||
21 | typedef std::map<std::string, VarMap> ContextMap; | ||
22 | typedef std::map<std::string, Rule *> RuleMap; | ||
23 | typedef std::list<Rule *> RuleList; | ||
24 | typedef std::map<std::string, Action *> ActionMap; | ||
25 | typedef std::list<Target *> TargetList; | ||
26 | typedef std::map<std::string, TargetList> GroupMap; | ||
27 | |||
28 | class Viewer; | ||
29 | |||
30 | class Build | ||
31 | { | ||
32 | public: | ||
33 | Build(); | ||
34 | virtual ~Build(); | ||
35 | |||
36 | void execAction( const std::string &sWhat ); | ||
37 | |||
38 | /** | ||
39 | * Adds a target to the build. If the target already exists, this will | ||
40 | * attempt to merge them as best it can. If there are any conflicts, it | ||
41 | * will throw an exception. | ||
42 | *@param pTarget A pointer to a Target object that Build takes ownership of. | ||
43 | */ | ||
44 | void addTarget( Target *pTarget ); | ||
45 | void addRequires( const std::string &who, const std::string &what ); | ||
46 | void addRule( Rule *pRule ); | ||
47 | void addAction( Action *pAction ); | ||
48 | bool hasAction( const std::string &str ); | ||
49 | void addToGroup( const std::string &sGroup, Target *pTarget ); | ||
50 | |||
51 | void set( const std::string &cont, const std::string &var, const std::string &val ); | ||
52 | void setAdd( const std::string &cont, const std::string &var, const std::string &val ); | ||
53 | void copyContext( const std::string &src, const std::string &dest ); | ||
54 | std::string getVar( const StringList *cont, const std::string &var, VarMap *mExtra ); | ||
55 | |||
56 | Rule *getRule( const std::string &name ); | ||
57 | |||
58 | void debugDump(); | ||
59 | |||
60 | void setStringProc( StringProc *pStrProc ); | ||
61 | std::string replVars( const std::string &sSrc, const StringList *pCont, VarMap *mExtra ); | ||
62 | RuleList findChainRules( Rule *pHead ); | ||
63 | StringList &getRequires( std::string sName ); | ||
64 | |||
65 | Viewer *getView() | ||
66 | { | ||
67 | return pView; | ||
68 | } | ||
69 | |||
70 | TargetMap &getTargetMap() | ||
71 | { | ||
72 | return mTarget; | ||
73 | } | ||
74 | |||
75 | void setView( const std::string &sView ); | ||
76 | |||
77 | void setCache( const std::string &sFileName ); | ||
78 | bool getCached( const std::string &sID, int nTime, StringList &lOut ); | ||
79 | void updateCache( const std::string &sID, FunctionList &lFunc, StringList &lOut ); | ||
80 | |||
81 | void chainTarget( const std::string &sName ); | ||
82 | |||
83 | void printInfo(); | ||
84 | |||
85 | void setMode( Action::eAction nAct ); | ||
86 | |||
87 | private: | ||
88 | TargetMap mTarget; | ||
89 | ReqMap mRequires; | ||
90 | VarMap mVars; | ||
91 | ContextMap mContVars; | ||
92 | RuleMap mRule; | ||
93 | ActionMap mAction; | ||
94 | StringProc *pStrProc; | ||
95 | Viewer *pView; | ||
96 | Cache cRequires; | ||
97 | bool bCacheUpdated; | ||
98 | std::string sCacheName; | ||
99 | GroupMap mGroup; | ||
100 | |||
101 | //std::map<std::string, Rule *> mRule; | ||
102 | //Action *pActDefault; | ||
103 | //std::map<std::string, Action *> mAction; | ||
104 | |||
105 | }; | ||
106 | |||
107 | #endif | ||
diff --git a/src/build.l b/src/build.l deleted file mode 100644 index 9065a49..0000000 --- a/src/build.l +++ /dev/null | |||
@@ -1,173 +0,0 @@ | |||
1 | %{ | ||
2 | # include <string> | ||
3 | # include <string.h> | ||
4 | # include "buildparser.h" | ||
5 | # include "build.tab.h" | ||
6 | |||
7 | char *stringdup( const char *sin ) | ||
8 | { | ||
9 | char *n = new char[strlen(sin)+1]; | ||
10 | strcpy( n, sin ); | ||
11 | return n; | ||
12 | } | ||
13 | |||
14 | std::string strbuf; | ||
15 | %} | ||
16 | |||
17 | %x strsq | ||
18 | %x strdq | ||
19 | %x cmdstr | ||
20 | %x comment | ||
21 | %option noyywrap nounput batch debug | ||
22 | |||
23 | %{ | ||
24 | # define YY_USER_ACTION yylloc->last_column += yyleng; | ||
25 | %} | ||
26 | %% | ||
27 | |||
28 | [,:=[\]()] return yytext[0]; | ||
29 | "+=" return TOK_ADDSET; | ||
30 | |||
31 | "default" return TOK_DEFAULT; | ||
32 | "action" return TOK_ACTION; | ||
33 | "rule" return TOK_RULE; | ||
34 | "requires" return TOK_REQUIRES; | ||
35 | "set" return TOK_SET; | ||
36 | "matches" return TOK_MATCHES; | ||
37 | "perform" return TOK_PERFORM; | ||
38 | "produces" return TOK_PRODUCES; | ||
39 | "check" return TOK_CHECK; | ||
40 | "clean" return TOK_CLEAN; | ||
41 | "target" return TOK_TARGET; | ||
42 | "input" return TOK_INPUT; | ||
43 | "filter" return TOK_FILTER; | ||
44 | "prefix" return TOK_PREFIX; | ||
45 | "aggregate" return TOK_AGGREGATE; | ||
46 | "group" return TOK_GROUP; | ||
47 | |||
48 | \n+ { | ||
49 | yylloc->last_line += yyleng; | ||
50 | yylloc->first_line = yylloc->last_line; | ||
51 | yylloc->first_column = yylloc->last_column = 0; | ||
52 | } | ||
53 | |||
54 | [ \t\r]* { | ||
55 | yylloc->first_line = yylloc->last_line; | ||
56 | yylloc->first_column = yylloc->last_column+1; | ||
57 | } | ||
58 | |||
59 | "#".* /* single line comment */ | ||
60 | |||
61 | [a-zA-Z][a-zA-Z0-9]* { | ||
62 | { | ||
63 | if( bld.isTarget( yytext ) ) | ||
64 | { | ||
65 | yylval->strval = stringdup( yytext ); | ||
66 | return TARGETTYPE; | ||
67 | } | ||
68 | else if( bld.isPerform( yytext ) ) | ||
69 | { | ||
70 | yylval->strval = stringdup( yytext ); | ||
71 | return PERFORM; | ||
72 | } | ||
73 | else if( bld.isFunction( yytext ) ) | ||
74 | { | ||
75 | yylval->strval = stringdup( yytext ); | ||
76 | return FUNCTION; | ||
77 | } | ||
78 | bld.error( yylloc, "Invalid token" ); | ||
79 | } | ||
80 | } | ||
81 | |||
82 | \" { | ||
83 | BEGIN( strdq ); | ||
84 | strbuf = ""; | ||
85 | } | ||
86 | \' { | ||
87 | BEGIN( strsq ); | ||
88 | strbuf = ""; | ||
89 | } | ||
90 | \` { | ||
91 | BEGIN( cmdstr ); | ||
92 | strbuf = ""; | ||
93 | } | ||
94 | |||
95 | <strdq>[^\\\n\"]+ { | ||
96 | strbuf += yytext; | ||
97 | } | ||
98 | |||
99 | <strsq>[^\\\n\']+ { | ||
100 | strbuf += yytext; | ||
101 | } | ||
102 | |||
103 | <cmdstr>[^\\\n\`]+ { | ||
104 | strbuf += yytext; | ||
105 | } | ||
106 | |||
107 | <strdq,strsq,cmdstr>\\n strbuf += "\n"; | ||
108 | <strdq,strsq,cmdstr>\\t strbuf += "\t"; | ||
109 | <strdq,strsq,cmdstr>\\r strbuf += "\r"; | ||
110 | <strdq,strsq,cmdstr>\\b strbuf += "\b"; | ||
111 | <strdq,strsq,cmdstr>\\f strbuf += "\f"; | ||
112 | <strdq,strsq,cmdstr>\\\\ strbuf += "\\"; | ||
113 | <strdq,strsq,cmdstr>\\\" strbuf += "\""; | ||
114 | <strdq,strsq,cmdstr>\\\' strbuf += "\'"; | ||
115 | <strdq,strsq,cmdstr>\\\` strbuf += "`"; | ||
116 | <strdq,strsq,cmdstr>\\. bld.error( yylloc, "Invalid escape sequence."); | ||
117 | |||
118 | <strdq>\" { | ||
119 | BEGIN( INITIAL ); | ||
120 | yylval->strval = stringdup( strbuf.c_str() ); | ||
121 | return STRING; | ||
122 | } | ||
123 | |||
124 | <strsq>\' { | ||
125 | BEGIN( INITIAL ); | ||
126 | yylval->strval = stringdup( strbuf.c_str() ); | ||
127 | return STRING; | ||
128 | } | ||
129 | |||
130 | <cmdstr>\` { | ||
131 | BEGIN( INITIAL ); | ||
132 | FILE *fpg = popen( strbuf.c_str(), "r" ); | ||
133 | strbuf = ""; | ||
134 | for(;;) | ||
135 | { | ||
136 | char buf[1024]; | ||
137 | int nRead = fread( buf, 1, 1024, fpg ); | ||
138 | if( nRead == 0 ) break; | ||
139 | for( int j = 0; j < nRead; j++ ) | ||
140 | { | ||
141 | if( buf[j] == '\n' || buf[j] == '\r' ) | ||
142 | buf[j] = ' '; | ||
143 | } | ||
144 | strbuf.append( buf, nRead ); | ||
145 | if( nRead < 1024 ) break; | ||
146 | } | ||
147 | yylval->strval = stringdup( strbuf.c_str() ); | ||
148 | pclose( fpg ); | ||
149 | return STRING; | ||
150 | } | ||
151 | |||
152 | . { | ||
153 | char buf[] = {"Character x is out of place"}; | ||
154 | buf[10] = yytext[0]; | ||
155 | bld.error( yylloc, buf ); | ||
156 | } | ||
157 | |||
158 | %% | ||
159 | |||
160 | void BuildParser::scanBegin() | ||
161 | { | ||
162 | yy_flex_debug = false; | ||
163 | if( !(yyin = fopen( file.c_str(), "r" )) ) | ||
164 | { | ||
165 | error( std::string("cannot open file: ") + file ); | ||
166 | } | ||
167 | } | ||
168 | |||
169 | void BuildParser::scanEnd() | ||
170 | { | ||
171 | fclose( yyin ); | ||
172 | } | ||
173 | |||
diff --git a/src/build.y b/src/build.y deleted file mode 100644 index 55940e8..0000000 --- a/src/build.y +++ /dev/null | |||
@@ -1,278 +0,0 @@ | |||
1 | %defines | ||
2 | %{ | ||
3 | # include <string> | ||
4 | # include "buildparser.h" | ||
5 | # include "build.tab.h" | ||
6 | # include "action.h" | ||
7 | void yyerror( YYLTYPE *locp, BuildParser &bld, char const *msg ); | ||
8 | %} | ||
9 | |||
10 | %parse-param { BuildParser &bld } | ||
11 | %lex-param { BuildParser &bld } | ||
12 | %pure-parser | ||
13 | |||
14 | %locations | ||
15 | |||
16 | %debug | ||
17 | %error-verbose | ||
18 | %union { | ||
19 | char *strval; | ||
20 | } | ||
21 | |||
22 | %token <strval> STRING "string literal" | ||
23 | %token <strval> TARGETTYPE "target type" | ||
24 | %token <strval> FUNCTION "function name" | ||
25 | %token <strval> PERFORM "perform name" | ||
26 | |||
27 | %token TOK_ADDSET "+=" | ||
28 | %token TOK_DEFAULT "default" | ||
29 | %token TOK_ACTION "action" | ||
30 | %token TOK_CHECK "check" | ||
31 | %token TOK_CLEAN "clean" | ||
32 | %token TOK_RULE "rule" | ||
33 | %token TOK_TARGET "target" | ||
34 | %token TOK_SET "set" | ||
35 | %token TOK_INPUT "input" | ||
36 | %token TOK_FILTER "filter" | ||
37 | %token TOK_PREFIX "prefix" | ||
38 | %token TOK_REQUIRES "requires" | ||
39 | %token TOK_MATCHES "matches" | ||
40 | %token TOK_PERFORM "perform" | ||
41 | %token TOK_PRODUCES "produces" | ||
42 | %token TOK_AGGREGATE "aggregate" | ||
43 | %token TOK_GROUP "group" | ||
44 | |||
45 | %token ',' ':' '=' '(' ')' | ||
46 | |||
47 | %destructor { delete[] $$; } STRING FUNCTION | ||
48 | |||
49 | %% | ||
50 | |||
51 | // General input format | ||
52 | input: | ||
53 | | input rule | ||
54 | | input action | ||
55 | | input target | ||
56 | | input set | ||
57 | ; | ||
58 | |||
59 | // Rule interpretation | ||
60 | rule: TOK_RULE STRING ':' | ||
61 | { | ||
62 | bld.addRule( $2 ); | ||
63 | } | ||
64 | rulecmds | ||
65 | ; | ||
66 | |||
67 | rulecmds: rulecmd | ||
68 | | rulecmds ',' rulecmd | ||
69 | ; | ||
70 | |||
71 | rulecmd: TOK_MATCHES func | ||
72 | { | ||
73 | bld.addRuleMatches(); | ||
74 | } | ||
75 | | TOK_PRODUCES list | ||
76 | { | ||
77 | bld.addRuleProduces(); | ||
78 | } | ||
79 | | TOK_REQUIRES list | ||
80 | { | ||
81 | bld.addRuleRequires(); | ||
82 | } | ||
83 | | TOK_INPUT TOK_FILTER func | ||
84 | { | ||
85 | bld.addRuleInputFilter(); | ||
86 | } | ||
87 | | TOK_PERFORM perf | ||
88 | { | ||
89 | bld.addRulePerform(); | ||
90 | } | ||
91 | | TOK_AGGREGATE func | ||
92 | { | ||
93 | bld.setRuleAggregate(); | ||
94 | } | ||
95 | ; | ||
96 | |||
97 | // Action interpretation | ||
98 | action: TOK_DEFAULT TOK_ACTION ':' | ||
99 | { | ||
100 | bld.addAction(); | ||
101 | } | ||
102 | actioncmds | ||
103 | | STRING TOK_ACTION ':' | ||
104 | { | ||
105 | if( $1[0] == '\0' ) | ||
106 | bld.error( | ||
107 | &yylloc, | ||
108 | "You cannot use an empty string as the name of an action." | ||
109 | ); | ||
110 | bld.addAction( $1 ); | ||
111 | } | ||
112 | actioncmds | ||
113 | ; | ||
114 | |||
115 | actioncmds: actioncmd | ||
116 | | actioncmds ',' actioncmd | ||
117 | ; | ||
118 | |||
119 | actioncmd: TOK_CHECK list | ||
120 | { | ||
121 | bld.addCommand( Action::actCheck ); | ||
122 | } | ||
123 | | TOK_CLEAN list | ||
124 | { | ||
125 | bld.addCommand( Action::actClean ); | ||
126 | } | ||
127 | | TOK_CHECK TOK_GROUP STRING | ||
128 | { | ||
129 | bld.addGrpCommand( $3, Action::actCheck ); | ||
130 | } | ||
131 | | TOK_CLEAN TOK_GROUP STRING | ||
132 | { | ||
133 | bld.addGrpCommand( $3, Action::actClean ); | ||
134 | } | ||
135 | ; | ||
136 | |||
137 | // Target interpretation | ||
138 | target: list ':' | ||
139 | { | ||
140 | bld.newTarget(); | ||
141 | } | ||
142 | targetcmds | ||
143 | ; | ||
144 | |||
145 | targetcmds: targetcmd | ||
146 | | targetcmds ',' targetcmd | ||
147 | ; | ||
148 | |||
149 | targetcmd: TOK_RULE STRING | ||
150 | { | ||
151 | bld.setTargetRule( $2 ); | ||
152 | } | ||
153 | | TOK_TARGET TOK_PREFIX STRING | ||
154 | { | ||
155 | bld.setTargetPrefix( $3 ); | ||
156 | } | ||
157 | | TOK_TARGET TARGETTYPE | ||
158 | { | ||
159 | bld.setTargetType( $2 ); | ||
160 | } | ||
161 | | TOK_INPUT list | ||
162 | { | ||
163 | bld.addTargetInput(); | ||
164 | } | ||
165 | | TOK_REQUIRES list | ||
166 | { | ||
167 | bld.addTargetRequires(); | ||
168 | } | ||
169 | | TOK_SET targetset | ||
170 | | TOK_GROUP STRING | ||
171 | { | ||
172 | bld.addTargetGroup( $2 ); | ||
173 | } | ||
174 | ; | ||
175 | |||
176 | targetset: STRING '=' STRING | ||
177 | { | ||
178 | bld.addTargetSet( $1, $3, setSet ); | ||
179 | } | ||
180 | | STRING TOK_ADDSET STRING | ||
181 | { | ||
182 | bld.addTargetSet( $1, $3, setAdd ); | ||
183 | } | ||
184 | ; | ||
185 | |||
186 | // global set | ||
187 | set: TOK_SET setwhat | ||
188 | ; | ||
189 | |||
190 | setwhat: STRING '=' STRING | ||
191 | { | ||
192 | bld.addGlobalSet( $1, $3, setSet ); | ||
193 | } | ||
194 | | STRING TOK_ADDSET STRING | ||
195 | { | ||
196 | bld.addGlobalSet( $1, $3, setAdd ); | ||
197 | } | ||
198 | ; | ||
199 | |||
200 | // list goo | ||
201 | list: singlelistitem listfilter | ||
202 | | '[' | ||
203 | { | ||
204 | bld.newList(); | ||
205 | } | ||
206 | listitems ']' listfilter | ||
207 | ; | ||
208 | |||
209 | listfilter: | ||
210 | | TOK_FILTER func | ||
211 | { | ||
212 | bld.filterList(); | ||
213 | } | ||
214 | ; | ||
215 | |||
216 | listitems: listitem | ||
217 | | listitems ',' listitem | ||
218 | ; | ||
219 | |||
220 | listitem: STRING | ||
221 | { | ||
222 | bld.addListString( $1 ); | ||
223 | } | ||
224 | | func | ||
225 | { | ||
226 | bld.addListFunc(); | ||
227 | } | ||
228 | ; | ||
229 | |||
230 | singlelistitem: STRING | ||
231 | { | ||
232 | bld.newList(); | ||
233 | bld.addListString( $1 ); | ||
234 | } | ||
235 | | func | ||
236 | { | ||
237 | bld.newList(); | ||
238 | bld.addListFunc(); | ||
239 | } | ||
240 | ; | ||
241 | |||
242 | // Function | ||
243 | func: FUNCTION | ||
244 | { | ||
245 | bld.newFunctionCall( $1 ); | ||
246 | } | ||
247 | '(' funcparams ')' | ||
248 | ; | ||
249 | |||
250 | funcparams: | ||
251 | | STRING { bld.addFunctionParam( $1 ); } | ||
252 | | funcparams ',' STRING { bld.addFunctionParam( $3 ); } | ||
253 | ; | ||
254 | |||
255 | // Perform | ||
256 | perf: PERFORM | ||
257 | { | ||
258 | bld.newPerform( $1 ); | ||
259 | } | ||
260 | '(' perfparams ')' | ||
261 | ; | ||
262 | |||
263 | perfparams: | ||
264 | | STRING | ||
265 | { | ||
266 | bld.addPerformParam( $1 ); | ||
267 | } | ||
268 | | perfparams ',' STRING | ||
269 | { | ||
270 | bld.addPerformParam( $3 ); | ||
271 | } | ||
272 | ; | ||
273 | %% | ||
274 | |||
275 | void yyerror( YYLTYPE *locp, BuildParser &bld, char const *msg ) | ||
276 | { | ||
277 | bld.error( locp, msg ); | ||
278 | } | ||
diff --git a/src/buildparser.cpp b/src/buildparser.cpp deleted file mode 100644 index 8f40097..0000000 --- a/src/buildparser.cpp +++ /dev/null | |||
@@ -1,613 +0,0 @@ | |||
1 | #include "buildparser.h" | ||
2 | #include "functionfactory.h" | ||
3 | #include "performfactory.h" | ||
4 | #include "targetfactory.h" | ||
5 | #include "action.h" | ||
6 | #include "build.h" | ||
7 | #include "rule.h" | ||
8 | #include "stringprocbuild.h" | ||
9 | |||
10 | BuildParser::BuildParser() : | ||
11 | fFunction( FunctionFactory::getInstance() ), | ||
12 | fPerform( PerformFactory::getInstance() ), | ||
13 | fTarget( TargetFactory::getInstance() ) | ||
14 | { | ||
15 | } | ||
16 | |||
17 | BuildParser::~BuildParser() | ||
18 | { | ||
19 | } | ||
20 | |||
21 | void yyparse( BuildParser &bld ); | ||
22 | extern int yydebug; | ||
23 | |||
24 | Build *BuildParser::load( const std::string &sFile ) | ||
25 | { | ||
26 | file = sFile; | ||
27 | scanBegin(); | ||
28 | //yydebug = 1; | ||
29 | yyparse( *this ); | ||
30 | scanEnd(); | ||
31 | |||
32 | return genBuild(); | ||
33 | } | ||
34 | |||
35 | // | ||
36 | // Target functions | ||
37 | // | ||
38 | bool BuildParser::isTarget( const char *sType ) | ||
39 | { | ||
40 | return fTarget.hasPlugin( sType ); | ||
41 | } | ||
42 | |||
43 | void BuildParser::newTarget() | ||
44 | { | ||
45 | lTargetTmp.push_back( TargetTmp(lTmp, TargetInfo()) ); | ||
46 | } | ||
47 | |||
48 | void BuildParser::setTargetRule( const char *sRule ) | ||
49 | { | ||
50 | lTargetTmp.back().second.sRule = sRule; | ||
51 | } | ||
52 | |||
53 | void BuildParser::setTargetPrefix( const char *sPrefix ) | ||
54 | { | ||
55 | lTargetTmp.back().second.sPrefix = sPrefix; | ||
56 | } | ||
57 | |||
58 | void BuildParser::setTargetType( const char *sType ) | ||
59 | { | ||
60 | lTargetTmp.back().second.sType = sType; | ||
61 | } | ||
62 | |||
63 | void BuildParser::addTargetInput() | ||
64 | { | ||
65 | lTargetTmp.back().second.lInput.first.insert( | ||
66 | lTargetTmp.back().second.lInput.first.end(), | ||
67 | lTmp.first.begin(), lTmp.first.end() | ||
68 | ); | ||
69 | lTargetTmp.back().second.lInput.second = lTmp.second; | ||
70 | } | ||
71 | |||
72 | void BuildParser::addTargetRequires() | ||
73 | { | ||
74 | lTargetTmp.back().second.lRequires.first.insert( | ||
75 | lTargetTmp.back().second.lRequires.first.end(), | ||
76 | lTmp.first.begin(), lTmp.first.end() | ||
77 | ); | ||
78 | lTargetTmp.back().second.lRequires.second = lTmp.second; | ||
79 | } | ||
80 | |||
81 | void BuildParser::addTargetSet( const char *sVar, const char *sVal, int nHow ) | ||
82 | { | ||
83 | lTargetTmp.back().second.lVar.push_back( SetVar( sVar, sVal, nHow ) ); | ||
84 | } | ||
85 | |||
86 | void BuildParser::addTargetGroup( const char *sGroup ) | ||
87 | { | ||
88 | lTargetTmp.back().second.lGroups.push_back( sGroup ); | ||
89 | } | ||
90 | |||
91 | // | ||
92 | // Function functions | ||
93 | // | ||
94 | bool BuildParser::isFunction( const char *sFunc ) | ||
95 | { | ||
96 | return fFunction.hasPlugin( sFunc ); | ||
97 | } | ||
98 | |||
99 | void BuildParser::newFunctionCall( const char *sName ) | ||
100 | { | ||
101 | pTmpFunc = fFunction.instantiate( sName ); | ||
102 | } | ||
103 | |||
104 | void BuildParser::addFunctionParam( const char *sParam ) | ||
105 | { | ||
106 | pTmpFunc->addParam( sParam ); | ||
107 | } | ||
108 | |||
109 | // | ||
110 | // List functions | ||
111 | // | ||
112 | void BuildParser::newList() | ||
113 | { | ||
114 | lTmp.first.clear(); | ||
115 | lTmp.second = NULL; | ||
116 | } | ||
117 | |||
118 | void BuildParser::addListString( const char *str ) | ||
119 | { | ||
120 | lTmp.first.push_back( BuildListItem(str, NULL) ); | ||
121 | } | ||
122 | |||
123 | void BuildParser::addListFunc() | ||
124 | { | ||
125 | lTmp.first.push_back( BuildListItem("", pTmpFunc ) ); | ||
126 | } | ||
127 | |||
128 | void BuildParser::filterList() | ||
129 | { | ||
130 | lTmp.second = pTmpFunc; | ||
131 | //StringList lTmp2; | ||
132 | //StringList lIn = buildToStringList( lTmp, StringList() ); | ||
133 | //pTmpFunc->execute( NULL, lIn, lTmp2 ); | ||
134 | //lTmp.clear(); | ||
135 | //for( StringList::iterator i = lTmp2.begin(); i != lTmp2.end(); i++ ) | ||
136 | //{ | ||
137 | // lTmp.push_back( BuildListItem( *i, NULL ) ); | ||
138 | //} | ||
139 | } | ||
140 | |||
141 | void BuildParser::buildListFilter( BuildList &lSrc ) | ||
142 | { | ||
143 | if( lSrc.second == NULL ) | ||
144 | return; | ||
145 | |||
146 | StringList lTmp2; | ||
147 | StringList lIn = buildToStringList( lSrc, StringList() ); | ||
148 | pTmpFunc->execute( NULL, lIn, lTmp2 ); | ||
149 | lSrc.first.clear(); | ||
150 | delete lSrc.second; | ||
151 | for( StringList::iterator i = lTmp2.begin(); i != lTmp2.end(); i++ ) | ||
152 | { | ||
153 | lSrc.first.push_back( BuildListItem( *i, NULL ) ); | ||
154 | } | ||
155 | } | ||
156 | |||
157 | StringList BuildParser::buildToStringList( const BuildList &lSrc, const StringList &lIn, Build *pPass ) | ||
158 | { | ||
159 | StringList lOut; | ||
160 | |||
161 | for( BuildListCore::const_iterator i = lSrc.first.begin(); | ||
162 | i != lSrc.first.end(); i++ ) | ||
163 | { | ||
164 | if( (*i).second ) | ||
165 | { | ||
166 | (*i).second->execute( pPass, lIn, lOut ); | ||
167 | } | ||
168 | else | ||
169 | { | ||
170 | lOut.push_back( (*i).first ); | ||
171 | } | ||
172 | } | ||
173 | |||
174 | if( lSrc.second ) | ||
175 | { | ||
176 | StringList lTmp; | ||
177 | lSrc.second->execute( pPass, lOut, lTmp ); | ||
178 | lOut.swap( lTmp ); | ||
179 | } | ||
180 | |||
181 | return lOut; | ||
182 | } | ||
183 | |||
184 | StringList BuildParser::buildToStringListDup( const BuildList &lSrc, const StringList &lIn, Build &bld, const std::string &sCont, VarMap *mExtra, Build *pPass ) | ||
185 | { | ||
186 | StringList lOut; | ||
187 | |||
188 | for( BuildListCore::const_iterator i = lSrc.first.begin(); | ||
189 | i != lSrc.first.end(); i++ ) | ||
190 | { | ||
191 | if( (*i).second ) | ||
192 | { | ||
193 | StringList l; | ||
194 | l.push_back( sCont ); | ||
195 | Function *pTmp = (*i).second->duplicate( bld, &l, mExtra ); | ||
196 | pTmp->execute( pPass, lIn, lOut ); | ||
197 | delete pTmp; | ||
198 | } | ||
199 | else | ||
200 | { | ||
201 | StringList l; | ||
202 | l.push_back( sCont ); | ||
203 | lOut.push_back( bld.replVars( (*i).first, &l, mExtra ) ); | ||
204 | } | ||
205 | } | ||
206 | |||
207 | if( lSrc.second ) | ||
208 | { | ||
209 | StringList lTmp; | ||
210 | lSrc.second->execute( pPass, lOut, lTmp ); | ||
211 | lOut.swap( lTmp ); | ||
212 | } | ||
213 | |||
214 | return lOut; | ||
215 | } | ||
216 | |||
217 | // | ||
218 | // Rule functions | ||
219 | // | ||
220 | void BuildParser::addRule( const char *sName ) | ||
221 | { | ||
222 | lRuleTmp.push_back( RuleInfo() ); | ||
223 | lRuleTmp.back().sName = sName; | ||
224 | lRuleTmp.back().pAggregate = NULL; | ||
225 | } | ||
226 | |||
227 | void BuildParser::addRuleMatches() | ||
228 | { | ||
229 | lRuleTmp.back().pMatches = pTmpFunc; | ||
230 | } | ||
231 | |||
232 | void BuildParser::addRuleProduces() | ||
233 | { | ||
234 | lRuleTmp.back().lProduces.first.insert( | ||
235 | lRuleTmp.back().lProduces.first.end(), | ||
236 | lTmp.first.begin(), lTmp.first.end() | ||
237 | ); | ||
238 | } | ||
239 | |||
240 | void BuildParser::addRuleRequires() | ||
241 | { | ||
242 | lRuleTmp.back().lRequires.first.insert( | ||
243 | lRuleTmp.back().lRequires.first.end(), | ||
244 | lTmp.first.begin(), lTmp.first.end() | ||
245 | ); | ||
246 | } | ||
247 | |||
248 | void BuildParser::addRuleInputFilter() | ||
249 | { | ||
250 | lRuleTmp.back().lFilter.push_back( pTmpFunc ); | ||
251 | } | ||
252 | |||
253 | void BuildParser::addRulePerform() | ||
254 | { | ||
255 | lRuleTmp.back().lPerform.push_back( pTmpPerform ); | ||
256 | } | ||
257 | |||
258 | void BuildParser::setRuleAggregate() | ||
259 | { | ||
260 | lRuleTmp.back().pAggregate = pTmpFunc; | ||
261 | } | ||
262 | |||
263 | // | ||
264 | // Perform functions | ||
265 | // | ||
266 | bool BuildParser::isPerform( const char *sPerf ) | ||
267 | { | ||
268 | return fPerform.hasPlugin( sPerf ); | ||
269 | } | ||
270 | |||
271 | void BuildParser::newPerform( const char *sName ) | ||
272 | { | ||
273 | pTmpPerform = fPerform.instantiate( sName ); | ||
274 | } | ||
275 | |||
276 | void BuildParser::addPerformParam( const char *sParam ) | ||
277 | { | ||
278 | pTmpPerform->addParam( sParam ); | ||
279 | } | ||
280 | |||
281 | // | ||
282 | // Functions for dealing with actions | ||
283 | // | ||
284 | void BuildParser::addAction() | ||
285 | { | ||
286 | lActions.push_back( ActionTmp("", ActionTmpCmdList() ) ); | ||
287 | } | ||
288 | |||
289 | void BuildParser::addAction( const char *sName ) | ||
290 | { | ||
291 | lActions.push_back( ActionTmp(sName, ActionTmpCmdList()) ); | ||
292 | } | ||
293 | |||
294 | void BuildParser::addCommand( int nType ) | ||
295 | { | ||
296 | lActions.back().second.push_back( ActionTmpCmd( nType, lTmp ) ); | ||
297 | } | ||
298 | |||
299 | void BuildParser::addGrpCommand( const char *sGroup, int nType ) | ||
300 | { | ||
301 | lActions.back().second.push_back( ActionTmpCmd( nType, sGroup ) ); | ||
302 | } | ||
303 | |||
304 | // | ||
305 | // Global variable functions | ||
306 | // | ||
307 | void BuildParser::addGlobalSet( const char *sVar, const char *sValue, int nHow ) | ||
308 | { | ||
309 | lGlobalVars.push_back( SetVar( sVar, sValue, nHow ) ); | ||
310 | } | ||
311 | |||
312 | // | ||
313 | // Debug | ||
314 | // | ||
315 | void BuildParser::debugDump() | ||
316 | { | ||
317 | printf("Actions:\n"); | ||
318 | for( ActionTmpList::iterator i = lActions.begin(); | ||
319 | i != lActions.end(); i++ ) | ||
320 | { | ||
321 | if( (*i).first == "" ) | ||
322 | { | ||
323 | printf(" default:\n"); | ||
324 | } | ||
325 | else | ||
326 | { | ||
327 | printf(" \"%s\":\n", (*i).first.c_str() ); | ||
328 | } | ||
329 | for( ActionTmpCmdList::iterator j = (*i).second.begin(); | ||
330 | j != (*i).second.end(); j++ ) | ||
331 | { | ||
332 | printf(" %d ", (*j).nAct ); | ||
333 | if( (*j).bGroup ) | ||
334 | { | ||
335 | printf("!%s", (*j).sGroup.c_str() ); | ||
336 | } | ||
337 | else | ||
338 | { | ||
339 | printBuildList( (*j).lCmds ); | ||
340 | } | ||
341 | printf("\n"); | ||
342 | } | ||
343 | } | ||
344 | |||
345 | printf("\nTargets:\n"); | ||
346 | for( TargetTmpList::iterator i = lTargetTmp.begin(); | ||
347 | i != lTargetTmp.end(); i++ ) | ||
348 | { | ||
349 | printf(" "); | ||
350 | printBuildList( (*i).first ); | ||
351 | printf(":\n"); | ||
352 | |||
353 | printf(" Rule: %s\n", (*i).second.sRule.c_str() ); | ||
354 | printf(" Prefix: %s\n", (*i).second.sPrefix.c_str() ); | ||
355 | printf(" Type: %s\n", (*i).second.sType.c_str() ); | ||
356 | printf(" Input: "); | ||
357 | printBuildList( (*i).second.lInput ); | ||
358 | printf("\n Requires: "); | ||
359 | printBuildList( (*i).second.lRequires ); | ||
360 | printf("\n Vars:\n"); | ||
361 | |||
362 | for( SetVarList::iterator j = (*i).second.lVar.begin(); | ||
363 | j != (*i).second.lVar.end(); j++ ) | ||
364 | { | ||
365 | const char *op; | ||
366 | switch( (*j).third ) | ||
367 | { | ||
368 | case setSet: op = "="; break; | ||
369 | case setAdd: op = "+="; break; | ||
370 | } | ||
371 | printf(" %s %s %s\n", (*j).first.c_str(), op, (*j).second.c_str() ); | ||
372 | } | ||
373 | } | ||
374 | |||
375 | printf("\nGlobals:\n"); | ||
376 | for( SetVarList::iterator j = lGlobalVars.begin(); | ||
377 | j != lGlobalVars.end(); j++ ) | ||
378 | { | ||
379 | const char *op; | ||
380 | switch( (*j).third ) | ||
381 | { | ||
382 | case setSet: op = "="; break; | ||
383 | case setAdd: op = "+="; break; | ||
384 | } | ||
385 | printf(" %s %s %s\n", (*j).first.c_str(), op, (*j).second.c_str() ); | ||
386 | } | ||
387 | |||
388 | printf("\nRules:\n"); | ||
389 | for( RuleTmpList::iterator i = lRuleTmp.begin(); | ||
390 | i != lRuleTmp.end(); i++ ) | ||
391 | { | ||
392 | printf(" %s:\n", (*i).sName.c_str() ); | ||
393 | printf(" Matches: func()\n"); | ||
394 | printf(" Produces: "); | ||
395 | printBuildList( (*i).lProduces ); | ||
396 | printf("\n Requires: "); | ||
397 | printBuildList( (*i).lRequires ); | ||
398 | printf("\n Filters: %d\n", (*i).lFilter.size() ); | ||
399 | printf(" Performs: %d\n", (*i).lPerform.size() ); | ||
400 | } | ||
401 | } | ||
402 | |||
403 | void BuildParser::printBuildList( const BuildList &lst ) | ||
404 | { | ||
405 | printf("["); | ||
406 | for( BuildListCore::const_iterator k = lst.first.begin(); | ||
407 | k != lst.first.end(); k++ ) | ||
408 | { | ||
409 | if( k != lst.first.begin() ) | ||
410 | { | ||
411 | printf(", "); | ||
412 | } | ||
413 | if( (*k).second ) | ||
414 | { | ||
415 | printf("func()"); | ||
416 | } | ||
417 | else | ||
418 | { | ||
419 | printf("\"%s\"", (*k).first.c_str() ); | ||
420 | } | ||
421 | } | ||
422 | printf("]"); | ||
423 | } | ||
424 | |||
425 | // | ||
426 | // Actually make a build object | ||
427 | // | ||
428 | Build *BuildParser::genBuild() | ||
429 | { | ||
430 | Build *bld = new Build; | ||
431 | bld->setStringProc( new StringProcBuild( bld ) ); | ||
432 | |||
433 | for( SetVarList::iterator i = lGlobalVars.begin(); | ||
434 | i != lGlobalVars.end(); i++ ) | ||
435 | { | ||
436 | switch( (*i).third ) | ||
437 | { | ||
438 | case setSet: | ||
439 | bld->set( "", (*i).first, (*i).second ); | ||
440 | break; | ||
441 | |||
442 | case setAdd: | ||
443 | bld->setAdd( "", (*i).first, (*i).second ); | ||
444 | break; | ||
445 | } | ||
446 | } | ||
447 | |||
448 | for( TargetTmpList::iterator i = lTargetTmp.begin(); | ||
449 | i != lTargetTmp.end(); i++ ) | ||
450 | { | ||
451 | StringList lTargetNames = buildToStringList( | ||
452 | (*i).first, StringList(), bld | ||
453 | ); | ||
454 | for( StringList::iterator j = lTargetNames.begin(); | ||
455 | j != lTargetNames.end(); j++ ) | ||
456 | { | ||
457 | if( (*i).second.sType != "" ) | ||
458 | { | ||
459 | Target *pTarget = fTarget.instantiate( | ||
460 | (*i).second.sType.c_str() | ||
461 | ); | ||
462 | pTarget->setName( *j ); | ||
463 | pTarget->setRule( (*i).second.sRule ); | ||
464 | |||
465 | VarMap mExtra; | ||
466 | mExtra["target"] = (*j); | ||
467 | |||
468 | StringList lInputs = buildToStringListDup( | ||
469 | (*i).second.lInput, StringList(), | ||
470 | *bld, *j, &mExtra /*, bld <-- should this be here? */ | ||
471 | ); | ||
472 | pTarget->getInput().insert( | ||
473 | pTarget->getInput().end(), | ||
474 | lInputs.begin(), lInputs.end() | ||
475 | ); | ||
476 | |||
477 | bld->addTarget( pTarget ); | ||
478 | |||
479 | for( StringList::iterator c = (*i).second.lGroups.begin(); | ||
480 | c != (*i).second.lGroups.end(); c++ ) | ||
481 | { | ||
482 | bld->addToGroup( *c, pTarget ); | ||
483 | } | ||
484 | } | ||
485 | StringList lReqs = buildToStringList( | ||
486 | (*i).second.lRequires, StringList() | ||
487 | ); | ||
488 | for( StringList::iterator k = lReqs.begin(); | ||
489 | k != lReqs.end(); k++ ) | ||
490 | { | ||
491 | bld->addRequires( (*j), (*k) ); | ||
492 | } | ||
493 | for( SetVarList::iterator k = (*i).second.lVar.begin(); | ||
494 | k != (*i).second.lVar.end(); k++ ) | ||
495 | { | ||
496 | switch( (*k).third ) | ||
497 | { | ||
498 | case setSet: | ||
499 | bld->set( *j, (*k).first, (*k).second ); | ||
500 | break; | ||
501 | |||
502 | case setAdd: | ||
503 | bld->setAdd( *j, (*k).first, (*k).second ); | ||
504 | break; | ||
505 | } | ||
506 | } | ||
507 | } | ||
508 | } | ||
509 | |||
510 | for( RuleTmpList::iterator i = lRuleTmp.begin(); i != lRuleTmp.end(); i++ ) | ||
511 | { | ||
512 | Rule *pRule = new Rule; | ||
513 | pRule->setName( (*i).sName ); | ||
514 | pRule->getMatchesList().push_back( (*i).pMatches ); | ||
515 | |||
516 | for( FunctionList::iterator j = (*i).lFilter.begin(); | ||
517 | j != (*i).lFilter.end(); j++ ) | ||
518 | { | ||
519 | pRule->getFilterList().push_back( *j ); | ||
520 | } | ||
521 | |||
522 | for( PerformList::iterator j = (*i).lPerform.begin(); | ||
523 | j != (*i).lPerform.end(); j++ ) | ||
524 | { | ||
525 | pRule->getPerformList().push_back( *j ); | ||
526 | } | ||
527 | |||
528 | for( BuildListCore::iterator j = (*i).lProduces.first.begin(); | ||
529 | j != (*i).lProduces.first.end(); j++ ) | ||
530 | { | ||
531 | if( (*j).second ) | ||
532 | { | ||
533 | throw BuildException( | ||
534 | "You cannot have functions in produces lists (rule %s).", | ||
535 | (*i).sName.c_str() ); | ||
536 | } | ||
537 | pRule->getProducesList().push_back( (*j).first ); | ||
538 | } | ||
539 | |||
540 | if( (*i).pAggregate ) | ||
541 | { | ||
542 | pRule->setAggregate( (*i).pAggregate ); | ||
543 | } | ||
544 | |||
545 | for( BuildListCore::iterator j = (*i).lRequires.first.begin(); | ||
546 | j != (*i).lRequires.first.end(); j++ ) | ||
547 | { | ||
548 | if( (*j).second ) | ||
549 | { | ||
550 | pRule->getReqFuncList().push_back( (*j).second ); | ||
551 | } | ||
552 | else | ||
553 | { | ||
554 | pRule->getReqStrList().push_back( (*j).first ); | ||
555 | } | ||
556 | } | ||
557 | |||
558 | bld->addRule( pRule ); | ||
559 | } | ||
560 | |||
561 | for( ActionTmpList::iterator i = lActions.begin(); | ||
562 | i != lActions.end(); i++ ) | ||
563 | { | ||
564 | Action *pAct = new Action; | ||
565 | pAct->setName( (*i).first ); | ||
566 | |||
567 | for( ActionTmpCmdList::iterator j = (*i).second.begin(); | ||
568 | j != (*i).second.end(); j++ ) | ||
569 | { | ||
570 | if( (*j).bGroup ) | ||
571 | { | ||
572 | pAct->addCommand( | ||
573 | (Action::eAction)((*j).nAct), (*j).sGroup, true | ||
574 | ); | ||
575 | } | ||
576 | else | ||
577 | { | ||
578 | StringList lWhat = buildToStringList( | ||
579 | (*j).lCmds, StringList(), bld | ||
580 | ); | ||
581 | |||
582 | for( StringList::iterator k = lWhat.begin(); | ||
583 | k != lWhat.end(); k++ ) | ||
584 | { | ||
585 | pAct->addCommand( (Action::eAction)((*j).nAct), *k, false ); | ||
586 | } | ||
587 | } | ||
588 | } | ||
589 | |||
590 | bld->addAction( pAct ); | ||
591 | } | ||
592 | |||
593 | // Now create an auto check-action for each group where there isn't already | ||
594 | // an action. | ||
595 | for( TargetTmpList::iterator i = lTargetTmp.begin(); | ||
596 | i != lTargetTmp.end(); i++ ) | ||
597 | { | ||
598 | for( StringList::iterator j = (*i).second.lGroups.begin(); | ||
599 | j != (*i).second.lGroups.end(); j++ ) | ||
600 | { | ||
601 | if( !bld->hasAction( (*j) ) ) | ||
602 | { | ||
603 | Action *pAct = new Action; | ||
604 | pAct->setName( *j ); | ||
605 | pAct->addCommand( Action::actCheck, *j, true ); | ||
606 | bld->addAction( pAct ); | ||
607 | } | ||
608 | } | ||
609 | } | ||
610 | |||
611 | return bld; | ||
612 | } | ||
613 | |||
diff --git a/src/buildparser.h b/src/buildparser.h deleted file mode 100644 index 516760c..0000000 --- a/src/buildparser.h +++ /dev/null | |||
@@ -1,192 +0,0 @@ | |||
1 | #ifndef BUILDER_H | ||
2 | #define BUILDER_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <string> | ||
6 | #include <list> | ||
7 | #include <utility> | ||
8 | #include <map> | ||
9 | #include "build.tab.h" | ||
10 | #include "parser.h" | ||
11 | |||
12 | class Build; | ||
13 | class BuildParser; | ||
14 | class Function; | ||
15 | class FunctionFactory; | ||
16 | class Perform; | ||
17 | class PerformFactory; | ||
18 | class Target; | ||
19 | class TargetFactory; | ||
20 | |||
21 | #define YY_DECL int yylex( YYSTYPE *yylval_param, YYLTYPE *yylloc_param, BuildParser &bld ) | ||
22 | YY_DECL; | ||
23 | |||
24 | typedef std::list<std::string> StringList; | ||
25 | typedef std::list<Function *> FunctionList; | ||
26 | typedef std::list<Perform *> PerformList; | ||
27 | typedef std::map<std::string,std::string> VarMap; | ||
28 | |||
29 | template<class tx, class ty, class tz> | ||
30 | class Triplet | ||
31 | { | ||
32 | public: | ||
33 | Triplet( const tx &x, const ty &y, const tz &z ) : | ||
34 | first( x ), second( y ), third( z ) | ||
35 | {} | ||
36 | |||
37 | Triplet( const Triplet &src ) : | ||
38 | first( src.first ), second( src.second ), third( src.third ) | ||
39 | {} | ||
40 | |||
41 | tx first; | ||
42 | ty second; | ||
43 | tz third; | ||
44 | }; | ||
45 | |||
46 | enum eSetHow | ||
47 | { | ||
48 | setSet, | ||
49 | setAdd | ||
50 | }; | ||
51 | |||
52 | class BuildParser : public Parser | ||
53 | { | ||
54 | typedef std::pair<std::string, Function *> BuildListItem; | ||
55 | typedef std::list<BuildListItem> BuildListCore; | ||
56 | typedef std::pair<BuildListCore, Function *> BuildList; | ||
57 | typedef Triplet<std::string, std::string, int> SetVar; | ||
58 | typedef std::list<SetVar> SetVarList; | ||
59 | public: | ||
60 | BuildParser(); | ||
61 | virtual ~BuildParser(); | ||
62 | |||
63 | Build *load( const std::string &sFile ); | ||
64 | |||
65 | private: | ||
66 | void scanBegin(); | ||
67 | void scanEnd(); | ||
68 | |||
69 | Build *genBuild(); | ||
70 | |||
71 | public: // Target functions | ||
72 | bool isTarget( const char *sType ); | ||
73 | void newTarget(); | ||
74 | void setTargetRule( const char *sRule ); | ||
75 | void setTargetPrefix( const char *sPrefix ); | ||
76 | void setTargetType( const char *sType ); | ||
77 | void addTargetInput(); | ||
78 | void addTargetRequires(); | ||
79 | void addTargetSet( const char *sVar, const char *sVal, int nHow ); | ||
80 | void addTargetGroup( const char *sGroup ); | ||
81 | |||
82 | private: // Target variables | ||
83 | TargetFactory &fTarget; | ||
84 | class TargetInfo | ||
85 | { | ||
86 | public: | ||
87 | std::string sRule; | ||
88 | std::string sPrefix; | ||
89 | std::string sType; | ||
90 | BuildList lInput; | ||
91 | BuildList lRequires; | ||
92 | StringList lGroups; | ||
93 | SetVarList lVar; | ||
94 | }; | ||
95 | typedef std::pair<BuildList,TargetInfo> TargetTmp; | ||
96 | typedef std::list<TargetTmp> TargetTmpList; | ||
97 | TargetTmpList lTargetTmp; | ||
98 | |||
99 | public: // Function functions | ||
100 | bool isFunction( const char *sFunc ); | ||
101 | void newFunctionCall( const char *sName ); | ||
102 | void addFunctionParam( const char *sParam ); | ||
103 | |||
104 | private: // Function variables | ||
105 | Function *pTmpFunc; | ||
106 | FunctionFactory &fFunction; | ||
107 | |||
108 | public: // Perform functions | ||
109 | bool isPerform( const char *sPerf ); | ||
110 | void newPerform( const char *sName ); | ||
111 | void addPerformParam( const char *sParam ); | ||
112 | |||
113 | private: // Perform variables | ||
114 | Perform *pTmpPerform; | ||
115 | PerformFactory &fPerform; | ||
116 | |||
117 | public: // List functions | ||
118 | void newList(); | ||
119 | void addListString( const char *str ); | ||
120 | void addListFunc(); | ||
121 | void filterList(); | ||
122 | |||
123 | void buildListFilter( BuildList &lSrc ); | ||
124 | StringList buildToStringList( const BuildList &lSrc, const StringList &lIn, Build *pPass=NULL ); | ||
125 | StringList buildToStringListDup( const BuildList &lSrc, const StringList &lIn, Build &bld, const std::string &sCont, VarMap *mExtra, Build *pPass=NULL ); | ||
126 | |||
127 | private: // List variables | ||
128 | BuildList lTmp; | ||
129 | |||
130 | public: // Rules functions | ||
131 | void addRule( const char *sName ); | ||
132 | void addRuleMatches(); | ||
133 | void addRuleProduces(); | ||
134 | void addRuleRequires(); | ||
135 | void addRuleInputFilter(); | ||
136 | void addRulePerform(); | ||
137 | void setRuleAggregate(); | ||
138 | |||
139 | private: // Rule variables | ||
140 | class RuleInfo | ||
141 | { | ||
142 | public: | ||
143 | std::string sName; | ||
144 | Function *pMatches; | ||
145 | BuildList lProduces; | ||
146 | BuildList lRequires; | ||
147 | FunctionList lFilter; | ||
148 | PerformList lPerform; | ||
149 | Function *pAggregate; | ||
150 | }; | ||
151 | |||
152 | typedef std::list<RuleInfo> RuleTmpList; | ||
153 | RuleTmpList lRuleTmp; | ||
154 | |||
155 | public: // Action functions | ||
156 | void addAction(); | ||
157 | void addAction( const char *sName ); | ||
158 | void addCommand( int nType ); | ||
159 | void addGrpCommand( const char *sGroup, int nType ); | ||
160 | |||
161 | private: // Action variables | ||
162 | typedef struct ActionTmpCmd | ||
163 | { | ||
164 | ActionTmpCmd( int nAct, BuildList &l ) : | ||
165 | nAct( nAct ), bGroup( false ), lCmds( l ) { }; | ||
166 | ActionTmpCmd( int nAct, const char *s ) : | ||
167 | nAct( nAct ), bGroup( true ), sGroup( s ) { }; | ||
168 | int nAct; | ||
169 | bool bGroup; | ||
170 | BuildList lCmds; | ||
171 | std::string sGroup; | ||
172 | } ActionTmpCmd; | ||
173 | //typedef std::pair<int, BuildList> ActionTmpCmd; | ||
174 | //typedef std::pair<int, std::string> ActionTmpGrpCmd | ||
175 | typedef std::list<ActionTmpCmd> ActionTmpCmdList; | ||
176 | //typedef std::list<ActionTmpGrpCmd> ActionTmpGrpCmdList; | ||
177 | typedef std::pair<std::string, ActionTmpCmdList> ActionTmp; | ||
178 | typedef std::list<ActionTmp> ActionTmpList; | ||
179 | ActionTmpList lActions; | ||
180 | |||
181 | public: // Global variable functions | ||
182 | void addGlobalSet( const char *sVar, const char *sValue, int nHow ); | ||
183 | |||
184 | private: // Global variable variables | ||
185 | SetVarList lGlobalVars; | ||
186 | |||
187 | public: // Debug | ||
188 | void debugDump(); | ||
189 | void printBuildList( const BuildList &lst ); | ||
190 | }; | ||
191 | |||
192 | #endif | ||
diff --git a/src/cache.cpp b/src/cache.cpp deleted file mode 100644 index d2bf537..0000000 --- a/src/cache.cpp +++ /dev/null | |||
@@ -1,149 +0,0 @@ | |||
1 | #include "cache.h" | ||
2 | #include "bu/fstring.h" | ||
3 | #include "bu/archive.h" | ||
4 | |||
5 | Cache::Cache() | ||
6 | { | ||
7 | } | ||
8 | |||
9 | Cache::~Cache() | ||
10 | { | ||
11 | for( std::map<std::string, Entry *>::iterator i = mCache.begin(); | ||
12 | i != mCache.end(); i++ ) | ||
13 | { | ||
14 | delete (*i).second; | ||
15 | } | ||
16 | } | ||
17 | |||
18 | void Cache::archive( class Bu::ArchiveBase &ar ) | ||
19 | { | ||
20 | if( ar.isLoading() ) | ||
21 | { | ||
22 | uint32_t sCache, sData, sIndex; | ||
23 | |||
24 | ar >> sIndex; | ||
25 | Bu::FString *Index = new Bu::FString[sIndex]; | ||
26 | for( uint32_t i = 0; i < sIndex; i++ ) | ||
27 | { | ||
28 | ar >> Index[i]; | ||
29 | } | ||
30 | |||
31 | ar >> sCache; | ||
32 | uint32_t nTmp; | ||
33 | for( uint32_t i = 0; i < sCache; i++ ) | ||
34 | { | ||
35 | Entry *e = new Entry; | ||
36 | ar >> e->tCreated; | ||
37 | ar >> sData; | ||
38 | std::list<std::string> &lData = e->lData; | ||
39 | for( uint32_t j = 0; j < sData; j++ ) | ||
40 | { | ||
41 | ar >> nTmp; | ||
42 | lData.push_back( Index[nTmp].getStr() ); | ||
43 | } | ||
44 | ar >> nTmp; | ||
45 | mCache[Index[nTmp].getStr()] = e; | ||
46 | } | ||
47 | /* | ||
48 | uint32_t sCache, sData; | ||
49 | ar >> sCache; | ||
50 | std::string sTmp; | ||
51 | |||
52 | for( uint32_t i = 0; i < sCache; i++ ) | ||
53 | { | ||
54 | Entry *e = new Entry; | ||
55 | ar >> e->tCreated; | ||
56 | ar >> sData; | ||
57 | std::list<std::string> &lData = e->lData; | ||
58 | for( uint32_t j = 0; j < sData; j++ ) | ||
59 | { | ||
60 | ar >> sTmp; | ||
61 | lData.push_back( sTmp ); | ||
62 | } | ||
63 | ar >> sTmp; | ||
64 | mCache[sTmp] = e; | ||
65 | } | ||
66 | */ | ||
67 | } | ||
68 | else | ||
69 | { | ||
70 | std::map<std::string, uint32_t> mIndex; | ||
71 | for( std::map<std::string, Entry *>::iterator i = mCache.begin(); | ||
72 | i != mCache.end(); i++ ) | ||
73 | { | ||
74 | mIndex[(*i).first] = 0; | ||
75 | std::list<std::string> &lData = (*i).second->lData; | ||
76 | for( std::list<std::string>::iterator j = lData.begin(); | ||
77 | j != lData.end(); j++ ) | ||
78 | { | ||
79 | mIndex[(*j)] = 0; | ||
80 | } | ||
81 | } | ||
82 | |||
83 | ar << (uint32_t)mIndex.size(); | ||
84 | uint32_t cnt = 0; | ||
85 | for( std::map<std::string, uint32_t>::iterator i = mIndex.begin(); | ||
86 | i != mIndex.end(); i++ ) | ||
87 | { | ||
88 | (*i).second = cnt; | ||
89 | cnt++; | ||
90 | Bu::FString s( ((*i).first).c_str(), ((*i).first).size() ); | ||
91 | ar << s; | ||
92 | } | ||
93 | |||
94 | ar << (uint32_t)mCache.size(); | ||
95 | for( std::map<std::string, Entry *>::iterator i = mCache.begin(); | ||
96 | i != mCache.end(); i++ ) | ||
97 | { | ||
98 | ar << (*i).second->tCreated; | ||
99 | std::list<std::string> &lData = (*i).second->lData; | ||
100 | ar << (uint32_t)lData.size(); | ||
101 | for( std::list<std::string>::iterator j = lData.begin(); | ||
102 | j != lData.end(); j++ ) | ||
103 | { | ||
104 | ar << mIndex[(*j)]; | ||
105 | } | ||
106 | |||
107 | ar << mIndex[(*i).first]; | ||
108 | } | ||
109 | |||
110 | |||
111 | /* | ||
112 | ar << mCache.size(); | ||
113 | for( std::map<std::string, Entry *>::iterator i = mCache.begin(); | ||
114 | i != mCache.end(); i++ ) | ||
115 | { | ||
116 | ar << (*i).second->tCreated; | ||
117 | std::list<std::string> &lData = (*i).second->lData; | ||
118 | ar << lData.size(); | ||
119 | for( std::list<std::string>::iterator j = lData.begin(); | ||
120 | j != lData.end(); j++ ) | ||
121 | { | ||
122 | ar << (*j); | ||
123 | } | ||
124 | |||
125 | std::string str = (*i).first; | ||
126 | ar << str; | ||
127 | } | ||
128 | */ | ||
129 | } | ||
130 | } | ||
131 | |||
132 | Cache::Entry *Cache::get( const std::string &id ) | ||
133 | { | ||
134 | std::map<std::string, Entry *>::iterator i = mCache.find( id ); | ||
135 | if( i != mCache.end() ) | ||
136 | return (*i).second; | ||
137 | |||
138 | return NULL; | ||
139 | } | ||
140 | |||
141 | void Cache::put( const std::string &id, Entry *data ) | ||
142 | { | ||
143 | std::map<std::string, Entry *>::iterator i = mCache.find( id ); | ||
144 | if( i != mCache.end() ) | ||
145 | delete (*i).second; | ||
146 | |||
147 | mCache[id] = data; | ||
148 | } | ||
149 | |||
diff --git a/src/cache.h b/src/cache.h deleted file mode 100644 index 50264de..0000000 --- a/src/cache.h +++ /dev/null | |||
@@ -1,33 +0,0 @@ | |||
1 | #ifndef CACHE_H | ||
2 | #define CACHE_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <time.h> | ||
6 | #include "bu/archival.h" | ||
7 | #include <list> | ||
8 | #include <map> | ||
9 | #include <string> | ||
10 | |||
11 | class Cache : public Bu::Archival | ||
12 | { | ||
13 | public: | ||
14 | Cache(); | ||
15 | virtual ~Cache(); | ||
16 | |||
17 | virtual void archive( class Bu::ArchiveBase &ar ); | ||
18 | |||
19 | class Entry | ||
20 | { | ||
21 | public: | ||
22 | uint32_t tCreated; | ||
23 | std::list<std::string> lData; | ||
24 | }; | ||
25 | |||
26 | Entry *get( const std::string &id ); | ||
27 | void put( const std::string &id, Entry *data ); | ||
28 | |||
29 | private: | ||
30 | std::map<std::string, Entry *> mCache; | ||
31 | }; | ||
32 | |||
33 | #endif | ||
diff --git a/src/function.cpp b/src/function.cpp deleted file mode 100644 index 6e4f1d7..0000000 --- a/src/function.cpp +++ /dev/null | |||
@@ -1,25 +0,0 @@ | |||
1 | #include "function.h" | ||
2 | |||
3 | Function::Function() | ||
4 | { | ||
5 | } | ||
6 | |||
7 | Function::~Function() | ||
8 | { | ||
9 | } | ||
10 | |||
11 | void Function::addParam( const char *str ) | ||
12 | { | ||
13 | lParams.push_back( str ); | ||
14 | } | ||
15 | |||
16 | void Function::copyData( Function *pSrc, Build &bld, const StringList *cont, VarMap *mExtra ) | ||
17 | { | ||
18 | lParams.clear(); | ||
19 | for( std::list<std::string>::iterator i = pSrc->lParams.begin(); | ||
20 | i != pSrc->lParams.end(); i++ ) | ||
21 | { | ||
22 | lParams.push_back( bld.replVars( *i, cont, mExtra ) ); | ||
23 | } | ||
24 | } | ||
25 | |||
diff --git a/src/function.h b/src/function.h deleted file mode 100644 index af0d3fc..0000000 --- a/src/function.h +++ /dev/null | |||
@@ -1,23 +0,0 @@ | |||
1 | #ifndef FUNCTION_H | ||
2 | #define FUNCTION_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include "build.h" | ||
6 | |||
7 | class Function | ||
8 | { | ||
9 | public: | ||
10 | Function(); | ||
11 | virtual ~Function(); | ||
12 | |||
13 | void addParam( const char *str ); | ||
14 | virtual void execute( Build *bld, const StringList &lInput, StringList &lOutput )=0; | ||
15 | virtual Function *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) = 0; | ||
16 | void copyData( Function *pSrc, Build &bld, const StringList *cont, VarMap *mExtra ); | ||
17 | |||
18 | protected: | ||
19 | StringList lParams; | ||
20 | |||
21 | }; | ||
22 | |||
23 | #endif | ||
diff --git a/src/functioncommandtolist.cpp b/src/functioncommandtolist.cpp deleted file mode 100644 index 68c4564..0000000 --- a/src/functioncommandtolist.cpp +++ /dev/null | |||
@@ -1,68 +0,0 @@ | |||
1 | #include "functioncommandtolist.h" | ||
2 | #include "bu/plugger.h" | ||
3 | |||
4 | PluginInterface2(commandToList, FunctionCommandToList, Function, "Mike Buland", 0, 1 ); | ||
5 | |||
6 | FunctionCommandToList::FunctionCommandToList() | ||
7 | { | ||
8 | } | ||
9 | |||
10 | FunctionCommandToList::~FunctionCommandToList() | ||
11 | { | ||
12 | } | ||
13 | |||
14 | void FunctionCommandToList::execute( Build *bld, const StringList &lInput, StringList &lOutput ) | ||
15 | { | ||
16 | //rView.beginExtraRequiresCheck( s.c_str() ); | ||
17 | //rView.executeCmd( s.c_str() ); | ||
18 | FILE *fcmd = popen( lParams.front().c_str(), "r" ); | ||
19 | std::string rhs; | ||
20 | bool bHeader = true; | ||
21 | for(;;) | ||
22 | { | ||
23 | if( feof( fcmd ) ) | ||
24 | break; | ||
25 | int cc = fgetc( fcmd ); | ||
26 | if( cc == EOF ) | ||
27 | break; | ||
28 | unsigned char c = cc; | ||
29 | if( bHeader ) | ||
30 | { | ||
31 | if( c == ':' ) | ||
32 | bHeader = false; | ||
33 | } | ||
34 | else | ||
35 | { | ||
36 | if( c == ' ' || c == '\t' ) | ||
37 | { | ||
38 | if( rhs != "" ) | ||
39 | { | ||
40 | lOutput.push_back( rhs ); | ||
41 | rhs = ""; | ||
42 | } | ||
43 | } | ||
44 | else | ||
45 | { | ||
46 | if( c == '\\' ) | ||
47 | c = fgetc( fcmd ); | ||
48 | if( c != '\n' ) | ||
49 | rhs += c; | ||
50 | } | ||
51 | } | ||
52 | } | ||
53 | if( rhs != "" ) | ||
54 | { | ||
55 | lOutput.push_back( rhs ); | ||
56 | rhs = ""; | ||
57 | } | ||
58 | pclose( fcmd ); | ||
59 | //rView.endExtraRequiresCheck(); | ||
60 | } | ||
61 | |||
62 | Function *FunctionCommandToList::duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) | ||
63 | { | ||
64 | Function *pRet = new FunctionCommandToList(); | ||
65 | pRet->copyData( this, bld, cont, mExtra ); | ||
66 | return pRet; | ||
67 | } | ||
68 | |||
diff --git a/src/functioncommandtolist.h b/src/functioncommandtolist.h deleted file mode 100644 index 05bc393..0000000 --- a/src/functioncommandtolist.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef FUNCTION_COMMAND_TO_LIST_H | ||
2 | #define FUNCTION__H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "function.h" | ||
7 | |||
8 | class FunctionCommandToList : public Function | ||
9 | { | ||
10 | public: | ||
11 | FunctionCommandToList(); | ||
12 | virtual ~FunctionCommandToList(); | ||
13 | |||
14 | virtual void execute( Build *bld, const StringList &lInput, StringList &lOutput ); | ||
15 | virtual Function *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ); | ||
16 | |||
17 | private: | ||
18 | |||
19 | }; | ||
20 | |||
21 | #endif | ||
diff --git a/src/functiondirectoriesin.cpp b/src/functiondirectoriesin.cpp deleted file mode 100644 index 0ebbbc8..0000000 --- a/src/functiondirectoriesin.cpp +++ /dev/null | |||
@@ -1,69 +0,0 @@ | |||
1 | #include <dirent.h> | ||
2 | |||
3 | #include "functiondirectoriesin.h" | ||
4 | #include "bu/plugger.h" | ||
5 | |||
6 | PluginInterface2(directoriesIn, FunctionDirectoriesIn, Function, "Mike Buland", 0, 1 ); | ||
7 | |||
8 | FunctionDirectoriesIn::FunctionDirectoriesIn() | ||
9 | { | ||
10 | } | ||
11 | |||
12 | FunctionDirectoriesIn::~FunctionDirectoriesIn() | ||
13 | { | ||
14 | } | ||
15 | |||
16 | void FunctionDirectoriesIn::execute( Build *bld, const StringList &lInput, StringList &lOutput ) | ||
17 | { | ||
18 | DIR *d = opendir( lParams.front().c_str() ); | ||
19 | if( d == NULL ) | ||
20 | throw BuildException( | ||
21 | "Can't open directory %s.", | ||
22 | lParams.front().c_str() | ||
23 | ); | ||
24 | |||
25 | struct dirent *e; | ||
26 | |||
27 | std::string prefix; | ||
28 | if( lParams.size() >= 2 ) | ||
29 | { | ||
30 | StringList::iterator i = lParams.begin(); | ||
31 | i++; | ||
32 | prefix = *i; | ||
33 | } | ||
34 | else | ||
35 | { | ||
36 | prefix = lParams.front() + "/"; | ||
37 | } | ||
38 | |||
39 | while( (e = readdir( d )) ) | ||
40 | { | ||
41 | if( e->d_type == DT_DIR ) | ||
42 | { | ||
43 | if( e->d_name[0] == '.' || e->d_name[0] == '\0' ) | ||
44 | continue; | ||
45 | std::string sOut = prefix + e->d_name; | ||
46 | lOutput.push_back( sOut ); | ||
47 | if( bld ) | ||
48 | { | ||
49 | std::string sV = lParams.front() + "/"; | ||
50 | sV += e->d_name; | ||
51 | bld->set( sOut, "fulldir", sV ); | ||
52 | } | ||
53 | else | ||
54 | { | ||
55 | printf("no build access.\n"); | ||
56 | } | ||
57 | } | ||
58 | } | ||
59 | |||
60 | closedir( d ); | ||
61 | } | ||
62 | |||
63 | Function *FunctionDirectoriesIn::duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) | ||
64 | { | ||
65 | Function *pRet = new FunctionDirectoriesIn(); | ||
66 | pRet->copyData( this, bld, cont, mExtra ); | ||
67 | return pRet; | ||
68 | } | ||
69 | |||
diff --git a/src/functiondirectoriesin.h b/src/functiondirectoriesin.h deleted file mode 100644 index 7ec86e3..0000000 --- a/src/functiondirectoriesin.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef FUNCTION_DIRECTORIES_IN_H | ||
2 | #define FUNCTION_DIRECTORIES_IN_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "function.h" | ||
7 | |||
8 | class FunctionDirectoriesIn : public Function | ||
9 | { | ||
10 | public: | ||
11 | FunctionDirectoriesIn(); | ||
12 | virtual ~FunctionDirectoriesIn(); | ||
13 | |||
14 | virtual void execute( Build *bld, const StringList &lInput, StringList &lOutput ); | ||
15 | virtual Function *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ); | ||
16 | |||
17 | private: | ||
18 | |||
19 | }; | ||
20 | |||
21 | #endif | ||
diff --git a/src/functionfactory.cpp b/src/functionfactory.cpp deleted file mode 100644 index f72e8f6..0000000 --- a/src/functionfactory.cpp +++ /dev/null | |||
@@ -1,22 +0,0 @@ | |||
1 | #include "functionfactory.h" | ||
2 | |||
3 | extern struct Bu::PluginInfo directoriesIn; | ||
4 | extern struct Bu::PluginInfo filesIn; | ||
5 | extern struct Bu::PluginInfo regexp; | ||
6 | extern struct Bu::PluginInfo toString; | ||
7 | extern struct Bu::PluginInfo commandToList; | ||
8 | extern struct Bu::PluginInfo targets; | ||
9 | |||
10 | FunctionFactory::FunctionFactory() | ||
11 | { | ||
12 | registerBuiltinPlugin( &directoriesIn ); | ||
13 | registerBuiltinPlugin( &filesIn ); | ||
14 | registerBuiltinPlugin( ®exp ); | ||
15 | registerBuiltinPlugin( &toString ); | ||
16 | registerBuiltinPlugin( &commandToList ); | ||
17 | registerBuiltinPlugin( &targets ); | ||
18 | } | ||
19 | |||
20 | FunctionFactory::~FunctionFactory() | ||
21 | { | ||
22 | } | ||
diff --git a/src/functionfactory.h b/src/functionfactory.h deleted file mode 100644 index 2cc28fe..0000000 --- a/src/functionfactory.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #ifndef FUNCTION_FACTORY_H | ||
2 | #define FUNCTION_FACTORY_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "bu/plugger.h" | ||
7 | #include "bu/singleton.h" | ||
8 | #include "function.h" | ||
9 | |||
10 | class FunctionFactory : public Bu::Plugger<Function>, public Bu::Singleton<FunctionFactory> | ||
11 | { | ||
12 | public: | ||
13 | FunctionFactory(); | ||
14 | virtual ~FunctionFactory(); | ||
15 | |||
16 | private: | ||
17 | |||
18 | }; | ||
19 | |||
20 | #endif | ||
diff --git a/src/functionfilesin.cpp b/src/functionfilesin.cpp deleted file mode 100644 index 5301cd2..0000000 --- a/src/functionfilesin.cpp +++ /dev/null | |||
@@ -1,58 +0,0 @@ | |||
1 | #include <dirent.h> | ||
2 | |||
3 | #include "functionfilesin.h" | ||
4 | #include "bu/plugger.h" | ||
5 | #include "build.h" | ||
6 | |||
7 | PluginInterface2(filesIn, FunctionFilesIn, Function, "Mike Buland", 0, 1 ); | ||
8 | |||
9 | FunctionFilesIn::FunctionFilesIn() | ||
10 | { | ||
11 | } | ||
12 | |||
13 | FunctionFilesIn::~FunctionFilesIn() | ||
14 | { | ||
15 | } | ||
16 | |||
17 | void FunctionFilesIn::execute( Build *bld, const StringList &lInput, StringList &lOutput ) | ||
18 | { | ||
19 | DIR *d = opendir( lParams.front().c_str() ); | ||
20 | if( d == NULL ) | ||
21 | throw BuildException( | ||
22 | "Can't open directory %s.", | ||
23 | lParams.front().c_str() | ||
24 | ); | ||
25 | |||
26 | struct dirent *e; | ||
27 | |||
28 | std::string prefix; | ||
29 | if( lParams.size() >= 2 ) | ||
30 | { | ||
31 | StringList::iterator i = lParams.begin(); | ||
32 | i++; | ||
33 | prefix = *i; | ||
34 | } | ||
35 | else | ||
36 | { | ||
37 | prefix = lParams.front() + "/"; | ||
38 | } | ||
39 | |||
40 | while( (e = readdir( d )) ) | ||
41 | { | ||
42 | if( e->d_type != DT_DIR ) | ||
43 | { | ||
44 | if( e->d_name[0] != '.') | ||
45 | lOutput.push_back( prefix + e->d_name ); | ||
46 | } | ||
47 | } | ||
48 | |||
49 | closedir( d ); | ||
50 | } | ||
51 | |||
52 | Function *FunctionFilesIn::duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) | ||
53 | { | ||
54 | Function *pRet = new FunctionFilesIn(); | ||
55 | pRet->copyData( this, bld, cont, mExtra ); | ||
56 | return pRet; | ||
57 | } | ||
58 | |||
diff --git a/src/functionfilesin.h b/src/functionfilesin.h deleted file mode 100644 index 904837f..0000000 --- a/src/functionfilesin.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef FUNCTION_FILES_IN_H | ||
2 | #define FUNCTION_FILES_IN_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "function.h" | ||
7 | |||
8 | class FunctionFilesIn : public Function | ||
9 | { | ||
10 | public: | ||
11 | FunctionFilesIn(); | ||
12 | virtual ~FunctionFilesIn(); | ||
13 | |||
14 | virtual void execute( Build *bld, const StringList &lInput, StringList &lOutput ); | ||
15 | virtual Function *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ); | ||
16 | |||
17 | private: | ||
18 | |||
19 | }; | ||
20 | |||
21 | #endif | ||
diff --git a/src/functionregexp.cpp b/src/functionregexp.cpp deleted file mode 100644 index 2dc18b2..0000000 --- a/src/functionregexp.cpp +++ /dev/null | |||
@@ -1,86 +0,0 @@ | |||
1 | #include "functionregexp.h" | ||
2 | #include "bu/plugger.h" | ||
3 | #include "regexp.h" | ||
4 | |||
5 | PluginInterface2(regexp, FunctionRegexp, Function, "Mike Buland", 0, 1 ); | ||
6 | |||
7 | FunctionRegexp::FunctionRegexp() | ||
8 | { | ||
9 | } | ||
10 | |||
11 | FunctionRegexp::~FunctionRegexp() | ||
12 | { | ||
13 | } | ||
14 | |||
15 | void FunctionRegexp::execute( Build *bld, const StringList &lInput, StringList &lOutput ) | ||
16 | { | ||
17 | if( lParams.size() == 1 ) | ||
18 | { | ||
19 | RegExp re( lParams.front().c_str() ); | ||
20 | |||
21 | for( StringList::const_iterator i = lInput.begin(); | ||
22 | i != lInput.end(); i++ ) | ||
23 | { | ||
24 | if( re.execute( (*i).c_str() ) ) | ||
25 | { | ||
26 | lOutput.push_back( *i ); | ||
27 | if( bld ) | ||
28 | { | ||
29 | int jmax = re.getNumSubStrings(); | ||
30 | for( int j = 0; j < jmax; j++ ) | ||
31 | { | ||
32 | char buf[30]; | ||
33 | sprintf( buf, "re:%d", j ); | ||
34 | bld->set( *i, buf, re.getSubString( j ) ); | ||
35 | } | ||
36 | } | ||
37 | } | ||
38 | } | ||
39 | } | ||
40 | else | ||
41 | { | ||
42 | if( !bld ) | ||
43 | { | ||
44 | throw BuildException("You apparently can't use regexp with two params here. Isn't that odd?"); | ||
45 | } | ||
46 | |||
47 | RegExp re( lParams.front().c_str() ); | ||
48 | lParams.pop_front(); | ||
49 | std::string p2 = lParams.front(); | ||
50 | |||
51 | for( StringList::const_iterator i = lInput.begin(); | ||
52 | i != lInput.end(); i++ ) | ||
53 | { | ||
54 | if( re.execute( (*i).c_str() ) ) | ||
55 | { | ||
56 | VarMap ext; | ||
57 | int jmax = re.getNumSubStrings(); | ||
58 | for( int j = 0; j < jmax; j++ ) | ||
59 | { | ||
60 | char buf[30]; | ||
61 | sprintf( buf, "re:%d", j ); | ||
62 | ext[buf] = re.getSubString( j ); | ||
63 | } | ||
64 | |||
65 | std::string sNew = bld->replVars( p2, NULL, &ext ); | ||
66 | lOutput.push_back( sNew ); | ||
67 | |||
68 | for( int j = 0; j < jmax; j++ ) | ||
69 | { | ||
70 | char buf[30]; | ||
71 | sprintf( buf, "re:%d", j ); | ||
72 | bld->set( sNew, buf, re.getSubString( j ) ); | ||
73 | } | ||
74 | bld->copyContext( *i, sNew ); | ||
75 | } | ||
76 | } | ||
77 | } | ||
78 | } | ||
79 | |||
80 | Function *FunctionRegexp::duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) | ||
81 | { | ||
82 | Function *pRet = new FunctionRegexp(); | ||
83 | pRet->copyData( this, bld, cont, mExtra ); | ||
84 | return pRet; | ||
85 | } | ||
86 | |||
diff --git a/src/functionregexp.h b/src/functionregexp.h deleted file mode 100644 index 42fe811..0000000 --- a/src/functionregexp.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef FUNCTION_REGEXP_H | ||
2 | #define FUNCTION_REGEXP_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "function.h" | ||
7 | |||
8 | class FunctionRegexp : public Function | ||
9 | { | ||
10 | public: | ||
11 | FunctionRegexp(); | ||
12 | virtual ~FunctionRegexp(); | ||
13 | |||
14 | virtual void execute( Build *bld, const StringList &lInput, StringList &lOutput ); | ||
15 | virtual Function *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ); | ||
16 | |||
17 | private: | ||
18 | |||
19 | }; | ||
20 | |||
21 | #endif | ||
diff --git a/src/functiontargets.cpp b/src/functiontargets.cpp deleted file mode 100644 index a94f43e..0000000 --- a/src/functiontargets.cpp +++ /dev/null | |||
@@ -1,35 +0,0 @@ | |||
1 | #include "functiontargets.h" | ||
2 | #include "bu/plugger.h" | ||
3 | #include "build.h" | ||
4 | |||
5 | PluginInterface2(targets, FunctionTargets, Function, "Mike Buland", 0, 1 ); | ||
6 | |||
7 | FunctionTargets::FunctionTargets() | ||
8 | { | ||
9 | } | ||
10 | |||
11 | FunctionTargets::~FunctionTargets() | ||
12 | { | ||
13 | } | ||
14 | |||
15 | void FunctionTargets::execute( Build *bld, const StringList &lInput, StringList &lOutput ) | ||
16 | { | ||
17 | if( bld == NULL ) | ||
18 | { | ||
19 | throw BuildException("You cannot call targets() from anywhere, see the manual."); | ||
20 | } | ||
21 | |||
22 | for( TargetMap::iterator i = bld->getTargetMap().begin(); | ||
23 | i != bld->getTargetMap().end(); i++ ) | ||
24 | { | ||
25 | lOutput.push_back( (*i).first ); | ||
26 | } | ||
27 | } | ||
28 | |||
29 | Function *FunctionTargets::duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) | ||
30 | { | ||
31 | Function *pRet = new FunctionTargets(); | ||
32 | pRet->copyData( this, bld, cont, mExtra ); | ||
33 | return pRet; | ||
34 | } | ||
35 | |||
diff --git a/src/functiontargets.h b/src/functiontargets.h deleted file mode 100644 index f42ce96..0000000 --- a/src/functiontargets.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef FUNCTION_TARGETS_H | ||
2 | #define FUNCTION_TARGETS_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "function.h" | ||
7 | |||
8 | class FunctionTargets : public Function | ||
9 | { | ||
10 | public: | ||
11 | FunctionTargets(); | ||
12 | virtual ~FunctionTargets(); | ||
13 | |||
14 | virtual void execute( Build *bld, const StringList &lInput, StringList &lOutput ); | ||
15 | virtual Function *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ); | ||
16 | |||
17 | private: | ||
18 | |||
19 | }; | ||
20 | |||
21 | #endif | ||
diff --git a/src/functiontostring.cpp b/src/functiontostring.cpp deleted file mode 100644 index 2fdcc1c..0000000 --- a/src/functiontostring.cpp +++ /dev/null | |||
@@ -1,33 +0,0 @@ | |||
1 | #include "functiontostring.h" | ||
2 | #include "bu/plugger.h" | ||
3 | |||
4 | PluginInterface2(toString, FunctionToString, Function, "Mike Buland", 0, 1 ); | ||
5 | |||
6 | FunctionToString::FunctionToString() | ||
7 | { | ||
8 | } | ||
9 | |||
10 | FunctionToString::~FunctionToString() | ||
11 | { | ||
12 | } | ||
13 | |||
14 | void FunctionToString::execute( Build *bld, const StringList &lInput, StringList &lOutput ) | ||
15 | { | ||
16 | std::string sOut; | ||
17 | |||
18 | for( StringList::const_iterator i = lInput.begin(); i != lInput.end(); i++ ) | ||
19 | { | ||
20 | if( i != lInput.begin() ) sOut += " "; | ||
21 | sOut += *i; | ||
22 | } | ||
23 | |||
24 | lOutput.push_back( sOut ); | ||
25 | } | ||
26 | |||
27 | Function *FunctionToString::duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) | ||
28 | { | ||
29 | Function *pRet = new FunctionToString(); | ||
30 | pRet->copyData( this, bld, cont, mExtra ); | ||
31 | return pRet; | ||
32 | } | ||
33 | |||
diff --git a/src/functiontostring.h b/src/functiontostring.h deleted file mode 100644 index d9c5af7..0000000 --- a/src/functiontostring.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef FUNCTION_TO_STRING_H | ||
2 | #define FUNCTION_TO_STRING_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "function.h" | ||
7 | |||
8 | class FunctionToString : public Function | ||
9 | { | ||
10 | public: | ||
11 | FunctionToString(); | ||
12 | virtual ~FunctionToString(); | ||
13 | |||
14 | virtual void execute( Build *bld, const StringList &lInput, StringList &lOutput ); | ||
15 | virtual Function *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ); | ||
16 | |||
17 | private: | ||
18 | |||
19 | }; | ||
20 | |||
21 | #endif | ||
diff --git a/src/main.cpp b/src/main.cpp deleted file mode 100644 index 1d3dc10..0000000 --- a/src/main.cpp +++ /dev/null | |||
@@ -1,172 +0,0 @@ | |||
1 | #include "buildparser.h" | ||
2 | //#include "viewerplain.h" | ||
3 | //#include "viewerpercent.h" | ||
4 | //#include "viewermake.h" | ||
5 | #include "bu/paramproc.h" | ||
6 | #include "bu/fstring.h" | ||
7 | #include "build.h" | ||
8 | #include "action.h" | ||
9 | |||
10 | #include <stdlib.h> | ||
11 | |||
12 | class Param : public Bu::ParamProc | ||
13 | { | ||
14 | public: | ||
15 | Param() : | ||
16 | sFile("build.conf"), | ||
17 | sCache(".build.cache"), | ||
18 | bDebug( false ), | ||
19 | bPostDebug( false ), | ||
20 | sView("colorpct"), | ||
21 | bInfo( false ), | ||
22 | bCleanMode( false ), | ||
23 | sDir("") | ||
24 | { | ||
25 | addHelpBanner("Build r?\n\n"); | ||
26 | addParam("file", 'f', &sFile, | ||
27 | "Set the input script, default: build.conf"); | ||
28 | addParam("info", 'i', &bInfo, | ||
29 | "Display useful info about the loaded config file.", NULL, "true" ); | ||
30 | addParam("chdir", 'C', &sDir, | ||
31 | "Change to the specified dir before doing anything else." ); | ||
32 | addParam("clean", 'c', &bCleanMode, | ||
33 | "Clean instead of checking the given action.", NULL, "true" ); | ||
34 | addParam('p', mkproc(Param::procViewPercent), | ||
35 | "Switch to percent view."); | ||
36 | addParam('P', mkproc(Param::procViewPlain), | ||
37 | "Switch to plain view."); | ||
38 | addParam("color", mkproc(Param::procColorPercent), | ||
39 | "Switch to colored percent view."); | ||
40 | addParam('m', mkproc(Param::procViewMake), | ||
41 | "Switch to 'make' style view."); | ||
42 | addParam("cache", &sCache, | ||
43 | "Set an alternative cache file, default: .build.cache" ); | ||
44 | addParam('d', &bDebug, | ||
45 | "Display debug info instead of building", NULL, "true" ); | ||
46 | addParam('D', &bPostDebug, | ||
47 | "Display debug info after building", NULL, "true" ); | ||
48 | addParam("help", mkproc(ParamProc::help), | ||
49 | "This help"); | ||
50 | //pViewer = new ViewerPlain; | ||
51 | } | ||
52 | |||
53 | virtual ~Param() | ||
54 | { | ||
55 | //delete pViewer; | ||
56 | } | ||
57 | |||
58 | virtual int cmdParam( int argc, char *argv[] ) | ||
59 | { | ||
60 | if( sAction.isSet() ) | ||
61 | { | ||
62 | printf("You can only specify one action per command line.\n\n"); | ||
63 | exit( 1 ); | ||
64 | } | ||
65 | sAction = argv[0]; | ||
66 | return 1; | ||
67 | } | ||
68 | |||
69 | int procViewPercent( int argc, char *argv[] ) | ||
70 | { | ||
71 | sView = "percent"; | ||
72 | } | ||
73 | |||
74 | int procViewPlain( int argc, char *argv[] ) | ||
75 | { | ||
76 | sView = "plain"; | ||
77 | } | ||
78 | |||
79 | int procViewMake( int argc, char *argv[] ) | ||
80 | { | ||
81 | sView = "make"; | ||
82 | } | ||
83 | |||
84 | int procColorPercent( int argc, char *argv[] ) | ||
85 | { | ||
86 | sView = "colorpct"; | ||
87 | } | ||
88 | |||
89 | Bu::FString sCache; | ||
90 | Bu::FString sFile; | ||
91 | Bu::FString sView; | ||
92 | Bu::FString sDir; | ||
93 | Bu::FString sAction; | ||
94 | //Viewer *pViewer; | ||
95 | bool bDebug; | ||
96 | bool bPostDebug; | ||
97 | bool bInfo; | ||
98 | bool bCleanMode; | ||
99 | |||
100 | private: | ||
101 | }; | ||
102 | |||
103 | int main( int argc, char *argv[] ) | ||
104 | { | ||
105 | Param prm; | ||
106 | prm.process( argc, argv ); | ||
107 | |||
108 | BuildParser bld; | ||
109 | Build *pBuild = NULL; | ||
110 | |||
111 | char *olddir = NULL; | ||
112 | |||
113 | try | ||
114 | { | ||
115 | if( prm.sDir != "" ) | ||
116 | { | ||
117 | olddir = new char[4096]; | ||
118 | getcwd( olddir, 4096 ); | ||
119 | chdir( prm.sDir.getStr() ); | ||
120 | } | ||
121 | |||
122 | pBuild = bld.load( prm.sFile.getStr() ); | ||
123 | pBuild->setCache( prm.sCache.getStr() ); | ||
124 | pBuild->setView( prm.sView.getStr() ); | ||
125 | if( prm.bCleanMode ) | ||
126 | pBuild->setMode( Action::actClean ); | ||
127 | |||
128 | if( prm.bInfo ) | ||
129 | { | ||
130 | pBuild->printInfo(); | ||
131 | delete pBuild; | ||
132 | if( olddir ) { chdir( olddir ); delete[] olddir; } | ||
133 | return 0; | ||
134 | } | ||
135 | if( prm.bDebug ) | ||
136 | { | ||
137 | printf("\n\n----------\nDebug dump\n----------\n"); | ||
138 | pBuild->debugDump(); | ||
139 | } | ||
140 | else | ||
141 | { | ||
142 | if( prm.sAction.isSet() ) | ||
143 | pBuild->execAction( prm.sAction.getStr() ); | ||
144 | else | ||
145 | pBuild->execAction(""); | ||
146 | } | ||
147 | if( prm.bPostDebug ) | ||
148 | { | ||
149 | printf("\n\n----------\nDebug dump\n----------\n"); | ||
150 | pBuild->debugDump(); | ||
151 | } | ||
152 | } | ||
153 | catch( BuildException &e ) | ||
154 | { | ||
155 | fputs( e.what(), stderr ); | ||
156 | fputs( "\n", stderr ); | ||
157 | if( prm.bPostDebug ) | ||
158 | { | ||
159 | printf("\n\n----------\nDebug dump\n----------\n"); | ||
160 | pBuild->debugDump(); | ||
161 | } | ||
162 | delete pBuild; | ||
163 | if( olddir ) { chdir( olddir ); delete[] olddir; } | ||
164 | return 1; | ||
165 | } | ||
166 | |||
167 | delete pBuild; | ||
168 | if( olddir ) { chdir( olddir ); delete[] olddir; } | ||
169 | |||
170 | return 0; | ||
171 | } | ||
172 | |||
diff --git a/src/parser.cpp b/src/parser.cpp deleted file mode 100644 index d9fd2d0..0000000 --- a/src/parser.cpp +++ /dev/null | |||
@@ -1,27 +0,0 @@ | |||
1 | #include "parser.h" | ||
2 | #include "build.h" | ||
3 | |||
4 | Parser::Parser() | ||
5 | { | ||
6 | } | ||
7 | |||
8 | Parser::~Parser() | ||
9 | { | ||
10 | } | ||
11 | |||
12 | void Parser::error( YYLTYPE *locp, const char *msg ) | ||
13 | { | ||
14 | fflush( stdout ); | ||
15 | throw BuildException("%s: %d.%d-%d.%d: %s", | ||
16 | file.c_str(), | ||
17 | locp->first_line, locp->first_column, | ||
18 | locp->last_line, locp->last_column, | ||
19 | msg ); | ||
20 | } | ||
21 | |||
22 | void Parser::error( const std::string &msg ) | ||
23 | { | ||
24 | fflush( stdout ); | ||
25 | throw BuildException("%s", msg.c_str() ); | ||
26 | } | ||
27 | |||
diff --git a/src/parser.h b/src/parser.h deleted file mode 100644 index 675e28b..0000000 --- a/src/parser.h +++ /dev/null | |||
@@ -1,40 +0,0 @@ | |||
1 | #ifndef PARSER_H | ||
2 | #define PARSER_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <string> | ||
6 | |||
7 | class Build; | ||
8 | |||
9 | #if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED) | ||
10 | typedef struct YYLTYPE | ||
11 | { | ||
12 | int first_line; | ||
13 | int first_column; | ||
14 | int last_line; | ||
15 | int last_column; | ||
16 | } YYLTYPE; | ||
17 | # define yyltype YYLTYPE /* obsolescent; will be withdrawn */ | ||
18 | # define YYLTYPE_IS_DECLARED 1 | ||
19 | # define YYLTYPE_IS_TRIVIAL 1 | ||
20 | #endif | ||
21 | |||
22 | class Parser | ||
23 | { | ||
24 | public: | ||
25 | Parser(); | ||
26 | virtual ~Parser(); | ||
27 | |||
28 | virtual void error( YYLTYPE *locp, const char *msg ); | ||
29 | virtual void error( const std::string &msg ); | ||
30 | |||
31 | virtual Build *load( const std::string &sFile ) = 0; | ||
32 | |||
33 | protected: | ||
34 | std::string file; | ||
35 | |||
36 | private: | ||
37 | |||
38 | }; | ||
39 | |||
40 | #endif | ||
diff --git a/src/perform.cpp b/src/perform.cpp deleted file mode 100644 index 25d54c7..0000000 --- a/src/perform.cpp +++ /dev/null | |||
@@ -1,26 +0,0 @@ | |||
1 | #include "perform.h" | ||
2 | #include "build.h" | ||
3 | |||
4 | Perform::Perform() | ||
5 | { | ||
6 | } | ||
7 | |||
8 | Perform::~Perform() | ||
9 | { | ||
10 | } | ||
11 | |||
12 | void Perform::addParam( const char *sParam ) | ||
13 | { | ||
14 | lParam.push_back( sParam ); | ||
15 | } | ||
16 | |||
17 | void Perform::copyData( Perform *pSrc, Build &bld, const StringList *cont, VarMap *mExtra ) | ||
18 | { | ||
19 | lParam.clear(); | ||
20 | for( std::list<std::string>::iterator i = pSrc->lParam.begin(); | ||
21 | i != pSrc->lParam.end(); i++ ) | ||
22 | { | ||
23 | lParam.push_back( bld.replVars( *i, cont, mExtra ) ); | ||
24 | } | ||
25 | } | ||
26 | |||
diff --git a/src/perform.h b/src/perform.h deleted file mode 100644 index 031e007..0000000 --- a/src/perform.h +++ /dev/null | |||
@@ -1,55 +0,0 @@ | |||
1 | #ifndef PERFORM_H | ||
2 | #define PERFORM_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <list> | ||
6 | #include <string> | ||
7 | #include <map> | ||
8 | |||
9 | typedef std::map<std::string,std::string> VarMap; | ||
10 | typedef std::list<std::string> StringList; | ||
11 | |||
12 | class Build; | ||
13 | |||
14 | class Perform | ||
15 | { | ||
16 | public: | ||
17 | Perform(); | ||
18 | virtual ~Perform(); | ||
19 | |||
20 | void addParam( const char *sParam ); | ||
21 | virtual Perform *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) = 0; | ||
22 | virtual void execute( Build &bld ) = 0; | ||
23 | void copyData( Perform *pSrc, Build &bld, const StringList *cont, VarMap *mExtra ); | ||
24 | std::string getTarget() | ||
25 | { | ||
26 | return sTarget; | ||
27 | } | ||
28 | void setTarget( std::string sTarget ) | ||
29 | { | ||
30 | this->sTarget = sTarget; | ||
31 | } | ||
32 | |||
33 | std::list<class Function *> &getReqFuncs() | ||
34 | { | ||
35 | return lReqFuncs; | ||
36 | } | ||
37 | |||
38 | void setRule( const std::string &sRule ) | ||
39 | { | ||
40 | this->sRule = sRule; | ||
41 | } | ||
42 | |||
43 | std::string &getRule() | ||
44 | { | ||
45 | return sRule; | ||
46 | } | ||
47 | |||
48 | protected: | ||
49 | std::list<std::string> lParam; | ||
50 | std::string sTarget; | ||
51 | std::string sRule; | ||
52 | std::list<class Function *> lReqFuncs; | ||
53 | }; | ||
54 | |||
55 | #endif | ||
diff --git a/src/performcommand.cpp b/src/performcommand.cpp deleted file mode 100644 index 65827c5..0000000 --- a/src/performcommand.cpp +++ /dev/null | |||
@@ -1,35 +0,0 @@ | |||
1 | #include "performcommand.h" | ||
2 | #include "bu/plugger.h" | ||
3 | #include "build.h" | ||
4 | #include "viewer.h" | ||
5 | |||
6 | #include <stdlib.h> | ||
7 | |||
8 | PluginInterface2(command, PerformCommand, Perform, "Mike Buland", 0, 1 ); | ||
9 | |||
10 | PerformCommand::PerformCommand() | ||
11 | { | ||
12 | } | ||
13 | |||
14 | PerformCommand::~PerformCommand() | ||
15 | { | ||
16 | } | ||
17 | |||
18 | Perform *PerformCommand::duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) | ||
19 | { | ||
20 | Perform *pRet = new PerformCommand(); | ||
21 | pRet->copyData( this, bld, cont, mExtra ); | ||
22 | return pRet; | ||
23 | } | ||
24 | |||
25 | void PerformCommand::execute( Build &bld ) | ||
26 | { | ||
27 | bld.getView()->executeCmd( lParam.front() ); | ||
28 | int n = system( lParam.front().c_str() ); | ||
29 | if( n != 0 ) | ||
30 | throw BuildException( | ||
31 | "Command exited with error code %d.", | ||
32 | WEXITSTATUS(n) | ||
33 | ); | ||
34 | } | ||
35 | |||
diff --git a/src/performcommand.h b/src/performcommand.h deleted file mode 100644 index 62bf61e..0000000 --- a/src/performcommand.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef PERFORM_COMMAND_H | ||
2 | #define PERFORM_COMMAND_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "perform.h" | ||
7 | |||
8 | class PerformCommand : public Perform | ||
9 | { | ||
10 | public: | ||
11 | PerformCommand(); | ||
12 | virtual ~PerformCommand(); | ||
13 | |||
14 | virtual Perform *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ); | ||
15 | virtual void execute( Build &bld ); | ||
16 | |||
17 | private: | ||
18 | |||
19 | }; | ||
20 | |||
21 | #endif | ||
diff --git a/src/performfactory.cpp b/src/performfactory.cpp deleted file mode 100644 index 6926a3b..0000000 --- a/src/performfactory.cpp +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | #include "performfactory.h" | ||
2 | |||
3 | extern struct Bu::PluginInfo command; | ||
4 | |||
5 | PerformFactory::PerformFactory() | ||
6 | { | ||
7 | registerBuiltinPlugin( &command ); | ||
8 | } | ||
9 | |||
10 | PerformFactory::~PerformFactory() | ||
11 | { | ||
12 | } | ||
diff --git a/src/performfactory.h b/src/performfactory.h deleted file mode 100644 index 435d9c6..0000000 --- a/src/performfactory.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #ifndef PERFORM_FACTORY_H | ||
2 | #define PERFORM_FACTORY_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "perform.h" | ||
7 | #include "bu/plugger.h" | ||
8 | #include "bu/singleton.h" | ||
9 | |||
10 | class PerformFactory : public Bu::Plugger<Perform>, public Bu::Singleton<PerformFactory> | ||
11 | { | ||
12 | public: | ||
13 | PerformFactory(); | ||
14 | virtual ~PerformFactory(); | ||
15 | |||
16 | private: | ||
17 | |||
18 | }; | ||
19 | |||
20 | #endif | ||
diff --git a/src/regexp.cpp b/src/regexp.cpp deleted file mode 100644 index 4370667..0000000 --- a/src/regexp.cpp +++ /dev/null | |||
@@ -1,78 +0,0 @@ | |||
1 | #include "regexp.h" | ||
2 | #include "build.h" // For BuildException | ||
3 | #include "bu/fstring.h" | ||
4 | |||
5 | RegExp::RegExp() : | ||
6 | bCompiled( false ), | ||
7 | aSubStr( NULL ) | ||
8 | { | ||
9 | } | ||
10 | |||
11 | RegExp::RegExp( const char *sSrc ) : | ||
12 | bCompiled( false ), | ||
13 | aSubStr( NULL ) | ||
14 | { | ||
15 | compile( sSrc ); | ||
16 | } | ||
17 | |||
18 | RegExp::~RegExp() | ||
19 | { | ||
20 | if( bCompiled ) | ||
21 | { | ||
22 | regfree( &re ); | ||
23 | delete[] aSubStr; | ||
24 | } | ||
25 | } | ||
26 | |||
27 | void RegExp::compile( const char *sSrc ) | ||
28 | { | ||
29 | if( bCompiled ) | ||
30 | { | ||
31 | regfree( &re ); | ||
32 | delete[] aSubStr; | ||
33 | bCompiled = false; | ||
34 | } | ||
35 | |||
36 | int nErr = regcomp( &re, sSrc, REG_EXTENDED|REG_NEWLINE ); | ||
37 | if( nErr ) | ||
38 | { | ||
39 | size_t length = regerror( nErr, &re, NULL, 0 ); | ||
40 | char *buffer = new char[length]; | ||
41 | (void) regerror( nErr, &re, buffer, length ); | ||
42 | Bu::FString s( buffer ); | ||
43 | delete[] buffer; | ||
44 | throw BuildException( s.getStr() ); | ||
45 | } | ||
46 | bCompiled = true; | ||
47 | this->sSrc = sSrc; | ||
48 | |||
49 | nSubStr = re.re_nsub+1; | ||
50 | aSubStr = new regmatch_t[nSubStr]; | ||
51 | } | ||
52 | |||
53 | int RegExp::getNumSubStrings() | ||
54 | { | ||
55 | return nSubStr; | ||
56 | } | ||
57 | |||
58 | bool RegExp::execute( const char *sSrc ) | ||
59 | { | ||
60 | sTest = sSrc; | ||
61 | if( regexec( &re, sSrc, nSubStr, aSubStr, 0 ) ) | ||
62 | return false; | ||
63 | return true; | ||
64 | } | ||
65 | |||
66 | std::pair<int,int> RegExp::getSubStringRange( int nIndex ) | ||
67 | { | ||
68 | return std::pair<int,int>( aSubStr[nIndex].rm_so, aSubStr[nIndex].rm_eo ); | ||
69 | } | ||
70 | |||
71 | std::string RegExp::getSubString( int nIndex ) | ||
72 | { | ||
73 | return std::string( | ||
74 | sTest.getStr()+aSubStr[nIndex].rm_so, | ||
75 | aSubStr[nIndex].rm_eo - aSubStr[nIndex].rm_so | ||
76 | ); | ||
77 | } | ||
78 | |||
diff --git a/src/regexp.h b/src/regexp.h deleted file mode 100644 index a5fab14..0000000 --- a/src/regexp.h +++ /dev/null | |||
@@ -1,36 +0,0 @@ | |||
1 | #ifndef REG_EXP_H | ||
2 | #define REG_EXP_H | ||
3 | |||
4 | #include <string> | ||
5 | #include <stdint.h> | ||
6 | #include <regex.h> | ||
7 | #include <utility> | ||
8 | #include "bu/fstring.h" | ||
9 | |||
10 | class RegExp | ||
11 | { | ||
12 | public: | ||
13 | RegExp(); | ||
14 | RegExp( const char *sSrc ); | ||
15 | virtual ~RegExp(); | ||
16 | |||
17 | void compile( const char *sSrc ); | ||
18 | int getNumSubStrings(); | ||
19 | bool execute( const char *sSrc ); | ||
20 | std::pair<int,int> getSubStringRange( int nIndex ); | ||
21 | std::string getSubString( int nIndex ); | ||
22 | const char *getSource() | ||
23 | { | ||
24 | return sSrc.getStr(); | ||
25 | } | ||
26 | |||
27 | private: | ||
28 | Bu::FString sSrc; | ||
29 | Bu::FString sTest; | ||
30 | regex_t re; | ||
31 | bool bCompiled; | ||
32 | int nSubStr; | ||
33 | regmatch_t *aSubStr; | ||
34 | }; | ||
35 | |||
36 | #endif | ||
diff --git a/src/rule.cpp b/src/rule.cpp deleted file mode 100644 index 7924ba4..0000000 --- a/src/rule.cpp +++ /dev/null | |||
@@ -1,159 +0,0 @@ | |||
1 | #include "rule.h" | ||
2 | #include "build.h" | ||
3 | #include "function.h" | ||
4 | #include "perform.h" | ||
5 | |||
6 | #include <set> | ||
7 | |||
8 | Rule::Rule() : | ||
9 | pAggregate( NULL ) | ||
10 | { | ||
11 | } | ||
12 | |||
13 | Rule::~Rule() | ||
14 | { | ||
15 | } | ||
16 | |||
17 | StringList Rule::execute( Build &bld, StringList &lInput, PerformList &lPerf, bool bFirstOnly ) | ||
18 | { | ||
19 | StringList lOutput; | ||
20 | |||
21 | RuleList rl = bld.findChainRules( this ); | ||
22 | |||
23 | for( RuleList::iterator i = rl.begin(); i != rl.end(); i++ ) | ||
24 | { | ||
25 | (*i)->setTarget( sTarget ); | ||
26 | StringList tmp = (*i)->execute( bld, lInput, lPerf, bFirstOnly ); | ||
27 | lOutput.insert( lOutput.end(), tmp.begin(), tmp.end() ); | ||
28 | } | ||
29 | |||
30 | StringList lMine; | ||
31 | for( FunctionList::iterator i = lMatches.begin(); i != lMatches.end(); i++ ) | ||
32 | { | ||
33 | (*i)->execute( &bld, lInput, lMine ); | ||
34 | } | ||
35 | |||
36 | StringList lTmp; | ||
37 | for( FunctionList::iterator i = lFilter.begin(); i != lFilter.end(); i++ ) | ||
38 | { | ||
39 | (*i)->execute( &bld, lMine, lTmp ); | ||
40 | lMine.swap( lTmp ); | ||
41 | lTmp.clear(); | ||
42 | } | ||
43 | |||
44 | bool bHasProduces = true; | ||
45 | if( lProduces.empty() ) | ||
46 | { | ||
47 | bHasProduces = false; | ||
48 | lProduces.push_back( sTarget ); | ||
49 | } | ||
50 | |||
51 | { | ||
52 | std::set<std::string> sUsed; | ||
53 | for( StringList::iterator i = lInput.begin(); i != lInput.end(); i++ ) | ||
54 | { | ||
55 | isuck: if( i == lInput.end() ) break; | ||
56 | if( sUsed.find( *i ) != sUsed.end() ) | ||
57 | { | ||
58 | StringList::iterator j = i; | ||
59 | j++; | ||
60 | lInput.erase( i ); | ||
61 | i = j; | ||
62 | goto isuck; | ||
63 | } | ||
64 | sUsed.insert( *i ); | ||
65 | } | ||
66 | } | ||
67 | |||
68 | StringList lNewOut; | ||
69 | if( pAggregate ) | ||
70 | { | ||
71 | VarMap mTmp; | ||
72 | std::string target = lProduces.front();//, lProduces.front(), NULL ).c_str(); | ||
73 | mTmp["target"] = target; | ||
74 | lNewOut.push_back( target ); | ||
75 | |||
76 | for( StringList::iterator i = lMine.begin(); i != lMine.end(); i++ ) | ||
77 | { | ||
78 | bld.addRequires( target, (*i) ); | ||
79 | } | ||
80 | for( StringList::iterator i = lReqStrs.begin(); | ||
81 | i != lReqStrs.end(); i++ ) | ||
82 | { | ||
83 | bld.addRequires( target, (*i) ); | ||
84 | } | ||
85 | |||
86 | StringList lTmp; | ||
87 | pAggregate->execute( &bld, lMine, lTmp ); | ||
88 | mTmp["match"] = lTmp.front(); | ||
89 | |||
90 | for( PerformList::iterator k = lPerform.begin(); | ||
91 | k != lPerform.end(); k++ ) | ||
92 | { | ||
93 | StringList cont; | ||
94 | cont.push_front( target ); | ||
95 | Perform *p = (*k)->duplicate( bld, &cont, &mTmp ); | ||
96 | p->setTarget( target ); | ||
97 | p->setRule( sName ); | ||
98 | //p->setReqFuncs( &lReqFuncs ); | ||
99 | lPerf.push_back( p ); | ||
100 | } | ||
101 | } | ||
102 | else | ||
103 | { | ||
104 | for( StringList::iterator i = lMine.begin(); i != lMine.end(); i++ ) | ||
105 | { | ||
106 | for( StringList::iterator j = lProduces.begin(); | ||
107 | j != lProduces.end(); j++ ) | ||
108 | //StringList::iterator j = lProduces.begin(); | ||
109 | { | ||
110 | VarMap mTmp; | ||
111 | StringList cont; | ||
112 | cont.push_front( sTarget ); | ||
113 | cont.push_front( (*i) ); | ||
114 | std::string target = bld.replVars( (*j), &cont, NULL ); | ||
115 | mTmp["target"] = target; | ||
116 | lNewOut.push_back( target ); | ||
117 | mTmp["match"] = (*i); | ||
118 | bld.addRequires( target, (*i) ); | ||
119 | for( StringList::iterator k = lReqStrs.begin(); | ||
120 | k != lReqStrs.end(); k++ ) | ||
121 | { | ||
122 | bld.addRequires( target, (*k) ); | ||
123 | } | ||
124 | for( PerformList::iterator k = lPerform.begin(); | ||
125 | k != lPerform.end(); k++ ) | ||
126 | { | ||
127 | StringList cont2; | ||
128 | cont2.push_front( sTarget ); | ||
129 | cont2.push_front( (*i) ); | ||
130 | cont2.push_front( target ); | ||
131 | Perform *p = (*k)->duplicate( bld, &cont2, &mTmp ); | ||
132 | p->setTarget( target ); | ||
133 | p->setRule( sName ); | ||
134 | for( FunctionList::iterator f = lReqFuncs.begin(); | ||
135 | f != lReqFuncs.end(); f++ ) | ||
136 | { | ||
137 | p->getReqFuncs().push_back( | ||
138 | (*f)->duplicate( bld, &cont2, &mTmp ) | ||
139 | ); | ||
140 | } | ||
141 | lPerf.push_back( p ); | ||
142 | } | ||
143 | if( bFirstOnly ) | ||
144 | break; | ||
145 | } | ||
146 | } | ||
147 | } | ||
148 | |||
149 | lInput.insert( lInput.end(), lNewOut.begin(), lNewOut.end() ); | ||
150 | lOutput.insert( lOutput.end(), lNewOut.begin(), lNewOut.end() ); | ||
151 | |||
152 | if( bHasProduces == false ) | ||
153 | { | ||
154 | lProduces.clear(); | ||
155 | } | ||
156 | |||
157 | return lOutput; | ||
158 | } | ||
159 | |||
diff --git a/src/rule.h b/src/rule.h deleted file mode 100644 index c6e8336..0000000 --- a/src/rule.h +++ /dev/null | |||
@@ -1,86 +0,0 @@ | |||
1 | #ifndef RULE_H | ||
2 | #define RULE_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <string> | ||
6 | #include <list> | ||
7 | |||
8 | class Function; | ||
9 | class Perform; | ||
10 | class Build; | ||
11 | |||
12 | typedef std::list<Function *> FunctionList; | ||
13 | typedef std::list<Perform *> PerformList; | ||
14 | typedef std::list<std::string> StringList; | ||
15 | |||
16 | class Rule | ||
17 | { | ||
18 | public: | ||
19 | Rule(); | ||
20 | virtual ~Rule(); | ||
21 | |||
22 | StringList execute( Build &bld, StringList &lInput, PerformList &lPerf, bool bFirstOnly=true ); | ||
23 | |||
24 | void setTarget( const std::string &sTarget ) | ||
25 | { | ||
26 | this->sTarget = sTarget; | ||
27 | } | ||
28 | |||
29 | std::string getName() | ||
30 | { | ||
31 | return sName; | ||
32 | } | ||
33 | |||
34 | void setName( const std::string &sName ) | ||
35 | { | ||
36 | this->sName = sName; | ||
37 | } | ||
38 | |||
39 | FunctionList &getFilterList() | ||
40 | { | ||
41 | return lFilter; | ||
42 | } | ||
43 | |||
44 | PerformList &getPerformList() | ||
45 | { | ||
46 | return lPerform; | ||
47 | } | ||
48 | |||
49 | FunctionList &getMatchesList() | ||
50 | { | ||
51 | return lMatches; | ||
52 | } | ||
53 | |||
54 | StringList &getProducesList() | ||
55 | { | ||
56 | return lProduces; | ||
57 | } | ||
58 | |||
59 | void setAggregate( Function *pAggregate ) | ||
60 | { | ||
61 | this->pAggregate = pAggregate; | ||
62 | } | ||
63 | |||
64 | StringList &getReqStrList() | ||
65 | { | ||
66 | return lReqStrs; | ||
67 | } | ||
68 | |||
69 | FunctionList &getReqFuncList() | ||
70 | { | ||
71 | return lReqFuncs; | ||
72 | } | ||
73 | |||
74 | private: | ||
75 | std::string sName; | ||
76 | FunctionList lMatches; | ||
77 | FunctionList lFilter; | ||
78 | PerformList lPerform; | ||
79 | StringList lProduces; | ||
80 | std::string sTarget; | ||
81 | Function *pAggregate; | ||
82 | StringList lReqStrs; | ||
83 | FunctionList lReqFuncs; | ||
84 | }; | ||
85 | |||
86 | #endif | ||
diff --git a/src/stringproc.cpp b/src/stringproc.cpp deleted file mode 100644 index 23abca9..0000000 --- a/src/stringproc.cpp +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | #include "stringproc.h" | ||
2 | |||
3 | StringProc::StringProc( Build *pBld ) : | ||
4 | pBld( pBld ) | ||
5 | { | ||
6 | } | ||
7 | |||
8 | StringProc::~StringProc() | ||
9 | { | ||
10 | } | ||
11 | |||
12 | |||
diff --git a/src/stringproc.h b/src/stringproc.h deleted file mode 100644 index d408601..0000000 --- a/src/stringproc.h +++ /dev/null | |||
@@ -1,33 +0,0 @@ | |||
1 | #ifndef STRING_PROC_H | ||
2 | #define STRING_PROC_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <string> | ||
6 | #include <map> | ||
7 | #include <list> | ||
8 | |||
9 | class Build; | ||
10 | |||
11 | typedef std::map<std::string,std::string> VarMap; | ||
12 | typedef std::list<std::string> StringList; | ||
13 | |||
14 | class StringProc | ||
15 | { | ||
16 | public: | ||
17 | StringProc( Build *pBld ); | ||
18 | virtual ~StringProc(); | ||
19 | |||
20 | virtual std::string replVars( const std::string &sSrc, const StringList *pCont, VarMap *mExtra )=0; | ||
21 | |||
22 | protected: | ||
23 | Build *getBuild() | ||
24 | { | ||
25 | return pBld; | ||
26 | } | ||
27 | |||
28 | private: | ||
29 | Build *pBld; | ||
30 | |||
31 | }; | ||
32 | |||
33 | #endif | ||
diff --git a/src/stringprocbuild.cpp b/src/stringprocbuild.cpp deleted file mode 100644 index 419d819..0000000 --- a/src/stringprocbuild.cpp +++ /dev/null | |||
@@ -1,54 +0,0 @@ | |||
1 | #include "stringprocbuild.h" | ||
2 | #include "build.h" | ||
3 | |||
4 | StringProcBuild::StringProcBuild( Build *pBld ) : | ||
5 | StringProc( pBld ) | ||
6 | { | ||
7 | } | ||
8 | |||
9 | StringProcBuild::~StringProcBuild() | ||
10 | { | ||
11 | } | ||
12 | |||
13 | std::string StringProcBuild::replVars( const std::string &sSrc, const StringList *pCont, VarMap *mExtra ) | ||
14 | { | ||
15 | std::string sDes, sBuf; | ||
16 | int nMode = 0; | ||
17 | |||
18 | int nLen = sSrc.size(); | ||
19 | for( int j = 0; j < nLen; j++ ) | ||
20 | { | ||
21 | if( sSrc[j] == '{' ) | ||
22 | { | ||
23 | sBuf = ""; | ||
24 | nMode = 1; | ||
25 | } | ||
26 | else if( nMode == 0 ) | ||
27 | { | ||
28 | sDes += sSrc[j]; | ||
29 | } | ||
30 | else if( nMode == 1 ) | ||
31 | { | ||
32 | if( sSrc[j] == '}' ) | ||
33 | { | ||
34 | sDes += getBuild()->getVar( pCont, sBuf, mExtra ); | ||
35 | nMode = 0; | ||
36 | } | ||
37 | else | ||
38 | { | ||
39 | sBuf += sSrc[j]; | ||
40 | } | ||
41 | } | ||
42 | } | ||
43 | |||
44 | if( nMode == 1 ) | ||
45 | { | ||
46 | throw BuildException( | ||
47 | "Unterminated variable replacement found: \"%s\"", | ||
48 | sSrc.c_str() | ||
49 | ); | ||
50 | } | ||
51 | |||
52 | return sDes; | ||
53 | } | ||
54 | |||
diff --git a/src/stringprocbuild.h b/src/stringprocbuild.h deleted file mode 100644 index f3cf3b4..0000000 --- a/src/stringprocbuild.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #ifndef STRING_PROC_BUILD_H | ||
2 | #define STRING_PROC_BUILD_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "stringproc.h" | ||
7 | |||
8 | class StringProcBuild : public StringProc | ||
9 | { | ||
10 | public: | ||
11 | StringProcBuild( Build *pBld ); | ||
12 | virtual ~StringProcBuild(); | ||
13 | |||
14 | virtual std::string replVars( const std::string &sSrc, const StringList *pCont, VarMap *mExtra ); | ||
15 | |||
16 | private: | ||
17 | |||
18 | }; | ||
19 | |||
20 | #endif | ||
diff --git a/src/target.cpp b/src/target.cpp deleted file mode 100644 index 3150c38..0000000 --- a/src/target.cpp +++ /dev/null | |||
@@ -1,31 +0,0 @@ | |||
1 | #include "target.h" | ||
2 | #include "build.h" | ||
3 | #include "viewer.h" | ||
4 | |||
5 | Target::Target() : | ||
6 | bRun( false ) | ||
7 | { | ||
8 | } | ||
9 | |||
10 | Target::~Target() | ||
11 | { | ||
12 | } | ||
13 | |||
14 | void Target::run( Action::eAction nAct, Build &bld ) | ||
15 | { | ||
16 | bRun = true; | ||
17 | |||
18 | bld.getView()->beginCommand( nAct, sName ); | ||
19 | switch( nAct ) | ||
20 | { | ||
21 | case Action::actCheck: | ||
22 | check( bld ); | ||
23 | break; | ||
24 | |||
25 | case Action::actClean: | ||
26 | clean( bld ); | ||
27 | break; | ||
28 | } | ||
29 | bld.getView()->endCommand(); | ||
30 | } | ||
31 | |||
diff --git a/src/target.h b/src/target.h deleted file mode 100644 index f51e0e0..0000000 --- a/src/target.h +++ /dev/null | |||
@@ -1,63 +0,0 @@ | |||
1 | #ifndef TARGET_H | ||
2 | #define TARGET_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include <string> | ||
7 | #include <list> | ||
8 | |||
9 | #include "action.h" | ||
10 | |||
11 | typedef std::list<std::string> StringList; | ||
12 | |||
13 | class Build; | ||
14 | |||
15 | class Target | ||
16 | { | ||
17 | public: | ||
18 | Target(); | ||
19 | virtual ~Target(); | ||
20 | |||
21 | void run( Action::eAction nAct, Build &bld ); | ||
22 | virtual void check( Build &bld ) = 0; | ||
23 | virtual void clean( Build &bld ) = 0; | ||
24 | |||
25 | void setName( const std::string &sName ) | ||
26 | { | ||
27 | this->sName = sName; | ||
28 | } | ||
29 | |||
30 | std::string getName() | ||
31 | { | ||
32 | return sName; | ||
33 | } | ||
34 | |||
35 | void setRule( const std::string &sRule ) | ||
36 | { | ||
37 | this->sRule = sRule; | ||
38 | } | ||
39 | |||
40 | std::string getRule() | ||
41 | { | ||
42 | return sRule; | ||
43 | } | ||
44 | |||
45 | StringList &getInput() | ||
46 | { | ||
47 | return lInput; | ||
48 | } | ||
49 | |||
50 | bool wasRun() | ||
51 | { | ||
52 | return bRun; | ||
53 | } | ||
54 | |||
55 | |||
56 | private: | ||
57 | std::string sName; | ||
58 | std::string sRule; | ||
59 | StringList lInput; | ||
60 | bool bRun; | ||
61 | }; | ||
62 | |||
63 | #endif | ||
diff --git a/src/targetfactory.cpp b/src/targetfactory.cpp deleted file mode 100644 index a0bc0b0..0000000 --- a/src/targetfactory.cpp +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | #include "targetfactory.h" | ||
2 | |||
3 | extern struct Bu::PluginInfo file; | ||
4 | |||
5 | TargetFactory::TargetFactory() | ||
6 | { | ||
7 | registerBuiltinPlugin( &file ); | ||
8 | } | ||
9 | |||
10 | TargetFactory::~TargetFactory() | ||
11 | { | ||
12 | } | ||
diff --git a/src/targetfactory.h b/src/targetfactory.h deleted file mode 100644 index ee1fc2a..0000000 --- a/src/targetfactory.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #ifndef TARGET_FACTORY_H | ||
2 | #define TARGET_FACTORY_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "bu/plugger.h" | ||
7 | #include "bu/singleton.h" | ||
8 | #include "target.h" | ||
9 | |||
10 | class TargetFactory : public Bu::Plugger<Target>, public Bu::Singleton<TargetFactory> | ||
11 | { | ||
12 | public: | ||
13 | TargetFactory(); | ||
14 | virtual ~TargetFactory(); | ||
15 | |||
16 | private: | ||
17 | |||
18 | }; | ||
19 | |||
20 | #endif | ||
diff --git a/src/targetfile.cpp b/src/targetfile.cpp deleted file mode 100644 index 0e2d43e..0000000 --- a/src/targetfile.cpp +++ /dev/null | |||
@@ -1,158 +0,0 @@ | |||
1 | #include "targetfile.h" | ||
2 | #include "bu/plugger.h" | ||
3 | #include "rule.h" | ||
4 | #include "build.h" | ||
5 | #include "perform.h" | ||
6 | #include "function.h" | ||
7 | #include "viewer.h" | ||
8 | |||
9 | #include <set> | ||
10 | |||
11 | PluginInterface2(file, TargetFile, Target, "Mike Buland", 0, 1 ); | ||
12 | |||
13 | TargetFile::TargetFile() | ||
14 | { | ||
15 | } | ||
16 | |||
17 | TargetFile::~TargetFile() | ||
18 | { | ||
19 | } | ||
20 | |||
21 | void TargetFile::check( Build &bld ) | ||
22 | { | ||
23 | Rule *pRule = bld.getRule( getRule() ); | ||
24 | PerformList lPerf; | ||
25 | pRule->setTarget( getName() ); | ||
26 | StringList lFinal = pRule->execute( bld, getInput(), lPerf ); | ||
27 | |||
28 | { | ||
29 | std::set<std::string> sUsed; | ||
30 | for( PerformList::iterator i = lPerf.begin(); i != lPerf.end(); i++ ) | ||
31 | { | ||
32 | isuck: if( i == lPerf.end() ) break; | ||
33 | if( sUsed.find( (*i)->getTarget() ) != sUsed.end() ) | ||
34 | { | ||
35 | PerformList::iterator j = i; | ||
36 | j++; | ||
37 | delete *i; | ||
38 | lPerf.erase( i ); | ||
39 | i = j; | ||
40 | goto isuck; | ||
41 | } | ||
42 | sUsed.insert( (*i)->getTarget() ); | ||
43 | } | ||
44 | } | ||
45 | |||
46 | bld.getView()->beginPerforms( lPerf.size() ); | ||
47 | |||
48 | for( PerformList::iterator i = lPerf.begin(); i != lPerf.end(); i++ ) | ||
49 | { | ||
50 | StringList &reqs = bld.getRequires( (*i)->getTarget() ); | ||
51 | for( StringList::iterator j = reqs.begin(); j != reqs.end(); j++ ) | ||
52 | { | ||
53 | bld.chainTarget( *j ); | ||
54 | } | ||
55 | } | ||
56 | |||
57 | for( PerformList::iterator i = lPerf.begin(); i != lPerf.end(); i++ ) | ||
58 | { | ||
59 | time_t tTarget = getTime( bld, (*i)->getTarget() ); | ||
60 | StringList &reqs = bld.getRequires( (*i)->getTarget() ); | ||
61 | bool bExtras = false, bBuilt = false, bUpdate = false; | ||
62 | for( StringList::iterator j = reqs.begin(); j != reqs.end(); j++ ) | ||
63 | { | ||
64 | //bld.chainTarget( *j ); | ||
65 | if( getTime( bld, *j ) > tTarget ) | ||
66 | { | ||
67 | if( bUpdate == false ) | ||
68 | bld.getView()->skipRequiresCheck( false, (*i)->getTarget() ) ; | ||
69 | bld.getView()->beginPerform( *i ); | ||
70 | (*i)->execute( bld ); | ||
71 | bld.getView()->endPerform(); | ||
72 | updateTime( (*i)->getTarget() ); | ||
73 | bBuilt = true; | ||
74 | break; | ||
75 | } | ||
76 | if( bExtras == false ) | ||
77 | { | ||
78 | StringList::iterator jj = j; | ||
79 | jj++; | ||
80 | if( jj == reqs.end() ) | ||
81 | { | ||
82 | if( !bld.getCached( (*i)->getTarget(), tTarget, reqs ) ) | ||
83 | { | ||
84 | bld.updateCache( (*i)->getTarget(), (*i)->getReqFuncs(), reqs ); | ||
85 | bUpdate = true; | ||
86 | } | ||
87 | bExtras = true; | ||
88 | } | ||
89 | } | ||
90 | } | ||
91 | if( bBuilt == false ) | ||
92 | { | ||
93 | if( bUpdate == false ) | ||
94 | { | ||
95 | bld.getView()->skipRequiresCheck( false, (*i)->getTarget() ); | ||
96 | } | ||
97 | bld.getView()->skipPerform( *i ); | ||
98 | } | ||
99 | } | ||
100 | |||
101 | bld.getView()->endPerforms(); | ||
102 | } | ||
103 | |||
104 | void TargetFile::clean( Build &bld ) | ||
105 | { | ||
106 | Rule *pRule = bld.getRule( getRule() ); | ||
107 | PerformList lPerf; | ||
108 | pRule->setTarget( getName() ); | ||
109 | StringList lFinal = pRule->execute( bld, getInput(), lPerf, false ); | ||
110 | |||
111 | bld.getView()->beginPerforms( lPerf.size() ); | ||
112 | |||
113 | for( PerformList::iterator i = lPerf.begin(); i != lPerf.end(); i++ ) | ||
114 | { | ||
115 | if( access( (*i)->getTarget().c_str(), W_OK ) == 0 ) | ||
116 | { | ||
117 | (*i)->setRule("clean"); | ||
118 | bld.getView()->beginPerform( *i ); | ||
119 | unlink( (*i)->getTarget().c_str() ); | ||
120 | bld.getView()->endPerform(); | ||
121 | } | ||
122 | } | ||
123 | |||
124 | bld.getView()->endPerforms(); | ||
125 | } | ||
126 | |||
127 | time_t TargetFile::getTime( Build &bld, std::string str ) | ||
128 | { | ||
129 | std::map<std::string, time_t>::iterator i = mTimes.find( str ); | ||
130 | if( i != mTimes.end() ) | ||
131 | { | ||
132 | //nCache++; | ||
133 | //bld.view().beginRequiresCheck( true, str.c_str() ); | ||
134 | //bld.view().endRequiresCheck(); | ||
135 | return (*i).second; | ||
136 | } | ||
137 | |||
138 | //bld.view().beginRequiresCheck( false, str.c_str() ); | ||
139 | struct stat st; | ||
140 | stat( str.c_str(), &st ); | ||
141 | |||
142 | mTimes[str] = st.st_mtime; | ||
143 | |||
144 | //nNew++; | ||
145 | |||
146 | //bld.view().endRequiresCheck(); | ||
147 | |||
148 | return st.st_mtime; | ||
149 | } | ||
150 | |||
151 | void TargetFile::updateTime( std::string str ) | ||
152 | { | ||
153 | struct stat st; | ||
154 | stat( str.c_str(), &st ); | ||
155 | |||
156 | mTimes[str] = st.st_mtime; | ||
157 | } | ||
158 | |||
diff --git a/src/targetfile.h b/src/targetfile.h deleted file mode 100644 index 368e252..0000000 --- a/src/targetfile.h +++ /dev/null | |||
@@ -1,28 +0,0 @@ | |||
1 | #ifndef TARGET_FILE_H | ||
2 | #define TARGET_FILE_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <map> | ||
6 | #include <sys/types.h> | ||
7 | #include <sys/stat.h> | ||
8 | #include <unistd.h> | ||
9 | |||
10 | #include "target.h" | ||
11 | |||
12 | class TargetFile : public Target | ||
13 | { | ||
14 | public: | ||
15 | TargetFile(); | ||
16 | virtual ~TargetFile(); | ||
17 | |||
18 | virtual void check( Build &bld ); | ||
19 | virtual void clean( Build &bld ); | ||
20 | |||
21 | time_t getTime( class Build &bld, std::string str ); | ||
22 | void updateTime( std::string str ); | ||
23 | |||
24 | private: | ||
25 | std::map<std::string, time_t> mTimes; | ||
26 | }; | ||
27 | |||
28 | #endif | ||
diff --git a/src/viewer.cpp b/src/viewer.cpp deleted file mode 100644 index 1f3b26f..0000000 --- a/src/viewer.cpp +++ /dev/null | |||
@@ -1,70 +0,0 @@ | |||
1 | #include "viewer.h" | ||
2 | |||
3 | Viewer::Viewer() | ||
4 | { | ||
5 | } | ||
6 | |||
7 | Viewer::~Viewer() | ||
8 | { | ||
9 | } | ||
10 | |||
11 | void Viewer::beginAction( const std::string &sName, int nCommands ) | ||
12 | { | ||
13 | } | ||
14 | |||
15 | void Viewer::endAction() | ||
16 | { | ||
17 | } | ||
18 | |||
19 | void Viewer::beginCommand( Action::eAction nAct, const std::string &sTarget ) | ||
20 | { | ||
21 | } | ||
22 | |||
23 | void Viewer::beginPerforms( int nCount ) | ||
24 | { | ||
25 | } | ||
26 | |||
27 | void Viewer::endPerforms() | ||
28 | { | ||
29 | } | ||
30 | |||
31 | void Viewer::endCommand() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | void Viewer::beginRequiresCheck( bool bCached, const std::string &sName ) | ||
36 | { | ||
37 | } | ||
38 | |||
39 | void Viewer::endRequiresCheck() | ||
40 | { | ||
41 | } | ||
42 | |||
43 | void Viewer::skipRequiresCheck( bool bCached, const std::string &sName ) | ||
44 | { | ||
45 | } | ||
46 | |||
47 | void Viewer::beginPerform( Perform *pPerform ) | ||
48 | { | ||
49 | } | ||
50 | |||
51 | void Viewer::endPerform() | ||
52 | { | ||
53 | } | ||
54 | |||
55 | void Viewer::skipPerform( Perform *pPerform ) | ||
56 | { | ||
57 | } | ||
58 | |||
59 | void Viewer::beginExecute() | ||
60 | { | ||
61 | } | ||
62 | |||
63 | void Viewer::endExecute() | ||
64 | { | ||
65 | } | ||
66 | |||
67 | void Viewer::executeCmd( const std::string &sCmd ) | ||
68 | { | ||
69 | } | ||
70 | |||
diff --git a/src/viewer.h b/src/viewer.h deleted file mode 100644 index 7ee6b21..0000000 --- a/src/viewer.h +++ /dev/null | |||
@@ -1,38 +0,0 @@ | |||
1 | #ifndef VIEWER_H | ||
2 | #define VIEWER_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <string> | ||
6 | #include "action.h" | ||
7 | |||
8 | class Perform; | ||
9 | |||
10 | class Viewer | ||
11 | { | ||
12 | public: | ||
13 | Viewer(); | ||
14 | virtual ~Viewer(); | ||
15 | |||
16 | virtual void beginAction( const std::string &sName, int nCommands ); | ||
17 | virtual void endAction(); | ||
18 | |||
19 | virtual void beginCommand( Action::eAction nAct, const std::string &sTarget ); | ||
20 | virtual void endCommand(); | ||
21 | virtual void beginPerforms( int nCount ); | ||
22 | virtual void endPerforms(); | ||
23 | |||
24 | virtual void beginRequiresCheck( bool bCached, const std::string &sName ); | ||
25 | virtual void endRequiresCheck(); | ||
26 | virtual void skipRequiresCheck( bool bCached, const std::string &sName ); | ||
27 | virtual void beginPerform( Perform *pPerform ); | ||
28 | virtual void endPerform(); | ||
29 | virtual void skipPerform( Perform *pPerform ); | ||
30 | virtual void beginExecute(); | ||
31 | virtual void endExecute(); | ||
32 | virtual void executeCmd( const std::string &sCmd ); | ||
33 | |||
34 | private: | ||
35 | |||
36 | }; | ||
37 | |||
38 | #endif | ||
diff --git a/src/viewercolorpct.cpp b/src/viewercolorpct.cpp deleted file mode 100644 index 5bc3cba..0000000 --- a/src/viewercolorpct.cpp +++ /dev/null | |||
@@ -1,129 +0,0 @@ | |||
1 | #include "viewercolorpct.h" | ||
2 | #include "perform.h" | ||
3 | #include "bu/plugger.h" | ||
4 | #include <math.h> | ||
5 | |||
6 | PluginInterface2( colorpct, ViewerColorPct, Viewer, "Mike Buland", 0, 1 ); | ||
7 | |||
8 | ViewerColorPct::ViewerColorPct() : | ||
9 | bRunClean( true ) | ||
10 | { | ||
11 | } | ||
12 | |||
13 | ViewerColorPct::~ViewerColorPct() | ||
14 | { | ||
15 | } | ||
16 | |||
17 | void ViewerColorPct::beginCommand( Action::eAction nAct, const std::string &sTarget ) | ||
18 | { | ||
19 | Cmd cmd; | ||
20 | if( sCmd.empty() ) | ||
21 | cmd.nLevel = 0; | ||
22 | else | ||
23 | cmd.nLevel = sCmd.front().nLevel+1; | ||
24 | |||
25 | cmd.bCmdClean = true; | ||
26 | cmd.sTarget = sTarget; | ||
27 | |||
28 | sCmd.push_front( cmd ); | ||
29 | } | ||
30 | |||
31 | void ViewerColorPct::endCommand() | ||
32 | { | ||
33 | if( sCmd.front().bCmdClean == false ) | ||
34 | printf("\n"); | ||
35 | sCmd.pop_front(); | ||
36 | if(sCmd.empty()) | ||
37 | iCC++; | ||
38 | } | ||
39 | |||
40 | void ViewerColorPct::indent() | ||
41 | { | ||
42 | if( sCmd.empty() ) return; | ||
43 | int jmax = sCmd.front().nLevel; | ||
44 | for( int j = 0; j < jmax; j++ ) | ||
45 | { | ||
46 | printf(" "); | ||
47 | } | ||
48 | } | ||
49 | |||
50 | void ViewerColorPct::printHead() | ||
51 | { | ||
52 | if( sCmd.front().bCmdClean == true ) | ||
53 | { | ||
54 | bRunClean = false; | ||
55 | sCmd.front().bCmdClean = false; | ||
56 | indent(); | ||
57 | if(sCmd.size() > 1) | ||
58 | printf("\033[37;22m--- \033[36m%s\033[37m ---\033[0m\n", sCmd.front().sTarget.c_str() ); | ||
59 | else | ||
60 | printf("\033[37;1m--- [\033[32m%d/%d\033[37m] \033[36m%s\033[37m ---\033[0m\n", iCC, iTC, sCmd.front().sTarget.c_str() ); | ||
61 | } | ||
62 | } | ||
63 | |||
64 | void ViewerColorPct::printPerform(const char *sRule, const char *sTarget) | ||
65 | { | ||
66 | int iPct = (int)round( | ||
67 | ((double)sCmd.front().iCP/(double)sCmd.front().iTP)*100.0 | ||
68 | ); | ||
69 | if(sCmd.size() > 1) | ||
70 | printf( "\033[37;22m[\033[32m%3d%%\033[37m] \033[35m%8s\033[37m: %s\033[0m\n", iPct, sRule, sTarget ); | ||
71 | else | ||
72 | printf( "\033[37;1m[\033[32m%3d%%\033[37m] \033[35m%8s\033[37m: %s\033[0m\n", iPct, sRule, sTarget ); | ||
73 | } | ||
74 | |||
75 | void ViewerColorPct::beginRequiresCheck( bool bCached, const std::string &sName ) | ||
76 | { | ||
77 | printHead(); | ||
78 | indent(); | ||
79 | printPerform("deps", sName.c_str()); | ||
80 | } | ||
81 | |||
82 | void ViewerColorPct::endRequiresCheck() | ||
83 | { | ||
84 | sCmd.front().iCP++; | ||
85 | } | ||
86 | |||
87 | void ViewerColorPct::skipRequiresCheck( bool bCached, const std::string &sName ) | ||
88 | { | ||
89 | sCmd.front().iCP++; | ||
90 | } | ||
91 | |||
92 | void ViewerColorPct::beginPerform( Perform *pPerform ) | ||
93 | { | ||
94 | printHead(); | ||
95 | indent(); | ||
96 | printPerform(pPerform->getRule().c_str(), pPerform->getTarget().c_str()); | ||
97 | } | ||
98 | |||
99 | void ViewerColorPct::endPerform() | ||
100 | { | ||
101 | sCmd.front().iCP++; | ||
102 | } | ||
103 | |||
104 | void ViewerColorPct::skipPerform( Perform *pPerform ) | ||
105 | { | ||
106 | sCmd.front().iCP++; | ||
107 | } | ||
108 | |||
109 | void ViewerColorPct::beginPerforms( int nCount ) | ||
110 | { | ||
111 | sCmd.front().iTP = nCount*2; | ||
112 | sCmd.front().iCP = 1; | ||
113 | } | ||
114 | |||
115 | void ViewerColorPct::beginAction( const std::string &sName, int nCommands ) | ||
116 | { | ||
117 | iTC = nCommands; | ||
118 | iCC = 1; | ||
119 | } | ||
120 | |||
121 | void ViewerColorPct::endAction() | ||
122 | { | ||
123 | if( bRunClean == true ) | ||
124 | { | ||
125 | printf("Nothing to be done.\n\n"); | ||
126 | } | ||
127 | printf("\033[0m"); | ||
128 | } | ||
129 | |||
diff --git a/src/viewercolorpct.h b/src/viewercolorpct.h deleted file mode 100644 index dc810c1..0000000 --- a/src/viewercolorpct.h +++ /dev/null | |||
@@ -1,49 +0,0 @@ | |||
1 | #ifndef VIEWER_COLOR_PCT_H | ||
2 | #define VIEWER_COLOR_PCT_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <list> | ||
6 | #include "viewer.h" | ||
7 | |||
8 | class ViewerColorPct : public Viewer | ||
9 | { | ||
10 | public: | ||
11 | ViewerColorPct(); | ||
12 | virtual ~ViewerColorPct(); | ||
13 | |||
14 | virtual void beginCommand( Action::eAction nAct, const std::string &sTarget ); | ||
15 | virtual void endCommand(); | ||
16 | |||
17 | virtual void beginRequiresCheck( bool bCached, const std::string &sName ); | ||
18 | virtual void endRequiresCheck(); | ||
19 | virtual void beginPerform( Perform *pPerform ); | ||
20 | virtual void endPerform(); | ||
21 | virtual void beginPerforms( int nCount ); | ||
22 | |||
23 | virtual void skipRequiresCheck( bool bCached, const std::string &sName ); | ||
24 | virtual void skipPerform( Perform *pPerform ); | ||
25 | |||
26 | virtual void beginAction( const std::string &sName, int nCommands ); | ||
27 | |||
28 | virtual void endAction(); | ||
29 | |||
30 | void printPerform(const char *sRule, const char *sTarget); | ||
31 | void printHead(); | ||
32 | void indent(); | ||
33 | |||
34 | private: | ||
35 | int iTC, iCC; | ||
36 | |||
37 | bool bRunClean; | ||
38 | typedef struct | ||
39 | { | ||
40 | int nLevel; | ||
41 | bool bCmdClean; | ||
42 | std::string sTarget; | ||
43 | int iTP, iCP; | ||
44 | } Cmd; | ||
45 | typedef std::list<Cmd> CmdStack; | ||
46 | CmdStack sCmd; | ||
47 | }; | ||
48 | |||
49 | #endif | ||
diff --git a/src/viewerfactory.cpp b/src/viewerfactory.cpp deleted file mode 100644 index 5726e56..0000000 --- a/src/viewerfactory.cpp +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #include "viewerfactory.h" | ||
2 | |||
3 | extern struct Bu::PluginInfo plain; | ||
4 | extern struct Bu::PluginInfo percent; | ||
5 | extern struct Bu::PluginInfo make; | ||
6 | extern struct Bu::PluginInfo plainpct; | ||
7 | extern struct Bu::PluginInfo colorpct; | ||
8 | |||
9 | ViewerFactory::ViewerFactory() | ||
10 | { | ||
11 | registerBuiltinPlugin( &plain ); | ||
12 | registerBuiltinPlugin( &percent ); | ||
13 | registerBuiltinPlugin( &make ); | ||
14 | registerBuiltinPlugin( &plainpct ); | ||
15 | registerBuiltinPlugin( &colorpct ); | ||
16 | } | ||
17 | |||
18 | ViewerFactory::~ViewerFactory() | ||
19 | { | ||
20 | } | ||
diff --git a/src/viewerfactory.h b/src/viewerfactory.h deleted file mode 100644 index ffa5b31..0000000 --- a/src/viewerfactory.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #ifndef VIEWER_FACTORY_H | ||
2 | #define VIEWER_FACTORY_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "viewer.h" | ||
7 | #include "bu/plugger.h" | ||
8 | #include "bu/singleton.h" | ||
9 | |||
10 | class ViewerFactory : public Bu::Plugger<Viewer>, public Bu::Singleton<ViewerFactory> | ||
11 | { | ||
12 | public: | ||
13 | ViewerFactory(); | ||
14 | virtual ~ViewerFactory(); | ||
15 | |||
16 | private: | ||
17 | |||
18 | }; | ||
19 | |||
20 | #endif | ||
diff --git a/src/viewermake.cpp b/src/viewermake.cpp deleted file mode 100644 index ed11b5f..0000000 --- a/src/viewermake.cpp +++ /dev/null | |||
@@ -1,19 +0,0 @@ | |||
1 | #include "viewermake.h" | ||
2 | #include "perform.h" | ||
3 | #include "bu/plugger.h" | ||
4 | |||
5 | PluginInterface2( make, ViewerMake, Viewer, "Mike Buland", 0, 1 ); | ||
6 | |||
7 | ViewerMake::ViewerMake() | ||
8 | { | ||
9 | } | ||
10 | |||
11 | ViewerMake::~ViewerMake() | ||
12 | { | ||
13 | } | ||
14 | |||
15 | void ViewerMake::executeCmd( const std::string &sCmd ) | ||
16 | { | ||
17 | printf("%s\n", sCmd.c_str() ); | ||
18 | } | ||
19 | |||
diff --git a/src/viewermake.h b/src/viewermake.h deleted file mode 100644 index 11b8741..0000000 --- a/src/viewermake.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #ifndef VIEWER_MAKE_H | ||
2 | #define VIEWER_MAKE_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "viewer.h" | ||
7 | |||
8 | class ViewerMake : public Viewer | ||
9 | { | ||
10 | public: | ||
11 | ViewerMake(); | ||
12 | virtual ~ViewerMake(); | ||
13 | |||
14 | virtual void executeCmd( const std::string &sCmd ); | ||
15 | |||
16 | private: | ||
17 | |||
18 | }; | ||
19 | |||
20 | #endif | ||
diff --git a/src/viewerpercent.cpp b/src/viewerpercent.cpp deleted file mode 100644 index baca82a..0000000 --- a/src/viewerpercent.cpp +++ /dev/null | |||
@@ -1,129 +0,0 @@ | |||
1 | #include "viewerpercent.h" | ||
2 | #include "perform.h" | ||
3 | #include "bu/plugger.h" | ||
4 | |||
5 | #include <sys/ioctl.h> | ||
6 | #include <stdio.h> | ||
7 | #include <stdlib.h> | ||
8 | |||
9 | PluginInterface2( percent, ViewerPercent, Viewer, "Mike Buland", 0, 1 ); | ||
10 | |||
11 | ViewerPercent::ViewerPercent() : | ||
12 | nWidth( 15 ) | ||
13 | { | ||
14 | } | ||
15 | |||
16 | ViewerPercent::~ViewerPercent() | ||
17 | { | ||
18 | } | ||
19 | |||
20 | void ViewerPercent::beginAction( const std::string &sName, int nCommands ) | ||
21 | { | ||
22 | nTotalCommands = nCommands; | ||
23 | nCurCommand = 0; | ||
24 | } | ||
25 | |||
26 | void ViewerPercent::endAction() | ||
27 | { | ||
28 | } | ||
29 | |||
30 | void ViewerPercent::beginCommand( Action::eAction nAct, const std::string &sTarget ) | ||
31 | { | ||
32 | this->sTarget = sTarget; | ||
33 | nCurCommand++; | ||
34 | |||
35 | struct winsize scrn; | ||
36 | |||
37 | ioctl( fileno( stdout ), TIOCGWINSZ, &scrn ); | ||
38 | |||
39 | nTermWidth = scrn.ws_col; | ||
40 | } | ||
41 | |||
42 | void ViewerPercent::endCommand() | ||
43 | { | ||
44 | printf("\n"); | ||
45 | fflush(stdout); | ||
46 | } | ||
47 | |||
48 | void ViewerPercent::beginPerforms( int nCount ) | ||
49 | { | ||
50 | nTotalPerforms = nCount; | ||
51 | nCurPerform = 0; | ||
52 | nLastLen = 0; | ||
53 | } | ||
54 | |||
55 | void ViewerPercent::endPerforms() | ||
56 | { | ||
57 | nCurPerform = nTotalPerforms; | ||
58 | |||
59 | printPercent(""); | ||
60 | } | ||
61 | |||
62 | void ViewerPercent::beginRequiresCheck( bool bCached, const std::string &sName ) | ||
63 | { | ||
64 | } | ||
65 | |||
66 | void ViewerPercent::endRequiresCheck() | ||
67 | { | ||
68 | } | ||
69 | |||
70 | void ViewerPercent::beginPerform( Perform *pPerform ) | ||
71 | { | ||
72 | nCurPerform++; | ||
73 | printPercent( pPerform->getTarget() ); | ||
74 | } | ||
75 | |||
76 | void ViewerPercent::printPercent( const std::string &sCur ) | ||
77 | { | ||
78 | char buf[2048]; | ||
79 | char *bi = buf; | ||
80 | int nLen = sprintf( buf, "\r[%d/%d] %s [", | ||
81 | nCurCommand, nTotalCommands, | ||
82 | sTarget.c_str() ); | ||
83 | bi += nLen; | ||
84 | int jmax = nCurPerform*nWidth/nTotalPerforms; | ||
85 | for( int j = 0; j < jmax; j++ ) | ||
86 | { | ||
87 | *bi = '#'; | ||
88 | bi++; | ||
89 | } | ||
90 | jmax = nWidth-jmax; | ||
91 | for( int j = 0; j < jmax; j++ ) | ||
92 | { | ||
93 | *bi = ' '; | ||
94 | bi++; | ||
95 | } | ||
96 | nLen += nWidth; | ||
97 | nLen += sprintf( bi, "] %-2d%% %s", | ||
98 | nCurPerform*100/nTotalPerforms, | ||
99 | sCur.c_str() ); | ||
100 | bi = buf + nLen; | ||
101 | if( (int)(bi - buf) >= nTermWidth ) | ||
102 | { | ||
103 | nLastLen = nLen = nTermWidth; | ||
104 | strcpy( buf+nTermWidth-3, "..."); | ||
105 | } | ||
106 | else | ||
107 | { | ||
108 | if( nLastLen > nLen ) | ||
109 | { | ||
110 | jmax = nLastLen-nLen; | ||
111 | for( int j = 0; j < jmax; j++ ) | ||
112 | { | ||
113 | *bi = ' '; | ||
114 | bi++; | ||
115 | } | ||
116 | } | ||
117 | nLastLen = nLen; | ||
118 | *bi = '\0'; | ||
119 | } | ||
120 | |||
121 | fputs( buf, stdout ); | ||
122 | |||
123 | fflush( stdout ); | ||
124 | } | ||
125 | |||
126 | void ViewerPercent::endPerform() | ||
127 | { | ||
128 | } | ||
129 | |||
diff --git a/src/viewerpercent.h b/src/viewerpercent.h deleted file mode 100644 index d40ca1b..0000000 --- a/src/viewerpercent.h +++ /dev/null | |||
@@ -1,39 +0,0 @@ | |||
1 | #ifndef VIEWER_PERCENT_H | ||
2 | #define VIEWER_PERCENT_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "viewer.h" | ||
7 | |||
8 | class ViewerPercent : public Viewer | ||
9 | { | ||
10 | public: | ||
11 | ViewerPercent(); | ||
12 | virtual ~ViewerPercent(); | ||
13 | |||
14 | virtual void beginCommand( Action::eAction nAct, const std::string &sTarget ); | ||
15 | virtual void endCommand(); | ||
16 | |||
17 | virtual void beginRequiresCheck( bool bCached, const std::string &sName ); | ||
18 | virtual void endRequiresCheck(); | ||
19 | virtual void beginPerform( Perform *pPerform ); | ||
20 | virtual void endPerform(); | ||
21 | virtual void beginPerforms( int nCount ); | ||
22 | virtual void endPerforms(); | ||
23 | virtual void beginAction( const std::string &sName, int nCommands ); | ||
24 | virtual void endAction(); | ||
25 | |||
26 | void printPercent( const std::string &sCur ); | ||
27 | |||
28 | private: | ||
29 | int nTotalCommands; | ||
30 | int nCurCommand; | ||
31 | int nTotalPerforms; | ||
32 | int nCurPerform; | ||
33 | std::string sTarget; | ||
34 | int nLastLen; | ||
35 | int nWidth; | ||
36 | int nTermWidth; | ||
37 | }; | ||
38 | |||
39 | #endif | ||
diff --git a/src/viewerplain.cpp b/src/viewerplain.cpp deleted file mode 100644 index 3e65f21..0000000 --- a/src/viewerplain.cpp +++ /dev/null | |||
@@ -1,87 +0,0 @@ | |||
1 | #include "viewerplain.h" | ||
2 | #include "perform.h" | ||
3 | #include "bu/plugger.h" | ||
4 | |||
5 | PluginInterface2( plain, ViewerPlain, Viewer, "Mike Buland", 0, 1 ); | ||
6 | |||
7 | ViewerPlain::ViewerPlain() : | ||
8 | bRunClean( true ) | ||
9 | { | ||
10 | } | ||
11 | |||
12 | ViewerPlain::~ViewerPlain() | ||
13 | { | ||
14 | } | ||
15 | |||
16 | void ViewerPlain::beginCommand( Action::eAction nAct, const std::string &sTarget ) | ||
17 | { | ||
18 | Cmd cmd; | ||
19 | if( sCmd.empty() ) | ||
20 | cmd.nLevel = 0; | ||
21 | else | ||
22 | cmd.nLevel = sCmd.front().nLevel+1; | ||
23 | |||
24 | cmd.bCmdClean = true; | ||
25 | cmd.sTarget = sTarget; | ||
26 | |||
27 | sCmd.push_front( cmd ); | ||
28 | } | ||
29 | |||
30 | void ViewerPlain::endCommand() | ||
31 | { | ||
32 | if( sCmd.front().bCmdClean == false ) | ||
33 | printf("\n"); | ||
34 | sCmd.pop_front(); | ||
35 | } | ||
36 | |||
37 | void ViewerPlain::indent() | ||
38 | { | ||
39 | if( sCmd.empty() ) return; | ||
40 | int jmax = sCmd.front().nLevel; | ||
41 | for( int j = 0; j < jmax; j++ ) | ||
42 | { | ||
43 | printf(" "); | ||
44 | } | ||
45 | } | ||
46 | |||
47 | void ViewerPlain::printHead() | ||
48 | { | ||
49 | if( sCmd.front().bCmdClean == true ) | ||
50 | { | ||
51 | bRunClean = false; | ||
52 | sCmd.front().bCmdClean = false; | ||
53 | indent(); | ||
54 | printf("--- %s ---\n", sCmd.front().sTarget.c_str() ); | ||
55 | } | ||
56 | } | ||
57 | |||
58 | void ViewerPlain::beginRequiresCheck( bool bCached, const std::string &sName ) | ||
59 | { | ||
60 | printHead(); | ||
61 | indent(); | ||
62 | printf(" deps: %s\n", sName.c_str() ); | ||
63 | } | ||
64 | |||
65 | void ViewerPlain::endRequiresCheck() | ||
66 | { | ||
67 | } | ||
68 | |||
69 | void ViewerPlain::beginPerform( Perform *pPerform ) | ||
70 | { | ||
71 | printHead(); | ||
72 | indent(); | ||
73 | printf(" %8s: %s\n", pPerform->getRule().c_str(), pPerform->getTarget().c_str() ); | ||
74 | } | ||
75 | |||
76 | void ViewerPlain::endPerform() | ||
77 | { | ||
78 | } | ||
79 | |||
80 | void ViewerPlain::endAction() | ||
81 | { | ||
82 | if( bRunClean == true ) | ||
83 | { | ||
84 | printf("Nothing to be done.\n\n"); | ||
85 | } | ||
86 | } | ||
87 | |||
diff --git a/src/viewerplain.h b/src/viewerplain.h deleted file mode 100644 index 118ae80..0000000 --- a/src/viewerplain.h +++ /dev/null | |||
@@ -1,39 +0,0 @@ | |||
1 | #ifndef VIEWER_PLAIN_H | ||
2 | #define VIEWER_PLAIN_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <list> | ||
6 | #include "viewer.h" | ||
7 | |||
8 | class ViewerPlain : public Viewer | ||
9 | { | ||
10 | public: | ||
11 | ViewerPlain(); | ||
12 | virtual ~ViewerPlain(); | ||
13 | |||
14 | virtual void beginCommand( Action::eAction nAct, const std::string &sTarget ); | ||
15 | virtual void endCommand(); | ||
16 | |||
17 | virtual void beginRequiresCheck( bool bCached, const std::string &sName ); | ||
18 | virtual void endRequiresCheck(); | ||
19 | virtual void beginPerform( Perform *pPerform ); | ||
20 | virtual void endPerform(); | ||
21 | |||
22 | virtual void endAction(); | ||
23 | |||
24 | void printHead(); | ||
25 | void indent(); | ||
26 | |||
27 | private: | ||
28 | bool bRunClean; | ||
29 | typedef struct | ||
30 | { | ||
31 | int nLevel; | ||
32 | bool bCmdClean; | ||
33 | std::string sTarget; | ||
34 | } Cmd; | ||
35 | typedef std::list<Cmd> CmdStack; | ||
36 | CmdStack sCmd; | ||
37 | }; | ||
38 | |||
39 | #endif | ||
diff --git a/src/viewerplainpct.cpp b/src/viewerplainpct.cpp deleted file mode 100644 index 4d9fa7b..0000000 --- a/src/viewerplainpct.cpp +++ /dev/null | |||
@@ -1,128 +0,0 @@ | |||
1 | #include "viewerplainpct.h" | ||
2 | #include "perform.h" | ||
3 | #include "bu/plugger.h" | ||
4 | #include "math.h" | ||
5 | |||
6 | PluginInterface2( plainpct, ViewerPlainPct, Viewer, "Mike Buland", 0, 1 ); | ||
7 | |||
8 | ViewerPlainPct::ViewerPlainPct() : | ||
9 | bRunClean( true ) | ||
10 | { | ||
11 | } | ||
12 | |||
13 | ViewerPlainPct::~ViewerPlainPct() | ||
14 | { | ||
15 | } | ||
16 | |||
17 | void ViewerPlainPct::beginCommand( Action::eAction nAct, const std::string &sTarget ) | ||
18 | { | ||
19 | Cmd cmd; | ||
20 | if( sCmd.empty() ) | ||
21 | cmd.nLevel = 0; | ||
22 | else | ||
23 | cmd.nLevel = sCmd.front().nLevel+1; | ||
24 | |||
25 | cmd.bCmdClean = true; | ||
26 | cmd.sTarget = sTarget; | ||
27 | |||
28 | sCmd.push_front( cmd ); | ||
29 | } | ||
30 | |||
31 | void ViewerPlainPct::endCommand() | ||
32 | { | ||
33 | if( sCmd.front().bCmdClean == false ) | ||
34 | printf("\n"); | ||
35 | sCmd.pop_front(); | ||
36 | if(sCmd.empty()) | ||
37 | iCC++; | ||
38 | } | ||
39 | |||
40 | void ViewerPlainPct::indent() | ||
41 | { | ||
42 | if( sCmd.empty() ) return; | ||
43 | int jmax = sCmd.front().nLevel; | ||
44 | for( int j = 0; j < jmax; j++ ) | ||
45 | { | ||
46 | printf(" "); | ||
47 | } | ||
48 | } | ||
49 | |||
50 | void ViewerPlainPct::printHead() | ||
51 | { | ||
52 | if( sCmd.front().bCmdClean == true ) | ||
53 | { | ||
54 | bRunClean = false; | ||
55 | sCmd.front().bCmdClean = false; | ||
56 | indent(); | ||
57 | if(sCmd.size() > 1) | ||
58 | printf("--- %s ---\n", sCmd.front().sTarget.c_str() ); | ||
59 | else | ||
60 | printf("--- [%d/%d] %s ---\n", iCC, iTC, sCmd.front().sTarget.c_str() ); | ||
61 | } | ||
62 | } | ||
63 | |||
64 | void ViewerPlainPct::printPerform(const char *sRule, const char *sTarget) | ||
65 | { | ||
66 | int iPct = (int)round( | ||
67 | ((double)sCmd.front().iCP/(double)sCmd.front().iTP)*100.0 | ||
68 | ); | ||
69 | if(sCmd.size() > 1) | ||
70 | printf( "[%3d%%] %8s: %s\n", iPct, sRule, sTarget ); | ||
71 | else | ||
72 | printf( "[%3d%%] %8s: %s\n", iPct, sRule, sTarget ); | ||
73 | } | ||
74 | |||
75 | void ViewerPlainPct::beginRequiresCheck( bool bCached, const std::string &sName ) | ||
76 | { | ||
77 | printHead(); | ||
78 | indent(); | ||
79 | printPerform("deps", sName.c_str()); | ||
80 | } | ||
81 | |||
82 | void ViewerPlainPct::endRequiresCheck() | ||
83 | { | ||
84 | sCmd.front().iCP++; | ||
85 | } | ||
86 | |||
87 | void ViewerPlainPct::skipRequiresCheck( bool bCached, const std::string &sName ) | ||
88 | { | ||
89 | sCmd.front().iCP++; | ||
90 | } | ||
91 | |||
92 | void ViewerPlainPct::beginPerform( Perform *pPerform ) | ||
93 | { | ||
94 | printHead(); | ||
95 | indent(); | ||
96 | printPerform(pPerform->getRule().c_str(), pPerform->getTarget().c_str()); | ||
97 | } | ||
98 | |||
99 | void ViewerPlainPct::endPerform() | ||
100 | { | ||
101 | sCmd.front().iCP++; | ||
102 | } | ||
103 | |||
104 | void ViewerPlainPct::skipPerform( Perform *pPerform ) | ||
105 | { | ||
106 | sCmd.front().iCP++; | ||
107 | } | ||
108 | |||
109 | void ViewerPlainPct::beginPerforms( int nCount ) | ||
110 | { | ||
111 | sCmd.front().iTP = nCount*2; | ||
112 | sCmd.front().iCP = 1; | ||
113 | } | ||
114 | |||
115 | void ViewerPlainPct::beginAction( const std::string &sName, int nCommands ) | ||
116 | { | ||
117 | iTC = nCommands; | ||
118 | iCC = 1; | ||
119 | } | ||
120 | |||
121 | void ViewerPlainPct::endAction() | ||
122 | { | ||
123 | if( bRunClean == true ) | ||
124 | { | ||
125 | printf("Nothing to be done.\n\n"); | ||
126 | } | ||
127 | } | ||
128 | |||
diff --git a/src/viewerplainpct.h b/src/viewerplainpct.h deleted file mode 100644 index 63bc00d..0000000 --- a/src/viewerplainpct.h +++ /dev/null | |||
@@ -1,49 +0,0 @@ | |||
1 | #ifndef VIEWER_PLAIN_PCT_H | ||
2 | #define VIEWER_PLAIN_PCT_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <list> | ||
6 | #include "viewer.h" | ||
7 | |||
8 | class ViewerPlainPct : public Viewer | ||
9 | { | ||
10 | public: | ||
11 | ViewerPlainPct(); | ||
12 | virtual ~ViewerPlainPct(); | ||
13 | |||
14 | virtual void beginCommand( Action::eAction nAct, const std::string &sTarget ); | ||
15 | virtual void endCommand(); | ||
16 | |||
17 | virtual void beginRequiresCheck( bool bCached, const std::string &sName ); | ||
18 | virtual void endRequiresCheck(); | ||
19 | virtual void beginPerform( Perform *pPerform ); | ||
20 | virtual void endPerform(); | ||
21 | virtual void beginPerforms( int nCount ); | ||
22 | |||
23 | virtual void skipRequiresCheck( bool bCached, const std::string &sName ); | ||
24 | virtual void skipPerform( Perform *pPerform ); | ||
25 | |||
26 | virtual void beginAction( const std::string &sName, int nCommands ); | ||
27 | |||
28 | virtual void endAction(); | ||
29 | |||
30 | void printPerform(const char *sRule, const char *sTarget); | ||
31 | void printHead(); | ||
32 | void indent(); | ||
33 | |||
34 | private: | ||
35 | int iTC, iCC; | ||
36 | |||
37 | bool bRunClean; | ||
38 | typedef struct | ||
39 | { | ||
40 | int nLevel; | ||
41 | bool bCmdClean; | ||
42 | std::string sTarget; | ||
43 | int iTP, iCP; | ||
44 | } Cmd; | ||
45 | typedef std::list<Cmd> CmdStack; | ||
46 | CmdStack sCmd; | ||
47 | }; | ||
48 | |||
49 | #endif | ||