[Python-Dev] Re: Distutils confuses Berkeley DB and dbm?

Skip Montanaro skip@pobox.com
Thu, 30 May 2002 21:51:20 -0500

Okay, after a little investigation (about 30 seconds staring at setup.py), I
see where the problem with dbm is.  Setup.py has this code to deal with dbm:

     # The standard Unix dbm module:
     if platform not in ['cygwin']:
         if (self.compiler.find_library_file(lib_dirs, 'ndbm')):
             exts.append( Extension('dbm', ['dbmmodule.c'],
                                    libraries = ['ndbm'] ) )
         elif self.compiler.find_library_file(lib_dirs, 'db1'):
             exts.append( Extension('dbm', ['dbmmodule.c'],
                                    libraries = ['db1'] ) )
             exts.append( Extension('dbm', ['dbmmodule.c']) )

That second branch is just plain wrong.  (I realize Neil added it in
response to a bug report.)  While it's true that Berkeley DB does (or did)
provide a dbm API, the underlying file is a db1 hash file, which we all
should realize by now is horribly broken, and if you've got a workable bsddb
there's no sense in trying to trick programmers into thinking they also have
real dbm files.  I suggest we discard the elif branch.  Any argument?