From 3bf7ce15d5b897724feb7f84f27fca2f8f5c4efe Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Tue, 10 Jul 2012 19:33:39 +0000
Subject: [PATCH] Fix up makefile .NOTPARALLEL heuristics so that linear
 building is only enforced if no object folder set and the "all" target is
 run. Rename library "ConfigDescriptor.c" file to "ConfigDescriptors.c" to
 ensure that object filenames are unique.

---
 Bootloaders/makefile                                   | 10 ++++++----
 BuildTests/makefile                                    |  1 +
 Demos/Device/ClassDriver/makefile                      | 10 ++++++----
 Demos/Device/LowLevel/makefile                         | 10 ++++++----
 Demos/DualRole/ClassDriver/makefile                    | 10 ++++++----
 Demos/Host/ClassDriver/makefile                        | 10 ++++++----
 Demos/Host/LowLevel/makefile                           | 10 ++++++----
 LUFA/Build/lufa.sources.in                             |  2 +-
 LUFA/DoxygenPages/MigrationInformation.txt             |  3 +++
 .../Core/{ConfigDescriptor.c => ConfigDescriptors.c}   |  2 +-
 .../Core/{ConfigDescriptor.h => ConfigDescriptors.h}   |  0
 LUFA/Drivers/USB/USB.h                                 |  4 ++--
 Projects/makefile                                      | 10 ++++++----
 makefile                                               |  1 +
 14 files changed, 51 insertions(+), 32 deletions(-)
 rename LUFA/Drivers/USB/Core/{ConfigDescriptor.c => ConfigDescriptors.c} (99%)
 rename LUFA/Drivers/USB/Core/{ConfigDescriptor.h => ConfigDescriptors.h} (100%)

diff --git a/Bootloaders/makefile b/Bootloaders/makefile
index ba4f51259..1a4d3457e 100644
--- a/Bootloaders/makefile
+++ b/Bootloaders/makefile
@@ -22,16 +22,18 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# If building without a per-project object directory, we can't build in parallel
+# Need to special-case building without a per-project object directory
 ifeq ($(OBJDIR),)
-   .NOTPARALLEL:
-
-   # Ensure projects are pre-cleaned if the target is the default or "all"
+   # If no target specified, force "clean all" and disallow parallel build   
    ifeq ($(MAKECMDGOALS),)
       MAKECMDGOALS := clean all
+      .NOTPARALLEL:
    endif
+
+   # If one of the targets is to build, force "clean" beforehand and disallow parallel build   
    ifneq ($(findstring all, $(MAKECMDGOALS)),)
       MAKECMDGOALS := clean $(MAKECMDGOALS)
+      .NOTPARALLEL:
    endif
 endif
 
diff --git a/BuildTests/makefile b/BuildTests/makefile
index caa22fb80..901dbadbb 100644
--- a/BuildTests/makefile
+++ b/BuildTests/makefile
@@ -11,6 +11,7 @@
 # not intended to be modified or compiled by non-developers.
 
 all:
+
 %:
 	@echo Executing \"make $@\" on all LUFA build tests.
 	@echo
diff --git a/Demos/Device/ClassDriver/makefile b/Demos/Device/ClassDriver/makefile
index 3a5615e05..797a483fa 100644
--- a/Demos/Device/ClassDriver/makefile
+++ b/Demos/Device/ClassDriver/makefile
@@ -22,16 +22,18 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# If building without a per-project object directory, we can't build in parallel
+# Need to special-case building without a per-project object directory
 ifeq ($(OBJDIR),)
-   .NOTPARALLEL:
-
-   # Ensure projects are pre-cleaned if the target is the default or "all"
+   # If no target specified, force "clean all" and disallow parallel build   
    ifeq ($(MAKECMDGOALS),)
       MAKECMDGOALS := clean all
+      .NOTPARALLEL:
    endif
+
+   # If one of the targets is to build, force "clean" beforehand and disallow parallel build   
    ifneq ($(findstring all, $(MAKECMDGOALS)),)
       MAKECMDGOALS := clean $(MAKECMDGOALS)
+      .NOTPARALLEL:
    endif
 endif
 
diff --git a/Demos/Device/LowLevel/makefile b/Demos/Device/LowLevel/makefile
index 3a5615e05..797a483fa 100644
--- a/Demos/Device/LowLevel/makefile
+++ b/Demos/Device/LowLevel/makefile
@@ -22,16 +22,18 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# If building without a per-project object directory, we can't build in parallel
+# Need to special-case building without a per-project object directory
 ifeq ($(OBJDIR),)
-   .NOTPARALLEL:
-
-   # Ensure projects are pre-cleaned if the target is the default or "all"
+   # If no target specified, force "clean all" and disallow parallel build   
    ifeq ($(MAKECMDGOALS),)
       MAKECMDGOALS := clean all
+      .NOTPARALLEL:
    endif
+
+   # If one of the targets is to build, force "clean" beforehand and disallow parallel build   
    ifneq ($(findstring all, $(MAKECMDGOALS)),)
       MAKECMDGOALS := clean $(MAKECMDGOALS)
+      .NOTPARALLEL:
    endif
 endif
 
diff --git a/Demos/DualRole/ClassDriver/makefile b/Demos/DualRole/ClassDriver/makefile
index 71fb805ef..b9538fe3b 100644
--- a/Demos/DualRole/ClassDriver/makefile
+++ b/Demos/DualRole/ClassDriver/makefile
@@ -22,16 +22,18 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# If building without a per-project object directory, we can't build in parallel
+# Need to special-case building without a per-project object directory
 ifeq ($(OBJDIR),)
-   .NOTPARALLEL:
-
-   # Ensure projects are pre-cleaned if the target is the default or "all"
+   # If no target specified, force "clean all" and disallow parallel build   
    ifeq ($(MAKECMDGOALS),)
       MAKECMDGOALS := clean all
+      .NOTPARALLEL:
    endif
+
+   # If one of the targets is to build, force "clean" beforehand and disallow parallel build   
    ifneq ($(findstring all, $(MAKECMDGOALS)),)
       MAKECMDGOALS := clean $(MAKECMDGOALS)
+      .NOTPARALLEL:
    endif
 endif
 
diff --git a/Demos/Host/ClassDriver/makefile b/Demos/Host/ClassDriver/makefile
index a2b14c8a6..d057a1c69 100644
--- a/Demos/Host/ClassDriver/makefile
+++ b/Demos/Host/ClassDriver/makefile
@@ -22,16 +22,18 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# If building without a per-project object directory, we can't build in parallel
+# Need to special-case building without a per-project object directory
 ifeq ($(OBJDIR),)
-   .NOTPARALLEL:
-
-   # Ensure projects are pre-cleaned if the target is the default or "all"
+   # If no target specified, force "clean all" and disallow parallel build   
    ifeq ($(MAKECMDGOALS),)
       MAKECMDGOALS := clean all
+      .NOTPARALLEL:
    endif
+
+   # If one of the targets is to build, force "clean" beforehand and disallow parallel build   
    ifneq ($(findstring all, $(MAKECMDGOALS)),)
       MAKECMDGOALS := clean $(MAKECMDGOALS)
+      .NOTPARALLEL:
    endif
 endif
 
diff --git a/Demos/Host/LowLevel/makefile b/Demos/Host/LowLevel/makefile
index a2b14c8a6..d057a1c69 100644
--- a/Demos/Host/LowLevel/makefile
+++ b/Demos/Host/LowLevel/makefile
@@ -22,16 +22,18 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# If building without a per-project object directory, we can't build in parallel
+# Need to special-case building without a per-project object directory
 ifeq ($(OBJDIR),)
-   .NOTPARALLEL:
-
-   # Ensure projects are pre-cleaned if the target is the default or "all"
+   # If no target specified, force "clean all" and disallow parallel build   
    ifeq ($(MAKECMDGOALS),)
       MAKECMDGOALS := clean all
+      .NOTPARALLEL:
    endif
+
+   # If one of the targets is to build, force "clean" beforehand and disallow parallel build   
    ifneq ($(findstring all, $(MAKECMDGOALS)),)
       MAKECMDGOALS := clean $(MAKECMDGOALS)
+      .NOTPARALLEL:
    endif
 endif
 
diff --git a/LUFA/Build/lufa.sources.in b/LUFA/Build/lufa.sources.in
index 10e5c1d70..0e026c54e 100644
--- a/LUFA/Build/lufa.sources.in
+++ b/LUFA/Build/lufa.sources.in
@@ -75,7 +75,7 @@ LUFA_SRC_USB         := $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/Device_$(ARCH
                         $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/USBInterrupt_$(ARCH).c    \
                         $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/EndpointStream_$(ARCH).c  \
                         $(LUFA_ROOT_PATH)/Drivers/USB/Core/$(ARCH)/PipeStream_$(ARCH).c      \
-                        $(LUFA_ROOT_PATH)/Drivers/USB/Core/ConfigDescriptor.c                \
+                        $(LUFA_ROOT_PATH)/Drivers/USB/Core/ConfigDescriptors.c               \
                         $(LUFA_ROOT_PATH)/Drivers/USB/Core/DeviceStandardReq.c               \
                         $(LUFA_ROOT_PATH)/Drivers/USB/Core/Events.c                          \
                         $(LUFA_ROOT_PATH)/Drivers/USB/Core/HostStandardReq.c                 \
diff --git a/LUFA/DoxygenPages/MigrationInformation.txt b/LUFA/DoxygenPages/MigrationInformation.txt
index f0fd9b210..544c94e9e 100644
--- a/LUFA/DoxygenPages/MigrationInformation.txt
+++ b/LUFA/DoxygenPages/MigrationInformation.txt
@@ -44,6 +44,9 @@
  *    - The MIDI class driver \ref MIDI_EventPacket_t event packet no longer contains seperate \c CableIndex and \c Command entries; these have been combined
  *      into a single \c Event element which can be contructed using the new macro \ref MIDI_EVENT(). Existing applications should use the new macro and structure
  *      element name.
+ *    - The library "LUFA/Drivers/USB/Core/ConfigDescriptor.c" source file has been renamed "LUFA/Drivers/USB/Core/ConfigDescriptors.c" as this was clashing with
+ *      files in some low level host mode demo applications, preventing parallel project builds. If you are referencing the project source files directly instead
+ *      of using the makefile module names, you will need to adjust your project makefile.
  *
  *  \section Sec_Migration120219 Migrating from 111009 to 120219
  *  <b>USB Core</b>
diff --git a/LUFA/Drivers/USB/Core/ConfigDescriptor.c b/LUFA/Drivers/USB/Core/ConfigDescriptors.c
similarity index 99%
rename from LUFA/Drivers/USB/Core/ConfigDescriptor.c
rename to LUFA/Drivers/USB/Core/ConfigDescriptors.c
index 5bdcdc663..47332d854 100644
--- a/LUFA/Drivers/USB/Core/ConfigDescriptor.c
+++ b/LUFA/Drivers/USB/Core/ConfigDescriptors.c
@@ -29,7 +29,7 @@
 */
 
 #define  __INCLUDE_FROM_USB_DRIVER
-#include "ConfigDescriptor.h"
+#include "ConfigDescriptors.h"
 
 #if defined(USB_CAN_BE_HOST)
 uint8_t USB_Host_GetDeviceConfigDescriptor(const uint8_t ConfigNumber,
diff --git a/LUFA/Drivers/USB/Core/ConfigDescriptor.h b/LUFA/Drivers/USB/Core/ConfigDescriptors.h
similarity index 100%
rename from LUFA/Drivers/USB/Core/ConfigDescriptor.h
rename to LUFA/Drivers/USB/Core/ConfigDescriptors.h
diff --git a/LUFA/Drivers/USB/USB.h b/LUFA/Drivers/USB/USB.h
index 626635c8d..512f7029f 100644
--- a/LUFA/Drivers/USB/USB.h
+++ b/LUFA/Drivers/USB/USB.h
@@ -41,7 +41,7 @@
  *
  *  \section Sec_Dependencies Module Source Dependencies
  *  The following files must be built with any user project that uses this module:
- *    - LUFA/Drivers/USB/Core/ConfigDescriptor.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
+ *    - LUFA/Drivers/USB/Core/ConfigDescriptors.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
  *    - LUFA/Drivers/USB/Core/DeviceStandardReq.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
  *    - LUFA/Drivers/USB/Core/Events.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
  *    - LUFA/Drivers/USB/Core/HostStandardReq.c <i>(Makefile source module name: LUFA_SRC_USB)</i>
@@ -382,7 +382,7 @@
 		#include "Core/USBTask.h"
 		#include "Core/Events.h"
 		#include "Core/StdDescriptors.h"
-		#include "Core/ConfigDescriptor.h"
+		#include "Core/ConfigDescriptors.h"
 		#include "Core/USBController.h"
 		#include "Core/USBInterrupt.h"
 
diff --git a/Projects/makefile b/Projects/makefile
index ec8e65b8b..f4b411145 100644
--- a/Projects/makefile
+++ b/Projects/makefile
@@ -22,16 +22,18 @@ ifeq ($(MAKELEVEL), 10)
    $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
 endif
 
-# If building without a per-project object directory, we can't build in parallel
+# Need to special-case building without a per-project object directory
 ifeq ($(OBJDIR),)
-   .NOTPARALLEL:
-
-   # Ensure projects are pre-cleaned if the target is the default or "all"
+   # If no target specified, force "clean all" and disallow parallel build   
    ifeq ($(MAKECMDGOALS),)
       MAKECMDGOALS := clean all
+      .NOTPARALLEL:
    endif
+
+   # If one of the targets is to build, force "clean" beforehand and disallow parallel build   
    ifneq ($(findstring all, $(MAKECMDGOALS)),)
       MAKECMDGOALS := clean $(MAKECMDGOALS)
+      .NOTPARALLEL:
    endif
 endif
 
diff --git a/makefile b/makefile
index 8005f442a..a134dc0ab 100644
--- a/makefile
+++ b/makefile
@@ -14,6 +14,7 @@
 # "make help" for additional target build information within a specific project.
 
 all:
+
 %:
 	@echo Executing \"make $@\" on all LUFA library elements.
 	@echo
-- 
GitLab