Index: code/branches/pch/cmake/BuildConfigGCC.cmake
===================================================================
--- code/branches/pch/cmake/BuildConfigGCC.cmake	(revision 3115)
+++ code/branches/pch/cmake/BuildConfigGCC.cmake	(revision 3116)
@@ -23,4 +23,7 @@
  #    Sets the right compiler and linker flags for GCC.
  #
+
+# Shortcut for CMAKE_COMPILER_IS_GNUCXX and ..._GNUC
+SET(CMAKE_COMPILER_IS_GNU TRUE)
 
 # Determine compiler version
Index: code/branches/pch/cmake/BuildConfigMSVC.cmake
===================================================================
--- code/branches/pch/cmake/BuildConfigMSVC.cmake	(revision 3115)
+++ code/branches/pch/cmake/BuildConfigMSVC.cmake	(revision 3116)
@@ -24,7 +24,17 @@
  #
 
+################### Compiler Version ####################
+
+# We make use of variadic macros, which is only supported by MSVC 8 and above
+IF(MSVC_VERSION LESS 1400)
+  MESSAGE(FATAL_ERROR "Microsoft Visual Studio versions below 8 (2005) are not supported because of missing compiler extensions.")
+ENDIF()
+
+
 ######################## Options ########################
 
-OPTION(VISUAL_LEAK_DETECTOR_ENABLE "Memory leak detector" FALSE)
+IF(MSVC80)
+  OPTION(VISUAL_LEAK_DETECTOR_ENABLE "Memory leak detector" FALSE)
+ENDIF(MSVC80)
 
 #################### Compiler Flags #####################
Index: code/branches/pch/cmake/CapitaliseName.cmake
===================================================================
--- code/branches/pch/cmake/CapitaliseName.cmake	(revision 3116)
+++ code/branches/pch/cmake/CapitaliseName.cmake	(revision 3116)
@@ -0,0 +1,33 @@
+ #
+ #             ORXONOX - the hottest 3D action shooter ever to exist
+ #                             > www.orxonox.net <
+ #
+ #        This program is free software; you can redistribute it and/or
+ #         modify it under the terms of the GNU General Public License
+ #        as published by the Free Software Foundation; either version 2
+ #            of the License, or (at your option) any later version.
+ #
+ #       This program is distributed in the hope that it will be useful,
+ #        but WITHOUT ANY WARRANTY; without even the implied warranty of
+ #        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ #                 GNU General Public License for more details.
+ #
+ #   You should have received a copy of the GNU General Public License along
+ #      with this program; if not, write to the Free Software Foundation,
+ #     Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ #
+ #
+ #  Author:
+ #    Reto Grieder
+ #  Examples:
+ #    "orxonox"  --> "Orxonox"
+ #    "ORXONOX"  --> "ORXONOX"
+ #    "1orxonox" --> "1orxonox"
+ #
+
+FUNCTION(CAPITALISE_NAME _name _output_var)
+  STRING(SUBSTRING "${_name}" 0 1 _first_letter)
+  STRING(TOUPPER "${_first_letter}" _first_letter)
+  STRING(REGEX REPLACE "^.(.*)$" "\\1" _rest "${_name}")
+  SET(${_output_var} "${_first_letter}${_rest}" PARENT_SCOPE)
+ENDFUNCTION(CAPITALISE_NAME)
Index: code/branches/pch/cmake/InstallUtilities.cmake
===================================================================
--- code/branches/pch/cmake/InstallUtilities.cmake	(revision 3115)
+++ 	(revision )
@@ -1,34 +1,0 @@
- #
- #             ORXONOX - the hottest 3D action shooter ever to exist
- #                             > www.orxonox.net <
- #
- #        This program is free software; you can redistribute it and/or
- #         modify it under the terms of the GNU General Public License
- #        as published by the Free Software Foundation; either version 2
- #            of the License, or (at your option) any later version.
- #
- #       This program is distributed in the hope that it will be useful,
- #        but WITHOUT ANY WARRANTY; without even the implied warranty of
- #        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- #                 GNU General Public License for more details.
- #
- #   You should have received a copy of the GNU General Public License along
- #      with this program; if not, write to the Free Software Foundation,
- #     Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- #
- #
- #  Author:
- #    Reto Grieder
- #  Description:
- #    Helps configuring the INSTALL command in more global way.
- #  Parameters:
- #    Specifiy the targets as additional parameter.
- #
-
-FUNCTION(ORXONOX_INSTALL)
-  INSTALL(TARGETS ${ARGN}
-    RUNTIME DESTINATION ${ORXONOX_RUNTIME_INSTALL_PATH}
-    LIBRARY DESTINATION ${ORXONOX_LIBRARY_INSTALL_PATH}
-    #ARCHIVE DESTINATION ${ORXONOX_ARCHIVE_INSTALL_PATH}
-  )
-ENDFUNCTION(ORXONOX_INSTALL)
Index: code/branches/pch/cmake/ParseMacroArguments.cmake
===================================================================
--- code/branches/pch/cmake/ParseMacroArguments.cmake	(revision 3116)
+++ code/branches/pch/cmake/ParseMacroArguments.cmake	(revision 3116)
@@ -0,0 +1,76 @@
+ #
+ #             ORXONOX - the hottest 3D action shooter ever to exist
+ #                             > www.orxonox.net <
+ #
+ #        This program is free software; you can redistribute it and/or
+ #         modify it under the terms of the GNU General Public License
+ #        as published by the Free Software Foundation; either version 2
+ #            of the License, or (at your option) any later version.
+ #
+ #       This program is distributed in the hope that it will be useful,
+ #        but WITHOUT ANY WARRANTY; without even the implied warranty of
+ #        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ #                 GNU General Public License for more details.
+ #
+ #   You should have received a copy of the GNU General Public License along
+ #      with this program; if not, write to the Free Software Foundation,
+ #     Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ #
+ #
+ #  Author:
+ #    Reto Grieder
+ #  Description:
+ #    Parses a list of macro arguments which are separated by keywords and
+ #    writes the result to the _arg_KEYWORD variable. Switches are set to their
+ #    literal name if found and the lists contain their elements.
+ #    The order of the arguments is arbitrary.
+ #  Note:
+ #    You have to specify the switches and list_names as a
+ #    semicolon separated list or all hell breaks loose!
+ #  Example:
+ #    The arguments  BLUBB_FILES foo.cc bar.c NO_ASDF  will do the following:
+ #    SET(_arg_NO_ASDF _arg_NO_ASDF)
+ #    SET(_arg_BLUBB_FILES foo.cc bar.c)
+ #    But NO_FOO will not be set at all if it was specified as a switch
+ #
+
+MACRO(PARSE_MACRO_ARGUMENTS _switches _list_names)
+  # Parse all the arguments and set the corresponding variable
+  # If the option is just a switch, set the variable to its name for later use
+  FOREACH(_arg ${ARGN})
+    SET(_arg_found FALSE)
+
+    # Switches
+    FOREACH(_switch ${_switches})
+      IF(${_switch} STREQUAL ${_arg})
+        SET(_arg_${_switch} ${_switch})
+	SET(_arg_found TRUE)
+        # Avoid interpreting arguments after this one as options args for the previous one
+	SET(_storage_var)
+        BREAK()
+      ENDIF()
+    ENDFOREACH(_switch)
+
+    # Input options
+    IF(NOT _arg_found)
+      FOREACH(_list_name ${_list_names})
+        IF(${_list_name} STREQUAL ${_arg})
+          SET(_storage_var _arg_${_list_name})
+	  SET(_arg_found TRUE)
+          BREAK()
+        ENDIF()
+      ENDFOREACH(_list_name)
+    ENDIF(NOT _arg_found)
+
+    # Arguments of an input option (like source files for SOURCE_FILES)
+    IF(NOT _arg_found)
+      IF(_storage_var)
+        # Store in variable define above in the foreach loop
+        SET(${_storage_var} ${${_storage_var}} ${_arg})
+      ELSE()
+        MESSAGE(FATAL_ERROR "ORXONOX_ADD_${_target_type} was given a non compliant argument: ${_arg}")
+      ENDIF(_storage_var)
+    ENDIF(NOT _arg_found)
+
+  ENDFOREACH(_arg)
+ENDMACRO(PARSE_MACRO_ARGUMENTS)
Index: code/branches/pch/cmake/TargetUtilities.cmake
===================================================================
--- code/branches/pch/cmake/TargetUtilities.cmake	(revision 3116)
+++ code/branches/pch/cmake/TargetUtilities.cmake	(revision 3116)
@@ -0,0 +1,154 @@
+ #
+ #             ORXONOX - the hottest 3D action shooter ever to exist
+ #                             > www.orxonox.net <
+ #
+ #        This program is free software; you can redistribute it and/or
+ #         modify it under the terms of the GNU General Public License
+ #        as published by the Free Software Foundation; either version 2
+ #            of the License, or (at your option) any later version.
+ #
+ #       This program is distributed in the hope that it will be useful,
+ #        but WITHOUT ANY WARRANTY; without even the implied warranty of
+ #        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ #                 GNU General Public License for more details.
+ #
+ #   You should have received a copy of the GNU General Public License along
+ #      with this program; if not, write to the Free Software Foundation,
+ #     Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ #
+ #
+ #  Author:
+ #    Reto Grieder
+ #  Description:
+ #    Adds a library or an executable like ADD_LIBRARY/ADD_EXECUTABLE, but
+ #    accepts a lot more input information. Simply supply the keywords
+ #    described below in any order you wish.
+ #
+ #    Switches: (when given --> TRUE, FALSE otherwise)
+ #      FIND_HEADER_FILES: Searches the current directory for all header files
+ #                         and adds them to the target.
+ #      EXCLUDE_FROM_ALL:  Inherited from ADD_LIBRARY/ADD_EXECUTABLE
+ #      ORXONOX_EXTERNAL:  Specify this for third party libraries
+ #      NO_DLL_INTERFACE:  Link statically with MSVC
+ #      NO_SOURCE_GROUPS:  Don't create msvc source groups
+ #      STATIC/SHARED:     Inherited from ADD_LIBRARY
+ #      WIN32:             Inherited from ADD_EXECUTABLE
+ #    Lists:
+ #      LINK_LIBRARIES:    Redirects to TARGET_LINK_LIBRARIES
+ #      VERSION:           Set version to the binary
+ #      SOURCE_FILES:      Source files for the target
+ #      DEFINE_SYMBOL:     Sets the DEFINE_SYMBOL target property
+ #      TOLUA_FILES:       Files with tolua interface
+ #  Note:
+ #    This function also installs the target!
+ #  Prerequisistes:
+ #    ORXONOX_DEFAULT_LINK, ORXONOX_CONFIG_FILES
+ #  Parameters:
+ #    _target_name, ARGN for the macro arguments
+ #
+
+INCLUDE(CapitaliseName)
+INCLUDE(GenerateToluaBindings)
+INCLUDE(ParseMacroArguments)
+INCLUDE(SourceFileUtilities)
+
+FUNCTION(ORXONOX_ADD_LIBRARY _target_name)
+  TU_ADD_TARGET(${_target_name} LIBRARY "STATIC;SHARED" ${ARGN})
+ENDFUNCTION(ORXONOX_ADD_LIBRARY)
+
+FUNCTION(ORXONOX_ADD_EXECUTABLE _target_name)
+  TU_ADD_TARGET(${_target_name} EXECUTABLE "WIN32" ${ARGN})
+ENDFUNCTION(ORXONOX_ADD_EXECUTABLE)
+
+
+FUNCTION(TU_ADD_TARGET _target_name _target_type _additional_switches)
+  CAPITALISE_NAME(${_target_name} _target_name_capitalised)
+
+  # Specify all possible options (either switch or with add. arguments)
+  SET(_switches   FIND_HEADER_FILES  EXCLUDE_FROM_ALL  ORXONOX_EXTERNAL
+                  NO_DLL_INTERFACE   NO_SOURCE_GROUPS  ${_additional_switches})
+  SET(_list_names LINK_LIBRARIES  VERSION   SOURCE_FILES  DEFINE_SYMBOL
+                  TOLUA_FILES)
+  PARSE_MACRO_ARGUMENTS("${_switches}" "${_list_names}" ${ARGN})
+
+
+  # GET_HEADER_FILES
+  IF(_arg_FIND_HEADER_FILES)
+    GET_ALL_HEADER_FILES(_${target_name}_header_files)
+  ENDIF()
+
+  # Remove potential duplicates
+  SET(_${_target_name}_files ${_${target_name}_header_files} ${_arg_SOURCE_FILES})
+  LIST(REMOVE_DUPLICATES _${_target_name}_files)
+
+  # Generate the source groups
+  IF(NOT _arg_NO_SOURCE_GROUPS)
+    GENERATE_SOURCE_GROUPS(${_${_target_name}_files})
+
+    IF(NOT _arg_ORXONOX_EXTERNAL)
+      # Move the prereqs.h file to the config section
+      IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${_target_name_capitalised}Prereqs.h)
+        SOURCE_GROUP("Config" FILES ${_target_name_capitalised}Prereqs.h)
+      ENDIF()
+      # Add the config files in a special source group
+      LIST(APPEND _${_target_name}_files ${ORXONOX_CONFIG_FILES})
+      SOURCE_GROUP("Config" FILES ${ORXONOX_CONFIG_FILES})
+    ENDIF()
+  ENDIF(NOT _arg_NO_SOURCE_GROUPS)
+
+  # TOLUA_FILES
+  IF(_arg_TOLUA_FILES)
+    GENERATE_TOLUA_BINDINGS(${_target_name_capitalised} _${_target_name}_files
+                            INPUTFILES ${_arg_TOLUA_FILES})
+  ENDIF()
+
+  # Certain libraries don't have dllexport/dllimport and can't be linked shared with msvc
+  IF(MSVC AND _arg_NO_DLL_INTERFACE)
+    SET(_arg_SHARED)
+    SET(_arg_STATIC STATIC)
+  ENDIF()
+
+  # Set default linking if required
+  IF(NOT _arg_SHARED AND NOT _arg_STATIC)
+    IF("${ORXONOX_DEFAULT_LINK}" STREQUAL "STATIC")
+      SET(_arg_STATIC STATIC)
+    ELSEIF("${ORXONOX_DEFAULT_LINK}" STREQUAL "SHARED")
+      SET(_arg_SHARED SHARED)
+    ENDIF()
+  ENDIF()
+
+  # Add the library/executable
+  IF("${_target_type}" STREQUAL "LIBRARY")
+    ADD_LIBRARY(${_target_name} ${_arg_STATIC} ${_arg_SHARED}
+                ${_arg_EXCLUDE_FROM_ALL} ${_${_target_name}_files})
+  ELSE()
+    ADD_EXECUTABLE(${_target_name} ${_arg_WIN32} ${_arg_EXCLUDE_FROM_ALL}
+                   ${_${_target_name}_files})
+  ENDIF()
+
+  # LINK_LIBRARIES
+  IF(_arg_LINK_LIBRARIES)
+    TARGET_LINK_LIBRARIES(${_target_name} ${_arg_LINK_LIBRARIES})
+  ENDIF()
+
+  # DEFINE_SYMBOL
+  IF(_arg_DEFINE_SYMBOL)
+    SET_TARGET_PROPERTIES(${_target_name} PROPERTIES DEFINE_SYMBOL ${_arg_DEFINE_SYMBOL})
+  ENDIF()
+
+  # VERSION
+  IF(_arg_VERSION)
+    SET_TARGET_PROPERTIES(${_target_name} PROPERTIES VERSION ${_arg_VERSION})
+  ELSEIF(NOT ORXONOX_EXTERNAL)
+    SET_TARGET_PROPERTIES(${_target_name} PROPERTIES VERSION ${ORXONOX_VERSION})
+  ENDIF()
+
+  IF(NOT _arg_STATIC)
+    INSTALL(TARGETS ${_target_name}
+      RUNTIME DESTINATION ${ORXONOX_RUNTIME_INSTALL_PATH}
+      LIBRARY DESTINATION ${ORXONOX_LIBRARY_INSTALL_PATH}
+      #ARCHIVE DESTINATION ${ORXONOX_ARCHIVE_INSTALL_PATH}
+    )
+  ENDIF()
+
+ENDFUNCTION(TU_ADD_TARGET)
