From 8d8e5c06b9c6c7410ec6a08c530dfaf6e4bf213f Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Sat, 18 Aug 2012 12:07:05 +0000
Subject: [PATCH] Added new doxygen_upgrade and doxygen_create targets to the
 DOXYGEN build system module. Clean up CORE build system module.

---
 LUFA/Build/lufa_core.mk           | 18 ++++++++++++------
 LUFA/Build/lufa_doxygen.mk        | 24 +++++++++++++++++++++---
 LUFA/DoxygenPages/BuildSystem.txt | 14 +++++++++++---
 LUFA/DoxygenPages/ChangeLog.txt   |  1 +
 LUFA/makefile                     |  5 ++++-
 5 files changed, 49 insertions(+), 13 deletions(-)

diff --git a/LUFA/Build/lufa_core.mk b/LUFA/Build/lufa_core.mk
index cb06a701e6..990215276b 100644
--- a/LUFA/Build/lufa_core.mk
+++ b/LUFA/Build/lufa_core.mk
@@ -136,27 +136,33 @@ help:
 
 # Lists build modules included by the project makefile, in alphabetical order
 list_modules:
-	@echo Currently Used Build System Modules: $(PRINTABLE_LUFA_BUILD_MODULES)
+	@echo Currently Used Build System Modules:
+	@printf " %b" "$(PRINTABLE_LUFA_BUILD_MODULES:%=   - %\n)"
 
 # Lists build targets included by the project makefile, in alphabetical order
 list_targets:
-	@echo Currently Available Build Targets: $(PRINTABLE_LUFA_BUILD_TARGETS)	
+	@echo Currently Available Build Targets:
+	@printf " %b" "$(PRINTABLE_LUFA_BUILD_TARGETS:%=   - %\n)"
 
 # Lists mandatory variables that must be set by the project makefile, in alphabetical order
 list_mandatory:
-	@echo Mandatory Variables for Included Modules: $(PRINTABLE_LUFA_MANDATORY_VARS)
+	@echo Mandatory Variables for Included Modules:
+	@printf " %b" "$(PRINTABLE_LUFA_MANDATORY_VARS:%=   - %\n)"
 	
 # Lists optional variables that must be set by the project makefile, in alphabetical order
 list_optional:
-	@echo Optional Variables for Included Modules: $(PRINTABLE_LUFA_OPTIONAL_VARS)
+	@echo Optional Variables for Included Modules:
+	@printf " %b" "$(PRINTABLE_LUFA_OPTIONAL_VARS:%=   - %\n)"
 
 # Lists variables provided by the included build modules, in alphabetical order
 list_provided:
-	@echo Variables Provided by the Included Modules: $(PRINTABLE_LUFA_PROVIDED_VARS)
+	@echo Variables Provided by the Included Modules:
+	@printf " %b" "$(PRINTABLE_LUFA_PROVIDED_VARS:%=   - %\n)"
 
 # Lists macros provided by the included build modules, in alphabetical order
 list_macros:
-	@echo Macros Provided by the Included Modules: $(PRINTABLE_LUFA_PROVIDED_MACROS)
+	@echo Macros Provided by the Included Modules:
+	@printf " %b" "$(PRINTABLE_LUFA_PROVIDED_MACROS:%=   - %\n)"
 
 # Disable default in-built make rules (those that are needed are explicitly
 # defined, and doing so has performance benefits when recursively building)
diff --git a/LUFA/Build/lufa_doxygen.mk b/LUFA/Build/lufa_doxygen.mk
index 265ba6e93a..fe53b25247 100644
--- a/LUFA/Build/lufa_doxygen.mk
+++ b/LUFA/Build/lufa_doxygen.mk
@@ -7,7 +7,7 @@
 #
 
 LUFA_BUILD_MODULES         += DOXYGEN
-LUFA_BUILD_TARGETS         += doxygen
+LUFA_BUILD_TARGETS         += doxygen doxygen_upgrade doxygen_create
 LUFA_BUILD_MANDATORY_VARS  += LUFA_PATH
 LUFA_BUILD_OPTIONAL_VARS   += DOXYGEN_CONF DOXYGEN_FAIL_ON_WARNING DOXYGEN_OVERRIDE_PARAMS
 LUFA_BUILD_PROVIDED_VARS   += 
@@ -23,6 +23,10 @@ LUFA_BUILD_PROVIDED_MACROS +=
 # TARGETS:
 #
 #    doxygen                   - Build Doxygen Documentation
+#    doxygen_create            - Create a new Doxygen configuration file using
+#                                the latest template
+#    doxygen_upgrade           - Upgrade an existing Doxygen configuration file
+#                                to the latest template
 #
 # MANDATORY PARAMETERS:
 #
@@ -73,10 +77,24 @@ else
    DOXYGEN_CMD := $(BASE_DOXYGEN_CMD)
 endif
 
+# Error if the specified Doxygen configuration file does not exist
+$(DOXYGEN_CONF):
+	$(error Doxygen configuration file $@ does not exist)
+
 # Builds the project documentation using the specified configuration file and the DOXYGEN tool
-doxygen:
+doxygen: $(DOXYGEN_CONF)
 	@echo $(MSG_DOXYGEN_CMD) Configuration file \"$(DOXYGEN_CONF)\" with parameters \"$(DOXYGEN_OVERRIDE_PARAMS)\"
 	$(DOXYGEN_CMD)
 
+# Upgrades an existing Doxygen configuration file to the latest Doxygen template, preserving settings
+doxygen_upgrade: $(DOXYGEN_CONF)
+	@echo $(MSG_DOXYGEN_CMD) Upgrading configuration file \"$(DOXYGEN_CONF)\" with latest template
+	doxygen -u $(DOXYGEN_CONF) > /dev/null
+
+# Creates a new Doxygen configuration file with the set file name
+doxygen_create:
+	@echo $(MSG_DOXYGEN_CMD) Creating new configuration file \"$(DOXYGEN_CONF)\" with latest template
+	doxygen -g $(DOXYGEN_CONF) > /dev/null
+
 # Phony build targets for this module
-.PHONY: doxygen
+.PHONY: doxygen doxygen_upgrade doxygen_create
diff --git a/LUFA/DoxygenPages/BuildSystem.txt b/LUFA/DoxygenPages/BuildSystem.txt
index 1394c21c06..45edef3f62 100644
--- a/LUFA/DoxygenPages/BuildSystem.txt
+++ b/LUFA/DoxygenPages/BuildSystem.txt
@@ -631,9 +631,9 @@
  *
  *  \section SSec_BuildModule_DOXYGEN_Requirements Requirements
  *  This module requires the <tt>doxygen</tt> utility from the Doxygen website
- *  (<a>http://www.stack.nl/~dimitri/doxygen/</a>) to be available in your system's <b>PATH</b>
- *  variable. On *nix systems the <tt>doxygen</tt> utility can be installed via the project's source
- *  code or through the package manager.
+ *  (<a>http://www.doxygen.org/</a>) to be available in your system's <b>PATH</b> variable. On *nix
+ *  systems the <tt>doxygen</tt> utility can be installed via the project's source code or through
+ *  the package manager.
  *
  *  \section SSec_BuildModule_DOXYGEN_Targets Targets
  *
@@ -642,6 +642,14 @@
  *    <td><tt>doxygen</tt></td>
  *    <td>Generate project documentation.</td>
  *   </tr>
+ *   <tr>
+ *    <td><tt>doxygen_create</tt></td>
+ *    <td>Create a new Doxygen configuration file using the latest template.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>doxygen_upgrade</tt></td>
+ *    <td>Upgrade an existing Doxygen configuration file to the latest template</td>
+ *   </tr>
  *  </table>
  *
  *  \section SSec_BuildModule_DOXYGEN_MandatoryParams Mandatory Parameters
diff --git a/LUFA/DoxygenPages/ChangeLog.txt b/LUFA/DoxygenPages/ChangeLog.txt
index d4846bcdc6..6dbd8abbcf 100644
--- a/LUFA/DoxygenPages/ChangeLog.txt
+++ b/LUFA/DoxygenPages/ChangeLog.txt
@@ -10,6 +10,7 @@
   *  <b>New:</b>
   *  - Core:
   *   - Added support for the Arduino Leonardo board
+  *   - Added new doxygen_upgrade and doxygen_create targets to the DOXYGEN build system module
   *  - Library Applications:
   *   - <i>None</i>
   *
diff --git a/LUFA/makefile b/LUFA/makefile
index 73e760b905..ca5eacfe82 100644
--- a/LUFA/makefile
+++ b/LUFA/makefile
@@ -12,14 +12,17 @@
 LUFA_VERSION_NUM        := $(shell grep LUFA_VERSION_STRING Version.h | cut -d'"' -f2)
 EXCLUDE_FROM_EXPORT     := Documentation DoxygenPages CodeTemplates Build *.conf *.tar *.o *.d *.lss *.lst *.hex *.elf *.hex *.eep *.map *.bin
 
+# Default target - no default action when attempting to build the core directly
 all:
 
+# Export the library core as a TAR archive for importing into an IDE
 export_tar:
 	@echo Exporting LUFA library to a TAR archive...
 	@tar -cf LUFA_$(LUFA_VERSION_NUM).tar --directory=. $(EXCLUDE_FROM_EXPORT:%=--exclude=%) *
 	@tar -cf LUFA_$(LUFA_VERSION_NUM)_Code_Templates.tar CodeTemplates
 	@echo Export LUFA_$(LUFA_VERSION_NUM).tar complete.
 
+# Display the LUFA version of this library copy
 version:
 	@echo "LUFA $(LUFA_VERSION_NUM)"
 
@@ -36,6 +39,7 @@ else
   ARCH                    = {AVR8,UC3,XMEGA}
   DOXYGEN_OVERRIDE_PARAMS = QUIET=YES PROJECT_NUMBER=$(LUFA_VERSION_NUM)
   
+  # Remove all object and associated files from the LUFA library core
   clean:
 	rm -f $(LUFA_SRC_ALL_FILES:%.c=%.o)
 	rm -f $(LUFA_SRC_ALL_FILES:%.c=%.d)
@@ -46,5 +50,4 @@ else
   include Build/lufa_doxygen.mk
 endif
 
-
 .PHONY: all export_tar version clean
\ No newline at end of file