Make ninja regeneration work when gen.py or template changes Change-Id: I8d56f64454bf084510e1760943c24bfd8f840ca3 Reviewed-on: https://gn-review.googlesource.com/1362 Reviewed-by: Brett Wilson <brettw@chromium.org>
diff --git a/build/build.ninja.template b/build/build_linux.ninja.template similarity index 100% rename from build/build.ninja.template rename to build/build_linux.ninja.template
diff --git a/build/build_vs.ninja.template b/build/build_win.ninja.template similarity index 99% rename from build/build_vs.ninja.template rename to build/build_win.ninja.template index 88bba37..f5f8b65 100644 --- a/build/build_vs.ninja.template +++ b/build/build_win.ninja.template
@@ -1,4 +1,3 @@ - arch = environment.x64 rule cc
diff --git a/build/gen.py b/build/gen.py index d4c4b00..6d551eb 100755 --- a/build/gen.py +++ b/build/gen.py
@@ -16,8 +16,8 @@ import sys import tempfile -BOOTSTRAP_DIR = os.path.dirname(os.path.abspath(__file__)) -REPO_ROOT = os.path.dirname(BOOTSTRAP_DIR) +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +REPO_ROOT = os.path.dirname(SCRIPT_DIR) GN_ROOT = os.path.join(REPO_ROOT, 'tools', 'gn') is_win = sys.platform.startswith('win') @@ -56,16 +56,24 @@ 'ar = ' + ar, 'ld = ' + ld, '', + 'rule regen', + ' command = %s ../build/gen.py' % sys.executable, + ' description = Regenerating ninja files', + '', + 'build build.ninja: regen', + ' generator = 1', + ' depfile = build.ninja.d', + '', ] - if is_win: - template_filename = 'build_vs.ninja.template' - elif is_mac: - template_filename = 'build_mac.ninja.template' - else: - template_filename = 'build.ninja.template' - with open(os.path.join(BOOTSTRAP_DIR, template_filename)) as f: + template_filename = os.path.join(SCRIPT_DIR, { + 'win32': 'build_win.ninja.template', + 'darwin': 'build_mac.ninja.template', + 'linux2': 'build_linux.ninja.template' + }[sys.platform]) + + with open(template_filename) as f: ninja_template = f.read() if is_win: @@ -131,6 +139,13 @@ f.write(ninja_template) f.write('\n'.join(ninja_lines)) + with open(path + '.d', 'w') as f: + f.write('build.ninja: ' + + os.path.relpath(os.path.join(SCRIPT_DIR, 'gen.py'), + os.path.dirname(path)) + ' ' + + os.path.relpath(template_filename, os.path.dirname(path)) + '\n') + + def write_gn_ninja(path, options): if is_win: cc = os.environ.get('CC', 'cl.exe')