diff --git a/tools/buildgen/generate_projects.py b/tools/buildgen/generate_projects.py
index db6b5050da61832db2a77518bc1d04a20727c41a..c3e2b12051626380e1e7bb13375e3bddf3c53e92 100755
--- a/tools/buildgen/generate_projects.py
+++ b/tools/buildgen/generate_projects.py
@@ -31,6 +31,7 @@
 
 import glob
 import os
+import shutil
 import sys
 import tempfile
 sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), '..', 'run_tests'))
@@ -76,5 +77,9 @@ jobset.run(jobs)
 
 if test is not None:
   for s, g in test.iteritems():
-    assert(0 == os.system('diff %s %s' % (s, g)))
-    os.unlink(g)
+    if os.path.isfile(g):
+      assert(0 == os.system('diff %s %s' % (s, g)))
+      os.unlink(g)
+    else:
+      assert(0 == os.system('diff -r %s %s' % (s, g)))
+      shutil.rmtree(g, ignore_errors=True)
diff --git a/tools/buildgen/mako_renderer.py b/tools/buildgen/mako_renderer.py
index 08307bda5a8ccafba9eb92f042df203acc39962e..abb8df2141ac33a2f63e06a05243e306fdd62257 100755
--- a/tools/buildgen/mako_renderer.py
+++ b/tools/buildgen/mako_renderer.py
@@ -135,7 +135,12 @@ def main(argv):
         # we have optional control data: this template represents
         # a directory
         if not cleared_dir:
-          shutil.rmtree(output_name, ignore_errors=True)
+          if not os.path.exists(output_name):
+            pass
+          elif os.path.isfile(output_name):
+            os.unlink(output_name)
+          else:
+            shutil.rmtree(output_name, ignore_errors=True)
           cleared_dir = True
         items = []
         if 'foreach' in src: