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