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) <dvh...@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 _______________________________________________ Rpm-maint mailing list Rpm-maint@lists.rpm.org http://lists.rpm.org/mailman/listinfo/rpm-maint