summaryrefslogtreecommitdiffstats
path: root/setup.py
diff options
context:
space:
mode:
Diffstat (limited to 'setup.py')
-rw-r--r--setup.py94
1 files changed, 63 insertions, 31 deletions
diff --git a/setup.py b/setup.py
index 03994de..ddd5452 100644
--- a/setup.py
+++ b/setup.py
@@ -913,37 +913,69 @@ 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 ) )
- 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 = [arg.strip("'")
+ for arg in sysconfig.get_config_var("CONFIG_ARGS").split()]
+ dbm_args = [arg.split('=')[-1] for arg in config_args
+ if arg.startswith('--with-dbmliborder=')]
+ if dbm_args:
+ dbm_order = dbm_args[-1].split(":")
+ else:
+ dbm_order = "ndbm:gdbm:bdb".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')