@@ -418,14 +418,124 @@ def detect_modules(self):
418418 # implementation independent wrapper for these; dumbdbm.py provides
419419 # similar functionality (but slower of course) implemented in Python.
420420
421+ # Berkeley DB interface.
422+ #
423+ # This requires the Berkeley DB code, see
424+ # ftp://ftp.cs.berkeley.edu/pub/4bsd/db.1.85.tar.gz
425+ #
426+ # (See http://pybsddb.sourceforge.net/ for an interface to
427+ # Berkeley DB 3.x.)
428+
429+ # when sorted in reverse order, keys for this dict must appear in the
430+ # order you wish to search - e.g., search for db3 before db2, db2
431+ # before db1
432+ db_try_this = {
433+ 'db4' : {'libs' : ('db-4.3' , 'db-4.2' , 'db-4.1' , 'db-4.0' ),
434+ 'libdirs' : ('/usr/local/BerkeleyDB.4.3/lib' ,
435+ '/usr/local/BerkeleyDB.4.2/lib' ,
436+ '/usr/local/BerkeleyDB.4.1/lib' ,
437+ '/usr/local/BerkeleyDB.4.0/lib' ,
438+ '/usr/lib' ,
439+ '/opt/sfw' ,
440+ '/sw/lib' ,
441+ '/lib' ,
442+ ),
443+ 'incdirs' : ('/usr/local/BerkeleyDB.4.3/include' ,
444+ '/usr/local/BerkeleyDB.4.2/include' ,
445+ '/usr/local/BerkeleyDB.4.1/include' ,
446+ '/usr/local/BerkeleyDB.4.0/include' ,
447+ '/usr/include/db3' ,
448+ '/opt/sfw/include/db3' ,
449+ '/sw/include/db3' ,
450+ '/usr/local/include/db3' ,
451+ ),
452+ 'incs' : ('db_185.h' ,)},
453+ 'db3' : {'libs' : ('db-3.3' , 'db-3.2' , 'db-3.1' , 'db-3.0' ),
454+ 'libdirs' : ('/usr/local/BerkeleyDB.3.3/lib' ,
455+ '/usr/local/BerkeleyDB.3.2/lib' ,
456+ '/usr/local/BerkeleyDB.3.1/lib' ,
457+ '/usr/local/BerkeleyDB.3.0/lib' ,
458+ '/usr/lib' ,
459+ '/opt/sfw' ,
460+ '/sw/lib' ,
461+ '/lib' ,
462+ ),
463+ 'incdirs' : ('/usr/local/BerkeleyDB.3.3/include' ,
464+ '/usr/local/BerkeleyDB.3.2/include' ,
465+ '/usr/local/BerkeleyDB.3.1/include' ,
466+ '/usr/local/BerkeleyDB.3.0/include' ,
467+ '/usr/include/db3' ,
468+ '/opt/sfw/include/db3' ,
469+ '/sw/include/db3' ,
470+ '/usr/local/include/db3' ,
471+ ),
472+ 'incs' : ('db_185.h' ,)},
473+ 'db2' : {'libs' : ('db2' ,),
474+ 'libdirs' : ('/usr/lib' , '/sw/lib' , '/lib' ),
475+ 'incdirs' : ('/usr/include/db2' ,
476+ '/usr/local/include/db2' , '/sw/include/db2' ),
477+ 'incs' : ('db_185.h' ,)},
478+ # if you are willing to risk hash db file corruption you can
479+ # uncomment the lines below for db1. Note that this will affect
480+ # not only the bsddb module, but the dbhash and anydbm modules
481+ # as well. you have been warned!!!
482+ ##'db1': {'libs': ('db1', 'db'),
483+ ## 'libdirs': ('/usr/lib', '/sw/lib', '/lib'),
484+ ## 'incdirs': ('/usr/include/db1', '/usr/local/include/db1',
485+ ## '/usr/include', '/usr/local/include'),
486+ ## 'incs': ('db.h',)},
487+ }
488+
489+ # override this list to affect the library version search order
490+ # for example, if you want to force version 2 to be used:
491+ # db_search_order = ["db2"]
492+ db_search_order = db_try_this .keys ()
493+ db_search_order .sort ()
494+ db_search_order .reverse ()
495+
496+ find_lib_file = self .compiler .find_library_file
497+ class found (Exception ): pass
498+ try :
499+ for dbkey in db_search_order :
500+ dbd = db_try_this [dbkey ]
501+ for dblib in dbd ['libs' ]:
502+ for dbinc in dbd ['incs' ]:
503+ db_incs = find_file (dbinc , [], dbd ['incdirs' ])
504+ dblib_dir = find_lib_file (dbd ['libdirs' ], dblib )
505+ if db_incs and dblib_dir :
506+ dblib_dir = os .path .dirname (dblib_dir )
507+ dblibs = [dblib ]
508+ raise found
509+ except found :
510+ if dbinc == 'db_185.h' :
511+ exts .append (Extension ('bsddb' , ['bsddbmodule.c' ],
512+ library_dirs = [dblib_dir ],
513+ include_dirs = db_incs ,
514+ define_macros = [('HAVE_DB_185_H' ,1 )],
515+ libraries = [dblib ]))
516+ else :
517+ exts .append (Extension ('bsddb' , ['bsddbmodule.c' ],
518+ library_dirs = [dblib_dir ],
519+ include_dirs = db_incs ,
520+ libraries = [dblib ]))
521+ else :
522+ db_incs = None
523+ dblibs = []
524+ dblib_dir = None
525+
421526 # The standard Unix dbm module:
422527 if platform not in ['cygwin' ]:
423528 if (self .compiler .find_library_file (lib_dirs , 'ndbm' )):
424529 exts .append ( Extension ('dbm' , ['dbmmodule.c' ],
425530 libraries = ['ndbm' ] ) )
426- elif self .compiler .find_library_file (lib_dirs , 'db1 ' ):
531+ elif self .compiler .find_library_file (lib_dirs , 'gdbm ' ):
427532 exts .append ( Extension ('dbm' , ['dbmmodule.c' ],
428- libraries = ['db1' ] ) )
533+ libraries = ['gdbm' ] ) )
534+ elif db_incs is not None :
535+ exts .append ( Extension ('dbm' , ['dbmmodule.c' ],
536+ library_dirs = dblib_dir ,
537+ include_dirs = db_incs ,
538+ libraries = dblibs ))
429539 else :
430540 exts .append ( Extension ('dbm' , ['dbmmodule.c' ]) )
431541
@@ -434,44 +544,6 @@ def detect_modules(self):
434544 exts .append ( Extension ('gdbm' , ['gdbmmodule.c' ],
435545 libraries = ['gdbm' ] ) )
436546
437- # Berkeley DB interface.
438- #
439- # This requires the Berkeley DB code, see
440- # ftp://ftp.cs.berkeley.edu/pub/4bsd/db.1.85.tar.gz
441- #
442- # Edit the variables DB and DBPORT to point to the db top directory
443- # and the subdirectory of PORT where you built it.
444- #
445- # (See http://pybsddb.sourceforge.net/ for an interface to
446- # Berkeley DB 3.x.)
447-
448- dblib = []
449- if self .compiler .find_library_file (lib_dirs , 'db-3.2' ):
450- dblib = ['db-3.2' ]
451- elif self .compiler .find_library_file (lib_dirs , 'db-3.1' ):
452- dblib = ['db-3.1' ]
453- elif self .compiler .find_library_file (lib_dirs , 'db3' ):
454- dblib = ['db3' ]
455- elif self .compiler .find_library_file (lib_dirs , 'db2' ):
456- dblib = ['db2' ]
457- elif self .compiler .find_library_file (lib_dirs , 'db1' ):
458- dblib = ['db1' ]
459- elif self .compiler .find_library_file (lib_dirs , 'db' ):
460- dblib = ['db' ]
461-
462- db185_incs = find_file ('db_185.h' , inc_dirs ,
463- ['/usr/include/db3' , '/usr/include/db2' ])
464- db_inc = find_file ('db.h' , inc_dirs , ['/usr/include/db1' ])
465- if db185_incs is not None :
466- exts .append ( Extension ('bsddb' , ['bsddbmodule.c' ],
467- include_dirs = db185_incs ,
468- define_macros = [('HAVE_DB_185_H' ,1 )],
469- libraries = dblib ) )
470- elif db_inc is not None :
471- exts .append ( Extension ('bsddb' , ['bsddbmodule.c' ],
472- include_dirs = db_inc ,
473- libraries = dblib ) )
474-
475547 # The mpz module interfaces to the GNU Multiple Precision library.
476548 # You need to ftp the GNU MP library.
477549 # This was originally written and tested against GMP 1.2 and 1.3.2.
0 commit comments