summaryrefslogtreecommitdiff
path: root/configure
diff options
context:
space:
mode:
authorNathan Rajlich <nathan@tootallnate.net>2012-02-20 12:27:07 -0800
committerBen Noordhuis <info@bnoordhuis.nl>2012-02-20 22:14:23 +0100
commit19133cac029c6641e94f7f2e7fbce92c859e3846 (patch)
tree261e07edd639c0b74dcd70b7b698671be24ce82b /configure
parentda908364a8ece7186f408eb1307ecf54ac2a76a7 (diff)
downloadnodejs-19133cac029c6641e94f7f2e7fbce92c859e3846.tar.gz
nodejs-19133cac029c6641e94f7f2e7fbce92c859e3846.tar.bz2
nodejs-19133cac029c6641e94f7f2e7fbce92c859e3846.zip
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-xconfigure48
1 files changed, 31 insertions, 17 deletions
diff --git a/configure b/configure
index da00b30ff..b18e476f1 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():