diff options
author | Nathan Rajlich <nathan@tootallnate.net> | 2012-02-21 00:27:07 +0400 |
---|---|---|
committer | Ben Noordhuis <info@bnoordhuis.nl> | 2012-02-21 01:14:23 +0400 |
commit | 19133cac029c6641e94f7f2e7fbce92c859e3846 (patch) | |
tree | 261e07edd639c0b74dcd70b7b698671be24ce82b /configure | |
parent | da908364a8ece7186f408eb1307ecf54ac2a76a7 (diff) |
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.
Diffstat (limited to 'configure')
-rwxr-xr-x | configure | 48 |
1 files changed, 31 insertions, 17 deletions
diff --git a/configure b/configure index da00b30ffd1..b18e476f177 100755 --- a/configure +++ b/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(): |