diff options
| -rw-r--r-- | default.bld | 16 | ||||
| -rw-r--r-- | share/autoinclude/general-rules.bld | 80 | ||||
| -rw-r--r-- | src/action.cpp | 25 | ||||
| -rw-r--r-- | src/action.h | 1 | ||||
| -rw-r--r-- | src/context.cpp | 4 |
5 files changed, 103 insertions, 23 deletions
diff --git a/default.bld b/default.bld index de31b78..19b66bf 100644 --- a/default.bld +++ b/default.bld | |||
| @@ -5,6 +5,8 @@ | |||
| 5 | 5 | ||
| 6 | CXXFLAGS += "-ggdb -W -Wall"; | 6 | CXXFLAGS += "-ggdb -W -Wall"; |
| 7 | 7 | ||
| 8 | CC = CXX; // We actually want to use c++ to compile our c files. | ||
| 9 | |||
| 8 | action "default" | 10 | action "default" |
| 9 | { | 11 | { |
| 10 | build: "build"; | 12 | build: "build"; |
| @@ -49,6 +51,7 @@ target "build" | |||
| 49 | rule "exe"; | 51 | rule "exe"; |
| 50 | LDFLAGS += "-Llibbu++ -lbu++ -ldl"; | 52 | LDFLAGS += "-Llibbu++ -lbu++ -ldl"; |
| 51 | CXXFLAGS += "-Ilibbu++"; | 53 | CXXFLAGS += "-Ilibbu++"; |
| 54 | CFLAGS = CXXFLAGS; | ||
| 52 | tag "tools"; | 55 | tag "tools"; |
| 53 | } | 56 | } |
| 54 | 57 | ||
| @@ -74,19 +77,6 @@ target "build-r$(svnversion "-n").tar.bz2" | |||
| 74 | tag "pkg"; | 77 | tag "pkg"; |
| 75 | } | 78 | } |
| 76 | 79 | ||
| 77 | // We want to override the c rule, and just use c++ for it | ||
| 78 | rule "c" | ||
| 79 | { | ||
| 80 | input "*.c"; | ||
| 81 | output replace(".c", ".o"); | ||
| 82 | tag "auto-source"; | ||
| 83 | requires getMakeDeps("g++ ${CXXFLAGS} -M ${INPUT}"); | ||
| 84 | profile "build" | ||
| 85 | { | ||
| 86 | execute("g++ ${CXXFLAGS} -c -o ${OUTPUT} ${INPUT}"); | ||
| 87 | } | ||
| 88 | } | ||
| 89 | |||
| 90 | rule "tarball" | 80 | rule "tarball" |
| 91 | { | 81 | { |
| 92 | input matches("*.cpp", "*.h", "*.c", "*.y", "*.l", "*.conf", "Doxyfile", | 82 | input matches("*.cpp", "*.h", "*.c", "*.y", "*.l", "*.conf", "Doxyfile", |
diff --git a/share/autoinclude/general-rules.bld b/share/autoinclude/general-rules.bld index 16217e0..46720c6 100644 --- a/share/autoinclude/general-rules.bld +++ b/share/autoinclude/general-rules.bld | |||
| @@ -1,10 +1,68 @@ | |||
| 1 | // | ||
| 2 | // Really, variables here should default to something that's platform dependant, | ||
| 3 | // but for now, we use linux, I'll default them to gnu/linux | ||
| 4 | // | ||
| 5 | |||
| 6 | |||
| 7 | if CXX == null then | ||
| 8 | { | ||
| 9 | CXX = "g++"; | ||
| 10 | } | ||
| 11 | |||
| 12 | if AR == null then | ||
| 13 | { | ||
| 14 | AR = "ar"; | ||
| 15 | } | ||
| 16 | |||
| 17 | if CC == null then | ||
| 18 | { | ||
| 19 | CC = "cc"; | ||
| 20 | } | ||
| 21 | |||
| 22 | if BISON == null then | ||
| 23 | { | ||
| 24 | BISON = "bison"; | ||
| 25 | } | ||
| 26 | |||
| 27 | if FLEX == null then | ||
| 28 | { | ||
| 29 | FLEX = "flex"; | ||
| 30 | } | ||
| 31 | |||
| 32 | function cppToObj() | ||
| 33 | { | ||
| 34 | if OBJ_DIR == null then | ||
| 35 | { | ||
| 36 | DIR = INPUT.dirName(); | ||
| 37 | } | ||
| 38 | else | ||
| 39 | { | ||
| 40 | DIR = OBJ_DIR; | ||
| 41 | } | ||
| 42 | |||
| 43 | return DIR + "/" + INPUT.fileName().replace(".cpp", ".o"); | ||
| 44 | } | ||
| 45 | |||
| 46 | function cToObj() | ||
| 47 | { | ||
| 48 | if OBJ_DIR == null then | ||
| 49 | { | ||
| 50 | DIR = INPUT.dirName(); | ||
| 51 | } | ||
| 52 | else | ||
| 53 | { | ||
| 54 | DIR = OBJ_DIR; | ||
| 55 | } | ||
| 56 | |||
| 57 | return DIR + "/" + INPUT.fileName().replace(".c", ".o"); | ||
| 58 | } | ||
| 1 | 59 | ||
| 2 | rule "exe" | 60 | rule "exe" |
| 3 | { | 61 | { |
| 4 | input "*.o"; | 62 | input "*.o"; |
| 5 | profile "build" | 63 | profile "build" |
| 6 | { | 64 | { |
| 7 | execute("g++ -o ${OUTPUT} ${INPUT} ${LDFLAGS}"); | 65 | execute("${CXX} -o ${OUTPUT} ${INPUT} ${LDFLAGS}"); |
| 8 | } | 66 | } |
| 9 | } | 67 | } |
| 10 | 68 | ||
| @@ -13,18 +71,19 @@ rule "lib" | |||
| 13 | input "*.o"; | 71 | input "*.o"; |
| 14 | profile "build" | 72 | profile "build" |
| 15 | { | 73 | { |
| 16 | execute("ar cr ${OUTPUT} ${INPUT}"); | 74 | execute("${AR} cr ${OUTPUT} ${INPUT}"); |
| 17 | } | 75 | } |
| 18 | } | 76 | } |
| 19 | 77 | ||
| 20 | rule "cpp" | 78 | rule "cpp" |
| 21 | { | 79 | { |
| 22 | input "*.cpp"; | 80 | input "*.cpp"; |
| 23 | output replace(".cpp", ".o"); | 81 | output cppToObj(); |
| 24 | requires getMakeDeps("g++ ${CXXFLAGS} -M ${INPUT}"); | 82 | // output replace(".cpp", ".o"); |
| 83 | requires getMakeDeps("${CXX} ${CXXFLAGS} -M ${INPUT}"); | ||
| 25 | profile "build" | 84 | profile "build" |
| 26 | { | 85 | { |
| 27 | execute("g++ ${CXXFLAGS} -c -o ${OUTPUT} ${INPUT}", "g++"); | 86 | execute("${CXX} ${CXXFLAGS} -c -o ${OUTPUT} ${INPUT}", "g++"); |
| 28 | } | 87 | } |
| 29 | } | 88 | } |
| 30 | 89 | ||
| @@ -32,11 +91,12 @@ rule "cpp" | |||
| 32 | rule "c" | 91 | rule "c" |
| 33 | { | 92 | { |
| 34 | input "*.c"; | 93 | input "*.c"; |
| 35 | output replace(".c", ".o"); | 94 | output cToObj(); |
| 36 | requires getMakeDeps("gcc ${CXXFLAGS} -M ${INPUT}"); | 95 | // output replace(".c", ".o"); |
| 96 | requires getMakeDeps("${CC} ${CFLAGS} -M ${INPUT}"); | ||
| 37 | profile "build" | 97 | profile "build" |
| 38 | { | 98 | { |
| 39 | execute("gcc ${CFLAGS} -c -o ${OUTPUT} ${INPUT}"); | 99 | execute("${CC} ${CFLAGS} -c -o ${OUTPUT} ${INPUT}"); |
| 40 | } | 100 | } |
| 41 | } | 101 | } |
| 42 | 102 | ||
| @@ -47,7 +107,7 @@ rule "bison" | |||
| 47 | profile "build" | 107 | profile "build" |
| 48 | { | 108 | { |
| 49 | BASE = INPUT.replace(".y", ""); | 109 | BASE = INPUT.replace(".y", ""); |
| 50 | execute("bison -b${BASE} ${INPUT}"); | 110 | execute("${BISON} -b${BASE} ${INPUT}"); |
| 51 | // if you add a -v bison will produce a .output file | 111 | // if you add a -v bison will produce a .output file |
| 52 | } | 112 | } |
| 53 | } | 113 | } |
| @@ -59,6 +119,6 @@ rule "flex" | |||
| 59 | output replace(".l", ".yy.h"); | 119 | output replace(".l", ".yy.h"); |
| 60 | profile "build" | 120 | profile "build" |
| 61 | { | 121 | { |
| 62 | execute("flex ${FLEXFLAGS} ${INPUT}"); | 122 | execute("${FLEX} ${FLEXFLAGS} ${INPUT}"); |
| 63 | } | 123 | } |
| 64 | } | 124 | } |
diff --git a/src/action.cpp b/src/action.cpp index 23c24cd..8b10641 100644 --- a/src/action.cpp +++ b/src/action.cpp | |||
| @@ -80,6 +80,31 @@ Action *Action::genDefaultClean() | |||
| 80 | return pRet; | 80 | return pRet; |
| 81 | } | 81 | } |
| 82 | 82 | ||
| 83 | Action *Action::genDefaultCleanAll() | ||
| 84 | { | ||
| 85 | Ast *pAst = new Ast(); | ||
| 86 | pAst->addNode( AstNode::typeActionDef ); | ||
| 87 | pAst->openBranch(); | ||
| 88 | pAst->addNode( AstNode::typeString, "clean-all" ); | ||
| 89 | pAst->openBranch(); | ||
| 90 | pAst->addNode( AstNode::typeProcessTarget ); | ||
| 91 | pAst->openBranch(); | ||
| 92 | pAst->addNode( AstNode::typeString, "clean" ); | ||
| 93 | pAst->openBranch(); | ||
| 94 | pAst->addNode( AstNode::typeFunction ); | ||
| 95 | pAst->openBranch(); | ||
| 96 | pAst->addNode( AstNode::typeString, "targets" ); | ||
| 97 | pAst->closeNode(); | ||
| 98 | pAst->closeNode(); | ||
| 99 | pAst->closeNode(); | ||
| 100 | Action *pRet = new Action( | ||
| 101 | dynamic_cast<const AstBranch *>( *pAst->getNodeBegin() ) | ||
| 102 | ); | ||
| 103 | pRet->pAst = pAst; | ||
| 104 | |||
| 105 | return pRet; | ||
| 106 | } | ||
| 107 | |||
| 83 | Action *Action::genDefaultDefault() | 108 | Action *Action::genDefaultDefault() |
| 84 | { | 109 | { |
| 85 | Ast *pAst = new Ast(); | 110 | Ast *pAst = new Ast(); |
diff --git a/src/action.h b/src/action.h index 520f2f1..7f60095 100644 --- a/src/action.h +++ b/src/action.h | |||
| @@ -15,6 +15,7 @@ public: | |||
| 15 | 15 | ||
| 16 | static Action *genDefaultAll(); | 16 | static Action *genDefaultAll(); |
| 17 | static Action *genDefaultClean(); | 17 | static Action *genDefaultClean(); |
| 18 | static Action *genDefaultCleanAll(); | ||
| 18 | static Action *genDefaultDefault(); | 19 | static Action *genDefaultDefault(); |
| 19 | 20 | ||
| 20 | private: | 21 | private: |
diff --git a/src/context.cpp b/src/context.cpp index c257a75..bc48def 100644 --- a/src/context.cpp +++ b/src/context.cpp | |||
| @@ -438,6 +438,10 @@ void Context::genDefaultActions() | |||
| 438 | { | 438 | { |
| 439 | addAction( Action::genDefaultClean() ); | 439 | addAction( Action::genDefaultClean() ); |
| 440 | } | 440 | } |
| 441 | if( !hAction.has("clean-all") ) | ||
| 442 | { | ||
| 443 | addAction( Action::genDefaultCleanAll() ); | ||
| 444 | } | ||
| 441 | if( !hAction.has("default") ) | 445 | if( !hAction.has("default") ) |
| 442 | { | 446 | { |
| 443 | addAction( Action::genDefaultDefault() ); | 447 | addAction( Action::genDefaultDefault() ); |
