diff options
Diffstat (limited to '')
70 files changed, 0 insertions, 5028 deletions
diff --git a/Makefile b/Makefile deleted file mode 100644 index c1cf095..0000000 --- a/Makefile +++ /dev/null | |||
@@ -1,51 +0,0 @@ | |||
1 | LIBBU:=$(foreach f,paramproc.h paramproc.cpp fstring.h fstring.cpp exceptionbase.cpp exceptionbase.h archive.cpp archive.h archival.cpp archival.h plugger.h plugger.cpp singleton.h hash.cpp hash.h file.h file.cpp stream.h stream.cpp list.h list.cpp set.h set.cpp trace.h trace.cpp util.h fbasicstring.cpp fbasicstring.h sharedcore.cpp sharedcore.h archivebase.cpp archivebase.h util.h util.cpp,src/$f) | ||
2 | SRC:=$(sort $(wildcard src/*.cpp) $(patsubst src/%,src/bu/%,$(filter %.cpp,$(LIBBU)))) | ||
3 | OBJ:=src/build.yy.o src/build.tab.o $(patsubst %.cpp,%.o,$(SRC)) | ||
4 | REV:=$(shell svn info | grep "Revision" | cut -d\ -f2) | ||
5 | VER:=r$(REV) | ||
6 | PKG:=build-$(VER).tar.bz2 | ||
7 | |||
8 | .PHONY: all extern clean distclean package | ||
9 | # .SILENT: | ||
10 | |||
11 | all: extern build | ||
12 | |||
13 | package: clean distclean extern $(PKG) | ||
14 | |||
15 | $(PKG): | ||
16 | mkdir build-$(VER) | ||
17 | mkdir build-$(VER)/src | ||
18 | mkdir build-$(VER)/src/bu | ||
19 | cp -a src/*.{cpp,h,y,l} build-$(VER)/src | ||
20 | cp -a src/bu/*.{cpp,h} build-$(VER)/src/bu | ||
21 | cp -a build.conf build-$(VER) | ||
22 | cp -a Makefile.slim build-$(VER)/Makefile | ||
23 | tar -c build-$(VER) | bzip2 -9 > $(PKG) | ||
24 | rm -Rf build-$(VER) | ||
25 | |||
26 | clean: | ||
27 | -rm -Rf build $(OBJ) | ||
28 | |||
29 | distclean: | ||
30 | -rm -Rf $(LIBBU) | ||
31 | -rm -Rf src/bu | ||
32 | |||
33 | extern: $(LIBBU) | ||
34 | |||
35 | $(LIBBU): | ||
36 | if [ ! -f src/bu/$@ ]; then mkdir -p src/bu; wget -nv -Psrc/bu http://svn.xagasoft.com/libbu++/trunk/$@; fi | ||
37 | |||
38 | build: src/build.yy.c src/build.tab.c $(OBJ) | ||
39 | g++ -ggdb -ldl -o build $(OBJ) | ||
40 | |||
41 | %.o: %.cpp | ||
42 | g++ -ggdb -Isrc -c -o $@ $< | ||
43 | |||
44 | %.o: %.c | ||
45 | g++ -ggdb -Isrc -c -o $@ $< | ||
46 | |||
47 | %.yy.c: %.l | ||
48 | flex --bison-bridge --bison-locations -o $@ $< | ||
49 | |||
50 | %.tab.c: %.y | ||
51 | bison -v -b$(patsubst %.tab.c,%,$@) $< | ||
diff --git a/Makefile.slim b/Makefile.slim deleted file mode 100644 index d12435f..0000000 --- a/Makefile.slim +++ /dev/null | |||
@@ -1,24 +0,0 @@ | |||
1 | SRC:=$(sort $(wildcard src/*.cpp) $(wildcard src/bu/*.cpp)) | ||
2 | OBJ:=src/build.yy.o src/build.tab.o $(patsubst %.cpp,%.o,$(SRC)) | ||
3 | |||
4 | .PHONY: all clean | ||
5 | |||
6 | all: build | ||
7 | |||
8 | clean: | ||
9 | -rm -Rf build $(OBJ) | ||
10 | |||
11 | build: src/build.yy.c src/build.tab.c $(OBJ) | ||
12 | g++ -ggdb -ldl -o build $(OBJ) | ||
13 | |||
14 | %.o: %.cpp | ||
15 | g++ -ggdb -Isrc -c -o $@ $< | ||
16 | |||
17 | %.o: %.c | ||
18 | g++ -ggdb -Isrc -c -o $@ $< | ||
19 | |||
20 | %.yy.c: %.l | ||
21 | flex --bison-bridge --bison-locations -o $@ $< | ||
22 | |||
23 | %.tab.c: %.y | ||
24 | bison -v -b$(patsubst %.tab.c,%,$@) $< | ||
diff --git a/build.conf b/build.conf deleted file mode 100644 index b52528c..0000000 --- a/build.conf +++ /dev/null | |||
@@ -1,41 +0,0 @@ | |||
1 | # build.conf for build, kind of whacky, eh? | ||
2 | |||
3 | default action: check targets() | ||
4 | |||
5 | set "CXXFLAGS" += "-ggdb" | ||
6 | |||
7 | "build": | ||
8 | rule "exe", | ||
9 | target file, | ||
10 | requires "libbu++/libbu++.a", | ||
11 | set "LDFLAGS" += "-Llibbu++ -Wl,-Bstatic -lbu++ -Wl,-Bdynamic -ldl", | ||
12 | set "CXXFLAGS" += "-Ilibbu++", | ||
13 | set "FLEXFLAGS" = "--bison-bridge --bison-locations", | ||
14 | input filesIn("src") filter regexp(".*\\.(cpp|y|l)$") | ||
15 | |||
16 | directoriesIn("src/bfilt", "bfilt-"): | ||
17 | rule "exe", | ||
18 | target file, | ||
19 | input filesIn("{fulldir}") filter regexp(".*\\.(cpp|y|l)$") | ||
20 | |||
21 | rule "exe": | ||
22 | matches regexp("(.*)\\.o$"), | ||
23 | aggregate toString(" "), | ||
24 | perform command("g++ -o {target} {match} {LDFLAGS}") | ||
25 | |||
26 | rule "cpp": | ||
27 | matches regexp("(.*)\\.(cpp|c)$"), | ||
28 | produces "{re:1}.o", | ||
29 | requires commandToList("g++ -M {CXXFLAGS} {match}", "make"), | ||
30 | perform command("g++ {CXXFLAGS} -c -o {target} {match}") | ||
31 | |||
32 | rule "bison": | ||
33 | matches regexp("(.*)\\.y$"), | ||
34 | produces ["{re:1}.tab.c", "{re:1}.tab.h", "{re:1}.output"], | ||
35 | perform command("bison -v -b{re:1} {match}") | ||
36 | |||
37 | rule "flex": | ||
38 | matches regexp("(.*)\\.l$"), | ||
39 | produces "{re:1}.yy.c", | ||
40 | perform command("flex {FLEXFLAGS} -o {target} {match}") | ||
41 | |||
diff --git a/checkinst.sh b/checkinst.sh deleted file mode 100755 index d6da889..0000000 --- a/checkinst.sh +++ /dev/null | |||
@@ -1,10 +0,0 @@ | |||
1 | #!/bin/bash | ||
2 | |||
3 | CMD="ln -svf $PWD/build /usr/bin; ln -svf $PWD/bfilt-c++ /usr/bin" | ||
4 | |||
5 | if [ $UID == 0 ]; then | ||
6 | bash -c "$CMD" | ||
7 | else | ||
8 | echo This script needs root access... | ||
9 | su root -c "$CMD" | ||
10 | fi | ||
@@ -1,86 +0,0 @@ | |||
1 | # | ||
2 | # Simple build.conf test file | ||
3 | # | ||
4 | # you can have as many actions as you'd like, the one that's run by default is | ||
5 | # called "default action", you need a default action. | ||
6 | # | ||
7 | # Actions are filled with a comma-seperated list of commands, like "check xxx" | ||
8 | # to check to see if a target needs to be rebuilt | ||
9 | # | ||
10 | default action: check congo, check congod | ||
11 | |||
12 | # | ||
13 | # This action will only build the server program | ||
14 | # | ||
15 | server action: check congod | ||
16 | |||
17 | # | ||
18 | # After that, it helps to define some targets, things that commands usually | ||
19 | # refer to and interact with. | ||
20 | # | ||
21 | |||
22 | # | ||
23 | # "create file" will do just what it says, create a file based on some | ||
24 | # information and a rule. | ||
25 | # | ||
26 | # "from files in" tells us that a list of directories follows, and the input | ||
27 | # list for the rule should be built from these files. | ||
28 | # | ||
29 | # "using rule" tells us which rule to use to actuall create the file | ||
30 | # | ||
31 | create file congod from files in src/congod, src/shared using rule exe | ||
32 | create file congo from files in src/congo, src/shared using rule exe | ||
33 | |||
34 | create files "modules/db{name}.so" from directories in src/congod/db ... | ||
35 | from files in "src/congod/db/{name}" using rule lib | ||
36 | |||
37 | # | ||
38 | # After all of that, some targets or list items may have their own additional | ||
39 | # dependancies, depending on the rule that built them. You can define these | ||
40 | # extra dependancies using "xxx requires yyy" which will force the system to | ||
41 | # attempt to create yyy before xxx. | ||
42 | # | ||
43 | congod requires libcongo.a | ||
44 | congo requires libcongo.a | ||
45 | |||
46 | # | ||
47 | # There are a number of variables that the rules can use, including any in the | ||
48 | # environment. Sometimes you want to modify these, to do that you can use "set" | ||
49 | # and the name of the variable, along with what to do to it. | ||
50 | # | ||
51 | # You can use '=' to set the value, destroying what was there, or '+=' to add | ||
52 | # the new text to the variable, this will assume that the text you provide is | ||
53 | # made up of space-delimited tokens, and will ensure spaces surround them when | ||
54 | # they are added. | ||
55 | # | ||
56 | set CXXFLAGS += "-Ilibbu++/src" | ||
57 | set LDFLAGS += "-Llibbu++ -lbu++" | ||
58 | |||
59 | # | ||
60 | # Sometimes individual targets or list items require special settings, this is | ||
61 | # easy since build maintians a seperate set of variables for any items that need | ||
62 | # special support. | ||
63 | # | ||
64 | # Currently you can only set, for an item, later you may be able to do more. | ||
65 | # | ||
66 | for congo set LDFLAGS += "-lreadline" | ||
67 | |||
68 | # | ||
69 | # Finally, no file is complete without some rules. Rules determine how to | ||
70 | # fulfill target checking based on some input data. Generally this is going to | ||
71 | # be creating an executable from a list of source files. | ||
72 | # | ||
73 | # | ||
74 | # First specify the rule name, then you can filter the input list, if desired, | ||
75 | # in two ways. You can use items that match a regular expression, and execute | ||
76 | # the rule once for the whole list collectively, or once for each element that | ||
77 | # made it through the filter. | ||
78 | # | ||
79 | # Within the perform, there are several things that could go there, for now, | ||
80 | # just command, which takes a string, you can use {} for variable substitution. | ||
81 | # | ||
82 | rule exe matches all /(.*)\.o/ perform command ... | ||
83 | "g++ {matches} {LDFLAGS} -o {target}" | ||
84 | |||
85 | rule cpp matches one /(.*)\.cpp/ produces {1}.o perform command ... | ||
86 | "g++ {CXXFLAGS} -o {target} {match}" | ||
diff --git a/regexptest.cpp b/regexptest.cpp deleted file mode 100644 index 01597be..0000000 --- a/regexptest.cpp +++ /dev/null | |||
@@ -1,47 +0,0 @@ | |||
1 | #include <stdio.h> | ||
2 | #include <regex.h> | ||
3 | #include <string> | ||
4 | |||
5 | int test( const char *str, const char *sRegExp ) | ||
6 | { | ||
7 | printf("Compiling: %s\n", sRegExp ); | ||
8 | regex_t r; | ||
9 | if( regcomp( &r, sRegExp, REG_EXTENDED|REG_NEWLINE ) ) | ||
10 | { | ||
11 | printf("Error compiling regular expression.\n"); | ||
12 | return 0; | ||
13 | } | ||
14 | |||
15 | printf("Compiled, %d sub expressions.\n", r.re_nsub ); | ||
16 | |||
17 | int nMatch = r.re_nsub+1; | ||
18 | regmatch_t *match = new regmatch_t[nMatch]; | ||
19 | if( regexec( &r, str, nMatch, match, 0 ) ) | ||
20 | { | ||
21 | printf("Regular expression did not match.\n"); | ||
22 | return 0; | ||
23 | } | ||
24 | |||
25 | printf("Match!\nSubstrings:\n"); | ||
26 | for( int j = 0; j < nMatch; j++ ) | ||
27 | { | ||
28 | printf(" %d: (%d-%d) %s\n", | ||
29 | j, | ||
30 | match[j].rm_so, match[j].rm_eo, | ||
31 | std::string(str+match[j].rm_so, match[j].rm_eo-match[j].rm_so ).c_str() | ||
32 | ); | ||
33 | } | ||
34 | |||
35 | delete[] match; | ||
36 | regfree( &r ); | ||
37 | } | ||
38 | |||
39 | int main( int argc, char *argv[] ) | ||
40 | { | ||
41 | printf("Regular expression test:\n\n"); | ||
42 | |||
43 | test( argv[1], argv[2] ); | ||
44 | |||
45 | return 0; | ||
46 | } | ||
47 | |||
diff --git a/src/action.cpp b/src/action.cpp deleted file mode 100644 index 2588caa..0000000 --- a/src/action.cpp +++ /dev/null | |||
@@ -1,53 +0,0 @@ | |||
1 | #include "action.h" | ||
2 | |||
3 | Action::Action() | ||
4 | { | ||
5 | } | ||
6 | |||
7 | Action::~Action() | ||
8 | { | ||
9 | } | ||
10 | |||
11 | void Action::addCommand( eAction act, const std::string &sWhat, bool bIsGroup ) | ||
12 | { | ||
13 | lCmds.push_back( Cmd( act, sWhat, bIsGroup ) ); | ||
14 | } | ||
15 | |||
16 | void Action::begin() | ||
17 | { | ||
18 | i = lCmds.begin(); | ||
19 | } | ||
20 | |||
21 | bool Action::isEnded() | ||
22 | { | ||
23 | return i == lCmds.end(); | ||
24 | } | ||
25 | |||
26 | void Action::next() | ||
27 | { | ||
28 | i++; | ||
29 | } | ||
30 | |||
31 | Action::eAction Action::getAct() | ||
32 | { | ||
33 | return (*i).act; | ||
34 | } | ||
35 | |||
36 | std::string Action::getWhat() | ||
37 | { | ||
38 | return (*i).sWhat; | ||
39 | } | ||
40 | |||
41 | bool Action::isGroup() | ||
42 | { | ||
43 | return (*i).bIsGroup; | ||
44 | } | ||
45 | |||
46 | void Action::setMode( eAction nAct ) | ||
47 | { | ||
48 | for( CmdList::iterator j = lCmds.begin(); j != lCmds.end(); j++ ) | ||
49 | { | ||
50 | (*j).act = nAct; | ||
51 | } | ||
52 | } | ||
53 | |||
diff --git a/src/action.h b/src/action.h deleted file mode 100644 index 929c1c5..0000000 --- a/src/action.h +++ /dev/null | |||
@@ -1,66 +0,0 @@ | |||
1 | #ifndef ACTION_H | ||
2 | #define ACTION_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include <string> | ||
7 | #include <list> | ||
8 | |||
9 | class Action | ||
10 | { | ||
11 | public: | ||
12 | enum eAction | ||
13 | { | ||
14 | actCheck, | ||
15 | actClean | ||
16 | }; | ||
17 | public: | ||
18 | Action(); | ||
19 | virtual ~Action(); | ||
20 | |||
21 | typedef struct Cmd | ||
22 | { | ||
23 | Cmd( eAction act, const std::string &sWhat, bool bIsGroup ) : | ||
24 | act( act ), sWhat( sWhat ), bIsGroup( bIsGroup ) | ||
25 | {} | ||
26 | eAction act; | ||
27 | std::string sWhat; | ||
28 | bool bIsGroup; | ||
29 | } Cmd; | ||
30 | |||
31 | void addCommand( eAction act, const std::string &sWhat, bool bIsGroup ); | ||
32 | |||
33 | void begin(); | ||
34 | bool isEnded(); | ||
35 | void next(); | ||
36 | |||
37 | int size() | ||
38 | { | ||
39 | return lCmds.size(); | ||
40 | } | ||
41 | |||
42 | eAction getAct(); | ||
43 | std::string getWhat(); | ||
44 | bool isGroup(); | ||
45 | |||
46 | void setName( const std::string &sName ) | ||
47 | { | ||
48 | this->sName = sName; | ||
49 | } | ||
50 | |||
51 | std::string getName() | ||
52 | { | ||
53 | return sName; | ||
54 | } | ||
55 | |||
56 | void setMode( eAction nAct ); | ||
57 | |||
58 | private: | ||
59 | typedef std::list<Cmd> CmdList; | ||
60 | CmdList lCmds; | ||
61 | CmdList::iterator i; | ||
62 | std::string sName; | ||
63 | |||
64 | }; | ||
65 | |||
66 | #endif | ||
diff --git a/src/bfilt/c++/bfilt-c++.l b/src/bfilt/c++/bfilt-c++.l deleted file mode 100644 index 4e71649..0000000 --- a/src/bfilt/c++/bfilt-c++.l +++ /dev/null | |||
@@ -1,64 +0,0 @@ | |||
1 | %{ | ||
2 | # include <string> | ||
3 | |||
4 | int nBC = 0; | ||
5 | %} | ||
6 | |||
7 | %s hasT | ||
8 | %x inWith | ||
9 | %x inT | ||
10 | %option noyywrap nounput batch | ||
11 | |||
12 | %% | ||
13 | |||
14 | "operator<<" { ECHO; } | ||
15 | "operator>>" { ECHO; } | ||
16 | "operator". { ECHO; } | ||
17 | |||
18 | "<<" { ECHO; } | ||
19 | ">>" { ECHO; } | ||
20 | " <<" { ECHO; } | ||
21 | " >>" { ECHO; } | ||
22 | "'<'" { ECHO; } | ||
23 | "'>'" { ECHO; } | ||
24 | |||
25 | "<anonymous>" { ECHO; } | ||
26 | |||
27 | \n+ { | ||
28 | BEGIN( INITIAL ); | ||
29 | nBC = false; | ||
30 | ECHO; | ||
31 | } | ||
32 | |||
33 | " <" { ECHO; } | ||
34 | |||
35 | "<" { | ||
36 | BEGIN( inT ); | ||
37 | printf("<...>"); | ||
38 | nBC++; | ||
39 | } | ||
40 | |||
41 | <inT>"<" { | ||
42 | nBC++; | ||
43 | |||
44 | } | ||
45 | <inT>[^<>]* { } | ||
46 | <inT>">" { | ||
47 | nBC--; | ||
48 | if( nBC == 0 ) | ||
49 | BEGIN( hasT ); | ||
50 | } | ||
51 | |||
52 | <hasT>" [with"[^\]]*"]" { } | ||
53 | |||
54 | %% | ||
55 | |||
56 | int main() | ||
57 | { | ||
58 | yyin = stdin; | ||
59 | |||
60 | yylex(); | ||
61 | |||
62 | return 0; | ||
63 | } | ||
64 | |||
diff --git a/src/build.cpp b/src/build.cpp deleted file mode 100644 index dd6db1e..0000000 --- a/src/build.cpp +++ /dev/null | |||
@@ -1,442 +0,0 @@ | |||
1 | #include "build.h" | ||
2 | #include "function.h" | ||
3 | #include "viewerfactory.h" | ||
4 | #include "bu/archive.h" | ||
5 | #include "bu/file.h" | ||
6 | |||
7 | #include <stdlib.h> | ||
8 | |||
9 | subExceptionDef( BuildException ); | ||
10 | |||
11 | Build::Build() : | ||
12 | pStrProc( NULL ), | ||
13 | pView( NULL ), | ||
14 | bCacheUpdated( false ) | ||
15 | { | ||
16 | } | ||
17 | |||
18 | Build::~Build() | ||
19 | { | ||
20 | if( sCacheName.size() > 0 && bCacheUpdated ) | ||
21 | { | ||
22 | try | ||
23 | { | ||
24 | Bu::File f( sCacheName.c_str(), | ||
25 | Bu::File::Write|Bu::File::Create|Bu::File::Truncate ); | ||
26 | Bu::Archive ar( f, Bu::Archive::save ); | ||
27 | |||
28 | ar << cRequires; | ||
29 | } | ||
30 | catch( Bu::ExceptionBase &e ) | ||
31 | { | ||
32 | } | ||
33 | } | ||
34 | } | ||
35 | |||
36 | void Build::setView( const std::string &sView ) | ||
37 | { | ||
38 | pView = ViewerFactory::getInstance().instantiate( sView.c_str() ); | ||
39 | } | ||
40 | |||
41 | void Build::setCache( const std::string &sFileName ) | ||
42 | { | ||
43 | sCacheName = sFileName; | ||
44 | |||
45 | try | ||
46 | { | ||
47 | Bu::File f( sCacheName.c_str(), Bu::File::Read ); | ||
48 | Bu::Archive ar( f, Bu::Archive::load ); | ||
49 | |||
50 | ar >> cRequires; | ||
51 | } | ||
52 | catch( Bu::ExceptionBase &e ) | ||
53 | { | ||
54 | } | ||
55 | } | ||
56 | |||
57 | void Build::setStringProc( StringProc *pStrProc ) | ||
58 | { | ||
59 | delete this->pStrProc; | ||
60 | this->pStrProc = pStrProc; | ||
61 | } | ||
62 | |||
63 | std::string Build::replVars( const std::string &sSrc, const StringList *pCont, VarMap *mExtra ) | ||
64 | { | ||
65 | if( pStrProc == NULL ) | ||
66 | throw BuildException( | ||
67 | "No valid string processor was registered with the Build object." | ||
68 | ); | ||
69 | |||
70 | return pStrProc->replVars( sSrc, pCont, mExtra ); | ||
71 | } | ||
72 | |||
73 | void Build::execAction( const std::string &sWhat ) | ||
74 | { | ||
75 | if( mAction.find( sWhat ) == mAction.end() ) | ||
76 | throw BuildException( | ||
77 | "No action matches %s, check your build.conf.", | ||
78 | sWhat.c_str() | ||
79 | ); | ||
80 | |||
81 | Action *pAct = mAction[sWhat]; | ||
82 | |||
83 | pView->beginAction( sWhat, pAct->size() ); | ||
84 | |||
85 | for( pAct->begin(); !pAct->isEnded(); pAct->next() ) | ||
86 | { | ||
87 | if( pAct->isGroup() ) | ||
88 | { | ||
89 | if( mGroup.find( pAct->getWhat() ) == mGroup.end() ) | ||
90 | throw BuildException( | ||
91 | "No group matches %s in action %s.", | ||
92 | pAct->getWhat().c_str(), | ||
93 | sWhat.c_str() | ||
94 | ); | ||
95 | TargetList &sl = mGroup[pAct->getWhat()]; | ||
96 | for( TargetList::iterator i = sl.begin(); i != sl.end(); i++ ) | ||
97 | { | ||
98 | Target *pTarget = *i; | ||
99 | if( !pTarget->wasRun() ) | ||
100 | pTarget->run( pAct->getAct(), *this ); | ||
101 | } | ||
102 | } | ||
103 | else | ||
104 | { | ||
105 | if( mTarget.find( pAct->getWhat() ) == mTarget.end() ) | ||
106 | throw BuildException( | ||
107 | "No target matches %s in action %s.", | ||
108 | pAct->getWhat().c_str(), | ||
109 | sWhat.c_str() | ||
110 | ); | ||
111 | Target *pTarget = mTarget[pAct->getWhat()]; | ||
112 | //pView->beginCommand( pAct->getAct(), pAct->getWhat() ); | ||
113 | if( !pTarget->wasRun() ) | ||
114 | pTarget->run( pAct->getAct(), *this ); | ||
115 | //pView->endCommand(); | ||
116 | } | ||
117 | } | ||
118 | |||
119 | pView->endAction(); | ||
120 | |||
121 | return; | ||
122 | } | ||
123 | |||
124 | void Build::addTarget( Target *pTarget ) | ||
125 | { | ||
126 | TargetMap::iterator i = mTarget.find( pTarget->getName() ); | ||
127 | if( i == mTarget.end() ) | ||
128 | { | ||
129 | mTarget[pTarget->getName()] = pTarget; | ||
130 | } | ||
131 | else | ||
132 | { | ||
133 | throw BuildException("Merging targets isn't working yet."); | ||
134 | } | ||
135 | } | ||
136 | |||
137 | void Build::addRequires( const std::string &who, const std::string &what ) | ||
138 | { | ||
139 | mRequires[who].push_back( what ); | ||
140 | } | ||
141 | |||
142 | void Build::addRule( Rule *pRule ) | ||
143 | { | ||
144 | mRule[pRule->getName()] = pRule; | ||
145 | } | ||
146 | |||
147 | Rule *Build::getRule( const std::string &name ) | ||
148 | { | ||
149 | if( mRule.find( name ) == mRule.end() ) | ||
150 | throw BuildException("No rule named %s found.", name.c_str() ); | ||
151 | |||
152 | return mRule[name]; | ||
153 | } | ||
154 | |||
155 | void Build::addAction( Action *pAction ) | ||
156 | { | ||
157 | mAction[pAction->getName()] = pAction; | ||
158 | } | ||
159 | |||
160 | void Build::set( const std::string &cont, const std::string &var, const std::string &val ) | ||
161 | { | ||
162 | if( cont == "" ) | ||
163 | { | ||
164 | mVars[var] = replVars( val, NULL, NULL ); | ||
165 | } | ||
166 | else | ||
167 | { | ||
168 | StringList cl; | ||
169 | cl.push_front( cont ); | ||
170 | mContVars[cont][var] = replVars( val, &cl, NULL ); | ||
171 | } | ||
172 | } | ||
173 | |||
174 | void Build::setAdd( const std::string &cont, const std::string &var, const std::string &val ) | ||
175 | { | ||
176 | if( cont == "" ) | ||
177 | { | ||
178 | mVars[var] = getVar( NULL, var, NULL ) + " " + replVars( val, NULL, NULL ); | ||
179 | } | ||
180 | else | ||
181 | { | ||
182 | StringList cl; | ||
183 | cl.push_front( cont ); | ||
184 | mContVars[cont][var] = getVar( &cl, var, NULL ) + " " + replVars( val, &cl, NULL ); | ||
185 | } | ||
186 | } | ||
187 | |||
188 | void Build::copyContext( const std::string &src, const std::string &dest ) | ||
189 | { | ||
190 | if( mContVars.find(src) == mContVars.end() ) | ||
191 | return; | ||
192 | |||
193 | VarMap &d = mContVars[dest]; | ||
194 | VarMap &s = mContVars[src]; | ||
195 | for( VarMap::iterator i = s.begin(); i != s.end(); i++ ) | ||
196 | d[(*i).first] = (*i).second; | ||
197 | } | ||
198 | |||
199 | std::string Build::getVar( const StringList *cont, const std::string &var, VarMap *mExtra ) | ||
200 | { | ||
201 | if( mExtra != NULL ) | ||
202 | { | ||
203 | if( mExtra->find(var) == mExtra->end() ) | ||
204 | { | ||
205 | return getVar( cont, var, NULL ); | ||
206 | } | ||
207 | return (*mExtra)[var]; | ||
208 | } | ||
209 | |||
210 | if( cont == NULL ) | ||
211 | { | ||
212 | if( mVars.find(var) == mVars.end() ) | ||
213 | { | ||
214 | if( getenv( var.c_str() ) == NULL ) | ||
215 | { | ||
216 | mVars[var] = ""; | ||
217 | } | ||
218 | else | ||
219 | { | ||
220 | mVars[var] = getenv( var.c_str() ); | ||
221 | } | ||
222 | } | ||
223 | return mVars[var]; | ||
224 | } | ||
225 | else | ||
226 | { | ||
227 | if( cont->empty() ) | ||
228 | { | ||
229 | return getVar( NULL, var, NULL ); | ||
230 | } | ||
231 | std::string sTop = cont->front(); | ||
232 | if( mContVars[sTop].find(var) == mContVars[sTop].end() ) | ||
233 | { | ||
234 | ((StringList *)cont)->pop_front(); | ||
235 | mContVars[sTop][var] = getVar( cont, var, NULL ); | ||
236 | ((StringList *)cont)->push_front( sTop ); | ||
237 | } | ||
238 | return mContVars[sTop][var]; | ||
239 | } | ||
240 | } | ||
241 | |||
242 | void Build::debugDump() | ||
243 | { | ||
244 | printf("Requires:\n"); | ||
245 | for( ReqMap::iterator i = mRequires.begin(); i != mRequires.end(); i++ ) | ||
246 | { | ||
247 | printf(" %s: ", (*i).first.c_str() ); | ||
248 | |||
249 | for( StringList::iterator j = (*i).second.begin(); | ||
250 | j != (*i).second.end(); j++ ) | ||
251 | { | ||
252 | if( j != (*i).second.begin() ) | ||
253 | printf(", "); | ||
254 | printf("%s", (*j).c_str() ); | ||
255 | } | ||
256 | printf("\n"); | ||
257 | } | ||
258 | |||
259 | printf("Targets:\n"); | ||
260 | for( TargetMap::iterator i = mTarget.begin(); i != mTarget.end(); i++ ) | ||
261 | { | ||
262 | printf(" %s:\n", (*i).first.c_str() ); | ||
263 | printf(" Rule: %s\n", (*i).second->getRule().c_str() ); | ||
264 | printf(" Input: "); | ||
265 | for( StringList::iterator j = (*i).second->getInput().begin(); | ||
266 | j != (*i).second->getInput().end(); j++ ) | ||
267 | { | ||
268 | if( j != (*i).second->getInput().begin() ) | ||
269 | printf(", "); | ||
270 | printf("%s", (*j).c_str() ); | ||
271 | } | ||
272 | printf("\n"); | ||
273 | } | ||
274 | |||
275 | printf("Global Variables:\n"); | ||
276 | for( VarMap::iterator i = mVars.begin(); i != mVars.end(); i++ ) | ||
277 | { | ||
278 | printf(" \"%s\" = \"%s\"\n", (*i).first.c_str(), (*i).second.c_str() ); | ||
279 | } | ||
280 | |||
281 | printf("Context Variables:\n"); | ||
282 | for( ContextMap::iterator i = mContVars.begin(); i != mContVars.end(); i++ ) | ||
283 | { | ||
284 | printf(" %s:\n", (*i).first.c_str() ); | ||
285 | |||
286 | for( VarMap::iterator j = (*i).second.begin(); | ||
287 | j != (*i).second.end(); j++ ) | ||
288 | { | ||
289 | printf(" \"%s\" = \"%s\"\n", | ||
290 | (*j).first.c_str(), | ||
291 | (*j).second.c_str() | ||
292 | ); | ||
293 | } | ||
294 | } | ||
295 | |||
296 | printf("Rules:\n"); | ||
297 | for( RuleMap::iterator i = mRule.begin(); i != mRule.end(); i++ ) | ||
298 | { | ||
299 | printf(" %s:\n", (*i).first.c_str() ); | ||
300 | printf(" Matches: func\n"); | ||
301 | printf(" Filters: %d\n", (*i).second->getFilterList().size() ); | ||
302 | printf(" Performs: %d\n", (*i).second->getPerformList().size() ); | ||
303 | printf(" Produces:\n"); | ||
304 | printf(" Requires:\n"); | ||
305 | } | ||
306 | |||
307 | printf("Actions:\n"); | ||
308 | for( ActionMap::iterator i = mAction.begin(); i != mAction.end(); i++ ) | ||
309 | { | ||
310 | printf(" %s: ", (*i).first.c_str() ); | ||
311 | for( (*i).second->begin(); !(*i).second->isEnded(); (*i).second->next() ) | ||
312 | { | ||
313 | printf("%d:%s ", (*i).second->getAct(), (*i).second->getWhat().c_str() ); | ||
314 | } | ||
315 | printf("\n"); | ||
316 | } | ||
317 | |||
318 | printf("Groups:\n"); | ||
319 | for( GroupMap::iterator i = mGroup.begin(); i != mGroup.end(); i++ ) | ||
320 | { | ||
321 | printf(" %s: ", (*i).first.c_str() ); | ||
322 | for( TargetList::iterator j = (*i).second.begin(); | ||
323 | j != (*i).second.end(); j++ ) | ||
324 | { | ||
325 | if( j != (*i).second.begin() ) printf(", "); | ||
326 | printf("%s", (*j)->getName().c_str() ); | ||
327 | } | ||
328 | printf("\n"); | ||
329 | } | ||
330 | } | ||
331 | |||
332 | RuleList Build::findChainRules( Rule *pHead ) | ||
333 | { | ||
334 | RuleList lOut; | ||
335 | FunctionList &lMatches = pHead->getMatchesList(); | ||
336 | |||
337 | for( RuleMap::iterator i = mRule.begin(); i != mRule.end(); i++ ) | ||
338 | { | ||
339 | if( (*i).second == pHead ) | ||
340 | continue; | ||
341 | |||
342 | for( FunctionList::iterator j = lMatches.begin(); | ||
343 | j != lMatches.end(); j++ ) | ||
344 | { | ||
345 | StringList lTmp; | ||
346 | (*j)->execute( NULL, (*i).second->getProducesList(), lTmp ); | ||
347 | if( !lTmp.empty() ) | ||
348 | { | ||
349 | lOut.push_back( (*i).second ); | ||
350 | break; | ||
351 | } | ||
352 | } | ||
353 | } | ||
354 | |||
355 | return lOut; | ||
356 | } | ||
357 | |||
358 | StringList &Build::getRequires( std::string sName ) | ||
359 | { | ||
360 | return mRequires[sName]; | ||
361 | } | ||
362 | |||
363 | bool Build::getCached( const std::string &sID, int nTime, StringList &lOut ) | ||
364 | { | ||
365 | Cache::Entry *pEnt = cRequires.get( sID ); | ||
366 | if( pEnt == NULL ) | ||
367 | return false; | ||
368 | if( pEnt->tCreated < nTime ) | ||
369 | return false; | ||
370 | |||
371 | lOut.insert( lOut.end(), pEnt->lData.begin(), pEnt->lData.end() ); | ||
372 | |||
373 | return true; | ||
374 | } | ||
375 | |||
376 | void Build::updateCache( const std::string &sID, FunctionList &lFunc, StringList &lOut ) | ||
377 | { | ||
378 | Cache::Entry *pEnt = new Cache::Entry; | ||
379 | getView()->beginRequiresCheck( false, sID ); | ||
380 | for( FunctionList::iterator f = lFunc.begin(); f != lFunc.end(); f++ ) | ||
381 | { | ||
382 | StringList lTmpIn; | ||
383 | lTmpIn.push_back( sID ); | ||
384 | (*f)->execute( this, lTmpIn, pEnt->lData ); | ||
385 | } | ||
386 | getView()->endRequiresCheck(); | ||
387 | |||
388 | lOut.insert( lOut.end(), pEnt->lData.begin(), pEnt->lData.end() ); | ||
389 | cRequires.put( sID, pEnt ); | ||
390 | |||
391 | pEnt->tCreated = time( NULL ); | ||
392 | |||
393 | bCacheUpdated = true; | ||
394 | } | ||
395 | |||
396 | void Build::chainTarget( const std::string &sName ) | ||
397 | { | ||
398 | TargetMap::iterator i = mTarget.find(sName); | ||
399 | if( i == mTarget.end() ) return; | ||
400 | |||
401 | if( !(*i).second->wasRun() ) | ||
402 | (*i).second->run( Action::actCheck, *this ); | ||
403 | } | ||
404 | |||
405 | void Build::printInfo() | ||
406 | { | ||
407 | printf("---- Build Info ----\n"); | ||
408 | printf("Valid actions: "); | ||
409 | for( ActionMap::iterator i = mAction.begin(); i != mAction.end(); i++ ) | ||
410 | { | ||
411 | if( i != mAction.begin() ) printf(", "); | ||
412 | if( (*i).first == "" ) | ||
413 | printf("*default*"); | ||
414 | else | ||
415 | printf("%s", (*i).first.c_str() ); | ||
416 | } | ||
417 | printf("\n\n"); | ||
418 | } | ||
419 | |||
420 | void Build::setMode( Action::eAction nAct ) | ||
421 | { | ||
422 | for( ActionMap::iterator i = mAction.begin(); i != mAction.end(); i++ ) | ||
423 | { | ||
424 | (*i).second->setMode( nAct ); | ||
425 | } | ||
426 | } | ||
427 | |||
428 | void Build::addToGroup( const std::string &sGroup, Target *pTarget ) | ||
429 | { | ||
430 | if( mGroup.find( sGroup ) == mGroup.end() ) | ||
431 | { | ||
432 | mGroup[sGroup] = TargetList(); | ||
433 | } | ||
434 | |||
435 | mGroup[sGroup].push_back( pTarget ); | ||
436 | } | ||
437 | |||
438 | bool Build::hasAction( const std::string &str ) | ||
439 | { | ||
440 | return mAction.find( str ) != mAction.end(); | ||
441 | } | ||
442 | |||
diff --git a/src/build.h b/src/build.h deleted file mode 100644 index 1ffb547..0000000 --- a/src/build.h +++ /dev/null | |||
@@ -1,107 +0,0 @@ | |||
1 | #ifndef BUILD_H | ||
2 | #define BUILD_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include <map> | ||
7 | #include <string> | ||
8 | |||
9 | #include "bu/exceptionbase.h" | ||
10 | #include "rule.h" | ||
11 | #include "target.h" | ||
12 | #include "action.h" | ||
13 | #include "stringproc.h" | ||
14 | #include "cache.h" | ||
15 | |||
16 | subExceptionDecl( BuildException ); | ||
17 | typedef std::map<std::string, std::string> VarMap; | ||
18 | typedef std::map<std::string, Target *> TargetMap; | ||
19 | typedef std::list<std::string> StringList; | ||
20 | typedef std::map<std::string, StringList> ReqMap; | ||
21 | typedef std::map<std::string, VarMap> ContextMap; | ||
22 | typedef std::map<std::string, Rule *> RuleMap; | ||
23 | typedef std::list<Rule *> RuleList; | ||
24 | typedef std::map<std::string, Action *> ActionMap; | ||
25 | typedef std::list<Target *> TargetList; | ||
26 | typedef std::map<std::string, TargetList> GroupMap; | ||
27 | |||
28 | class Viewer; | ||
29 | |||
30 | class Build | ||
31 | { | ||
32 | public: | ||
33 | Build(); | ||
34 | virtual ~Build(); | ||
35 | |||
36 | void execAction( const std::string &sWhat ); | ||
37 | |||
38 | /** | ||
39 | * Adds a target to the build. If the target already exists, this will | ||
40 | * attempt to merge them as best it can. If there are any conflicts, it | ||
41 | * will throw an exception. | ||
42 | *@param pTarget A pointer to a Target object that Build takes ownership of. | ||
43 | */ | ||
44 | void addTarget( Target *pTarget ); | ||
45 | void addRequires( const std::string &who, const std::string &what ); | ||
46 | void addRule( Rule *pRule ); | ||
47 | void addAction( Action *pAction ); | ||
48 | bool hasAction( const std::string &str ); | ||
49 | void addToGroup( const std::string &sGroup, Target *pTarget ); | ||
50 | |||
51 | void set( const std::string &cont, const std::string &var, const std::string &val ); | ||
52 | void setAdd( const std::string &cont, const std::string &var, const std::string &val ); | ||
53 | void copyContext( const std::string &src, const std::string &dest ); | ||
54 | std::string getVar( const StringList *cont, const std::string &var, VarMap *mExtra ); | ||
55 | |||
56 | Rule *getRule( const std::string &name ); | ||
57 | |||
58 | void debugDump(); | ||
59 | |||
60 | void setStringProc( StringProc *pStrProc ); | ||
61 | std::string replVars( const std::string &sSrc, const StringList *pCont, VarMap *mExtra ); | ||
62 | RuleList findChainRules( Rule *pHead ); | ||
63 | StringList &getRequires( std::string sName ); | ||
64 | |||
65 | Viewer *getView() | ||
66 | { | ||
67 | return pView; | ||
68 | } | ||
69 | |||
70 | TargetMap &getTargetMap() | ||
71 | { | ||
72 | return mTarget; | ||
73 | } | ||
74 | |||
75 | void setView( const std::string &sView ); | ||
76 | |||
77 | void setCache( const std::string &sFileName ); | ||
78 | bool getCached( const std::string &sID, int nTime, StringList &lOut ); | ||
79 | void updateCache( const std::string &sID, FunctionList &lFunc, StringList &lOut ); | ||
80 | |||
81 | void chainTarget( const std::string &sName ); | ||
82 | |||
83 | void printInfo(); | ||
84 | |||
85 | void setMode( Action::eAction nAct ); | ||
86 | |||
87 | private: | ||
88 | TargetMap mTarget; | ||
89 | ReqMap mRequires; | ||
90 | VarMap mVars; | ||
91 | ContextMap mContVars; | ||
92 | RuleMap mRule; | ||
93 | ActionMap mAction; | ||
94 | StringProc *pStrProc; | ||
95 | Viewer *pView; | ||
96 | Cache cRequires; | ||
97 | bool bCacheUpdated; | ||
98 | std::string sCacheName; | ||
99 | GroupMap mGroup; | ||
100 | |||
101 | //std::map<std::string, Rule *> mRule; | ||
102 | //Action *pActDefault; | ||
103 | //std::map<std::string, Action *> mAction; | ||
104 | |||
105 | }; | ||
106 | |||
107 | #endif | ||
diff --git a/src/build.l b/src/build.l deleted file mode 100644 index 9065a49..0000000 --- a/src/build.l +++ /dev/null | |||
@@ -1,173 +0,0 @@ | |||
1 | %{ | ||
2 | # include <string> | ||
3 | # include <string.h> | ||
4 | # include "buildparser.h" | ||
5 | # include "build.tab.h" | ||
6 | |||
7 | char *stringdup( const char *sin ) | ||
8 | { | ||
9 | char *n = new char[strlen(sin)+1]; | ||
10 | strcpy( n, sin ); | ||
11 | return n; | ||
12 | } | ||
13 | |||
14 | std::string strbuf; | ||
15 | %} | ||
16 | |||
17 | %x strsq | ||
18 | %x strdq | ||
19 | %x cmdstr | ||
20 | %x comment | ||
21 | %option noyywrap nounput batch debug | ||
22 | |||
23 | %{ | ||
24 | # define YY_USER_ACTION yylloc->last_column += yyleng; | ||
25 | %} | ||
26 | %% | ||
27 | |||
28 | [,:=[\]()] return yytext[0]; | ||
29 | "+=" return TOK_ADDSET; | ||
30 | |||
31 | "default" return TOK_DEFAULT; | ||
32 | "action" return TOK_ACTION; | ||
33 | "rule" return TOK_RULE; | ||
34 | "requires" return TOK_REQUIRES; | ||
35 | "set" return TOK_SET; | ||
36 | "matches" return TOK_MATCHES; | ||
37 | "perform" return TOK_PERFORM; | ||
38 | "produces" return TOK_PRODUCES; | ||
39 | "check" return TOK_CHECK; | ||
40 | "clean" return TOK_CLEAN; | ||
41 | "target" return TOK_TARGET; | ||
42 | "input" return TOK_INPUT; | ||
43 | "filter" return TOK_FILTER; | ||
44 | "prefix" return TOK_PREFIX; | ||
45 | "aggregate" return TOK_AGGREGATE; | ||
46 | "group" return TOK_GROUP; | ||
47 | |||
48 | \n+ { | ||
49 | yylloc->last_line += yyleng; | ||
50 | yylloc->first_line = yylloc->last_line; | ||
51 | yylloc->first_column = yylloc->last_column = 0; | ||
52 | } | ||
53 | |||
54 | [ \t\r]* { | ||
55 | yylloc->first_line = yylloc->last_line; | ||
56 | yylloc->first_column = yylloc->last_column+1; | ||
57 | } | ||
58 | |||
59 | "#".* /* single line comment */ | ||
60 | |||
61 | [a-zA-Z][a-zA-Z0-9]* { | ||
62 | { | ||
63 | if( bld.isTarget( yytext ) ) | ||
64 | { | ||
65 | yylval->strval = stringdup( yytext ); | ||
66 | return TARGETTYPE; | ||
67 | } | ||
68 | else if( bld.isPerform( yytext ) ) | ||
69 | { | ||
70 | yylval->strval = stringdup( yytext ); | ||
71 | return PERFORM; | ||
72 | } | ||
73 | else if( bld.isFunction( yytext ) ) | ||
74 | { | ||
75 | yylval->strval = stringdup( yytext ); | ||
76 | return FUNCTION; | ||
77 | } | ||
78 | bld.error( yylloc, "Invalid token" ); | ||
79 | } | ||
80 | } | ||
81 | |||
82 | \" { | ||
83 | BEGIN( strdq ); | ||
84 | strbuf = ""; | ||
85 | } | ||
86 | \' { | ||
87 | BEGIN( strsq ); | ||
88 | strbuf = ""; | ||
89 | } | ||
90 | \` { | ||
91 | BEGIN( cmdstr ); | ||
92 | strbuf = ""; | ||
93 | } | ||
94 | |||
95 | <strdq>[^\\\n\"]+ { | ||
96 | strbuf += yytext; | ||
97 | } | ||
98 | |||
99 | <strsq>[^\\\n\']+ { | ||
100 | strbuf += yytext; | ||
101 | } | ||
102 | |||
103 | <cmdstr>[^\\\n\`]+ { | ||
104 | strbuf += yytext; | ||
105 | } | ||
106 | |||
107 | <strdq,strsq,cmdstr>\\n strbuf += "\n"; | ||
108 | <strdq,strsq,cmdstr>\\t strbuf += "\t"; | ||
109 | <strdq,strsq,cmdstr>\\r strbuf += "\r"; | ||
110 | <strdq,strsq,cmdstr>\\b strbuf += "\b"; | ||
111 | <strdq,strsq,cmdstr>\\f strbuf += "\f"; | ||
112 | <strdq,strsq,cmdstr>\\\\ strbuf += "\\"; | ||
113 | <strdq,strsq,cmdstr>\\\" strbuf += "\""; | ||
114 | <strdq,strsq,cmdstr>\\\' strbuf += "\'"; | ||
115 | <strdq,strsq,cmdstr>\\\` strbuf += "`"; | ||
116 | <strdq,strsq,cmdstr>\\. bld.error( yylloc, "Invalid escape sequence."); | ||
117 | |||
118 | <strdq>\" { | ||
119 | BEGIN( INITIAL ); | ||
120 | yylval->strval = stringdup( strbuf.c_str() ); | ||
121 | return STRING; | ||
122 | } | ||
123 | |||
124 | <strsq>\' { | ||
125 | BEGIN( INITIAL ); | ||
126 | yylval->strval = stringdup( strbuf.c_str() ); | ||
127 | return STRING; | ||
128 | } | ||
129 | |||
130 | <cmdstr>\` { | ||
131 | BEGIN( INITIAL ); | ||
132 | FILE *fpg = popen( strbuf.c_str(), "r" ); | ||
133 | strbuf = ""; | ||
134 | for(;;) | ||
135 | { | ||
136 | char buf[1024]; | ||
137 | int nRead = fread( buf, 1, 1024, fpg ); | ||
138 | if( nRead == 0 ) break; | ||
139 | for( int j = 0; j < nRead; j++ ) | ||
140 | { | ||
141 | if( buf[j] == '\n' || buf[j] == '\r' ) | ||
142 | buf[j] = ' '; | ||
143 | } | ||
144 | strbuf.append( buf, nRead ); | ||
145 | if( nRead < 1024 ) break; | ||
146 | } | ||
147 | yylval->strval = stringdup( strbuf.c_str() ); | ||
148 | pclose( fpg ); | ||
149 | return STRING; | ||
150 | } | ||
151 | |||
152 | . { | ||
153 | char buf[] = {"Character x is out of place"}; | ||
154 | buf[10] = yytext[0]; | ||
155 | bld.error( yylloc, buf ); | ||
156 | } | ||
157 | |||
158 | %% | ||
159 | |||
160 | void BuildParser::scanBegin() | ||
161 | { | ||
162 | yy_flex_debug = false; | ||
163 | if( !(yyin = fopen( file.c_str(), "r" )) ) | ||
164 | { | ||
165 | error( std::string("cannot open file: ") + file ); | ||
166 | } | ||
167 | } | ||
168 | |||
169 | void BuildParser::scanEnd() | ||
170 | { | ||
171 | fclose( yyin ); | ||
172 | } | ||
173 | |||
diff --git a/src/build.y b/src/build.y deleted file mode 100644 index 55940e8..0000000 --- a/src/build.y +++ /dev/null | |||
@@ -1,278 +0,0 @@ | |||
1 | %defines | ||
2 | %{ | ||
3 | # include <string> | ||
4 | # include "buildparser.h" | ||
5 | # include "build.tab.h" | ||
6 | # include "action.h" | ||
7 | void yyerror( YYLTYPE *locp, BuildParser &bld, char const *msg ); | ||
8 | %} | ||
9 | |||
10 | %parse-param { BuildParser &bld } | ||
11 | %lex-param { BuildParser &bld } | ||
12 | %pure-parser | ||
13 | |||
14 | %locations | ||
15 | |||
16 | %debug | ||
17 | %error-verbose | ||
18 | %union { | ||
19 | char *strval; | ||
20 | } | ||
21 | |||
22 | %token <strval> STRING "string literal" | ||
23 | %token <strval> TARGETTYPE "target type" | ||
24 | %token <strval> FUNCTION "function name" | ||
25 | %token <strval> PERFORM "perform name" | ||
26 | |||
27 | %token TOK_ADDSET "+=" | ||
28 | %token TOK_DEFAULT "default" | ||
29 | %token TOK_ACTION "action" | ||
30 | %token TOK_CHECK "check" | ||
31 | %token TOK_CLEAN "clean" | ||
32 | %token TOK_RULE "rule" | ||
33 | %token TOK_TARGET "target" | ||
34 | %token TOK_SET "set" | ||
35 | %token TOK_INPUT "input" | ||
36 | %token TOK_FILTER "filter" | ||
37 | %token TOK_PREFIX "prefix" | ||
38 | %token TOK_REQUIRES "requires" | ||
39 | %token TOK_MATCHES "matches" | ||
40 | %token TOK_PERFORM "perform" | ||
41 | %token TOK_PRODUCES "produces" | ||
42 | %token TOK_AGGREGATE "aggregate" | ||
43 | %token TOK_GROUP "group" | ||
44 | |||
45 | %token ',' ':' '=' '(' ')' | ||
46 | |||
47 | %destructor { delete[] $$; } STRING FUNCTION | ||
48 | |||
49 | %% | ||
50 | |||
51 | // General input format | ||
52 | input: | ||
53 | | input rule | ||
54 | | input action | ||
55 | | input target | ||
56 | | input set | ||
57 | ; | ||
58 | |||
59 | // Rule interpretation | ||
60 | rule: TOK_RULE STRING ':' | ||
61 | { | ||
62 | bld.addRule( $2 ); | ||
63 | } | ||
64 | rulecmds | ||
65 | ; | ||
66 | |||
67 | rulecmds: rulecmd | ||
68 | | rulecmds ',' rulecmd | ||
69 | ; | ||
70 | |||
71 | rulecmd: TOK_MATCHES func | ||
72 | { | ||
73 | bld.addRuleMatches(); | ||
74 | } | ||
75 | | TOK_PRODUCES list | ||
76 | { | ||
77 | bld.addRuleProduces(); | ||
78 | } | ||
79 | | TOK_REQUIRES list | ||
80 | { | ||
81 | bld.addRuleRequires(); | ||
82 | } | ||
83 | | TOK_INPUT TOK_FILTER func | ||
84 | { | ||
85 | bld.addRuleInputFilter(); | ||
86 | } | ||
87 | | TOK_PERFORM perf | ||
88 | { | ||
89 | bld.addRulePerform(); | ||
90 | } | ||
91 | | TOK_AGGREGATE func | ||
92 | { | ||
93 | bld.setRuleAggregate(); | ||
94 | } | ||
95 | ; | ||
96 | |||
97 | // Action interpretation | ||
98 | action: TOK_DEFAULT TOK_ACTION ':' | ||
99 | { | ||
100 | bld.addAction(); | ||
101 | } | ||
102 | actioncmds | ||
103 | | STRING TOK_ACTION ':' | ||
104 | { | ||
105 | if( $1[0] == '\0' ) | ||
106 | bld.error( | ||
107 | &yylloc, | ||
108 | "You cannot use an empty string as the name of an action." | ||
109 | ); | ||
110 | bld.addAction( $1 ); | ||
111 | } | ||
112 | actioncmds | ||
113 | ; | ||
114 | |||
115 | actioncmds: actioncmd | ||
116 | | actioncmds ',' actioncmd | ||
117 | ; | ||
118 | |||
119 | actioncmd: TOK_CHECK list | ||
120 | { | ||
121 | bld.addCommand( Action::actCheck ); | ||
122 | } | ||
123 | | TOK_CLEAN list | ||
124 | { | ||
125 | bld.addCommand( Action::actClean ); | ||
126 | } | ||
127 | | TOK_CHECK TOK_GROUP STRING | ||
128 | { | ||
129 | bld.addGrpCommand( $3, Action::actCheck ); | ||
130 | } | ||
131 | | TOK_CLEAN TOK_GROUP STRING | ||
132 | { | ||
133 | bld.addGrpCommand( $3, Action::actClean ); | ||
134 | } | ||
135 | ; | ||
136 | |||
137 | // Target interpretation | ||
138 | target: list ':' | ||
139 | { | ||
140 | bld.newTarget(); | ||
141 | } | ||
142 | targetcmds | ||
143 | ; | ||
144 | |||
145 | targetcmds: targetcmd | ||
146 | | targetcmds ',' targetcmd | ||
147 | ; | ||
148 | |||
149 | targetcmd: TOK_RULE STRING | ||
150 | { | ||
151 | bld.setTargetRule( $2 ); | ||
152 | } | ||
153 | | TOK_TARGET TOK_PREFIX STRING | ||
154 | { | ||
155 | bld.setTargetPrefix( $3 ); | ||
156 | } | ||
157 | | TOK_TARGET TARGETTYPE | ||
158 | { | ||
159 | bld.setTargetType( $2 ); | ||
160 | } | ||
161 | | TOK_INPUT list | ||
162 | { | ||
163 | bld.addTargetInput(); | ||
164 | } | ||
165 | | TOK_REQUIRES list | ||
166 | { | ||
167 | bld.addTargetRequires(); | ||
168 | } | ||
169 | | TOK_SET targetset | ||
170 | | TOK_GROUP STRING | ||
171 | { | ||
172 | bld.addTargetGroup( $2 ); | ||
173 | } | ||
174 | ; | ||
175 | |||
176 | targetset: STRING '=' STRING | ||
177 | { | ||
178 | bld.addTargetSet( $1, $3, setSet ); | ||
179 | } | ||
180 | | STRING TOK_ADDSET STRING | ||
181 | { | ||
182 | bld.addTargetSet( $1, $3, setAdd ); | ||
183 | } | ||
184 | ; | ||
185 | |||
186 | // global set | ||
187 | set: TOK_SET setwhat | ||
188 | ; | ||
189 | |||
190 | setwhat: STRING '=' STRING | ||
191 | { | ||
192 | bld.addGlobalSet( $1, $3, setSet ); | ||
193 | } | ||
194 | | STRING TOK_ADDSET STRING | ||
195 | { | ||
196 | bld.addGlobalSet( $1, $3, setAdd ); | ||
197 | } | ||
198 | ; | ||
199 | |||
200 | // list goo | ||
201 | list: singlelistitem listfilter | ||
202 | | '[' | ||
203 | { | ||
204 | bld.newList(); | ||
205 | } | ||
206 | listitems ']' listfilter | ||
207 | ; | ||
208 | |||
209 | listfilter: | ||
210 | | TOK_FILTER func | ||
211 | { | ||
212 | bld.filterList(); | ||
213 | } | ||
214 | ; | ||
215 | |||
216 | listitems: listitem | ||
217 | | listitems ',' listitem | ||
218 | ; | ||
219 | |||
220 | listitem: STRING | ||
221 | { | ||
222 | bld.addListString( $1 ); | ||
223 | } | ||
224 | | func | ||
225 | { | ||
226 | bld.addListFunc(); | ||
227 | } | ||
228 | ; | ||
229 | |||
230 | singlelistitem: STRING | ||
231 | { | ||
232 | bld.newList(); | ||
233 | bld.addListString( $1 ); | ||
234 | } | ||
235 | | func | ||
236 | { | ||
237 | bld.newList(); | ||
238 | bld.addListFunc(); | ||
239 | } | ||
240 | ; | ||
241 | |||
242 | // Function | ||
243 | func: FUNCTION | ||
244 | { | ||
245 | bld.newFunctionCall( $1 ); | ||
246 | } | ||
247 | '(' funcparams ')' | ||
248 | ; | ||
249 | |||
250 | funcparams: | ||
251 | | STRING { bld.addFunctionParam( $1 ); } | ||
252 | | funcparams ',' STRING { bld.addFunctionParam( $3 ); } | ||
253 | ; | ||
254 | |||
255 | // Perform | ||
256 | perf: PERFORM | ||
257 | { | ||
258 | bld.newPerform( $1 ); | ||
259 | } | ||
260 | '(' perfparams ')' | ||
261 | ; | ||
262 | |||
263 | perfparams: | ||
264 | | STRING | ||
265 | { | ||
266 | bld.addPerformParam( $1 ); | ||
267 | } | ||
268 | | perfparams ',' STRING | ||
269 | { | ||
270 | bld.addPerformParam( $3 ); | ||
271 | } | ||
272 | ; | ||
273 | %% | ||
274 | |||
275 | void yyerror( YYLTYPE *locp, BuildParser &bld, char const *msg ) | ||
276 | { | ||
277 | bld.error( locp, msg ); | ||
278 | } | ||
diff --git a/src/buildparser.cpp b/src/buildparser.cpp deleted file mode 100644 index 8f40097..0000000 --- a/src/buildparser.cpp +++ /dev/null | |||
@@ -1,613 +0,0 @@ | |||
1 | #include "buildparser.h" | ||
2 | #include "functionfactory.h" | ||
3 | #include "performfactory.h" | ||
4 | #include "targetfactory.h" | ||
5 | #include "action.h" | ||
6 | #include "build.h" | ||
7 | #include "rule.h" | ||
8 | #include "stringprocbuild.h" | ||
9 | |||
10 | BuildParser::BuildParser() : | ||
11 | fFunction( FunctionFactory::getInstance() ), | ||
12 | fPerform( PerformFactory::getInstance() ), | ||
13 | fTarget( TargetFactory::getInstance() ) | ||
14 | { | ||
15 | } | ||
16 | |||
17 | BuildParser::~BuildParser() | ||
18 | { | ||
19 | } | ||
20 | |||
21 | void yyparse( BuildParser &bld ); | ||
22 | extern int yydebug; | ||
23 | |||
24 | Build *BuildParser::load( const std::string &sFile ) | ||
25 | { | ||
26 | file = sFile; | ||
27 | scanBegin(); | ||
28 | //yydebug = 1; | ||
29 | yyparse( *this ); | ||
30 | scanEnd(); | ||
31 | |||
32 | return genBuild(); | ||
33 | } | ||
34 | |||
35 | // | ||
36 | // Target functions | ||
37 | // | ||
38 | bool BuildParser::isTarget( const char *sType ) | ||
39 | { | ||
40 | return fTarget.hasPlugin( sType ); | ||
41 | } | ||
42 | |||
43 | void BuildParser::newTarget() | ||
44 | { | ||
45 | lTargetTmp.push_back( TargetTmp(lTmp, TargetInfo()) ); | ||
46 | } | ||
47 | |||
48 | void BuildParser::setTargetRule( const char *sRule ) | ||
49 | { | ||
50 | lTargetTmp.back().second.sRule = sRule; | ||
51 | } | ||
52 | |||
53 | void BuildParser::setTargetPrefix( const char *sPrefix ) | ||
54 | { | ||
55 | lTargetTmp.back().second.sPrefix = sPrefix; | ||
56 | } | ||
57 | |||
58 | void BuildParser::setTargetType( const char *sType ) | ||
59 | { | ||
60 | lTargetTmp.back().second.sType = sType; | ||
61 | } | ||
62 | |||
63 | void BuildParser::addTargetInput() | ||
64 | { | ||
65 | lTargetTmp.back().second.lInput.first.insert( | ||
66 | lTargetTmp.back().second.lInput.first.end(), | ||
67 | lTmp.first.begin(), lTmp.first.end() | ||
68 | ); | ||
69 | lTargetTmp.back().second.lInput.second = lTmp.second; | ||
70 | } | ||
71 | |||
72 | void BuildParser::addTargetRequires() | ||
73 | { | ||
74 | lTargetTmp.back().second.lRequires.first.insert( | ||
75 | lTargetTmp.back().second.lRequires.first.end(), | ||
76 | lTmp.first.begin(), lTmp.first.end() | ||
77 | ); | ||
78 | lTargetTmp.back().second.lRequires.second = lTmp.second; | ||
79 | } | ||
80 | |||
81 | void BuildParser::addTargetSet( const char *sVar, const char *sVal, int nHow ) | ||
82 | { | ||
83 | lTargetTmp.back().second.lVar.push_back( SetVar( sVar, sVal, nHow ) ); | ||
84 | } | ||
85 | |||
86 | void BuildParser::addTargetGroup( const char *sGroup ) | ||
87 | { | ||
88 | lTargetTmp.back().second.lGroups.push_back( sGroup ); | ||
89 | } | ||
90 | |||
91 | // | ||
92 | // Function functions | ||
93 | // | ||
94 | bool BuildParser::isFunction( const char *sFunc ) | ||
95 | { | ||
96 | return fFunction.hasPlugin( sFunc ); | ||
97 | } | ||
98 | |||
99 | void BuildParser::newFunctionCall( const char *sName ) | ||
100 | { | ||
101 | pTmpFunc = fFunction.instantiate( sName ); | ||
102 | } | ||
103 | |||
104 | void BuildParser::addFunctionParam( const char *sParam ) | ||
105 | { | ||
106 | pTmpFunc->addParam( sParam ); | ||
107 | } | ||
108 | |||
109 | // | ||
110 | // List functions | ||
111 | // | ||
112 | void BuildParser::newList() | ||
113 | { | ||
114 | lTmp.first.clear(); | ||
115 | lTmp.second = NULL; | ||
116 | } | ||
117 | |||
118 | void BuildParser::addListString( const char *str ) | ||
119 | { | ||
120 | lTmp.first.push_back( BuildListItem(str, NULL) ); | ||
121 | } | ||
122 | |||
123 | void BuildParser::addListFunc() | ||
124 | { | ||
125 | lTmp.first.push_back( BuildListItem("", pTmpFunc ) ); | ||
126 | } | ||
127 | |||
128 | void BuildParser::filterList() | ||
129 | { | ||
130 | lTmp.second = pTmpFunc; | ||
131 | //StringList lTmp2; | ||
132 | //StringList lIn = buildToStringList( lTmp, StringList() ); | ||
133 | //pTmpFunc->execute( NULL, lIn, lTmp2 ); | ||
134 | //lTmp.clear(); | ||
135 | //for( StringList::iterator i = lTmp2.begin(); i != lTmp2.end(); i++ ) | ||
136 | //{ | ||
137 | // lTmp.push_back( BuildListItem( *i, NULL ) ); | ||
138 | //} | ||
139 | } | ||
140 | |||
141 | void BuildParser::buildListFilter( BuildList &lSrc ) | ||
142 | { | ||
143 | if( lSrc.second == NULL ) | ||
144 | return; | ||
145 | |||
146 | StringList lTmp2; | ||
147 | StringList lIn = buildToStringList( lSrc, StringList() ); | ||
148 | pTmpFunc->execute( NULL, lIn, lTmp2 ); | ||
149 | lSrc.first.clear(); | ||
150 | delete lSrc.second; | ||
151 | for( StringList::iterator i = lTmp2.begin(); i != lTmp2.end(); i++ ) | ||
152 | { | ||
153 | lSrc.first.push_back( BuildListItem( *i, NULL ) ); | ||
154 | } | ||
155 | } | ||
156 | |||
157 | StringList BuildParser::buildToStringList( const BuildList &lSrc, const StringList &lIn, Build *pPass ) | ||
158 | { | ||
159 | StringList lOut; | ||
160 | |||
161 | for( BuildListCore::const_iterator i = lSrc.first.begin(); | ||
162 | i != lSrc.first.end(); i++ ) | ||
163 | { | ||
164 | if( (*i).second ) | ||
165 | { | ||
166 | (*i).second->execute( pPass, lIn, lOut ); | ||
167 | } | ||
168 | else | ||
169 | { | ||
170 | lOut.push_back( (*i).first ); | ||
171 | } | ||
172 | } | ||
173 | |||
174 | if( lSrc.second ) | ||
175 | { | ||
176 | StringList lTmp; | ||
177 | lSrc.second->execute( pPass, lOut, lTmp ); | ||
178 | lOut.swap( lTmp ); | ||
179 | } | ||
180 | |||
181 | return lOut; | ||
182 | } | ||
183 | |||
184 | StringList BuildParser::buildToStringListDup( const BuildList &lSrc, const StringList &lIn, Build &bld, const std::string &sCont, VarMap *mExtra, Build *pPass ) | ||
185 | { | ||
186 | StringList lOut; | ||
187 | |||
188 | for( BuildListCore::const_iterator i = lSrc.first.begin(); | ||
189 | i != lSrc.first.end(); i++ ) | ||
190 | { | ||
191 | if( (*i).second ) | ||
192 | { | ||
193 | StringList l; | ||
194 | l.push_back( sCont ); | ||
195 | Function *pTmp = (*i).second->duplicate( bld, &l, mExtra ); | ||
196 | pTmp->execute( pPass, lIn, lOut ); | ||
197 | delete pTmp; | ||
198 | } | ||
199 | else | ||
200 | { | ||
201 | StringList l; | ||
202 | l.push_back( sCont ); | ||
203 | lOut.push_back( bld.replVars( (*i).first, &l, mExtra ) ); | ||
204 | } | ||
205 | } | ||
206 | |||
207 | if( lSrc.second ) | ||
208 | { | ||
209 | StringList lTmp; | ||
210 | lSrc.second->execute( pPass, lOut, lTmp ); | ||
211 | lOut.swap( lTmp ); | ||
212 | } | ||
213 | |||
214 | return lOut; | ||
215 | } | ||
216 | |||
217 | // | ||
218 | // Rule functions | ||
219 | // | ||
220 | void BuildParser::addRule( const char *sName ) | ||
221 | { | ||
222 | lRuleTmp.push_back( RuleInfo() ); | ||
223 | lRuleTmp.back().sName = sName; | ||
224 | lRuleTmp.back().pAggregate = NULL; | ||
225 | } | ||
226 | |||
227 | void BuildParser::addRuleMatches() | ||
228 | { | ||
229 | lRuleTmp.back().pMatches = pTmpFunc; | ||
230 | } | ||
231 | |||
232 | void BuildParser::addRuleProduces() | ||
233 | { | ||
234 | lRuleTmp.back().lProduces.first.insert( | ||
235 | lRuleTmp.back().lProduces.first.end(), | ||
236 | lTmp.first.begin(), lTmp.first.end() | ||
237 | ); | ||
238 | } | ||
239 | |||
240 | void BuildParser::addRuleRequires() | ||
241 | { | ||
242 | lRuleTmp.back().lRequires.first.insert( | ||
243 | lRuleTmp.back().lRequires.first.end(), | ||
244 | lTmp.first.begin(), lTmp.first.end() | ||
245 | ); | ||
246 | } | ||
247 | |||
248 | void BuildParser::addRuleInputFilter() | ||
249 | { | ||
250 | lRuleTmp.back().lFilter.push_back( pTmpFunc ); | ||
251 | } | ||
252 | |||
253 | void BuildParser::addRulePerform() | ||
254 | { | ||
255 | lRuleTmp.back().lPerform.push_back( pTmpPerform ); | ||
256 | } | ||
257 | |||
258 | void BuildParser::setRuleAggregate() | ||
259 | { | ||
260 | lRuleTmp.back().pAggregate = pTmpFunc; | ||
261 | } | ||
262 | |||
263 | // | ||
264 | // Perform functions | ||
265 | // | ||
266 | bool BuildParser::isPerform( const char *sPerf ) | ||
267 | { | ||
268 | return fPerform.hasPlugin( sPerf ); | ||
269 | } | ||
270 | |||
271 | void BuildParser::newPerform( const char *sName ) | ||
272 | { | ||
273 | pTmpPerform = fPerform.instantiate( sName ); | ||
274 | } | ||
275 | |||
276 | void BuildParser::addPerformParam( const char *sParam ) | ||
277 | { | ||
278 | pTmpPerform->addParam( sParam ); | ||
279 | } | ||
280 | |||
281 | // | ||
282 | // Functions for dealing with actions | ||
283 | // | ||
284 | void BuildParser::addAction() | ||
285 | { | ||
286 | lActions.push_back( ActionTmp("", ActionTmpCmdList() ) ); | ||
287 | } | ||
288 | |||
289 | void BuildParser::addAction( const char *sName ) | ||
290 | { | ||
291 | lActions.push_back( ActionTmp(sName, ActionTmpCmdList()) ); | ||
292 | } | ||
293 | |||
294 | void BuildParser::addCommand( int nType ) | ||
295 | { | ||
296 | lActions.back().second.push_back( ActionTmpCmd( nType, lTmp ) ); | ||
297 | } | ||
298 | |||
299 | void BuildParser::addGrpCommand( const char *sGroup, int nType ) | ||
300 | { | ||
301 | lActions.back().second.push_back( ActionTmpCmd( nType, sGroup ) ); | ||
302 | } | ||
303 | |||
304 | // | ||
305 | // Global variable functions | ||
306 | // | ||
307 | void BuildParser::addGlobalSet( const char *sVar, const char *sValue, int nHow ) | ||
308 | { | ||
309 | lGlobalVars.push_back( SetVar( sVar, sValue, nHow ) ); | ||
310 | } | ||
311 | |||
312 | // | ||
313 | // Debug | ||
314 | // | ||
315 | void BuildParser::debugDump() | ||
316 | { | ||
317 | printf("Actions:\n"); | ||
318 | for( ActionTmpList::iterator i = lActions.begin(); | ||
319 | i != lActions.end(); i++ ) | ||
320 | { | ||
321 | if( (*i).first == "" ) | ||
322 | { | ||
323 | printf(" default:\n"); | ||
324 | } | ||
325 | else | ||
326 | { | ||
327 | printf(" \"%s\":\n", (*i).first.c_str() ); | ||
328 | } | ||
329 | for( ActionTmpCmdList::iterator j = (*i).second.begin(); | ||
330 | j != (*i).second.end(); j++ ) | ||
331 | { | ||
332 | printf(" %d ", (*j).nAct ); | ||
333 | if( (*j).bGroup ) | ||
334 | { | ||
335 | printf("!%s", (*j).sGroup.c_str() ); | ||
336 | } | ||
337 | else | ||
338 | { | ||
339 | printBuildList( (*j).lCmds ); | ||
340 | } | ||
341 | printf("\n"); | ||
342 | } | ||
343 | } | ||
344 | |||
345 | printf("\nTargets:\n"); | ||
346 | for( TargetTmpList::iterator i = lTargetTmp.begin(); | ||
347 | i != lTargetTmp.end(); i++ ) | ||
348 | { | ||
349 | printf(" "); | ||
350 | printBuildList( (*i).first ); | ||
351 | printf(":\n"); | ||
352 | |||
353 | printf(" Rule: %s\n", (*i).second.sRule.c_str() ); | ||
354 | printf(" Prefix: %s\n", (*i).second.sPrefix.c_str() ); | ||
355 | printf(" Type: %s\n", (*i).second.sType.c_str() ); | ||
356 | printf(" Input: "); | ||
357 | printBuildList( (*i).second.lInput ); | ||
358 | printf("\n Requires: "); | ||
359 | printBuildList( (*i).second.lRequires ); | ||
360 | printf("\n Vars:\n"); | ||
361 | |||
362 | for( SetVarList::iterator j = (*i).second.lVar.begin(); | ||
363 | j != (*i).second.lVar.end(); j++ ) | ||
364 | { | ||
365 | const char *op; | ||
366 | switch( (*j).third ) | ||
367 | { | ||
368 | case setSet: op = "="; break; | ||
369 | case setAdd: op = "+="; break; | ||
370 | } | ||
371 | printf(" %s %s %s\n", (*j).first.c_str(), op, (*j).second.c_str() ); | ||
372 | } | ||
373 | } | ||
374 | |||
375 | printf("\nGlobals:\n"); | ||
376 | for( SetVarList::iterator j = lGlobalVars.begin(); | ||
377 | j != lGlobalVars.end(); j++ ) | ||
378 | { | ||
379 | const char *op; | ||
380 | switch( (*j).third ) | ||
381 | { | ||
382 | case setSet: op = "="; break; | ||
383 | case setAdd: op = "+="; break; | ||
384 | } | ||
385 | printf(" %s %s %s\n", (*j).first.c_str(), op, (*j).second.c_str() ); | ||
386 | } | ||
387 | |||
388 | printf("\nRules:\n"); | ||
389 | for( RuleTmpList::iterator i = lRuleTmp.begin(); | ||
390 | i != lRuleTmp.end(); i++ ) | ||
391 | { | ||
392 | printf(" %s:\n", (*i).sName.c_str() ); | ||
393 | printf(" Matches: func()\n"); | ||
394 | printf(" Produces: "); | ||
395 | printBuildList( (*i).lProduces ); | ||
396 | printf("\n Requires: "); | ||
397 | printBuildList( (*i).lRequires ); | ||
398 | printf("\n Filters: %d\n", (*i).lFilter.size() ); | ||
399 | printf(" Performs: %d\n", (*i).lPerform.size() ); | ||
400 | } | ||
401 | } | ||
402 | |||
403 | void BuildParser::printBuildList( const BuildList &lst ) | ||
404 | { | ||
405 | printf("["); | ||
406 | for( BuildListCore::const_iterator k = lst.first.begin(); | ||
407 | k != lst.first.end(); k++ ) | ||
408 | { | ||
409 | if( k != lst.first.begin() ) | ||
410 | { | ||
411 | printf(", "); | ||
412 | } | ||
413 | if( (*k).second ) | ||
414 | { | ||
415 | printf("func()"); | ||
416 | } | ||
417 | else | ||
418 | { | ||
419 | printf("\"%s\"", (*k).first.c_str() ); | ||
420 | } | ||
421 | } | ||
422 | printf("]"); | ||
423 | } | ||
424 | |||
425 | // | ||
426 | // Actually make a build object | ||
427 | // | ||
428 | Build *BuildParser::genBuild() | ||
429 | { | ||
430 | Build *bld = new Build; | ||
431 | bld->setStringProc( new StringProcBuild( bld ) ); | ||
432 | |||
433 | for( SetVarList::iterator i = lGlobalVars.begin(); | ||
434 | i != lGlobalVars.end(); i++ ) | ||
435 | { | ||
436 | switch( (*i).third ) | ||
437 | { | ||
438 | case setSet: | ||
439 | bld->set( "", (*i).first, (*i).second ); | ||
440 | break; | ||
441 | |||
442 | case setAdd: | ||
443 | bld->setAdd( "", (*i).first, (*i).second ); | ||
444 | break; | ||
445 | } | ||
446 | } | ||
447 | |||
448 | for( TargetTmpList::iterator i = lTargetTmp.begin(); | ||
449 | i != lTargetTmp.end(); i++ ) | ||
450 | { | ||
451 | StringList lTargetNames = buildToStringList( | ||
452 | (*i).first, StringList(), bld | ||
453 | ); | ||
454 | for( StringList::iterator j = lTargetNames.begin(); | ||
455 | j != lTargetNames.end(); j++ ) | ||
456 | { | ||
457 | if( (*i).second.sType != "" ) | ||
458 | { | ||
459 | Target *pTarget = fTarget.instantiate( | ||
460 | (*i).second.sType.c_str() | ||
461 | ); | ||
462 | pTarget->setName( *j ); | ||
463 | pTarget->setRule( (*i).second.sRule ); | ||
464 | |||
465 | VarMap mExtra; | ||
466 | mExtra["target"] = (*j); | ||
467 | |||
468 | StringList lInputs = buildToStringListDup( | ||
469 | (*i).second.lInput, StringList(), | ||
470 | *bld, *j, &mExtra /*, bld <-- should this be here? */ | ||
471 | ); | ||
472 | pTarget->getInput().insert( | ||
473 | pTarget->getInput().end(), | ||
474 | lInputs.begin(), lInputs.end() | ||
475 | ); | ||
476 | |||
477 | bld->addTarget( pTarget ); | ||
478 | |||
479 | for( StringList::iterator c = (*i).second.lGroups.begin(); | ||
480 | c != (*i).second.lGroups.end(); c++ ) | ||
481 | { | ||
482 | bld->addToGroup( *c, pTarget ); | ||
483 | } | ||
484 | } | ||
485 | StringList lReqs = buildToStringList( | ||
486 | (*i).second.lRequires, StringList() | ||
487 | ); | ||
488 | for( StringList::iterator k = lReqs.begin(); | ||
489 | k != lReqs.end(); k++ ) | ||
490 | { | ||
491 | bld->addRequires( (*j), (*k) ); | ||
492 | } | ||
493 | for( SetVarList::iterator k = (*i).second.lVar.begin(); | ||
494 | k != (*i).second.lVar.end(); k++ ) | ||
495 | { | ||
496 | switch( (*k).third ) | ||
497 | { | ||
498 | case setSet: | ||
499 | bld->set( *j, (*k).first, (*k).second ); | ||
500 | break; | ||
501 | |||
502 | case setAdd: | ||
503 | bld->setAdd( *j, (*k).first, (*k).second ); | ||
504 | break; | ||
505 | } | ||
506 | } | ||
507 | } | ||
508 | } | ||
509 | |||
510 | for( RuleTmpList::iterator i = lRuleTmp.begin(); i != lRuleTmp.end(); i++ ) | ||
511 | { | ||
512 | Rule *pRule = new Rule; | ||
513 | pRule->setName( (*i).sName ); | ||
514 | pRule->getMatchesList().push_back( (*i).pMatches ); | ||
515 | |||
516 | for( FunctionList::iterator j = (*i).lFilter.begin(); | ||
517 | j != (*i).lFilter.end(); j++ ) | ||
518 | { | ||
519 | pRule->getFilterList().push_back( *j ); | ||
520 | } | ||
521 | |||
522 | for( PerformList::iterator j = (*i).lPerform.begin(); | ||
523 | j != (*i).lPerform.end(); j++ ) | ||
524 | { | ||
525 | pRule->getPerformList().push_back( *j ); | ||
526 | } | ||
527 | |||
528 | for( BuildListCore::iterator j = (*i).lProduces.first.begin(); | ||
529 | j != (*i).lProduces.first.end(); j++ ) | ||
530 | { | ||
531 | if( (*j).second ) | ||
532 | { | ||
533 | throw BuildException( | ||
534 | "You cannot have functions in produces lists (rule %s).", | ||
535 | (*i).sName.c_str() ); | ||
536 | } | ||
537 | pRule->getProducesList().push_back( (*j).first ); | ||
538 | } | ||
539 | |||
540 | if( (*i).pAggregate ) | ||
541 | { | ||
542 | pRule->setAggregate( (*i).pAggregate ); | ||
543 | } | ||
544 | |||
545 | for( BuildListCore::iterator j = (*i).lRequires.first.begin(); | ||
546 | j != (*i).lRequires.first.end(); j++ ) | ||
547 | { | ||
548 | if( (*j).second ) | ||
549 | { | ||
550 | pRule->getReqFuncList().push_back( (*j).second ); | ||
551 | } | ||
552 | else | ||
553 | { | ||
554 | pRule->getReqStrList().push_back( (*j).first ); | ||
555 | } | ||
556 | } | ||
557 | |||
558 | bld->addRule( pRule ); | ||
559 | } | ||
560 | |||
561 | for( ActionTmpList::iterator i = lActions.begin(); | ||
562 | i != lActions.end(); i++ ) | ||
563 | { | ||
564 | Action *pAct = new Action; | ||
565 | pAct->setName( (*i).first ); | ||
566 | |||
567 | for( ActionTmpCmdList::iterator j = (*i).second.begin(); | ||
568 | j != (*i).second.end(); j++ ) | ||
569 | { | ||
570 | if( (*j).bGroup ) | ||
571 | { | ||
572 | pAct->addCommand( | ||
573 | (Action::eAction)((*j).nAct), (*j).sGroup, true | ||
574 | ); | ||
575 | } | ||
576 | else | ||
577 | { | ||
578 | StringList lWhat = buildToStringList( | ||
579 | (*j).lCmds, StringList(), bld | ||
580 | ); | ||
581 | |||
582 | for( StringList::iterator k = lWhat.begin(); | ||
583 | k != lWhat.end(); k++ ) | ||
584 | { | ||
585 | pAct->addCommand( (Action::eAction)((*j).nAct), *k, false ); | ||
586 | } | ||
587 | } | ||
588 | } | ||
589 | |||
590 | bld->addAction( pAct ); | ||
591 | } | ||
592 | |||
593 | // Now create an auto check-action for each group where there isn't already | ||
594 | // an action. | ||
595 | for( TargetTmpList::iterator i = lTargetTmp.begin(); | ||
596 | i != lTargetTmp.end(); i++ ) | ||
597 | { | ||
598 | for( StringList::iterator j = (*i).second.lGroups.begin(); | ||
599 | j != (*i).second.lGroups.end(); j++ ) | ||
600 | { | ||
601 | if( !bld->hasAction( (*j) ) ) | ||
602 | { | ||
603 | Action *pAct = new Action; | ||
604 | pAct->setName( *j ); | ||
605 | pAct->addCommand( Action::actCheck, *j, true ); | ||
606 | bld->addAction( pAct ); | ||
607 | } | ||
608 | } | ||
609 | } | ||
610 | |||
611 | return bld; | ||
612 | } | ||
613 | |||
diff --git a/src/buildparser.h b/src/buildparser.h deleted file mode 100644 index 516760c..0000000 --- a/src/buildparser.h +++ /dev/null | |||
@@ -1,192 +0,0 @@ | |||
1 | #ifndef BUILDER_H | ||
2 | #define BUILDER_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <string> | ||
6 | #include <list> | ||
7 | #include <utility> | ||
8 | #include <map> | ||
9 | #include "build.tab.h" | ||
10 | #include "parser.h" | ||
11 | |||
12 | class Build; | ||
13 | class BuildParser; | ||
14 | class Function; | ||
15 | class FunctionFactory; | ||
16 | class Perform; | ||
17 | class PerformFactory; | ||
18 | class Target; | ||
19 | class TargetFactory; | ||
20 | |||
21 | #define YY_DECL int yylex( YYSTYPE *yylval_param, YYLTYPE *yylloc_param, BuildParser &bld ) | ||
22 | YY_DECL; | ||
23 | |||
24 | typedef std::list<std::string> StringList; | ||
25 | typedef std::list<Function *> FunctionList; | ||
26 | typedef std::list<Perform *> PerformList; | ||
27 | typedef std::map<std::string,std::string> VarMap; | ||
28 | |||
29 | template<class tx, class ty, class tz> | ||
30 | class Triplet | ||
31 | { | ||
32 | public: | ||
33 | Triplet( const tx &x, const ty &y, const tz &z ) : | ||
34 | first( x ), second( y ), third( z ) | ||
35 | {} | ||
36 | |||
37 | Triplet( const Triplet &src ) : | ||
38 | first( src.first ), second( src.second ), third( src.third ) | ||
39 | {} | ||
40 | |||
41 | tx first; | ||
42 | ty second; | ||
43 | tz third; | ||
44 | }; | ||
45 | |||
46 | enum eSetHow | ||
47 | { | ||
48 | setSet, | ||
49 | setAdd | ||
50 | }; | ||
51 | |||
52 | class BuildParser : public Parser | ||
53 | { | ||
54 | typedef std::pair<std::string, Function *> BuildListItem; | ||
55 | typedef std::list<BuildListItem> BuildListCore; | ||
56 | typedef std::pair<BuildListCore, Function *> BuildList; | ||
57 | typedef Triplet<std::string, std::string, int> SetVar; | ||
58 | typedef std::list<SetVar> SetVarList; | ||
59 | public: | ||
60 | BuildParser(); | ||
61 | virtual ~BuildParser(); | ||
62 | |||
63 | Build *load( const std::string &sFile ); | ||
64 | |||
65 | private: | ||
66 | void scanBegin(); | ||
67 | void scanEnd(); | ||
68 | |||
69 | Build *genBuild(); | ||
70 | |||
71 | public: // Target functions | ||
72 | bool isTarget( const char *sType ); | ||
73 | void newTarget(); | ||
74 | void setTargetRule( const char *sRule ); | ||
75 | void setTargetPrefix( const char *sPrefix ); | ||
76 | void setTargetType( const char *sType ); | ||
77 | void addTargetInput(); | ||
78 | void addTargetRequires(); | ||
79 | void addTargetSet( const char *sVar, const char *sVal, int nHow ); | ||
80 | void addTargetGroup( const char *sGroup ); | ||
81 | |||
82 | private: // Target variables | ||
83 | TargetFactory &fTarget; | ||
84 | class TargetInfo | ||
85 | { | ||
86 | public: | ||
87 | std::string sRule; | ||
88 | std::string sPrefix; | ||
89 | std::string sType; | ||
90 | BuildList lInput; | ||
91 | BuildList lRequires; | ||
92 | StringList lGroups; | ||
93 | SetVarList lVar; | ||
94 | }; | ||
95 | typedef std::pair<BuildList,TargetInfo> TargetTmp; | ||
96 | typedef std::list<TargetTmp> TargetTmpList; | ||
97 | TargetTmpList lTargetTmp; | ||
98 | |||
99 | public: // Function functions | ||
100 | bool isFunction( const char *sFunc ); | ||
101 | void newFunctionCall( const char *sName ); | ||
102 | void addFunctionParam( const char *sParam ); | ||
103 | |||
104 | private: // Function variables | ||
105 | Function *pTmpFunc; | ||
106 | FunctionFactory &fFunction; | ||
107 | |||
108 | public: // Perform functions | ||
109 | bool isPerform( const char *sPerf ); | ||
110 | void newPerform( const char *sName ); | ||
111 | void addPerformParam( const char *sParam ); | ||
112 | |||
113 | private: // Perform variables | ||
114 | Perform *pTmpPerform; | ||
115 | PerformFactory &fPerform; | ||
116 | |||
117 | public: // List functions | ||
118 | void newList(); | ||
119 | void addListString( const char *str ); | ||
120 | void addListFunc(); | ||
121 | void filterList(); | ||
122 | |||
123 | void buildListFilter( BuildList &lSrc ); | ||
124 | StringList buildToStringList( const BuildList &lSrc, const StringList &lIn, Build *pPass=NULL ); | ||
125 | StringList buildToStringListDup( const BuildList &lSrc, const StringList &lIn, Build &bld, const std::string &sCont, VarMap *mExtra, Build *pPass=NULL ); | ||
126 | |||
127 | private: // List variables | ||
128 | BuildList lTmp; | ||
129 | |||
130 | public: // Rules functions | ||
131 | void addRule( const char *sName ); | ||
132 | void addRuleMatches(); | ||
133 | void addRuleProduces(); | ||
134 | void addRuleRequires(); | ||
135 | void addRuleInputFilter(); | ||
136 | void addRulePerform(); | ||
137 | void setRuleAggregate(); | ||
138 | |||
139 | private: // Rule variables | ||
140 | class RuleInfo | ||
141 | { | ||
142 | public: | ||
143 | std::string sName; | ||
144 | Function *pMatches; | ||
145 | BuildList lProduces; | ||
146 | BuildList lRequires; | ||
147 | FunctionList lFilter; | ||
148 | PerformList lPerform; | ||
149 | Function *pAggregate; | ||
150 | }; | ||
151 | |||
152 | typedef std::list<RuleInfo> RuleTmpList; | ||
153 | RuleTmpList lRuleTmp; | ||
154 | |||
155 | public: // Action functions | ||
156 | void addAction(); | ||
157 | void addAction( const char *sName ); | ||
158 | void addCommand( int nType ); | ||
159 | void addGrpCommand( const char *sGroup, int nType ); | ||
160 | |||
161 | private: // Action variables | ||
162 | typedef struct ActionTmpCmd | ||
163 | { | ||
164 | ActionTmpCmd( int nAct, BuildList &l ) : | ||
165 | nAct( nAct ), bGroup( false ), lCmds( l ) { }; | ||
166 | ActionTmpCmd( int nAct, const char *s ) : | ||
167 | nAct( nAct ), bGroup( true ), sGroup( s ) { }; | ||
168 | int nAct; | ||
169 | bool bGroup; | ||
170 | BuildList lCmds; | ||
171 | std::string sGroup; | ||
172 | } ActionTmpCmd; | ||
173 | //typedef std::pair<int, BuildList> ActionTmpCmd; | ||
174 | //typedef std::pair<int, std::string> ActionTmpGrpCmd | ||
175 | typedef std::list<ActionTmpCmd> ActionTmpCmdList; | ||
176 | //typedef std::list<ActionTmpGrpCmd> ActionTmpGrpCmdList; | ||
177 | typedef std::pair<std::string, ActionTmpCmdList> ActionTmp; | ||
178 | typedef std::list<ActionTmp> ActionTmpList; | ||
179 | ActionTmpList lActions; | ||
180 | |||
181 | public: // Global variable functions | ||
182 | void addGlobalSet( const char *sVar, const char *sValue, int nHow ); | ||
183 | |||
184 | private: // Global variable variables | ||
185 | SetVarList lGlobalVars; | ||
186 | |||
187 | public: // Debug | ||
188 | void debugDump(); | ||
189 | void printBuildList( const BuildList &lst ); | ||
190 | }; | ||
191 | |||
192 | #endif | ||
diff --git a/src/cache.cpp b/src/cache.cpp deleted file mode 100644 index d2bf537..0000000 --- a/src/cache.cpp +++ /dev/null | |||
@@ -1,149 +0,0 @@ | |||
1 | #include "cache.h" | ||
2 | #include "bu/fstring.h" | ||
3 | #include "bu/archive.h" | ||
4 | |||
5 | Cache::Cache() | ||
6 | { | ||
7 | } | ||
8 | |||
9 | Cache::~Cache() | ||
10 | { | ||
11 | for( std::map<std::string, Entry *>::iterator i = mCache.begin(); | ||
12 | i != mCache.end(); i++ ) | ||
13 | { | ||
14 | delete (*i).second; | ||
15 | } | ||
16 | } | ||
17 | |||
18 | void Cache::archive( class Bu::ArchiveBase &ar ) | ||
19 | { | ||
20 | if( ar.isLoading() ) | ||
21 | { | ||
22 | uint32_t sCache, sData, sIndex; | ||
23 | |||
24 | ar >> sIndex; | ||
25 | Bu::FString *Index = new Bu::FString[sIndex]; | ||
26 | for( uint32_t i = 0; i < sIndex; i++ ) | ||
27 | { | ||
28 | ar >> Index[i]; | ||
29 | } | ||
30 | |||
31 | ar >> sCache; | ||
32 | uint32_t nTmp; | ||
33 | for( uint32_t i = 0; i < sCache; i++ ) | ||
34 | { | ||
35 | Entry *e = new Entry; | ||
36 | ar >> e->tCreated; | ||
37 | ar >> sData; | ||
38 | std::list<std::string> &lData = e->lData; | ||
39 | for( uint32_t j = 0; j < sData; j++ ) | ||
40 | { | ||
41 | ar >> nTmp; | ||
42 | lData.push_back( Index[nTmp].getStr() ); | ||
43 | } | ||
44 | ar >> nTmp; | ||
45 | mCache[Index[nTmp].getStr()] = e; | ||
46 | } | ||
47 | /* | ||
48 | uint32_t sCache, sData; | ||
49 | ar >> sCache; | ||
50 | std::string sTmp; | ||
51 | |||
52 | for( uint32_t i = 0; i < sCache; i++ ) | ||
53 | { | ||
54 | Entry *e = new Entry; | ||
55 | ar >> e->tCreated; | ||
56 | ar >> sData; | ||
57 | std::list<std::string> &lData = e->lData; | ||
58 | for( uint32_t j = 0; j < sData; j++ ) | ||
59 | { | ||
60 | ar >> sTmp; | ||
61 | lData.push_back( sTmp ); | ||
62 | } | ||
63 | ar >> sTmp; | ||
64 | mCache[sTmp] = e; | ||
65 | } | ||
66 | */ | ||
67 | } | ||
68 | else | ||
69 | { | ||
70 | std::map<std::string, uint32_t> mIndex; | ||
71 | for( std::map<std::string, Entry *>::iterator i = mCache.begin(); | ||
72 | i != mCache.end(); i++ ) | ||
73 | { | ||
74 | mIndex[(*i).first] = 0; | ||
75 | std::list<std::string> &lData = (*i).second->lData; | ||
76 | for( std::list<std::string>::iterator j = lData.begin(); | ||
77 | j != lData.end(); j++ ) | ||
78 | { | ||
79 | mIndex[(*j)] = 0; | ||
80 | } | ||
81 | } | ||
82 | |||
83 | ar << (uint32_t)mIndex.size(); | ||
84 | uint32_t cnt = 0; | ||
85 | for( std::map<std::string, uint32_t>::iterator i = mIndex.begin(); | ||
86 | i != mIndex.end(); i++ ) | ||
87 | { | ||
88 | (*i).second = cnt; | ||
89 | cnt++; | ||
90 | Bu::FString s( ((*i).first).c_str(), ((*i).first).size() ); | ||
91 | ar << s; | ||
92 | } | ||
93 | |||
94 | ar << (uint32_t)mCache.size(); | ||
95 | for( std::map<std::string, Entry *>::iterator i = mCache.begin(); | ||
96 | i != mCache.end(); i++ ) | ||
97 | { | ||
98 | ar << (*i).second->tCreated; | ||
99 | std::list<std::string> &lData = (*i).second->lData; | ||
100 | ar << (uint32_t)lData.size(); | ||
101 | for( std::list<std::string>::iterator j = lData.begin(); | ||
102 | j != lData.end(); j++ ) | ||
103 | { | ||
104 | ar << mIndex[(*j)]; | ||
105 | } | ||
106 | |||
107 | ar << mIndex[(*i).first]; | ||
108 | } | ||
109 | |||
110 | |||
111 | /* | ||
112 | ar << mCache.size(); | ||
113 | for( std::map<std::string, Entry *>::iterator i = mCache.begin(); | ||
114 | i != mCache.end(); i++ ) | ||
115 | { | ||
116 | ar << (*i).second->tCreated; | ||
117 | std::list<std::string> &lData = (*i).second->lData; | ||
118 | ar << lData.size(); | ||
119 | for( std::list<std::string>::iterator j = lData.begin(); | ||
120 | j != lData.end(); j++ ) | ||
121 | { | ||
122 | ar << (*j); | ||
123 | } | ||
124 | |||
125 | std::string str = (*i).first; | ||
126 | ar << str; | ||
127 | } | ||
128 | */ | ||
129 | } | ||
130 | } | ||
131 | |||
132 | Cache::Entry *Cache::get( const std::string &id ) | ||
133 | { | ||
134 | std::map<std::string, Entry *>::iterator i = mCache.find( id ); | ||
135 | if( i != mCache.end() ) | ||
136 | return (*i).second; | ||
137 | |||
138 | return NULL; | ||
139 | } | ||
140 | |||
141 | void Cache::put( const std::string &id, Entry *data ) | ||
142 | { | ||
143 | std::map<std::string, Entry *>::iterator i = mCache.find( id ); | ||
144 | if( i != mCache.end() ) | ||
145 | delete (*i).second; | ||
146 | |||
147 | mCache[id] = data; | ||
148 | } | ||
149 | |||
diff --git a/src/cache.h b/src/cache.h deleted file mode 100644 index 50264de..0000000 --- a/src/cache.h +++ /dev/null | |||
@@ -1,33 +0,0 @@ | |||
1 | #ifndef CACHE_H | ||
2 | #define CACHE_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <time.h> | ||
6 | #include "bu/archival.h" | ||
7 | #include <list> | ||
8 | #include <map> | ||
9 | #include <string> | ||
10 | |||
11 | class Cache : public Bu::Archival | ||
12 | { | ||
13 | public: | ||
14 | Cache(); | ||
15 | virtual ~Cache(); | ||
16 | |||
17 | virtual void archive( class Bu::ArchiveBase &ar ); | ||
18 | |||
19 | class Entry | ||
20 | { | ||
21 | public: | ||
22 | uint32_t tCreated; | ||
23 | std::list<std::string> lData; | ||
24 | }; | ||
25 | |||
26 | Entry *get( const std::string &id ); | ||
27 | void put( const std::string &id, Entry *data ); | ||
28 | |||
29 | private: | ||
30 | std::map<std::string, Entry *> mCache; | ||
31 | }; | ||
32 | |||
33 | #endif | ||
diff --git a/src/function.cpp b/src/function.cpp deleted file mode 100644 index 6e4f1d7..0000000 --- a/src/function.cpp +++ /dev/null | |||
@@ -1,25 +0,0 @@ | |||
1 | #include "function.h" | ||
2 | |||
3 | Function::Function() | ||
4 | { | ||
5 | } | ||
6 | |||
7 | Function::~Function() | ||
8 | { | ||
9 | } | ||
10 | |||
11 | void Function::addParam( const char *str ) | ||
12 | { | ||
13 | lParams.push_back( str ); | ||
14 | } | ||
15 | |||
16 | void Function::copyData( Function *pSrc, Build &bld, const StringList *cont, VarMap *mExtra ) | ||
17 | { | ||
18 | lParams.clear(); | ||
19 | for( std::list<std::string>::iterator i = pSrc->lParams.begin(); | ||
20 | i != pSrc->lParams.end(); i++ ) | ||
21 | { | ||
22 | lParams.push_back( bld.replVars( *i, cont, mExtra ) ); | ||
23 | } | ||
24 | } | ||
25 | |||
diff --git a/src/function.h b/src/function.h deleted file mode 100644 index af0d3fc..0000000 --- a/src/function.h +++ /dev/null | |||
@@ -1,23 +0,0 @@ | |||
1 | #ifndef FUNCTION_H | ||
2 | #define FUNCTION_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include "build.h" | ||
6 | |||
7 | class Function | ||
8 | { | ||
9 | public: | ||
10 | Function(); | ||
11 | virtual ~Function(); | ||
12 | |||
13 | void addParam( const char *str ); | ||
14 | virtual void execute( Build *bld, const StringList &lInput, StringList &lOutput )=0; | ||
15 | virtual Function *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) = 0; | ||
16 | void copyData( Function *pSrc, Build &bld, const StringList *cont, VarMap *mExtra ); | ||
17 | |||
18 | protected: | ||
19 | StringList lParams; | ||
20 | |||
21 | }; | ||
22 | |||
23 | #endif | ||
diff --git a/src/functioncommandtolist.cpp b/src/functioncommandtolist.cpp deleted file mode 100644 index 68c4564..0000000 --- a/src/functioncommandtolist.cpp +++ /dev/null | |||
@@ -1,68 +0,0 @@ | |||
1 | #include "functioncommandtolist.h" | ||
2 | #include "bu/plugger.h" | ||
3 | |||
4 | PluginInterface2(commandToList, FunctionCommandToList, Function, "Mike Buland", 0, 1 ); | ||
5 | |||
6 | FunctionCommandToList::FunctionCommandToList() | ||
7 | { | ||
8 | } | ||
9 | |||
10 | FunctionCommandToList::~FunctionCommandToList() | ||
11 | { | ||
12 | } | ||
13 | |||
14 | void FunctionCommandToList::execute( Build *bld, const StringList &lInput, StringList &lOutput ) | ||
15 | { | ||
16 | //rView.beginExtraRequiresCheck( s.c_str() ); | ||
17 | //rView.executeCmd( s.c_str() ); | ||
18 | FILE *fcmd = popen( lParams.front().c_str(), "r" ); | ||
19 | std::string rhs; | ||
20 | bool bHeader = true; | ||
21 | for(;;) | ||
22 | { | ||
23 | if( feof( fcmd ) ) | ||
24 | break; | ||
25 | int cc = fgetc( fcmd ); | ||
26 | if( cc == EOF ) | ||
27 | break; | ||
28 | unsigned char c = cc; | ||
29 | if( bHeader ) | ||
30 | { | ||
31 | if( c == ':' ) | ||
32 | bHeader = false; | ||
33 | } | ||
34 | else | ||
35 | { | ||
36 | if( c == ' ' || c == '\t' ) | ||
37 | { | ||
38 | if( rhs != "" ) | ||
39 | { | ||
40 | lOutput.push_back( rhs ); | ||
41 | rhs = ""; | ||
42 | } | ||
43 | } | ||
44 | else | ||
45 | { | ||
46 | if( c == '\\' ) | ||
47 | c = fgetc( fcmd ); | ||
48 | if( c != '\n' ) | ||
49 | rhs += c; | ||
50 | } | ||
51 | } | ||
52 | } | ||
53 | if( rhs != "" ) | ||
54 | { | ||
55 | lOutput.push_back( rhs ); | ||
56 | rhs = ""; | ||
57 | } | ||
58 | pclose( fcmd ); | ||
59 | //rView.endExtraRequiresCheck(); | ||
60 | } | ||
61 | |||
62 | Function *FunctionCommandToList::duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) | ||
63 | { | ||
64 | Function *pRet = new FunctionCommandToList(); | ||
65 | pRet->copyData( this, bld, cont, mExtra ); | ||
66 | return pRet; | ||
67 | } | ||
68 | |||
diff --git a/src/functioncommandtolist.h b/src/functioncommandtolist.h deleted file mode 100644 index 05bc393..0000000 --- a/src/functioncommandtolist.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef FUNCTION_COMMAND_TO_LIST_H | ||
2 | #define FUNCTION__H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "function.h" | ||
7 | |||
8 | class FunctionCommandToList : public Function | ||
9 | { | ||
10 | public: | ||
11 | FunctionCommandToList(); | ||
12 | virtual ~FunctionCommandToList(); | ||
13 | |||
14 | virtual void execute( Build *bld, const StringList &lInput, StringList &lOutput ); | ||
15 | virtual Function *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ); | ||
16 | |||
17 | private: | ||
18 | |||
19 | }; | ||
20 | |||
21 | #endif | ||
diff --git a/src/functiondirectoriesin.cpp b/src/functiondirectoriesin.cpp deleted file mode 100644 index 0ebbbc8..0000000 --- a/src/functiondirectoriesin.cpp +++ /dev/null | |||
@@ -1,69 +0,0 @@ | |||
1 | #include <dirent.h> | ||
2 | |||
3 | #include "functiondirectoriesin.h" | ||
4 | #include "bu/plugger.h" | ||
5 | |||
6 | PluginInterface2(directoriesIn, FunctionDirectoriesIn, Function, "Mike Buland", 0, 1 ); | ||
7 | |||
8 | FunctionDirectoriesIn::FunctionDirectoriesIn() | ||
9 | { | ||
10 | } | ||
11 | |||
12 | FunctionDirectoriesIn::~FunctionDirectoriesIn() | ||
13 | { | ||
14 | } | ||
15 | |||
16 | void FunctionDirectoriesIn::execute( Build *bld, const StringList &lInput, StringList &lOutput ) | ||
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; | ||
28 | if( lParams.size() >= 2 ) | ||
29 | { | ||
30 | StringList::iterator i = lParams.begin(); | ||
31 | i++; | ||
32 | prefix = *i; | ||
33 | } | ||
34 | else | ||
35 | { | ||
36 | prefix = lParams.front() + "/"; | ||
37 | } | ||
38 | |||
39 | while( (e = readdir( d )) ) | ||
40 | { | ||
41 | if( e->d_type == DT_DIR ) | ||
42 | { | ||
43 | if( e->d_name[0] == '.' || e->d_name[0] == '\0' ) | ||
44 | continue; | ||
45 | std::string sOut = prefix + e->d_name; | ||
46 | lOutput.push_back( sOut ); | ||
47 | if( bld ) | ||
48 | { | ||
49 | std::string sV = lParams.front() + "/"; | ||
50 | sV += e->d_name; | ||
51 | bld->set( sOut, "fulldir", sV ); | ||
52 | } | ||
53 | else | ||
54 | { | ||
55 | printf("no build access.\n"); | ||
56 | } | ||
57 | } | ||
58 | } | ||
59 | |||
60 | closedir( d ); | ||
61 | } | ||
62 | |||
63 | Function *FunctionDirectoriesIn::duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) | ||
64 | { | ||
65 | Function *pRet = new FunctionDirectoriesIn(); | ||
66 | pRet->copyData( this, bld, cont, mExtra ); | ||
67 | return pRet; | ||
68 | } | ||
69 | |||
diff --git a/src/functiondirectoriesin.h b/src/functiondirectoriesin.h deleted file mode 100644 index 7ec86e3..0000000 --- a/src/functiondirectoriesin.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef FUNCTION_DIRECTORIES_IN_H | ||
2 | #define FUNCTION_DIRECTORIES_IN_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "function.h" | ||
7 | |||
8 | class FunctionDirectoriesIn : public Function | ||
9 | { | ||
10 | public: | ||
11 | FunctionDirectoriesIn(); | ||
12 | virtual ~FunctionDirectoriesIn(); | ||
13 | |||
14 | virtual void execute( Build *bld, const StringList &lInput, StringList &lOutput ); | ||
15 | virtual Function *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ); | ||
16 | |||
17 | private: | ||
18 | |||
19 | }; | ||
20 | |||
21 | #endif | ||
diff --git a/src/functionfactory.cpp b/src/functionfactory.cpp deleted file mode 100644 index f72e8f6..0000000 --- a/src/functionfactory.cpp +++ /dev/null | |||
@@ -1,22 +0,0 @@ | |||
1 | #include "functionfactory.h" | ||
2 | |||
3 | extern struct Bu::PluginInfo directoriesIn; | ||
4 | extern struct Bu::PluginInfo filesIn; | ||
5 | extern struct Bu::PluginInfo regexp; | ||
6 | extern struct Bu::PluginInfo toString; | ||
7 | extern struct Bu::PluginInfo commandToList; | ||
8 | extern struct Bu::PluginInfo targets; | ||
9 | |||
10 | FunctionFactory::FunctionFactory() | ||
11 | { | ||
12 | registerBuiltinPlugin( &directoriesIn ); | ||
13 | registerBuiltinPlugin( &filesIn ); | ||
14 | registerBuiltinPlugin( ®exp ); | ||
15 | registerBuiltinPlugin( &toString ); | ||
16 | registerBuiltinPlugin( &commandToList ); | ||
17 | registerBuiltinPlugin( &targets ); | ||
18 | } | ||
19 | |||
20 | FunctionFactory::~FunctionFactory() | ||
21 | { | ||
22 | } | ||
diff --git a/src/functionfactory.h b/src/functionfactory.h deleted file mode 100644 index 2cc28fe..0000000 --- a/src/functionfactory.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #ifndef FUNCTION_FACTORY_H | ||
2 | #define FUNCTION_FACTORY_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "bu/plugger.h" | ||
7 | #include "bu/singleton.h" | ||
8 | #include "function.h" | ||
9 | |||
10 | class FunctionFactory : public Bu::Plugger<Function>, public Bu::Singleton<FunctionFactory> | ||
11 | { | ||
12 | public: | ||
13 | FunctionFactory(); | ||
14 | virtual ~FunctionFactory(); | ||
15 | |||
16 | private: | ||
17 | |||
18 | }; | ||
19 | |||
20 | #endif | ||
diff --git a/src/functionfilesin.cpp b/src/functionfilesin.cpp deleted file mode 100644 index 5301cd2..0000000 --- a/src/functionfilesin.cpp +++ /dev/null | |||
@@ -1,58 +0,0 @@ | |||
1 | #include <dirent.h> | ||
2 | |||
3 | #include "functionfilesin.h" | ||
4 | #include "bu/plugger.h" | ||
5 | #include "build.h" | ||
6 | |||
7 | PluginInterface2(filesIn, FunctionFilesIn, Function, "Mike Buland", 0, 1 ); | ||
8 | |||
9 | FunctionFilesIn::FunctionFilesIn() | ||
10 | { | ||
11 | } | ||
12 | |||
13 | FunctionFilesIn::~FunctionFilesIn() | ||
14 | { | ||
15 | } | ||
16 | |||
17 | void FunctionFilesIn::execute( Build *bld, const StringList &lInput, StringList &lOutput ) | ||
18 | { | ||
19 | DIR *d = opendir( lParams.front().c_str() ); | ||
20 | if( d == NULL ) | ||
21 | throw BuildException( | ||
22 | "Can't open directory %s.", | ||
23 | lParams.front().c_str() | ||
24 | ); | ||
25 | |||
26 | struct dirent *e; | ||
27 | |||
28 | std::string prefix; | ||
29 | if( lParams.size() >= 2 ) | ||
30 | { | ||
31 | StringList::iterator i = lParams.begin(); | ||
32 | i++; | ||
33 | prefix = *i; | ||
34 | } | ||
35 | else | ||
36 | { | ||
37 | prefix = lParams.front() + "/"; | ||
38 | } | ||
39 | |||
40 | while( (e = readdir( d )) ) | ||
41 | { | ||
42 | if( e->d_type != DT_DIR ) | ||
43 | { | ||
44 | if( e->d_name[0] != '.') | ||
45 | lOutput.push_back( prefix + e->d_name ); | ||
46 | } | ||
47 | } | ||
48 | |||
49 | closedir( d ); | ||
50 | } | ||
51 | |||
52 | Function *FunctionFilesIn::duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) | ||
53 | { | ||
54 | Function *pRet = new FunctionFilesIn(); | ||
55 | pRet->copyData( this, bld, cont, mExtra ); | ||
56 | return pRet; | ||
57 | } | ||
58 | |||
diff --git a/src/functionfilesin.h b/src/functionfilesin.h deleted file mode 100644 index 904837f..0000000 --- a/src/functionfilesin.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef FUNCTION_FILES_IN_H | ||
2 | #define FUNCTION_FILES_IN_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "function.h" | ||
7 | |||
8 | class FunctionFilesIn : public Function | ||
9 | { | ||
10 | public: | ||
11 | FunctionFilesIn(); | ||
12 | virtual ~FunctionFilesIn(); | ||
13 | |||
14 | virtual void execute( Build *bld, const StringList &lInput, StringList &lOutput ); | ||
15 | virtual Function *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ); | ||
16 | |||
17 | private: | ||
18 | |||
19 | }; | ||
20 | |||
21 | #endif | ||
diff --git a/src/functionregexp.cpp b/src/functionregexp.cpp deleted file mode 100644 index 2dc18b2..0000000 --- a/src/functionregexp.cpp +++ /dev/null | |||
@@ -1,86 +0,0 @@ | |||
1 | #include "functionregexp.h" | ||
2 | #include "bu/plugger.h" | ||
3 | #include "regexp.h" | ||
4 | |||
5 | PluginInterface2(regexp, FunctionRegexp, Function, "Mike Buland", 0, 1 ); | ||
6 | |||
7 | FunctionRegexp::FunctionRegexp() | ||
8 | { | ||
9 | } | ||
10 | |||
11 | FunctionRegexp::~FunctionRegexp() | ||
12 | { | ||
13 | } | ||
14 | |||
15 | void FunctionRegexp::execute( Build *bld, const StringList &lInput, StringList &lOutput ) | ||
16 | { | ||
17 | if( lParams.size() == 1 ) | ||
18 | { | ||
19 | RegExp re( lParams.front().c_str() ); | ||
20 | |||
21 | for( StringList::const_iterator i = lInput.begin(); | ||
22 | i != lInput.end(); i++ ) | ||
23 | { | ||
24 | if( re.execute( (*i).c_str() ) ) | ||
25 | { | ||
26 | lOutput.push_back( *i ); | ||
27 | if( bld ) | ||
28 | { | ||
29 | int jmax = re.getNumSubStrings(); | ||
30 | for( int j = 0; j < jmax; j++ ) | ||
31 | { | ||
32 | char buf[30]; | ||
33 | sprintf( buf, "re:%d", j ); | ||
34 | bld->set( *i, buf, re.getSubString( j ) ); | ||
35 | } | ||
36 | } | ||
37 | } | ||
38 | } | ||
39 | } | ||
40 | else | ||
41 | { | ||
42 | if( !bld ) | ||
43 | { | ||
44 | throw BuildException("You apparently can't use regexp with two params here. Isn't that odd?"); | ||
45 | } | ||
46 | |||
47 | RegExp re( lParams.front().c_str() ); | ||
48 | lParams.pop_front(); | ||
49 | std::string p2 = lParams.front(); | ||
50 | |||
51 | for( StringList::const_iterator i = lInput.begin(); | ||
52 | i != lInput.end(); i++ ) | ||
53 | { | ||
54 | if( re.execute( (*i).c_str() ) ) | ||
55 | { | ||
56 | VarMap ext; | ||
57 | int jmax = re.getNumSubStrings(); | ||
58 | for( int j = 0; j < jmax; j++ ) | ||
59 | { | ||
60 | char buf[30]; | ||
61 | sprintf( buf, "re:%d", j ); | ||
62 | ext[buf] = re.getSubString( j ); | ||
63 | } | ||
64 | |||
65 | std::string sNew = bld->replVars( p2, NULL, &ext ); | ||
66 | lOutput.push_back( sNew ); | ||
67 | |||
68 | for( int j = 0; j < jmax; j++ ) | ||
69 | { | ||
70 | char buf[30]; | ||
71 | sprintf( buf, "re:%d", j ); | ||
72 | bld->set( sNew, buf, re.getSubString( j ) ); | ||
73 | } | ||
74 | bld->copyContext( *i, sNew ); | ||
75 | } | ||
76 | } | ||
77 | } | ||
78 | } | ||
79 | |||
80 | Function *FunctionRegexp::duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) | ||
81 | { | ||
82 | Function *pRet = new FunctionRegexp(); | ||
83 | pRet->copyData( this, bld, cont, mExtra ); | ||
84 | return pRet; | ||
85 | } | ||
86 | |||
diff --git a/src/functionregexp.h b/src/functionregexp.h deleted file mode 100644 index 42fe811..0000000 --- a/src/functionregexp.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef FUNCTION_REGEXP_H | ||
2 | #define FUNCTION_REGEXP_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "function.h" | ||
7 | |||
8 | class FunctionRegexp : public Function | ||
9 | { | ||
10 | public: | ||
11 | FunctionRegexp(); | ||
12 | virtual ~FunctionRegexp(); | ||
13 | |||
14 | virtual void execute( Build *bld, const StringList &lInput, StringList &lOutput ); | ||
15 | virtual Function *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ); | ||
16 | |||
17 | private: | ||
18 | |||
19 | }; | ||
20 | |||
21 | #endif | ||
diff --git a/src/functiontargets.cpp b/src/functiontargets.cpp deleted file mode 100644 index a94f43e..0000000 --- a/src/functiontargets.cpp +++ /dev/null | |||
@@ -1,35 +0,0 @@ | |||
1 | #include "functiontargets.h" | ||
2 | #include "bu/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 StringList *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 deleted file mode 100644 index f42ce96..0000000 --- a/src/functiontargets.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
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 StringList *cont, VarMap *mExtra ); | ||
16 | |||
17 | private: | ||
18 | |||
19 | }; | ||
20 | |||
21 | #endif | ||
diff --git a/src/functiontostring.cpp b/src/functiontostring.cpp deleted file mode 100644 index 2fdcc1c..0000000 --- a/src/functiontostring.cpp +++ /dev/null | |||
@@ -1,33 +0,0 @@ | |||
1 | #include "functiontostring.h" | ||
2 | #include "bu/plugger.h" | ||
3 | |||
4 | PluginInterface2(toString, FunctionToString, Function, "Mike Buland", 0, 1 ); | ||
5 | |||
6 | FunctionToString::FunctionToString() | ||
7 | { | ||
8 | } | ||
9 | |||
10 | FunctionToString::~FunctionToString() | ||
11 | { | ||
12 | } | ||
13 | |||
14 | void FunctionToString::execute( Build *bld, const StringList &lInput, StringList &lOutput ) | ||
15 | { | ||
16 | std::string sOut; | ||
17 | |||
18 | for( StringList::const_iterator i = lInput.begin(); i != lInput.end(); i++ ) | ||
19 | { | ||
20 | if( i != lInput.begin() ) sOut += " "; | ||
21 | sOut += *i; | ||
22 | } | ||
23 | |||
24 | lOutput.push_back( sOut ); | ||
25 | } | ||
26 | |||
27 | Function *FunctionToString::duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) | ||
28 | { | ||
29 | Function *pRet = new FunctionToString(); | ||
30 | pRet->copyData( this, bld, cont, mExtra ); | ||
31 | return pRet; | ||
32 | } | ||
33 | |||
diff --git a/src/functiontostring.h b/src/functiontostring.h deleted file mode 100644 index d9c5af7..0000000 --- a/src/functiontostring.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef FUNCTION_TO_STRING_H | ||
2 | #define FUNCTION_TO_STRING_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "function.h" | ||
7 | |||
8 | class FunctionToString : public Function | ||
9 | { | ||
10 | public: | ||
11 | FunctionToString(); | ||
12 | virtual ~FunctionToString(); | ||
13 | |||
14 | virtual void execute( Build *bld, const StringList &lInput, StringList &lOutput ); | ||
15 | virtual Function *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ); | ||
16 | |||
17 | private: | ||
18 | |||
19 | }; | ||
20 | |||
21 | #endif | ||
diff --git a/src/main.cpp b/src/main.cpp deleted file mode 100644 index 1d3dc10..0000000 --- a/src/main.cpp +++ /dev/null | |||
@@ -1,172 +0,0 @@ | |||
1 | #include "buildparser.h" | ||
2 | //#include "viewerplain.h" | ||
3 | //#include "viewerpercent.h" | ||
4 | //#include "viewermake.h" | ||
5 | #include "bu/paramproc.h" | ||
6 | #include "bu/fstring.h" | ||
7 | #include "build.h" | ||
8 | #include "action.h" | ||
9 | |||
10 | #include <stdlib.h> | ||
11 | |||
12 | class Param : public Bu::ParamProc | ||
13 | { | ||
14 | public: | ||
15 | Param() : | ||
16 | sFile("build.conf"), | ||
17 | sCache(".build.cache"), | ||
18 | bDebug( false ), | ||
19 | bPostDebug( false ), | ||
20 | sView("colorpct"), | ||
21 | bInfo( false ), | ||
22 | bCleanMode( false ), | ||
23 | sDir("") | ||
24 | { | ||
25 | addHelpBanner("Build r?\n\n"); | ||
26 | addParam("file", 'f', &sFile, | ||
27 | "Set the input script, default: build.conf"); | ||
28 | addParam("info", 'i', &bInfo, | ||
29 | "Display useful info about the loaded config file.", NULL, "true" ); | ||
30 | addParam("chdir", 'C', &sDir, | ||
31 | "Change to the specified dir before doing anything else." ); | ||
32 | addParam("clean", 'c', &bCleanMode, | ||
33 | "Clean instead of checking the given action.", NULL, "true" ); | ||
34 | addParam('p', mkproc(Param::procViewPercent), | ||
35 | "Switch to percent view."); | ||
36 | addParam('P', mkproc(Param::procViewPlain), | ||
37 | "Switch to plain view."); | ||
38 | addParam("color", mkproc(Param::procColorPercent), | ||
39 | "Switch to colored percent view."); | ||
40 | addParam('m', mkproc(Param::procViewMake), | ||
41 | "Switch to 'make' style view."); | ||
42 | addParam("cache", &sCache, | ||
43 | "Set an alternative cache file, default: .build.cache" ); | ||
44 | addParam('d', &bDebug, | ||
45 | "Display debug info instead of building", NULL, "true" ); | ||
46 | addParam('D', &bPostDebug, | ||
47 | "Display debug info after building", NULL, "true" ); | ||
48 | addParam("help", mkproc(ParamProc::help), | ||
49 | "This help"); | ||
50 | //pViewer = new ViewerPlain; | ||
51 | } | ||
52 | |||
53 | virtual ~Param() | ||
54 | { | ||
55 | //delete pViewer; | ||
56 | } | ||
57 | |||
58 | virtual int cmdParam( int argc, char *argv[] ) | ||
59 | { | ||
60 | if( sAction.isSet() ) | ||
61 | { | ||
62 | printf("You can only specify one action per command line.\n\n"); | ||
63 | exit( 1 ); | ||
64 | } | ||
65 | sAction = argv[0]; | ||
66 | return 1; | ||
67 | } | ||
68 | |||
69 | int procViewPercent( int argc, char *argv[] ) | ||
70 | { | ||
71 | sView = "percent"; | ||
72 | } | ||
73 | |||
74 | int procViewPlain( int argc, char *argv[] ) | ||
75 | { | ||
76 | sView = "plain"; | ||
77 | } | ||
78 | |||
79 | int procViewMake( int argc, char *argv[] ) | ||
80 | { | ||
81 | sView = "make"; | ||
82 | } | ||
83 | |||
84 | int procColorPercent( int argc, char *argv[] ) | ||
85 | { | ||
86 | sView = "colorpct"; | ||
87 | } | ||
88 | |||
89 | Bu::FString sCache; | ||
90 | Bu::FString sFile; | ||
91 | Bu::FString sView; | ||
92 | Bu::FString sDir; | ||
93 | Bu::FString sAction; | ||
94 | //Viewer *pViewer; | ||
95 | bool bDebug; | ||
96 | bool bPostDebug; | ||
97 | bool bInfo; | ||
98 | bool bCleanMode; | ||
99 | |||
100 | private: | ||
101 | }; | ||
102 | |||
103 | int main( int argc, char *argv[] ) | ||
104 | { | ||
105 | Param prm; | ||
106 | prm.process( argc, argv ); | ||
107 | |||
108 | BuildParser bld; | ||
109 | Build *pBuild = NULL; | ||
110 | |||
111 | char *olddir = NULL; | ||
112 | |||
113 | try | ||
114 | { | ||
115 | if( prm.sDir != "" ) | ||
116 | { | ||
117 | olddir = new char[4096]; | ||
118 | getcwd( olddir, 4096 ); | ||
119 | chdir( prm.sDir.getStr() ); | ||
120 | } | ||
121 | |||
122 | pBuild = bld.load( prm.sFile.getStr() ); | ||
123 | pBuild->setCache( prm.sCache.getStr() ); | ||
124 | pBuild->setView( prm.sView.getStr() ); | ||
125 | if( prm.bCleanMode ) | ||
126 | pBuild->setMode( Action::actClean ); | ||
127 | |||
128 | if( prm.bInfo ) | ||
129 | { | ||
130 | pBuild->printInfo(); | ||
131 | delete pBuild; | ||
132 | if( olddir ) { chdir( olddir ); delete[] olddir; } | ||
133 | return 0; | ||
134 | } | ||
135 | if( prm.bDebug ) | ||
136 | { | ||
137 | printf("\n\n----------\nDebug dump\n----------\n"); | ||
138 | pBuild->debugDump(); | ||
139 | } | ||
140 | else | ||
141 | { | ||
142 | if( prm.sAction.isSet() ) | ||
143 | pBuild->execAction( prm.sAction.getStr() ); | ||
144 | else | ||
145 | pBuild->execAction(""); | ||
146 | } | ||
147 | if( prm.bPostDebug ) | ||
148 | { | ||
149 | printf("\n\n----------\nDebug dump\n----------\n"); | ||
150 | pBuild->debugDump(); | ||
151 | } | ||
152 | } | ||
153 | catch( BuildException &e ) | ||
154 | { | ||
155 | fputs( e.what(), stderr ); | ||
156 | fputs( "\n", stderr ); | ||
157 | if( prm.bPostDebug ) | ||
158 | { | ||
159 | printf("\n\n----------\nDebug dump\n----------\n"); | ||
160 | pBuild->debugDump(); | ||
161 | } | ||
162 | delete pBuild; | ||
163 | if( olddir ) { chdir( olddir ); delete[] olddir; } | ||
164 | return 1; | ||
165 | } | ||
166 | |||
167 | delete pBuild; | ||
168 | if( olddir ) { chdir( olddir ); delete[] olddir; } | ||
169 | |||
170 | return 0; | ||
171 | } | ||
172 | |||
diff --git a/src/parser.cpp b/src/parser.cpp deleted file mode 100644 index d9fd2d0..0000000 --- a/src/parser.cpp +++ /dev/null | |||
@@ -1,27 +0,0 @@ | |||
1 | #include "parser.h" | ||
2 | #include "build.h" | ||
3 | |||
4 | Parser::Parser() | ||
5 | { | ||
6 | } | ||
7 | |||
8 | Parser::~Parser() | ||
9 | { | ||
10 | } | ||
11 | |||
12 | void Parser::error( YYLTYPE *locp, const char *msg ) | ||
13 | { | ||
14 | fflush( stdout ); | ||
15 | throw BuildException("%s: %d.%d-%d.%d: %s", | ||
16 | file.c_str(), | ||
17 | locp->first_line, locp->first_column, | ||
18 | locp->last_line, locp->last_column, | ||
19 | msg ); | ||
20 | } | ||
21 | |||
22 | void Parser::error( const std::string &msg ) | ||
23 | { | ||
24 | fflush( stdout ); | ||
25 | throw BuildException("%s", msg.c_str() ); | ||
26 | } | ||
27 | |||
diff --git a/src/parser.h b/src/parser.h deleted file mode 100644 index 675e28b..0000000 --- a/src/parser.h +++ /dev/null | |||
@@ -1,40 +0,0 @@ | |||
1 | #ifndef PARSER_H | ||
2 | #define PARSER_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <string> | ||
6 | |||
7 | class Build; | ||
8 | |||
9 | #if ! defined (YYLTYPE) && ! defined (YYLTYPE_IS_DECLARED) | ||
10 | typedef struct YYLTYPE | ||
11 | { | ||
12 | int first_line; | ||
13 | int first_column; | ||
14 | int last_line; | ||
15 | int last_column; | ||
16 | } YYLTYPE; | ||
17 | # define yyltype YYLTYPE /* obsolescent; will be withdrawn */ | ||
18 | # define YYLTYPE_IS_DECLARED 1 | ||
19 | # define YYLTYPE_IS_TRIVIAL 1 | ||
20 | #endif | ||
21 | |||
22 | class Parser | ||
23 | { | ||
24 | public: | ||
25 | Parser(); | ||
26 | virtual ~Parser(); | ||
27 | |||
28 | virtual void error( YYLTYPE *locp, const char *msg ); | ||
29 | virtual void error( const std::string &msg ); | ||
30 | |||
31 | virtual Build *load( const std::string &sFile ) = 0; | ||
32 | |||
33 | protected: | ||
34 | std::string file; | ||
35 | |||
36 | private: | ||
37 | |||
38 | }; | ||
39 | |||
40 | #endif | ||
diff --git a/src/perform.cpp b/src/perform.cpp deleted file mode 100644 index 25d54c7..0000000 --- a/src/perform.cpp +++ /dev/null | |||
@@ -1,26 +0,0 @@ | |||
1 | #include "perform.h" | ||
2 | #include "build.h" | ||
3 | |||
4 | Perform::Perform() | ||
5 | { | ||
6 | } | ||
7 | |||
8 | Perform::~Perform() | ||
9 | { | ||
10 | } | ||
11 | |||
12 | void Perform::addParam( const char *sParam ) | ||
13 | { | ||
14 | lParam.push_back( sParam ); | ||
15 | } | ||
16 | |||
17 | void Perform::copyData( Perform *pSrc, Build &bld, const StringList *cont, VarMap *mExtra ) | ||
18 | { | ||
19 | lParam.clear(); | ||
20 | for( std::list<std::string>::iterator i = pSrc->lParam.begin(); | ||
21 | i != pSrc->lParam.end(); i++ ) | ||
22 | { | ||
23 | lParam.push_back( bld.replVars( *i, cont, mExtra ) ); | ||
24 | } | ||
25 | } | ||
26 | |||
diff --git a/src/perform.h b/src/perform.h deleted file mode 100644 index 031e007..0000000 --- a/src/perform.h +++ /dev/null | |||
@@ -1,55 +0,0 @@ | |||
1 | #ifndef PERFORM_H | ||
2 | #define PERFORM_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <list> | ||
6 | #include <string> | ||
7 | #include <map> | ||
8 | |||
9 | typedef std::map<std::string,std::string> VarMap; | ||
10 | typedef std::list<std::string> StringList; | ||
11 | |||
12 | class Build; | ||
13 | |||
14 | class Perform | ||
15 | { | ||
16 | public: | ||
17 | Perform(); | ||
18 | virtual ~Perform(); | ||
19 | |||
20 | void addParam( const char *sParam ); | ||
21 | virtual Perform *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) = 0; | ||
22 | virtual void execute( Build &bld ) = 0; | ||
23 | void copyData( Perform *pSrc, Build &bld, const StringList *cont, VarMap *mExtra ); | ||
24 | std::string getTarget() | ||
25 | { | ||
26 | return sTarget; | ||
27 | } | ||
28 | void setTarget( std::string sTarget ) | ||
29 | { | ||
30 | this->sTarget = sTarget; | ||
31 | } | ||
32 | |||
33 | std::list<class Function *> &getReqFuncs() | ||
34 | { | ||
35 | return lReqFuncs; | ||
36 | } | ||
37 | |||
38 | void setRule( const std::string &sRule ) | ||
39 | { | ||
40 | this->sRule = sRule; | ||
41 | } | ||
42 | |||
43 | std::string &getRule() | ||
44 | { | ||
45 | return sRule; | ||
46 | } | ||
47 | |||
48 | protected: | ||
49 | std::list<std::string> lParam; | ||
50 | std::string sTarget; | ||
51 | std::string sRule; | ||
52 | std::list<class Function *> lReqFuncs; | ||
53 | }; | ||
54 | |||
55 | #endif | ||
diff --git a/src/performcommand.cpp b/src/performcommand.cpp deleted file mode 100644 index 65827c5..0000000 --- a/src/performcommand.cpp +++ /dev/null | |||
@@ -1,35 +0,0 @@ | |||
1 | #include "performcommand.h" | ||
2 | #include "bu/plugger.h" | ||
3 | #include "build.h" | ||
4 | #include "viewer.h" | ||
5 | |||
6 | #include <stdlib.h> | ||
7 | |||
8 | PluginInterface2(command, PerformCommand, Perform, "Mike Buland", 0, 1 ); | ||
9 | |||
10 | PerformCommand::PerformCommand() | ||
11 | { | ||
12 | } | ||
13 | |||
14 | PerformCommand::~PerformCommand() | ||
15 | { | ||
16 | } | ||
17 | |||
18 | Perform *PerformCommand::duplicate( Build &bld, const StringList *cont, VarMap *mExtra ) | ||
19 | { | ||
20 | Perform *pRet = new PerformCommand(); | ||
21 | pRet->copyData( this, bld, cont, mExtra ); | ||
22 | return pRet; | ||
23 | } | ||
24 | |||
25 | void PerformCommand::execute( Build &bld ) | ||
26 | { | ||
27 | bld.getView()->executeCmd( lParam.front() ); | ||
28 | int n = system( lParam.front().c_str() ); | ||
29 | if( n != 0 ) | ||
30 | throw BuildException( | ||
31 | "Command exited with error code %d.", | ||
32 | WEXITSTATUS(n) | ||
33 | ); | ||
34 | } | ||
35 | |||
diff --git a/src/performcommand.h b/src/performcommand.h deleted file mode 100644 index 62bf61e..0000000 --- a/src/performcommand.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef PERFORM_COMMAND_H | ||
2 | #define PERFORM_COMMAND_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "perform.h" | ||
7 | |||
8 | class PerformCommand : public Perform | ||
9 | { | ||
10 | public: | ||
11 | PerformCommand(); | ||
12 | virtual ~PerformCommand(); | ||
13 | |||
14 | virtual Perform *duplicate( Build &bld, const StringList *cont, VarMap *mExtra ); | ||
15 | virtual void execute( Build &bld ); | ||
16 | |||
17 | private: | ||
18 | |||
19 | }; | ||
20 | |||
21 | #endif | ||
diff --git a/src/performfactory.cpp b/src/performfactory.cpp deleted file mode 100644 index 6926a3b..0000000 --- a/src/performfactory.cpp +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | #include "performfactory.h" | ||
2 | |||
3 | extern struct Bu::PluginInfo command; | ||
4 | |||
5 | PerformFactory::PerformFactory() | ||
6 | { | ||
7 | registerBuiltinPlugin( &command ); | ||
8 | } | ||
9 | |||
10 | PerformFactory::~PerformFactory() | ||
11 | { | ||
12 | } | ||
diff --git a/src/performfactory.h b/src/performfactory.h deleted file mode 100644 index 435d9c6..0000000 --- a/src/performfactory.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #ifndef PERFORM_FACTORY_H | ||
2 | #define PERFORM_FACTORY_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "perform.h" | ||
7 | #include "bu/plugger.h" | ||
8 | #include "bu/singleton.h" | ||
9 | |||
10 | class PerformFactory : public Bu::Plugger<Perform>, public Bu::Singleton<PerformFactory> | ||
11 | { | ||
12 | public: | ||
13 | PerformFactory(); | ||
14 | virtual ~PerformFactory(); | ||
15 | |||
16 | private: | ||
17 | |||
18 | }; | ||
19 | |||
20 | #endif | ||
diff --git a/src/regexp.cpp b/src/regexp.cpp deleted file mode 100644 index 4370667..0000000 --- a/src/regexp.cpp +++ /dev/null | |||
@@ -1,78 +0,0 @@ | |||
1 | #include "regexp.h" | ||
2 | #include "build.h" // For BuildException | ||
3 | #include "bu/fstring.h" | ||
4 | |||
5 | RegExp::RegExp() : | ||
6 | bCompiled( false ), | ||
7 | aSubStr( NULL ) | ||
8 | { | ||
9 | } | ||
10 | |||
11 | RegExp::RegExp( const char *sSrc ) : | ||
12 | bCompiled( false ), | ||
13 | aSubStr( NULL ) | ||
14 | { | ||
15 | compile( sSrc ); | ||
16 | } | ||
17 | |||
18 | RegExp::~RegExp() | ||
19 | { | ||
20 | if( bCompiled ) | ||
21 | { | ||
22 | regfree( &re ); | ||
23 | delete[] aSubStr; | ||
24 | } | ||
25 | } | ||
26 | |||
27 | void RegExp::compile( const char *sSrc ) | ||
28 | { | ||
29 | if( bCompiled ) | ||
30 | { | ||
31 | regfree( &re ); | ||
32 | delete[] aSubStr; | ||
33 | bCompiled = false; | ||
34 | } | ||
35 | |||
36 | int nErr = regcomp( &re, sSrc, REG_EXTENDED|REG_NEWLINE ); | ||
37 | if( nErr ) | ||
38 | { | ||
39 | size_t length = regerror( nErr, &re, NULL, 0 ); | ||
40 | char *buffer = new char[length]; | ||
41 | (void) regerror( nErr, &re, buffer, length ); | ||
42 | Bu::FString s( buffer ); | ||
43 | delete[] buffer; | ||
44 | throw BuildException( s.getStr() ); | ||
45 | } | ||
46 | bCompiled = true; | ||
47 | this->sSrc = sSrc; | ||
48 | |||
49 | nSubStr = re.re_nsub+1; | ||
50 | aSubStr = new regmatch_t[nSubStr]; | ||
51 | } | ||
52 | |||
53 | int RegExp::getNumSubStrings() | ||
54 | { | ||
55 | return nSubStr; | ||
56 | } | ||
57 | |||
58 | bool RegExp::execute( const char *sSrc ) | ||
59 | { | ||
60 | sTest = sSrc; | ||
61 | if( regexec( &re, sSrc, nSubStr, aSubStr, 0 ) ) | ||
62 | return false; | ||
63 | return true; | ||
64 | } | ||
65 | |||
66 | std::pair<int,int> RegExp::getSubStringRange( int nIndex ) | ||
67 | { | ||
68 | return std::pair<int,int>( aSubStr[nIndex].rm_so, aSubStr[nIndex].rm_eo ); | ||
69 | } | ||
70 | |||
71 | std::string RegExp::getSubString( int nIndex ) | ||
72 | { | ||
73 | return std::string( | ||
74 | sTest.getStr()+aSubStr[nIndex].rm_so, | ||
75 | aSubStr[nIndex].rm_eo - aSubStr[nIndex].rm_so | ||
76 | ); | ||
77 | } | ||
78 | |||
diff --git a/src/regexp.h b/src/regexp.h deleted file mode 100644 index a5fab14..0000000 --- a/src/regexp.h +++ /dev/null | |||
@@ -1,36 +0,0 @@ | |||
1 | #ifndef REG_EXP_H | ||
2 | #define REG_EXP_H | ||
3 | |||
4 | #include <string> | ||
5 | #include <stdint.h> | ||
6 | #include <regex.h> | ||
7 | #include <utility> | ||
8 | #include "bu/fstring.h" | ||
9 | |||
10 | class RegExp | ||
11 | { | ||
12 | public: | ||
13 | RegExp(); | ||
14 | RegExp( const char *sSrc ); | ||
15 | virtual ~RegExp(); | ||
16 | |||
17 | void compile( const char *sSrc ); | ||
18 | int getNumSubStrings(); | ||
19 | bool execute( const char *sSrc ); | ||
20 | std::pair<int,int> getSubStringRange( int nIndex ); | ||
21 | std::string getSubString( int nIndex ); | ||
22 | const char *getSource() | ||
23 | { | ||
24 | return sSrc.getStr(); | ||
25 | } | ||
26 | |||
27 | private: | ||
28 | Bu::FString sSrc; | ||
29 | Bu::FString sTest; | ||
30 | regex_t re; | ||
31 | bool bCompiled; | ||
32 | int nSubStr; | ||
33 | regmatch_t *aSubStr; | ||
34 | }; | ||
35 | |||
36 | #endif | ||
diff --git a/src/rule.cpp b/src/rule.cpp deleted file mode 100644 index 7924ba4..0000000 --- a/src/rule.cpp +++ /dev/null | |||
@@ -1,159 +0,0 @@ | |||
1 | #include "rule.h" | ||
2 | #include "build.h" | ||
3 | #include "function.h" | ||
4 | #include "perform.h" | ||
5 | |||
6 | #include <set> | ||
7 | |||
8 | Rule::Rule() : | ||
9 | pAggregate( NULL ) | ||
10 | { | ||
11 | } | ||
12 | |||
13 | Rule::~Rule() | ||
14 | { | ||
15 | } | ||
16 | |||
17 | StringList Rule::execute( Build &bld, StringList &lInput, PerformList &lPerf, bool bFirstOnly ) | ||
18 | { | ||
19 | StringList lOutput; | ||
20 | |||
21 | RuleList rl = bld.findChainRules( this ); | ||
22 | |||
23 | for( RuleList::iterator i = rl.begin(); i != rl.end(); i++ ) | ||
24 | { | ||
25 | (*i)->setTarget( sTarget ); | ||
26 | StringList tmp = (*i)->execute( bld, lInput, lPerf, bFirstOnly ); | ||
27 | lOutput.insert( lOutput.end(), tmp.begin(), tmp.end() ); | ||
28 | } | ||
29 | |||
30 | StringList lMine; | ||
31 | for( FunctionList::iterator i = lMatches.begin(); i != lMatches.end(); i++ ) | ||
32 | { | ||
33 | (*i)->execute( &bld, lInput, lMine ); | ||
34 | } | ||
35 | |||
36 | StringList lTmp; | ||
37 | for( FunctionList::iterator i = lFilter.begin(); i != lFilter.end(); i++ ) | ||
38 | { | ||
39 | (*i)->execute( &bld, lMine, lTmp ); | ||
40 | lMine.swap( lTmp ); | ||
41 | lTmp.clear(); | ||
42 | } | ||
43 | |||
44 | bool bHasProduces = true; | ||
45 | if( lProduces.empty() ) | ||
46 | { | ||
47 | bHasProduces = false; | ||
48 | lProduces.push_back( sTarget ); | ||
49 | } | ||
50 | |||
51 | { | ||
52 | std::set<std::string> sUsed; | ||
53 | for( StringList::iterator i = lInput.begin(); i != lInput.end(); i++ ) | ||
54 | { | ||
55 | isuck: if( i == lInput.end() ) break; | ||
56 | if( sUsed.find( *i ) != sUsed.end() ) | ||
57 | { | ||
58 | StringList::iterator j = i; | ||
59 | j++; | ||
60 | lInput.erase( i ); | ||
61 | i = j; | ||
62 | goto isuck; | ||
63 | } | ||
64 | sUsed.insert( *i ); | ||
65 | } | ||
66 | } | ||
67 | |||
68 | StringList lNewOut; | ||
69 | if( pAggregate ) | ||
70 | { | ||
71 | VarMap mTmp; | ||
72 | std::string target = lProduces.front();//, lProduces.front(), NULL ).c_str(); | ||
73 | mTmp["target"] = target; | ||
74 | lNewOut.push_back( target ); | ||
75 | |||
76 | for( StringList::iterator i = lMine.begin(); i != lMine.end(); i++ ) | ||
77 | { | ||
78 | bld.addRequires( target, (*i) ); | ||
79 | } | ||
80 | for( StringList::iterator i = lReqStrs.begin(); | ||
81 | i != lReqStrs.end(); i++ ) | ||
82 | { | ||
83 | bld.addRequires( target, (*i) ); | ||
84 | } | ||
85 | |||
86 | StringList lTmp; | ||
87 | pAggregate->execute( &bld, lMine, lTmp ); | ||
88 | mTmp["match"] = lTmp.front(); | ||
89 | |||
90 | for( PerformList::iterator k = lPerform.begin(); | ||
91 | k != lPerform.end(); k++ ) | ||
92 | { | ||
93 | StringList cont; | ||
94 | cont.push_front( target ); | ||
95 | Perform *p = (*k)->duplicate( bld, &cont, &mTmp ); | ||
96 | p->setTarget( target ); | ||
97 | p->setRule( sName ); | ||
98 | //p->setReqFuncs( &lReqFuncs ); | ||
99 | lPerf.push_back( p ); | ||
100 | } | ||
101 | } | ||
102 | else | ||
103 | { | ||
104 | for( StringList::iterator i = lMine.begin(); i != lMine.end(); i++ ) | ||
105 | { | ||
106 | for( StringList::iterator j = lProduces.begin(); | ||
107 | j != lProduces.end(); j++ ) | ||
108 | //StringList::iterator j = lProduces.begin(); | ||
109 | { | ||
110 | VarMap mTmp; | ||
111 | StringList cont; | ||
112 | cont.push_front( sTarget ); | ||
113 | cont.push_front( (*i) ); | ||
114 | std::string target = bld.replVars( (*j), &cont, NULL ); | ||
115 | mTmp["target"] = target; | ||
116 | lNewOut.push_back( target ); | ||
117 | mTmp["match"] = (*i); | ||
118 | bld.addRequires( target, (*i) ); | ||
119 | for( StringList::iterator k = lReqStrs.begin(); | ||
120 | k != lReqStrs.end(); k++ ) | ||
121 | { | ||
122 | bld.addRequires( target, (*k) ); | ||
123 | } | ||
124 | for( PerformList::iterator k = lPerform.begin(); | ||
125 | k != lPerform.end(); k++ ) | ||
126 | { | ||
127 | StringList cont2; | ||
128 | cont2.push_front( sTarget ); | ||
129 | cont2.push_front( (*i) ); | ||
130 | cont2.push_front( target ); | ||
131 | Perform *p = (*k)->duplicate( bld, &cont2, &mTmp ); | ||
132 | p->setTarget( target ); | ||
133 | p->setRule( sName ); | ||
134 | for( FunctionList::iterator f = lReqFuncs.begin(); | ||
135 | f != lReqFuncs.end(); f++ ) | ||
136 | { | ||
137 | p->getReqFuncs().push_back( | ||
138 | (*f)->duplicate( bld, &cont2, &mTmp ) | ||
139 | ); | ||
140 | } | ||
141 | lPerf.push_back( p ); | ||
142 | } | ||
143 | if( bFirstOnly ) | ||
144 | break; | ||
145 | } | ||
146 | } | ||
147 | } | ||
148 | |||
149 | lInput.insert( lInput.end(), lNewOut.begin(), lNewOut.end() ); | ||
150 | lOutput.insert( lOutput.end(), lNewOut.begin(), lNewOut.end() ); | ||
151 | |||
152 | if( bHasProduces == false ) | ||
153 | { | ||
154 | lProduces.clear(); | ||
155 | } | ||
156 | |||
157 | return lOutput; | ||
158 | } | ||
159 | |||
diff --git a/src/rule.h b/src/rule.h deleted file mode 100644 index c6e8336..0000000 --- a/src/rule.h +++ /dev/null | |||
@@ -1,86 +0,0 @@ | |||
1 | #ifndef RULE_H | ||
2 | #define RULE_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <string> | ||
6 | #include <list> | ||
7 | |||
8 | class Function; | ||
9 | class Perform; | ||
10 | class Build; | ||
11 | |||
12 | typedef std::list<Function *> FunctionList; | ||
13 | typedef std::list<Perform *> PerformList; | ||
14 | typedef std::list<std::string> StringList; | ||
15 | |||
16 | class Rule | ||
17 | { | ||
18 | public: | ||
19 | Rule(); | ||
20 | virtual ~Rule(); | ||
21 | |||
22 | StringList execute( Build &bld, StringList &lInput, PerformList &lPerf, bool bFirstOnly=true ); | ||
23 | |||
24 | void setTarget( const std::string &sTarget ) | ||
25 | { | ||
26 | this->sTarget = sTarget; | ||
27 | } | ||
28 | |||
29 | std::string getName() | ||
30 | { | ||
31 | return sName; | ||
32 | } | ||
33 | |||
34 | void setName( const std::string &sName ) | ||
35 | { | ||
36 | this->sName = sName; | ||
37 | } | ||
38 | |||
39 | FunctionList &getFilterList() | ||
40 | { | ||
41 | return lFilter; | ||
42 | } | ||
43 | |||
44 | PerformList &getPerformList() | ||
45 | { | ||
46 | return lPerform; | ||
47 | } | ||
48 | |||
49 | FunctionList &getMatchesList() | ||
50 | { | ||
51 | return lMatches; | ||
52 | } | ||
53 | |||
54 | StringList &getProducesList() | ||
55 | { | ||
56 | return lProduces; | ||
57 | } | ||
58 | |||
59 | void setAggregate( Function *pAggregate ) | ||
60 | { | ||
61 | this->pAggregate = pAggregate; | ||
62 | } | ||
63 | |||
64 | StringList &getReqStrList() | ||
65 | { | ||
66 | return lReqStrs; | ||
67 | } | ||
68 | |||
69 | FunctionList &getReqFuncList() | ||
70 | { | ||
71 | return lReqFuncs; | ||
72 | } | ||
73 | |||
74 | private: | ||
75 | std::string sName; | ||
76 | FunctionList lMatches; | ||
77 | FunctionList lFilter; | ||
78 | PerformList lPerform; | ||
79 | StringList lProduces; | ||
80 | std::string sTarget; | ||
81 | Function *pAggregate; | ||
82 | StringList lReqStrs; | ||
83 | FunctionList lReqFuncs; | ||
84 | }; | ||
85 | |||
86 | #endif | ||
diff --git a/src/stringproc.cpp b/src/stringproc.cpp deleted file mode 100644 index 23abca9..0000000 --- a/src/stringproc.cpp +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | #include "stringproc.h" | ||
2 | |||
3 | StringProc::StringProc( Build *pBld ) : | ||
4 | pBld( pBld ) | ||
5 | { | ||
6 | } | ||
7 | |||
8 | StringProc::~StringProc() | ||
9 | { | ||
10 | } | ||
11 | |||
12 | |||
diff --git a/src/stringproc.h b/src/stringproc.h deleted file mode 100644 index d408601..0000000 --- a/src/stringproc.h +++ /dev/null | |||
@@ -1,33 +0,0 @@ | |||
1 | #ifndef STRING_PROC_H | ||
2 | #define STRING_PROC_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <string> | ||
6 | #include <map> | ||
7 | #include <list> | ||
8 | |||
9 | class Build; | ||
10 | |||
11 | typedef std::map<std::string,std::string> VarMap; | ||
12 | typedef std::list<std::string> StringList; | ||
13 | |||
14 | class StringProc | ||
15 | { | ||
16 | public: | ||
17 | StringProc( Build *pBld ); | ||
18 | virtual ~StringProc(); | ||
19 | |||
20 | virtual std::string replVars( const std::string &sSrc, const StringList *pCont, VarMap *mExtra )=0; | ||
21 | |||
22 | protected: | ||
23 | Build *getBuild() | ||
24 | { | ||
25 | return pBld; | ||
26 | } | ||
27 | |||
28 | private: | ||
29 | Build *pBld; | ||
30 | |||
31 | }; | ||
32 | |||
33 | #endif | ||
diff --git a/src/stringprocbuild.cpp b/src/stringprocbuild.cpp deleted file mode 100644 index 419d819..0000000 --- a/src/stringprocbuild.cpp +++ /dev/null | |||
@@ -1,54 +0,0 @@ | |||
1 | #include "stringprocbuild.h" | ||
2 | #include "build.h" | ||
3 | |||
4 | StringProcBuild::StringProcBuild( Build *pBld ) : | ||
5 | StringProc( pBld ) | ||
6 | { | ||
7 | } | ||
8 | |||
9 | StringProcBuild::~StringProcBuild() | ||
10 | { | ||
11 | } | ||
12 | |||
13 | std::string StringProcBuild::replVars( const std::string &sSrc, const StringList *pCont, VarMap *mExtra ) | ||
14 | { | ||
15 | std::string sDes, sBuf; | ||
16 | int nMode = 0; | ||
17 | |||
18 | int nLen = sSrc.size(); | ||
19 | for( int j = 0; j < nLen; j++ ) | ||
20 | { | ||
21 | if( sSrc[j] == '{' ) | ||
22 | { | ||
23 | sBuf = ""; | ||
24 | nMode = 1; | ||
25 | } | ||
26 | else if( nMode == 0 ) | ||
27 | { | ||
28 | sDes += sSrc[j]; | ||
29 | } | ||
30 | else if( nMode == 1 ) | ||
31 | { | ||
32 | if( sSrc[j] == '}' ) | ||
33 | { | ||
34 | sDes += getBuild()->getVar( pCont, sBuf, mExtra ); | ||
35 | nMode = 0; | ||
36 | } | ||
37 | else | ||
38 | { | ||
39 | sBuf += sSrc[j]; | ||
40 | } | ||
41 | } | ||
42 | } | ||
43 | |||
44 | if( nMode == 1 ) | ||
45 | { | ||
46 | throw BuildException( | ||
47 | "Unterminated variable replacement found: \"%s\"", | ||
48 | sSrc.c_str() | ||
49 | ); | ||
50 | } | ||
51 | |||
52 | return sDes; | ||
53 | } | ||
54 | |||
diff --git a/src/stringprocbuild.h b/src/stringprocbuild.h deleted file mode 100644 index f3cf3b4..0000000 --- a/src/stringprocbuild.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #ifndef STRING_PROC_BUILD_H | ||
2 | #define STRING_PROC_BUILD_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "stringproc.h" | ||
7 | |||
8 | class StringProcBuild : public StringProc | ||
9 | { | ||
10 | public: | ||
11 | StringProcBuild( Build *pBld ); | ||
12 | virtual ~StringProcBuild(); | ||
13 | |||
14 | virtual std::string replVars( const std::string &sSrc, const StringList *pCont, VarMap *mExtra ); | ||
15 | |||
16 | private: | ||
17 | |||
18 | }; | ||
19 | |||
20 | #endif | ||
diff --git a/src/target.cpp b/src/target.cpp deleted file mode 100644 index 3150c38..0000000 --- a/src/target.cpp +++ /dev/null | |||
@@ -1,31 +0,0 @@ | |||
1 | #include "target.h" | ||
2 | #include "build.h" | ||
3 | #include "viewer.h" | ||
4 | |||
5 | Target::Target() : | ||
6 | bRun( false ) | ||
7 | { | ||
8 | } | ||
9 | |||
10 | Target::~Target() | ||
11 | { | ||
12 | } | ||
13 | |||
14 | void Target::run( Action::eAction nAct, Build &bld ) | ||
15 | { | ||
16 | bRun = true; | ||
17 | |||
18 | bld.getView()->beginCommand( nAct, sName ); | ||
19 | switch( nAct ) | ||
20 | { | ||
21 | case Action::actCheck: | ||
22 | check( bld ); | ||
23 | break; | ||
24 | |||
25 | case Action::actClean: | ||
26 | clean( bld ); | ||
27 | break; | ||
28 | } | ||
29 | bld.getView()->endCommand(); | ||
30 | } | ||
31 | |||
diff --git a/src/target.h b/src/target.h deleted file mode 100644 index f51e0e0..0000000 --- a/src/target.h +++ /dev/null | |||
@@ -1,63 +0,0 @@ | |||
1 | #ifndef TARGET_H | ||
2 | #define TARGET_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include <string> | ||
7 | #include <list> | ||
8 | |||
9 | #include "action.h" | ||
10 | |||
11 | typedef std::list<std::string> StringList; | ||
12 | |||
13 | class Build; | ||
14 | |||
15 | class Target | ||
16 | { | ||
17 | public: | ||
18 | Target(); | ||
19 | virtual ~Target(); | ||
20 | |||
21 | void run( Action::eAction nAct, Build &bld ); | ||
22 | virtual void check( Build &bld ) = 0; | ||
23 | virtual void clean( Build &bld ) = 0; | ||
24 | |||
25 | void setName( const std::string &sName ) | ||
26 | { | ||
27 | this->sName = sName; | ||
28 | } | ||
29 | |||
30 | std::string getName() | ||
31 | { | ||
32 | return sName; | ||
33 | } | ||
34 | |||
35 | void setRule( const std::string &sRule ) | ||
36 | { | ||
37 | this->sRule = sRule; | ||
38 | } | ||
39 | |||
40 | std::string getRule() | ||
41 | { | ||
42 | return sRule; | ||
43 | } | ||
44 | |||
45 | StringList &getInput() | ||
46 | { | ||
47 | return lInput; | ||
48 | } | ||
49 | |||
50 | bool wasRun() | ||
51 | { | ||
52 | return bRun; | ||
53 | } | ||
54 | |||
55 | |||
56 | private: | ||
57 | std::string sName; | ||
58 | std::string sRule; | ||
59 | StringList lInput; | ||
60 | bool bRun; | ||
61 | }; | ||
62 | |||
63 | #endif | ||
diff --git a/src/targetfactory.cpp b/src/targetfactory.cpp deleted file mode 100644 index a0bc0b0..0000000 --- a/src/targetfactory.cpp +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | #include "targetfactory.h" | ||
2 | |||
3 | extern struct Bu::PluginInfo file; | ||
4 | |||
5 | TargetFactory::TargetFactory() | ||
6 | { | ||
7 | registerBuiltinPlugin( &file ); | ||
8 | } | ||
9 | |||
10 | TargetFactory::~TargetFactory() | ||
11 | { | ||
12 | } | ||
diff --git a/src/targetfactory.h b/src/targetfactory.h deleted file mode 100644 index ee1fc2a..0000000 --- a/src/targetfactory.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #ifndef TARGET_FACTORY_H | ||
2 | #define TARGET_FACTORY_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "bu/plugger.h" | ||
7 | #include "bu/singleton.h" | ||
8 | #include "target.h" | ||
9 | |||
10 | class TargetFactory : public Bu::Plugger<Target>, public Bu::Singleton<TargetFactory> | ||
11 | { | ||
12 | public: | ||
13 | TargetFactory(); | ||
14 | virtual ~TargetFactory(); | ||
15 | |||
16 | private: | ||
17 | |||
18 | }; | ||
19 | |||
20 | #endif | ||
diff --git a/src/targetfile.cpp b/src/targetfile.cpp deleted file mode 100644 index 0e2d43e..0000000 --- a/src/targetfile.cpp +++ /dev/null | |||
@@ -1,158 +0,0 @@ | |||
1 | #include "targetfile.h" | ||
2 | #include "bu/plugger.h" | ||
3 | #include "rule.h" | ||
4 | #include "build.h" | ||
5 | #include "perform.h" | ||
6 | #include "function.h" | ||
7 | #include "viewer.h" | ||
8 | |||
9 | #include <set> | ||
10 | |||
11 | PluginInterface2(file, TargetFile, Target, "Mike Buland", 0, 1 ); | ||
12 | |||
13 | TargetFile::TargetFile() | ||
14 | { | ||
15 | } | ||
16 | |||
17 | TargetFile::~TargetFile() | ||
18 | { | ||
19 | } | ||
20 | |||
21 | void TargetFile::check( Build &bld ) | ||
22 | { | ||
23 | Rule *pRule = bld.getRule( getRule() ); | ||
24 | PerformList lPerf; | ||
25 | pRule->setTarget( getName() ); | ||
26 | StringList lFinal = pRule->execute( bld, getInput(), lPerf ); | ||
27 | |||
28 | { | ||
29 | std::set<std::string> sUsed; | ||
30 | for( PerformList::iterator i = lPerf.begin(); i != lPerf.end(); i++ ) | ||
31 | { | ||
32 | isuck: if( i == lPerf.end() ) break; | ||
33 | if( sUsed.find( (*i)->getTarget() ) != sUsed.end() ) | ||
34 | { | ||
35 | PerformList::iterator j = i; | ||
36 | j++; | ||
37 | delete *i; | ||
38 | lPerf.erase( i ); | ||
39 | i = j; | ||
40 | goto isuck; | ||
41 | } | ||
42 | sUsed.insert( (*i)->getTarget() ); | ||
43 | } | ||
44 | } | ||
45 | |||
46 | bld.getView()->beginPerforms( lPerf.size() ); | ||
47 | |||
48 | for( PerformList::iterator i = lPerf.begin(); i != lPerf.end(); i++ ) | ||
49 | { | ||
50 | StringList &reqs = bld.getRequires( (*i)->getTarget() ); | ||
51 | for( StringList::iterator j = reqs.begin(); j != reqs.end(); j++ ) | ||
52 | { | ||
53 | bld.chainTarget( *j ); | ||
54 | } | ||
55 | } | ||
56 | |||
57 | for( PerformList::iterator i = lPerf.begin(); i != lPerf.end(); i++ ) | ||
58 | { | ||
59 | time_t tTarget = getTime( bld, (*i)->getTarget() ); | ||
60 | StringList &reqs = bld.getRequires( (*i)->getTarget() ); | ||
61 | bool bExtras = false, bBuilt = false, bUpdate = false; | ||
62 | for( StringList::iterator j = reqs.begin(); j != reqs.end(); j++ ) | ||
63 | { | ||
64 | //bld.chainTarget( *j ); | ||
65 | if( getTime( bld, *j ) > tTarget ) | ||
66 | { | ||
67 | if( bUpdate == false ) | ||
68 | bld.getView()->skipRequiresCheck( false, (*i)->getTarget() ) ; | ||
69 | bld.getView()->beginPerform( *i ); | ||
70 | (*i)->execute( bld ); | ||
71 | bld.getView()->endPerform(); | ||
72 | updateTime( (*i)->getTarget() ); | ||
73 | bBuilt = true; | ||
74 | break; | ||
75 | } | ||
76 | if( bExtras == false ) | ||
77 | { | ||
78 | StringList::iterator jj = j; | ||
79 | jj++; | ||
80 | if( jj == reqs.end() ) | ||
81 | { | ||
82 | if( !bld.getCached( (*i)->getTarget(), tTarget, reqs ) ) | ||
83 | { | ||
84 | bld.updateCache( (*i)->getTarget(), (*i)->getReqFuncs(), reqs ); | ||
85 | bUpdate = true; | ||
86 | } | ||
87 | bExtras = true; | ||
88 | } | ||
89 | } | ||
90 | } | ||
91 | if( bBuilt == false ) | ||
92 | { | ||
93 | if( bUpdate == false ) | ||
94 | { | ||
95 | bld.getView()->skipRequiresCheck( false, (*i)->getTarget() ); | ||
96 | } | ||
97 | bld.getView()->skipPerform( *i ); | ||
98 | } | ||
99 | } | ||
100 | |||
101 | bld.getView()->endPerforms(); | ||
102 | } | ||
103 | |||
104 | void TargetFile::clean( Build &bld ) | ||
105 | { | ||
106 | Rule *pRule = bld.getRule( getRule() ); | ||
107 | PerformList lPerf; | ||
108 | pRule->setTarget( getName() ); | ||
109 | StringList lFinal = pRule->execute( bld, getInput(), lPerf, false ); | ||
110 | |||
111 | bld.getView()->beginPerforms( lPerf.size() ); | ||
112 | |||
113 | for( PerformList::iterator i = lPerf.begin(); i != lPerf.end(); i++ ) | ||
114 | { | ||
115 | if( access( (*i)->getTarget().c_str(), W_OK ) == 0 ) | ||
116 | { | ||
117 | (*i)->setRule("clean"); | ||
118 | bld.getView()->beginPerform( *i ); | ||
119 | unlink( (*i)->getTarget().c_str() ); | ||
120 | bld.getView()->endPerform(); | ||
121 | } | ||
122 | } | ||
123 | |||
124 | bld.getView()->endPerforms(); | ||
125 | } | ||
126 | |||
127 | time_t TargetFile::getTime( Build &bld, std::string str ) | ||
128 | { | ||
129 | std::map<std::string, time_t>::iterator i = mTimes.find( str ); | ||
130 | if( i != mTimes.end() ) | ||
131 | { | ||
132 | //nCache++; | ||
133 | //bld.view().beginRequiresCheck( true, str.c_str() ); | ||
134 | //bld.view().endRequiresCheck(); | ||
135 | return (*i).second; | ||
136 | } | ||
137 | |||
138 | //bld.view().beginRequiresCheck( false, str.c_str() ); | ||
139 | struct stat st; | ||
140 | stat( str.c_str(), &st ); | ||
141 | |||
142 | mTimes[str] = st.st_mtime; | ||
143 | |||
144 | //nNew++; | ||
145 | |||
146 | //bld.view().endRequiresCheck(); | ||
147 | |||
148 | return st.st_mtime; | ||
149 | } | ||
150 | |||
151 | void TargetFile::updateTime( std::string str ) | ||
152 | { | ||
153 | struct stat st; | ||
154 | stat( str.c_str(), &st ); | ||
155 | |||
156 | mTimes[str] = st.st_mtime; | ||
157 | } | ||
158 | |||
diff --git a/src/targetfile.h b/src/targetfile.h deleted file mode 100644 index 368e252..0000000 --- a/src/targetfile.h +++ /dev/null | |||
@@ -1,28 +0,0 @@ | |||
1 | #ifndef TARGET_FILE_H | ||
2 | #define TARGET_FILE_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <map> | ||
6 | #include <sys/types.h> | ||
7 | #include <sys/stat.h> | ||
8 | #include <unistd.h> | ||
9 | |||
10 | #include "target.h" | ||
11 | |||
12 | class TargetFile : public Target | ||
13 | { | ||
14 | public: | ||
15 | TargetFile(); | ||
16 | virtual ~TargetFile(); | ||
17 | |||
18 | virtual void check( Build &bld ); | ||
19 | virtual void clean( Build &bld ); | ||
20 | |||
21 | time_t getTime( class Build &bld, std::string str ); | ||
22 | void updateTime( std::string str ); | ||
23 | |||
24 | private: | ||
25 | std::map<std::string, time_t> mTimes; | ||
26 | }; | ||
27 | |||
28 | #endif | ||
diff --git a/src/viewer.cpp b/src/viewer.cpp deleted file mode 100644 index 1f3b26f..0000000 --- a/src/viewer.cpp +++ /dev/null | |||
@@ -1,70 +0,0 @@ | |||
1 | #include "viewer.h" | ||
2 | |||
3 | Viewer::Viewer() | ||
4 | { | ||
5 | } | ||
6 | |||
7 | Viewer::~Viewer() | ||
8 | { | ||
9 | } | ||
10 | |||
11 | void Viewer::beginAction( const std::string &sName, int nCommands ) | ||
12 | { | ||
13 | } | ||
14 | |||
15 | void Viewer::endAction() | ||
16 | { | ||
17 | } | ||
18 | |||
19 | void Viewer::beginCommand( Action::eAction nAct, const std::string &sTarget ) | ||
20 | { | ||
21 | } | ||
22 | |||
23 | void Viewer::beginPerforms( int nCount ) | ||
24 | { | ||
25 | } | ||
26 | |||
27 | void Viewer::endPerforms() | ||
28 | { | ||
29 | } | ||
30 | |||
31 | void Viewer::endCommand() | ||
32 | { | ||
33 | } | ||
34 | |||
35 | void Viewer::beginRequiresCheck( bool bCached, const std::string &sName ) | ||
36 | { | ||
37 | } | ||
38 | |||
39 | void Viewer::endRequiresCheck() | ||
40 | { | ||
41 | } | ||
42 | |||
43 | void Viewer::skipRequiresCheck( bool bCached, const std::string &sName ) | ||
44 | { | ||
45 | } | ||
46 | |||
47 | void Viewer::beginPerform( Perform *pPerform ) | ||
48 | { | ||
49 | } | ||
50 | |||
51 | void Viewer::endPerform() | ||
52 | { | ||
53 | } | ||
54 | |||
55 | void Viewer::skipPerform( Perform *pPerform ) | ||
56 | { | ||
57 | } | ||
58 | |||
59 | void Viewer::beginExecute() | ||
60 | { | ||
61 | } | ||
62 | |||
63 | void Viewer::endExecute() | ||
64 | { | ||
65 | } | ||
66 | |||
67 | void Viewer::executeCmd( const std::string &sCmd ) | ||
68 | { | ||
69 | } | ||
70 | |||
diff --git a/src/viewer.h b/src/viewer.h deleted file mode 100644 index 7ee6b21..0000000 --- a/src/viewer.h +++ /dev/null | |||
@@ -1,38 +0,0 @@ | |||
1 | #ifndef VIEWER_H | ||
2 | #define VIEWER_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <string> | ||
6 | #include "action.h" | ||
7 | |||
8 | class Perform; | ||
9 | |||
10 | class Viewer | ||
11 | { | ||
12 | public: | ||
13 | Viewer(); | ||
14 | virtual ~Viewer(); | ||
15 | |||
16 | virtual void beginAction( const std::string &sName, int nCommands ); | ||
17 | virtual void endAction(); | ||
18 | |||
19 | virtual void beginCommand( Action::eAction nAct, const std::string &sTarget ); | ||
20 | virtual void endCommand(); | ||
21 | virtual void beginPerforms( int nCount ); | ||
22 | virtual void endPerforms(); | ||
23 | |||
24 | virtual void beginRequiresCheck( bool bCached, const std::string &sName ); | ||
25 | virtual void endRequiresCheck(); | ||
26 | virtual void skipRequiresCheck( bool bCached, const std::string &sName ); | ||
27 | virtual void beginPerform( Perform *pPerform ); | ||
28 | virtual void endPerform(); | ||
29 | virtual void skipPerform( Perform *pPerform ); | ||
30 | virtual void beginExecute(); | ||
31 | virtual void endExecute(); | ||
32 | virtual void executeCmd( const std::string &sCmd ); | ||
33 | |||
34 | private: | ||
35 | |||
36 | }; | ||
37 | |||
38 | #endif | ||
diff --git a/src/viewercolorpct.cpp b/src/viewercolorpct.cpp deleted file mode 100644 index 5bc3cba..0000000 --- a/src/viewercolorpct.cpp +++ /dev/null | |||
@@ -1,129 +0,0 @@ | |||
1 | #include "viewercolorpct.h" | ||
2 | #include "perform.h" | ||
3 | #include "bu/plugger.h" | ||
4 | #include <math.h> | ||
5 | |||
6 | PluginInterface2( colorpct, ViewerColorPct, Viewer, "Mike Buland", 0, 1 ); | ||
7 | |||
8 | ViewerColorPct::ViewerColorPct() : | ||
9 | bRunClean( true ) | ||
10 | { | ||
11 | } | ||
12 | |||
13 | ViewerColorPct::~ViewerColorPct() | ||
14 | { | ||
15 | } | ||
16 | |||
17 | void ViewerColorPct::beginCommand( Action::eAction nAct, const std::string &sTarget ) | ||
18 | { | ||
19 | Cmd cmd; | ||
20 | if( sCmd.empty() ) | ||
21 | cmd.nLevel = 0; | ||
22 | else | ||
23 | cmd.nLevel = sCmd.front().nLevel+1; | ||
24 | |||
25 | cmd.bCmdClean = true; | ||
26 | cmd.sTarget = sTarget; | ||
27 | |||
28 | sCmd.push_front( cmd ); | ||
29 | } | ||
30 | |||
31 | void ViewerColorPct::endCommand() | ||
32 | { | ||
33 | if( sCmd.front().bCmdClean == false ) | ||
34 | printf("\n"); | ||
35 | sCmd.pop_front(); | ||
36 | if(sCmd.empty()) | ||
37 | iCC++; | ||
38 | } | ||
39 | |||
40 | void ViewerColorPct::indent() | ||
41 | { | ||
42 | if( sCmd.empty() ) return; | ||
43 | int jmax = sCmd.front().nLevel; | ||
44 | for( int j = 0; j < jmax; j++ ) | ||
45 | { | ||
46 | printf(" "); | ||
47 | } | ||
48 | } | ||
49 | |||
50 | void ViewerColorPct::printHead() | ||
51 | { | ||
52 | if( sCmd.front().bCmdClean == true ) | ||
53 | { | ||
54 | bRunClean = false; | ||
55 | sCmd.front().bCmdClean = false; | ||
56 | indent(); | ||
57 | if(sCmd.size() > 1) | ||
58 | printf("\033[37;22m--- \033[36m%s\033[37m ---\033[0m\n", sCmd.front().sTarget.c_str() ); | ||
59 | else | ||
60 | printf("\033[37;1m--- [\033[32m%d/%d\033[37m] \033[36m%s\033[37m ---\033[0m\n", iCC, iTC, sCmd.front().sTarget.c_str() ); | ||
61 | } | ||
62 | } | ||
63 | |||
64 | void ViewerColorPct::printPerform(const char *sRule, const char *sTarget) | ||
65 | { | ||
66 | int iPct = (int)round( | ||
67 | ((double)sCmd.front().iCP/(double)sCmd.front().iTP)*100.0 | ||
68 | ); | ||
69 | if(sCmd.size() > 1) | ||
70 | printf( "\033[37;22m[\033[32m%3d%%\033[37m] \033[35m%8s\033[37m: %s\033[0m\n", iPct, sRule, sTarget ); | ||
71 | else | ||
72 | printf( "\033[37;1m[\033[32m%3d%%\033[37m] \033[35m%8s\033[37m: %s\033[0m\n", iPct, sRule, sTarget ); | ||
73 | } | ||
74 | |||
75 | void ViewerColorPct::beginRequiresCheck( bool bCached, const std::string &sName ) | ||
76 | { | ||
77 | printHead(); | ||
78 | indent(); | ||
79 | printPerform("deps", sName.c_str()); | ||
80 | } | ||
81 | |||
82 | void ViewerColorPct::endRequiresCheck() | ||
83 | { | ||
84 | sCmd.front().iCP++; | ||
85 | } | ||
86 | |||
87 | void ViewerColorPct::skipRequiresCheck( bool bCached, const std::string &sName ) | ||
88 | { | ||
89 | sCmd.front().iCP++; | ||
90 | } | ||
91 | |||
92 | void ViewerColorPct::beginPerform( Perform *pPerform ) | ||
93 | { | ||
94 | printHead(); | ||
95 | indent(); | ||
96 | printPerform(pPerform->getRule().c_str(), pPerform->getTarget().c_str()); | ||
97 | } | ||
98 | |||
99 | void ViewerColorPct::endPerform() | ||
100 | { | ||
101 | sCmd.front().iCP++; | ||
102 | } | ||
103 | |||
104 | void ViewerColorPct::skipPerform( Perform *pPerform ) | ||
105 | { | ||
106 | sCmd.front().iCP++; | ||
107 | } | ||
108 | |||
109 | void ViewerColorPct::beginPerforms( int nCount ) | ||
110 | { | ||
111 | sCmd.front().iTP = nCount*2; | ||
112 | sCmd.front().iCP = 1; | ||
113 | } | ||
114 | |||
115 | void ViewerColorPct::beginAction( const std::string &sName, int nCommands ) | ||
116 | { | ||
117 | iTC = nCommands; | ||
118 | iCC = 1; | ||
119 | } | ||
120 | |||
121 | void ViewerColorPct::endAction() | ||
122 | { | ||
123 | if( bRunClean == true ) | ||
124 | { | ||
125 | printf("Nothing to be done.\n\n"); | ||
126 | } | ||
127 | printf("\033[0m"); | ||
128 | } | ||
129 | |||
diff --git a/src/viewercolorpct.h b/src/viewercolorpct.h deleted file mode 100644 index dc810c1..0000000 --- a/src/viewercolorpct.h +++ /dev/null | |||
@@ -1,49 +0,0 @@ | |||
1 | #ifndef VIEWER_COLOR_PCT_H | ||
2 | #define VIEWER_COLOR_PCT_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <list> | ||
6 | #include "viewer.h" | ||
7 | |||
8 | class ViewerColorPct : public Viewer | ||
9 | { | ||
10 | public: | ||
11 | ViewerColorPct(); | ||
12 | virtual ~ViewerColorPct(); | ||
13 | |||
14 | virtual void beginCommand( Action::eAction nAct, const std::string &sTarget ); | ||
15 | virtual void endCommand(); | ||
16 | |||
17 | virtual void beginRequiresCheck( bool bCached, const std::string &sName ); | ||
18 | virtual void endRequiresCheck(); | ||
19 | virtual void beginPerform( Perform *pPerform ); | ||
20 | virtual void endPerform(); | ||
21 | virtual void beginPerforms( int nCount ); | ||
22 | |||
23 | virtual void skipRequiresCheck( bool bCached, const std::string &sName ); | ||
24 | virtual void skipPerform( Perform *pPerform ); | ||
25 | |||
26 | virtual void beginAction( const std::string &sName, int nCommands ); | ||
27 | |||
28 | virtual void endAction(); | ||
29 | |||
30 | void printPerform(const char *sRule, const char *sTarget); | ||
31 | void printHead(); | ||
32 | void indent(); | ||
33 | |||
34 | private: | ||
35 | int iTC, iCC; | ||
36 | |||
37 | bool bRunClean; | ||
38 | typedef struct | ||
39 | { | ||
40 | int nLevel; | ||
41 | bool bCmdClean; | ||
42 | std::string sTarget; | ||
43 | int iTP, iCP; | ||
44 | } Cmd; | ||
45 | typedef std::list<Cmd> CmdStack; | ||
46 | CmdStack sCmd; | ||
47 | }; | ||
48 | |||
49 | #endif | ||
diff --git a/src/viewerfactory.cpp b/src/viewerfactory.cpp deleted file mode 100644 index 5726e56..0000000 --- a/src/viewerfactory.cpp +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #include "viewerfactory.h" | ||
2 | |||
3 | extern struct Bu::PluginInfo plain; | ||
4 | extern struct Bu::PluginInfo percent; | ||
5 | extern struct Bu::PluginInfo make; | ||
6 | extern struct Bu::PluginInfo plainpct; | ||
7 | extern struct Bu::PluginInfo colorpct; | ||
8 | |||
9 | ViewerFactory::ViewerFactory() | ||
10 | { | ||
11 | registerBuiltinPlugin( &plain ); | ||
12 | registerBuiltinPlugin( &percent ); | ||
13 | registerBuiltinPlugin( &make ); | ||
14 | registerBuiltinPlugin( &plainpct ); | ||
15 | registerBuiltinPlugin( &colorpct ); | ||
16 | } | ||
17 | |||
18 | ViewerFactory::~ViewerFactory() | ||
19 | { | ||
20 | } | ||
diff --git a/src/viewerfactory.h b/src/viewerfactory.h deleted file mode 100644 index ffa5b31..0000000 --- a/src/viewerfactory.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #ifndef VIEWER_FACTORY_H | ||
2 | #define VIEWER_FACTORY_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "viewer.h" | ||
7 | #include "bu/plugger.h" | ||
8 | #include "bu/singleton.h" | ||
9 | |||
10 | class ViewerFactory : public Bu::Plugger<Viewer>, public Bu::Singleton<ViewerFactory> | ||
11 | { | ||
12 | public: | ||
13 | ViewerFactory(); | ||
14 | virtual ~ViewerFactory(); | ||
15 | |||
16 | private: | ||
17 | |||
18 | }; | ||
19 | |||
20 | #endif | ||
diff --git a/src/viewermake.cpp b/src/viewermake.cpp deleted file mode 100644 index ed11b5f..0000000 --- a/src/viewermake.cpp +++ /dev/null | |||
@@ -1,19 +0,0 @@ | |||
1 | #include "viewermake.h" | ||
2 | #include "perform.h" | ||
3 | #include "bu/plugger.h" | ||
4 | |||
5 | PluginInterface2( make, ViewerMake, Viewer, "Mike Buland", 0, 1 ); | ||
6 | |||
7 | ViewerMake::ViewerMake() | ||
8 | { | ||
9 | } | ||
10 | |||
11 | ViewerMake::~ViewerMake() | ||
12 | { | ||
13 | } | ||
14 | |||
15 | void ViewerMake::executeCmd( const std::string &sCmd ) | ||
16 | { | ||
17 | printf("%s\n", sCmd.c_str() ); | ||
18 | } | ||
19 | |||
diff --git a/src/viewermake.h b/src/viewermake.h deleted file mode 100644 index 11b8741..0000000 --- a/src/viewermake.h +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | #ifndef VIEWER_MAKE_H | ||
2 | #define VIEWER_MAKE_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "viewer.h" | ||
7 | |||
8 | class ViewerMake : public Viewer | ||
9 | { | ||
10 | public: | ||
11 | ViewerMake(); | ||
12 | virtual ~ViewerMake(); | ||
13 | |||
14 | virtual void executeCmd( const std::string &sCmd ); | ||
15 | |||
16 | private: | ||
17 | |||
18 | }; | ||
19 | |||
20 | #endif | ||
diff --git a/src/viewerpercent.cpp b/src/viewerpercent.cpp deleted file mode 100644 index baca82a..0000000 --- a/src/viewerpercent.cpp +++ /dev/null | |||
@@ -1,129 +0,0 @@ | |||
1 | #include "viewerpercent.h" | ||
2 | #include "perform.h" | ||
3 | #include "bu/plugger.h" | ||
4 | |||
5 | #include <sys/ioctl.h> | ||
6 | #include <stdio.h> | ||
7 | #include <stdlib.h> | ||
8 | |||
9 | PluginInterface2( percent, ViewerPercent, Viewer, "Mike Buland", 0, 1 ); | ||
10 | |||
11 | ViewerPercent::ViewerPercent() : | ||
12 | nWidth( 15 ) | ||
13 | { | ||
14 | } | ||
15 | |||
16 | ViewerPercent::~ViewerPercent() | ||
17 | { | ||
18 | } | ||
19 | |||
20 | void ViewerPercent::beginAction( const std::string &sName, int nCommands ) | ||
21 | { | ||
22 | nTotalCommands = nCommands; | ||
23 | nCurCommand = 0; | ||
24 | } | ||
25 | |||
26 | void ViewerPercent::endAction() | ||
27 | { | ||
28 | } | ||
29 | |||
30 | void ViewerPercent::beginCommand( Action::eAction nAct, const std::string &sTarget ) | ||
31 | { | ||
32 | this->sTarget = sTarget; | ||
33 | nCurCommand++; | ||
34 | |||
35 | struct winsize scrn; | ||
36 | |||
37 | ioctl( fileno( stdout ), TIOCGWINSZ, &scrn ); | ||
38 | |||
39 | nTermWidth = scrn.ws_col; | ||
40 | } | ||
41 | |||
42 | void ViewerPercent::endCommand() | ||
43 | { | ||
44 | printf("\n"); | ||
45 | fflush(stdout); | ||
46 | } | ||
47 | |||
48 | void ViewerPercent::beginPerforms( int nCount ) | ||
49 | { | ||
50 | nTotalPerforms = nCount; | ||
51 | nCurPerform = 0; | ||
52 | nLastLen = 0; | ||
53 | } | ||
54 | |||
55 | void ViewerPercent::endPerforms() | ||
56 | { | ||
57 | nCurPerform = nTotalPerforms; | ||
58 | |||
59 | printPercent(""); | ||
60 | } | ||
61 | |||
62 | void ViewerPercent::beginRequiresCheck( bool bCached, const std::string &sName ) | ||
63 | { | ||
64 | } | ||
65 | |||
66 | void ViewerPercent::endRequiresCheck() | ||
67 | { | ||
68 | } | ||
69 | |||
70 | void ViewerPercent::beginPerform( Perform *pPerform ) | ||
71 | { | ||
72 | nCurPerform++; | ||
73 | printPercent( pPerform->getTarget() ); | ||
74 | } | ||
75 | |||
76 | void ViewerPercent::printPercent( const std::string &sCur ) | ||
77 | { | ||
78 | char buf[2048]; | ||
79 | char *bi = buf; | ||
80 | int nLen = sprintf( buf, "\r[%d/%d] %s [", | ||
81 | nCurCommand, nTotalCommands, | ||
82 | sTarget.c_str() ); | ||
83 | bi += nLen; | ||
84 | int jmax = nCurPerform*nWidth/nTotalPerforms; | ||
85 | for( int j = 0; j < jmax; j++ ) | ||
86 | { | ||
87 | *bi = '#'; | ||
88 | bi++; | ||
89 | } | ||
90 | jmax = nWidth-jmax; | ||
91 | for( int j = 0; j < jmax; j++ ) | ||
92 | { | ||
93 | *bi = ' '; | ||
94 | bi++; | ||
95 | } | ||
96 | nLen += nWidth; | ||
97 | nLen += sprintf( bi, "] %-2d%% %s", | ||
98 | nCurPerform*100/nTotalPerforms, | ||
99 | sCur.c_str() ); | ||
100 | bi = buf + nLen; | ||
101 | if( (int)(bi - buf) >= nTermWidth ) | ||
102 | { | ||
103 | nLastLen = nLen = nTermWidth; | ||
104 | strcpy( buf+nTermWidth-3, "..."); | ||
105 | } | ||
106 | else | ||
107 | { | ||
108 | if( nLastLen > nLen ) | ||
109 | { | ||
110 | jmax = nLastLen-nLen; | ||
111 | for( int j = 0; j < jmax; j++ ) | ||
112 | { | ||
113 | *bi = ' '; | ||
114 | bi++; | ||
115 | } | ||
116 | } | ||
117 | nLastLen = nLen; | ||
118 | *bi = '\0'; | ||
119 | } | ||
120 | |||
121 | fputs( buf, stdout ); | ||
122 | |||
123 | fflush( stdout ); | ||
124 | } | ||
125 | |||
126 | void ViewerPercent::endPerform() | ||
127 | { | ||
128 | } | ||
129 | |||
diff --git a/src/viewerpercent.h b/src/viewerpercent.h deleted file mode 100644 index d40ca1b..0000000 --- a/src/viewerpercent.h +++ /dev/null | |||
@@ -1,39 +0,0 @@ | |||
1 | #ifndef VIEWER_PERCENT_H | ||
2 | #define VIEWER_PERCENT_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | #include "viewer.h" | ||
7 | |||
8 | class ViewerPercent : public Viewer | ||
9 | { | ||
10 | public: | ||
11 | ViewerPercent(); | ||
12 | virtual ~ViewerPercent(); | ||
13 | |||
14 | virtual void beginCommand( Action::eAction nAct, const std::string &sTarget ); | ||
15 | virtual void endCommand(); | ||
16 | |||
17 | virtual void beginRequiresCheck( bool bCached, const std::string &sName ); | ||
18 | virtual void endRequiresCheck(); | ||
19 | virtual void beginPerform( Perform *pPerform ); | ||
20 | virtual void endPerform(); | ||
21 | virtual void beginPerforms( int nCount ); | ||
22 | virtual void endPerforms(); | ||
23 | virtual void beginAction( const std::string &sName, int nCommands ); | ||
24 | virtual void endAction(); | ||
25 | |||
26 | void printPercent( const std::string &sCur ); | ||
27 | |||
28 | private: | ||
29 | int nTotalCommands; | ||
30 | int nCurCommand; | ||
31 | int nTotalPerforms; | ||
32 | int nCurPerform; | ||
33 | std::string sTarget; | ||
34 | int nLastLen; | ||
35 | int nWidth; | ||
36 | int nTermWidth; | ||
37 | }; | ||
38 | |||
39 | #endif | ||
diff --git a/src/viewerplain.cpp b/src/viewerplain.cpp deleted file mode 100644 index 3e65f21..0000000 --- a/src/viewerplain.cpp +++ /dev/null | |||
@@ -1,87 +0,0 @@ | |||
1 | #include "viewerplain.h" | ||
2 | #include "perform.h" | ||
3 | #include "bu/plugger.h" | ||
4 | |||
5 | PluginInterface2( plain, ViewerPlain, Viewer, "Mike Buland", 0, 1 ); | ||
6 | |||
7 | ViewerPlain::ViewerPlain() : | ||
8 | bRunClean( true ) | ||
9 | { | ||
10 | } | ||
11 | |||
12 | ViewerPlain::~ViewerPlain() | ||
13 | { | ||
14 | } | ||
15 | |||
16 | void ViewerPlain::beginCommand( Action::eAction nAct, const std::string &sTarget ) | ||
17 | { | ||
18 | Cmd cmd; | ||
19 | if( sCmd.empty() ) | ||
20 | cmd.nLevel = 0; | ||
21 | else | ||
22 | cmd.nLevel = sCmd.front().nLevel+1; | ||
23 | |||
24 | cmd.bCmdClean = true; | ||
25 | cmd.sTarget = sTarget; | ||
26 | |||
27 | sCmd.push_front( cmd ); | ||
28 | } | ||
29 | |||
30 | void ViewerPlain::endCommand() | ||
31 | { | ||
32 | if( sCmd.front().bCmdClean == false ) | ||
33 | printf("\n"); | ||
34 | sCmd.pop_front(); | ||
35 | } | ||
36 | |||
37 | void ViewerPlain::indent() | ||
38 | { | ||
39 | if( sCmd.empty() ) return; | ||
40 | int jmax = sCmd.front().nLevel; | ||
41 | for( int j = 0; j < jmax; j++ ) | ||
42 | { | ||
43 | printf(" "); | ||
44 | } | ||
45 | } | ||
46 | |||
47 | void ViewerPlain::printHead() | ||
48 | { | ||
49 | if( sCmd.front().bCmdClean == true ) | ||
50 | { | ||
51 | bRunClean = false; | ||
52 | sCmd.front().bCmdClean = false; | ||
53 | indent(); | ||
54 | printf("--- %s ---\n", sCmd.front().sTarget.c_str() ); | ||
55 | } | ||
56 | } | ||
57 | |||
58 | void ViewerPlain::beginRequiresCheck( bool bCached, const std::string &sName ) | ||
59 | { | ||
60 | printHead(); | ||
61 | indent(); | ||
62 | printf(" deps: %s\n", sName.c_str() ); | ||
63 | } | ||
64 | |||
65 | void ViewerPlain::endRequiresCheck() | ||
66 | { | ||
67 | } | ||
68 | |||
69 | void ViewerPlain::beginPerform( Perform *pPerform ) | ||
70 | { | ||
71 | printHead(); | ||
72 | indent(); | ||
73 | printf(" %8s: %s\n", pPerform->getRule().c_str(), pPerform->getTarget().c_str() ); | ||
74 | } | ||
75 | |||
76 | void ViewerPlain::endPerform() | ||
77 | { | ||
78 | } | ||
79 | |||
80 | void ViewerPlain::endAction() | ||
81 | { | ||
82 | if( bRunClean == true ) | ||
83 | { | ||
84 | printf("Nothing to be done.\n\n"); | ||
85 | } | ||
86 | } | ||
87 | |||
diff --git a/src/viewerplain.h b/src/viewerplain.h deleted file mode 100644 index 118ae80..0000000 --- a/src/viewerplain.h +++ /dev/null | |||
@@ -1,39 +0,0 @@ | |||
1 | #ifndef VIEWER_PLAIN_H | ||
2 | #define VIEWER_PLAIN_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <list> | ||
6 | #include "viewer.h" | ||
7 | |||
8 | class ViewerPlain : public Viewer | ||
9 | { | ||
10 | public: | ||
11 | ViewerPlain(); | ||
12 | virtual ~ViewerPlain(); | ||
13 | |||
14 | virtual void beginCommand( Action::eAction nAct, const std::string &sTarget ); | ||
15 | virtual void endCommand(); | ||
16 | |||
17 | virtual void beginRequiresCheck( bool bCached, const std::string &sName ); | ||
18 | virtual void endRequiresCheck(); | ||
19 | virtual void beginPerform( Perform *pPerform ); | ||
20 | virtual void endPerform(); | ||
21 | |||
22 | virtual void endAction(); | ||
23 | |||
24 | void printHead(); | ||
25 | void indent(); | ||
26 | |||
27 | private: | ||
28 | bool bRunClean; | ||
29 | typedef struct | ||
30 | { | ||
31 | int nLevel; | ||
32 | bool bCmdClean; | ||
33 | std::string sTarget; | ||
34 | } Cmd; | ||
35 | typedef std::list<Cmd> CmdStack; | ||
36 | CmdStack sCmd; | ||
37 | }; | ||
38 | |||
39 | #endif | ||
diff --git a/src/viewerplainpct.cpp b/src/viewerplainpct.cpp deleted file mode 100644 index 4d9fa7b..0000000 --- a/src/viewerplainpct.cpp +++ /dev/null | |||
@@ -1,128 +0,0 @@ | |||
1 | #include "viewerplainpct.h" | ||
2 | #include "perform.h" | ||
3 | #include "bu/plugger.h" | ||
4 | #include "math.h" | ||
5 | |||
6 | PluginInterface2( plainpct, ViewerPlainPct, Viewer, "Mike Buland", 0, 1 ); | ||
7 | |||
8 | ViewerPlainPct::ViewerPlainPct() : | ||
9 | bRunClean( true ) | ||
10 | { | ||
11 | } | ||
12 | |||
13 | ViewerPlainPct::~ViewerPlainPct() | ||
14 | { | ||
15 | } | ||
16 | |||
17 | void ViewerPlainPct::beginCommand( Action::eAction nAct, const std::string &sTarget ) | ||
18 | { | ||
19 | Cmd cmd; | ||
20 | if( sCmd.empty() ) | ||
21 | cmd.nLevel = 0; | ||
22 | else | ||
23 | cmd.nLevel = sCmd.front().nLevel+1; | ||
24 | |||
25 | cmd.bCmdClean = true; | ||
26 | cmd.sTarget = sTarget; | ||
27 | |||
28 | sCmd.push_front( cmd ); | ||
29 | } | ||
30 | |||
31 | void ViewerPlainPct::endCommand() | ||
32 | { | ||
33 | if( sCmd.front().bCmdClean == false ) | ||
34 | printf("\n"); | ||
35 | sCmd.pop_front(); | ||
36 | if(sCmd.empty()) | ||
37 | iCC++; | ||
38 | } | ||
39 | |||
40 | void ViewerPlainPct::indent() | ||
41 | { | ||
42 | if( sCmd.empty() ) return; | ||
43 | int jmax = sCmd.front().nLevel; | ||
44 | for( int j = 0; j < jmax; j++ ) | ||
45 | { | ||
46 | printf(" "); | ||
47 | } | ||
48 | } | ||
49 | |||
50 | void ViewerPlainPct::printHead() | ||
51 | { | ||
52 | if( sCmd.front().bCmdClean == true ) | ||
53 | { | ||
54 | bRunClean = false; | ||
55 | sCmd.front().bCmdClean = false; | ||
56 | indent(); | ||
57 | if(sCmd.size() > 1) | ||
58 | printf("--- %s ---\n", sCmd.front().sTarget.c_str() ); | ||
59 | else | ||
60 | printf("--- [%d/%d] %s ---\n", iCC, iTC, sCmd.front().sTarget.c_str() ); | ||
61 | } | ||
62 | } | ||
63 | |||
64 | void ViewerPlainPct::printPerform(const char *sRule, const char *sTarget) | ||
65 | { | ||
66 | int iPct = (int)round( | ||
67 | ((double)sCmd.front().iCP/(double)sCmd.front().iTP)*100.0 | ||
68 | ); | ||
69 | if(sCmd.size() > 1) | ||
70 | printf( "[%3d%%] %8s: %s\n", iPct, sRule, sTarget ); | ||
71 | else | ||
72 | printf( "[%3d%%] %8s: %s\n", iPct, sRule, sTarget ); | ||
73 | } | ||
74 | |||
75 | void ViewerPlainPct::beginRequiresCheck( bool bCached, const std::string &sName ) | ||
76 | { | ||
77 | printHead(); | ||
78 | indent(); | ||
79 | printPerform("deps", sName.c_str()); | ||
80 | } | ||
81 | |||
82 | void ViewerPlainPct::endRequiresCheck() | ||
83 | { | ||
84 | sCmd.front().iCP++; | ||
85 | } | ||
86 | |||
87 | void ViewerPlainPct::skipRequiresCheck( bool bCached, const std::string &sName ) | ||
88 | { | ||
89 | sCmd.front().iCP++; | ||
90 | } | ||
91 | |||
92 | void ViewerPlainPct::beginPerform( Perform *pPerform ) | ||
93 | { | ||
94 | printHead(); | ||
95 | indent(); | ||
96 | printPerform(pPerform->getRule().c_str(), pPerform->getTarget().c_str()); | ||
97 | } | ||
98 | |||
99 | void ViewerPlainPct::endPerform() | ||
100 | { | ||
101 | sCmd.front().iCP++; | ||
102 | } | ||
103 | |||
104 | void ViewerPlainPct::skipPerform( Perform *pPerform ) | ||
105 | { | ||
106 | sCmd.front().iCP++; | ||
107 | } | ||
108 | |||
109 | void ViewerPlainPct::beginPerforms( int nCount ) | ||
110 | { | ||
111 | sCmd.front().iTP = nCount*2; | ||
112 | sCmd.front().iCP = 1; | ||
113 | } | ||
114 | |||
115 | void ViewerPlainPct::beginAction( const std::string &sName, int nCommands ) | ||
116 | { | ||
117 | iTC = nCommands; | ||
118 | iCC = 1; | ||
119 | } | ||
120 | |||
121 | void ViewerPlainPct::endAction() | ||
122 | { | ||
123 | if( bRunClean == true ) | ||
124 | { | ||
125 | printf("Nothing to be done.\n\n"); | ||
126 | } | ||
127 | } | ||
128 | |||
diff --git a/src/viewerplainpct.h b/src/viewerplainpct.h deleted file mode 100644 index 63bc00d..0000000 --- a/src/viewerplainpct.h +++ /dev/null | |||
@@ -1,49 +0,0 @@ | |||
1 | #ifndef VIEWER_PLAIN_PCT_H | ||
2 | #define VIEWER_PLAIN_PCT_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <list> | ||
6 | #include "viewer.h" | ||
7 | |||
8 | class ViewerPlainPct : public Viewer | ||
9 | { | ||
10 | public: | ||
11 | ViewerPlainPct(); | ||
12 | virtual ~ViewerPlainPct(); | ||
13 | |||
14 | virtual void beginCommand( Action::eAction nAct, const std::string &sTarget ); | ||
15 | virtual void endCommand(); | ||
16 | |||
17 | virtual void beginRequiresCheck( bool bCached, const std::string &sName ); | ||
18 | virtual void endRequiresCheck(); | ||
19 | virtual void beginPerform( Perform *pPerform ); | ||
20 | virtual void endPerform(); | ||
21 | virtual void beginPerforms( int nCount ); | ||
22 | |||
23 | virtual void skipRequiresCheck( bool bCached, const std::string &sName ); | ||
24 | virtual void skipPerform( Perform *pPerform ); | ||
25 | |||
26 | virtual void beginAction( const std::string &sName, int nCommands ); | ||
27 | |||
28 | virtual void endAction(); | ||
29 | |||
30 | void printPerform(const char *sRule, const char *sTarget); | ||
31 | void printHead(); | ||
32 | void indent(); | ||
33 | |||
34 | private: | ||
35 | int iTC, iCC; | ||
36 | |||
37 | bool bRunClean; | ||
38 | typedef struct | ||
39 | { | ||
40 | int nLevel; | ||
41 | bool bCmdClean; | ||
42 | std::string sTarget; | ||
43 | int iTP, iCP; | ||
44 | } Cmd; | ||
45 | typedef std::list<Cmd> CmdStack; | ||
46 | CmdStack sCmd; | ||
47 | }; | ||
48 | |||
49 | #endif | ||