diff options
author | Ćukasz Langa <lukasz@langa.pl> | 2022-05-03 16:27:38 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-03 16:27:38 (GMT) |
commit | 6c25bf07e86b6d8d5e50488835f70539f382d7e0 (patch) | |
tree | 1ba0b23ccfc45a397eb510de520995d080fbef1e | |
parent | feca9bbd1f6489f2b6d2783bfc22fdb96e45b69f (diff) | |
download | cpython-6c25bf07e86b6d8d5e50488835f70539f382d7e0.zip cpython-6c25bf07e86b6d8d5e50488835f70539f382d7e0.tar.gz cpython-6c25bf07e86b6d8d5e50488835f70539f382d7e0.tar.bz2 |
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).
-rw-r--r-- | Misc/NEWS.d/next/Build/2022-05-03-03-36-47.gh-issue-89452.NIY0fF.rst | 2 | ||||
-rw-r--r-- | Modules/_dbmmodule.c | 8 | ||||
-rwxr-xr-x | configure | 4 | ||||
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | setup.py | 2 |
5 files changed, 11 insertions, 9 deletions
diff --git a/Misc/NEWS.d/next/Build/2022-05-03-03-36-47.gh-issue-89452.NIY0fF.rst b/Misc/NEWS.d/next/Build/2022-05-03-03-36-47.gh-issue-89452.NIY0fF.rst new file mode 100644 index 0000000..dd4954d --- /dev/null +++ b/Misc/NEWS.d/next/Build/2022-05-03-03-36-47.gh-issue-89452.NIY0fF.rst @@ -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. diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c index de8b230..5913b03 100644 --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -12,10 +12,7 @@ /* Some Linux systems install gdbm/ndbm.h, but not ndbm.h. This supports * whichever configure was able to locate. */ -#if defined(USE_NDBM) - #include <ndbm.h> - static const char which_dbm[] = "GNU gdbm"; /* EMX port of GDBM */ -#elif defined(USE_GDBM_COMPAT) +#if defined(USE_GDBM_COMPAT) #ifdef HAVE_GDBM_NDBM_H #include <gdbm/ndbm.h> #elif HAVE_GDBM_DASH_NDBM_H @@ -24,6 +21,9 @@ #error "No gdbm/ndbm.h or gdbm-ndbm.h available" #endif 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) #ifndef DB_DBM_HSEARCH #define DB_DBM_HSEARCH 1 @@ -13726,7 +13726,7 @@ $as_echo_n "checking for --with-dbmliborder... " >&6; } if test "${with_dbmliborder+set}" = set; then : withval=$with_dbmliborder; else - with_dbmliborder=ndbm:gdbm:bdb + with_dbmliborder=gdbm:ndbm:bdb fi @@ -13749,7 +13749,7 @@ done IFS=$as_save_IFS 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_dbmliborder" >&5 diff --git a/configure.ac b/configure.ac index 62da321..8c0711d 100644 --- a/configure.ac +++ b/configure.ac @@ -3850,7 +3850,7 @@ AC_CHECK_HEADERS([db.h], [ AC_MSG_CHECKING(for --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'.]), -[], [with_dbmliborder=ndbm:gdbm:bdb]) +[], [with_dbmliborder=gdbm:ndbm:bdb]) have_gdbm_dbmliborder=no as_save_IFS=$IFS @@ -3865,7 +3865,7 @@ for db in $with_dbmliborder; do done IFS=$as_save_IFS 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) @@ -1207,7 +1207,7 @@ class PyBuildExt(build_ext): if dbm_args: dbm_order = [arg.split('=')[-1] for arg in dbm_args][-1].split(":") else: - dbm_order = "ndbm:gdbm:bdb".split(":") + dbm_order = "gdbm:ndbm:bdb".split(":") dbmext = None for cand in dbm_order: if cand == "ndbm": |