Use correct mechanism to determine 32/64 bits Python setup.py builds certain extensions (dl and imageop) only on 32 bits architecture. However, to test whether the architecture is 32 bits or not, it was looking at the sys.maxint value of the host Python interpreter... which might run on a 64 bits architecture even though the target is 32 bits, or which might run on a 32 bits architecture even though the target is 64 bits. Therefore, we introduce a is_arch_64_bits() function, which looks at the pyconfig.h file generated by ./configure for the value of SIZEOF_LONG to determine if the architecture is 32 or 64 bits. Signed-off-by: Thomas Petazzoni --- setup.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) Index: Python-2.7.2/setup.py =================================================================== --- Python-2.7.2.orig/setup.py +++ Python-2.7.2/setup.py @@ -29,6 +29,14 @@ except KeyError: disabled_module_list = list() +def is_arch_64_bits(): + data = open('pyconfig.h').read() + m = re.search(r"#s*define\s+SIZEOF_LONG\s+4\s*", data) + if m is None: + return True + else: + return False + def add_dir_to_list(dirlist, dir): """Add the directory 'dir' to the list 'dirlist' (at the front) if 1) 'dir' is not already in 'dirlist' @@ -628,7 +636,7 @@ exts.append( Extension('audioop', ['audioop.c']) ) # Disabled on 64-bit platforms - if sys.maxint != 9223372036854775807L: + if not is_arch_64_bits(): # Operations on images exts.append( Extension('imageop', ['imageop.c']) ) else: @@ -1444,7 +1452,7 @@ missing.append('_codecs_%s' % loc) # Dynamic loading module - if sys.maxint == 0x7fffffff: + if not is_arch_64_bits(): # This requires sizeof(int) == sizeof(long) == sizeof(char*) dl_inc = find_file('dlfcn.h', [], inc_dirs) if (dl_inc is not None) and (platform not in ['atheos']):