diff options
author | Arch Librarian <arch@canonical.com> | 2004-09-20 17:06:43 +0000 |
---|---|---|
committer | Arch Librarian <arch@canonical.com> | 2004-09-20 17:06:43 +0000 |
commit | c9569a1edaf6f93cbeefe0b8dacc02c14dbb6cc9 (patch) | |
tree | 0116f442851cc9734ad663f3825168e4d9852d8a | |
parent | 77113d1158583ebcc931997786e2a930f6bfa7a6 (diff) | |
download | apt-c9569a1edaf6f93cbeefe0b8dacc02c14dbb6cc9.tar.gz |
* Build apt-ftparchive with libdb4.2 rather than libdb2
Author: mdz
Date: 2004-05-08 19:41:01 GMT
* Build apt-ftparchive with libdb4.2 rather than libdb2
- Patch from Clint Adams to do most of the work
- Build-Depends: s/libdb2-dev/libdb4.2-dev/
- Add AC_PREREQ(2.50) to configure.in
- Use db_strerror(err) rather than GlobalError::Errno (which uses strerror)
-rw-r--r-- | buildlib/environment.mak.in | 2 | ||||
-rw-r--r-- | configure.in | 28 | ||||
-rw-r--r-- | debian/control | 2 | ||||
-rw-r--r-- | ftparchive/cachedb.cc | 35 | ||||
-rw-r--r-- | ftparchive/cachedb.h | 4 | ||||
-rw-r--r-- | ftparchive/makefile | 6 |
6 files changed, 52 insertions, 25 deletions
diff --git a/buildlib/environment.mak.in b/buildlib/environment.mak.in index 1b0e0b268..d4e501578 100644 --- a/buildlib/environment.mak.in +++ b/buildlib/environment.mak.in @@ -48,7 +48,7 @@ PYTHONVER = @PYTHONVER@ PYTHONPREFIX = @PYTHONPREFIX@ PYTHONEXECPREFIX = @PYTHONEXECPREFIX@ PYTHONINCLUDE = @PYTHONINCLUDE@ -DB2LIB = @DB2LIB@ +BDBLIB = @BDBLIB@ INTLLIBS = @INTLLIBS@ # Shim Headerfile control diff --git a/configure.in b/configure.in index a9b7275f2..2503c93bc 100644 --- a/configure.in +++ b/configure.in @@ -12,6 +12,7 @@ dnl not used but STL is. dnl 'make -f Makefile startup' will generate the configure file from dnl configure.in correctly and can be run at any time +AC_PREREQ(2.50) AC_INIT(configure.in) AC_CONFIG_AUX_DIR(buildlib) AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in) @@ -52,11 +53,28 @@ dnl if test "$PTHREADLIB" != "-lpthread"; then dnl AC_MSG_ERROR(failed: I need posix threads, pthread) dnl fi -dnl Check for DB2 -AC_CHECK_HEADER(db2/db.h, - [AC_CHECK_LIB(db2,db_open, - [AC_DEFINE(HAVE_DB2) DB2LIB="-ldb2"])]) -AC_SUBST(DB2LIB) +dnl Check for BDB +saveLIBS="$LIBS" +LIBS="$LIBS -ldb" + +AC_CHECK_HEADER(db.h, + [AC_MSG_CHECKING(if we can link against BerkeleyDB) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [#include <db.h>], + [int r, s, t; db_version(&r, &s, &t);] + )], + [AC_DEFINE(HAVE_BDB) + BDBLIB="-ldb" + AC_MSG_RESULT(yes)], + [BDBLIB="" + AC_MSG_RESULT(no)] + )] +) + +LIBS="$saveLIBS" + +AC_SUBST(BDBLIB) dnl Converts the ARCH to be something singular for this general CPU family dnl This is often the dpkg architecture string. diff --git a/debian/control b/debian/control index 162454758..7bd0c368a 100644 --- a/debian/control +++ b/debian/control @@ -4,7 +4,7 @@ Priority: important Maintainer: APT Development Team <deity@lists.debian.org> Uploaders: Jason Gunthorpe <jgg@debian.org>, Adam Heath <doogie@debian.org>, Matt Zimmerman <mdz@debian.org> Standards-Version: 3.6.1 -Build-Depends: debhelper (>= 4.1.62), libdb2-dev, gettext (>= 0.11.5) +Build-Depends: debhelper (>= 4.1.62), libdb4.2-dev, gettext (>= 0.11.5) Build-Depends-Indep: debiandoc-sgml, docbook-utils (>= 0.6.12-1) Package: apt diff --git a/ftparchive/cachedb.cc b/ftparchive/cachedb.cc index 440a90665..9e93dff05 100644 --- a/ftparchive/cachedb.cc +++ b/ftparchive/cachedb.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: cachedb.cc,v 1.6 2003/02/10 07:34:41 doogie Exp $ +// $Id: cachedb.cc,v 1.7 2004/05/08 19:41:01 mdz Exp $ /* ###################################################################### CacheDB @@ -30,6 +30,8 @@ /* This opens the DB2 file for caching package information */ bool CacheDB::ReadyDB(string DB) { + int err; + ReadOnly = _config->FindB("APT::FTPArchive::ReadOnlyDB",false); // Close the old DB @@ -50,13 +52,26 @@ bool CacheDB::ReadyDB(string DB) if (DB.empty()) return true; - - if ((errno = db_open(DB.c_str(),DB_HASH, + + db_create(&Dbp, NULL, 0); + if ((err = Dbp->open(Dbp, NULL, DB.c_str(), NULL, DB_HASH, (ReadOnly?DB_RDONLY:DB_CREATE), - 0644,0,0,&Dbp)) != 0) + 0644)) != 0) { - Dbp = 0; - return _error->Errno("db_open",_("Unable to open DB2 file %s"),DB.c_str()); + if (err == DB_OLD_VERSION) + { + _error->Warning(_("DB is old, attempting to upgrade %s"),DBFile.c_str()); + err = Dbp->upgrade(Dbp, DB.c_str(), 0); + if (!err) + err = Dbp->open(Dbp, NULL, DB.c_str(), NULL, DB_HASH, + (ReadOnly?DB_RDONLY:DB_CREATE), 0644); + + } + if (err) + { + Dbp = 0; + return _error->Error(_("Unable to open DB file %s: %s"),DB.c_str(), db_strerror(err)); + } } DBFile = DB; @@ -247,15 +262,9 @@ bool CacheDB::Clean() /* I'm not sure what VERSION_MINOR should be here.. 2.4.14 certainly needs the lower one and 2.7.7 needs the upper.. */ -#if DB_VERSION_MAJOR >= 2 && DB_VERSION_MINOR >= 7 DBC *Cursor; - if ((errno = Dbp->cursor(Dbp,0,&Cursor,0)) != 0) + if ((errno = Dbp->cursor(Dbp, NULL, &Cursor, 0)) != 0) return _error->Error(_("Unable to get a cursor")); -#else - DBC *Cursor; - if ((errno = Dbp->cursor(Dbp,0,&Cursor)) != 0) - return _error->Error(_("Unable to get a cursor")); -#endif DBT Key; DBT Data; diff --git a/ftparchive/cachedb.h b/ftparchive/cachedb.h index 257af20fc..1229b98ef 100644 --- a/ftparchive/cachedb.h +++ b/ftparchive/cachedb.h @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: cachedb.h,v 1.3 2002/11/22 07:19:51 doogie Exp $ +// $Id: cachedb.h,v 1.4 2004/05/08 19:41:01 mdz Exp $ /* ###################################################################### CacheDB @@ -16,7 +16,7 @@ #pragma interface "cachedb.h" #endif -#include <db2/db.h> +#include <db.h> #include <string> #include <apt-pkg/debfile.h> #include <inttypes.h> diff --git a/ftparchive/makefile b/ftparchive/makefile index ca6d8f9fe..a965166a0 100644 --- a/ftparchive/makefile +++ b/ftparchive/makefile @@ -6,9 +6,9 @@ SUBDIR=ftparchive include ../buildlib/defaults.mak # The apt-ftparchive program -ifdef DB2LIB +ifdef BDBLIB PROGRAM=apt-ftparchive -SLIBS = -lapt-pkg -lapt-inst $(DB2LIB) +SLIBS = -lapt-pkg -lapt-inst $(BDBLIB) LIB_MAKES = apt-pkg/makefile apt-inst/makefile SOURCE = apt-ftparchive.cc cachedb.cc writer.cc contents.cc override.cc \ multicompress.cc @@ -17,4 +17,4 @@ else PROGRAM=apt-ftparchive MESSAGE="Must have db2 to build apt-ftparchive" include $(FAIL_H) -endif # ifdef DB2LIB +endif # ifdef BDBLIB |