From 27046cb3baca11de5fe369df84d552ab963ccc69 Mon Sep 17 00:00:00 2001 From: Evan Martin Date: Thu, 21 Oct 2010 08:16:07 -0700 Subject: [PATCH] getopt for input file --- ninja.cc | 47 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/ninja.cc b/ninja.cc index 71af097..396d102 100644 --- a/ninja.cc +++ b/ninja.cc @@ -1,22 +1,53 @@ #include "ninja.h" +#include + +option options[] = { + { "help", no_argument, NULL, 'h' }, + { } +}; + +void usage() { + fprintf(stderr, +"usage: ninja [options] target\n" +"\n" +"options:\n" +" -i FILE specify input build file [default=build.ninja]\n" + ); +} + int main(int argc, char** argv) { + const char* input_file = "build.ninja"; + + int opt; + while ((opt = getopt_long(argc, argv, "hi:", options, NULL)) != -1) { + switch (opt) { + case 'i': + input_file = optarg; + break; + case 'h': + default: + usage(); + return 1; + } + } + if (optind >= argc) { + fprintf(stderr, "expected target to build\n"); + usage(); + return 1; + } + State state; ManifestParser parser(&state); string err; - if (!parser.Load("build.ninja", &err)) { + if (!parser.Load(input_file, &err)) { fprintf(stderr, "error loading: %s\n", err.c_str()); return 1; } - - if (argc < 2) { - fprintf(stderr, "usage: %s target\n", argv[0]); - return 1; - } - Shell shell; Builder builder(&state); - builder.AddTarget(argv[1]); + for (int i = optind; i < argc; ++i) + builder.AddTarget(argv[i]); state.stat_cache()->Dump(); bool success = builder.Build(&shell, &err); -- 2.7.4