diff --git a/Doc/custlib.py b/Doc/custlib.py
new file mode 100644
index 0000000..32cb3d2
--- /dev/null
+++ b/Doc/custlib.py
@@ -0,0 +1,73 @@
+# 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}"""
