diff options
Diffstat (limited to 'build/transform_config_hw.py')
-rw-r--r-- | build/transform_config_hw.py | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/build/transform_config_hw.py b/build/transform_config_hw.py new file mode 100644 index 0000000..35eae67 --- /dev/null +++ b/build/transform_config_hw.py @@ -0,0 +1,105 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +# +# +# +# transform_config_hw.py -- Generate svn_private_config.h +# from svn_private_config.hw while editing SVN_BUILD_HOST + + +import os +import re +import sys +import platform + + +def usage_and_exit(msg): + if msg: + sys.stderr.write('%s\n\n' % msg) + sys.stderr.write( + 'USAGE: %s ARCHITECTURE TEMPLATE_FILE [OUTPUT_FILE]\n' + ' stdout will be used if OUTPUT_FILE is not provided.\n' + % os.path.basename(sys.argv[0])) + sys.stderr.flush() + sys.exit(1) + + +_wincpu_map = { + 'x86': 'x86', + 'x64': 'x86_64', + 'amd64': 'x86_64', + 'x86_64': 'x86_64', + 'ia64': 'ia64', + 'powerpc': 'powerpc', + 'alpha': 'alpha', + } + +_arch_map = _wincpu_map.copy() +_arch_map.update({ + 'win32': 'x86', + }) + +_interesting_rx = re.compile( + r'^\s*#\s*define\s+SVN_BUILD_HOST\s+(?P<host>"[^"]+")\s*$') + +def process_header(input, output, architecture): + uname = platform.uname() + winver = uname[3] + wincpu = _wincpu_map.get(uname[4].lower(), 'unknown') + arch = _arch_map.get(architecture.lower(), 'unknown') + + if wincpu == arch: + host = '"%s-microsoft-windows%s"' % (arch, winver) + else: + host = '"%s/%s-microsoft-windows%s"' % (arch, wincpu, winver) + + for line in input.split('\n'): + match = _interesting_rx.match(line) + if match is not None: + line = line.replace(match.group('host'), host) + output.write(line + '\n') + + +def main(input_filepath, output, architecture): + filename = os.path.basename(input_filepath) + input = open(input_filepath, 'r').read() + + output.write( + '/* This file is automatically generated from %s.\n' + ' * Do not edit this file -- edit the source and rerun gen-make.py */' + '\n\n' + % (filename,)) + + process_header(input, output, architecture) + + +if __name__ == '__main__': + if os.name != 'nt': + usage_and_exit('This script should only be run on Windows') + + if len(sys.argv) < 3 or len(sys.argv) > 4: + usage_and_exit('Incorrect number of arguments') + + architecture = sys.argv[1] + input_filepath = sys.argv[2] + + if len(sys.argv) > 3: + output_file = open(sys.argv[3], 'w') + else: + output_file = sys.stdout + + main(input_filepath, output_file, architecture) |