From a57c4eabae4e137346dd2d53e699e2b5625202ba Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Mon, 4 Jun 2012 15:38:05 +0000
Subject: [PATCH] Add emergency aborts to the recursive makefiles to prevent
 system failures due to infinite recursion if something happens while building
 the project lists.

---
 Bootloaders/makefile                | 7 +++++++
 Demos/Device/ClassDriver/makefile   | 7 +++++++
 Demos/Device/LowLevel/makefile      | 7 +++++++
 Demos/DualRole/ClassDriver/makefile | 8 +++++++-
 Demos/Host/ClassDriver/makefile     | 7 +++++++
 Demos/Host/LowLevel/makefile        | 7 +++++++
 Projects/makefile                   | 7 +++++++
 7 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/Bootloaders/makefile b/Bootloaders/makefile
index 94147ead0..56db65808 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 cfa776a72..99e7c24a1 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 4673bfe57..639b25303 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 06552493e..ecc49ec89 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 5c532f1a0..25cfedf1a 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 5c532f1a0..25cfedf1a 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 50ce7ad6d..94deb0ed3 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;)
 
-- 
GitLab