Use a Python script to create "empty" indexes.  This solves Guido's
corrupted file problem and avoids the shell escape interpretation
portability problem.  ;-(  See comments at top of newind.py for an
explanation.
diff --git a/Doc/Makefile b/Doc/Makefile
index d039e287..c8ed5e7 100644
--- a/Doc/Makefile
+++ b/Doc/Makefile
@@ -65,6 +65,7 @@
 EMACS=		emacs
 PYTHON=		python
 MAKEINFO=	makeinfo
+# When debugging partparse.py, make this the pyc file:
 PARTPARSEOBJ=	partparse.pyc
 PARTPARSE=	$(PYTHON) $(PARTPARSEOBJ)
 
@@ -163,8 +164,8 @@
 
 # Library document
 lib.dvi: modindex.py indfix.py $(LIBFILES)
-	echo '\\begin{theindex}\end{theindex}' >$*.ind
-	echo '\\begin{theindex}\label{modindex}\end{theindex}' >mod$*.ind
+	./newind.py >$*.ind
+	./newind.py modindex >mod$*.ind
 	$(LATEX) $*
 	./modindex.py mod$*.idx
 	./fix_hack $*.idx
@@ -180,7 +181,7 @@
 # Extending & Embedding, Python/C API documents.
 # Done this way to avoid repeated command sets.
 .tex.dvi:
-	echo '\\''begin{theindex}\end{theindex}' >$*.ind
+	./newind.py >$*.ind
 	$(LATEX) $*
 	./fix_hack $*.idx
 	$(MAKEINDEX) $*.idx
diff --git a/Doc/newind.py b/Doc/newind.py
new file mode 100755
index 0000000..b3a263b
--- /dev/null
+++ b/Doc/newind.py
@@ -0,0 +1,22 @@
+#! /usr/bin/env python
+
+"""Really nasty little script to create an empty, labeled index on stdout.
+
+Do it this way since some shells seem to work badly (and differently) with
+the leading '\b' for the first output line.  Specifically, /bin/sh on
+Solaris doesn't seem to get it right.  Once the quoting works there, it
+doesn't work on Linux any more.  ;-(
+"""
+__version__ = '$Revision$'
+#  $Source$
+
+import sys
+
+if sys.argv[1:]:
+    label = sys.argv[1]
+else:
+    label = "genindex"
+
+print "\\begin{theindex}"
+print "\\label{%s}" % label
+print "\\end{theindex}"
diff --git a/Doc/tools/newind.py b/Doc/tools/newind.py
new file mode 100755
index 0000000..b3a263b
--- /dev/null
+++ b/Doc/tools/newind.py
@@ -0,0 +1,22 @@
+#! /usr/bin/env python
+
+"""Really nasty little script to create an empty, labeled index on stdout.
+
+Do it this way since some shells seem to work badly (and differently) with
+the leading '\b' for the first output line.  Specifically, /bin/sh on
+Solaris doesn't seem to get it right.  Once the quoting works there, it
+doesn't work on Linux any more.  ;-(
+"""
+__version__ = '$Revision$'
+#  $Source$
+
+import sys
+
+if sys.argv[1:]:
+    label = sys.argv[1]
+else:
+    label = "genindex"
+
+print "\\begin{theindex}"
+print "\\label{%s}" % label
+print "\\end{theindex}"