Changed so all the help-generating functions are defined, at module-level,
in the module of the command classes that have command-specific
help options.  This lets us keep the principle of lazily importing
the ccompiler module, and also gets away from defining non-methods
at class level.
diff --git a/Lib/distutils/command/bdist.py b/Lib/distutils/command/bdist.py
index 1646993..47d4cbc 100644
--- a/Lib/distutils/command/bdist.py
+++ b/Lib/distutils/command/bdist.py
@@ -14,6 +14,18 @@
 from distutils.util import get_platform
 
 
+def show_formats ():
+    """Print list of available formats (arguments to "--format" option).
+    """
+    from distutils.fancy_getopt import FancyGetopt 
+    formats=[]
+    for format in bdist.format_commands:
+        formats.append(("formats=" + format, None,
+                        bdist.format_command[format][1]))
+    pretty_printer = FancyGetopt(formats)
+    pretty_printer.print_help("List of available distribution formats:")
+
+
 class bdist (Command):
 
     description = "create a built (binary) distribution"
@@ -24,6 +36,11 @@
                      "formats for distribution (comma-separated list)"),
                    ]
 
+    help_options = [
+        ('help-formats', None,
+         "lists available distribution formats", show_formats),
+	]
+
     # The following commands do not take a format option from bdist
     no_format_option = ('bdist_rpm',)
 
@@ -38,24 +55,9 @@
                        'ztar':  ('bdist_dumb', "compressed tar file"),
                        'tar':   ('bdist_dumb', "tar file"),
                        'zip':   ('bdist_dumb', "ZIP file"),
-		        }
-
-    def show_formats ():
-        """Print list of available formats (arguments to "--format" option).
-        """
-	from distutils.fancy_getopt import FancyGetopt 
-	formats=[]
-	for format in bdist.format_command.keys():
-	    formats.append(("formats="+format, None,
-                            bdist.format_command[format][1]))
-	formats.sort()
-	pretty_printer = FancyGetopt(formats)
-	pretty_printer.print_help("List of available distribution formats:")
-
-    help_options = [
-        ('help-formats', None,
-         "lists available distribution formats",show_formats),
-	]
+                     }
+    # establish the preferred order
+    format_commands = ['rpm', 'gztar', 'bztar', 'ztar', 'tar', 'zip']
 
 
     def initialize_options (self):
diff --git a/Lib/distutils/command/build.py b/Lib/distutils/command/build.py
index d5513fc..1e87f23 100644
--- a/Lib/distutils/command/build.py
+++ b/Lib/distutils/command/build.py
@@ -9,7 +9,12 @@
 import sys, os
 from distutils.core import Command
 from distutils.util import get_platform
-from distutils.ccompiler import show_compilers
+
+
+def show_compilers ():
+    from distutils.ccompiler import show_compilers
+    show_compilers()
+
 
 class build (Command):
 
diff --git a/Lib/distutils/command/build_clib.py b/Lib/distutils/command/build_clib.py
index 9a82ac0..7106882 100644
--- a/Lib/distutils/command/build_clib.py
+++ b/Lib/distutils/command/build_clib.py
@@ -23,7 +23,11 @@
 from types import *
 from distutils.core import Command
 from distutils.errors import *
-from distutils.ccompiler import new_compiler,show_compilers
+
+
+def show_compilers ():
+    from distutils.ccompiler import show_compilers
+    show_compilers()
 
 
 class build_clib (Command):
@@ -102,6 +106,7 @@
             return
 
         # Yech -- this is cut 'n pasted from build_ext.py!
+        from distutils.ccompiler import new_compiler
         self.compiler = new_compiler (compiler=self.compiler,
                                       verbose=self.verbose,
                                       dry_run=self.dry_run,
diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py
index f3ff157..6b7ec74 100644
--- a/Lib/distutils/command/build_ext.py
+++ b/Lib/distutils/command/build_ext.py
@@ -14,7 +14,6 @@
 from distutils.errors import *
 from distutils.dep_util import newer_group
 from distutils.extension import Extension
-from distutils.ccompiler import show_compilers
 
 # An extension name is just a dot-separated list of Python NAMEs (ie.
 # the same as a fully-qualified module name).
@@ -22,6 +21,11 @@
     (r'^[a-zA-Z_][a-zA-Z_0-9]*(\.[a-zA-Z_][a-zA-Z_0-9]*)*$')
 
 
+def show_compilers ():
+    from distutils.ccompiler import show_compilers
+    show_compilers()
+
+
 class build_ext (Command):
     
     description = "build C/C++ extensions (compile/link to build directory)"
@@ -73,12 +77,12 @@
         ('compiler=', 'c',
          "specify the compiler type"),
         ]
+
     help_options = [
         ('help-compiler', None,
-         "lists available compilers",show_compilers),
+         "list available compilers", show_compilers),
 	]
 
-
     def initialize_options (self):
         self.extensions = None
         self.build_lib = None
diff --git a/Lib/distutils/command/sdist.py b/Lib/distutils/command/sdist.py
index 93e53bb..5627ebb 100644
--- a/Lib/distutils/command/sdist.py
+++ b/Lib/distutils/command/sdist.py
@@ -13,11 +13,27 @@
 from distutils.core import Command
 from distutils.util import \
      convert_path, create_tree, remove_tree, newer, write_file, \
-     check_archive_formats, ARCHIVE_FORMATS
+     check_archive_formats
 from distutils.text_file import TextFile
 from distutils.errors import DistutilsExecError, DistutilsOptionError
 
 
+def show_formats ():
+    """Print all possible values for the 'formats' option (used by
+    the "--help-formats" command-line option).
+    """
+    from distutils.fancy_getopt import FancyGetopt
+    from distutils.archive_util import ARCHIVE_FORMATS
+    formats=[]
+    for format in ARCHIVE_FORMATS.keys():
+        formats.append(("formats=" + format, None,
+                        ARCHIVE_FORMATS[format][2]))
+    formats.sort()
+    pretty_printer = FancyGetopt(formats)
+    pretty_printer.print_help(
+        "List of available source distribution formats:")
+
+
 class sdist (Command):
 
     description = "create a source distribution (tarball, zip file, etc.)"
@@ -43,22 +59,6 @@
         ]
 
 
-    # XXX ugh: this has to precede the 'help_options' list, because
-    # it is mentioned there -- also, this is not a method, even though
-    # it's defined in a class: double-ugh!
-    def show_formats ():
-        """Print all possible values for the 'formats' option -- used by
-        the "--help-formats" command-line option.
-        """
-	from distutils.fancy_getopt import FancyGetopt 
-	formats=[]
-	for format in ARCHIVE_FORMATS.keys():
-	    formats.append(("formats="+format,None,ARCHIVE_FORMATS[format][2]))
-	formats.sort()
-	pretty_printer = FancyGetopt(formats)
-	pretty_printer.print_help(
-            "List of available source distribution formats:")
-
     help_options = [
         ('help-formats', None,
          "list available distribution formats", show_formats),
@@ -69,7 +69,6 @@
     default_format = { 'posix': 'gztar',
                        'nt': 'zip' }
 
-
     def initialize_options (self):
         # 'template' and 'manifest' are, respectively, the names of
         # the manifest template and manifest file.