diff --git a/mypyc/build.py b/mypyc/build.py
index fad0995..09787b7 100644
--- a/mypyc/build.py
+++ b/mypyc/build.py
@@ -285,22 +285,30 @@
     """
     # We encode it ourselves and open the files as binary to avoid windows
     # newline translation
+    from stat import ST_MTIME
+
     encoded_contents = contents.encode('utf-8')
     try:
         with open(path, 'rb') as f:
             old_contents = f.read()  # type: Optional[bytes]
+            old_mtime = os.stat(path)[ST_MTIME]
     except IOError:
         old_contents = None
+        old_mtime = 0
     if old_contents != encoded_contents:
         with open(path, 'wb') as f:
             f.write(encoded_contents)
 
+
+        new_mtime = os.stat(path)[ST_MTIME]
+
+        print("Wrote", path, old_mtime, new_mtime)
         # Fudge the mtime forward because otherwise when two builds happen close
         # together (like in a test) setuptools might not realize the source is newer
         # than the new artifact.
         # XXX: This is bad though.
-        new_mtime = os.stat(path).st_mtime + 1
-        os.utime(path, times=(new_mtime, new_mtime))
+        #new_mtime = os.stat(path).st_mtime + 1
+        # os.utime(path, times=(new_mtime, new_mtime))
 
 
 def construct_groups(
diff --git a/mypyc/test/test_run.py b/mypyc/test/test_run.py
index cd999d5..188367e 100644
--- a/mypyc/test/test_run.py
+++ b/mypyc/test/test_run.py
@@ -7,7 +7,6 @@
 import re
 import subprocess
 import contextlib
-import time
 import shutil
 import sys
 from typing import Any, Iterator, List, cast
@@ -45,6 +44,7 @@
 from mypyc.build import mypycify
 
 setup(name='test_run_output',
+      verbose=True,
       ext_modules=mypycify({}, separate={}, skip_cgen_input={!r}, strip_asserts=False,
                            multi_file={}),
 )
@@ -100,6 +100,15 @@
         os.chdir(dir)
 
 
+def fudge_dir_mtimes(dir: str, delta: int) -> None:
+    for dirpath, _, filenames in os.walk(dir):
+        for name in filenames:
+            # if name.endswith(('.c', '.h')): continue
+            path = os.path.join(dirpath, name)
+            new_mtime = os.stat(path).st_mtime + delta
+            os.utime(path, times=(new_mtime, new_mtime))
+
+
 class TestRun(MypycDataSuite):
     """Test cases that build a C extension and run code."""
     files = files
@@ -135,8 +144,10 @@
             steps = []
 
         for operations in steps:
-            if sys.platform.startswith('win'):
-                time.sleep(1)
+            # To make sure that any new changes get picked up as being
+            # new by distutils, shift the mtime of all of the
+            # generated artifacts back by a second.
+            fudge_dir_mtimes(WORKDIR, -2)
 
             step += 1
             with chdir_manager('..'):
@@ -232,7 +243,7 @@
         with open(setup_file, 'w', encoding='utf-8') as f:
             f.write(setup_format.format(module_paths, separate, cfiles, self.multi_file))
 
-        if not run_setup(setup_file, ['build_ext', '--inplace']):
+        if not run_setup(setup_file, ['--verbose', 'build_ext', '--inplace']):
             if testcase.config.getoption('--mypyc-showc'):
                 show_c(cfiles)
             assert False, "Compilation failed"
