diff --git a/Lib/distutils/core.py b/Lib/distutils/core.py
index 980ba5b..4b8c783 100644
--- a/Lib/distutils/core.py
+++ b/Lib/distutils/core.py
@@ -636,10 +636,10 @@
                    preserve_mode=1, preserve_times=1, update=1, level=1):
         """Copy a file respecting verbose and dry-run flags."""
 
-        util.copy_file (infile, outfile,
-                        preserve_mode, preserve_times,
-                        update, self.distribution.verbose >= level,
-                        self.distribution.dry_run)
+        return util.copy_file (infile, outfile,
+                               preserve_mode, preserve_times,
+                               update, self.distribution.verbose >= level,
+                               self.distribution.dry_run)
 
 
     def copy_tree (self, infile, outfile,
@@ -648,10 +648,10 @@
         """Copy an entire directory tree respecting verbose and dry-run
            flags."""
 
-        util.copy_tree (infile, outfile, 
-                        preserve_mode, preserve_times, preserve_symlinks,
-                        update, self.distribution.verbose >= level,
-                        self.distribution.dry_run)
+        return util.copy_tree (infile, outfile, 
+                               preserve_mode,preserve_times,preserve_symlinks,
+                               update, self.distribution.verbose >= level,
+                               self.distribution.dry_run)
 
 
     def make_file (self, infiles, outfile, func, args,
diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py
index f4a1df7..7aedc1c 100644
--- a/Lib/distutils/util.py
+++ b/Lib/distutils/util.py
@@ -164,7 +164,11 @@
        '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."""
+       printed to stdout.
+
+       Return true if the file was copied (or would have been copied),
+       false otherwise (ie. 'update' was true and the destination is
+       up-to-date)."""
 
     # XXX doesn't copy Mac-specific metadata
        
@@ -181,14 +185,15 @@
         dir = os.path.dirname (dst)
 
     if update and not newer (src, dst):
-        print "not copying %s (output up-to-date)" % src
-        return
+        if verbose:
+            print "not copying %s (output up-to-date)" % src
+        return 0
 
     if verbose:
         print "copying %s -> %s" % (src, dir)
 
     if dry_run:
-        return
+        return 1
 
     _copy_file_contents (src, dst)
     if preserve_mode or preserve_times:
@@ -198,6 +203,8 @@
         if preserve_times:
             os.utime (dst, (st[ST_ATIME], st[ST_MTIME]))
 
+    return 1
+
 # copy_file ()
 
 
@@ -213,9 +220,12 @@
     """Copy an entire directory tree 'src' to a new location 'dst'.  Both
        'src' and 'dst' must be directory names.  If 'src' is not a
        directory, raise DistutilsFileError.  If 'dst' does not exist, it
-       is created with 'mkpath'.  The endresult of the copy is that
+       is created with 'mkpath'.  The end result of the copy is that
        every file in 'src' is copied to 'dst', and directories under
-       'src' are recursively copied to 'dst'.
+       'src' are recursively copied to 'dst'.  Return the list of files
+       copied (under their output names) -- note that if 'update' is true,
+       this might be less than the list of files considered.  Return
+       value is not affected by 'dry_run'.
 
        'preserve_mode' and 'preserve_times' are the same as for
        'copy_file'; note that they only apply to regular files, not to
@@ -236,6 +246,8 @@
     if not dry_run:
         mkpath (dst, verbose=verbose)
 
+    outputs = []
+
     for n in names:
         src_name = os.path.join (src, n)
         dst_name = os.path.join (dst, n)
@@ -246,13 +258,19 @@
                 print "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):
-            copy_tree (src_name, dst_name,
-                       preserve_mode, preserve_times, preserve_symlinks,
-                       update, verbose, dry_run)
+            outputs[-1:] = \
+                copy_tree (src_name, dst_name,
+                           preserve_mode, preserve_times, preserve_symlinks,
+                           update, verbose, dry_run)
         else:
-            copy_file (src_name, dst_name,
-                       preserve_mode, preserve_times,
-                       update, verbose, dry_run)
+            if (copy_file (src_name, dst_name,
+                           preserve_mode, preserve_times,
+                           update, verbose, dry_run)):
+                outputs.append (dst_name)
+
+    return outputs
 
 # copy_tree ()
