aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2006-09-21 15:47:56 +0000
committerMike Buland <eichlan@xagasoft.com>2006-09-21 15:47:56 +0000
commit6aedf75408f0a8fa50edf9457b00f413227ec2d8 (patch)
treedb854cfdbc965d73d72a451ec36b55f3d09cbfd7
parentd5b78aeaa9af689b52046eb5577624fb6d031835 (diff)
downloadbuild-6aedf75408f0a8fa50edf9457b00f413227ec2d8.tar.gz
build-6aedf75408f0a8fa50edf9457b00f413227ec2d8.tar.bz2
build-6aedf75408f0a8fa50edf9457b00f413227ec2d8.tar.xz
build-6aedf75408f0a8fa50edf9457b00f413227ec2d8.zip
Added two command line parameters, -i or --info will list available actions,
maybe more later. -c or --clean will set all of the commands in the current action to clean, so now you don't have to create clean rules. Also, every viewer should now support stacks of targets, they don't now, and it can look a little funny.
-rw-r--r--src/action.cpp8
-rw-r--r--src/action.h2
-rw-r--r--src/build.cpp27
-rw-r--r--src/build.h4
-rw-r--r--src/main.cpp25
-rw-r--r--src/target.cpp4
6 files changed, 66 insertions, 4 deletions
diff --git a/src/action.cpp b/src/action.cpp
index be11f48..cae4f01 100644
--- a/src/action.cpp
+++ b/src/action.cpp
@@ -38,3 +38,11 @@ std::string Action::getWhat()
38 return (*i).sWhat; 38 return (*i).sWhat;
39} 39}
40 40
41void Action::setMode( eAction nAct )
42{
43 for( CmdList::iterator j = lCmds.begin(); j != lCmds.end(); j++ )
44 {
45 (*j).act = nAct;
46 }
47}
48
diff --git a/src/action.h b/src/action.h
index 0e08192..25badad 100644
--- a/src/action.h
+++ b/src/action.h
@@ -50,6 +50,8 @@ public:
50 { 50 {
51 return sName; 51 return sName;
52 } 52 }
53
54 void setMode( eAction nAct );
53 55
54private: 56private:
55 typedef std::list<Cmd> CmdList; 57 typedef std::list<Cmd> CmdList;
diff --git a/src/build.cpp b/src/build.cpp
index 5121d1f..889efa4 100644
--- a/src/build.cpp
+++ b/src/build.cpp
@@ -85,10 +85,10 @@ void Build::execAction( const std::string &sWhat )
85 sWhat.c_str() 85 sWhat.c_str()
86 ); 86 );
87 Target *pTarget = mTarget[pAct->getWhat()]; 87 Target *pTarget = mTarget[pAct->getWhat()];
88 pView->beginCommand( pAct->getAct(), pAct->getWhat() ); 88 //pView->beginCommand( pAct->getAct(), pAct->getWhat() );
89 if( !pTarget->wasRun() ) 89 if( !pTarget->wasRun() )
90 pTarget->run( pAct->getAct(), *this ); 90 pTarget->run( pAct->getAct(), *this );
91 pView->endCommand(); 91 //pView->endCommand();
92 } 92 }
93 93
94 pView->endAction(); 94 pView->endAction();
@@ -364,3 +364,26 @@ void Build::chainTarget( const std::string &sName )
364 (*i).second->run( Action::actCheck, *this ); 364 (*i).second->run( Action::actCheck, *this );
365} 365}
366 366
367void Build::printInfo()
368{
369 printf("---- Build Info ----\n");
370 printf("Valid actions: ");
371 for( ActionMap::iterator i = mAction.begin(); i != mAction.end(); i++ )
372 {
373 if( i != mAction.begin() ) printf(", ");
374 if( (*i).first == "" )
375 printf("*default*");
376 else
377 printf("%s", (*i).first.c_str() );
378 }
379 printf("\n\n");
380}
381
382void Build::setMode( Action::eAction nAct )
383{
384 for( ActionMap::iterator i = mAction.begin(); i != mAction.end(); i++ )
385 {
386 (*i).second->setMode( nAct );
387 }
388}
389
diff --git a/src/build.h b/src/build.h
index 6e98405..dd8c11b 100644
--- a/src/build.h
+++ b/src/build.h
@@ -76,6 +76,10 @@ public:
76 76
77 void chainTarget( const std::string &sName ); 77 void chainTarget( const std::string &sName );
78 78
79 void printInfo();
80
81 void setMode( Action::eAction nAct );
82
79private: 83private:
80 TargetMap mTarget; 84 TargetMap mTarget;
81 ReqMap mRequires; 85 ReqMap mRequires;
diff --git a/src/main.cpp b/src/main.cpp
index 1576b0c..85886f5 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -5,6 +5,7 @@
5#include "paramproc.h" 5#include "paramproc.h"
6#include "staticstring.h" 6#include "staticstring.h"
7#include "build.h" 7#include "build.h"
8#include "action.h"
8 9
9class Param : public ParamProc 10class Param : public ParamProc
10{ 11{
@@ -14,17 +15,23 @@ public:
14 sCache(".build.cache"), 15 sCache(".build.cache"),
15 bDebug( false ), 16 bDebug( false ),
16 bPostDebug( false ), 17 bPostDebug( false ),
17 sView("plain") 18 sView("plain"),
19 bInfo( false ),
20 bCleanMode( false )
18 { 21 {
19 addHelpBanner("Build r?\n\n"); 22 addHelpBanner("Build r?\n\n");
20 addParam("file", 'f', &sFile, 23 addParam("file", 'f', &sFile,
21 "Set the input script, default: build.conf"); 24 "Set the input script, default: build.conf");
25 addParam("info", 'i', &bInfo,
26 "Display useful info about the loaded config file.", NULL, "true" );
27 addParam("clean", 'c', &bCleanMode,
28 "Clean instead of checking the given action.", NULL, "true" );
22 addParam('p', mkproc(Param::procViewPercent), 29 addParam('p', mkproc(Param::procViewPercent),
23 "Switch to percent view."); 30 "Switch to percent view.");
24 addParam('m', mkproc(Param::procViewMake), 31 addParam('m', mkproc(Param::procViewMake),
25 "Switch to 'make' style view."); 32 "Switch to 'make' style view.");
26 addParam("cache", &sCache, 33 addParam("cache", &sCache,
27 "Set an alternative cache file." ); 34 "Set an alternative cache file, default: .build.cache" );
28 addParam('d', &bDebug, 35 addParam('d', &bDebug,
29 "Display debug info instead of building", NULL, "true" ); 36 "Display debug info instead of building", NULL, "true" );
30 addParam('D', &bPostDebug, 37 addParam('D', &bPostDebug,
@@ -67,6 +74,8 @@ public:
67 //Viewer *pViewer; 74 //Viewer *pViewer;
68 bool bDebug; 75 bool bDebug;
69 bool bPostDebug; 76 bool bPostDebug;
77 bool bInfo;
78 bool bCleanMode;
70 79
71private: 80private:
72}; 81};
@@ -84,6 +93,15 @@ int main( int argc, char *argv[] )
84 pBuild = bld.load( prm.sFile.c_str() ); 93 pBuild = bld.load( prm.sFile.c_str() );
85 pBuild->setCache( prm.sCache ); 94 pBuild->setCache( prm.sCache );
86 pBuild->setView( prm.sView ); 95 pBuild->setView( prm.sView );
96 if( prm.bCleanMode )
97 pBuild->setMode( Action::actClean );
98
99 if( prm.bInfo )
100 {
101 pBuild->printInfo();
102 delete pBuild;
103 return 0;
104 }
87 if( prm.bDebug ) 105 if( prm.bDebug )
88 { 106 {
89 printf("\n\n----------\nDebug dump\n----------\n"); 107 printf("\n\n----------\nDebug dump\n----------\n");
@@ -111,9 +129,12 @@ int main( int argc, char *argv[] )
111 printf("\n\n----------\nDebug dump\n----------\n"); 129 printf("\n\n----------\nDebug dump\n----------\n");
112 pBuild->debugDump(); 130 pBuild->debugDump();
113 } 131 }
132 delete pBuild;
114 return 1; 133 return 1;
115 } 134 }
116 135
117 delete pBuild; 136 delete pBuild;
137
138 return 0;
118} 139}
119 140
diff --git a/src/target.cpp b/src/target.cpp
index a26f76f..3150c38 100644
--- a/src/target.cpp
+++ b/src/target.cpp
@@ -1,4 +1,6 @@
1#include "target.h" 1#include "target.h"
2#include "build.h"
3#include "viewer.h"
2 4
3Target::Target() : 5Target::Target() :
4 bRun( false ) 6 bRun( false )
@@ -13,6 +15,7 @@ void Target::run( Action::eAction nAct, Build &bld )
13{ 15{
14 bRun = true; 16 bRun = true;
15 17
18 bld.getView()->beginCommand( nAct, sName );
16 switch( nAct ) 19 switch( nAct )
17 { 20 {
18 case Action::actCheck: 21 case Action::actCheck:
@@ -23,5 +26,6 @@ void Target::run( Action::eAction nAct, Build &bld )
23 clean( bld ); 26 clean( bld );
24 break; 27 break;
25 } 28 }
29 bld.getView()->endCommand();
26} 30}
27 31