Skip to content

Commit f7e0372

Browse files
committed
bpo-45847: Port _gdbm to PY_STDLIB_MOD
Signed-off-by: Christian Heimes <christian@python.org>
1 parent d82f2ca commit f7e0372

File tree

5 files changed

+136
-52
lines changed

5 files changed

+136
-52
lines changed

Modules/Setup.stdlib.in

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@
6666
@MODULE__LZMA_TRUE@_lzma _lzmamodule.c
6767
@MODULE_ZLIB_TRUE@zlib zlibmodule.c
6868

69+
# dbm/gdbm
70+
# dbm needs either libndbm, libgdbm_compat, or libdb 5.x
71+
# gdbm module needs -lgdbm
72+
@MODULE__GDBM_TRUE@_gdbm _gdbmmodule.c
73+
6974
# hashing builtins, can be disabled with --without-builtin-hashlib-hashes
7075
@MODULE__MD5_TRUE@_md5 md5module.c
7176
@MODULE__SHA1_TRUE@_sha1 sha1module.c

configure

Lines changed: 97 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,8 @@ MODULE__SQLITE3_FALSE
654654
MODULE__SQLITE3_TRUE
655655
MODULE_NIS_FALSE
656656
MODULE_NIS_TRUE
657+
MODULE__GDBM_FALSE
658+
MODULE__GDBM_TRUE
657659
MODULE__DECIMAL_FALSE
658660
MODULE__DECIMAL_TRUE
659661
MODULE__BLAKE2_FALSE
@@ -799,6 +801,8 @@ DTRACE_OBJS
799801
DTRACE_HEADERS
800802
DFLAGS
801803
DTRACE
804+
GDBM_LIBS
805+
GDBM_CFLAGS
802806
TCLTK_LIBS
803807
TCLTK_INCLUDES
804808
LIBSQLITE3_LIBS
@@ -1036,6 +1040,8 @@ LIBNSL_CFLAGS
10361040
LIBNSL_LIBS
10371041
LIBSQLITE3_CFLAGS
10381042
LIBSQLITE3_LIBS
1043+
GDBM_CFLAGS
1044+
GDBM_LIBS
10391045
ZLIB_CFLAGS
10401046
ZLIB_LIBS
10411047
BZIP2_CFLAGS
@@ -1822,6 +1828,8 @@ Some influential environment variables:
18221828
C compiler flags for LIBSQLITE3, overriding pkg-config
18231829
LIBSQLITE3_LIBS
18241830
linker flags for LIBSQLITE3, overriding pkg-config
1831+
GDBM_CFLAGS C compiler flags for gdbm
1832+
GDBM_LIBS additional linker flags for gdbm
18251833
ZLIB_CFLAGS C compiler flags for ZLIB, overriding pkg-config
18261834
ZLIB_LIBS linker flags for ZLIB, overriding pkg-config
18271835
BZIP2_CFLAGS
@@ -11644,17 +11652,25 @@ else
1164411652
TCLTK_LIBS="$with_tcltk_libs"
1164511653
fi
1164611654

11647-
# check for _gdbmmodulec dependencies
11648-
for ac_header in gdbm.h
11655+
11656+
11657+
save_CFLAGS=$CFLAGS
11658+
save_CPPFLAGS=$CPPFLAGS
11659+
save_LDFLAGS=$LDFLAGS
11660+
save_LIBS=$LIBS
11661+
11662+
11663+
CPPFLAGS="$GDBM_CFLAGS $CFLAGS"
11664+
LDFLAGS="$GDBM_LIBS $LDFLAGS"
11665+
for ac_header in gdbm.h
1164911666
do :
1165011667
ac_fn_c_check_header_mongrel "$LINENO" "gdbm.h" "ac_cv_header_gdbm_h" "$ac_includes_default"
1165111668
if test "x$ac_cv_header_gdbm_h" = xyes; then :
1165211669
cat >>confdefs.h <<_ACEOF
1165311670
#define HAVE_GDBM_H 1
1165411671
_ACEOF
1165511672

11656-
LIBS_SAVE=$LIBS
11657-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdbm_open in -lgdbm" >&5
11673+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdbm_open in -lgdbm" >&5
1165811674
$as_echo_n "checking for gdbm_open in -lgdbm... " >&6; }
1165911675
if ${ac_cv_lib_gdbm_gdbm_open+:} false; then :
1166011676
$as_echo_n "(cached) " >&6
@@ -11691,21 +11707,29 @@ fi
1169111707
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gdbm_gdbm_open" >&5
1169211708
$as_echo "$ac_cv_lib_gdbm_gdbm_open" >&6; }
1169311709
if test "x$ac_cv_lib_gdbm_gdbm_open" = xyes; then :
11694-
cat >>confdefs.h <<_ACEOF
11695-
#define HAVE_LIBGDBM 1
11696-
_ACEOF
1169711710

11698-
LIBS="-lgdbm $LIBS"
11711+
have_gdbm=yes
11712+
GDBM_LIBS="$GDBM_LIBS -lgdbm"
1169911713

11714+
else
11715+
have_gdbm=no
1170011716
fi
1170111717

11702-
LIBS=$LIBS_SAVE
1170311718

11719+
else
11720+
have_gdbm=no
1170411721
fi
1170511722

1170611723
done
1170711724

1170811725

11726+
CFLAGS=$save_CFLAGS
11727+
CPPFLAGS=$save_CPPFLAGS
11728+
LDFLAGS=$save_LDFLAGS
11729+
LIBS=$save_LIBS
11730+
11731+
11732+
1170911733
# check for _dbmmodule.c dependencies
1171011734
for ac_header in ndbm.h
1171111735
do :
@@ -11985,22 +12009,33 @@ $as_echo_n "checking for --with-dbmliborder... " >&6; }
1198512009
# Check whether --with-dbmliborder was given.
1198612010
if test "${with_dbmliborder+set}" = set; then :
1198712011
withval=$with_dbmliborder;
11988-
if test x$with_dbmliborder = xyes
11989-
then
11990-
as_fn_error $? "proper usage is --with-dbmliborder=db1:db2:..." "$LINENO" 5
1199112012
else
11992-
as_save_IFS=$IFS
11993-
IFS=:
11994-
for db in $with_dbmliborder; do
11995-
if test x$db != xndbm && test x$db != xgdbm && test x$db != xbdb
11996-
then
11997-
as_fn_error $? "proper usage is --with-dbmliborder=db1:db2:..." "$LINENO" 5
11998-
fi
11999-
done
12000-
IFS=$as_save_IFS
12001-
fi
12013+
with_dbmliborder=ndbm:gdbm:bdb
1200212014
fi
1200312015

12016+
12017+
have_gdbm_dbmliborder=no
12018+
as_save_IFS=$IFS
12019+
IFS=:
12020+
for db in $with_dbmliborder; do
12021+
case $db in #(
12022+
ndbm) :
12023+
;; #(
12024+
gdbm) :
12025+
have_gdbm_dbmliborder=yes ;; #(
12026+
bdb) :
12027+
;; #(
12028+
*) :
12029+
with_dbmliborder=error
12030+
;;
12031+
esac
12032+
done
12033+
IFS=$as_save_IFS
12034+
if test "x$with_dbmliborder" = xerror; then :
12035+
12036+
as_fn_error $? "proper usage is --with-dbmliborder=db1:db2:... (ndbm:gdbm:bdb)" "$LINENO" 5
12037+
12038+
fi
1200412039
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_dbmliborder" >&5
1200512040
$as_echo "$with_dbmliborder" >&6; }
1200612041

@@ -21406,6 +21441,42 @@ fi
2140621441
$as_echo "$py_cv_module__decimal" >&6; }
2140721442

2140821443

21444+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdlib extension module _gdbm" >&5
21445+
$as_echo_n "checking for stdlib extension module _gdbm... " >&6; }
21446+
case $py_stdlib_not_available in #(
21447+
*_gdbm*) :
21448+
py_cv_module__gdbm=n/a ;; #(
21449+
*) :
21450+
if test "$have_gdbm_dbmliborder" = yes; then :
21451+
if test "$have_gdbm" = yes; then :
21452+
py_cv_module__gdbm=yes
21453+
else
21454+
py_cv_module__gdbm=missing
21455+
fi
21456+
else
21457+
py_cv_module__gdbm=disabled
21458+
fi
21459+
;;
21460+
esac
21461+
as_fn_append MODULE_BLOCK "MODULE__GDBM=$py_cv_module__gdbm$as_nl"
21462+
if test "x$py_cv_module__gdbm" = xyes; then :
21463+
21464+
as_fn_append MODULE_BLOCK "MODULE__GDBM_CFLAGS=$GDBM_CFLAGS$as_nl"
21465+
as_fn_append MODULE_BLOCK "MODULE__GDBM_LDFLAGS=$GDBM_LIBS$as_nl"
21466+
21467+
fi
21468+
if test "$py_cv_module__gdbm" = yes; then
21469+
MODULE__GDBM_TRUE=
21470+
MODULE__GDBM_FALSE='#'
21471+
else
21472+
MODULE__GDBM_TRUE='#'
21473+
MODULE__GDBM_FALSE=
21474+
fi
21475+
21476+
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $py_cv_module__gdbm" >&5
21477+
$as_echo "$py_cv_module__gdbm" >&6; }
21478+
21479+
2140921480
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdlib extension module nis" >&5
2141021481
$as_echo_n "checking for stdlib extension module nis... " >&6; }
2141121482
case $py_stdlib_not_available in #(
@@ -22254,6 +22325,10 @@ if test -z "${MODULE__DECIMAL_TRUE}" && test -z "${MODULE__DECIMAL_FALSE}"; then
2225422325
as_fn_error $? "conditional \"MODULE__DECIMAL\" was never defined.
2225522326
Usually this means the macro was only invoked conditionally." "$LINENO" 5
2225622327
fi
22328+
if test -z "${MODULE__GDBM_TRUE}" && test -z "${MODULE__GDBM_FALSE}"; then
22329+
as_fn_error $? "conditional \"MODULE__GDBM\" was never defined.
22330+
Usually this means the macro was only invoked conditionally." "$LINENO" 5
22331+
fi
2225722332
if test -z "${MODULE_NIS_TRUE}" && test -z "${MODULE_NIS_FALSE}"; then
2225822333
as_fn_error $? "conditional \"MODULE_NIS\" was never defined.
2225922334
Usually this means the macro was only invoked conditionally." "$LINENO" 5

configure.ac

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3294,11 +3294,19 @@ else
32943294
TCLTK_LIBS="$with_tcltk_libs"
32953295
fi
32963296

3297-
# check for _gdbmmodulec dependencies
3298-
AC_CHECK_HEADERS([gdbm.h], [
3299-
LIBS_SAVE=$LIBS
3300-
AC_CHECK_LIB([gdbm], [gdbm_open])
3301-
LIBS=$LIBS_SAVE
3297+
dnl check for _gdbmmodule dependencies
3298+
dnl NOTE: gdbm does not provide a pkgconf file.
3299+
AC_ARG_VAR([GDBM_CFLAGS], [C compiler flags for gdbm])
3300+
AC_ARG_VAR([GDBM_LIBS], [additional linker flags for gdbm])
3301+
WITH_SAVE_ENV([
3302+
CPPFLAGS="$GDBM_CFLAGS $CFLAGS"
3303+
LDFLAGS="$GDBM_LIBS $LDFLAGS"
3304+
AC_CHECK_HEADERS([gdbm.h], [
3305+
AC_CHECK_LIB([gdbm], [gdbm_open], [
3306+
have_gdbm=yes
3307+
GDBM_LIBS="$GDBM_LIBS -lgdbm"
3308+
], [have_gdbm=no])
3309+
], [have_gdbm=no])
33023310
])
33033311

33043312
# check for _dbmmodule.c dependencies
@@ -3366,21 +3374,23 @@ AC_CHECK_HEADERS([db.h], [
33663374
AC_MSG_CHECKING(for --with-dbmliborder)
33673375
AC_ARG_WITH(dbmliborder,
33683376
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'.]),
3369-
[
3370-
if test x$with_dbmliborder = xyes
3371-
then
3372-
AC_MSG_ERROR([proper usage is --with-dbmliborder=db1:db2:...])
3373-
else
3374-
as_save_IFS=$IFS
3375-
IFS=:
3376-
for db in $with_dbmliborder; do
3377-
if test x$db != xndbm && test x$db != xgdbm && test x$db != xbdb
3378-
then
3379-
AC_MSG_ERROR([proper usage is --with-dbmliborder=db1:db2:...])
3380-
fi
3381-
done
3382-
IFS=$as_save_IFS
3383-
fi])
3377+
[], [with_dbmliborder=ndbm:gdbm:bdb])
3378+
3379+
have_gdbm_dbmliborder=no
3380+
as_save_IFS=$IFS
3381+
IFS=:
3382+
for db in $with_dbmliborder; do
3383+
AS_CASE([$db],
3384+
[ndbm], [],
3385+
[gdbm], [have_gdbm_dbmliborder=yes],
3386+
[bdb], [],
3387+
[with_dbmliborder=error]
3388+
)
3389+
done
3390+
IFS=$as_save_IFS
3391+
AS_VAR_IF([with_dbmliborder], [error], [
3392+
AC_MSG_ERROR([proper usage is --with-dbmliborder=db1:db2:... (ndbm:gdbm:bdb)])
3393+
])
33843394
AC_MSG_RESULT($with_dbmliborder)
33853395

33863396
# Templates for things AC_DEFINEd more than once.
@@ -6193,6 +6203,9 @@ PY_STDLIB_MOD([_sha3], [test "$with_builtin_sha3" = yes])
61936203
PY_STDLIB_MOD([_blake2], [test "$with_builtin_blake2" = yes])
61946204

61956205
PY_STDLIB_MOD([_decimal], [], [], [$LIBMPDEC_CFLAGS], [$LIBMPDEC_LDFLAGS])
6206+
PY_STDLIB_MOD([_gdbm],
6207+
[test "$have_gdbm_dbmliborder" = yes], [test "$have_gdbm" = yes],
6208+
[$GDBM_CFLAGS], [$GDBM_LIBS])
61966209
PY_STDLIB_MOD([nis],
61976210
[], [test "$have_nis" = yes -a "$ac_cv_header_rpc_rpc_h" = yes],
61986211
[$LIBNSL_CFLAGS], [$LIBNSL_LIBS])

pyconfig.h.in

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -604,9 +604,6 @@
604604
/* Define to 1 if you have the `dld' library (-ldld). */
605605
#undef HAVE_LIBDLD
606606

607-
/* Define to 1 if you have the `gdbm' library (-lgdbm). */
608-
#undef HAVE_LIBGDBM
609-
610607
/* Define to 1 if you have the `gdbm_compat' library (-lgdbm_compat). */
611608
#undef HAVE_LIBGDBM_COMPAT
612609

setup.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1269,11 +1269,9 @@ def detect_dbm_gdbm(self):
12691269

12701270
# libdb, gdbm and ndbm headers and libraries
12711271
have_ndbm_h = sysconfig.get_config_var("HAVE_NDBM_H")
1272-
have_gdbm_h = sysconfig.get_config_var("HAVE_GDBM_H")
12731272
have_gdbm_ndbm_h = sysconfig.get_config_var("HAVE_GDBM_NDBM_H")
12741273
have_gdbm_dash_ndbm_h = sysconfig.get_config_var("HAVE_GDBM_DASH_NDBM_H")
12751274
have_libndbm = sysconfig.get_config_var("HAVE_LIBNDBM")
1276-
have_libgdbm = sysconfig.get_config_var("HAVE_LIBGDBM")
12771275
have_libgdbm_compat = sysconfig.get_config_var("HAVE_LIBGDBM_COMPAT")
12781276
have_libdb = sysconfig.get_config_var("HAVE_LIBDB")
12791277

@@ -1331,11 +1329,7 @@ def detect_dbm_gdbm(self):
13311329
self.missing.append('_dbm')
13321330

13331331
# Anthony Baxter's gdbm module. GNU dbm(3) will require -lgdbm:
1334-
if 'gdbm' in dbm_order and have_libgdbm:
1335-
self.add(Extension('_gdbm', ['_gdbmmodule.c'],
1336-
libraries=['gdbm']))
1337-
else:
1338-
self.missing.append('_gdbm')
1332+
self.addext(Extension('_gdbm', ['_gdbmmodule.c']))
13391333

13401334
def detect_sqlite(self):
13411335
sources = [

0 commit comments

Comments
 (0)