summaryrefslogtreecommitdiffstats
path: root/src/ninja.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/ninja.cc')
-rw-r--r--src/ninja.cc37
1 files changed, 15 insertions, 22 deletions
diff --git a/src/ninja.cc b/src/ninja.cc
index 5b96ca1..a058e95 100644
--- a/src/ninja.cc
+++ b/src/ninja.cc
@@ -359,14 +359,18 @@ int CmdRules(State* state, int argc, char* argv[]) {
int CmdClean(State* state, int argc, char* argv[], const BuildConfig& config) {
bool generator = false;
+ bool clean_rules = false;
optind = 1;
int opt;
- while ((opt = getopt(argc, argv, "g")) != -1) {
+ while ((opt = getopt(argc, argv, "gr")) != -1) {
switch (opt) {
case 'g':
generator = true;
break;
+ case 'r':
+ clean_rules = true;
+ break;
default:
Usage(config);
return 1;
@@ -375,29 +379,18 @@ int CmdClean(State* state, int argc, char* argv[], const BuildConfig& config) {
argv += optind;
argc -= optind;
+ if (clean_rules && argc == 0) {
+ Error("expected a rule to clean");
+ return 1;
+ }
+
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 {
+ if (argc >= 1) {
+ if (clean_rules)
+ return cleaner.CleanRules(argc, argv);
+ else
return cleaner.CleanTargets(argc, argv);
- }
- }
- else {
+ } else {
return cleaner.CleanAll(generator);
}
}