aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2007-04-24 14:09:50 +0000
committerMike Buland <eichlan@xagasoft.com>2007-04-24 14:09:50 +0000
commitff938b977db21378a1f016f65e7345c50e71ef8f (patch)
tree0f05b9b5b5ea13ce234cdd27e1eb8ccbccb2dc51
parentbe41caa5ca6756c7809cabaf6d8bee321928c45a (diff)
downloadbuild-ff938b977db21378a1f016f65e7345c50e71ef8f.tar.gz
build-ff938b977db21378a1f016f65e7345c50e71ef8f.tar.bz2
build-ff938b977db21378a1f016f65e7345c50e71ef8f.tar.xz
build-ff938b977db21378a1f016f65e7345c50e71ef8f.zip
Half way there on the road to implementing basic group functionality. You can
create groups, you can't do anything with them yet (although the syntax is supported already.)
Diffstat (limited to '')
-rw-r--r--build.conf1
-rw-r--r--src/build.cpp23
-rw-r--r--src/build.h4
-rw-r--r--src/build.l1
-rw-r--r--src/build.y7
-rw-r--r--src/buildparser.cpp11
-rw-r--r--src/buildparser.h2
7 files changed, 49 insertions, 0 deletions
diff --git a/build.conf b/build.conf
index 6da97e2..01ef6b6 100644
--- a/build.conf
+++ b/build.conf
@@ -10,6 +10,7 @@ set "LDFLAGS" += "-Llibbu++ -lbu++ -ldl"
10"build": 10"build":
11 rule "exe", 11 rule "exe",
12 target file, 12 target file,
13 group "program",
13 requires "libbu++/libbu++.a", 14 requires "libbu++/libbu++.a",
14 set "CXXFLAGS" += "-Ilibbu++/src", 15 set "CXXFLAGS" += "-Ilibbu++/src",
15 input filesIn("src") filter regexp(".*\\.(cpp|y|l)$") 16 input filesIn("src") filter regexp(".*\\.(cpp|y|l)$")
diff --git a/src/build.cpp b/src/build.cpp
index 889efa4..db14750 100644
--- a/src/build.cpp
+++ b/src/build.cpp
@@ -289,6 +289,19 @@ void Build::debugDump()
289 } 289 }
290 printf("\n"); 290 printf("\n");
291 } 291 }
292
293 printf("Groups:\n");
294 for( GroupMap::iterator i = mGroup.begin(); i != mGroup.end(); i++ )
295 {
296 printf(" %s: ", (*i).first.c_str() );
297 for( TargetList::iterator j = (*i).second.begin();
298 j != (*i).second.end(); j++ )
299 {
300 if( j != (*i).second.begin() ) printf(", ");
301 printf("%s", (*j)->getName().c_str() );
302 }
303 printf("\n");
304 }
292} 305}
293 306
294RuleList Build::findChainRules( Rule *pHead ) 307RuleList Build::findChainRules( Rule *pHead )
@@ -387,3 +400,13 @@ void Build::setMode( Action::eAction nAct )
387 } 400 }
388} 401}
389 402
403void Build::addToGroup( const std::string &sGroup, Target *pTarget )
404{
405 if( mGroup.find( sGroup ) == mGroup.end() )
406 {
407 mGroup[sGroup] = TargetList();
408 }
409
410 mGroup[sGroup].push_back( pTarget );
411}
412
diff --git a/src/build.h b/src/build.h
index dd8c11b..768d211 100644
--- a/src/build.h
+++ b/src/build.h
@@ -22,6 +22,8 @@ typedef std::map<std::string, VarMap> ContextMap;
22typedef std::map<std::string, Rule *> RuleMap; 22typedef std::map<std::string, Rule *> RuleMap;
23typedef std::list<Rule *> RuleList; 23typedef std::list<Rule *> RuleList;
24typedef std::map<std::string, Action *> ActionMap; 24typedef std::map<std::string, Action *> ActionMap;
25typedef std::list<Target *> TargetList;
26typedef std::map<std::string, TargetList> GroupMap;
25 27
26class Viewer; 28class Viewer;
27 29
@@ -43,6 +45,7 @@ public:
43 void addRequires( const std::string &who, const std::string &what ); 45 void addRequires( const std::string &who, const std::string &what );
44 void addRule( Rule *pRule ); 46 void addRule( Rule *pRule );
45 void addAction( Action *pAction ); 47 void addAction( Action *pAction );
48 void addToGroup( const std::string &sGroup, Target *pTarget );
46 49
47 void set( const std::string &cont, const std::string &var, const std::string &val ); 50 void set( const std::string &cont, const std::string &var, const std::string &val );
48 void setAdd( const std::string &cont, const std::string &var, const std::string &val ); 51 void setAdd( const std::string &cont, const std::string &var, const std::string &val );
@@ -92,6 +95,7 @@ private:
92 Cache cRequires; 95 Cache cRequires;
93 bool bCacheUpdated; 96 bool bCacheUpdated;
94 std::string sCacheName; 97 std::string sCacheName;
98 GroupMap mGroup;
95 99
96 //std::map<std::string, Rule *> mRule; 100 //std::map<std::string, Rule *> mRule;
97 //Action *pActDefault; 101 //Action *pActDefault;
diff --git a/src/build.l b/src/build.l
index 15c4003..5b69177 100644
--- a/src/build.l
+++ b/src/build.l
@@ -36,6 +36,7 @@ std::string strbuf;
36"filter" return TOK_FILTER; 36"filter" return TOK_FILTER;
37"prefix" return TOK_PREFIX; 37"prefix" return TOK_PREFIX;
38"aggregate" return TOK_AGGREGATE; 38"aggregate" return TOK_AGGREGATE;
39"group" return TOK_GROUP;
39 40
40\n+ { 41\n+ {
41 yylloc->last_line += yyleng; 42 yylloc->last_line += yyleng;
diff --git a/src/build.y b/src/build.y
index 0853bd9..bfda4b4 100644
--- a/src/build.y
+++ b/src/build.y
@@ -40,6 +40,7 @@ void yyerror( YYLTYPE *locp, BuildParser &bld, char const *msg );
40%token TOK_PERFORM "perform" 40%token TOK_PERFORM "perform"
41%token TOK_PRODUCES "produces" 41%token TOK_PRODUCES "produces"
42%token TOK_AGGREGATE "aggregate" 42%token TOK_AGGREGATE "aggregate"
43%token TOK_GROUP "group"
43 44
44%token ',' ':' '=' '(' ')' 45%token ',' ':' '=' '(' ')'
45 46
@@ -123,6 +124,8 @@ actioncmd: TOK_CHECK list
123 { 124 {
124 bld.addCommand( Action::actClean ); 125 bld.addCommand( Action::actClean );
125 } 126 }
127 | TOK_CHECK TOK_GROUP STRING
128 | TOK_CLEAN TOK_GROUP STRING
126 ; 129 ;
127 130
128// Target interpretation 131// Target interpretation
@@ -158,6 +161,10 @@ targetcmd: TOK_RULE STRING
158 bld.addTargetRequires(); 161 bld.addTargetRequires();
159 } 162 }
160 | TOK_SET targetset 163 | TOK_SET targetset
164 | TOK_GROUP STRING
165 {
166 bld.addTargetGroup( $2 );
167 }
161 ; 168 ;
162 169
163targetset: STRING '=' STRING 170targetset: STRING '=' STRING
diff --git a/src/buildparser.cpp b/src/buildparser.cpp
index 1c4f041..364aaa5 100644
--- a/src/buildparser.cpp
+++ b/src/buildparser.cpp
@@ -83,6 +83,11 @@ void BuildParser::addTargetSet( const char *sVar, const char *sVal, int nHow )
83 lTargetTmp.back().second.lVar.push_back( SetVar( sVar, sVal, nHow ) ); 83 lTargetTmp.back().second.lVar.push_back( SetVar( sVar, sVal, nHow ) );
84} 84}
85 85
86void BuildParser::addTargetGroup( const char *sGroup )
87{
88 lTargetTmp.back().second.lGroups.push_back( sGroup );
89}
90
86// 91//
87// Function functions 92// Function functions
88// 93//
@@ -458,6 +463,12 @@ Build *BuildParser::genBuild()
458 ); 463 );
459 464
460 bld->addTarget( pTarget ); 465 bld->addTarget( pTarget );
466
467 for( StringList::iterator c = (*i).second.lGroups.begin();
468 c != (*i).second.lGroups.end(); c++ )
469 {
470 bld->addToGroup( *c, pTarget );
471 }
461 } 472 }
462 StringList lReqs = buildToStringList( 473 StringList lReqs = buildToStringList(
463 (*i).second.lRequires, StringList() 474 (*i).second.lRequires, StringList()
diff --git a/src/buildparser.h b/src/buildparser.h
index 13c523c..fd988c6 100644
--- a/src/buildparser.h
+++ b/src/buildparser.h
@@ -77,6 +77,7 @@ public: // Target functions
77 void addTargetInput(); 77 void addTargetInput();
78 void addTargetRequires(); 78 void addTargetRequires();
79 void addTargetSet( const char *sVar, const char *sVal, int nHow ); 79 void addTargetSet( const char *sVar, const char *sVal, int nHow );
80 void addTargetGroup( const char *sGroup );
80 81
81private: // Target variables 82private: // Target variables
82 TargetFactory &fTarget; 83 TargetFactory &fTarget;
@@ -88,6 +89,7 @@ private: // Target variables
88 std::string sType; 89 std::string sType;
89 BuildList lInput; 90 BuildList lInput;
90 BuildList lRequires; 91 BuildList lRequires;
92 StringList lGroups;
91 SetVarList lVar; 93 SetVarList lVar;
92 }; 94 };
93 typedef std::pair<BuildList,TargetInfo> TargetTmp; 95 typedef std::pair<BuildList,TargetInfo> TargetTmp;