mirror of
https://github.com/reactos/ninja.git
synced 2025-02-24 13:40:31 +00:00
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.
This commit is contained in:
parent
121f36d59f
commit
075847031b
4
HACKING
4
HACKING
@ -1,5 +1,5 @@
|
||||
Adjusting build flags:
|
||||
CFLAGS=-O3 ./configure
|
||||
CFLAGS=-O3 ./configure.py
|
||||
and rebuild.
|
||||
|
||||
Test-driven development:
|
||||
@ -56,7 +56,7 @@ Windows development on Linux (this is kind of hacky right now):
|
||||
|
||||
Windows development on Windows:
|
||||
- install mingw, msys, and python
|
||||
- in the mingw shell, put Python in your path, and: sh bootstrap.sh
|
||||
- in the mingw shell, put Python in your path, and: python bootstrap.py
|
||||
- to reconfigure, run 'python configure.py'
|
||||
- remember to strip the resulting executable if size matters to you
|
||||
- you'll need to rename ninja.exe into my-ninja.exe during development,
|
||||
|
2
README
2
README
@ -5,7 +5,7 @@ See the manual -- http://martine.github.com/ninja/manual.html or
|
||||
doc/manual.asciidoc included in the distribution -- for background
|
||||
and more details.
|
||||
|
||||
To build, run ./bootstrap.sh. It first blindly compiles all non-test
|
||||
To build, run ./bootstrap.py. It first blindly compiles all non-test
|
||||
source files together, then re-builds Ninja using itself. You should
|
||||
end up with a 'ninja' binary in the source root. Run './ninja -h' for
|
||||
help.
|
||||
|
72
bootstrap.py
Executable file
72
bootstrap.py
Executable file
@ -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!'
|
53
bootstrap.sh
53
bootstrap.sh
@ -1,53 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# 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.
|
||||
|
||||
set -e
|
||||
|
||||
SYSTEMNAME=`uname -s`
|
||||
|
||||
# Compute system-specific CFLAGS/LDFLAGS as used in both in the below
|
||||
# g++ call as well as in the later configure.py.
|
||||
if [ "${SYSTEMNAME}" = "Linux" ]; then
|
||||
export CFLAGS="${CFLAGS}"
|
||||
export LDFLAGS="${LDFLAGS}"
|
||||
elif [ "${SYSTEMNAME}" = "FreeBSD" ]; then
|
||||
export CFLAGS="${CFLAGS} -I/usr/local/include"
|
||||
export LDFLAGS="${LDFLAGS} -L/usr/local/lib"
|
||||
fi
|
||||
|
||||
echo "Building ninja manually..."
|
||||
mkdir -p build
|
||||
./src/inline.sh kBrowsePy < src/browse.py > build/browse_py.h
|
||||
|
||||
pattern='test\.cc$\|\.in\.cc$'
|
||||
case "$SYSTEMNAME" in
|
||||
MINGW32*)
|
||||
pattern="$pattern"'\|/browse\.cc$\|/subprocess\.cc$'
|
||||
;;
|
||||
*)
|
||||
pattern="$pattern"'\|-win32\.cc$'
|
||||
;;
|
||||
esac
|
||||
srcs=$(ls src/*.cc | grep -v "$pattern")
|
||||
|
||||
${CXX:-g++} -Wno-deprecated ${CFLAGS} ${LDFLAGS} -o ninja.bootstrap $srcs
|
||||
|
||||
echo "Building ninja using itself..."
|
||||
python ./configure.py
|
||||
./ninja.bootstrap
|
||||
rm ninja.bootstrap
|
||||
|
||||
echo "Done!"
|
@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# Copyright 2001 Google Inc. All Rights Reserved.
|
||||
#
|
||||
|
Loading…
x
Reference in New Issue
Block a user