diff --git a/Lib/distutils/cmd.py b/Lib/distutils/cmd.py
index 4669dc2..295c914 100644
--- a/Lib/distutils/cmd.py
+++ b/Lib/distutils/cmd.py
@@ -155,15 +155,15 @@
         from distutils.fancy_getopt import longopt_xlate
         if header is None:
             header = "command options for '%s':" % self.get_command_name()
-        print(indent + header)
+        self.announce(indent + header, level=log.INFO)
         indent = indent + "  "
         for (option, _, _) in self.user_options:
             option = longopt_xlate(option)
             if option[-1] == "=":
                 option = option[:-1]
             value = getattr(self, option)
-            print(indent + "%s = %s" % (option, value))
-
+            self.announce(indent + "%s = %s" % (option, value),
+                          level=log.INFO)
 
     def run(self):
         """A command's raison d'etre: carry out the action it exists to
@@ -383,12 +383,9 @@
         and it is true, then the command is unconditionally run -- does no
         timestamp checks.
         """
-        if exec_msg is None:
-            exec_msg = "generating %s from %s" % (outfile, ', '.join(infiles))
         if skip_msg is None:
             skip_msg = "skipping %s (inputs unchanged)" % outfile
 
-
         # Allow 'infiles' to be a single string
         if isinstance(infiles, str):
             infiles = (infiles,)
@@ -396,10 +393,13 @@
             raise TypeError(
                   "'infiles' must be a string, or a list or tuple of strings")
 
+        if exec_msg is None:
+            exec_msg = "generating %s from %s" % (outfile, ', '.join(infiles))
+
         # If 'outfile' must be regenerated (either because it doesn't
         # exist, is out-of-date, or the 'force' flag is true) then
         # perform the action that presumably regenerates it
-        if self.force or dep_util.newer_group (infiles, outfile):
+        if self.force or dep_util.newer_group(infiles, outfile):
             self.execute(func, args, exec_msg, level)
         # Otherwise, print the "skip" message
         else:
diff --git a/Lib/distutils/tests/test_cmd.py b/Lib/distutils/tests/test_cmd.py
index 19079c0..a252c35 100644
--- a/Lib/distutils/tests/test_cmd.py
+++ b/Lib/distutils/tests/test_cmd.py
@@ -5,23 +5,23 @@
 from distutils.dist import Distribution
 from distutils.errors import DistutilsOptionError
 
+class MyCmd(Command):
+    def initialize_options(self):
+        pass
+
 class CommandTestCase(unittest.TestCase):
 
+    def setUp(self):
+        dist = Distribution()
+        self.cmd = MyCmd(dist)
+
     def test_ensure_string_list(self):
 
-        class MyCmd(Command):
-
-            def initialize_options(self):
-                pass
-
-        dist = Distribution()
-        cmd = MyCmd(dist)
-
+        cmd = self.cmd
         cmd.not_string_list = ['one', 2, 'three']
         cmd.yes_string_list = ['one', 'two', 'three']
         cmd.not_string_list2 = object()
         cmd.yes_string_list2 = 'ok'
-
         cmd.ensure_string_list('yes_string_list')
         cmd.ensure_string_list('yes_string_list2')
 
@@ -31,6 +31,37 @@
         self.assertRaises(DistutilsOptionError,
                           cmd.ensure_string_list, 'not_string_list2')
 
+    def test_make_file(self):
+
+        cmd = self.cmd
+
+        # making sure it raises when infiles is not a string or a list/tuple
+        self.assertRaises(TypeError, cmd.make_file,
+                          infiles=1, outfile='', func='func', args=())
+
+        # making sure execute gets called properly
+        def _execute(func, args, exec_msg, level):
+            self.assertEquals(exec_msg, 'generating out from in')
+        cmd.force = True
+        cmd.execute = _execute
+        cmd.make_file(infiles='in', outfile='out', func='func', args=())
+
+    def test_dump_options(self):
+
+        msgs = []
+        def _announce(msg, level):
+            msgs.append(msg)
+        cmd = self.cmd
+        cmd.announce = _announce
+        cmd.option1 = 1
+        cmd.option2 = 1
+        cmd.user_options = [('option1', '', ''), ('option2', '', '')]
+        cmd.dump_options()
+
+        wanted = ["command options for 'MyCmd':", '  option1 = 1',
+                  '  option2 = 1']
+        self.assertEquals(msgs, wanted)
+
 def test_suite():
     return unittest.makeSuite(CommandTestCase)
 
