[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