Search in standard library and include dirs for Sleepycat stuff.
Fixes #590377.
diff --git a/setup.py b/setup.py
index 1240ed9..a733bb0 100644
--- a/setup.py
+++ b/setup.py
@@ -3,7 +3,7 @@
 
 __version__ = "$Revision$"
 
-import sys, os, getopt, imp
+import sys, os, getopt, imp, re
 from distutils import sysconfig
 from distutils import text_file
 from distutils.errors import *
@@ -444,13 +444,16 @@
         # implementation independent wrapper for these; dumbdbm.py provides
         # similar functionality (but slower of course) implemented in Python.
 
-        # Berkeley DB interface.
+        # Sleepycat Berkeley DB interface.
         #
-        # This requires the Berkeley DB code, see
-        # ftp://ftp.cs.berkeley.edu/pub/4bsd/db.1.85.tar.gz
+        # This requires the Sleepycat DB code, see
+        # http://www.sleepycat.com/ The earliest supported version of
+        # that library is 3.0, the latest supported version is 4.0
+        # (4.1 is specifically not supported, as that changes the
+        # semantics of transactional databases). A list of available
+        # releases can be found at
         #
-        # (See http://pybsddb.sourceforge.net/ for an interface to
-        # Berkeley DB 3.x.)
+        # http://www.sleepycat.com/update/index.html
 
         # when sorted in reverse order, keys for this dict must appear in the
         # order you wish to search - e.g., search for db4 before db3
@@ -458,18 +461,15 @@
             'db4': {'libs': ('db-4.0',),
                     'libdirs': ('/usr/local/BerkeleyDB.4.0/lib',
                                 '/usr/local/lib',
-                                '/usr/lib',
                                 '/opt/sfw',
                                 '/sw/lib',
-                                '/lib',
                                 ),
                     'incdirs': ('/usr/local/BerkeleyDB.4.0/include',
                                 '/usr/local/include/db4',
                                 '/opt/sfw/include/db4',
                                 '/sw/include/db4',
                                 '/usr/include/db4',
-                                ),
-                    'incs': ('db.h',)},
+                                )},
             'db3': {'libs': ('db-3.3', 'db-3.2', 'db-3.1', 'db-3.0'),
                     'libdirs': ('/usr/local/BerkeleyDB.3.3/lib',
                                 '/usr/local/BerkeleyDB.3.2/lib',
@@ -478,8 +478,6 @@
                                 '/usr/local/lib',
                                 '/opt/sfw',
                                 '/sw/lib',
-                                '/usr/lib',
-                                '/lib',
                                 ),
                     'incdirs': ('/usr/local/BerkeleyDB.3.3/include',
                                 '/usr/local/BerkeleyDB.3.2/include',
@@ -489,27 +487,39 @@
                                 '/opt/sfw/include/db3',
                                 '/sw/include/db3',
                                 '/usr/include/db3',
-                                ),
-                    'incs': ('db.h',)},
+                                )},
             }
 
         db_search_order = db_try_this.keys()
         db_search_order.sort()
         db_search_order.reverse()
         
-        find_lib_file = self.compiler.find_library_file
         class found(Exception): pass
         try:
+            # See whether there is a Sleepycat header in the standard
+            # search path.
+            std_dbinc = None
+            for d in inc_dirs:
+                f = os.path.join(d, "db.h")
+                if os.path.exists(f):
+                    f = open(f).read()
+                    m = re.search(r"#define\WDB_VERSION_MAJOR\W([1-9]+)", f)
+                    if m:
+                        std_dbinc = 'db' + m.group(1)
             for dbkey in db_search_order:
                 dbd = db_try_this[dbkey]
                 for dblib in dbd['libs']:
-                    for dbinc in dbd['incs']:
-                        db_incs = find_file(dbinc, [], dbd['incdirs'])
-                        dblib_dir = find_lib_file(dbd['libdirs'], dblib)
-                        if db_incs and dblib_dir:
-                            dblib_dir = os.path.dirname(dblib_dir)
-                            dblibs = [dblib]
-                            raise found
+                    # Prefer version-specific includes over standard
+                    # include locations.
+                    db_incs = find_file('db.h', [], dbd['incdirs'])
+                    dblib_dir = find_library_file(self.compiler,
+                                                  dblib,
+                                                  lib_dirs,
+                                                  list(dbd['libdirs']))
+                    if (db_incs or dbkey == std_dbinc) and \
+                           dblib_dir is not None:
+                        dblibs = [dblib]
+                        raise found
         except found:
             dblibs = [dblib]
             # A default source build puts Berkeley DB in something like
@@ -521,8 +531,8 @@
             # in some unusual system configurations (e.g. the directory is on
             # an NFS server that goes away).
             exts.append(Extension('_bsddb', ['_bsddb.c'],
-                                  library_dirs=[dblib_dir],
-                                  runtime_library_dirs=[dblib_dir],
+                                  library_dirs=dblib_dir,
+                                  runtime_library_dirs=dblib_dir,
                                   include_dirs=db_incs,
                                   libraries=dblibs))
         else: