Преглед изворни кода

* 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)

Arch Librarian пре 22 година
родитељ
комит
c9569a1eda
6 измењених фајлова са 52 додато и 25 уклоњено
  1. 1 1
      buildlib/environment.mak.in
  2. 23 5
      configure.in
  3. 1 1
      debian/control
  4. 22 13
      ftparchive/cachedb.cc
  5. 2 2
      ftparchive/cachedb.h
  6. 3 3
      ftparchive/makefile

+ 1 - 1
buildlib/environment.mak.in

@@ -48,7 +48,7 @@ PYTHONVER = @PYTHONVER@
 PYTHONPREFIX = @PYTHONPREFIX@
 PYTHONPREFIX = @PYTHONPREFIX@
 PYTHONEXECPREFIX = @PYTHONEXECPREFIX@
 PYTHONEXECPREFIX = @PYTHONEXECPREFIX@
 PYTHONINCLUDE = @PYTHONINCLUDE@
 PYTHONINCLUDE = @PYTHONINCLUDE@
-DB2LIB = @DB2LIB@
+BDBLIB = @BDBLIB@
 INTLLIBS = @INTLLIBS@
 INTLLIBS = @INTLLIBS@
 
 
 # Shim Headerfile control
 # Shim Headerfile control

+ 23 - 5
configure.in

@@ -12,6 +12,7 @@ dnl not used but STL is.
 dnl 'make -f Makefile startup' will generate the configure file from 
 dnl 'make -f Makefile startup' will generate the configure file from 
 dnl configure.in correctly and can be run at any time
 dnl configure.in correctly and can be run at any time
 
 
+AC_PREREQ(2.50)
 AC_INIT(configure.in)
 AC_INIT(configure.in)
 AC_CONFIG_AUX_DIR(buildlib)
 AC_CONFIG_AUX_DIR(buildlib)
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 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   AC_MSG_ERROR(failed: I need posix threads, pthread)
 dnl fi
 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 Converts the ARCH to be something singular for this general CPU family
 dnl This is often the dpkg architecture string.
 dnl This is often the dpkg architecture string.

+ 1 - 1
debian/control

@@ -4,7 +4,7 @@ Priority: important
 Maintainer: APT Development Team <deity@lists.debian.org>
 Maintainer: APT Development Team <deity@lists.debian.org>
 Uploaders: Jason Gunthorpe <jgg@debian.org>, Adam Heath <doogie@debian.org>, Matt Zimmerman <mdz@debian.org>
 Uploaders: Jason Gunthorpe <jgg@debian.org>, Adam Heath <doogie@debian.org>, Matt Zimmerman <mdz@debian.org>
 Standards-Version: 3.6.1
 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)
 Build-Depends-Indep: debiandoc-sgml, docbook-utils (>= 0.6.12-1)
 
 
 Package: apt
 Package: apt

+ 22 - 13
ftparchive/cachedb.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
 // 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
    CacheDB
@@ -30,6 +30,8 @@
 /* This opens the DB2 file for caching package information */
 /* This opens the DB2 file for caching package information */
 bool CacheDB::ReadyDB(string DB)
 bool CacheDB::ReadyDB(string DB)
 {
 {
+   int err;
+
    ReadOnly = _config->FindB("APT::FTPArchive::ReadOnlyDB",false);
    ReadOnly = _config->FindB("APT::FTPArchive::ReadOnlyDB",false);
    
    
    // Close the old DB
    // Close the old DB
@@ -50,13 +52,26 @@ bool CacheDB::ReadyDB(string DB)
    
    
    if (DB.empty())
    if (DB.empty())
       return true;
       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),
                         (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;
    DBFile = DB;
@@ -247,15 +262,9 @@ bool CacheDB::Clean()
 
 
    /* I'm not sure what VERSION_MINOR should be here.. 2.4.14 certainly
    /* 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.. */
       needs the lower one and 2.7.7 needs the upper.. */
-#if DB_VERSION_MAJOR >= 2 && DB_VERSION_MINOR >= 7
    DBC *Cursor;
    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"));
       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 Key;
    DBT Data;
    DBT Data;

+ 2 - 2
ftparchive/cachedb.h

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
 // 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
    CacheDB
@@ -16,7 +16,7 @@
 #pragma interface "cachedb.h"
 #pragma interface "cachedb.h"
 #endif 
 #endif 
 
 
-#include <db2/db.h>
+#include <db.h>
 #include <string>
 #include <string>
 #include <apt-pkg/debfile.h>
 #include <apt-pkg/debfile.h>
 #include <inttypes.h>
 #include <inttypes.h>

+ 3 - 3
ftparchive/makefile

@@ -6,9 +6,9 @@ SUBDIR=ftparchive
 include ../buildlib/defaults.mak
 include ../buildlib/defaults.mak
 
 
 # The apt-ftparchive program
 # The apt-ftparchive program
-ifdef DB2LIB
+ifdef BDBLIB
 PROGRAM=apt-ftparchive
 PROGRAM=apt-ftparchive
-SLIBS = -lapt-pkg -lapt-inst $(DB2LIB)
+SLIBS = -lapt-pkg -lapt-inst $(BDBLIB)
 LIB_MAKES = apt-pkg/makefile apt-inst/makefile
 LIB_MAKES = apt-pkg/makefile apt-inst/makefile
 SOURCE = apt-ftparchive.cc cachedb.cc writer.cc contents.cc override.cc \
 SOURCE = apt-ftparchive.cc cachedb.cc writer.cc contents.cc override.cc \
          multicompress.cc
          multicompress.cc
@@ -17,4 +17,4 @@ else
 PROGRAM=apt-ftparchive
 PROGRAM=apt-ftparchive
 MESSAGE="Must have db2 to build apt-ftparchive"
 MESSAGE="Must have db2 to build apt-ftparchive"
 include $(FAIL_H)
 include $(FAIL_H)
-endif # ifdef DB2LIB
+endif # ifdef BDBLIB