aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/build.cpp56
-rw-r--r--src/build.h7
-rw-r--r--src/buildparser.cpp2
-rw-r--r--src/rule.cpp4
-rw-r--r--src/rule.h2
-rw-r--r--src/stringprocbuild.cpp2
-rw-r--r--src/target.h5
-rw-r--r--src/targetfile.cpp16
-rw-r--r--src/targetfile.h3
9 files changed, 94 insertions, 3 deletions
diff --git a/src/build.cpp b/src/build.cpp
index bf867af..372e607 100644
--- a/src/build.cpp
+++ b/src/build.cpp
@@ -2,8 +2,8 @@
2 2
3subExceptionDef( BuildException ); 3subExceptionDef( BuildException );
4 4
5 5Build::Build() :
6Build::Build() 6 pStrProc( NULL )
7{ 7{
8} 8}
9 9
@@ -11,10 +11,52 @@ Build::~Build()
11{ 11{
12} 12}
13 13
14void Build::setStringProc( StringProc *pStrProc )
15{
16 delete this->pStrProc;
17 this->pStrProc = pStrProc;
18}
19
20std::string Build::replVars( const std::string &sSrc, const std::string &sCont )
21{
22 if( pStrProc == NULL )
23 throw BuildException(
24 "No valid string processor was registered with the Build object."
25 );
26
27 return pStrProc->replVars( sSrc, sCont );
28}
29
14void Build::execAction( const std::string &sWhat ) 30void Build::execAction( const std::string &sWhat )
15{ 31{
16 if( mAction.find( sWhat ) == mAction.end() ) 32 if( mAction.find( sWhat ) == mAction.end() )
17 throw BuildException("No action matches %s.", sWhat.c_str() ); 33 throw BuildException(
34 "No action matches %s, check your build.conf.",
35 sWhat.c_str()
36 );
37
38 Action *pAct = mAction[sWhat];
39
40 for( pAct->begin(); !pAct->isEnded(); pAct->next() )
41 {
42 if( mTarget.find( pAct->getWhat() ) == mTarget.end() )
43 throw BuildException(
44 "No target matches %s in action %s.",
45 pAct->getWhat().c_str(),
46 sWhat.c_str()
47 );
48 Target *pTarget = mTarget[pAct->getWhat()];
49 switch( pAct->getAct() )
50 {
51 case Action::actCheck:
52 pTarget->check( *this );
53 break;
54
55 case Action::actClean:
56 pTarget->clean( *this );
57 break;
58 }
59 }
18 60
19 return; 61 return;
20} 62}
@@ -42,6 +84,14 @@ void Build::addRule( Rule *pRule )
42 mRule[pRule->getName()] = pRule; 84 mRule[pRule->getName()] = pRule;
43} 85}
44 86
87Rule *Build::getRule( const std::string &name )
88{
89 if( mRule.find( name ) == mRule.end() )
90 throw BuildException("No rule named %s found.", name.c_str() );
91
92 return mRule[name];
93}
94
45void Build::addAction( Action *pAction ) 95void Build::addAction( Action *pAction )
46{ 96{
47 mAction[pAction->getName()] = pAction; 97 mAction[pAction->getName()] = pAction;
diff --git a/src/build.h b/src/build.h
index 77e40fa..d5e6604 100644
--- a/src/build.h
+++ b/src/build.h
@@ -10,6 +10,7 @@
10#include "rule.h" 10#include "rule.h"
11#include "target.h" 11#include "target.h"
12#include "action.h" 12#include "action.h"
13#include "stringproc.h"
13 14
14subExceptionDecl( BuildException ); 15subExceptionDecl( BuildException );
15 16
@@ -36,8 +37,13 @@ public:
36 void setAdd( const std::string &cont, const std::string &var, const std::string &val ); 37 void setAdd( const std::string &cont, const std::string &var, const std::string &val );
37 std::string getVar( const std::string &cont, const std::string &var ); 38 std::string getVar( const std::string &cont, const std::string &var );
38 39
40 Rule *getRule( const std::string &name );
41
39 void debugDump(); 42 void debugDump();
40 43
44 void setStringProc( StringProc *pStrProc );
45 std::string replVars( const std::string &sSrc, const std::string &sCont );
46
41private: 47private:
42 typedef std::map<std::string, Target *> TargetMap; 48 typedef std::map<std::string, Target *> TargetMap;
43 typedef std::list<std::string> StringList; 49 typedef std::list<std::string> StringList;
@@ -53,6 +59,7 @@ private:
53 ContextMap mContVars; 59 ContextMap mContVars;
54 RuleMap mRule; 60 RuleMap mRule;
55 ActionMap mAction; 61 ActionMap mAction;
62 StringProc *pStrProc;
56 63
57 //std::map<std::string, Rule *> mRule; 64 //std::map<std::string, Rule *> mRule;
58 //Action *pActDefault; 65 //Action *pActDefault;
diff --git a/src/buildparser.cpp b/src/buildparser.cpp
index 90e21e2..f855990 100644
--- a/src/buildparser.cpp
+++ b/src/buildparser.cpp
@@ -5,6 +5,7 @@
5#include "action.h" 5#include "action.h"
6#include "build.h" 6#include "build.h"
7#include "rule.h" 7#include "rule.h"
8#include "stringprocbuild.h"
8 9
9BuildParser::BuildParser() : 10BuildParser::BuildParser() :
10 fFunction( FunctionFactory::getInstance() ), 11 fFunction( FunctionFactory::getInstance() ),
@@ -343,6 +344,7 @@ void BuildParser::printBuildList( const BuildList &lst )
343Build *BuildParser::genBuild() 344Build *BuildParser::genBuild()
344{ 345{
345 Build *bld = new Build; 346 Build *bld = new Build;
347 bld->setStringProc( new StringProcBuild( bld ) );
346 348
347 for( SetVarList::iterator i = lGlobalVars.begin(); 349 for( SetVarList::iterator i = lGlobalVars.begin();
348 i != lGlobalVars.end(); i++ ) 350 i != lGlobalVars.end(); i++ )
diff --git a/src/rule.cpp b/src/rule.cpp
index 2212936..4426575 100644
--- a/src/rule.cpp
+++ b/src/rule.cpp
@@ -8,3 +8,7 @@ Rule::~Rule()
8{ 8{
9} 9}
10 10
11void Rule::execute()
12{
13}
14
diff --git a/src/rule.h b/src/rule.h
index 012073a..73d7738 100644
--- a/src/rule.h
+++ b/src/rule.h
@@ -17,6 +17,8 @@ public:
17 Rule(); 17 Rule();
18 virtual ~Rule(); 18 virtual ~Rule();
19 19
20 void execute();
21
20 std::string getName() 22 std::string getName()
21 { 23 {
22 return sName; 24 return sName;
diff --git a/src/stringprocbuild.cpp b/src/stringprocbuild.cpp
index 56eae12..d0a5951 100644
--- a/src/stringprocbuild.cpp
+++ b/src/stringprocbuild.cpp
@@ -48,5 +48,7 @@ std::string StringProcBuild::replVars( const std::string &sSrc, const std::strin
48 sSrc.c_str() 48 sSrc.c_str()
49 ); 49 );
50 } 50 }
51
52 return sDes;
51} 53}
52 54
diff --git a/src/target.h b/src/target.h
index 75fcb50..5325965 100644
--- a/src/target.h
+++ b/src/target.h
@@ -8,12 +8,17 @@
8 8
9typedef std::list<std::string> StringList; 9typedef std::list<std::string> StringList;
10 10
11class Build;
12
11class Target 13class Target
12{ 14{
13public: 15public:
14 Target(); 16 Target();
15 virtual ~Target(); 17 virtual ~Target();
16 18
19 virtual void check( Build &bld ) = 0;
20 virtual void clean( Build &bld ) = 0;
21
17 void setName( const std::string &sName ) 22 void setName( const std::string &sName )
18 { 23 {
19 this->sName = sName; 24 this->sName = sName;
diff --git a/src/targetfile.cpp b/src/targetfile.cpp
index fee41c9..8f6651e 100644
--- a/src/targetfile.cpp
+++ b/src/targetfile.cpp
@@ -1,5 +1,7 @@
1#include "targetfile.h" 1#include "targetfile.h"
2#include "plugger.h" 2#include "plugger.h"
3#include "rule.h"
4#include "build.h"
3 5
4PluginInterface2(file, TargetFile, Target, "Mike Buland", 0, 1 ); 6PluginInterface2(file, TargetFile, Target, "Mike Buland", 0, 1 );
5 7
@@ -10,3 +12,17 @@ TargetFile::TargetFile()
10TargetFile::~TargetFile() 12TargetFile::~TargetFile()
11{ 13{
12} 14}
15
16void TargetFile::check( Build &bld )
17{
18 printf("Target file checking: %s\n", getName().c_str() );
19
20 Rule *pRule = bld.getRule( getRule() );
21 pRule->execute();
22}
23
24void TargetFile::clean( Build &bld )
25{
26 printf("Target file cleaning: %s\n", getName().c_str() );
27}
28
diff --git a/src/targetfile.h b/src/targetfile.h
index 28fc2b1..37e6770 100644
--- a/src/targetfile.h
+++ b/src/targetfile.h
@@ -11,6 +11,9 @@ public:
11 TargetFile(); 11 TargetFile();
12 virtual ~TargetFile(); 12 virtual ~TargetFile();
13 13
14 virtual void check( Build &bld );
15 virtual void clean( Build &bld );
16
14private: 17private:
15 18
16}; 19};