1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
--- Python-3.3.2.orig/setup.py 2013-05-15 18:33:00.000000000 +0200
+++ Python-3.3.2/setup.py 2013-10-27 13:54:34.000000000 +0100
@@ -80,7 +80,7 @@ def find_file(filename, std_dirs, paths)
'paths' is a list of additional locations to check; if the file is
found in one of them, the resulting list will contain the directory.
"""
- if host_platform == 'darwin':
+ if host_platform == 'darwin' and not cross_compiling:
# Honor the MacOSX SDK setting when one was specified.
# An SDK is a directory with the same structure as a real
# system, but with only header files and libraries.
@@ -90,7 +90,7 @@ def find_file(filename, std_dirs, paths)
for dir in std_dirs:
f = os.path.join(dir, filename)
- if host_platform == 'darwin' and is_macosx_sdk_path(dir):
+ if host_platform == 'darwin' and is_macosx_sdk_path(dir) and not cross_compiling:
f = os.path.join(sysroot, dir[1:], filename)
if os.path.exists(f): return []
@@ -99,7 +99,7 @@ def find_file(filename, std_dirs, paths)
for dir in paths:
f = os.path.join(dir, filename)
- if host_platform == 'darwin' and is_macosx_sdk_path(dir):
+ if host_platform == 'darwin' and is_macosx_sdk_path(dir) and not cross_compiling:
f = os.path.join(sysroot, dir[1:], filename)
if os.path.exists(f):
@@ -113,7 +113,7 @@ def find_library_file(compiler, libname,
if result is None:
return None
- if host_platform == 'darwin':
+ if host_platform == 'darwin' and not cross_compiling:
sysroot = macosx_sdk_root()
# Check whether the found file is in one of the standard directories
@@ -122,7 +122,7 @@ def find_library_file(compiler, libname,
# Ensure path doesn't end with path separator
p = p.rstrip(os.sep)
- if host_platform == 'darwin' and is_macosx_sdk_path(p):
+ if host_platform == 'darwin' and is_macosx_sdk_path(p) and not cross_compiling:
if os.path.join(sysroot, p[1:]) == dirname:
return [ ]
@@ -135,7 +135,7 @@ def find_library_file(compiler, libname,
# Ensure path doesn't end with path separator
p = p.rstrip(os.sep)
- if host_platform == 'darwin' and is_macosx_sdk_path(p):
+ if host_platform == 'darwin' and is_macosx_sdk_path(p) and not cross_compiling:
if os.path.join(sysroot, p[1:]) == dirname:
return [ p ]
@@ -168,6 +168,7 @@ class PyBuildExt(build_ext):
def build_extensions(self):
+ self.compiler.library_dirs = []
# Detect which modules should be compiled
missing = self.detect_modules()
@@ -444,7 +445,8 @@ class PyBuildExt(build_ext):
# only change this for cross builds for 3.3, issues on Mageia
if cross_compiling:
self.add_gcc_paths()
- self.add_multiarch_paths()
+ if not cross_compiling:
+ self.add_multiarch_paths()
# Add paths specified in the environment variables LDFLAGS and
# CPPFLAGS for header and library files.
@@ -481,7 +483,8 @@ class PyBuildExt(build_ext):
add_dir_to_list(dir_list, directory)
if os.path.normpath(sys.base_prefix) != '/usr' \
- and not sysconfig.get_config_var('PYTHONFRAMEWORK'):
+ and not sysconfig.get_config_var('PYTHONFRAMEWORK') \
+ and not cross_compiling:
# OSX note: Don't add LIBDIR and INCLUDEDIR to building a framework
# (PYTHONFRAMEWORK is set) to avoid # linking problems when
# building a framework with different architectures than
@@ -494,6 +497,9 @@ class PyBuildExt(build_ext):
# lib_dirs and inc_dirs are used to search for files;
# if a file is found in one of those directories, it can
# be assumed that no additional -I,-L directives are needed.
+ if cross_compiling:
+ add_dir_to_list(self.compiler.library_dirs,
+ sysconfig.get_config_var('srcdir'))
if not cross_compiling:
lib_dirs = self.compiler.library_dirs + [
'/lib64', '/usr/lib64',
@@ -520,23 +526,26 @@ class PyBuildExt(build_ext):
if host_platform == 'hp-ux11':
lib_dirs += ['/usr/lib/hpux64', '/usr/lib/hpux32']
- if host_platform == 'darwin':
- # This should work on any unixy platform ;-)
- # If the user has bothered specifying additional -I and -L flags
- # in OPT and LDFLAGS we might as well use them here.
- #
- # NOTE: using shlex.split would technically be more correct, but
- # also gives a bootstrap problem. Let's hope nobody uses
- # directories with whitespace in the name to store libraries.
- cflags, ldflags = sysconfig.get_config_vars(
- 'CFLAGS', 'LDFLAGS')
- for item in cflags.split():
- if item.startswith('-I'):
- inc_dirs.append(item[2:])
+ # This should work on any unixy platform ;-)
+ # If the user has bothered specifying additional -I and -L flags
+ # in OPT and LDFLAGS we might as well use them here.
+ #
+ # NOTE: using shlex.split would technically be more correct, but
+ # also gives a bootstrap problem. Let's hope nobody uses
+ # directories with whitespace in the name to store libraries.
+ cppflags, cflags, ldflags = sysconfig.get_config_vars(
+ 'CPPFLAGS', 'CFLAGS', 'LDFLAGS')
+ for item in cppflags.split():
+ if item.startswith('-I'):
+ inc_dirs.append(item[2:])
- for item in ldflags.split():
- if item.startswith('-L'):
- lib_dirs.append(item[2:])
+ for item in cflags.split():
+ if item.startswith('-I'):
+ inc_dirs.append(item[2:])
+
+ for item in ldflags.split():
+ if item.startswith('-L'):
+ lib_dirs.append(item[2:])
# Check for MacOS X, which doesn't need libm.a at all
math_libs = ['m']
@@ -1355,7 +1364,7 @@ class PyBuildExt(build_ext):
# Gustavo Niemeyer's bz2 module.
if (self.compiler.find_library_file(lib_dirs, 'bz2')):
- if host_platform == "darwin":
+ if host_platform == "darwin" and not cross_compiling:
bz2_extra_link_args = ('-Wl,-search_paths_first',)
else:
bz2_extra_link_args = ()
|