diff --git a/Mac/scripts/makeclean.py b/Mac/scripts/makeclean.py
deleted file mode 100644
index 14416ab..0000000
--- a/Mac/scripts/makeclean.py
+++ /dev/null
@@ -1,60 +0,0 @@
-"""	  ***DANGEROUS***
-	  script to remove 
-	  all results of a 
-	   build process. 
-
-	    ***Don't*** 
-	run this if you are
-	     ***not***
-	  building Python 
-	  from the source
-	        !!!
-"""
-
-import macfs
-import EasyDialogs
-import os
-import sys
-import re
-
-sweepfiletypes = [
-	'APPL', 	# applications
-	'Atmp',		# applet template
-	'shlb', 	# shared libs
-	'MPSY',		# SYM and xSYM files
-	'PYC ',		# .pyc files
-	]
-
-sweepfolderre = re.compile(r"(.*) Data$")
-
-
-def remove(top):
-	if os.path.isdir(top):
-		for name in os.listdir(top):
-			path = os.path.join(top, name)
-			remove(path)
-	os.remove(top)
-
-
-def walk(top):
-	if os.path.isdir(top):
-		m = sweepfolderre.match(top)
-		if m and os.path.exists(m.group(1) + ".prj"):
-			print "removing folder:", top
-			remove(top)
-		else:
-			for name in os.listdir(top):
-				path = os.path.join(top, name)
-				walk(path)
-	else:
-		fss = macfs.FSSpec(top)
-		cr, tp = fss.GetCreatorType()
-		if tp in sweepfiletypes and top <> sys.executable:
-			print "removing file:  ", top
-			remove(top)
-		
-
-pathname = EasyDialogs.AskFolder(message="Please locate the Python home directory")
-if pathname:
-	walk(pathname)
-	sys.exit(1)  # so we see the results
