- Issue #4587: Add configure option --with-dbmliborder=db1:db2:... to specify

the order that backends for the dbm extension are checked.
This commit is contained in:
Matthias Klose 2009-04-30 08:06:49 +00:00
parent 58a42244cf
commit 55708cce31
4 changed files with 116 additions and 32 deletions

View File

@ -880,6 +880,9 @@ Tools/Demos
Build Build
----- -----
- Issue #4587: Add configure option --with-dbmliborder=db1:db2:... to specify
the order that backends for the dbm extension are checked.
- Link the shared python library with $(MODLIBS). - Link the shared python library with $(MODLIBS).
- Issue #5134: Silence compiler warnings when compiling sqlite with VC++. - Issue #5134: Silence compiler warnings when compiling sqlite with VC++.

33
configure vendored
View File

@ -1,5 +1,5 @@
#! /bin/sh #! /bin/sh
# From configure.in Revision: 71723 . # From configure.in Revision: 71731 .
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.61 for python 3.1. # Generated by GNU Autoconf 2.61 for python 3.1.
# #
@ -1340,6 +1340,10 @@ Optional Packages:
--with-pydebug build with Py_DEBUG defined --with-pydebug build with Py_DEBUG defined
--with-libs='lib1 ...' link against additional libs --with-libs='lib1 ...' link against additional libs
--with-system-ffi build _ctypes module using an installed ffi library --with-system-ffi build _ctypes module using an installed ffi library
--with-dbmliborder=db1:db2:...
order to check db backends for dbm. Valid value is a
colon separated string with the backend names
`ndbm', `gdbm' and `bdb'.
--with-signal-module disable/enable signal module --with-signal-module disable/enable signal module
--with-dec-threads use DEC Alpha/OSF1 thread-safe libraries --with-dec-threads use DEC Alpha/OSF1 thread-safe libraries
--with(out)-threads[=DIRECTORY] --with(out)-threads[=DIRECTORY]
@ -14087,6 +14091,33 @@ fi
{ echo "$as_me:$LINENO: result: $with_system_ffi" >&5 { echo "$as_me:$LINENO: result: $with_system_ffi" >&5
echo "${ECHO_T}$with_system_ffi" >&6; } echo "${ECHO_T}$with_system_ffi" >&6; }
# Check for --with-dbmliborder
{ echo "$as_me:$LINENO: checking for --with-dbmliborder" >&5
echo $ECHO_N "checking for --with-dbmliborder... $ECHO_C" >&6; }
# Check whether --with-dbmliborder was given.
if test "${with_dbmliborder+set}" = set; then
withval=$with_dbmliborder;
if test x$with_dbmliborder = xyes
then
{ { echo "$as_me:$LINENO: error: proper usage is --with-dbmliborder=db1:db2:..." >&5
echo "$as_me: error: proper usage is --with-dbmliborder=db1:db2:..." >&2;}
{ (exit 1); exit 1; }; }
else
for db in `echo $with_dbmliborder | sed 's/:/ /g'`; do
if test x$db != xndbm && test x$db != xgdbm && test x$db != xbdb
then
{ { echo "$as_me:$LINENO: error: proper usage is --with-dbmliborder=db1:db2:..." >&5
echo "$as_me: error: proper usage is --with-dbmliborder=db1:db2:..." >&2;}
{ (exit 1); exit 1; }; }
fi
done
fi
fi
{ echo "$as_me:$LINENO: result: $with_dbmliborder" >&5
echo "${ECHO_T}$with_dbmliborder" >&6; }
# Determine if signalmodule should be used. # Determine if signalmodule should be used.

View File

@ -1837,6 +1837,24 @@ AC_ARG_WITH(system_ffi,
AC_MSG_RESULT($with_system_ffi) AC_MSG_RESULT($with_system_ffi)
# Check for --with-dbmliborder
AC_MSG_CHECKING(for --with-dbmliborder)
AC_ARG_WITH(dbmliborder,
AC_HELP_STRING([--with-dbmliborder=db1:db2:...], [order to check db backends for dbm. Valid value is a colon separated string with the backend names `ndbm', `gdbm' and `bdb'.]),
[
if test x$with_dbmliborder = xyes
then
AC_MSG_ERROR([proper usage is --with-dbmliborder=db1:db2:...])
else
for db in `echo $with_dbmliborder | sed 's/:/ /g'`; do
if test x$db != xndbm && test x$db != xgdbm && test x$db != xbdb
then
AC_MSG_ERROR([proper usage is --with-dbmliborder=db1:db2:...])
fi
done
fi])
AC_MSG_RESULT($with_dbmliborder)
# Determine if signalmodule should be used. # Determine if signalmodule should be used.
AC_SUBST(USE_SIGNAL_MODULE) AC_SUBST(USE_SIGNAL_MODULE)
AC_SUBST(SIGNAL_OBJS) AC_SUBST(SIGNAL_OBJS)

View File

@ -913,37 +913,69 @@ class PyBuildExt(build_ext):
# The standard Unix dbm module: # The standard Unix dbm module:
if platform not in ['cygwin']: if platform not in ['cygwin']:
if find_file("ndbm.h", inc_dirs, []) is not None: config_args = [arg.strip("'")
# Some systems have -lndbm, others don't for arg in sysconfig.get_config_var("CONFIG_ARGS").split()]
if self.compiler.find_library_file(lib_dirs, 'ndbm'): dbm_args = [arg.split('=')[-1] for arg in config_args
ndbm_libs = ['ndbm'] if arg.startswith('--with-dbmliborder=')]
else: if dbm_args:
ndbm_libs = [] dbm_order = dbm_args[-1].split(":")
exts.append( Extension('_dbm', ['_dbmmodule.c'], else:
define_macros=[('HAVE_NDBM_H',None)], dbm_order = "ndbm:gdbm:bdb".split(":")
libraries = ndbm_libs ) ) dbmext = None
elif self.compiler.find_library_file(lib_dirs, 'gdbm'): for cand in dbm_order:
gdbm_libs = ['gdbm'] if cand == "ndbm":
if self.compiler.find_library_file(lib_dirs, 'gdbm_compat'): if find_file("ndbm.h", inc_dirs, []) is not None:
gdbm_libs.append('gdbm_compat') # Some systems have -lndbm, others don't
if find_file("gdbm/ndbm.h", inc_dirs, []) is not None: if self.compiler.find_library_file(lib_dirs, 'ndbm'):
exts.append( Extension( ndbm_libs = ['ndbm']
'_dbm', ['_dbmmodule.c'], else:
define_macros=[('HAVE_GDBM_NDBM_H',None)], ndbm_libs = []
libraries = gdbm_libs ) ) print("building dbm using ndbm")
elif find_file("gdbm-ndbm.h", inc_dirs, []) is not None: dbmext = Extension('_dbm', ['_dbmmodule.c'],
exts.append( Extension( define_macros=[
'_dbm', ['_dbmmodule.c'], ('HAVE_NDBM_H',None),
define_macros=[('HAVE_GDBM_DASH_NDBM_H',None)], ],
libraries = gdbm_libs ) ) libraries=ndbm_libs)
elif db_incs is not None: break
exts.append( Extension('_dbm', ['_dbmmodule.c'],
library_dirs=dblib_dir, elif cand == "gdbm":
runtime_library_dirs=dblib_dir, if self.compiler.find_library_file(lib_dirs, 'gdbm'):
include_dirs=db_incs, gdbm_libs = ['gdbm']
define_macros=[('HAVE_BERKDB_H',None), if self.compiler.find_library_file(lib_dirs, 'gdbm_compat'):
('DB_DBM_HSEARCH',None)], gdbm_libs.append('gdbm_compat')
libraries=dblibs)) if find_file("gdbm/ndbm.h", inc_dirs, []) is not None:
print("building dbm using gdbm")
dbmext = Extension(
'_dbm', ['_dbmmodule.c'],
define_macros=[
('HAVE_GDBM_NDBM_H', None),
],
libraries = gdbm_libs)
break
if find_file("gdbm-ndbm.h", inc_dirs, []) is not None:
print("building dbm using gdbm")
dbmext = Extension(
'_dbm', ['_dbmmodule.c'],
define_macros=[
('HAVE_GDBM_DASH_NDBM_H', None),
],
libraries = gdbm_libs)
break
elif cand == "bdb":
if db_incs is not None:
print("building dbm using bdb")
dbmext = Extension('_dbm', ['_dbmmodule.c'],
library_dirs=dblib_dir,
runtime_library_dirs=dblib_dir,
include_dirs=db_incs,
define_macros=[
('HAVE_BERKDB_H', None),
('DB_DBM_HSEARCH', None),
],
libraries=dblibs)
break
if dbmext is not None:
exts.append(dbmext)
else: else:
missing.append('_dbm') missing.append('_dbm')