text: # 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}"""
  