configure: add a verbose mode
authorBen Boeckel <mathstuf@gmail.com>
Thu, 11 Dec 2014 04:09:38 +0000 (23:09 -0500)
committerBen Boeckel <mathstuf@gmail.com>
Thu, 11 Dec 2014 04:09:38 +0000 (23:09 -0500)
Required for Fedora infrastructure so that the commands used to build
ninja are logged.

configure.py

index 3cd1e82..0f34e77 100755 (executable)
@@ -106,8 +106,9 @@ class Bootstrap:
     It also proxies all calls to an underlying ninja_syntax.Writer, to
     behave like non-bootstrap mode.
     """
-    def __init__(self, writer):
+    def __init__(self, writer, verbose=False):
         self.writer = writer
+        self.verbose = verbose
         # Map of variable name => expanded variable value.
         self.vars = {}
         # Map of rule name => dict of rule attributes.
@@ -163,6 +164,8 @@ class Bootstrap:
     def _run_command(self, cmdline):
         """Run a subcommand, quietly.  Prints the full command on error."""
         try:
+            if self.verbose:
+                print(cmdline)
             subprocess.check_call(cmdline, shell=True)
         except subprocess.CalledProcessError:
             print('when running: ', cmdline)
@@ -173,6 +176,8 @@ parser = OptionParser()
 profilers = ['gmon', 'pprof']
 parser.add_option('--bootstrap', action='store_true',
                   help='bootstrap a ninja binary from nothing')
+parser.add_option('--verbose', action='store_true',
+                  help='enable verbose build')
 parser.add_option('--platform',
                   help='target platform (' +
                        '/'.join(Platform.known_platforms()) + ')',
@@ -217,7 +222,7 @@ if options.bootstrap:
     # Wrap ninja_writer with the Bootstrapper, which also executes the
     # commands.
     print('bootstrapping ninja...')
-    n = Bootstrap(n)
+    n = Bootstrap(n, verbose=options.verbose)
 
 n.comment('This file is used to build ninja itself.')
 n.comment('It is generated by ' + os.path.basename(__file__) + '.')
@@ -602,6 +607,10 @@ n.build('all', 'phony', all_targets)
 n.close()
 print('wrote %s.' % BUILD_FILENAME)
 
+verbose = ''
+if options.verbose:
+    verbose = ' -v'
+
 if options.bootstrap:
     print('bootstrap complete.  rebuilding...')
     if platform.is_windows():
@@ -609,6 +618,6 @@ if options.bootstrap:
         if os.path.exists(bootstrap_exe):
             os.unlink(bootstrap_exe)
         os.rename('ninja.exe', bootstrap_exe)
-        subprocess.check_call('ninja.bootstrap.exe', shell=True)
+        subprocess.check_call('ninja.bootstrap.exe%s' % verbose, shell=True)
     else:
-        subprocess.check_call('./ninja', shell=True)
+        subprocess.check_call('./ninja%s' % verbose, shell=True)