mirror of
https://github.com/python/cpython.git
synced 2025-07-24 03:35:53 +00:00
gh-89452: Prefer gdbm-compat over ndbm (#92208)
This makes macOS gdbm provided by Homebrew not segfault through correct selection of the linked library (-lgdbm_compat) *AND* the correct ndbm-style header (gdbm-ndbm.h instead of the invalid ndbm.h).
This commit is contained in:
parent
feca9bbd1f
commit
6c25bf07e8
5 changed files with 11 additions and 9 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
gdbm-compat is now preferred over ndbm if both are available on the system.
|
||||||
|
This allows avoiding the problematic ndbm.h on macOS.
|
|
@ -12,10 +12,7 @@
|
||||||
/* Some Linux systems install gdbm/ndbm.h, but not ndbm.h. This supports
|
/* Some Linux systems install gdbm/ndbm.h, but not ndbm.h. This supports
|
||||||
* whichever configure was able to locate.
|
* whichever configure was able to locate.
|
||||||
*/
|
*/
|
||||||
#if defined(USE_NDBM)
|
#if defined(USE_GDBM_COMPAT)
|
||||||
#include <ndbm.h>
|
|
||||||
static const char which_dbm[] = "GNU gdbm"; /* EMX port of GDBM */
|
|
||||||
#elif defined(USE_GDBM_COMPAT)
|
|
||||||
#ifdef HAVE_GDBM_NDBM_H
|
#ifdef HAVE_GDBM_NDBM_H
|
||||||
#include <gdbm/ndbm.h>
|
#include <gdbm/ndbm.h>
|
||||||
#elif HAVE_GDBM_DASH_NDBM_H
|
#elif HAVE_GDBM_DASH_NDBM_H
|
||||||
|
@ -24,6 +21,9 @@
|
||||||
#error "No gdbm/ndbm.h or gdbm-ndbm.h available"
|
#error "No gdbm/ndbm.h or gdbm-ndbm.h available"
|
||||||
#endif
|
#endif
|
||||||
static const char which_dbm[] = "GNU gdbm";
|
static const char which_dbm[] = "GNU gdbm";
|
||||||
|
#elif defined(USE_NDBM)
|
||||||
|
#include <ndbm.h>
|
||||||
|
static const char which_dbm[] = "GNU gdbm";
|
||||||
#elif defined(USE_BERKDB)
|
#elif defined(USE_BERKDB)
|
||||||
#ifndef DB_DBM_HSEARCH
|
#ifndef DB_DBM_HSEARCH
|
||||||
#define DB_DBM_HSEARCH 1
|
#define DB_DBM_HSEARCH 1
|
||||||
|
|
4
configure
generated
vendored
4
configure
generated
vendored
|
@ -13726,7 +13726,7 @@ $as_echo_n "checking for --with-dbmliborder... " >&6; }
|
||||||
if test "${with_dbmliborder+set}" = set; then :
|
if test "${with_dbmliborder+set}" = set; then :
|
||||||
withval=$with_dbmliborder;
|
withval=$with_dbmliborder;
|
||||||
else
|
else
|
||||||
with_dbmliborder=ndbm:gdbm:bdb
|
with_dbmliborder=gdbm:ndbm:bdb
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
@ -13749,7 +13749,7 @@ done
|
||||||
IFS=$as_save_IFS
|
IFS=$as_save_IFS
|
||||||
if test "x$with_dbmliborder" = xerror; then :
|
if test "x$with_dbmliborder" = xerror; then :
|
||||||
|
|
||||||
as_fn_error $? "proper usage is --with-dbmliborder=db1:db2:... (ndbm:gdbm:bdb)" "$LINENO" 5
|
as_fn_error $? "proper usage is --with-dbmliborder=db1:db2:... (gdbm:ndbm:bdb)" "$LINENO" 5
|
||||||
|
|
||||||
fi
|
fi
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_dbmliborder" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_dbmliborder" >&5
|
||||||
|
|
|
@ -3850,7 +3850,7 @@ AC_CHECK_HEADERS([db.h], [
|
||||||
AC_MSG_CHECKING(for --with-dbmliborder)
|
AC_MSG_CHECKING(for --with-dbmliborder)
|
||||||
AC_ARG_WITH(dbmliborder,
|
AC_ARG_WITH(dbmliborder,
|
||||||
AS_HELP_STRING([--with-dbmliborder=db1:db2:...], [override order to check db backends for dbm; a valid value is a colon separated string with the backend names `ndbm', `gdbm' and `bdb'.]),
|
AS_HELP_STRING([--with-dbmliborder=db1:db2:...], [override order to check db backends for dbm; a valid value is a colon separated string with the backend names `ndbm', `gdbm' and `bdb'.]),
|
||||||
[], [with_dbmliborder=ndbm:gdbm:bdb])
|
[], [with_dbmliborder=gdbm:ndbm:bdb])
|
||||||
|
|
||||||
have_gdbm_dbmliborder=no
|
have_gdbm_dbmliborder=no
|
||||||
as_save_IFS=$IFS
|
as_save_IFS=$IFS
|
||||||
|
@ -3865,7 +3865,7 @@ for db in $with_dbmliborder; do
|
||||||
done
|
done
|
||||||
IFS=$as_save_IFS
|
IFS=$as_save_IFS
|
||||||
AS_VAR_IF([with_dbmliborder], [error], [
|
AS_VAR_IF([with_dbmliborder], [error], [
|
||||||
AC_MSG_ERROR([proper usage is --with-dbmliborder=db1:db2:... (ndbm:gdbm:bdb)])
|
AC_MSG_ERROR([proper usage is --with-dbmliborder=db1:db2:... (gdbm:ndbm:bdb)])
|
||||||
])
|
])
|
||||||
AC_MSG_RESULT($with_dbmliborder)
|
AC_MSG_RESULT($with_dbmliborder)
|
||||||
|
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -1207,7 +1207,7 @@ class PyBuildExt(build_ext):
|
||||||
if dbm_args:
|
if dbm_args:
|
||||||
dbm_order = [arg.split('=')[-1] for arg in dbm_args][-1].split(":")
|
dbm_order = [arg.split('=')[-1] for arg in dbm_args][-1].split(":")
|
||||||
else:
|
else:
|
||||||
dbm_order = "ndbm:gdbm:bdb".split(":")
|
dbm_order = "gdbm:ndbm:bdb".split(":")
|
||||||
dbmext = None
|
dbmext = None
|
||||||
for cand in dbm_order:
|
for cand in dbm_order:
|
||||||
if cand == "ndbm":
|
if cand == "ndbm":
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue