diff options
Diffstat (limited to '')
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 | ||
