diff --git a/src/Makefile b/src/Makefile
index 7104a91cf..61a4c5e34 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -132,6 +132,10 @@ goals:=$(or $(MAKECMDGOALS),all)
 cleanonly:=$(filter $(clean_targets),$(goals))
 destructive:=$(filter-out info,$(cleanonly))
 
+ifndef cleanonly
+include Makefile.d/old.mk
+endif
+
 include Makefile.d/util.mk
 
 ifdef PREFIX
@@ -399,7 +403,7 @@ clean :
 	$(call _rm,$(exe) $(dbg) $(dbg).txt $(objects))
 
 distclean :
-	$(call _rm,../bin ../objs ../deps comptime.h)
+	$(call _rm,../bin ../objs ../deps ../make comptime.h)
 
 info:
 ifdef WINDOWSHELL
diff --git a/src/Makefile.d/old.mk b/src/Makefile.d/old.mk
new file mode 100644
index 000000000..e5890eedd
--- /dev/null
+++ b/src/Makefile.d/old.mk
@@ -0,0 +1,16 @@
+#
+# Warn about old build directories and offer to purge.
+#
+
+_old:=$(wildcard $(addprefix ../bin/,FreeBSD Linux \
+		Linux64 Mingw Mingw64 SDL dummy) ../objs ../deps)
+
+ifdef _old
+$(foreach v,$(_old),$(info $(abspath $(v))))
+$(info )
+$(info These directories are no longer\
+       required and should be removed.)
+$(info You may remove them manually or\
+       by using 'make distclean')
+$(error )
+endif