summaryrefslogtreecommitdiffstats
path: root/Lib/distutils
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/distutils')
-rw-r--r--Lib/distutils/archive_util.py28
-rw-r--r--Lib/distutils/bcppcompiler.py12
-rw-r--r--Lib/distutils/ccompiler.py19
-rw-r--r--Lib/distutils/cmd.py51
-rw-r--r--Lib/distutils/command/bdist_dumb.py5
-rw-r--r--Lib/distutils/command/bdist_packager.py9
-rw-r--r--Lib/distutils/command/bdist_pkgtool.py13
-rw-r--r--Lib/distutils/command/bdist_rpm.py3
-rw-r--r--Lib/distutils/command/bdist_sdux.py7
-rw-r--r--Lib/distutils/command/bdist_wininst.py7
-rw-r--r--Lib/distutils/command/build_clib.py5
-rw-r--r--Lib/distutils/command/build_ext.py18
-rw-r--r--Lib/distutils/command/build_py.py17
-rw-r--r--Lib/distutils/command/build_scripts.py7
-rw-r--r--Lib/distutils/command/clean.py15
-rw-r--r--Lib/distutils/command/config.py14
-rw-r--r--Lib/distutils/command/install_lib.py8
-rw-r--r--Lib/distutils/command/install_scripts.py5
-rw-r--r--Lib/distutils/command/sdist.py37
-rw-r--r--Lib/distutils/core.py6
-rw-r--r--Lib/distutils/cygwinccompiler.py3
-rw-r--r--Lib/distutils/dir_util.py31
-rw-r--r--Lib/distutils/dist.py16
-rw-r--r--Lib/distutils/emxccompiler.py3
-rw-r--r--Lib/distutils/fancy_getopt.py57
-rw-r--r--Lib/distutils/file_util.py23
-rw-r--r--Lib/distutils/filelist.py58
-rw-r--r--Lib/distutils/msvccompiler.py7
-rw-r--r--Lib/distutils/mwerkscompiler.py17
-rw-r--r--Lib/distutils/spawn.py20
-rw-r--r--Lib/distutils/unixccompiler.py7
-rw-r--r--Lib/distutils/util.py45
32 files changed, 260 insertions, 313 deletions
diff --git a/Lib/distutils/archive_util.py b/Lib/distutils/archive_util.py
index 58d9a06..47fac0c 100644
--- a/Lib/distutils/archive_util.py
+++ b/Lib/distutils/archive_util.py
@@ -11,6 +11,7 @@ import os
from distutils.errors import DistutilsExecError
from distutils.spawn import spawn
from distutils.dir_util import mkpath
+from distutils import log
def make_tarball (base_name, base_dir, compress="gzip",
verbose=0, dry_run=0):
@@ -42,13 +43,13 @@ def make_tarball (base_name, base_dir, compress="gzip",
"bad value for 'compress': must be None, 'gzip', or 'compress'"
archive_name = base_name + ".tar"
- mkpath(os.path.dirname(archive_name), verbose=verbose, dry_run=dry_run)
+ mkpath(os.path.dirname(archive_name), dry_run=dry_run)
cmd = ["tar", "-cf", archive_name, base_dir]
- spawn(cmd, verbose=verbose, dry_run=dry_run)
+ spawn(cmd, dry_run=dry_run)
if compress:
spawn([compress] + compress_flags[compress] + [archive_name],
- verbose=verbose, dry_run=dry_run)
+ dry_run=dry_run)
return archive_name + compress_ext[compress]
else:
return archive_name
@@ -69,10 +70,10 @@ def make_zipfile (base_name, base_dir, verbose=0, dry_run=0):
# no changes needed!
zip_filename = base_name + ".zip"
- mkpath(os.path.dirname(zip_filename), verbose=verbose, dry_run=dry_run)
+ mkpath(os.path.dirname(zip_filename), dry_run=dry_run)
try:
spawn(["zip", "-rq", zip_filename, base_dir],
- verbose=verbose, dry_run=dry_run)
+ dry_run=dry_run)
except DistutilsExecError:
# XXX really should distinguish between "couldn't find
@@ -89,10 +90,10 @@ def make_zipfile (base_name, base_dir, verbose=0, dry_run=0):
"could neither find a standalone zip utility nor " +
"import the 'zipfile' module") % zip_filename
- if verbose:
- print "creating '%s' and adding '%s' to it" % \
- (zip_filename, base_dir)
-
+
+ log.info("creating '%s' and adding '%s' to it",
+ zip_filename, base_dir)
+
def visit (z, dirname, names):
for name in names:
path = os.path.normpath(os.path.join(dirname, name))
@@ -141,8 +142,7 @@ def make_archive (base_name, format,
"""
save_cwd = os.getcwd()
if root_dir is not None:
- if verbose:
- print "changing into '%s'" % root_dir
+ log.debug("changing into '%s'", root_dir)
base_name = os.path.abspath(base_name)
if not dry_run:
os.chdir(root_dir)
@@ -150,8 +150,7 @@ def make_archive (base_name, format,
if base_dir is None:
base_dir = os.curdir
- kwargs = { 'verbose': verbose,
- 'dry_run': dry_run }
+ kwargs = { 'dry_run': dry_run }
try:
format_info = ARCHIVE_FORMATS[format]
@@ -164,8 +163,7 @@ def make_archive (base_name, format,
filename = apply(func, (base_name, base_dir), kwargs)
if root_dir is not None:
- if verbose:
- print "changing back to '%s'" % save_cwd
+ log.debug("changing back to '%s'", save_cwd)
os.chdir(save_cwd)
return filename
diff --git a/Lib/distutils/bcppcompiler.py b/Lib/distutils/bcppcompiler.py
index 9ebba2d..019244c 100644
--- a/Lib/distutils/bcppcompiler.py
+++ b/Lib/distutils/bcppcompiler.py
@@ -22,6 +22,7 @@ from distutils.ccompiler import \
CCompiler, gen_preprocess_options, gen_lib_options
from distutils.file_util import write_file
from distutils.dep_util import newer
+from distutils import log
class BCPPCompiler(CCompiler) :
"""Concrete class that implements an interface to the Borland C/C++
@@ -108,7 +109,7 @@ class BCPPCompiler(CCompiler) :
ext = (os.path.splitext (src))[1]
if skip_sources[src]:
- self.announce ("skipping %s (%s up-to-date)" % (src, obj))
+ log.debug("skipping %s (%s up-to-date)", src, obj)
else:
src = os.path.normpath(src)
obj = os.path.normpath(obj)
@@ -178,7 +179,7 @@ class BCPPCompiler(CCompiler) :
except DistutilsExecError, msg:
raise LibError, msg
else:
- self.announce ("skipping %s (up-to-date)" % output_filename)
+ log.debug("skipping %s (up-to-date)", output_filename)
# create_static_lib ()
@@ -205,8 +206,8 @@ class BCPPCompiler(CCompiler) :
self._fix_lib_args (libraries, library_dirs, runtime_library_dirs)
if runtime_library_dirs:
- self.warn ("I don't know what to do with 'runtime_library_dirs': "
- + str (runtime_library_dirs))
+ log.warn("I don't know what to do with 'runtime_library_dirs': %s",
+ str(runtime_library_dirs))
if output_dir is not None:
output_filename = os.path.join (output_dir, output_filename)
@@ -285,7 +286,6 @@ class BCPPCompiler(CCompiler) :
if libfile is None:
ld_args.append(lib)
# probably a BCPP internal library -- don't warn
- # self.warn('library %s not found.' % lib)
else:
# full name which prefers bcpp_xxx.lib over xxx.lib
ld_args.append(libfile)
@@ -313,7 +313,7 @@ class BCPPCompiler(CCompiler) :
raise LinkError, msg
else:
- self.announce ("skipping %s (up-to-date)" % output_filename)
+ log.debug("skipping %s (up-to-date)", output_filename)
# link ()
diff --git a/Lib/distutils/ccompiler.py b/Lib/distutils/ccompiler.py
index f8d13c0..4c8b881 100644
--- a/Lib/distutils/ccompiler.py
+++ b/Lib/distutils/ccompiler.py
@@ -16,7 +16,7 @@ from distutils.file_util import move_file
from distutils.dir_util import mkpath
from distutils.dep_util import newer_pairwise, newer_group
from distutils.util import split_quoted, execute
-
+from distutils import log
class CCompiler:
"""Abstract base class to define the interface that must be implemented
@@ -80,7 +80,6 @@ class CCompiler:
dry_run=0,
force=0):
- self.verbose = verbose
self.dry_run = dry_run
self.force = force
@@ -808,8 +807,7 @@ class CCompiler:
# -- Utility methods -----------------------------------------------
def announce (self, msg, level=1):
- if self.verbose >= level:
- print msg
+ log.debug(msg)
def debug_print (self, msg):
from distutils.core import DEBUG
@@ -820,16 +818,16 @@ class CCompiler:
sys.stderr.write ("warning: %s\n" % msg)
def execute (self, func, args, msg=None, level=1):
- execute(func, args, msg, self.verbose >= level, self.dry_run)
+ execute(func, args, msg, self.dry_run)
def spawn (self, cmd):
- spawn (cmd, verbose=self.verbose, dry_run=self.dry_run)
+ spawn (cmd, dry_run=self.dry_run)
def move_file (self, src, dst):
- return move_file (src, dst, verbose=self.verbose, dry_run=self.dry_run)
+ return move_file (src, dst, dry_run=self.dry_run)
def mkpath (self, name, mode=0777):
- mkpath (name, mode, self.verbose, self.dry_run)
+ mkpath (name, mode, self.dry_run)
# class CCompiler
@@ -957,7 +955,10 @@ def new_compiler (plat=None,
("can't compile C/C++ code: unable to find class '%s' " +
"in module '%s'") % (class_name, module_name)
- return klass (verbose, dry_run, force)
+ # XXX The None is necessary to preserve backwards compatibility
+ # with classes that expect verbose to be the first positional
+ # argument.
+ return klass (None, dry_run, force)
def gen_preprocess_options (macros, include_dirs):
diff --git a/Lib/distutils/cmd.py b/Lib/distutils/cmd.py
index 65060d6..25ff302 100644
--- a/Lib/distutils/cmd.py
+++ b/Lib/distutils/cmd.py
@@ -13,7 +13,7 @@ import sys, os, string, re
from types import *
from distutils.errors import *
from distutils import util, dir_util, file_util, archive_util, dep_util
-
+from distutils import log
class Command:
"""Abstract base class for defining command classes, the "worker bees"
@@ -72,11 +72,15 @@ class Command:
# commands fallback on the Distribution's behaviour. None means
# "not defined, check self.distribution's copy", while 0 or 1 mean
# false and true (duh). Note that this means figuring out the real
- # value of each flag is a touch complicated -- hence "self.verbose"
- # (etc.) will be handled by __getattr__, below.
- self._verbose = None
+ # value of each flag is a touch complicated -- hence "self._dry_run"
+ # will be handled by __getattr__, below.
+ # XXX This needs to be fixed.
self._dry_run = None
+ # verbose is largely ignored, but needs to be set for
+ # backwards compatibility (I think)?
+ self.verbose = dist.verbose
+
# Some commands define a 'self.force' option to ignore file
# timestamps, but methods defined *here* assume that
# 'self.force' exists for all commands. So define it here
@@ -96,8 +100,10 @@ class Command:
# __init__ ()
+ # XXX A more explicit way to customize dry_run would be better.
+
def __getattr__ (self, attr):
- if attr in ('verbose', 'dry_run'):
+ if attr == 'dry_run':
myval = getattr(self, "_" + attr)
if myval is None:
return getattr(self.distribution, attr)
@@ -186,9 +192,7 @@ class Command:
"""If the current verbosity level is of greater than or equal to
'level' print 'msg' to stdout.
"""
- if self.verbose >= level:
- print msg
- sys.stdout.flush()
+ log.debug(msg)
def debug_print (self, msg):
"""Print 'msg' to stdout if the global DEBUG (taken from the
@@ -352,12 +356,11 @@ class Command:
def execute (self, func, args, msg=None, level=1):
- util.execute(func, args, msg, self.verbose >= level, self.dry_run)
+ util.execute(func, args, msg, dry_run=self.dry_run)
def mkpath (self, name, mode=0777):
- dir_util.mkpath(name, mode,
- self.verbose, self.dry_run)
+ dir_util.mkpath(name, mode, dry_run=self.dry_run)
def copy_file (self, infile, outfile,
@@ -371,8 +374,7 @@ class Command:
preserve_mode, preserve_times,
not self.force,
link,
- self.verbose >= level,
- self.dry_run)
+ dry_run=self.dry_run)
def copy_tree (self, infile, outfile,
@@ -385,30 +387,21 @@ class Command:
infile, outfile,
preserve_mode,preserve_times,preserve_symlinks,
not self.force,
- self.verbose >= level,
- self.dry_run)
-
+ dry_run=self.dry_run)
def move_file (self, src, dst, level=1):
- """Move a file respecting verbose and dry-run flags."""
- return file_util.move_file(src, dst,
- self.verbose >= level,
- self.dry_run)
-
+ """Move a file respectin dry-run flag."""
+ return file_util.move_file(src, dst, dry_run = self.dry_run)
def spawn (self, cmd, search_path=1, level=1):
- """Spawn an external command respecting verbose and dry-run flags."""
+ """Spawn an external command respecting dry-run flag."""
from distutils.spawn import spawn
- spawn(cmd, search_path,
- self.verbose >= level,
- self.dry_run)
-
+ spawn(cmd, search_path, dry_run= self.dry_run)
def make_archive (self, base_name, format,
root_dir=None, base_dir=None):
return archive_util.make_archive(
- base_name, format, root_dir, base_dir,
- self.verbose, self.dry_run)
+ base_name, format, root_dir, base_dir, dry_run=self.dry_run)
def make_file (self, infiles, outfile, func, args,
@@ -443,7 +436,7 @@ class Command:
# Otherwise, print the "skip" message
else:
- self.announce(skip_msg, level)
+ log.debug(skip_msg)
# make_file ()
diff --git a/Lib/distutils/command/bdist_dumb.py b/Lib/distutils/command/bdist_dumb.py
index a135877..712fec8 100644
--- a/Lib/distutils/command/bdist_dumb.py
+++ b/Lib/distutils/command/bdist_dumb.py
@@ -13,6 +13,7 @@ from distutils.core import Command
from distutils.util import get_platform
from distutils.dir_util import create_tree, remove_tree
from distutils.errors import *
+from distutils import log
class bdist_dumb (Command):
@@ -83,7 +84,7 @@ class bdist_dumb (Command):
install.skip_build = self.skip_build
install.warn_dir = 0
- self.announce("installing to %s" % self.bdist_dir)
+ log.info("installing to %s" % self.bdist_dir)
self.run_command('install')
# And make an archive relative to the root of the
@@ -101,7 +102,7 @@ class bdist_dumb (Command):
root_dir=self.bdist_dir)
if not self.keep_temp:
- remove_tree(self.bdist_dir, self.verbose, self.dry_run)
+ remove_tree(self.bdist_dir, dry_run=self.dry_run)
# run()
diff --git a/Lib/distutils/command/bdist_packager.py b/Lib/distutils/command/bdist_packager.py
index 667c030..11278ee 100644
--- a/Lib/distutils/command/bdist_packager.py
+++ b/Lib/distutils/command/bdist_packager.py
@@ -14,6 +14,7 @@ from distutils.util import get_platform
from distutils.dir_util import create_tree, remove_tree
from distutils.file_util import write_file
from distutils.errors import *
+from distutils import log
import string, sys
class bdist_packager (Command):
@@ -102,8 +103,8 @@ class bdist_packager (Command):
else:
setattr(self,attr,default)
val = default
- if val!="":
- self.announce('Creating %s script', attr)
+ if val != "":
+ log.info('Creating %s script', attr)
self.execute(write_file,
(path, self.get_script(attr)),
"writing '%s'" % path)
@@ -234,7 +235,7 @@ class bdist_packager (Command):
install = self.reinitialize_command('install', reinit_subcommands=1)
install.root = self.pkg_dir
- self.announce("installing to %s" % self.pkg_dir)
+ log.info("installing to %s", self.pkg_dir)
self.run_command('install')
# And make an archive relative to the root of the
@@ -243,7 +244,7 @@ class bdist_packager (Command):
self.plat_name)
if not self.keep_temp:
- remove_tree(self.pkg_dir, self.verbose, self.dry_run)
+ remove_tree(self.pkg_dir, dry_run=self.dry_run)
# run()
diff --git a/Lib/distutils/command/bdist_pkgtool.py b/Lib/distutils/command/bdist_pkgtool.py
index a36638a..4fd9501 100644
--- a/Lib/distutils/command/bdist_pkgtool.py
+++ b/Lib/distutils/command/bdist_pkgtool.py
@@ -15,6 +15,7 @@ from distutils.file_util import write_file
from distutils.errors import *
from distutils.command import bdist_packager
from distutils import sysconfig
+from distutils import log
import compileall
from commands import getoutput
@@ -211,9 +212,9 @@ class bdist_pkgtool (bdist_packager.bdist_packager):
install = self.reinitialize_command('install', reinit_subcommands=1)
# build package
- self.announce('Building package')
+ log.info('Building package')
self.run_command('build')
- self.announce('Creating pkginfo file')
+ log.info('Creating pkginfo file')
path = os.path.join(pkg_dir, "pkginfo")
self.execute(write_file,
(path,
@@ -244,7 +245,7 @@ class bdist_pkgtool (bdist_packager.bdist_packager):
self.write_script(os.path.join(pkg_dir, "depend"),
'depend',None)
- self.announce('Creating prototype file')
+ log.info('Creating prototype file')
path = os.path.join(pkg_dir, "prototype")
self.execute(write_file,
(path,
@@ -256,7 +257,7 @@ class bdist_pkgtool (bdist_packager.bdist_packager):
return
- self.announce('Creating package')
+ log.info('Creating package')
pkg_cmd = ['pkgmk', '-o', '-f']
pkg_cmd.append(path)
pkg_cmd.append('-b')
@@ -265,7 +266,7 @@ class bdist_pkgtool (bdist_packager.bdist_packager):
pkg_cmd = ['pkgtrans', '-s', '/var/spool/pkg']
path = os.path.join(os.environ['PWD'],pkg_dir,
self.get_binary_name() + ".pkg")
- self.announce('Transferring package to ' + pkg_dir)
+ log.info('Transferring package to ' + pkg_dir)
pkg_cmd.append(path)
pkg_cmd.append(self.pkg_abrev)
self.spawn(pkg_cmd)
@@ -326,7 +327,7 @@ class bdist_pkgtool (bdist_packager.bdist_packager):
if self.no_autorelocate==0:
request=string.split(DEFAULT_REQUEST,"\012")
else:
- self.announce('Creating relocation request script')
+ log.info('Creating relocation request script')
if self.request:
users_request=self.get_script('request')
if users_request!=None and users_request!=[]:
diff --git a/Lib/distutils/command/bdist_rpm.py b/Lib/distutils/command/bdist_rpm.py
index 4bc2561..808ddc1 100644
--- a/Lib/distutils/command/bdist_rpm.py
+++ b/Lib/distutils/command/bdist_rpm.py
@@ -14,6 +14,7 @@ from distutils.core import Command, DEBUG
from distutils.util import get_platform
from distutils.file_util import write_file
from distutils.errors import *
+from distutils import log
class bdist_rpm (Command):
@@ -278,7 +279,7 @@ class bdist_rpm (Command):
# build package
- self.announce('building RPMs')
+ log.info("building RPMs")
rpm_cmd = ['rpm']
if self.source_only: # what kind of RPMs?
rpm_cmd.append('-bs')
diff --git a/Lib/distutils/command/bdist_sdux.py b/Lib/distutils/command/bdist_sdux.py
index 985a37a..e4765f9 100644
--- a/Lib/distutils/command/bdist_sdux.py
+++ b/Lib/distutils/command/bdist_sdux.py
@@ -14,6 +14,7 @@ from distutils.util import get_platform
from distutils.file_util import write_file
from distutils.errors import *
from distutils.command import bdist_packager
+from distutils import log
import sys
from commands import getoutput
@@ -185,9 +186,9 @@ class bdist_sdux(bdist_packager.bdist_packager):
psf_path = os.path.join(self.pkg_dir,
"%s.psf" % self.get_binary_name())
# build package
- self.announce('Building package')
+ log.info('Building package')
self.run_command('build')
- self.announce('Creating psf file')
+ log.info('Creating psf file')
self.execute(write_file,
(psf_path,
self._make_control_file()),
@@ -195,7 +196,7 @@ class bdist_sdux(bdist_packager.bdist_packager):
if self.control_only: # stop if requested
return
- self.announce('Creating package')
+ log.info('Creating package')
spawn_cmd = ['swpackage', '-s']
spawn_cmd.append(psf_path)
spawn_cmd.append('-x')
diff --git a/Lib/distutils/command/bdist_wininst.py b/Lib/distutils/command/bdist_wininst.py
index 1683bb3..6a985f1 100644
--- a/Lib/distutils/command/bdist_wininst.py
+++ b/Lib/distutils/command/bdist_wininst.py
@@ -12,6 +12,7 @@ from distutils.core import Command
from distutils.util import get_platform
from distutils.dir_util import create_tree, remove_tree
from distutils.errors import *
+from distutils import log
class bdist_wininst (Command):
@@ -115,7 +116,7 @@ class bdist_wininst (Command):
'install_' + key,
value)
- self.announce("installing to %s" % self.bdist_dir)
+ log.info("installing to %s", self.bdist_dir)
install.ensure_finalized()
# avoid warning of 'install_lib' about installing
@@ -136,11 +137,11 @@ class bdist_wininst (Command):
# create an exe containing the zip-file
self.create_exe(arcname, fullname, self.bitmap)
# remove the zip-file again
- self.announce("removing temporary file '%s'" % arcname)
+ log.debug("removing temporary file '%s'", arcname)
os.remove(arcname)
if not self.keep_temp:
- remove_tree(self.bdist_dir, self.verbose, self.dry_run)
+ remove_tree(self.bdist_dir, dry_run=self.dry_run)
# run()
diff --git a/Lib/distutils/command/build_clib.py b/Lib/distutils/command/build_clib.py
index b659147..f0207e4 100644
--- a/Lib/distutils/command/build_clib.py
+++ b/Lib/distutils/command/build_clib.py
@@ -24,7 +24,7 @@ from types import *
from distutils.core import Command
from distutils.errors import *
from distutils.sysconfig import customize_compiler
-
+from distutils import log
def show_compilers ():
from distutils.ccompiler import show_compilers
@@ -111,7 +111,6 @@ class build_clib (Command):
# 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,
force=self.force)
customize_compiler(self.compiler)
@@ -213,7 +212,7 @@ class build_clib (Command):
"a list of source filenames") % lib_name
sources = list(sources)
- self.announce("building '%s' library" % lib_name)
+ log.info("building '%s' library", lib_name)
# First, compile the source code to object files in the library
# directory. (This should probably change to putting object
diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py
index ddbd03e..89ca1dc 100644
--- a/Lib/distutils/command/build_ext.py
+++ b/Lib/distutils/command/build_ext.py
@@ -15,6 +15,7 @@ from distutils.errors import *
from distutils.sysconfig import customize_compiler
from distutils.dep_util import newer_group
from distutils.extension import Extension
+from distutils import log
# An extension name is just a dot-separated list of Python NAMEs (ie.
# the same as a fully-qualified module name).
@@ -291,9 +292,9 @@ class build_ext (Command):
# by Extension constructor)
(ext_name, build_info) = ext
- self.warn(("old-style (ext_name, build_info) tuple found in "
- "ext_modules for extension '%s'"
- "-- please convert to Extension instance" % ext_name))
+ log.warn(("old-style (ext_name, build_info) tuple found in "
+ "ext_modules for extension '%s'"
+ "-- please convert to Extension instance" % ext_name))
if type(ext) is not TupleType and len(ext) != 2:
raise DistutilsSetupError, \
("each element of 'ext_modules' option must be an "
@@ -329,8 +330,8 @@ class build_ext (Command):
# Medium-easy stuff: same syntax/semantics, different names.
ext.runtime_library_dirs = build_info.get('rpath')
if build_info.has_key('def_file'):
- self.warn("'def_file' element of build info dict "
- "no longer supported")
+ log.warn("'def_file' element of build info dict "
+ "no longer supported")
# Non-trivial stuff: 'macros' split into 'define_macros'
# and 'undef_macros'.
@@ -422,11 +423,10 @@ class build_ext (Command):
self.get_ext_filename(fullname))
if not (self.force or newer_group(sources, ext_filename, 'newer')):
- self.announce("skipping '%s' extension (up-to-date)" %
- ext.name)
+ log.debug("skipping '%s' extension (up-to-date)", ext.name)
return
else:
- self.announce("building '%s' extension" % ext.name)
+ log.info("building '%s' extension", ext.name)
# First, scan the sources for SWIG definition files (.i), run
# SWIG on 'em to create .c files, and modify the sources list
@@ -539,7 +539,7 @@ class build_ext (Command):
for source in swig_sources:
target = swig_targets[source]
- self.announce("swigging %s to %s" % (source, target))
+ log.info("swigging %s to %s", source, target)
self.spawn(swig_cmd + ["-o", target, source])
return new_sources
diff --git a/Lib/distutils/command/build_py.py b/Lib/distutils/command/build_py.py
index 97d094b..388d3cb 100644
--- a/Lib/distutils/command/build_py.py
+++ b/Lib/distutils/command/build_py.py
@@ -13,7 +13,7 @@ from glob import glob
from distutils.core import Command
from distutils.errors import *
from distutils.util import convert_path
-
+from distutils import log
class build_py (Command):
@@ -176,8 +176,8 @@ class build_py (Command):
if os.path.isfile(init_py):
return init_py
else:
- self.warn(("package init file '%s' not found " +
- "(or not a regular file)") % init_py)
+ log.warn(("package init file '%s' not found " +
+ "(or not a regular file)"), init_py)
# Either not in a package at all (__init__.py not expected), or
# __init__.py doesn't exist -- so don't return the filename.
@@ -188,8 +188,7 @@ class build_py (Command):
def check_module (self, module, module_file):
if not os.path.isfile(module_file):
- self.warn("file %s (for module %s) not found" %
- (module_file, module))
+ log.warn("file %s (for module %s) not found", module_file, module)
return 0
else:
return 1
@@ -389,13 +388,9 @@ class build_py (Command):
if self.compile:
byte_compile(files, optimize=0,
- force=self.force,
- prefix=prefix,
- verbose=self.verbose, dry_run=self.dry_run)
+ force=self.force, prefix=prefix, dry_run=self.dry_run)
if self.optimize > 0:
byte_compile(files, optimize=self.optimize,
- force=self.force,
- prefix=prefix,
- verbose=self.verbose, dry_run=self.dry_run)
+ force=self.force, prefix=prefix, dry_run=self.dry_run)
# class build_py
diff --git a/Lib/distutils/command/build_scripts.py b/Lib/distutils/command/build_scripts.py
index 444284f..211ade4 100644
--- a/Lib/distutils/command/build_scripts.py
+++ b/Lib/distutils/command/build_scripts.py
@@ -11,6 +11,7 @@ from distutils import sysconfig
from distutils.core import Command
from distutils.dep_util import newer
from distutils.util import convert_path
+from distutils import log
# check if Python is called on the first line with this expression
first_line_re = re.compile(r'^#!.*python[0-9.]*(\s+.*)?$')
@@ -59,7 +60,7 @@ class build_scripts (Command):
outfile = os.path.join(self.build_dir, os.path.basename(script))
if not self.force and not newer(script, outfile):
- self.announce("not copying %s (up-to-date)" % script)
+ log.debug("not copying %s (up-to-date)", script)
continue
# Always open the file, but ignore failures in dry-run mode --
@@ -83,8 +84,8 @@ class build_scripts (Command):
post_interp = match.group(1) or ''
if adjust:
- self.announce("copying and adjusting %s -> %s" %
- (script, self.build_dir))
+ log.info("copying and adjusting %s -> %s", script,
+ self.build_dir)
if not self.dry_run:
outf = open(outfile, "w")
if not sysconfig.python_build:
diff --git a/Lib/distutils/command/clean.py b/Lib/distutils/command/clean.py
index b4a9be4..8fddeb4 100644
--- a/Lib/distutils/command/clean.py
+++ b/Lib/distutils/command/clean.py
@@ -9,6 +9,7 @@ __revision__ = "$Id$"
import os
from distutils.core import Command
from distutils.dir_util import remove_tree
+from distutils import log
class clean (Command):
@@ -51,10 +52,10 @@ class clean (Command):
# remove the build/temp.<plat> directory (unless it's already
# gone)
if os.path.exists(self.build_temp):
- remove_tree(self.build_temp, self.verbose, self.dry_run)
+ remove_tree(self.build_temp, dry_run=self.dry_run)
else:
- self.warn("'%s' does not exist -- can't clean it" %
- self.build_temp)
+ log.warn("'%s' does not exist -- can't clean it",
+ self.build_temp)
if self.all:
# remove build directories
@@ -62,17 +63,17 @@ class clean (Command):
self.bdist_base,
self.build_scripts):
if os.path.exists(directory):
- remove_tree(directory, self.verbose, self.dry_run)
+ remove_tree(directory, dry_run=self.dry_run)
else:
- self.warn("'%s' does not exist -- can't clean it" %
- directory)
+ 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)
- self.announce("removing '%s'" % self.build_base)
+ log.info("removing '%s'", self.build_base)
except OSError:
pass
diff --git a/Lib/distutils/command/config.py b/Lib/distutils/command/config.py
index 27c2cc1..d74aa6a 100644
--- a/Lib/distutils/command/config.py
+++ b/Lib/distutils/command/config.py
@@ -17,7 +17,7 @@ import sys, os, string, re
from types import *
from distutils.core import Command
from distutils.errors import DistutilsExecError
-
+from distutils import log
LANG_EXT = {'c': '.c',
'c++': '.cxx'}
@@ -103,9 +103,7 @@ class config (Command):
from distutils.ccompiler import CCompiler, new_compiler
if not isinstance(self.compiler, CCompiler):
self.compiler = new_compiler(compiler=self.compiler,
- verbose=self.noisy,
- dry_run=self.dry_run,
- force=1)
+ dry_run=self.dry_run, force=1)
if self.include_dirs:
self.compiler.set_include_dirs(self.include_dirs)
if self.libraries:
@@ -161,7 +159,7 @@ class config (Command):
if not filenames:
filenames = self.temp_files
self.temp_files = []
- self.announce("removing: " + string.join(filenames))
+ log.info("removing: %s", string.join(filenames))
for filename in filenames:
try:
os.remove(filename)
@@ -239,7 +237,7 @@ class config (Command):
except CompileError:
ok = 0
- self.announce(ok and "success!" or "failure.")
+ log.info(ok and "success!" or "failure.")
self._clean()
return ok
@@ -260,7 +258,7 @@ class config (Command):
except (CompileError, LinkError):
ok = 0
- self.announce(ok and "success!" or "failure.")
+ log.info(ok and "success!" or "failure.")
self._clean()
return ok
@@ -282,7 +280,7 @@ class config (Command):
except (CompileError, LinkError, DistutilsExecError):
ok = 0
- self.announce(ok and "success!" or "failure.")
+ log.info(ok and "success!" or "failure.")
self._clean()
return ok
diff --git a/Lib/distutils/command/install_lib.py b/Lib/distutils/command/install_lib.py
index 03b44ee..1e771c6 100644
--- a/Lib/distutils/command/install_lib.py
+++ b/Lib/distutils/command/install_lib.py
@@ -124,13 +124,11 @@ class install_lib (Command):
if self.compile:
byte_compile(files, optimize=0,
- force=self.force,
- prefix=install_root,
- verbose=self.verbose, dry_run=self.dry_run)
+ force=self.force, prefix=install_root,
+ dry_run=self.dry_run)
if self.optimize > 0:
byte_compile(files, optimize=self.optimize,
- force=self.force,
- prefix=install_root,
+ force=self.force, prefix=install_root,
verbose=self.verbose, dry_run=self.dry_run)
diff --git a/Lib/distutils/command/install_scripts.py b/Lib/distutils/command/install_scripts.py
index d4cbaa3..4044ba0 100644
--- a/Lib/distutils/command/install_scripts.py
+++ b/Lib/distutils/command/install_scripts.py
@@ -9,6 +9,7 @@ __revision__ = "$Id$"
import os
from distutils.core import Command
+from distutils import log
from stat import ST_MODE
class install_scripts (Command):
@@ -48,10 +49,10 @@ class install_scripts (Command):
# all the scripts we just installed.
for file in self.get_outputs():
if self.dry_run:
- self.announce("changing mode of %s" % file)
+ log.info("changing mode of %s to %o", file, mode)
else:
mode = ((os.stat(file)[ST_MODE]) | 0111) & 07777
- self.announce("changing mode of %s to %o" % (file, mode))
+ log.info("changing mode of %s to %o", file, mode)
os.chmod(file, mode)
def get_inputs (self):
diff --git a/Lib/distutils/command/sdist.py b/Lib/distutils/command/sdist.py
index fbd3c6d..082aa88 100644
--- a/Lib/distutils/command/sdist.py
+++ b/Lib/distutils/command/sdist.py
@@ -14,6 +14,7 @@ from distutils import dir_util, dep_util, file_util, archive_util
from distutils.text_file import TextFile
from distutils.errors import *
from distutils.filelist import FileList
+from distutils import log
def show_formats ():
@@ -233,31 +234,17 @@ class sdist (Command):
self.warn(("manifest template '%s' does not exist " +
"(using default file list)") %
self.template)
-
self.filelist.findall()
- # Add default file set to 'files'
if self.use_defaults:
self.add_defaults()
-
- # Read manifest template if it exists
if template_exists:
self.read_template()
-
- # Prune away any directories that don't belong in the source
- # distribution
if self.prune:
self.prune_file_list()
- # File list now complete -- sort it so that higher-level files
- # come first
self.filelist.sort()
-
- # Remove duplicates from the file list
self.filelist.remove_duplicates()
-
- # And write complete file list (including default file set) to
- # the manifest.
self.write_manifest()
# Don't regenerate the manifest, just read it in.
@@ -321,13 +308,12 @@ class sdist (Command):
def read_template (self):
+ """Read and parse manifest template file named by self.template.
- """Read and parse the manifest template file named by
- 'self.template' (usually "MANIFEST.in"). The parsing and
- processing is done by 'self.filelist', which updates itself
- accordingly.
+ (usually "MANIFEST.in") The parsing and processing is done by
+ 'self.filelist', which updates itself accordingly.
"""
- self.announce("reading manifest template '%s'" % self.template)
+ log.info("reading manifest template '%s'", self.template)
template = TextFile(self.template,
strip_comments=1,
skip_blanks=1,
@@ -384,7 +370,7 @@ class sdist (Command):
fill in 'self.filelist', the list of files to include in the source
distribution.
"""
- self.announce("reading manifest file '%s'" % self.manifest)
+ log.info("reading manifest file '%s'", self.manifest)
manifest = open(self.manifest)
while 1:
line = manifest.readline()
@@ -410,8 +396,7 @@ class sdist (Command):
# put 'files' there; the 'mkpath()' is just so we don't die
# if the manifest happens to be empty.
self.mkpath(base_dir)
- dir_util.create_tree(base_dir, files,
- verbose=self.verbose, dry_run=self.dry_run)
+ dir_util.create_tree(base_dir, files, dry_run=self.dry_run)
# And walk over the list of files, either making a hard link (if
# os.link exists) to each one that doesn't already exist in its
@@ -428,12 +413,12 @@ class sdist (Command):
msg = "copying files to %s..." % base_dir
if not files:
- self.warn("no files to distribute -- empty manifest?")
+ log.warn("no files to distribute -- empty manifest?")
else:
- self.announce(msg)
+ log.info(msg)
for file in files:
if not os.path.isfile(file):
- self.warn("'%s' not a regular file -- skipping" % file)
+ log.warn("'%s' not a regular file -- skipping" % file)
else:
dest = os.path.join(base_dir, file)
self.copy_file(file, dest, link=link)
@@ -464,7 +449,7 @@ class sdist (Command):
self.archive_files = archive_files
if not self.keep_temp:
- dir_util.remove_tree(base_dir, self.verbose, self.dry_run)
+ dir_util.remove_tree(base_dir, dry_run=self.dry_run)
def get_archive_files (self):
"""Return the list of archive files created when the command
diff --git a/Lib/distutils/core.py b/Lib/distutils/core.py
index 97a741c..222e6ae 100644
--- a/Lib/distutils/core.py
+++ b/Lib/distutils/core.py
@@ -100,7 +100,11 @@ def setup (**attrs):
try:
_setup_distribution = dist = klass(attrs)
except DistutilsSetupError, msg:
- raise SystemExit, "error in setup script: %s" % msg
+ if attrs.has_key('name'):
+ raise SystemExit, "error in %s setup command: %s" % \
+ (attrs['name'], msg)
+ else:
+ raise SystemExit, "error in setup command: %s" % msg
if _setup_stop_after == "init":
return dist
diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py
index 1d97282..3fb5bc9 100644
--- a/Lib/distutils/cygwinccompiler.py
+++ b/Lib/distutils/cygwinccompiler.py
@@ -50,6 +50,7 @@ from distutils.ccompiler import gen_preprocess_options, gen_lib_options
from distutils.unixccompiler import UnixCCompiler
from distutils.file_util import write_file
from distutils.errors import DistutilsExecError, CompileError, UnknownFileError
+from distutils import log
class CygwinCCompiler (UnixCCompiler):
@@ -148,7 +149,7 @@ class CygwinCCompiler (UnixCCompiler):
src = sources[i] ; obj = objects[i]
ext = (os.path.splitext (src))[1]
if skip_sources[src]:
- self.announce ("skipping %s (%s up-to-date)" % (src, obj))
+ log.debug("skipping %s (%s up-to-date)", src, obj)
else:
self.mkpath (os.path.dirname (obj))
if ext == '.rc' or ext == '.res':
diff --git a/Lib/distutils/dir_util.py b/Lib/distutils/dir_util.py
index 77007c9..8b3e06b 100644
--- a/Lib/distutils/dir_util.py
+++ b/Lib/distutils/dir_util.py
@@ -9,7 +9,7 @@ __revision__ = "$Id$"
import os
from types import *
from distutils.errors import DistutilsFileError, DistutilsInternalError
-
+from distutils import log
# cache for by mkpath() -- in addition to cheapening redundant calls,
# eliminates redundant "creating /foo/bar/baz" messages in dry-run mode
@@ -69,8 +69,7 @@ def mkpath (name, mode=0777, verbose=0, dry_run=0):
if _path_created.get(abs_head):
continue
- if verbose:
- print "creating", head
+ log.info("creating %s", head)
if not dry_run:
try:
@@ -105,7 +104,7 @@ def create_tree (base_dir, files, mode=0777, verbose=0, dry_run=0):
# Now create them
for dir in need_dirs:
- mkpath(dir, mode, verbose, dry_run)
+ mkpath(dir, mode, dry_run=dry_run)
# create_tree ()
@@ -151,7 +150,7 @@ def copy_tree (src, dst,
"error listing files in '%s': %s" % (src, errstr)
if not dry_run:
- mkpath(dst, verbose=verbose)
+ mkpath(dst)
outputs = []
@@ -161,21 +160,19 @@ def copy_tree (src, dst,
if preserve_symlinks and os.path.islink(src_name):
link_dest = os.readlink(src_name)
- if verbose:
- print "linking %s -> %s" % (dst_name, link_dest)
+ log.info("linking %s -> %s", dst_name, link_dest)
if not dry_run:
os.symlink(link_dest, dst_name)
outputs.append(dst_name)
elif os.path.isdir(src_name):
outputs.extend(
- copy_tree(src_name, dst_name,
- preserve_mode, preserve_times, preserve_symlinks,
- update, verbose, dry_run))
+ copy_tree(src_name, dst_name, preserve_mode,
+ preserve_times, preserve_symlinks, update,
+ dry_run=dry_run))
else:
- copy_file(src_name, dst_name,
- preserve_mode, preserve_times,
- update, None, verbose, dry_run)
+ copy_file(src_name, dst_name, preserve_mode,
+ preserve_times, update, dry_run=dry_run)
outputs.append(dst_name)
return outputs
@@ -200,8 +197,7 @@ def remove_tree (directory, verbose=0, dry_run=0):
from distutils.util import grok_environment_error
global _path_created
- if verbose:
- print "removing '%s' (and everything under it)" % directory
+ log.info("removing '%s' (and everything under it)", directory)
if dry_run:
return
cmdtuples = []
@@ -214,6 +210,5 @@ def remove_tree (directory, verbose=0, dry_run=0):
if _path_created.has_key(abspath):
del _path_created[abspath]
except (IOError, OSError), exc:
- if verbose:
- print grok_environment_error(
- exc, "error removing %s: " % directory)
+ log.warn(grok_environment_error(
+ exc, "error removing %s: " % directory))
diff --git a/Lib/distutils/dist.py b/Lib/distutils/dist.py
index b648f24..a84004f 100644
--- a/Lib/distutils/dist.py
+++ b/Lib/distutils/dist.py
@@ -15,7 +15,7 @@ from copy import copy
from distutils.errors import *
from distutils.fancy_getopt import FancyGetopt, translate_longopt
from distutils.util import check_environ, strtobool, rfc822_escape
-
+from distutils import log
# Regex to define acceptable Distutils command names. This is not *quite*
# the same as a Python NAME -- I don't allow leading underscores. The fact
@@ -46,7 +46,8 @@ class Distribution:
# since every global option is also valid as a command option -- and we
# don't want to pollute the commands with too many options that they
# have minimal control over.
- global_options = [('verbose', 'v', "run verbosely (default)"),
+ # The fourth entry for verbose means that it can be repeated.
+ global_options = [('verbose', 'v', "run verbosely (default)", 1),
('quiet', 'q', "run quietly (turns verbosity off)"),
('dry-run', 'n', "don't actually do anything"),
('help', 'h', "show detailed help message"),
@@ -392,6 +393,7 @@ class Distribution:
parser.set_aliases({'licence': 'license'})
args = parser.getopt(args=self.script_args, object=self)
option_order = parser.get_option_order()
+ log.set_verbosity(self.verbose)
# for display options we return immediately
if self.handle_display_options(option_order):
@@ -876,13 +878,7 @@ class Distribution:
# -- Methods that operate on the Distribution ----------------------
def announce (self, msg, level=1):
- """Print 'msg' if 'level' is greater than or equal to the verbosity
- level recorded in the 'verbose' attribute (which, currently, can be
- only 0 or 1).
- """
- if self.verbose >= level:
- print msg
-
+ log.debug(msg)
def run_commands (self):
"""Run each command that was seen on the setup script command line.
@@ -907,7 +903,7 @@ class Distribution:
if self.have_run.get(command):
return
- self.announce("running " + command)
+ log.info("running %s", command)
cmd_obj = self.get_command_obj(command)
cmd_obj.ensure_finalized()
cmd_obj.run()
diff --git a/Lib/distutils/emxccompiler.py b/Lib/distutils/emxccompiler.py
index 58a0d81..2788209 100644
--- a/Lib/distutils/emxccompiler.py
+++ b/Lib/distutils/emxccompiler.py
@@ -28,6 +28,7 @@ from distutils.ccompiler import gen_preprocess_options, gen_lib_options
from distutils.unixccompiler import UnixCCompiler
from distutils.file_util import write_file
from distutils.errors import DistutilsExecError, CompileError, UnknownFileError
+from distutils import log
class EMXCCompiler (UnixCCompiler):
@@ -109,7 +110,7 @@ class EMXCCompiler (UnixCCompiler):
src = sources[i] ; obj = objects[i]
ext = (os.path.splitext (src))[1]
if skip_sources[src]:
- self.announce ("skipping %s (%s up-to-date)" % (src, obj))
+ log.debug("skipping %s (%s up-to-date)", src, obj)
else:
self.mkpath (os.path.dirname (obj))
if ext == '.rc':
diff --git a/Lib/distutils/fancy_getopt.py b/Lib/distutils/fancy_getopt.py
index e65302f..fe9b0d4 100644
--- a/Lib/distutils/fancy_getopt.py
+++ b/Lib/distutils/fancy_getopt.py
@@ -157,13 +157,18 @@ class FancyGetopt:
self.long_opts = []
self.short_opts = []
self.short2long.clear()
+ self.repeat = {}
for option in self.option_table:
- try:
- (long, short, help) = option
- except ValueError:
- raise DistutilsGetoptError, \
- "invalid option tuple " + str(option)
+ if len(option) == 3:
+ long, short, help = option
+ repeat = 0
+ elif len(option) == 4:
+ long, short, help, repeat = option
+ else:
+ # the option table is part of the code, so simply
+ # assert that it is correct
+ assert "invalid option tuple: %s" % `option`
# Type- and value-check the option names
if type(long) is not StringType or len(long) < 2:
@@ -177,6 +182,7 @@ class FancyGetopt:
("invalid short option '%s': "
"must a single character or None") % short
+ self.repeat[long] = 1
self.long_opts.append(long)
if long[-1] == '=': # option takes an argument?
@@ -232,14 +238,15 @@ class FancyGetopt:
def getopt (self, args=None, object=None):
- """Parse the command-line options in 'args' and store the results
- as attributes of 'object'. If 'args' is None or not supplied, uses
- 'sys.argv[1:]'. If 'object' is None or not supplied, creates a new
- OptionDummy object, stores option values there, and returns a tuple
- (args, object). If 'object' is supplied, it is modified in place
- and 'getopt()' just returns 'args'; in both cases, the returned
- 'args' is a modified copy of the passed-in 'args' list, which is
- left untouched.
+ """Parse command-line options in args. Store as attributes on object.
+
+ If 'args' is None or not supplied, uses 'sys.argv[1:]'. If
+ 'object' is None or not supplied, creates a new OptionDummy
+ object, stores option values there, and returns a tuple (args,
+ object). If 'object' is supplied, it is modified in place and
+ 'getopt()' just returns 'args'; in both cases, the returned
+ 'args' is a modified copy of the passed-in 'args' list, which
+ is left untouched.
"""
if args is None:
args = sys.argv[1:]
@@ -253,30 +260,23 @@ class FancyGetopt:
short_opts = string.join(self.short_opts)
try:
- (opts, args) = getopt.getopt(args, short_opts, self.long_opts)
+ opts, args = getopt.getopt(args, short_opts, self.long_opts)
except getopt.error, msg:
raise DistutilsArgError, msg
- for (opt, val) in opts:
+ for opt, val in opts:
if len(opt) == 2 and opt[0] == '-': # it's a short option
opt = self.short2long[opt[1]]
-
- elif len(opt) > 2 and opt[0:2] == '--':
- opt = opt[2:]
-
else:
- raise DistutilsInternalError, \
- "this can't happen: bad option string '%s'" % opt
+ assert len(opt) > 2 and opt[:2] == '--'
+ opt = opt[2:]
alias = self.alias.get(opt)
if alias:
opt = alias
if not self.takes_arg[opt]: # boolean option?
- if val != '': # shouldn't have a value!
- raise DistutilsInternalError, \
- "this can't happen: bad option value '%s'" % val
-
+ assert val == '', "boolean option can't have value"
alias = self.negative_alias.get(opt)
if alias:
opt = alias
@@ -285,13 +285,16 @@ class FancyGetopt:
val = 1
attr = self.attr_name[opt]
+ # The only repeating option at the moment is 'verbose'.
+ # It has a negative option -q quiet, which should set verbose = 0.
+ if val and self.repeat.get(attr) is not None:
+ val = getattr(object, attr, 0) + 1
setattr(object, attr, val)
self.option_order.append((opt, val))
# for opts
-
if created_object:
- return (args, object)
+ return args, object
else:
return args
diff --git a/Lib/distutils/file_util.py b/Lib/distutils/file_util.py
index 14772fb..56b1fae 100644
--- a/Lib/distutils/file_util.py
+++ b/Lib/distutils/file_util.py
@@ -9,7 +9,7 @@ __revision__ = "$Id$"
import os
from distutils.errors import DistutilsFileError
-
+from distutils import log
# for generating verbose output in 'copy_file()'
_copy_action = { None: 'copying',
@@ -73,7 +73,6 @@ def _copy_file_contents (src, dst, buffer_size=16*1024):
# _copy_file_contents()
-
def copy_file (src, dst,
preserve_mode=1,
preserve_times=1,
@@ -90,8 +89,7 @@ def copy_file (src, dst,
'preserve_times' is true (the default), the last-modified and
last-access times are copied as well. If 'update' is true, 'src' will
only be copied if 'dst' does not exist, or if 'dst' does exist but is
- older than 'src'. If 'verbose' is true, then a one-line summary of the
- copy will be printed to stdout.
+ older than 'src'.
'link' allows you to make hard links (os.link) or symbolic links
(os.symlink) instead of copying: set it to "hard" or "sym"; if it is
@@ -127,20 +125,18 @@ def copy_file (src, dst,
dir = os.path.dirname(dst)
if update and not newer(src, dst):
- if verbose:
- print "not copying %s (output up-to-date)" % src
- return (dst, 0)
+ log.debug("not copying %s (output up-to-date)", src)
+ return dst, 0
try:
action = _copy_action[link]
except KeyError:
raise ValueError, \
"invalid value '%s' for 'link' argument" % link
- if verbose:
- if os.path.basename(dst) == os.path.basename(src):
- print "%s %s -> %s" % (action, src, dir)
- else:
- print "%s %s -> %s" % (action, src, dst)
+ if os.path.basename(dst) == os.path.basename(src):
+ log.info("%s %s -> %s", action, src, dir)
+ else:
+ log.info("%s %s -> %s", action, src, dst)
if dry_run:
return (dst, 1)
@@ -197,8 +193,7 @@ def move_file (src, dst,
from os.path import exists, isfile, isdir, basename, dirname
import errno
- if verbose:
- print "moving %s -> %s" % (src, dst)
+ log.info("moving %s -> %s", src, dst)
if dry_run:
return dst
diff --git a/Lib/distutils/filelist.py b/Lib/distutils/filelist.py
index f7222fd..d39c835 100644
--- a/Lib/distutils/filelist.py
+++ b/Lib/distutils/filelist.py
@@ -37,27 +37,19 @@ class FileList:
def __init__(self,
warn=None,
debug_print=None):
- # use standard warning and debug functions if no other given
- self.warn = warn or self.__warn
- self.debug_print = debug_print or self.__debug_print
+ # ignore argument to FileList, but keep them for backwards
+ # compatibility
self.allfiles = None
self.files = []
-
def set_allfiles (self, allfiles):
self.allfiles = allfiles
def findall (self, dir=os.curdir):
self.allfiles = findall(dir)
-
- # -- Fallback warning/debug functions ------------------------------
-
- def __warn (self, msg):
- sys.stderr.write("warning: %s\n" % msg)
-
- def __debug_print (self, msg):
+ def debug_print (self, msg):
"""Print 'msg' to stdout if the global DEBUG (taken from the
DISTUTILS_DEBUG environment variable) flag is true.
"""
@@ -65,7 +57,6 @@ class FileList:
if DEBUG:
print msg
-
# -- List-like methods ---------------------------------------------
def append (self, item):
@@ -87,8 +78,8 @@ class FileList:
def remove_duplicates (self):
# Assumes list has been sorted!
- for i in range(len(self.files)-1, 0, -1):
- if self.files[i] == self.files[i-1]:
+ for i in range(len(self.files) - 1, 0, -1):
+ if self.files[i] == self.files[i - 1]:
del self.files[i]
@@ -147,61 +138,60 @@ class FileList:
self.debug_print("include " + string.join(patterns))
for pattern in patterns:
if not self.include_pattern(pattern, anchor=1):
- self.warn("no files found matching '%s'" % pattern)
+ log.warn("warning: no files found matching '%s'",
+ pattern)
elif action == 'exclude':
self.debug_print("exclude " + string.join(patterns))
for pattern in patterns:
if not self.exclude_pattern(pattern, anchor=1):
- self.warn(
- "no previously-included files found matching '%s'"%
- pattern)
+ log.warn(("warning: no previously-included files "
+ "found matching '%s'"), pattern)
elif action == 'global-include':
self.debug_print("global-include " + string.join(patterns))
for pattern in patterns:
if not self.include_pattern(pattern, anchor=0):
- self.warn(("no files found matching '%s' " +
- "anywhere in distribution") %
- pattern)
+ log.warn(("warning: no files found matching '%s' " +
+ "anywhere in distribution"), pattern)
elif action == 'global-exclude':
self.debug_print("global-exclude " + string.join(patterns))
for pattern in patterns:
if not self.exclude_pattern(pattern, anchor=0):
- self.warn(("no previously-included files matching '%s' " +
- "found anywhere in distribution") %
- pattern)
+ log.warn(("warning: no previously-included files matching "
+ "'%s' found anywhere in distribution"),
+ pattern)
elif action == 'recursive-include':
self.debug_print("recursive-include %s %s" %
(dir, string.join(patterns)))
for pattern in patterns:
if not self.include_pattern(pattern, prefix=dir):
- self.warn(("no files found matching '%s' " +
- "under directory '%s'") %
- (pattern, dir))
+ log.warn(("warngin: no files found matching '%s' " +
+ "under directory '%s'"),
+ pattern, dir)
elif action == 'recursive-exclude':
self.debug_print("recursive-exclude %s %s" %
(dir, string.join(patterns)))
for pattern in patterns:
if not self.exclude_pattern(pattern, prefix=dir):
- self.warn(("no previously-included files matching '%s' " +
- "found under directory '%s'") %
- (pattern, dir))
+ log.warn(("warning: no previously-included files matching "
+ "'%s' found under directory '%s'"),
+ pattern, dir)
elif action == 'graft':
self.debug_print("graft " + dir_pattern)
if not self.include_pattern(None, prefix=dir_pattern):
- self.warn("no directories found matching '%s'" % dir_pattern)
+ log.warn("warning: no directories found matching '%s'",
+ dir_pattern)
elif action == 'prune':
self.debug_print("prune " + dir_pattern)
if not self.exclude_pattern(None, prefix=dir_pattern):
- self.warn(("no previously-included directories found " +
- "matching '%s'") %
- dir_pattern)
+ log.warn(("no previously-included directories found " +
+ "matching '%s'"), dir_pattern)
else:
raise DistutilsInternalError, \
"this cannot happen: invalid action '%s'" % action
diff --git a/Lib/distutils/msvccompiler.py b/Lib/distutils/msvccompiler.py
index 73cd442..ade8172 100644
--- a/Lib/distutils/msvccompiler.py
+++ b/Lib/distutils/msvccompiler.py
@@ -17,6 +17,7 @@ from distutils.errors import \
CompileError, LibError, LinkError
from distutils.ccompiler import \
CCompiler, gen_preprocess_options, gen_lib_options
+from distutils import log
_can_read_reg = 0
try:
@@ -305,7 +306,7 @@ class MSVCCompiler (CCompiler) :
ext = (os.path.splitext (src))[1]
if skip_sources[src]:
- self.announce ("skipping %s (%s up-to-date)" % (src, obj))
+ log.debug("skipping %s (%s up-to-date)", src, obj)
else:
self.mkpath (os.path.dirname (obj))
@@ -403,7 +404,7 @@ class MSVCCompiler (CCompiler) :
raise LibError, msg
else:
- self.announce ("skipping %s (up-to-date)" % output_filename)
+ log.debug("skipping %s (up-to-date)", output_filename)
# create_static_lib ()
@@ -480,7 +481,7 @@ class MSVCCompiler (CCompiler) :
raise LinkError, msg
else:
- self.announce ("skipping %s (up-to-date)" % output_filename)
+ log.debug("skipping %s (up-to-date)", output_filename)
# link ()
diff --git a/Lib/distutils/mwerkscompiler.py b/Lib/distutils/mwerkscompiler.py
index 7c77b8b..6242f12 100644
--- a/Lib/distutils/mwerkscompiler.py
+++ b/Lib/distutils/mwerkscompiler.py
@@ -13,6 +13,7 @@ from distutils.ccompiler import \
CCompiler, gen_preprocess_options, gen_lib_options
import distutils.util
import distutils.dir_util
+from distutils import log
import mkcwproject
class MWerksCompiler (CCompiler) :
@@ -132,8 +133,8 @@ class MWerksCompiler (CCompiler) :
exportname = basename + '.mcp.exp'
prefixname = 'mwerks_%s_config.h'%basename
# Create the directories we need
- distutils.dir_util.mkpath(build_temp, self.verbose, self.dry_run)
- distutils.dir_util.mkpath(output_dir, self.verbose, self.dry_run)
+ distutils.dir_util.mkpath(build_temp, dry_run=self.dry_run)
+ distutils.dir_util.mkpath(output_dir, dry_run=self.dry_run)
# And on to filling in the parameters for the project builder
settings = {}
settings['mac_exportname'] = exportname
@@ -159,8 +160,7 @@ class MWerksCompiler (CCompiler) :
return
# Build the export file
exportfilename = os.path.join(build_temp, exportname)
- if self.verbose:
- print '\tCreate export file', exportfilename
+ log.debug("\tCreate export file", exportfilename)
fp = open(exportfilename, 'w')
fp.write('%s\n'%export_symbols[0])
fp.close()
@@ -181,8 +181,7 @@ class MWerksCompiler (CCompiler) :
# because we pass this pathname to CodeWarrior in an AppleEvent, and CW
# doesn't have a clue about our working directory.
xmlfilename = os.path.join(os.getcwd(), os.path.join(build_temp, xmlname))
- if self.verbose:
- print '\tCreate XML file', xmlfilename
+ log.debug("\tCreate XML file", xmlfilename)
xmlbuilder = mkcwproject.cwxmlgen.ProjectBuilder(settings)
xmlbuilder.generate()
xmldata = settings['tmp_projectxmldata']
@@ -191,12 +190,10 @@ class MWerksCompiler (CCompiler) :
fp.close()
# Generate the project. Again a full pathname.
projectfilename = os.path.join(os.getcwd(), os.path.join(build_temp, projectname))
- if self.verbose:
- print '\tCreate project file', projectfilename
+ log.debug('\tCreate project file', projectfilename)
mkcwproject.makeproject(xmlfilename, projectfilename)
# And build it
- if self.verbose:
- print '\tBuild project'
+ log.debug('\tBuild project')
mkcwproject.buildproject(projectfilename)
def _filename_to_abs(self, filename):
diff --git a/Lib/distutils/spawn.py b/Lib/distutils/spawn.py
index 5b6016e..4df6e09 100644
--- a/Lib/distutils/spawn.py
+++ b/Lib/distutils/spawn.py
@@ -12,7 +12,7 @@ __revision__ = "$Id$"
import sys, os, string
from distutils.errors import *
-
+from distutils import log
def spawn (cmd,
search_path=1,
@@ -27,19 +27,18 @@ def spawn (cmd,
If 'search_path' is true (the default), the system's executable search
path will be used to find the program; otherwise, cmd[0] must be the
- exact path to the executable. If 'verbose' is true, a one-line summary
- of the command will be printed before it is run. If 'dry_run' is true,
+ exact path to the executable.If 'dry_run' is true,
the command will not actually be run.
Raise DistutilsExecError if running the program fails in any way; just
return on success.
"""
if os.name == 'posix':
- _spawn_posix(cmd, search_path, verbose, dry_run)
+ _spawn_posix(cmd, search_path, dry_run=dry_run)
elif os.name == 'nt':
- _spawn_nt(cmd, search_path, verbose, dry_run)
+ _spawn_nt(cmd, search_path, dry_run=dry_run)
elif os.name == 'os2':
- _spawn_os2(cmd, search_path, verbose, dry_run)
+ _spawn_os2(cmd, search_path, dry_run=dry_run)
else:
raise DistutilsPlatformError, \
"don't know how to spawn programs on platform '%s'" % os.name
@@ -74,8 +73,7 @@ def _spawn_nt (cmd,
if search_path:
# either we find one or it stays the same
executable = find_executable(executable) or executable
- if verbose:
- print string.join([executable] + cmd[1:], ' ')
+ log.info(string.join([executable] + cmd[1:], ' '))
if not dry_run:
# spawn for NT requires a full path to the .exe
try:
@@ -100,8 +98,7 @@ def _spawn_os2 (cmd,
if search_path:
# either we find one or it stays the same
executable = find_executable(executable) or executable
- if verbose:
- print string.join([executable] + cmd[1:], ' ')
+ log.info(string.join([executable] + cmd[1:], ' '))
if not dry_run:
# spawnv for OS/2 EMX requires a full path to the .exe
try:
@@ -122,8 +119,7 @@ def _spawn_posix (cmd,
verbose=0,
dry_run=0):
- if verbose:
- print string.join(cmd, ' ')
+ log.info(string.join(cmd, ' '))
if dry_run:
return
exec_fn = search_path and os.execvp or os.execv
diff --git a/Lib/distutils/unixccompiler.py b/Lib/distutils/unixccompiler.py
index 7e63c56..55a51b3 100644
--- a/Lib/distutils/unixccompiler.py
+++ b/Lib/distutils/unixccompiler.py
@@ -26,6 +26,7 @@ from distutils.ccompiler import \
CCompiler, gen_preprocess_options, gen_lib_options
from distutils.errors import \
DistutilsExecError, CompileError, LibError, LinkError
+from distutils import log
# XXX Things not currently handled:
# * optimization/debug/warning flags; we just use whatever's in Python's
@@ -147,7 +148,7 @@ class UnixCCompiler (CCompiler):
for i in range(len(sources)):
src = sources[i] ; obj = objects[i]
if skip_sources[src]:
- self.announce("skipping %s (%s up-to-date)" % (src, obj))
+ log.debug("skipping %s (%s up-to-date)", src, obj)
else:
self.mkpath(os.path.dirname(obj))
try:
@@ -191,7 +192,7 @@ class UnixCCompiler (CCompiler):
except DistutilsExecError, msg:
raise LibError, msg
else:
- self.announce("skipping %s (up-to-date)" % output_filename)
+ log.debug("skipping %s (up-to-date)", output_filename)
# create_static_lib ()
@@ -240,7 +241,7 @@ class UnixCCompiler (CCompiler):
except DistutilsExecError, msg:
raise LinkError, msg
else:
- self.announce("skipping %s (up-to-date)" % output_filename)
+ log.debug("skipping %s (up-to-date)", output_filename)
# link ()
diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py
index d079588..23c29eb 100644
--- a/Lib/distutils/util.py
+++ b/Lib/distutils/util.py
@@ -12,7 +12,7 @@ import sys, os, string, re
from distutils.errors import DistutilsPlatformError
from distutils.dep_util import newer
from distutils.spawn import spawn
-
+from distutils import log
def get_platform ():
"""Return a string that identifies the current platform. This is used
@@ -275,33 +275,27 @@ def split_quoted (s):
def execute (func, args, msg=None, verbose=0, dry_run=0):
- """Perform some action that affects the outside world (eg. by writing
- to the filesystem). Such actions are special because they are disabled
- by the 'dry_run' flag, and announce themselves if 'verbose' is true.
- This method takes care of all that bureaucracy for you; all you have to
- do is supply the function to call and an argument tuple for it (to
- embody the "external action" being performed), and an optional message
- to print.
+ """Perform some action that affects the outside world (eg. by
+ writing to the filesystem). Such actions are special because they
+ are disabled by the 'dry_run' flag. This method takes care of all
+ that bureaucracy for you; all you have to do is supply the
+ function to call and an argument tuple for it (to embody the
+ "external action" being performed), and an optional message to
+ print.
"""
- # Generate a message if we weren't passed one
if msg is None:
msg = "%s%s" % (func.__name__, `args`)
if msg[-2:] == ',)': # correct for singleton tuple
msg = msg[0:-2] + ')'
- # Print it if verbosity level is high enough
- if verbose:
- print msg
-
- # And do it, as long as we're not in dry-run mode
+ log.info(msg)
if not dry_run:
apply(func, args)
-# execute()
-
def strtobool (val):
"""Convert a string representation of truth to true (1) or false (0).
+
True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values
are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if
'val' is anything else.
@@ -337,8 +331,8 @@ def byte_compile (py_files,
prepended (after 'prefix' is stripped). You can supply either or both
(or neither) of 'prefix' and 'base_dir', as you wish.
- If 'verbose' is true, prints out a report of each file. If 'dry_run'
- is true, doesn't actually do anything that would affect the filesystem.
+ If 'dry_run' is true, doesn't actually do anything that would
+ affect the filesystem.
Byte-compilation is either done directly in this interpreter process
with the standard py_compile module, or indirectly by writing a
@@ -367,8 +361,7 @@ def byte_compile (py_files,
if not direct:
from tempfile import mktemp
script_name = mktemp(".py")
- if verbose:
- print "writing byte-compilation script '%s'" % script_name
+ log.info("writing byte-compilation script '%s'", script_name)
if not dry_run:
script = open(script_name, "w")
@@ -406,9 +399,9 @@ byte_compile(files, optimize=%s, force=%s,
cmd.insert(1, "-O")
elif optimize == 2:
cmd.insert(1, "-OO")
- spawn(cmd, verbose=verbose, dry_run=dry_run)
+ spawn(cmd, dry_run=dry_run)
execute(os.remove, (script_name,), "removing %s" % script_name,
- verbose=verbose, dry_run=dry_run)
+ dry_run=dry_run)
# "Direct" byte-compilation: use the py_compile module to compile
# right here, right now. Note that the script generated in indirect
@@ -440,14 +433,12 @@ byte_compile(files, optimize=%s, force=%s,
cfile_base = os.path.basename(cfile)
if direct:
if force or newer(file, cfile):
- if verbose:
- print "byte-compiling %s to %s" % (file, cfile_base)
+ log.info("byte-compiling %s to %s", file, cfile_base)
if not dry_run:
compile(file, cfile, dfile)
else:
- if verbose:
- print "skipping byte-compilation of %s to %s" % \
- (file, cfile_base)
+ log.debug("skipping byte-compilation of %s to %s",
+ file, cfile_base)
# byte_compile ()