[Rpm-maint] [PATCH] RFC: Allow for disabling Berkeley DB support
Darren Hart (VMware)
dvhart at infradead.org
Thu Jun 22 21:20:55 UTC 2017
Introduce a --disable-bdb configuration option which disables the use of
Berkeley DB entirely. Update the various autotools to ensure that at
least one of BDB or NDB is enabled. Existing configuration options
continue as before. Minor updates to dbi.h and dbi.c to handle bdb being
optional. Add a little extra paranoia to dbi.c which will error out of
the build if neither BDB nor NDB are enabled (which should not be
possible to configure).
Signed-off-by: Darren Hart (VMware) <dvhart at infradead.org>
---
configure.ac | 22 ++++++++++++++++------
lib/Makefile.am | 7 ++++++-
lib/backend/dbi.c | 10 +++++++++-
lib/backend/dbi.h | 2 ++
4 files changed, 33 insertions(+), 8 deletions(-)
diff --git a/configure.ac b/configure.ac
index cc657ec..ca51350 100644
--- a/configure.ac
+++ b/configure.ac
@@ -483,7 +483,18 @@ AM_CONDITIONAL(LIBDW,[test "$WITH_LIBDW" = yes])
AM_CONDITIONAL(HAVE_LIBDW_STRTAB,[test "$HAVE_LIBDW_STRTAB" = yes])
#=================
-# Process --with/without-external-db
+# Process --disbale-bdb
+AC_ARG_ENABLE([bdb],
+ [AS_HELP_STRING([--disable-bdb],[build without bdb rpm database format support])])
+AS_IF([test "x$enable_bdb" != "xno"],
+ [AC_DEFINE(ENABLE_BDB, 1, [Build with bdb rpm database format support?])],
+ # If BDB is disabled, force enable NDB
+ [enable_ndb=yes])
+AM_CONDITIONAL(BDB,[test "x$enable_bdb" != "xno"])
+
+#=================
+# Process --with/without-external-db if bdb is not disabled
+AS_IF([test "x$enable_bdb" != "xno"],[
AC_ARG_WITH(external_db, [AS_HELP_STRING([--with-external-db],[build against an external Berkeley db])],
[case "$with_external_db" in
yes|no) ;;
@@ -538,7 +549,7 @@ no|maybe )
fi
;;
esac
-
+])
AC_SUBST([WITH_DB_LIB])
#=================
@@ -548,9 +559,8 @@ AC_ARG_ENABLE([ndb], [AS_HELP_STRING([--enable-ndb],[enable the new rpm database
yes|no) ;;
*) AC_MSG_ERROR([invalid argument to --enable-ndb])
;;
-esac],
-[enable_ndb=no])
-AS_IF([test "$enable_ndb" = yes],[
+esac])
+AS_IF([test "$enable_ndb" = yes ],[
AC_DEFINE(ENABLE_NDB, 1, [Enable new rpm database format?])
])
AM_CONDITIONAL([NDB], [test "$enable_ndb" = yes])
@@ -1014,7 +1024,7 @@ if test "$with_external_db" = no; then
AC_CONFIG_SUBDIRS(db3)
fi
-AM_CONDITIONAL([WITH_INTERNAL_DB],[test "$with_external_db" = no])
+AM_CONDITIONAL([WITH_INTERNAL_DB],[test "$enable-bdb" = yes && "$with_external_db" = no])
AM_CONDITIONAL([DOXYGEN],[test "$DOXYGEN" != no])
AM_CONDITIONAL([HACKINGDOCS],[test "$with_hackingdocs" = yes])
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 3bb5af9..1eede2e 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -23,7 +23,7 @@ EXTRA_PROGRAMS =
usrlib_LTLIBRARIES = librpm.la
librpm_la_SOURCES = \
- backend/db3.c backend/dbi.c backend/dbi.h \
+ backend/dbi.c backend/dbi.h \
backend/dbiset.c backend/dbiset.h \
headerutil.c header.c headerfmt.c header_internal.h \
rpmdb.c rpmdb_internal.h \
@@ -58,11 +58,14 @@ librpm_la_LIBADD += @LUA_LIBS@
librpm_la_SOURCES += rpmliblua.c rpmliblua.h
endif
+if BDB
+librpm_la_SOURCES += backend/db3.c
if WITH_INTERNAL_DB
librpm_la_LIBADD += $(libdb_la)
else
librpm_la_LIBADD += @WITH_DB_LIB@
endif
+endif
if NDB
librpm_la_SOURCES += \
@@ -81,6 +84,7 @@ tagtbl.C: Makefile.am $(srcdir)/rpmtag.h gentagtbl.sh
mv -f $@.new $@
BUILT_SOURCES = tagtbl.C
+if BDB
if WITH_INTERNAL_DB
# XXX watchout, $(top_builddir)/db3/libdb.la created by this Makefile may surprise
libdb_la = $(top_builddir)/db3/libdb.la
@@ -145,5 +149,6 @@ rpmdb_verify_LDADD = \
$(top_builddir)/db3/util_sig.o \
librpm.la
endif
+endif
CLEANFILES += $(BUILT_SOURCES)
diff --git a/lib/backend/dbi.c b/lib/backend/dbi.c
index beba49f..7c0c21c 100644
--- a/lib/backend/dbi.c
+++ b/lib/backend/dbi.c
@@ -35,6 +35,7 @@ static void
dbDetectBackend(rpmdb rdb)
{
#ifdef ENABLE_NDB
+#ifdef ENABLE_BDB
const char *dbhome = rpmdbHome(rdb);
char *db_backend = rpmExpand("%{?_db_backend}");
if (!strcmp(db_backend, "ndb")) {
@@ -52,8 +53,15 @@ dbDetectBackend(rpmdb rdb)
if (access(path, F_OK) == 0)
rdb->db_ops = &ndb_dbops;
free(path);
-#else
+#else /* No BDB backend support */
+ rdb->db_ops = &ndb_dbops;
+#endif
+#else /* No NDB backend support */
+#ifdef ENABLE_BDB
rdb->db_ops = &db3_dbops;
+#else /* ERROR: No backend enabled, this should not be a configurable state */
+#error No backend enabled
+#endif
#endif
}
diff --git a/lib/backend/dbi.h b/lib/backend/dbi.h
index a575d3c..21e3fbf 100644
--- a/lib/backend/dbi.h
+++ b/lib/backend/dbi.h
@@ -249,8 +249,10 @@ struct rpmdbOps_s {
const void * (*idxdbKey)(dbiIndex dbi, dbiCursor dbc, unsigned int *keylen);
};
+#ifdef ENABLE_BDB
RPM_GNUC_INTERNAL
extern struct rpmdbOps_s db3_dbops;
+#endif
#ifdef ENABLE_NDB
RPM_GNUC_INTERNAL
--
2.7.4
--
Darren Hart
VMware Open Source Technology Center
More information about the Rpm-maint
mailing list