diff options
author | Matthias Klose <doko@ubuntu.com> | 2009-04-29 17:18:19 (GMT) |
---|---|---|
committer | Matthias Klose <doko@ubuntu.com> | 2009-04-29 17:18:19 (GMT) |
commit | 10cbe4886e796ccb8e38bb4d93265ff50c8a761f (patch) | |
tree | ac4959fe049de03c6b30a884d8348ebf86194f18 | |
parent | 971b1b100b02cf7d79ec2ca5599f916f31925b48 (diff) | |
download | cpython-10cbe4886e796ccb8e38bb4d93265ff50c8a761f.zip cpython-10cbe4886e796ccb8e38bb4d93265ff50c8a761f.tar.gz cpython-10cbe4886e796ccb8e38bb4d93265ff50c8a761f.tar.bz2 |
- Issue #4587: Add configure option --with-dbmliborder=db1:db2:... to specify
the order that backends for the dbm extension are checked.
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | README | 3 | ||||
-rw-r--r-- | configure.in | 20 | ||||
-rw-r--r-- | setup.py | 95 |
4 files changed, 88 insertions, 33 deletions
@@ -814,6 +814,9 @@ Tools/Demos 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). - Issue #5134: Silence compiler warnings when compiling sqlite with VC++. @@ -1068,6 +1068,9 @@ Modules/getpath.o. --with-system-ffi: Build the _ctypes extension module using an ffi library installed on the system. +--with-dbmliborder=db1:db2:...: Specify the order that backends for the + dbm extension are checked. Valid value is a colon separated string + with the backend names `ndbm', `gdbm' and `bdb'. Building for multiple architectures (using the VPATH feature) ------------------------------------------------------------- diff --git a/configure.in b/configure.in index 1cb6cfe..2c6cb52 100644 --- a/configure.in +++ b/configure.in @@ -1918,6 +1918,26 @@ AC_ARG_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), +[ +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 + AC_MSG_RESULT($with_dbmliborder) +fi], +[AC_MSG_ERROR([proper usage is --with-dbmliborder=db1:db2:...]) +]) + # Determine if signalmodule should be used. AC_SUBST(USE_SIGNAL_MODULE) AC_SUBST(SIGNAL_OBJS) @@ -1000,39 +1000,68 @@ class PyBuildExt(build_ext): # The standard Unix dbm module: if platform not in ['cygwin']: - if find_file("ndbm.h", inc_dirs, []) is not None: - # Some systems have -lndbm, others don't - if self.compiler.find_library_file(lib_dirs, 'ndbm'): - ndbm_libs = ['ndbm'] - else: - ndbm_libs = [] - exts.append( Extension('dbm', ['dbmmodule.c'], - define_macros=[('HAVE_NDBM_H',None)], - libraries = ndbm_libs ) ) - elif self.compiler.find_library_file(lib_dirs, 'gdbm'): - gdbm_libs = ['gdbm'] - if self.compiler.find_library_file(lib_dirs, 'gdbm_compat'): - gdbm_libs.append('gdbm_compat') - if find_file("gdbm/ndbm.h", inc_dirs, []) is not None: - exts.append( Extension( - 'dbm', ['dbmmodule.c'], - define_macros=[('HAVE_GDBM_NDBM_H',None)], - libraries = gdbm_libs ) ) - elif find_file("gdbm-ndbm.h", inc_dirs, []) is not None: - exts.append( Extension( - 'dbm', ['dbmmodule.c'], - define_macros=[('HAVE_GDBM_DASH_NDBM_H',None)], - libraries = gdbm_libs ) ) - else: - missing.append('dbm') - elif db_incs is not None: - exts.append( 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)) + config_args = sysconfig.get_config_var("CONFIG_ARGS") + dbm_args = [arg.split('=')[-1] for arg in args.split() + if arg.startswith('--with-dbmliborder=')] + if dbm_args: + dbm_order = "ndbm:gdbm:bdb".split(":") + else: + dbm_order = dbm_args.split(":") + dbmext = None + for cand in dbm_order: + if cand == "ndbm": + if find_file("ndbm.h", inc_dirs, []) is not None: + # Some systems have -lndbm, others don't + if self.compiler.find_library_file(lib_dirs, 'ndbm'): + ndbm_libs = ['ndbm'] + else: + ndbm_libs = [] + print "building dbm using ndbm" + dbmext = Extension('dbm', ['dbmmodule.c'], + define_macros=[ + ('HAVE_NDBM_H',None), + ], + libraries=ndbm_libs) + break + + elif cand == "gdbm": + if self.compiler.find_library_file(lib_dirs, 'gdbm'): + gdbm_libs = ['gdbm'] + if self.compiler.find_library_file(lib_dirs, 'gdbm_compat'): + gdbm_libs.append('gdbm_compat') + 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: missing.append('dbm') |