summaryrefslogtreecommitdiffstats
path: root/src/ninja.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/ninja.cc')
-rw-r--r--src/ninja.cc38
1 files changed, 37 insertions, 1 deletions
diff --git a/src/ninja.cc b/src/ninja.cc
index 3912139..5a0c00d 100644
--- a/src/ninja.cc
+++ b/src/ninja.cc
@@ -38,6 +38,7 @@
#include "graphviz.h"
#include "parsers.h"
#include "util.h"
+#include "clean.h"
option options[] = {
{ "help", no_argument, NULL, 'h' },
@@ -60,7 +61,8 @@ void usage(const BuildConfig& config) {
" graph output graphviz dot file for targets\n"
" query show inputs/outputs for a path\n"
" targets list targets by their rule or depth in the DAG\n"
-" rules list all rules\n",
+" rules list all rules\n"
+" clean clean built files\n",
config.parallelism);
}
@@ -276,6 +278,38 @@ int CmdRules(State* state, int argc, char* argv[]) {
return 0;
}
+int CmdClean(State* state,
+ int argc,
+ char* argv[],
+ const BuildConfig& config) {
+ Cleaner cleaner(state, config);
+ if (argc >= 1)
+ {
+ string mode = argv[0];
+ if (mode == "target") {
+ if (argc >= 2) {
+ return cleaner.CleanTargets(argc - 1, &argv[1]);
+ } else {
+ Error("expected a target to clean");
+ return 1;
+ }
+ } else if (mode == "rule") {
+ if (argc >= 2) {
+ return cleaner.CleanRules(argc - 1, &argv[1]);
+ } else {
+ Error("expected a rule to clean");
+ return 1;
+ }
+ } else {
+ return cleaner.CleanTargets(argc, argv);
+ }
+ }
+ else {
+ cleaner.CleanAll();
+ return 0;
+ }
+}
+
int main(int argc, char** argv) {
BuildConfig config;
const char* input_file = "build.ninja";
@@ -345,6 +379,8 @@ int main(int argc, char** argv) {
return CmdTargets(&state, argc, argv);
if (tool == "rules")
return CmdRules(&state, argc, argv);
+ if (tool == "clean")
+ return CmdClean(&state, argc, argv, config);
Error("unknown tool '%s'", tool.c_str());
}