*** /home/bga/src/python.orig/dist/src/setup.py Fri Aug 17 18:21:37 2001 --- ./setup.py Mon Aug 20 00:53:08 2001 *************** *** 41,54 **** return None def find_library_file(compiler, libname, std_dirs, paths): filename = compiler.library_filename(libname, lib_type='shared') result = find_file(filename, std_dirs, paths) ! if result is not None: return result filename = compiler.library_filename(libname, lib_type='static') result = find_file(filename, std_dirs, paths) ! return result def module_enabled(extlist, modname): """Returns whether the module 'modname' is present in the list of extensions 'extlist'.""" --- 41,80 ---- return None def find_library_file(compiler, libname, std_dirs, paths): + """Searches for the directory where a given library file is located, and + returns a tuple '(dirs, rt_dirs)' where 'dirs' is a possibly-empty + list of additional directories and 'rt_dirs' is a possibly-empty list of + directories to be searched at runtime. If the file couldn't be found at + all, None is returned. + + 'compiler' is the compiler object being used. + 'libname' is the name of a library, such as crypto (not libcrypto.a or + libcrypto.so). + 'std_dirs' is the list of standard system directories; if the library + is found in one of them, no additional directives are needed. + 'paths' is a list of additional locations to check; if the library is + found in one of them, the resulting list will contain the directory. + """ filename = compiler.library_filename(libname, lib_type='shared') result = find_file(filename, std_dirs, paths) ! rt_result = [] ! if result is not None: ! if len(result) > 0: ! rt_result = result ! elif os.path.exists(os.path.join('/usr/local/lib', filename)): ! # The library exists, but not in any of the directorys in 'paths'. ! # Check to see if it is in '/usr/local/lib'. This is the only ! # directory in 'std_dirs' that needs to be added to thr runtime ! # search directories. ! rt_result = ['/usr/local/lib'] ! return (result, rt_result) filename = compiler.library_filename(libname, lib_type='static') result = find_file(filename, std_dirs, paths) ! if result is not None: return (result, []) + return None + def module_enabled(extlist, modname): """Returns whether the module 'modname' is present in the list of extensions 'extlist'.""" *************** *** 193,199 **** # lib_dirs and inc_dirs are used to search for files; # if a file is found in one of those directories, it can # be assumed that no additional -I,-L directives are needed. ! lib_dirs = self.compiler.library_dirs + ['/lib', '/usr/lib'] inc_dirs = self.compiler.include_dirs + ['/usr/include'] exts = [] --- 219,228 ---- # lib_dirs and inc_dirs are used to search for files; # if a file is found in one of those directories, it can # be assumed that no additional -I,-L directives are needed. ! # /usr/ccs/lib is common on System V Release 4+ system (i.e. ! # Solaris, UnixWare, etc.) ! lib_dirs = self.compiler.library_dirs + ['/lib', '/usr/lib', ! '/usr/ccs/lib'] inc_dirs = self.compiler.include_dirs + ['/usr/include'] exts = [] *************** *** 313,358 **** # Read SGI RGB image files (but coded portably) exts.append( Extension('rgbimg', ['rgbimgmodule.c']) ) # readline ! if self.compiler.find_library_file(lib_dirs, 'readline'): readline_libs = ['readline'] ! if self.compiler.find_library_file(lib_dirs, ! 'ncurses'): readline_libs.append('ncurses') ! elif self.compiler.find_library_file(lib_dirs + ! ['/usr/lib/termcap'], ! 'termcap'): ! readline_libs.append('termcap') exts.append( Extension('readline', ['readline.c'], ! library_dirs=['/usr/lib/termcap'], libraries=readline_libs) ) # crypt module. ! if self.compiler.find_library_file(lib_dirs, 'crypt'): libs = ['crypt'] else: libs = [] ! exts.append( Extension('crypt', ['cryptmodule.c'], libraries=libs) ) # socket(2) # Detect SSL support for the socket module ssl_incs = find_file('openssl/ssl.h', inc_dirs, ['/usr/local/ssl/include', ! '/usr/contrib/ssl/include/' ! ] ! ) ! 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): exts.append( Extension('_socket', ['socketmodule.c'], include_dirs = ssl_incs, ! library_dirs = ssl_libs, libraries = ['ssl', 'crypto'], define_macros = [('USE_SSL',1)] ) ) else: exts.append( Extension('_socket', ['socketmodule.c']) ) --- 342,424 ---- # Read SGI RGB image files (but coded portably) exts.append( Extension('rgbimg', ['rgbimgmodule.c']) ) + # Look up some libraries that are referenced more than once. + + rtlib = {} + rtlib['ncurses'] = find_library_file(self.compiler, 'ncurses', + lib_dirs, []) + rtlib['curses'] = find_library_file(self.compiler, 'curses', + lib_dirs, []) + rtlib['terminfo'] = find_library_file(self.compiler, 'terminfo', + lib_dirs, []) + rtlib['termcap'] = find_library_file(self.compiler, 'termcap', + lib_dirs, ['/usr/lib/termcap']) + # readline ! rl_lib = find_library_file(self.compiler, 'readline', lib_dirs, []) ! if rl_lib: ! readline_dirs = rl_lib[0] ! rt_list = rl_lib[1] readline_libs = ['readline'] ! if rtlib['ncurses']: # ncurses library found ! readline_dirs += rtlib['ncurses'][0] ! rt_list += rtlib['ncurses'][1] readline_libs.append('ncurses') ! elif rtlib['curses']: # curses library found ! readline_dirs += rtlib['curses'][0] ! rt_list += rtlib['curses'][1] ! readline_libs.append('curses') ! if rtlib['terminfo']: ! readline_dirs += rtlib['terminfo'][0] ! rt_list += rtlib['terminfo'][1] ! readline_libs.append('terminfo') ! elif rtlib['termcap']: ! readline_dirs += rtlib['termcap'][0] ! rt_list += rtlib['termcap'][1] ! readline_libs.append('termcap') ! elif rtlib['termcap']: # [n]curses does not exist, look for termcap. ! readline_dirs += rtlib['termcap'][0] ! rt_list += rtlib['termcap'][1] ! readline_libs.append('termcap') ! ! rt_dirs = [] ! for dir in rt_list: ! if dir not in rt_dirs: ! rt_dirs.append(dir) ! exts.append( Extension('readline', ['readline.c'], ! library_dirs=readline_dirs, ! runtime_library_dirs = rt_dirs, libraries=readline_libs) ) # crypt module. ! cr_lib = find_library_file(self.compiler, 'crypt', lib_dirs, []) ! if cr_lib: libs = ['crypt'] + rt_dirs = cr_lib[1] else: libs = [] ! rt_dirs = [] ! exts.append( Extension('crypt', ['cryptmodule.c'], libraries=libs, ! runtime_library_dirs = rt_dirs) ) # socket(2) # Detect SSL support for the socket module ssl_incs = find_file('openssl/ssl.h', inc_dirs, ['/usr/local/ssl/include', ! '/usr/contrib/ssl/include/'] ) ! 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): exts.append( Extension('_socket', ['socketmodule.c'], include_dirs = ssl_incs, ! library_dirs = ssl_libs[0], libraries = ['ssl', 'crypto'], + runtime_library_dirs = ssl_libs[1], define_macros = [('USE_SSL',1)] ) ) else: exts.append( Extension('_socket', ['socketmodule.c']) ) *************** *** 366,381 **** # 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'] ) ) else: exts.append( Extension('dbm', ['dbmmodule.c']) ) # Anthony Baxter's gdbm module. GNU dbm(3) will require -lgdbm: ! if (self.compiler.find_library_file(lib_dirs, 'gdbm')): exts.append( Extension('gdbm', ['gdbmmodule.c'], ! libraries = ['gdbm'] ) ) # Berkeley DB interface. # --- 432,453 ---- # The standard Unix dbm module: if platform not in ['cygwin']: ! dbm_lib = find_library_file(self.compiler, 'ndbm', lib_dirs, []) ! if dbm_lib: exts.append( Extension('dbm', ['dbmmodule.c'], ! libraries = ['ndbm'], ! library_dirs = dbm_lib[0], ! runtime_library_dirs = dbm_lib[1] ) ) else: exts.append( Extension('dbm', ['dbmmodule.c']) ) # Anthony Baxter's gdbm module. GNU dbm(3) will require -lgdbm: ! dbm_lib = find_library_file(self.compiler, 'gdbm', lib_dirs, []) ! if dbm_lib: exts.append( Extension('gdbm', ['gdbmmodule.c'], ! libraries = ['gdbm'], ! library_dirs = dbm_lib[0], ! runtime_library_dirs = dbm_lib[1] ) ) # Berkeley DB interface. # *************** *** 389,409 **** # BSD DB 3.x.) dblib = [] ! if self.compiler.find_library_file(lib_dirs, 'db'): dblib = ['db'] ! db185_incs = find_file('db_185.h', inc_dirs, ! ['/usr/include/db3', '/usr/include/db2']) ! db_inc = find_file('db.h', inc_dirs, ['/usr/include/db1']) ! if db185_incs is not None: ! exts.append( Extension('bsddb', ['bsddbmodule.c'], ! include_dirs = db185_incs, ! define_macros=[('HAVE_DB_185_H',1)], ! libraries = dblib ) ) ! elif db_inc is not None: ! exts.append( Extension('bsddb', ['bsddbmodule.c'], ! include_dirs = db_inc, ! libraries = dblib) ) # The mpz module interfaces to the GNU Multiple Precision library. # You need to ftp the GNU MP library. --- 461,486 ---- # BSD DB 3.x.) dblib = [] ! db_lib = find_library_file(self.compiler, 'db', lib_dirs, [],) ! if db_lib: dblib = ['db'] ! db185_incs = find_file('db_185.h', inc_dirs, ! ['/usr/include/db3', '/usr/include/db2']) ! db_inc = find_file('db.h', inc_dirs, ['/usr/include/db1']) ! if db185_incs is not None: ! exts.append( Extension('bsddb', ['bsddbmodule.c'], ! include_dirs = db185_incs, ! define_macros=[('HAVE_DB_185_H',1)], ! libraries = dblib, ! library_dirs = db_lib[0], ! runtime_library_dirs = db_lib[1] ) ) ! elif db_inc is not None: ! exts.append( Extension('bsddb', ['bsddbmodule.c'], ! include_dirs = db_inc, ! libraries = dblib, ! library_dirs = db_lib[0], ! runtime_library_dirs = db_lib[1] ) ) # The mpz module interfaces to the GNU Multiple Precision library. # You need to ftp the GNU MP library. *************** *** 417,425 **** # FTP archive sites. One URL for it is: # ftp://gatekeeper.dec.com/.b/usenet/comp.sources.misc/volume40/fgmp/part01.Z ! if (self.compiler.find_library_file(lib_dirs, 'gmp')): exts.append( Extension('mpz', ['mpzmodule.c'], ! libraries = ['gmp'] ) ) # Unix-only modules --- 494,505 ---- # FTP archive sites. One URL for it is: # ftp://gatekeeper.dec.com/.b/usenet/comp.sources.misc/volume40/fgmp/part01.Z ! gmp_lib = find_library_file(self.compiler, 'gmp', lib_dirs, []) ! if gmp_lib: exts.append( Extension('mpz', ['mpzmodule.c'], ! libraries = ['gmp'], ! library_dirs = gmp_lib[0], ! runtime_library_dirs = gmp_lib[1] ) ) # Unix-only modules *************** *** 432,443 **** # Sun yellow pages. Some systems have the functions in libc. if platform not in ['cygwin']: ! if (self.compiler.find_library_file(lib_dirs, 'nsl')): libs = ['nsl'] else: libs = [] exts.append( Extension('nis', ['nismodule.c'], ! libraries = libs) ) # Curses support, requring the System V version of curses, often # provided by the ncurses library. --- 512,526 ---- # Sun yellow pages. Some systems have the functions in libc. if platform not in ['cygwin']: ! nsl_lib = find_library_file(self.compiler, 'nsl', lib_dirs, []) ! if nsl_lib: libs = ['nsl'] else: libs = [] exts.append( Extension('nis', ['nismodule.c'], ! libraries = libs, ! library_dirs = nsl_lib[0], ! runtime_library_dirs = nsl_lib[1] ) ) # Curses support, requring the System V version of curses, often # provided by the ncurses library. *************** *** 445,472 **** inc_dirs += ['/usr/5include'] lib_dirs += ['/usr/5lib'] ! if (self.compiler.find_library_file(lib_dirs, 'ncurses')): curses_libs = ['ncurses'] exts.append( Extension('_curses', ['_cursesmodule.c'], libraries = curses_libs) ) ! elif (self.compiler.find_library_file(lib_dirs, 'curses')): ! if (self.compiler.find_library_file(lib_dirs, 'terminfo')): ! curses_libs = ['curses', 'terminfo'] ! else: ! curses_libs = ['curses', 'termcap'] exts.append( Extension('_curses', ['_cursesmodule.c'], libraries = curses_libs) ) # If the curses module is enabled, check for the panel module if (os.path.exists('Modules/_curses_panel.c') and ! module_enabled(exts, '_curses') and ! self.compiler.find_library_file(lib_dirs, 'panel')): ! exts.append( Extension('_curses_panel', ['_curses_panel.c'], ! libraries = ['panel'] + curses_libs) ) - # Lee Busby's SIGFPE modules. # The library to link fpectl with is platform specific. # Choose *one* of the options below for fpectl: --- 528,578 ---- inc_dirs += ['/usr/5include'] lib_dirs += ['/usr/5lib'] ! if rtlib['ncurses']: curses_libs = ['ncurses'] exts.append( Extension('_curses', ['_cursesmodule.c'], + runtime_library_dirs = rtlib['ncurses'][1], libraries = curses_libs) ) ! elif rtlib['curses']: ! curses_dirs = rtlib['curses'][0] ! rt_list += rtlib['curses'][1] ! curses_libs = ['curses'] ! if rtlib['terminfo']: ! curses_dirs += rtlib['terminfo'][0] ! rt_list += rtlib['terminfo'][1] ! curses_libs.append('terminfo') ! elif rtlib['termcap']: ! curses_dirs += rtlib['termcap'][0] ! rt_list += rtlib['termcap'][1] ! curses_libs.append('termcap') + rt_dirs = [] + for dir in rt_list: + if dir not in rt_dirs: + rt_dirs.append(dir) + exts.append( Extension('_curses', ['_cursesmodule.c'], + library_dirs = curses_dirs, + runtime_library_dirs = rt_dirs, libraries = curses_libs) ) # If the curses module is enabled, check for the panel module if (os.path.exists('Modules/_curses_panel.c') and ! module_enabled(exts, '_curses')): + cp_lib = find_library_file(self.compiler, 'panel', lib_dirs, []) + if cp_lib: + curses_dirs += cp_lib[0] + rt_list += cp_lib[1] + rt_dirs = [] + for dir in rt_list: + if dir not in rt_dirs: + rt_dirs.append(dir) + exts.append( Extension('_curses_panel', ['_curses_panel.c'], + library_dirs = curses_dirs, + runtime_library_dirs = rt_dirs, + libraries = ['panel'] + curses_libs) ) # Lee Busby's SIGFPE modules. # The library to link fpectl with is platform specific. # Choose *one* of the options below for fpectl: *************** *** 503,511 **** version = line.split()[2] break if version >= version_req: ! if (self.compiler.find_library_file(lib_dirs, 'z')): exts.append( Extension('zlib', ['zlibmodule.c'], ! libraries = ['z']) ) # Interface to the Expat XML parser # --- 609,620 ---- version = line.split()[2] break if version >= version_req: ! zl_lib = find_library_file(self.compiler, 'z', lib_dirs, []) ! if zl_lib: exts.append( Extension('zlib', ['zlibmodule.c'], ! libraries = ['z'], ! library_dirs = zl_lib[0], ! runtime_library_dirs = zl_lib[1] ) ) # Interface to the Expat XML parser # *************** *** 527,532 **** --- 636,642 ---- # # ar cr libexpat.a xmltok/*.o xmlparse/*.o # + expat_defs = [] expat_incs = find_file('expat.h', inc_dirs, []) if expat_incs is not None: *************** *** 535,545 **** else: expat_incs = find_file('xmlparse.h', inc_dirs, []) ! if (expat_incs is not None and ! self.compiler.find_library_file(lib_dirs, 'expat')): exts.append( Extension('pyexpat', ['pyexpat.c'], define_macros = expat_defs, ! libraries = ['expat']) ) # Platform-specific libraries if platform == 'linux2': --- 645,657 ---- else: expat_incs = find_file('xmlparse.h', inc_dirs, []) ! ex_lib = find_library_file(self.compiler, 'expat', lib_dirs, []) ! if (expat_incs is not None and ex_lib is not None): exts.append( Extension('pyexpat', ['pyexpat.c'], define_macros = expat_defs, ! libraries = ['expat'], ! library_dirs = ex_lib[0], ! runtime_library_dirs = ex_lib[1] ) ) # Platform-specific libraries if platform == 'linux2': *************** *** 600,609 **** tcllib = tklib = tcl_includes = tk_includes = None for version in ['8.4', '84', '8.3', '83', '8.2', '82', '8.1', '81', '8.0', '80']: ! tklib = self.compiler.find_library_file(lib_dirs, ! 'tk' + version ) ! tcllib = self.compiler.find_library_file(lib_dirs, ! 'tcl' + version ) if tklib and tcllib: # Exit the loop when we've found the Tcl/Tk libraries break --- 712,721 ---- tcllib = tklib = tcl_includes = tk_includes = None for version in ['8.4', '84', '8.3', '83', '8.2', '82', '8.1', '81', '8.0', '80']: ! tklib = find_library_file(self.compiler, 'tk' + version, ! lib_dirs, [] ) ! tcllib = find_library_file(self.compiler, 'tcl' + version, ! lib_dirs, [] ) if tklib and tcllib: # Exit the loop when we've found the Tcl/Tk libraries break *************** *** 613,619 **** # Check for the include files on Debian, where # they're put in /usr/include/{tcl,tk}X.Y debian_tcl_include = [ '/usr/include/tcl' + version ] ! debian_tk_include = [ '/usr/include/tk' + version ] + debian_tcl_include tcl_includes = find_file('tcl.h', inc_dirs, debian_tcl_include) tk_includes = find_file('tk.h', inc_dirs, debian_tk_include) --- 725,732 ---- # Check for the include files on Debian, where # they're put in /usr/include/{tcl,tk}X.Y debian_tcl_include = [ '/usr/include/tcl' + version ] ! debian_tk_include = [ '/usr/include/tk' + version ] + \ ! debian_tcl_include tcl_includes = find_file('tcl.h', inc_dirs, debian_tcl_include) tk_includes = find_file('tk.h', inc_dirs, debian_tk_include) *************** *** 646,654 **** added_lib_dirs.append('/usr/X11/lib') # Check for BLT extension ! if self.compiler.find_library_file(lib_dirs + added_lib_dirs, 'BLT8.0'): defs.append( ('WITH_BLT', 1) ) libs.append('BLT8.0') # Add the Tcl/Tk libraries libs.append('tk'+version) --- 759,772 ---- added_lib_dirs.append('/usr/X11/lib') # Check for BLT extension ! bltlib = find_library_file(self.compiler, 'BLT8.0', lib_dirs, ! added_lib_dirs) ! rt_lib = [] ! if bltlib: defs.append( ('WITH_BLT', 1) ) libs.append('BLT8.0') + added_lib_dirs += bltlib[0] + rt_lib = bltlib[1] # Add the Tcl/Tk libraries libs.append('tk'+version) *************** *** 661,670 **** --- 779,795 ---- if platform != "cygwin": libs.append('X11') + # Construct the needed runtime search directories. + rt_dirs = [] + for dir in tcllib[1] + tklib[1] + rt_lib: + if dir not in rt_dirs: + rt_dirs.append(dir) + ext = Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'], define_macros=[('WITH_APPINIT', 1)] + defs, include_dirs = include_dirs, libraries = libs, + runtime_library_dirs = rt_dirs, library_dirs = added_lib_dirs, ) self.extensions.append(ext)