diff options
author | Elliott Hird <penguinofthegods@gmail.com> | 2011-12-15 14:52:22 (GMT) |
---|---|---|
committer | Elliott Hird <penguinofthegods@gmail.com> | 2011-12-15 19:34:49 (GMT) |
commit | 075847031b6cf7b9de3bb7c42648a74d168a752b (patch) | |
tree | a28a6887fc3b9942acc90e1368149fde51065c18 /bootstrap.py | |
parent | 121f36d59f293263b9a27d01a8112de17978c5d1 (diff) | |
download | Ninja-075847031b6cf7b9de3bb7c42648a74d168a752b.zip Ninja-075847031b6cf7b9de3bb7c42648a74d168a752b.tar.gz Ninja-075847031b6cf7b9de3bb7c42648a74d168a752b.tar.bz2 |
Rewrite the bootstrap script in Python
This allows trouble-free builds on platforms with non-standard Python
executable names. As a bonus, it passes the arguments received on to
configure.py, so you don't have to reconfigure to build in a
non-standard manner.
Diffstat (limited to 'bootstrap.py')
-rwxr-xr-x | bootstrap.py | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/bootstrap.py b/bootstrap.py new file mode 100755 index 0000000..ea35a5b --- /dev/null +++ b/bootstrap.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python +# Copyright 2011 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import re +import sys +import os +import glob +import errno +import subprocess + +def run(*args, **kwargs): + try: + subprocess.check_call(*args, **kwargs) + except subprocess.CalledProcessError, e: + sys.exit(e.returncode) + +# Compute system-specific CFLAGS/LDFLAGS as used in both in the below +# g++ call as well as in the later configure.py. +cflags = os.environ.get('CFLAGS', '') +ldflags = os.environ.get('LDFLAGS', '') +if sys.platform.startswith('freebsd'): + cflags += ' -I/usr/local/include' + ldflags += ' -L/usr/local/lib' + +print 'Building ninja manually...' + +try: + os.mkdir('build') +except OSError, e: + if e.errno != errno.EEXIST: + raise + +with open('src/browse.py') as browse_py: + with open('build/browse_py.h', 'w') as browse_py_h: + run(['./src/inline.sh', 'kBrowsePy'], + stdin=browse_py, stdout=browse_py_h) + +pattern = r'test\.cc$|\.in\.cc$' + +if sys.platform.startswith('win32'): + pattern += r'|/browse\.cc$|/subprocess\.cc$' +else: + pattern += r'|-win32\.cc$' + +sources = [src for src in glob.glob('src/*.cc') if not re.search(pattern, src)] + +args = [os.environ.get('CXX', 'g++'), '-Wno-deprecated', + '-DNINJA_PYTHON="' + sys.executable + '"'] +args.extend(cflags.split()) +args.extend(ldflags.split()) +args.extend(['-o', 'ninja.bootstrap']) +args.extend(sources) +run(args) + +print 'Building ninja using itself...' +run([sys.executable, 'configure.py'] + sys.argv[1:]) +run(['./ninja.bootstrap']) +os.unlink('ninja.bootstrap') + +print 'Done!' |