diff options
author | Mike Buland <eichlan@xagasoft.com> | 2006-09-07 22:49:40 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2006-09-07 22:49:40 +0000 |
commit | 71cc260a3ca6d3d0594fd4cadb0711ae3f142932 (patch) | |
tree | 0b270638890c3b3d45e998cf50cf895f2cad6af5 /src | |
parent | fe5de4801bfe7926e116585e2f71399cb664dfb2 (diff) | |
download | build-71cc260a3ca6d3d0594fd4cadb0711ae3f142932.tar.gz build-71cc260a3ca6d3d0594fd4cadb0711ae3f142932.tar.bz2 build-71cc260a3ca6d3d0594fd4cadb0711ae3f142932.tar.xz build-71cc260a3ca6d3d0594fd4cadb0711ae3f142932.zip |
About to implement Rule, the heart of the porform generation system. Once
that's done, we can actually run the performs, and, most likely build things.
Diffstat (limited to 'src')
-rw-r--r-- | src/build.cpp | 56 | ||||
-rw-r--r-- | src/build.h | 7 | ||||
-rw-r--r-- | src/buildparser.cpp | 2 | ||||
-rw-r--r-- | src/rule.cpp | 4 | ||||
-rw-r--r-- | src/rule.h | 2 | ||||
-rw-r--r-- | src/stringprocbuild.cpp | 2 | ||||
-rw-r--r-- | src/target.h | 5 | ||||
-rw-r--r-- | src/targetfile.cpp | 16 | ||||
-rw-r--r-- | src/targetfile.h | 3 |
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 | ||
3 | subExceptionDef( BuildException ); | 3 | subExceptionDef( BuildException ); |
4 | 4 | ||
5 | 5 | Build::Build() : | |
6 | Build::Build() | 6 | pStrProc( NULL ) |
7 | { | 7 | { |
8 | } | 8 | } |
9 | 9 | ||
@@ -11,10 +11,52 @@ Build::~Build() | |||
11 | { | 11 | { |
12 | } | 12 | } |
13 | 13 | ||
14 | void Build::setStringProc( StringProc *pStrProc ) | ||
15 | { | ||
16 | delete this->pStrProc; | ||
17 | this->pStrProc = pStrProc; | ||
18 | } | ||
19 | |||
20 | std::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 | |||
14 | void Build::execAction( const std::string &sWhat ) | 30 | void 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 | ||
87 | Rule *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 | |||
45 | void Build::addAction( Action *pAction ) | 95 | void 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 | ||
14 | subExceptionDecl( BuildException ); | 15 | subExceptionDecl( 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 | |||
41 | private: | 47 | private: |
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 | ||
9 | BuildParser::BuildParser() : | 10 | BuildParser::BuildParser() : |
10 | fFunction( FunctionFactory::getInstance() ), | 11 | fFunction( FunctionFactory::getInstance() ), |
@@ -343,6 +344,7 @@ void BuildParser::printBuildList( const BuildList &lst ) | |||
343 | Build *BuildParser::genBuild() | 344 | Build *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 | ||
11 | void Rule::execute() | ||
12 | { | ||
13 | } | ||
14 | |||
@@ -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 | ||
9 | typedef std::list<std::string> StringList; | 9 | typedef std::list<std::string> StringList; |
10 | 10 | ||
11 | class Build; | ||
12 | |||
11 | class Target | 13 | class Target |
12 | { | 14 | { |
13 | public: | 15 | public: |
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 | ||
4 | PluginInterface2(file, TargetFile, Target, "Mike Buland", 0, 1 ); | 6 | PluginInterface2(file, TargetFile, Target, "Mike Buland", 0, 1 ); |
5 | 7 | ||
@@ -10,3 +12,17 @@ TargetFile::TargetFile() | |||
10 | TargetFile::~TargetFile() | 12 | TargetFile::~TargetFile() |
11 | { | 13 | { |
12 | } | 14 | } |
15 | |||
16 | void 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 | |||
24 | void 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 | |||
14 | private: | 17 | private: |
15 | 18 | ||
16 | }; | 19 | }; |