-#| Macro Module
-include ( "${MacroModulePath}/setup.cmake" )
-PathPrepend( MACRO_SRCS ${MacroModulePath} ${MACRO_SRCS} )
+###
+# Add Module Macro
+#
+# Optional Arg 1: Main Module Check, set to True/1 if adding a main module
+
+function ( AddModule ModuleType ModuleName )
+ # Module path
+ set ( ModulePath ${ModuleType}/${ModuleName} )
+ set ( ModuleFullPath ${HEAD_DIR}/${ModuleType}/${ModuleName} )
+
+ # Include setup.cmake file
+ include ( ${ModuleFullPath}/setup.cmake )
+
+ # Check if this is a main module add
+ foreach ( extraArg ${ARGN} )
+ # Make sure this isn't a submodule
+ if ( DEFINED SubModule )
+ message ( FATAL_ERROR
+ "The '${ModuleName}' module is not a stand-alone module, and requires further setup."
+ )
+ endif ()
+ endforeach ()
+
+ # PathPrepend to give proper paths to each of the source files
+ PathPrepend ( Module_SRCS ${ModulePath} ${Module_SRCS} )
+
+ # Check the current scope to see if a sub-module added some source files
+ set ( Module_SRCS ${${ModuleType}_SRCS} ${Module_SRCS} )
+
+ # Append each of the sources to each type of module srcs list
+ set ( ${ModuleType}_SRCS ${Module_SRCS} )