aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.conf2
-rw-r--r--src/action.h5
-rw-r--r--src/builder.cpp13
-rw-r--r--src/builder.h9
-rw-r--r--src/filetarget.cpp31
-rw-r--r--src/filetarget.h2
-rw-r--r--src/main.cpp5
-rw-r--r--src/performcmd.cpp3
-rw-r--r--src/viewer.cpp62
-rw-r--r--src/viewer.h33
-rw-r--r--src/viewerpercent.cpp58
-rw-r--r--src/viewerpercent.h30
-rw-r--r--src/viewerplain.cpp33
-rw-r--r--src/viewerplain.h26
14 files changed, 297 insertions, 15 deletions
diff --git a/build.conf b/build.conf
index b24d7d0..f747ddf 100644
--- a/build.conf
+++ b/build.conf
@@ -5,6 +5,8 @@ default action: check build
5 5
6create file build from files in src using rule exe 6create file build from files in src using rule exe
7 7
8set CXXFLAGS += "-ggdb"
9
8set CXXFLAGS += "-Ilibbu++/src" 10set CXXFLAGS += "-Ilibbu++/src"
9set LDFLAGS += "-Llibbu++ -lbu++" 11set LDFLAGS += "-Llibbu++ -lbu++"
10 12
diff --git a/src/action.h b/src/action.h
index 7518ed2..ea92efa 100644
--- a/src/action.h
+++ b/src/action.h
@@ -25,6 +25,11 @@ public:
25 return bDefault; 25 return bDefault;
26 } 26 }
27 27
28 int getNumCommands()
29 {
30 return lCommand.size();
31 }
32
28 void debug(); 33 void debug();
29 34
30 void execute( class Builder &bld ); 35 void execute( class Builder &bld );
diff --git a/src/builder.cpp b/src/builder.cpp
index c4f2d12..65ae0c2 100644
--- a/src/builder.cpp
+++ b/src/builder.cpp
@@ -6,14 +6,16 @@
6#include "target.h" 6#include "target.h"
7#include "build.tab.h" 7#include "build.tab.h"
8#include "rule.h" 8#include "rule.h"
9#include "viewer.h"
9 10
10subExceptionDef( BuildException ) 11subExceptionDef( BuildException )
11 12
12Builder::Builder() : 13Builder::Builder( Viewer &rView ) :
13 pDefaultAction( NULL ), 14 pDefaultAction( NULL ),
14 pLastAddedAction( NULL ), 15 pLastAddedAction( NULL ),
15 sTmp(""), 16 sTmp(""),
16 sContext("") 17 sContext(""),
18 rView( rView )
17{ 19{
18} 20}
19 21
@@ -44,7 +46,11 @@ void Builder::build( const char *sAct )
44 pAct = mAction[sAct]; 46 pAct = mAction[sAct];
45 } 47 }
46 48
49 rView.beginAction( sAct, pAct->getNumCommands() );
50
47 pAct->execute( *this ); 51 pAct->execute( *this );
52
53 rView.endAction();
48} 54}
49 55
50void Builder::execute( Action *pAct ) 56void Builder::execute( Action *pAct )
@@ -318,6 +324,8 @@ void Builder::genRequiresFor( const char *sName )
318 { 324 {
319 varmap *revars = regexVars( re ); 325 varmap *revars = regexVars( re );
320 std::string s = varRepl( (*i).second.c_str(), "", revars ); 326 std::string s = varRepl( (*i).second.c_str(), "", revars );
327 rView.beginExtraRequiresCheck( s.c_str() );
328 rView.executeCmd( s.c_str() );
321 FILE *fcmd = popen( s.c_str(), "r" ); 329 FILE *fcmd = popen( s.c_str(), "r" );
322 std::string rhs; 330 std::string rhs;
323 bool bHeader = true; 331 bool bHeader = true;
@@ -366,6 +374,7 @@ void Builder::genRequiresFor( const char *sName )
366 } 374 }
367 pclose( fcmd ); 375 pclose( fcmd );
368 delete revars; 376 delete revars;
377 rView.endExtraRequiresCheck();
369 } 378 }
370 } 379 }
371} 380}
diff --git a/src/builder.h b/src/builder.h
index 296b9d7..82a82c4 100644
--- a/src/builder.h
+++ b/src/builder.h
@@ -16,6 +16,7 @@ class Action;
16class Command; 16class Command;
17class Rule; 17class Rule;
18class Target; 18class Target;
19class Viewer;
19 20
20#define YY_DECL int yylex( YYSTYPE *yylval_param, YYLTYPE *yylloc_param, Builder &bld ) 21#define YY_DECL int yylex( YYSTYPE *yylval_param, YYLTYPE *yylloc_param, Builder &bld )
21YY_DECL; 22YY_DECL;
@@ -31,7 +32,7 @@ class Builder
31 }; 32 };
32 33
33public: 34public:
34 Builder(); 35 Builder( Viewer &rView );
35 virtual ~Builder(); 36 virtual ~Builder();
36 37
37 void load( const char *sFN ); 38 void load( const char *sFN );
@@ -43,6 +44,10 @@ public:
43 44
44 std::string file; 45 std::string file;
45 46
47 Viewer &view()
48 {
49 return rView;
50 }
46 void add( Action *pAct ); 51 void add( Action *pAct );
47 void add( Command *pCmd ); 52 void add( Command *pCmd );
48 void add( Rule *pRule ); 53 void add( Rule *pRule );
@@ -145,6 +150,8 @@ private:
145 StaticString sTmp; 150 StaticString sTmp;
146 151
147 bool bReqRegexp; 152 bool bReqRegexp;
153
154 Viewer &rView;
148}; 155};
149 156
150void cleanList( std::list<std::string> &lst ); 157void cleanList( std::list<std::string> &lst );
diff --git a/src/filetarget.cpp b/src/filetarget.cpp
index ca9a39f..e89cd5f 100644
--- a/src/filetarget.cpp
+++ b/src/filetarget.cpp
@@ -5,6 +5,7 @@
5#include "rule.h" 5#include "rule.h"
6#include "filetarget.h" 6#include "filetarget.h"
7#include "builder.h" // for BuildException 7#include "builder.h" // for BuildException
8#include "viewer.h"
8 9
9FileTarget::FileTarget( const char *sName ) : 10FileTarget::FileTarget( const char *sName ) :
10 Target( sName ) 11 Target( sName )
@@ -67,25 +68,27 @@ void FileTarget::addInputDir( const char *sDir )
67 closedir( dir ); 68 closedir( dir );
68} 69}
69 70
70int nNew, nCache; 71//int nNew, nCache;
71 72
72void FileTarget::check( Builder &bld ) 73void FileTarget::check( Builder &bld )
73{ 74{
74 printf("--- %s ---\n", getName() ); 75 //nNew = nCache = 0;
75 nNew = nCache = 0;
76 Rule *pRule = bld.getRule( sRule ); 76 Rule *pRule = bld.getRule( sRule );
77 77
78 std::list<Perform *> perf; 78 std::list<Perform *> perf;
79 std::list<std::string> tmp = pRule->execute( bld, lInput, perf, getName() ); 79 std::list<std::string> tmp = pRule->execute( bld, lInput, perf, getName() );
80 lOutput.insert( lOutput.end(), tmp.begin(), tmp.end() ); 80 lOutput.insert( lOutput.end(), tmp.begin(), tmp.end() );
81
82 bld.view().beginTarget( getName(), "file", "check", lOutput.size() );
81 83
82 bld.processRequires( lOutput ); 84 bld.processRequires( lOutput );
83 85
84 for( std::list<Perform *>::iterator i = perf.begin(); 86 for( std::list<Perform *>::iterator i = perf.begin();
85 i != perf.end(); i++ ) 87 i != perf.end(); i++ )
86 { 88 {
89 bld.view().beginPerform( *i );
87 bool bExtraReqs = false; 90 bool bExtraReqs = false;
88 time_t target = getTime( std::string((*i)->getTarget()) ); 91 time_t target = getTime( bld, std::string((*i)->getTarget()) );
89 std::list<std::string> *lReqs = bld.getRequires( (*i)->getTarget() ); 92 std::list<std::string> *lReqs = bld.getRequires( (*i)->getTarget() );
90 if( lReqs == NULL ) 93 if( lReqs == NULL )
91 { 94 {
@@ -95,10 +98,12 @@ void FileTarget::check( Builder &bld )
95 for( std::list<std::string>::iterator j = lReqs->begin(); 98 for( std::list<std::string>::iterator j = lReqs->begin();
96 j != lReqs->end(); j++ ) 99 j != lReqs->end(); j++ )
97 { 100 {
98 if( getTime( *j ) > target ) 101 if( getTime( bld, *j ) > target )
99 { 102 {
103 bld.view().beginExecute();
100 (*i)->execute( bld ); 104 (*i)->execute( bld );
101 updateTime( (*i)->getTarget() ); 105 updateTime( (*i)->getTarget() );
106 bld.view().endExecute();
102 break; 107 break;
103 } 108 }
104 if( bExtraReqs == false ) 109 if( bExtraReqs == false )
@@ -112,9 +117,12 @@ void FileTarget::check( Builder &bld )
112 } 117 }
113 } 118 }
114 } 119 }
120 bld.view().endPerform();
115 } 121 }
116 122
117 printf("Cache hits %d, %d new (%f%%)\n", nCache, nNew, nCache/ (double)(nNew+nCache)*100.0 ); 123 //printf("Cache hits %d, %d new (%f%%)\n", nCache, nNew, nCache/ (double)(nNew+nCache)*100.0 );
124
125 bld.view().endTarget();
118} 126}
119 127
120void FileTarget::clean( Builder &bld ) 128void FileTarget::clean( Builder &bld )
@@ -132,21 +140,26 @@ void FileTarget::clean( Builder &bld )
132 } 140 }
133} 141}
134 142
135time_t FileTarget::getTime( std::string str ) 143time_t FileTarget::getTime( Builder &bld, std::string str )
136{ 144{
137 std::map<std::string, time_t>::iterator i = mTimes.find( str ); 145 std::map<std::string, time_t>::iterator i = mTimes.find( str );
138 if( i != mTimes.end() ) 146 if( i != mTimes.end() )
139 { 147 {
140 nCache++; 148 //nCache++;
149 bld.view().beginRequiresCheck( true, str.c_str() );
150 bld.view().endRequiresCheck();
141 return (*i).second; 151 return (*i).second;
142 } 152 }
143 153
154 bld.view().beginRequiresCheck( false, str.c_str() );
144 struct stat st; 155 struct stat st;
145 stat( str.c_str(), &st ); 156 stat( str.c_str(), &st );
146 157
147 mTimes[str] = st.st_mtime; 158 mTimes[str] = st.st_mtime;
148 159
149 nNew++; 160 //nNew++;
161
162 bld.view().endRequiresCheck();
150 163
151 return st.st_mtime; 164 return st.st_mtime;
152} 165}
diff --git a/src/filetarget.h b/src/filetarget.h
index 856e854..c78c2fd 100644
--- a/src/filetarget.h
+++ b/src/filetarget.h
@@ -21,7 +21,7 @@ public:
21 virtual void check( class Builder &bld ); 21 virtual void check( class Builder &bld );
22 virtual void clean( class Builder &bld ); 22 virtual void clean( class Builder &bld );
23 23
24 time_t getTime( std::string str ); 24 time_t getTime( class Builder &bld, std::string str );
25 void updateTime( std::string str ); 25 void updateTime( std::string str );
26 26
27private: 27private:
diff --git a/src/main.cpp b/src/main.cpp
index ebfb745..132fb18 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,8 +1,11 @@
1#include "builder.h" 1#include "builder.h"
2#include "viewerplain.h"
3#include "viewerpercent.h"
2 4
3int main( int argc, char *argv[] ) 5int main( int argc, char *argv[] )
4{ 6{
5 Builder bld; 7 ViewerPercent p;
8 Builder bld( p );
6 9
7 bld.load("build.conf"); 10 bld.load("build.conf");
8 11
diff --git a/src/performcmd.cpp b/src/performcmd.cpp
index d9b7977..8eafc66 100644
--- a/src/performcmd.cpp
+++ b/src/performcmd.cpp
@@ -1,5 +1,6 @@
1#include "performcmd.h" 1#include "performcmd.h"
2#include "builder.h" 2#include "builder.h"
3#include "viewer.h"
3 4
4PerformCmd::PerformCmd( const char *sCmd, const char *sTarget ) : 5PerformCmd::PerformCmd( const char *sCmd, const char *sTarget ) :
5 Perform( sTarget ), 6 Perform( sTarget ),
@@ -13,7 +14,7 @@ PerformCmd::~PerformCmd()
13 14
14void PerformCmd::execute( class Builder &bld ) 15void PerformCmd::execute( class Builder &bld )
15{ 16{
16 printf("%s\n", sCommand.getString() ); 17 bld.view().executeCmd( sCommand );
17 int ret; 18 int ret;
18 if( (ret = system( sCommand.getString() )) != 0 ) 19 if( (ret = system( sCommand.getString() )) != 0 )
19 { 20 {
diff --git a/src/viewer.cpp b/src/viewer.cpp
new file mode 100644
index 0000000..ed6abfb
--- /dev/null
+++ b/src/viewer.cpp
@@ -0,0 +1,62 @@
1#include "viewer.h"
2
3Viewer::Viewer()
4{
5}
6
7Viewer::~Viewer()
8{
9}
10
11void Viewer::beginAction( const char *sName, int nCommands )
12{
13}
14
15void Viewer::endAction()
16{
17}
18
19void Viewer::beginTarget( const char *sName, const char *sType, const char *sOperation, int nPerforms )
20{
21}
22
23void Viewer::endTarget()
24{
25}
26
27void Viewer::beginPerform( Perform *pPerf )
28{
29}
30
31void Viewer::beginRequiresCheck( bool bCached, const char *sName )
32{
33}
34
35void Viewer::endRequiresCheck()
36{
37}
38
39void Viewer::beginExtraRequiresCheck( const char *sCommand )
40{
41}
42
43void Viewer::endExtraRequiresCheck()
44{
45}
46
47void Viewer::beginExecute()
48{
49}
50
51void Viewer::executeCmd( const char *sCmd )
52{
53}
54
55void Viewer::endExecute()
56{
57}
58
59void Viewer::endPerform()
60{
61}
62
diff --git a/src/viewer.h b/src/viewer.h
new file mode 100644
index 0000000..8f2a595
--- /dev/null
+++ b/src/viewer.h
@@ -0,0 +1,33 @@
1#ifndef VIEWER_H
2#define VIEWER_H
3
4#include <stdint.h>
5
6class Perform;
7
8class Viewer
9{
10public:
11 Viewer();
12 virtual ~Viewer();
13
14 virtual void beginAction( const char *sName, int nCommands );
15 virtual void endAction();
16 virtual void beginTarget( const char *sName, const char *sType, const char *sOperation, int nPerforms );
17 virtual void endTarget();
18
19 virtual void beginPerform( Perform *pPerf );
20 virtual void beginRequiresCheck( bool bCached, const char *sName );
21 virtual void endRequiresCheck();
22 virtual void beginExtraRequiresCheck( const char *sCommand );
23 virtual void endExtraRequiresCheck();
24 virtual void beginExecute();
25 virtual void executeCmd( const char *sCmd );
26 virtual void endExecute();
27 virtual void endPerform();
28
29private:
30
31};
32
33#endif
diff --git a/src/viewerpercent.cpp b/src/viewerpercent.cpp
new file mode 100644
index 0000000..0b0344b
--- /dev/null
+++ b/src/viewerpercent.cpp
@@ -0,0 +1,58 @@
1#include "viewerpercent.h"
2#include "perform.h"
3
4ViewerPercent::ViewerPercent() :
5 nWidth( 25 )
6{
7}
8
9ViewerPercent::~ViewerPercent()
10{
11}
12
13void ViewerPercent::beginTarget( const char *sName, const char *sType, const char *sOperation, int nPerforms )
14{
15 printf("--- %s ---\n", sName );
16 nMax = nPerforms;
17 nCount = 0;
18 nLastLen = 0;
19}
20
21void ViewerPercent::endTarget()
22{
23 printf("\n\n");
24}
25
26void ViewerPercent::beginPerform( Perform *pPerf )
27{
28 sTarget = pPerf->getTarget();
29}
30
31void ViewerPercent::beginExecute()
32{
33}
34
35void ViewerPercent::endPerform()
36{
37 nCount++;
38
39 int nPer = (nCount*nWidth)/nMax;
40 fputc( '[', stdout );
41 for( int j = 0; j < nPer; j++ )
42 fputc('=', stdout );
43 for( int j = nPer; j < nWidth; j++ )
44 fputc(' ', stdout );
45 //fputc(']', stdout );
46
47 printf("] %s", sTarget.getString() );
48
49 int diff = nLastLen-sTarget;
50 for( int j = 0; j < diff; j++ )
51 fputc(' ', stdout );
52
53 nLastLen = sTarget;
54
55 fputc('\r', stdout );
56 fflush( stdout );
57}
58
diff --git a/src/viewerpercent.h b/src/viewerpercent.h
new file mode 100644
index 0000000..d575940
--- /dev/null
+++ b/src/viewerpercent.h
@@ -0,0 +1,30 @@
1#ifndef VIEWER_PERCENT_H
2#define VIEWER_PERCENT_H
3
4#include <stdint.h>
5
6#include "viewer.h"
7#include "staticstring.h"
8
9class ViewerPercent : public Viewer
10{
11public:
12 ViewerPercent();
13 virtual ~ViewerPercent();
14
15 virtual void beginTarget( const char *sName, const char *sType, const char *sOperation, int nPerforms );
16 virtual void endTarget();
17
18 virtual void beginPerform( Perform *pPerf );
19 virtual void beginExecute();
20 virtual void endPerform();
21
22private:
23 class StaticString sTarget;
24 int nLastLen;
25 int nWidth;
26 int nMax;
27 int nCount;
28};
29
30#endif
diff --git a/src/viewerplain.cpp b/src/viewerplain.cpp
new file mode 100644
index 0000000..edc5ba8
--- /dev/null
+++ b/src/viewerplain.cpp
@@ -0,0 +1,33 @@
1#include <stdio.h>
2#include "viewerplain.h"
3#include "perform.h"
4
5ViewerPlain::ViewerPlain()
6{
7}
8
9ViewerPlain::~ViewerPlain()
10{
11}
12
13void ViewerPlain::beginTarget( const char *sName, const char *sType, const char *sOperation, int nPerforms )
14{
15 printf("--- %s ---\n", sName );
16}
17
18void ViewerPlain::endTarget()
19{
20 printf("\n");
21}
22
23void ViewerPlain::beginPerform( Perform *pPerf )
24{
25 sTarget = pPerf->getTarget();
26 printf(" check: %s\n", sTarget.getString() );
27}
28
29void ViewerPlain::beginExecute()
30{
31 printf(" build: %s\n", sTarget.getString() );
32}
33
diff --git a/src/viewerplain.h b/src/viewerplain.h
new file mode 100644
index 0000000..7b4b189
--- /dev/null
+++ b/src/viewerplain.h
@@ -0,0 +1,26 @@
1#ifndef VIEWER_PLAIN_H
2#define VIEWER_PLAIN_H
3
4#include <stdint.h>
5
6#include "viewer.h"
7#include "staticstring.h"
8
9class ViewerPlain : public Viewer
10{
11public:
12 ViewerPlain();
13 virtual ~ViewerPlain();
14
15 virtual void beginTarget( const char *sName, const char *sType, const char *sOperation, int nPerforms );
16 virtual void endTarget();
17
18 virtual void beginPerform( Perform *pPerf );
19 virtual void beginExecute();
20
21private:
22 class StaticString sTarget;
23
24};
25
26#endif