[Python-checkins] r45278 - python/trunk/README python/trunk/configure python/trunk/configure.in python/trunk/setup.py
martin.v.loewis
python-checkins at python.org
Tue Apr 11 13:12:48 CEST 2006
Author: martin.v.loewis
Date: Tue Apr 11 13:12:43 2006
New Revision: 45278
Modified:
python/trunk/README
python/trunk/configure
python/trunk/configure.in
python/trunk/setup.py
Log:
Patch #1464444: Add --with-system-ffi.
Modified: python/trunk/README
==============================================================================
--- python/trunk/README (original)
+++ python/trunk/README Tue Apr 11 13:12:43 2006
@@ -1068,6 +1068,9 @@
--with-tsc: Profile using the Pentium timestamping counter (TSC).
+--with-system-ffi: Build the _ctypes extension module using an ffi
+ library installed on the system.
+
Building for multiple architectures (using the VPATH feature)
-------------------------------------------------------------
Modified: python/trunk/configure
==============================================================================
--- python/trunk/configure (original)
+++ python/trunk/configure Tue Apr 11 13:12:43 2006
@@ -1,5 +1,5 @@
#! /bin/sh
-# From configure.in Revision: 43748 .
+# From configure.in Revision: 45264 .
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.59 for python 2.5.
#
@@ -863,6 +863,7 @@
--with-suffix=.exe set executable suffix
--with-pydebug build with Py_DEBUG defined
--with-libs='lib1 ...' link against additional libs
+ --with-system-ffi build _ctypes module using an installed ffi library
--with-signal-module disable/enable signal module
--with-dec-threads use DEC Alpha/OSF1 thread-safe libraries
--with(out)-threads[=DIRECTORY]
@@ -11780,6 +11781,22 @@
echo "${ECHO_T}no" >&6
fi;
+# Check for use of the system libffi library
+echo "$as_me:$LINENO: checking for --with-system-ffi" >&5
+echo $ECHO_N "checking for --with-system-ffi... $ECHO_C" >&6
+
+# Check whether --with-system_ffi or --without-system_ffi was given.
+if test "${with_system_ffi+set}" = set; then
+ withval="$with_system_ffi"
+
+fi;
+
+if test -z "$with_system_ffi"
+then with_system_ffi="no"
+fi
+echo "$as_me:$LINENO: result: $with_system_ffi" >&5
+echo "${ECHO_T}$with_system_ffi" >&6
+
# Determine if signalmodule should be used.
Modified: python/trunk/configure.in
==============================================================================
--- python/trunk/configure.in (original)
+++ python/trunk/configure.in Tue Apr 11 13:12:43 2006
@@ -1604,6 +1604,16 @@
],
[AC_MSG_RESULT(no)])
+# Check for use of the system libffi library
+AC_MSG_CHECKING(for --with-system-ffi)
+AC_ARG_WITH(system_ffi,
+ AC_HELP_STRING(--with-system-ffi, build _ctypes module using an installed ffi library))
+
+if test -z "$with_system_ffi"
+then with_system_ffi="no"
+fi
+AC_MSG_RESULT($with_system_ffi)
+
# Determine if signalmodule should be used.
AC_SUBST(USE_SIGNAL_MODULE)
AC_SUBST(SIGNAL_OBJS)
Modified: python/trunk/setup.py
==============================================================================
--- python/trunk/setup.py (original)
+++ python/trunk/setup.py Tue Apr 11 13:12:43 2006
@@ -973,7 +973,7 @@
exts.append( Extension('dl', ['dlmodule.c']) )
# Thomas Heller's _ctypes module
- self.detect_ctypes()
+ self.detect_ctypes(inc_dirs, lib_dirs)
# Platform-specific libraries
if platform == 'linux2':
@@ -1269,44 +1269,46 @@
# -lGL -lGLU -lXext -lXmu \
def configure_ctypes(self, ext):
- (srcdir,) = sysconfig.get_config_vars('srcdir')
- ffi_builddir = os.path.join(self.build_temp, 'libffi')
- ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules',
- '_ctypes', 'libffi'))
- ffi_configfile = os.path.join(ffi_builddir, 'fficonfig.py')
-
- if self.force or not os.path.exists(ffi_configfile):
- from distutils.dir_util import mkpath
- mkpath(ffi_builddir)
- config_args = []
-
- # Pass empty CFLAGS because we'll just append the resulting CFLAGS
- # to Python's; -g or -O2 is to be avoided.
- cmd = "cd %s && env CFLAGS='' '%s/configure' %s" \
- % (ffi_builddir, ffi_srcdir, " ".join(config_args))
-
- res = os.system(cmd)
- if res or not os.path.exists(ffi_configfile):
- print "Failed to configure _ctypes module"
- return False
-
- fficonfig = {}
- execfile(ffi_configfile, globals(), fficonfig)
- ffi_srcdir = os.path.join(fficonfig['ffi_srcdir'], 'src')
-
- # Add .S (preprocessed assembly) to C compiler source extensions.
- self.compiler.src_extensions.append('.S')
-
- include_dirs = [os.path.join(ffi_builddir, 'include'),
- ffi_builddir, ffi_srcdir]
- extra_compile_args = fficonfig['ffi_cflags'].split()
-
- ext.sources.extend(fficonfig['ffi_sources'])
- ext.include_dirs.extend(include_dirs)
- ext.extra_compile_args.extend(extra_compile_args)
+ if not self.use_system_libffi:
+ (srcdir,) = sysconfig.get_config_vars('srcdir')
+ ffi_builddir = os.path.join(self.build_temp, 'libffi')
+ ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules',
+ '_ctypes', 'libffi'))
+ ffi_configfile = os.path.join(ffi_builddir, 'fficonfig.py')
+
+ if self.force or not os.path.exists(ffi_configfile):
+ from distutils.dir_util import mkpath
+ mkpath(ffi_builddir)
+ config_args = []
+
+ # Pass empty CFLAGS because we'll just append the resulting
+ # CFLAGS to Python's; -g or -O2 is to be avoided.
+ cmd = "cd %s && env CFLAGS='' '%s/configure' %s" \
+ % (ffi_builddir, ffi_srcdir, " ".join(config_args))
+
+ res = os.system(cmd)
+ if res or not os.path.exists(ffi_configfile):
+ print "Failed to configure _ctypes module"
+ return False
+
+ fficonfig = {}
+ execfile(ffi_configfile, globals(), fficonfig)
+ ffi_srcdir = os.path.join(fficonfig['ffi_srcdir'], 'src')
+
+ # Add .S (preprocessed assembly) to C compiler source extensions.
+ self.compiler.src_extensions.append('.S')
+
+ include_dirs = [os.path.join(ffi_builddir, 'include'),
+ ffi_builddir, ffi_srcdir]
+ extra_compile_args = fficonfig['ffi_cflags'].split()
+
+ ext.sources.extend(fficonfig['ffi_sources'])
+ ext.include_dirs.extend(include_dirs)
+ ext.extra_compile_args.extend(extra_compile_args)
return True
- def detect_ctypes(self):
+ def detect_ctypes(self, inc_dirs, lib_dirs):
+ self.use_system_libffi = False
include_dirs = []
extra_compile_args = []
sources = ['_ctypes/_ctypes.c',
@@ -1326,12 +1328,40 @@
ext = Extension('_ctypes',
include_dirs=include_dirs,
extra_compile_args=extra_compile_args,
+ libraries=[],
sources=sources,
depends=depends)
ext_test = Extension('_ctypes_test',
sources=['_ctypes/_ctypes_test.c'])
self.extensions.extend([ext, ext_test])
+ if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"):
+ return
+
+ ffi_inc = find_file('ffi.h', [], inc_dirs)
+ if ffi_inc is not None:
+ ffi_h = ffi_inc[0] + '/ffi.h'
+ fp = open(ffi_h)
+ while 1:
+ line = fp.readline()
+ if not line:
+ ffi_inc = None
+ break
+ if line.startswith('#define LIBFFI_H'):
+ break
+ ffi_lib = None
+ if ffi_inc is not None:
+ for lib_name in ('ffi_convenience', 'ffi_pic', 'ffi'):
+ if (self.compiler.find_library_file(lib_dirs, lib_name)):
+ ffi_lib = lib_name
+ break
+
+ if ffi_inc and ffi_lib:
+ ext.include_dirs.extend(ffi_inc)
+ ext.libraries.append(ffi_lib)
+ self.use_system_libffi = True
+
+
class PyBuildInstall(install):
# Suppress the warning about installation into the lib_dynload
# directory, which is not in sys.path when running Python during
More information about the Python-checkins
mailing list