diff --git a/Bootloaders/makefile b/Bootloaders/makefile
index 94147ead02d67df5d85c6a7c69d4acfff65e9296..56db658088f14e8f38ab1b2ee222765064e17ebf 100644
--- a/Bootloaders/makefile
+++ b/Bootloaders/makefile
@@ -15,6 +15,13 @@
 
 PROJECT_DIRECTORIES = $(shell ls -d *)
 
+# This makefile is potentially infinitely recursive if something really bad
+# happens when determining the set of project directories - hard-abort if
+# more than 10 levels deep to avoid angry emails.
+ifeq ($(MAKELEVEL), 10)
+   $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
+endif
+
 all:
 	@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) clean all;)
 
diff --git a/Demos/Device/ClassDriver/makefile b/Demos/Device/ClassDriver/makefile
index cfa776a72164d4143b1e5473c49e53ec7fb614dc..99e7c24a15846b438409dae8ea5fc2a640fdcf86 100644
--- a/Demos/Device/ClassDriver/makefile
+++ b/Demos/Device/ClassDriver/makefile
@@ -15,6 +15,13 @@
 
 PROJECT_DIRECTORIES = $(shell ls -d */)
 
+# This makefile is potentially infinitely recursive if something really bad
+# happens when determining the set of project directories - hard-abort if
+# more than 10 levels deep to avoid angry emails.
+ifeq ($(MAKELEVEL), 10)
+   $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
+endif
+
 all:
 	@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) clean all;)
 
diff --git a/Demos/Device/LowLevel/makefile b/Demos/Device/LowLevel/makefile
index 4673bfe573bc371be3631870ddfbe40a0527a78a..639b253032eff242c6a523397f0dcc7d7e2c4962 100644
--- a/Demos/Device/LowLevel/makefile
+++ b/Demos/Device/LowLevel/makefile
@@ -15,6 +15,13 @@
 
 PROJECT_DIRECTORIES = $(shell ls -d *)
 
+# This makefile is potentially infinitely recursive if something really bad
+# happens when determining the set of project directories - hard-abort if
+# more than 10 levels deep to avoid angry emails.
+ifeq ($(MAKELEVEL), 10)
+   $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
+endif
+
 all:
 	@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) clean all;)
 
diff --git a/Demos/DualRole/ClassDriver/makefile b/Demos/DualRole/ClassDriver/makefile
index 06552493e47eb00bd71d015f48853823ddbbde7e..ecc49ec89578f470f8d19f17cf17332b066f99ab 100644
--- a/Demos/DualRole/ClassDriver/makefile
+++ b/Demos/DualRole/ClassDriver/makefile
@@ -15,10 +15,16 @@
 
 PROJECT_DIRECTORIES = $(shell ls -d *)
 
+# This makefile is potentially infinitely recursive if something really bad
+# happens when determining the set of project directories - hard-abort if
+# more than 10 levels deep to avoid angry emails.
+ifeq ($(MAKELEVEL), 10)
+   $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
+endif
+
 all:
 	@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) clean all;)
 
 %:
 	@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) $@;)
 
-
diff --git a/Demos/Host/ClassDriver/makefile b/Demos/Host/ClassDriver/makefile
index 5c532f1a07dbec39146bda9d19dac6a672ab5181..25cfedf1a5a26e249e85ebc84d49a845eecd2bae 100644
--- a/Demos/Host/ClassDriver/makefile
+++ b/Demos/Host/ClassDriver/makefile
@@ -15,6 +15,13 @@
 
 PROJECT_DIRECTORIES = $(shell ls -d *)
 
+# This makefile is potentially infinitely recursive if something really bad
+# happens when determining the set of project directories - hard-abort if
+# more than 10 levels deep to avoid angry emails.
+ifeq ($(MAKELEVEL), 10)
+   $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
+endif
+
 all:
 	@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) clean all;)
 
diff --git a/Demos/Host/LowLevel/makefile b/Demos/Host/LowLevel/makefile
index 5c532f1a07dbec39146bda9d19dac6a672ab5181..25cfedf1a5a26e249e85ebc84d49a845eecd2bae 100644
--- a/Demos/Host/LowLevel/makefile
+++ b/Demos/Host/LowLevel/makefile
@@ -15,6 +15,13 @@
 
 PROJECT_DIRECTORIES = $(shell ls -d *)
 
+# This makefile is potentially infinitely recursive if something really bad
+# happens when determining the set of project directories - hard-abort if
+# more than 10 levels deep to avoid angry emails.
+ifeq ($(MAKELEVEL), 10)
+   $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
+endif
+
 all:
 	@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) clean all;)
 
diff --git a/Projects/makefile b/Projects/makefile
index 50ce7ad6d0574a65a84a410133e846f2e5849928..94deb0ed310347494a772c502b47295da176f6bf 100644
--- a/Projects/makefile
+++ b/Projects/makefile
@@ -15,6 +15,13 @@
 
 PROJECT_DIRECTORIES = $(shell ls -d *)
 
+# This makefile is potentially infinitely recursive if something really bad
+# happens when determining the set of project directories - hard-abort if
+# more than 10 levels deep to avoid angry emails.
+ifeq ($(MAKELEVEL), 10)
+   $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
+endif
+
 all:
 	@$(foreach PROJECT, $(PROJECT_DIRECTORIES), $(MAKE) -s -C $(PROJECT) clean all;)