]> git.saurik.com Git - apt.git/commitdiff
* Build apt-ftparchive with libdb4.2 rather than libdb2
authorArch Librarian <arch@canonical.com>
Mon, 20 Sep 2004 17:06:43 +0000 (17:06 +0000)
committerArch Librarian <arch@canonical.com>
Mon, 20 Sep 2004 17:06:43 +0000 (17:06 +0000)
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)

buildlib/environment.mak.in
configure.in
debian/control
ftparchive/cachedb.cc
ftparchive/cachedb.h
ftparchive/makefile

index 1b0e0b268c1bfc78506429d18faf47ce305b0fdc..d4e501578063d490364bad68b295b3e7ecaacb09 100644 (file)
@@ -48,7 +48,7 @@ PYTHONVER = @PYTHONVER@
 PYTHONPREFIX = @PYTHONPREFIX@
 PYTHONEXECPREFIX = @PYTHONEXECPREFIX@
 PYTHONINCLUDE = @PYTHONINCLUDE@
-DB2LIB = @DB2LIB@
+BDBLIB = @BDBLIB@
 INTLLIBS = @INTLLIBS@
 
 # Shim Headerfile control
index a9b7275f2862029c5439bb7a74214066b9d72d31..2503c93bcc6eec1cc6bcda5f688befd09892d991 100644 (file)
@@ -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.
index 162454758ee4fcedca16ca0489bc1257db4738e5..7bd0c368a25704ba13d2cf0bb552fb45718449ff 100644 (file)
@@ -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
index 440a90665d97f116bd336307e7128c6b4aac865b..9e93dff0520946658c3bd8ee03da1cf62a3db2c5 100644 (file)
@@ -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;
index 257af20fc72abf639e97f33fe7b7583b9ccd3ec3..1229b98efa40e9d53b420d8621e72ab0050bbb86 100644 (file)
@@ -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>
index ca6d8f9fe30692f69d22d87df7ad8b6e19234bd5..a965166a06ed2887f08f29d21fecf47136701aca 100644 (file)
@@ -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