| # Generate custlib.tex, which is a site-specific library document. | 
 |  | 
 | # Phase I: list all the things that can be imported | 
 |  | 
 | import glob, os, sys, string | 
 | modules={} | 
 |  | 
 | for modname in sys.builtin_module_names: | 
 |     modules[modname]=modname | 
 |      | 
 | for dir in sys.path: | 
 |     # Look for *.py files | 
 |     filelist=glob.glob(os.path.join(dir, '*.py')) | 
 |     for file in filelist:  | 
 | 	path, file = os.path.split(file) | 
 | 	base, ext=os.path.splitext(file) | 
 | 	modules[string.lower(base)]=base | 
 |  | 
 |     # Look for shared library files | 
 |     filelist=(glob.glob(os.path.join(dir, '*.so')) +  | 
 | 	      glob.glob(os.path.join(dir, '*.sl')) + | 
 | 	      glob.glob(os.path.join(dir, '*.o')) ) | 
 |     for file in filelist:  | 
 | 	path, file = os.path.split(file) | 
 | 	base, ext=os.path.splitext(file) | 
 | 	if base[-6:]=='module': base=base[:-6] | 
 | 	modules[string.lower(base)]=base | 
 |  | 
 | # Minor oddity: the types module is documented in libtypes2.tex | 
 | if modules.has_key('types'): | 
 |     del modules['types'] ; modules['types2']=None | 
 |  | 
 | # Phase II: find all documentation files (lib*.tex) | 
 | #           and eliminate modules that don't have one. | 
 |  | 
 | docs={} | 
 | filelist=glob.glob('lib*.tex') | 
 | for file in filelist: | 
 |     modname=file[3:-4] | 
 |     docs[modname]=modname | 
 |  | 
 | mlist=modules.keys() | 
 | mlist=filter(lambda x, docs=docs: docs.has_key(x), mlist) | 
 | mlist.sort() | 
 | mlist=map(lambda x, docs=docs: docs[x], mlist) | 
 |  | 
 | modules=mlist | 
 |  | 
 | # Phase III: write custlib.tex | 
 |  | 
 | # Write the boilerplate | 
 | # XXX should be fancied up.   | 
 | print """\documentstyle[twoside,11pt,myformat]{report} | 
 | \\title{Python Library Reference} | 
 | \\input{boilerplate} | 
 | \\makeindex			% tell \\index to actually write the .idx file | 
 | \\begin{document} | 
 | \\pagenumbering{roman} | 
 | \\maketitle | 
 | \\input{copyright} | 
 | \\begin{abstract} | 
 | \\noindent This is a customized version of the Python Library Reference. | 
 | \\end{abstract} | 
 | \\pagebreak | 
 | {\\parskip = 0mm \\tableofcontents} | 
 | \\pagebreak\\pagenumbering{arabic}""" | 
 |      | 
 | for modname in mlist:  | 
 |     print "\\input{lib%s}" % (modname,) | 
 |      | 
 | # Write the end | 
 | print """\\input{custlib.ind}			% Index | 
 | \\end{document}""" |