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')