diff options
author | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-08-22 14:29:52 +0100 |
---|---|---|
committer | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-08-22 14:29:52 +0100 |
commit | f1bdf13786f0752c0846cf36f0d91e4fc6747929 (patch) | |
tree | 4223b2035bf2240d681a53822808b3c7f687b905 /gen-make.py | |
download | subversion-tarball-f1bdf13786f0752c0846cf36f0d91e4fc6747929.tar.gz |
Tarball conversion
Diffstat (limited to 'gen-make.py')
-rwxr-xr-x | gen-make.py | 320 |
1 files changed, 320 insertions, 0 deletions
diff --git a/gen-make.py b/gen-make.py new file mode 100755 index 0000000..3e98beb --- /dev/null +++ b/gen-make.py @@ -0,0 +1,320 @@ +#!/usr/bin/env python +# +# +# 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. +# +# +# +# gen-make.py -- generate makefiles for building Subversion +# + + +import os +import sys +import getopt +try: + my_getopt = getopt.gnu_getopt +except AttributeError: + my_getopt = getopt.getopt +try: + # Python >=3.0 + import configparser +except ImportError: + # Python <3.0 + import ConfigParser as configparser + +# for the generator modules +sys.path.insert(0, os.path.join('build', 'generator')) + +# for getversion +sys.path.insert(1, 'build') + +gen_modules = { + 'make' : ('gen_make', 'Makefiles for POSIX systems'), + 'dsp' : ('gen_msvc_dsp', 'MSVC 6.x project files'), + 'vcproj' : ('gen_vcnet_vcproj', 'VC.Net project files'), + } + +def main(fname, gentype, verfname=None, + skip_depends=0, other_options=None): + if verfname is None: + verfname = os.path.join('subversion', 'include', 'svn_version.h') + + gen_module = __import__(gen_modules[gentype][0]) + + generator = gen_module.Generator(fname, verfname, other_options) + + if not skip_depends: + generator.compute_hdr_deps() + + generator.write() + generator.write_sqlite_headers() + + if ('--debug', '') in other_options: + for dep_type, target_dict in generator.graph.deps.items(): + sorted_targets = list(target_dict.keys()); sorted_targets.sort() + for target in sorted_targets: + print(dep_type + ": " + _objinfo(target)) + for source in target_dict[target]: + print(" " + _objinfo(source)) + print("=" * 72) + gen_keys = sorted(generator.__dict__.keys()) + for name in gen_keys: + value = generator.__dict__[name] + if isinstance(value, list): + print(name + ": ") + for i in value: + print(" " + _objinfo(i)) + print("=" * 72) + + +def _objinfo(o): + if isinstance(o, str): + return repr(o) + else: + t = o.__class__.__name__ + n = getattr(o, 'name', '-') + f = getattr(o, 'filename', '-') + return "%s: %s %s" % (t,n,f) + + +def _usage_exit(err=None): + "print ERR (if any), print usage, then exit the script" + if err: + print("ERROR: %s\n" % (err)) + print("USAGE: gen-make.py [options...] [conf-file]") + print(" -s skip dependency generation") + print(" --debug print lots of stuff only developers care about") + print(" --release release mode") + print(" --reload reuse all options from the previous invocation") + print(" of the script, except -s, -t, --debug and --reload") + print(" -t TYPE use the TYPE generator; can be one of:") + items = sorted(gen_modules.items()) + for name, (module, desc) in items: + print(' %-12s %s' % (name, desc)) + print("") + print(" The default generator type is 'make'") + print("") + print(" Makefile-specific options:") + print("") + print(" --assume-shared-libs") + print(" omit dependencies on libraries, on the assumption that") + print(" shared libraries will be built, so that it is unnecessary") + print(" to relink executables when the libraries that they depend") + print(" on change. This is an option for developers who want to") + print(" increase the speed of frequent rebuilds.") + print(" *** Do not use unless you understand the consequences. ***") + print("") + print(" UNIX-specific options:") + print("") + print(" --installed-libs") + print(" Comma-separated list of Subversion libraries to find") + print(" pre-installed instead of building (probably only") + print(" useful for packagers)") + print("") + print(" Windows-specific options:") + print("") + print(" --with-apr=DIR") + print(" the APR sources are in DIR") + print("") + print(" --with-apr-util=DIR") + print(" the APR-Util sources are in DIR") + print("") + print(" --with-apr-iconv=DIR") + print(" the APR-Iconv sources are in DIR") + print("") + print(" --with-berkeley-db=DIR") + print(" look for Berkeley DB headers and libs in") + print(" DIR") + print("") + print(" --with-neon=DIR") + print(" the Neon sources are in DIR") + print("") + print(" --without-neon") + print(" Don't build Neon sources (if present)") + print("") + print(" --with-serf=DIR") + print(" the Serf sources are in DIR") + print("") + print(" --with-httpd=DIR") + print(" the httpd sources and binaries required") + print(" for building mod_dav_svn are in DIR;") + print(" implies --with-apr{-util, -iconv}, but") + print(" you can override them") + print("") + print(" --with-libintl=DIR") + print(" look for GNU libintl headers and libs in DIR;") + print(" implies --enable-nls") + print("") + print(" --with-openssl=DIR") + print(" tell neon to look for OpenSSL headers") + print(" and libs in DIR") + print("") + print(" --with-zlib=DIR") + print(" tell neon to look for ZLib headers and") + print(" libs in DIR") + print("") + print(" --with-jdk=DIR") + print(" look for the java development kit here") + print("") + print(" --with-junit=DIR") + print(" look for the junit jar here") + print(" junit is for testing the java bindings") + print("") + print(" --with-swig=DIR") + print(" look for the swig program in DIR") + print("") + print(" --with-sqlite=DIR") + print(" look for sqlite in DIR") + print("") + print(" --with-sasl=DIR") + print(" look for the sasl headers and libs in DIR") + print("") + print(" --enable-pool-debug") + print(" turn on APR pool debugging") + print("") + print(" --enable-purify") + print(" add support for Purify instrumentation;") + print(" implies --enable-pool-debug") + print("") + print(" --enable-quantify") + print(" add support for Quantify instrumentation") + print("") + print(" --enable-nls") + print(" add support for gettext localization") + print("") + print(" --enable-bdb-in-apr-util") + print(" configure APR-Util to use Berkeley DB") + print("") + print(" --enable-ml") + print(" enable use of ML assembler with zlib") + print("") + print(" --disable-shared") + print(" only build static libraries") + print("") + print(" --with-static-apr") + print(" Use static apr and apr-util") + print("") + print(" --vsnet-version=VER") + print(" generate for VS.NET version VER (2002, 2003, 2005, 2008 or 2010)") + print(" [only valid in combination with '-t vcproj']") + print("") + print(" --with-apr_memcache=DIR") + print(" the apr_memcache sources are in DIR") + sys.exit(1) + + +class Options: + def __init__(self): + self.list = [] + self.dict = {} + + def add(self, opt, val): + if opt in self.dict: + self.list[self.dict[opt]] = (opt, val) + else: + self.dict[opt] = len(self.list) + self.list.append((opt, val)) + +if __name__ == '__main__': + try: + opts, args = my_getopt(sys.argv[1:], 'st:', + ['debug', + 'release', + 'reload', + 'assume-shared-libs', + 'with-apr=', + 'with-apr-util=', + 'with-apr-iconv=', + 'with-berkeley-db=', + 'with-neon=', + 'without-neon', + 'with-serf=', + 'with-httpd=', + 'with-libintl=', + 'with-openssl=', + 'with-zlib=', + 'with-jdk=', + 'with-junit=', + 'with-swig=', + 'with-sqlite=', + 'with-sasl=', + 'with-apr_memcache=', + 'with-static-apr', + 'enable-pool-debug', + 'enable-purify', + 'enable-quantify', + 'enable-nls', + 'enable-bdb-in-apr-util', + 'enable-ml', + 'disable-shared', + 'installed-libs=', + 'vsnet-version=', + ]) + if len(args) > 1: + _usage_exit("Too many arguments") + except getopt.GetoptError, e: + _usage_exit(str(e)) + + conf = 'build.conf' + skip = 0 + gentype = 'make' + rest = Options() + + if args: + conf = args[0] + + # First merge options with previously saved to gen-make.opts if --reload + # options used + for opt, val in opts: + if opt == '--reload': + prev_conf = configparser.ConfigParser() + prev_conf.read('gen-make.opts') + for opt, val in prev_conf.items('options'): + if opt != '--debug': + rest.add(opt, val) + del prev_conf + else: + rest.add(opt, val) + + # Parse options list + for opt, val in rest.list: + if opt == '-s': + skip = 1 + elif opt == '-t': + gentype = val + else: + if opt == '--with-httpd': + rest.add('--with-apr', os.path.join(val, 'srclib', 'apr')) + rest.add('--with-apr-util', os.path.join(val, 'srclib', 'apr-util')) + rest.add('--with-apr-iconv', os.path.join(val, 'srclib', 'apr-iconv')) + + # Remember all options so that --reload and other scripts can use them + opt_conf = open('gen-make.opts', 'w') + opt_conf.write('[options]\n') + for opt, val in rest.list: + opt_conf.write(opt + ' = ' + val + '\n') + opt_conf.close() + + if gentype not in gen_modules.keys(): + _usage_exit("Unknown module type '%s'" % (gentype)) + + main(conf, gentype, skip_depends=skip, other_options=rest.list) + + +### End of file. |