Branch oldpackages for 14.07
[14.07/packages.git] / lang / python-sip / patches / 100-cross-compile.patch
1 Index: sip-4.12.1/configure.py
2 ===================================================================
3 --- sip-4.12.1.orig/configure.py        2011-01-22 14:47:21.000000000 +0100
4 +++ sip-4.12.1/configure.py     2011-03-13 16:47:19.085716739 +0100
5 @@ -19,7 +19,6 @@ import sys
6  import os
7  import glob
8  import optparse
9 -from distutils import sysconfig
10  
11  import siputils
12  
13 @@ -197,21 +196,45 @@ def set_platform_directories():
14      global plat_py_site_dir, plat_py_inc_dir, plat_py_conf_inc_dir
15      global plat_bin_dir, plat_py_lib_dir, plat_sip_dir
16  
17 -    # We trust distutils for some stuff.
18 -    plat_py_site_dir = sysconfig.get_python_lib(plat_specific=1)
19 -    plat_py_inc_dir = sysconfig.get_python_inc()
20 -    plat_py_conf_inc_dir = os.path.dirname(sysconfig.get_config_h_filename())
21 -
22 -    if sys.platform == "win32":
23 -        plat_py_lib_dir = sys.prefix + "\\libs"
24 -        plat_bin_dir = sys.exec_prefix
25 -        plat_sip_dir = sys.prefix + "\\sip"
26 -    else:
27 -        lib_dir = sysconfig.get_python_lib(plat_specific=1, standard_lib=1)
28 +    if not opts.crosscompile:
29 +        # We trust distutils for some stuff.
30 +        from distutils import sysconfig
31 +        plat_py_site_dir = sysconfig.get_python_lib(plat_specific=1)
32 +        plat_py_inc_dir = sysconfig.get_python_inc()
33 +        plat_py_conf_inc_dir = os.path.dirname(sysconfig.get_config_h_filename())
34 +
35 +        if sys.platform == "win32":
36 +            plat_py_lib_dir = sys.prefix + "\\libs"
37 +            plat_bin_dir = sys.exec_prefix
38 +            plat_sip_dir = sys.prefix + "\\sip"
39 +        else:
40 +            lib_dir = sysconfig.get_python_lib(plat_specific=1, standard_lib=1)
41  
42 -        plat_py_lib_dir = lib_dir + "/config"
43 -        plat_bin_dir = sys.exec_prefix + "/bin"
44 -        plat_sip_dir = sys.prefix + "/share/sip"
45 +            plat_py_lib_dir = lib_dir + "/config"
46 +            plat_bin_dir = sys.exec_prefix + "/bin"
47 +            plat_sip_dir = sys.prefix + "/share/sip"
48 +
49 +    count = 0
50 +    if opts.py_site_dir:
51 +        plat_py_site_dir = opts.py_site_dir
52 +        count += 1
53 +    if opts.py_inc_dir:
54 +        plat_py_inc_dir = opts.py_inc_dir
55 +        count += 1
56 +    if opts.py_conf_inc_dir:
57 +        plat_py_conf_inc_dir = opts.py_conf_inc_dir
58 +        count += 1
59 +    if opts.py_lib_dir:
60 +        plat_py_lib_dir = opts.py_lib_dir
61 +        count += 1
62 +    if opts.py_bin_dir:
63 +        plat_py_bin_dir = opts.py_bin_dir
64 +        count += 1
65 +    if opts.py_sip_dir:
66 +        plat_sip_dir = opts.py_sip_dir
67 +        count += 1
68 +    if count != 6 and opts.crosscompile:
69 +        siputils.error("Need to specify all --py-... options for crosscompile.")
70  
71  
72  def patch_files():
73 @@ -337,6 +360,11 @@ def create_optparser():
74      def store_abspath(option, opt_str, value, parser):
75          setattr(parser.values, option.dest, os.path.abspath(value))
76  
77 +    def store_abspath_file(option, opt_str, value, parser):
78 +        if not os.path.isfile(value):
79 +            raise optparse.OptionValueError("'%s' is not a file" % value)
80 +        setattr(parser.values, option.dest, os.path.abspath(value))
81 +
82      p = optparse.OptionParser(usage="python %prog [opts] [macro=value] "
83              "[macro+=value]", version=sip_version_str)
84  
85 @@ -411,9 +439,62 @@ def create_optparser():
86              "are normally installed [default: %s]" % default_sipsipdir)
87      p.add_option_group(g)
88  
89 +    # Crosscompilation
90 +    g = optparse.OptionGroup(p, title="Crosscompilation")
91 +    g.add_option("--crosscompile", action="store_true",
92 +                 default=False, dest="crosscompile",
93 +                 help="Set, if cross-compiling")
94 +    g.add_option("--sipconfig-macros", action="callback", metavar="FILE",
95 +                 default=None, dest="sipconfig_macros", type="string",
96 +                 callback=store_abspath_file,
97 +                 help="Path to a file containing sipconfig macros")
98 +    g.add_option("--py-site-dir", action="callback",
99 +                 default=None, dest="py_site_dir", type="string",
100 +                callback=store_abspath,
101 +                help="Python site directory")
102 +    g.add_option("--py-inc-dir", action="callback",
103 +                 default=None, dest="py_inc_dir", type="string",
104 +                callback=store_abspath,
105 +                help="Python include directory")
106 +    g.add_option("--py-conf-inc-dir", action="callback",
107 +                 default=None, dest="py_conf_inc_dir", type="string",
108 +                callback=store_abspath,
109 +                help="Python config include directory")
110 +    g.add_option("--py-lib-dir", action="callback",
111 +                 default=None, dest="py_lib_dir", type="string",
112 +                callback=store_abspath,
113 +                help="Python library directory")
114 +    g.add_option("--py-bin-dir", action="callback",
115 +                 default=None, dest="py_bin_dir", type="string",
116 +                callback=store_abspath,
117 +                help="Python binary directory")
118 +    g.add_option("--py-sip-dir", action="callback",
119 +                 default=None, dest="py_sip_dir", type="string",
120 +                callback=store_abspath,
121 +                help="Python SIP directory")
122 +    p.add_option_group(g)
123 +
124      return p
125  
126  
127 +def load_sipconfig_macros(filename):
128 +    macros = {}
129 +    fd = file(filename, "r")
130 +    for line in fd.readlines():
131 +        line = line.split()
132 +        try:
133 +            key = line[0]
134 +        except IndexError:
135 +            sipconfig.error("Invalid sipconfig macros file format")
136 +        value = ""
137 +        try:
138 +            value = " ".join(line[1:])
139 +        except IndexError:
140 +            pass
141 +        macros[key] = value
142 +    return macros
143 +
144 +
145  def main(argv):
146      """Create the configuration module module.
147  
148 @@ -424,9 +505,6 @@ def main(argv):
149      if py_version < 0x020300:
150          siputils.error("This version of SIP requires Python v2.3 or later.")
151  
152 -    # Basic initialisation.
153 -    set_platform_directories()
154 -
155      # Build up the list of valid specs.
156      for s in os.listdir(os.path.join(src_dir, "specs")):
157          platform_specs.append(s)
158 @@ -438,6 +516,9 @@ def main(argv):
159      p = create_optparser()
160      opts, args = p.parse_args()
161  
162 +    # Basic initialisation.
163 +    set_platform_directories()
164 +
165      # Make sure MacOS specific options get initialised.
166      if sys.platform != 'darwin':
167          opts.universal = ''
168 @@ -477,14 +558,16 @@ def main(argv):
169      else:
170          opts.universal = ''
171  
172 -    # Get the platform specific macros for building.
173 -    macros = siputils.parse_build_macros(
174 -            os.path.join(src_dir, "specs", opts.platform), build_macro_names,
175 -            args)
176 -
177 -    if macros is None:
178 -        siputils.error("Unsupported macro name specified. Use the --show-build-macros flag to see a list of supported macros.")
179 -        sys.exit(2)
180 +    if opts.sipconfig_macros:
181 +        macros = load_sipconfig_macros(opts.sipconfig_macros)
182 +    else:
183 +        # Get the platform specific macros for building.
184 +        macros = siputils.parse_build_macros(
185 +                os.path.join(src_dir, "specs", opts.platform), build_macro_names,
186 +                args)
187 +        if macros is None:
188 +            siputils.error("Unsupported macro name specified. Use the --show-build-macros flag to see a list of supported macros.")
189 +            sys.exit(2)
190  
191      # Fix the name of the sip module.
192      global sip_module_base
193 Index: sip-4.12.1/siputils.py
194 ===================================================================
195 --- sip-4.12.1.orig/siputils.py 2011-01-22 14:45:38.000000000 +0100
196 +++ sip-4.12.1/siputils.py      2011-03-13 16:47:19.087716533 +0100
197 @@ -1044,9 +1044,11 @@ class Makefile:
198  
199          for f in self.optional_list("DEFINES"):
200              cppflags.append("-D" + f)
201 +            print "CPPFLAGS: Adding -D", f
202  
203          for f in self.optional_list("INCDIR"):
204              cppflags.append("-I" + _quote(f))
205 +            print "CPPFLAGS: Adding -I", _quote(f)
206  
207          libs = []
208