diff options
Diffstat (limited to '')
| -rw-r--r-- | src/build.h | 5 | ||||
| -rw-r--r-- | src/buildparser.cpp | 35 | ||||
| -rw-r--r-- | src/buildparser.h | 5 | ||||
| -rw-r--r-- | src/functiondirectoriesin.cpp | 22 | ||||
| -rw-r--r-- | src/functionfactory.cpp | 2 | ||||
| -rw-r--r-- | src/functiontargets.cpp | 35 | ||||
| -rw-r--r-- | src/functiontargets.h | 21 |
7 files changed, 119 insertions, 6 deletions
diff --git a/src/build.h b/src/build.h index 31c8bde..a35b8e2 100644 --- a/src/build.h +++ b/src/build.h | |||
| @@ -61,6 +61,11 @@ public: | |||
| 61 | return pView; | 61 | return pView; |
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | TargetMap &getTargetMap() | ||
| 65 | { | ||
| 66 | return mTarget; | ||
| 67 | } | ||
| 68 | |||
| 64 | private: | 69 | private: |
| 65 | TargetMap mTarget; | 70 | TargetMap mTarget; |
| 66 | ReqMap mRequires; | 71 | ReqMap mRequires; |
diff --git a/src/buildparser.cpp b/src/buildparser.cpp index 6c3337f..04147d8 100644 --- a/src/buildparser.cpp +++ b/src/buildparser.cpp | |||
| @@ -129,7 +129,7 @@ void BuildParser::filterList() | |||
| 129 | } | 129 | } |
| 130 | } | 130 | } |
| 131 | 131 | ||
| 132 | StringList BuildParser::buildToStringList( const BuildList &lSrc, const StringList &lIn ) | 132 | StringList BuildParser::buildToStringList( const BuildList &lSrc, const StringList &lIn, Build *pPass ) |
| 133 | { | 133 | { |
| 134 | StringList lOut; | 134 | StringList lOut; |
| 135 | 135 | ||
| @@ -137,7 +137,28 @@ StringList BuildParser::buildToStringList( const BuildList &lSrc, const StringLi | |||
| 137 | { | 137 | { |
| 138 | if( (*i).second ) | 138 | if( (*i).second ) |
| 139 | { | 139 | { |
| 140 | (*i).second->execute( NULL, lIn, lOut ); | 140 | (*i).second->execute( pPass, lIn, lOut ); |
| 141 | } | ||
| 142 | else | ||
| 143 | { | ||
| 144 | lOut.push_back( (*i).first ); | ||
| 145 | } | ||
| 146 | } | ||
| 147 | |||
| 148 | return lOut; | ||
| 149 | } | ||
| 150 | |||
| 151 | StringList BuildParser::buildToStringListDup( const BuildList &lSrc, const StringList &lIn, Build &bld, const std::string &sCont, VarMap *mExtra, Build *pPass ) | ||
| 152 | { | ||
| 153 | StringList lOut; | ||
| 154 | |||
| 155 | for( BuildList::const_iterator i = lSrc.begin(); i != lSrc.end(); i++ ) | ||
| 156 | { | ||
| 157 | if( (*i).second ) | ||
| 158 | { | ||
| 159 | Function *pTmp = (*i).second->duplicate( bld, sCont, mExtra ); | ||
| 160 | pTmp->execute( pPass, lIn, lOut ); | ||
| 161 | delete pTmp; | ||
| 141 | } | 162 | } |
| 142 | else | 163 | else |
| 143 | { | 164 | { |
| @@ -384,8 +405,12 @@ Build *BuildParser::genBuild() | |||
| 384 | pTarget->setName( *j ); | 405 | pTarget->setName( *j ); |
| 385 | pTarget->setRule( (*i).second.sRule ); | 406 | pTarget->setRule( (*i).second.sRule ); |
| 386 | 407 | ||
| 387 | StringList lInputs = buildToStringList( | 408 | VarMap mExtra; |
| 388 | (*i).second.lInput, StringList() | 409 | mExtra["target"] = (*j); |
| 410 | |||
| 411 | StringList lInputs = buildToStringListDup( | ||
| 412 | (*i).second.lInput, StringList(), | ||
| 413 | *bld, *j, &mExtra | ||
| 389 | ); | 414 | ); |
| 390 | pTarget->getInput().insert( | 415 | pTarget->getInput().insert( |
| 391 | pTarget->getInput().end(), | 416 | pTarget->getInput().end(), |
| @@ -480,7 +505,7 @@ Build *BuildParser::genBuild() | |||
| 480 | j != (*i).second.end(); j++ ) | 505 | j != (*i).second.end(); j++ ) |
| 481 | { | 506 | { |
| 482 | StringList lWhat = buildToStringList( | 507 | StringList lWhat = buildToStringList( |
| 483 | (*j).second, StringList() | 508 | (*j).second, StringList(), bld |
| 484 | ); | 509 | ); |
| 485 | 510 | ||
| 486 | for( StringList::iterator k = lWhat.begin(); | 511 | for( StringList::iterator k = lWhat.begin(); |
diff --git a/src/buildparser.h b/src/buildparser.h index dda2d80..3c79a5b 100644 --- a/src/buildparser.h +++ b/src/buildparser.h | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | #include <string> | 5 | #include <string> |
| 6 | #include <list> | 6 | #include <list> |
| 7 | #include <utility> | 7 | #include <utility> |
| 8 | #include <map> | ||
| 8 | #include "build.tab.h" | 9 | #include "build.tab.h" |
| 9 | #include "parser.h" | 10 | #include "parser.h" |
| 10 | 11 | ||
| @@ -23,6 +24,7 @@ YY_DECL; | |||
| 23 | typedef std::list<std::string> StringList; | 24 | typedef std::list<std::string> StringList; |
| 24 | typedef std::list<Function *> FunctionList; | 25 | typedef std::list<Function *> FunctionList; |
| 25 | typedef std::list<Perform *> PerformList; | 26 | typedef std::list<Perform *> PerformList; |
| 27 | typedef std::map<std::string,std::string> VarMap; | ||
| 26 | 28 | ||
| 27 | template<class tx, class ty, class tz> | 29 | template<class tx, class ty, class tz> |
| 28 | class Triplet | 30 | class Triplet |
| @@ -115,7 +117,8 @@ public: // List functions | |||
| 115 | void addListFunc(); | 117 | void addListFunc(); |
| 116 | void filterList(); | 118 | void filterList(); |
| 117 | 119 | ||
| 118 | StringList buildToStringList( const BuildList &lSrc, const StringList &lIn ); | 120 | StringList buildToStringList( const BuildList &lSrc, const StringList &lIn, Build *pPass=NULL ); |
| 121 | StringList buildToStringListDup( const BuildList &lSrc, const StringList &lIn, Build &bld, const std::string &sCont, VarMap *mExtra, Build *pPass=NULL ); | ||
| 119 | 122 | ||
| 120 | private: // List variables | 123 | private: // List variables |
| 121 | BuildList lTmp; | 124 | BuildList lTmp; |
diff --git a/src/functiondirectoriesin.cpp b/src/functiondirectoriesin.cpp index 0e90dbc..105e98d 100644 --- a/src/functiondirectoriesin.cpp +++ b/src/functiondirectoriesin.cpp | |||
| @@ -1,3 +1,5 @@ | |||
| 1 | #include <dirent.h> | ||
| 2 | |||
| 1 | #include "functiondirectoriesin.h" | 3 | #include "functiondirectoriesin.h" |
| 2 | #include "plugger.h" | 4 | #include "plugger.h" |
| 3 | 5 | ||
| @@ -13,6 +15,26 @@ FunctionDirectoriesIn::~FunctionDirectoriesIn() | |||
| 13 | 15 | ||
| 14 | void FunctionDirectoriesIn::execute( Build *bld, const StringList &lInput, StringList &lOutput ) | 16 | void FunctionDirectoriesIn::execute( Build *bld, const StringList &lInput, StringList &lOutput ) |
| 15 | { | 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 = lParams.front() + "/"; | ||
| 28 | |||
| 29 | while( (e = readdir( d )) ) | ||
| 30 | { | ||
| 31 | if( e->d_type == DT_DIR ) | ||
| 32 | { | ||
| 33 | lOutput.push_back( e->d_name ); | ||
| 34 | } | ||
| 35 | } | ||
| 36 | |||
| 37 | closedir( d ); | ||
| 16 | } | 38 | } |
| 17 | 39 | ||
| 18 | Function *FunctionDirectoriesIn::duplicate( Build &bld, const std::string &cont, VarMap *mExtra ) | 40 | Function *FunctionDirectoriesIn::duplicate( Build &bld, const std::string &cont, VarMap *mExtra ) |
diff --git a/src/functionfactory.cpp b/src/functionfactory.cpp index b78cfcb..4a2cd15 100644 --- a/src/functionfactory.cpp +++ b/src/functionfactory.cpp | |||
| @@ -5,6 +5,7 @@ extern struct PluginInfo filesIn; | |||
| 5 | extern struct PluginInfo regexp; | 5 | extern struct PluginInfo regexp; |
| 6 | extern struct PluginInfo toString; | 6 | extern struct PluginInfo toString; |
| 7 | extern struct PluginInfo commandToList; | 7 | extern struct PluginInfo commandToList; |
| 8 | extern struct PluginInfo targets; | ||
| 8 | 9 | ||
| 9 | FunctionFactory::FunctionFactory() | 10 | FunctionFactory::FunctionFactory() |
| 10 | { | 11 | { |
| @@ -13,6 +14,7 @@ FunctionFactory::FunctionFactory() | |||
| 13 | registerBuiltinPlugin( ®exp ); | 14 | registerBuiltinPlugin( ®exp ); |
| 14 | registerBuiltinPlugin( &toString ); | 15 | registerBuiltinPlugin( &toString ); |
| 15 | registerBuiltinPlugin( &commandToList ); | 16 | registerBuiltinPlugin( &commandToList ); |
| 17 | registerBuiltinPlugin( &targets ); | ||
| 16 | } | 18 | } |
| 17 | 19 | ||
| 18 | FunctionFactory::~FunctionFactory() | 20 | FunctionFactory::~FunctionFactory() |
diff --git a/src/functiontargets.cpp b/src/functiontargets.cpp new file mode 100644 index 0000000..253b585 --- /dev/null +++ b/src/functiontargets.cpp | |||
| @@ -0,0 +1,35 @@ | |||
| 1 | #include "functiontargets.h" | ||
| 2 | #include "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 std::string &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 new file mode 100644 index 0000000..8d3a0ed --- /dev/null +++ b/src/functiontargets.h | |||
| @@ -0,0 +1,21 @@ | |||
| 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 std::string &cont, VarMap *mExtra ); | ||
| 16 | |||
| 17 | private: | ||
| 18 | |||
| 19 | }; | ||
| 20 | |||
| 21 | #endif | ||
