text: """distutils.command.clean
  
  Implements the Distutils 'clean' command."""
  
  # contributed by Bastian Kleineidam <calvin@cs.uni-sb.de>, added 2000-03-18
  
  # This module should be kept compatible with Python 2.1.
  
  __revision__ = "$Id: clean.py,v 1.16 2004/11/10 22:23:15 loewis Exp $"
  
  import os
  from distutils.core import Command
  from distutils.dir_util import remove_tree
  from distutils import log
  
  class clean (Command):
  
      description = "clean up output of 'build' command"
      user_options = [
          ('build-base=', 'b',
           "base build directory (default: 'build.build-base')"),
          ('build-lib=', None,
           "build directory for all modules (default: 'build.build-lib')"),
          ('build-temp=', 't',
           "temporary build directory (default: 'build.build-temp')"),
          ('build-scripts=', None,
           "build directory for scripts (default: 'build.build-scripts')"),
          ('bdist-base=', None,
           "temporary directory for built distributions"),
          ('all', 'a',
           "remove all build output, not just temporary by-products")
      ]
  
      boolean_options = ['all']
  
      def initialize_options(self):
          self.build_base = None
          self.build_lib = None
          self.build_temp = None
          self.build_scripts = None
          self.bdist_base = None
          self.all = None
  
      def finalize_options(self):
          self.set_undefined_options('build',
                                     ('build_base', 'build_base'),
                                     ('build_lib', 'build_lib'),
                                     ('build_scripts', 'build_scripts'),
                                     ('build_temp', 'build_temp'))
          self.set_undefined_options('bdist',
                                     ('bdist_base', 'bdist_base'))
  
      def run(self):
          # remove the build/temp.<plat> directory (unless it's already
          # gone)
          if os.path.exists(self.build_temp):
              remove_tree(self.build_temp, dry_run=self.dry_run)
          else:
              log.debug("'%s' does not exist -- can't clean it",
                        self.build_temp)
  
          if self.all:
              # remove build directories
              for directory in (self.build_lib,
                                self.bdist_base,
                                self.build_scripts):
                  if os.path.exists(directory):
                      remove_tree(directory, dry_run=self.dry_run)
                  else:
                      log.warn("'%s' does not exist -- can't clean it",
                               directory)
  
          # just for the heck of it, try to remove the base build directory:
          # we might have emptied it right now, but if not we don't care
          if not self.dry_run:
              try:
                  os.rmdir(self.build_base)
                  log.info("removing '%s'", self.build_base)
              except OSError:
                  pass
  
  # class clean
  