--- configure.py | 52 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 8 deletions(-) Index: sip-4.10.5/configure.py =================================================================== --- sip-4.10.5.orig/configure.py 2010-07-16 16:15:08.000000000 +0200 +++ sip-4.10.5/configure.py 2010-10-26 16:07:37.000000000 +0200 @@ -19,7 +19,6 @@ import os import glob import optparse -from distutils import sysconfig import siputils @@ -193,21 +192,45 @@ global plat_py_site_dir, plat_py_inc_dir, plat_py_conf_inc_dir global plat_bin_dir, plat_py_lib_dir, plat_sip_dir - # We trust distutils for some stuff. - plat_py_site_dir = sysconfig.get_python_lib(plat_specific=1) - plat_py_inc_dir = sysconfig.get_python_inc() - plat_py_conf_inc_dir = os.path.dirname(sysconfig.get_config_h_filename()) - - if sys.platform == "win32": - plat_py_lib_dir = sys.prefix + "\\libs" - plat_bin_dir = sys.exec_prefix - plat_sip_dir = sys.prefix + "\\sip" - else: - lib_dir = sysconfig.get_python_lib(plat_specific=1, standard_lib=1) + if not opts.crosscompile: + # We trust distutils for some stuff. + from distutils import sysconfig + plat_py_site_dir = sysconfig.get_python_lib(plat_specific=1) + plat_py_inc_dir = sysconfig.get_python_inc() + plat_py_conf_inc_dir = os.path.dirname(sysconfig.get_config_h_filename()) + + if sys.platform == "win32": + plat_py_lib_dir = sys.prefix + "\\libs" + plat_bin_dir = sys.exec_prefix + plat_sip_dir = sys.prefix + "\\sip" + else: + lib_dir = sysconfig.get_python_lib(plat_specific=1, standard_lib=1) - plat_py_lib_dir = lib_dir + "/config" - plat_bin_dir = sys.exec_prefix + "/bin" - plat_sip_dir = sys.prefix + "/share/sip" + plat_py_lib_dir = lib_dir + "/config" + plat_bin_dir = sys.exec_prefix + "/bin" + plat_sip_dir = sys.prefix + "/share/sip" + + count = 0 + if opts.py_site_dir: + plat_py_site_dir = opts.py_site_dir + count += 1 + if opts.py_inc_dir: + plat_py_inc_dir = opts.py_inc_dir + count += 1 + if opts.py_conf_inc_dir: + plat_py_conf_inc_dir = opts.py_conf_inc_dir + count += 1 + if opts.py_lib_dir: + plat_py_lib_dir = opts.py_lib_dir + count += 1 + if opts.py_bin_dir: + plat_py_bin_dir = opts.py_bin_dir + count += 1 + if opts.py_sip_dir: + plat_sip_dir = opts.py_sip_dir + count += 1 + if count != 6 and opts.crosscompile: + siputils.error("Need to specify all --py-... options for crosscompile.") def create_config(module, template, macros): @@ -302,6 +325,11 @@ 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 +397,62 @@ "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") + g.add_option("--py-site-dir", action="callback", + default=None, dest="py_site_dir", type="string", + callback=store_abspath, + help="Python site directory") + g.add_option("--py-inc-dir", action="callback", + default=None, dest="py_inc_dir", type="string", + callback=store_abspath, + help="Python include directory") + g.add_option("--py-conf-inc-dir", action="callback", + default=None, dest="py_conf_inc_dir", type="string", + callback=store_abspath, + help="Python config include directory") + g.add_option("--py-lib-dir", action="callback", + default=None, dest="py_lib_dir", type="string", + callback=store_abspath, + help="Python library directory") + g.add_option("--py-bin-dir", action="callback", + default=None, dest="py_bin_dir", type="string", + callback=store_abspath, + help="Python binary directory") + g.add_option("--py-sip-dir", action="callback", + default=None, dest="py_sip_dir", type="string", + callback=store_abspath, + help="Python SIP directory") + 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. @@ -382,9 +463,6 @@ if py_version < 0x020300: siputils.error("This version of SIP requires Python v2.3 or later.") - # Basic initialisation. - set_platform_directories() - # Build up the list of valid specs. for s in os.listdir(os.path.join(src_dir, "specs")): platform_specs.append(s) @@ -396,6 +474,9 @@ p = create_optparser() opts, args = p.parse_args() + # Basic initialisation. + set_platform_directories() + # Make sure MacOS specific options get initialised. if sys.platform != 'darwin': opts.universal = '' @@ -434,14 +515,16 @@ 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() Index: sip-4.10.5/siputils.py =================================================================== --- sip-4.10.5.orig/siputils.py 2010-07-16 16:07:33.000000000 +0200 +++ sip-4.10.5/siputils.py 2010-10-26 16:02:14.000000000 +0200 @@ -1026,9 +1026,11 @@ for f in self.optional_list("DEFINES"): cppflags.append("-D" + f) + print "CPPFLAGS: Adding -D", f for f in self.optional_list("INCDIR"): cppflags.append("-I" + _quote(f)) + print "CPPFLAGS: Adding -I", _quote(f) libs = []