$NetBSD: patch-am,v 1.5 2004/04/13 22:48:41 recht Exp $

--- setup.py.orig	2003-10-21 15:01:21.000000000 -0500
+++ setup.py
@@ -15,7 +15,7 @@ from distutils.command.install import in
 from distutils.command.install_lib import install_lib
 
 # This global variable is used to hold the list of modules to be disabled.
-disabled_module_list = []
+disabled_module_list = ["_bsddb", "_curses", "_curses_panel", "_tkinter", "gdbm", "mpz", "pyexpat", "readline"]
 
 def add_dir_to_list(dirlist, dir):
     """Add the directory 'dir' to the list 'dirlist' (at the front) if
@@ -240,9 +240,15 @@ class PyBuildExt(build_ext):
         return sys.platform
 
     def detect_modules(self):
-        # Ensure that /usr/local is always used
-        add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
-        add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
+        # Add the buildlink directories for pkgsrc
+        if os.environ.has_key('BUILDLINK_DIR'):
+            dir = os.environ['BUILDLINK_DIR']
+            libdir = dir + '/lib'
+            incdir = dir + '/include'
+            if libdir not in self.compiler.library_dirs:
+                self.compiler.library_dirs.insert(0, libdir)
+            if incdir not in self.compiler.include_dirs:
+                self.compiler.include_dirs.insert(0, incdir)
 
         # fink installs lots of goodies in /sw/... - make sure we
         # check there
@@ -436,9 +442,7 @@ class PyBuildExt(build_ext):
                                depends = ['socketmodule.h']) )
         # Detect SSL support for the socket module (via _ssl)
         ssl_incs = find_file('openssl/ssl.h', inc_dirs,
-                             ['/usr/local/ssl/include',
-                              '/usr/contrib/ssl/include/'
-                             ]
+                             []
                              )
         if ssl_incs is not None:
             krb5_h = find_file('krb5.h', inc_dirs,
@@ -446,9 +450,7 @@ class PyBuildExt(build_ext):
             if krb5_h:
                 ssl_incs += krb5_h
         ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs,
-                                     ['/usr/local/ssl/lib',
-                                      '/usr/contrib/ssl/lib/'
-                                     ] )
+                                     [] )
 
         if (ssl_incs is not None and
             ssl_libs is not None):
@@ -479,116 +481,162 @@ class PyBuildExt(build_ext):
 
         # 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
-        db_try_this = {
-            'db4': {'libs': ('db-4.2', 'db42', 'db-4.1', 'db41', 'db-4.0', 'db4',),
-                    'libdirs': ('/usr/local/BerkeleyDB.4.2/lib',
-                                '/usr/local/BerkeleyDB.4.1/lib',
-                                '/usr/local/BerkeleyDB.4.0/lib',
-                                '/usr/local/lib',
-                                '/opt/sfw',
-                                '/sw/lib',
-                                ),
-                    'incdirs': ('/usr/local/BerkeleyDB.4.2/include',
-                                '/usr/local/include/db42',
-                                '/usr/local/BerkeleyDB.4.1/include',
-                                '/usr/local/include/db41',
-                                '/usr/local/BerkeleyDB.4.0/include',
-                                '/usr/local/include/db4',
-                                '/opt/sfw/include/db4',
-                                '/sw/include/db4',
-                                '/usr/include/db4',
-                                )},
-            'db3': {'libs': ('db-3.3', 'db-3.2', 'db-3.1', 'db3',),
-                    'libdirs': ('/usr/local/BerkeleyDB.3.3/lib',
-                                '/usr/local/BerkeleyDB.3.2/lib',
-                                '/usr/local/BerkeleyDB.3.1/lib',
-                                '/usr/local/lib',
-                                '/opt/sfw/lib',
-                                '/sw/lib',
-                                ),
-                    'incdirs': ('/usr/local/BerkeleyDB.3.3/include',
-                                '/usr/local/BerkeleyDB.3.2/include',
-                                '/usr/local/BerkeleyDB.3.1/include',
-                                '/usr/local/include/db3',
-                                '/opt/sfw/include/db3',
-                                '/sw/include/db3',
-                                '/usr/include/db3',
-                                )},
-            }
-
-        db_search_order = db_try_this.keys()
-        db_search_order.sort()
-        db_search_order.reverse()
+        #db_try_this = {
+            #'db4': {'libs': ('db-4.2', 'db42', 'db-4.1', 'db41', 'db-4.0', 'db4',),
+                    #'libdirs': ('/usr/local/BerkeleyDB.4.2/lib',
+                                #'/usr/local/BerkeleyDB.4.1/lib',
+                                #'/usr/local/BerkeleyDB.4.0/lib',
+                                #'/usr/local/lib',
+                                #'/opt/sfw',
+                                #'/sw/lib',
+                                #),
+                    #'incdirs': ('/usr/local/BerkeleyDB.4.2/include',
+                                #'/usr/local/include/db42',
+                                #'/usr/local/BerkeleyDB.4.1/include',
+                                #'/usr/local/include/db41',
+                                #'/usr/local/BerkeleyDB.4.0/include',
+                                #'/usr/local/include/db4',
+                                #'/opt/sfw/include/db4',
+                                #'/sw/include/db4',
+                                #'/usr/include/db4',
+                                #)},
+            #'db3': {'libs': ('db-3.3', 'db-3.2', 'db-3.1', 'db3',),
+                    #'libdirs': ('/usr/local/BerkeleyDB.3.3/lib',
+                                #'/usr/local/BerkeleyDB.3.2/lib',
+                                #'/usr/local/BerkeleyDB.3.1/lib',
+                                #'/usr/local/lib',
+                                #'/opt/sfw/lib',
+                                #'/sw/lib',
+                                #),
+                    #'incdirs': ('/usr/local/BerkeleyDB.3.3/include',
+                                #'/usr/local/BerkeleyDB.3.2/include',
+                                #'/usr/local/BerkeleyDB.3.1/include',
+                                #'/usr/local/include/db3',
+                                #'/opt/sfw/include/db3',
+                                #'/sw/include/db3',
+                                #'/usr/include/db3',
+                                #)},
+            #}
+
+        #db_search_order = db_try_this.keys()
+        #db_search_order.sort()
+        #db_search_order.reverse()
+
+        #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']:
+                    ## 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
+            ## /usr/local/Berkeley.3.3 and the lib dir under that isn't
+            ## normally on ld.so's search path, unless the sysadmin has hacked
+            ## /etc/ld.so.conf.  We add the directory to runtime_library_dirs
+            ## so the proper -R/--rpath flags get passed to the linker.  This
+            ## is usually correct and most trouble free, but may cause problems
+            ## 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,
+                                  #include_dirs=db_incs,
+                                  #libraries=dblibs))
+        #else:
+            #db_incs = None
+            #dblibs = []
+            #dblib_dir = None
 
-        class found(Exception): pass
+        # Look for Berkeley db 1.85.   Note that it is built as a different
+        # module name so it can be included even when later versions are
+        # available.  A very restrictive search is performed to avoid
+        # accidentally building this module with a later version of the
+        # underlying db library.  May BSD-ish Unixes incorporate db 1.85
+        # symbols into libc and place the include file in /usr/include.
+        #f = "/usr/include/db.h"
+        #if os.path.exists(f):
+            #data = open(f).read()
+            #m = re.search(r"#s*define\s+HASHVERSION\s+2\s*", data)
+            #if m is not None:
+                ## bingo - old version used hash file format version 2
+                #### XXX this should be fixed to not be platform-dependent
+                #### but I don't have direct access to an osf1 platform and
+                #### seemed to be muffing the search somehow
+                #libraries = platform == "osf1" and ['db'] or None
+                #if libraries is not None:
+                    #exts.append(Extension('bsddb185', ['bsddbmodule.c'],
+                                          #libraries=libraries))
+                #else:
+                    #exts.append(Extension('bsddb185', ['bsddbmodule.c']))
+
+        # rely on pkgsrc for Berkeley DB
+        class NotFound(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")
+            bdb_type = os.environ['PY_BDB_TYPE']
+            db_incs = [os.environ['PY_BDB_INCDIRS']]
+            dblib_dir = None
+            dblibs = None
+        
+            # check if need to use the db_185.h compat header
+            bsddb185_define_macros=[]
+            if bdb_type == "db2" or  bdb_type == "db3" or bdb_type == "db4":
+                bsddb185_define_macros=[('HAVE_DB_185_H',1)]
+                dblib_dir = [os.environ['PY_BDB_LIBDIRS']]
+                
+            else:
+                # check if db_incs/db.h really is db 1.85
+                f = "%s/db.h" % db_incs[0]
+                
                 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']:
-                    # 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
-            # /usr/local/Berkeley.3.3 and the lib dir under that isn't
-            # normally on ld.so's search path, unless the sysadmin has hacked
-            # /etc/ld.so.conf.  We add the directory to runtime_library_dirs
-            # so the proper -R/--rpath flags get passed to the linker.  This
-            # is usually correct and most trouble free, but may cause problems
-            # in some unusual system configurations (e.g. the directory is on
-            # an NFS server that goes away).
-            exts.append(Extension('_bsddb', ['_bsddb.c'],
+                    data = open(f).read()
+                    m = re.search(r"#s*define\s+HASHVERSION\s+2\s*", data)
+                    if m is None:
+                        # check for 1.85 compat header
+                        if os.path.exists("%s/db_185.h" % db_incs[0]):                            
+                            bsddb185_define_macros=[('HAVE_DB_185_H',1)]
+                        else:
+                            raise NotFound
+            try:
+                bltransform = os.environ['PY_BDB_TRANSFORM']
+                m = re.search(r"l:db:(db.)\s*", bltransform)
+                if m is not None and m.group(1) is not None:
+                    dblibs = [m.group(1)]
+            except:
+                pass
+                   
+            # build the bsddb185 extension module
+            exts.append(Extension('bsddb185', ['bsddbmodule.c'],
                                   library_dirs=dblib_dir,
                                   runtime_library_dirs=dblib_dir,
                                   include_dirs=db_incs,
+                                  define_macros=bsddb185_define_macros,
                                   libraries=dblibs))
-        else:
+        except:
             db_incs = None
             dblibs = []
-            dblib_dir = None
-
-
-        # Look for Berkeley db 1.85.   Note that it is built as a different
-        # module name so it can be included even when later versions are
-        # available.  A very restrictive search is performed to avoid
-        # accidentally building this module with a later version of the
-        # underlying db library.  May BSD-ish Unixes incorporate db 1.85
-        # symbols into libc and place the include file in /usr/include.
-        f = "/usr/include/db.h"
-        if os.path.exists(f):
-            data = open(f).read()
-            m = re.search(r"#s*define\s+HASHVERSION\s+2\s*", data)
-            if m is not None:
-                # bingo - old version used hash file format version 2
-                ### XXX this should be fixed to not be platform-dependent
-                ### but I don't have direct access to an osf1 platform and
-                ### seemed to be muffing the search somehow
-                libraries = platform == "osf1" and ['db'] or None
-                if libraries is not None:
-                    exts.append(Extension('bsddb185', ['bsddbmodule.c'],
-                                          libraries=libraries))
-                else:
-                    exts.append(Extension('bsddb185', ['bsddbmodule.c']))
-
+            dblib_dir = None            
+        
         # The standard Unix dbm module:
         if platform not in ['cygwin']:
             if find_file("ndbm.h", inc_dirs, []) is not None:
@@ -600,6 +648,13 @@ class PyBuildExt(build_ext):
                 exts.append( Extension('dbm', ['dbmmodule.c'],
                                        define_macros=[('HAVE_NDBM_H',None)],
                                        libraries = ndbm_libs ) )
+            elif find_file("ndbm.h", db_incs, []) is not None:
+                exts.append( Extension('dbm', ['dbmmodule.c'],
+                                       library_dirs=dblib_dir,
+                                       runtime_library_dirs=dblib_dir,
+                                       include_dirs=db_incs,
+                                       define_macros=[('HAVE_NDBM_H',None)],
+                                       libraries=dblibs))
             elif (self.compiler.find_library_file(lib_dirs, 'gdbm')
                   and find_file("gdbm/ndbm.h", inc_dirs, []) is not None):
                 exts.append( Extension('dbm', ['dbmmodule.c'],
@@ -770,7 +825,7 @@ class PyBuildExt(build_ext):
             # Linux-specific modules
             exts.append( Extension('linuxaudiodev', ['linuxaudiodev.c']) )
 
-        if platform in ('linux2', 'freebsd4'):
+        if platform in ('linux2', 'freebsd4', 'freebsd5'):
             exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
 
         if platform == 'sunos5':
@@ -1140,7 +1195,7 @@ def main():
           ext_modules=[Extension('struct', ['structmodule.c'])],
 
           # Scripts to install
-          scripts = ['Tools/scripts/pydoc', 'Tools/scripts/idle']
+          scripts = ['Tools/scripts/pydoc2.3']
         )
 
 # --install-platlib
