Permalink
Browse files

build: better host_arch() definition in configure

On one of my OS X Lion machines, it always reports i386, even though 64-bit
is supported. This lookup better matches how WAF determines the host arch,
which was correctly getting 64-bit even on this screwy machine.
  • Loading branch information...
1 parent da90836 commit 19133cac029c6641e94f7f2e7fbce92c859e3846 @TooTallNate TooTallNate committed with bnoordhuis Feb 20, 2012
Showing with 31 additions and 17 deletions.
  1. +31 −17 configure
View
48 configure
@@ -139,28 +139,42 @@ def pkg_config(pkg):
return (libs, cflags)
-def uname(switch):
- f = os.popen('uname %s' % switch)
- s = f.read().strip()
- f.close()
- return s
-
-
def host_arch():
"""Host architecture. One of arm, ia32 or x64."""
- arch = uname('-m')
- arches = {
- 'arm': 'arm',
- 'x86': 'ia32',
- 'i386': 'ia32',
- 'i686': 'ia32',
- 'x86_64': 'x64',
+
+ # TODO better/configurable way of getting the proper 'cc' command?
+ cc = [ 'cc' ]
+
+ cmd = cc + [ '-dM', '-E', '-' ]
+ p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ p.stdin.write('\n')
+ out = p.communicate()[0]
+
+ out = str(out).split('\n')
+
+ k = {}
+ for line in out:
+ import shlex
+ lst = shlex.split(line)
+ if len(lst) > 2:
+ key = lst[1]
+ val = lst[2]
+ k[key] = val
+
+ matchup = {
+ '__x86_64__' : 'x64',
+ '__i386__' : 'ia32',
+ '__arm__' : 'arm',
}
- if arches.get(arch) == None:
- arch = uname('-p')
+ rtn = 'ia32' # default
+
+ for i in matchup:
+ if i in k and k[i] != '0':
+ rtn = matchup[i]
+ break
- return arches.get(arch, 'ia32')
+ return rtn
def target_arch():

0 comments on commit 19133ca

Please sign in to comment.