--- configure.py | 52 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 8 deletions(-) --- sip-4.10.5.orig/configure.py +++ sip-4.10.5/configure.py @@ -302,6 +302,11 @@ def create_optparser(): def store_abspath(option, opt_str, value, parser): setattr(parser.values, option.dest, os.path.abspath(value)) + def store_abspath_file(option, opt_str, value, parser): + if not os.path.isfile(value): + raise optparse.OptionValueError("'%s' is not a file" % value) + setattr(parser.values, option.dest, os.path.abspath(value)) + p = optparse.OptionParser(usage="python %prog [opts] [macro=value] " "[macro+=value]", version=sip_version_str) @@ -369,9 +374,38 @@ def create_optparser(): "are normally installed [default: %s]" % default_sipsipdir) p.add_option_group(g) + # Crosscompilation + g = optparse.OptionGroup(p, title="Crosscompilation") + g.add_option("--crosscompile", action="store_true", + default=False, dest="crosscompile", + help="Set, if cross-compiling") + g.add_option("--sipconfig-macros", action="callback", metavar="FILE", + default=None, dest="sipconfig_macros", type="string", + callback=store_abspath_file, + help="Path to a file containing sipconfig macros") + p.add_option_group(g) + return p +def load_sipconfig_macros(filename): + macros = {} + fd = file(filename, "r") + for line in fd.readlines(): + line = line.split() + try: + key = line[0] + except IndexError: + sipconfig.error("Invalid sipconfig macros file format") + value = "" + try: + value = " ".join(line[1:]) + except IndexError: + pass + macros[key] = value + return macros + + def main(argv): """Create the configuration module module. @@ -434,14 +468,16 @@ def main(argv): else: opts.universal = '' - # Get the platform specific macros for building. - macros = siputils.parse_build_macros( - os.path.join(src_dir, "specs", opts.platform), build_macro_names, - args) - - if macros is None: - p.print_help() - sys.exit(2) + if opts.sipconfig_macros: + macros = load_sipconfig_macros(opts.sipconfig_macros) + else: + # Get the platform specific macros for building. + macros = siputils.parse_build_macros( + os.path.join(src_dir, "specs", opts.platform), build_macro_names, + args) + if macros is None: + p.print_help() + sys.exit(2) # Tell the user what's been found. inform_user()