Index: code/branches/pch/src/CMakeLists.txt
===================================================================
--- code/branches/pch/src/CMakeLists.txt	(revision 3114)
+++ code/branches/pch/src/CMakeLists.txt	(revision 3116)
@@ -22,7 +22,5 @@
 # various macro includes
 INCLUDE(FlagUtilities)
-INCLUDE(GenerateToluaBindings)
-INCLUDE(InstallUtilities)
-INCLUDE(SourceFileUtilities)
+INCLUDE(TargetUtilities)
 
 # Use TinyXML++
@@ -32,4 +30,7 @@
 # Tolua binding speedup if required
 ADD_COMPILER_FLAGS("-DTOLUA_RELEASE" Release MinSizeRel TOLUA_PARSER_RELEASE)
+
+# Default linking is SHARED
+SET(ORXONOX_DEFAULT_LINK SHARED)
 
 ################ OrxonoxConfig.h ################
@@ -83,4 +84,10 @@
 CONFIGURE_FILE(SpecialConfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/SpecialConfig.h)
 
+SET(ORXONOX_CONFIG_FILES
+  ${CMAKE_CURRENT_BINARY_DIR}/OrxonoxConfig.h
+  ${CMAKE_CURRENT_SOURCE_DIR}/OrxonoxConfig.h.in
+  ${CMAKE_CURRENT_BINARY_DIR}/SpecialConfig.h
+  ${CMAKE_CURRENT_SOURCE_DIR}/SpecialConfig.h.in
+)
 
 ############## Include Directories ##############
Index: code/branches/pch/src/bullet/CMakeLists.txt
===================================================================
--- code/branches/pch/src/bullet/CMakeLists.txt	(revision 3114)
+++ code/branches/pch/src/bullet/CMakeLists.txt	(revision 3116)
@@ -27,16 +27,14 @@
 ADD_SUBDIRECTORY(LinearMath)
 
-GENERATE_SOURCE_GROUPS(${BULLET_FILES})
-
 # No warnings needed from third party libraries
 REMOVE_COMPILER_FLAGS("-W3 -W4" MSVC)
 ADD_COMPILER_FLAGS("-w")
 
-IF(MSVC)
-  ADD_LIBRARY(bullet_orxonox STATIC ${BULLET_FILES})
-ELSE(MSVC)
-  ADD_LIBRARY(bullet_orxonox SHARED ${BULLET_FILES})
-  ORXONOX_INSTALL(bullet_orxonox)
-ENDIF(MSVC)
-
-SET_TARGET_PROPERTIES(bullet_orxonox PROPERTIES VERSION 2.73)
+ORXONOX_ADD_LIBRARY(bullet_orxonox
+  ORXONOX_EXTERNAL
+  NO_DLL_INTERFACE
+  VERSION
+    2.74
+  SOURCE_FILES
+    ${BULLET_FILES}
+)
Index: code/branches/pch/src/ceguilua/CMakeLists.txt
===================================================================
--- code/branches/pch/src/ceguilua/CMakeLists.txt	(revision 3114)
+++ code/branches/pch/src/ceguilua/CMakeLists.txt	(revision 3116)
@@ -75,13 +75,16 @@
 SET(CEGUILUA_LIBRARY ceguilua_orxonox)
 SET(CEGUILUA_LIBRARY ${CEGUILUA_LIBRARY} PARENT_SCOPE)
-ADD_LIBRARY(${CEGUILUA_LIBRARY} SHARED ${CEGUILUA_FILES})
-SET_TARGET_PROPERTIES(${CEGUILUA_LIBRARY} PROPERTIES DEFINE_SYMBOL "CEGUILUA_EXPORTS")
-TARGET_LINK_LIBRARIES(${CEGUILUA_LIBRARY}
-  tolua++_orxonox
-  ${LUA_LIBRARIES}
-  ${CEGUI_LIBRARY}
+ORXONOX_ADD_LIBRARY(${CEGUILUA_LIBRARY}
+  ORXONOX_EXTERNAL
+  NO_SOURCE_GROUPS
+  DEFINE_SYMBOL
+    "CEGUILUA_EXPORTS"
+  VERSION
+    ${CEGUI_VERSION}
+  LINK_LIBRARIES
+    tolua++_orxonox
+    ${LUA_LIBRARIES}
+    ${CEGUI_LIBRARY}
+  SOURCE_FILES
+    ${CEGUILUA_FILES}
 )
-
-SET_TARGET_PROPERTIES(ceguilua_orxonox PROPERTIES VERSION ${CEGUI_VERSION})
-
-ORXONOX_INSTALL(ceguilua_orxonox)
Index: code/branches/pch/src/core/CMakeLists.txt
===================================================================
--- code/branches/pch/src/core/CMakeLists.txt	(revision 3114)
+++ code/branches/pch/src/core/CMakeLists.txt	(revision 3116)
@@ -63,26 +63,26 @@
 )
 ADD_SUBDIRECTORY(input)
-GET_ALL_HEADER_FILES(CORE_HDR_FILES)
-SET(CORE_FILES ${CORE_SRC_FILES} ${CORE_HDR_FILES})
 
-GENERATE_SOURCE_GROUPS(${CORE_FILES})
-GENERATE_TOLUA_BINDINGS(Core CORE_FILES INPUTFILES LuaBind.h CommandExecutor.h Game.h)
-
-ADD_LIBRARY(core SHARED ${CORE_FILES})
-
-SET_TARGET_PROPERTIES(core PROPERTIES DEFINE_SYMBOL "CORE_SHARED_BUILD")
-TARGET_LINK_LIBRARIES(core
-  ${OGRE_LIBRARY}
-  ${Boost_THREAD_LIBRARY}
-  ${Boost_FILESYSTEM_LIBRARY}
-  ${Boost_SYSTEM_LIBRARY}
-  ${Boost_DATE_TIME_LIBRARY} # MSVC only
-  ${LUA_LIBRARIES}
-  cpptcl_orxonox
-  ois_orxonox
-  tinyxml++_orxonox
-  tolua++_orxonox
-  util
+ORXONOX_ADD_LIBRARY(core
+  FIND_HEADER_FILES
+  TOLUA_FILES
+    CommandExecutor.h
+    Game.h
+    LuaBind.h
+  DEFINE_SYMBOL
+    "CORE_SHARED_BUILD"
+  LINK_LIBRARIES
+    ${OGRE_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_FILESYSTEM_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${Boost_DATE_TIME_LIBRARY} # MSVC only
+    ${LUA_LIBRARIES}
+    cpptcl_orxonox
+    ois_orxonox
+    tinyxml++_orxonox
+    tolua++_orxonox
+    util
+  SOURCE_FILES
+    ${CORE_SRC_FILES}
 )
-
-ORXONOX_INSTALL(core)
Index: code/branches/pch/src/cpptcl/CMakeLists.txt
===================================================================
--- code/branches/pch/src/cpptcl/CMakeLists.txt	(revision 3114)
+++ code/branches/pch/src/cpptcl/CMakeLists.txt	(revision 3116)
@@ -31,5 +31,4 @@
   details/methods_v.h
 )
-GENERATE_SOURCE_GROUPS(${CPPTCL_FILES})
 
 # No warnings needed from third party libraries
@@ -37,12 +36,12 @@
 ADD_COMPILER_FLAGS("-w")
 
-IF(MSVC)
-  ADD_LIBRARY(cpptcl_orxonox STATIC ${CPPTCL_FILES})
-ELSE()
-  ADD_LIBRARY(cpptcl_orxonox SHARED ${CPPTCL_FILES})
-  ORXONOX_INSTALL(cpptcl_orxonox)
-ENDIF()
-
-TARGET_LINK_LIBRARIES(cpptcl_orxonox ${TCL_LIBRARY})
-
-SET_TARGET_PROPERTIES(cpptcl_orxonox PROPERTIES VERSION 1.1.3)
+ORXONOX_ADD_LIBRARY(cpptcl_orxonox
+  ORXONOX_EXTERNAL
+  NO_DLL_INTERFACE
+  VERSION
+    1.1.3
+  LINK_LIBRARIES
+    ${TCL_LIBRARY}
+  SOURCE_FILES
+    ${CPPTCL_FILES}
+)
Index: code/branches/pch/src/network/CMakeLists.txt
===================================================================
--- code/branches/pch/src/network/CMakeLists.txt	(revision 3114)
+++ code/branches/pch/src/network/CMakeLists.txt	(revision 3116)
@@ -37,18 +37,16 @@
 ADD_SUBDIRECTORY(packet)
 ADD_SUBDIRECTORY(synchronisable)
-GET_ALL_HEADER_FILES(NETWORK_HDR_FILES)
-SET(NETWORK_FILES ${NETWORK_SRC_FILES} ${NETWORK_HDR_FILES})
 
-GENERATE_SOURCE_GROUPS(${NETWORK_FILES})
-
-ADD_LIBRARY(network SHARED ${NETWORK_FILES})
-SET_TARGET_PROPERTIES(network PROPERTIES DEFINE_SYMBOL "NETWORK_SHARED_BUILD")
-TARGET_LINK_LIBRARIES(network
-  ${ZLIB_LIBRARY}
-  ${ENET_LIBRARY}
-  ${Boost_THREAD_LIBRARY}
-  util
-  core
+ORXONOX_ADD_LIBRARY(network
+  FIND_HEADER_FILES
+  DEFINE_SYMBOL
+    "NETWORK_SHARED_BUILD"
+  LINK_LIBRARIES
+    ${ZLIB_LIBRARY}
+    ${ENET_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    util
+    core
+  SOURCE_FILES
+    ${NETWORK_SRC_FILES}
 )
-
-ORXONOX_INSTALL(network)
Index: code/branches/pch/src/ogreceguirenderer/CMakeLists.txt
===================================================================
--- code/branches/pch/src/ogreceguirenderer/CMakeLists.txt	(revision 3114)
+++ code/branches/pch/src/ogreceguirenderer/CMakeLists.txt	(revision 3116)
@@ -27,5 +27,4 @@
   OgreCEGUITexture.cpp
 )
-GENERATE_SOURCE_GROUPS(${OCR_FILES})
 
 # No warnings needed from third party libraries
@@ -33,12 +32,14 @@
 ADD_COMPILER_FLAGS("-w")
 
-ADD_LIBRARY(ogreceguirenderer_orxonox SHARED ${OCR_FILES})
-SET_TARGET_PROPERTIES(ogreceguirenderer_orxonox PROPERTIES DEFINE_SYMBOL "OGRE_GUIRENDERER_EXPORTS")
-TARGET_LINK_LIBRARIES(ogreceguirenderer_orxonox
-  ${OGRE_LIBRARY}
-  ${CEGUI_LIBRARY}
+ORXONOX_ADD_LIBRARY(ogreceguirenderer_orxonox
+  ORXONOX_EXTERNAL
+  LINK_LIBRARIES
+    ${OGRE_LIBRARY}
+    ${CEGUI_LIBRARY}
+  DEFINE_SYMBOL
+    "OGRE_GUIRENDERER_EXPORTS"
+  VERSION
+    1.4.9
+  SOURCE_FILES
+    ${OCR_FILES}
 )
-
-SET_TARGET_PROPERTIES(ogreceguirenderer_orxonox PROPERTIES VERSION 1.4.9)
-
-ORXONOX_INSTALL(ogreceguirenderer_orxonox)
Index: code/branches/pch/src/ois/CMakeLists.txt
===================================================================
--- code/branches/pch/src/ois/CMakeLists.txt	(revision 3114)
+++ code/branches/pch/src/ois/CMakeLists.txt	(revision 3116)
@@ -50,6 +50,4 @@
 ENDIF()
 
-GENERATE_SOURCE_GROUPS(${OIS_FILES})
-
 # No warnings needed from third party libraries
 REMOVE_COMPILER_FLAGS("-W3 -W4" MSVC)
@@ -58,12 +56,15 @@
 INCLUDE_DIRECTORIES(.)
 
-ADD_LIBRARY(ois_orxonox SHARED ${OIS_FILES})
-SET_TARGET_PROPERTIES(ois_orxonox PROPERTIES DEFINE_SYMBOL "OIS_NONCLIENT_BUILD")
+ORXONOX_ADD_LIBRARY(ois_orxonox
+  ORXONOX_EXTERNAL
+  DEFINE_SYMBOL
+    "OIS_NONCLIENT_BUILD"
+  VERSION
+    1.2
+  SOURCE_FILES
+    ${OIS_FILES}
+)
 
 IF(WIN32)
   TARGET_LINK_LIBRARIES(ois_orxonox ${DIRECTX_LIBRARIES})
 ENDIF()
-
-SET_TARGET_PROPERTIES(ois_orxonox PROPERTIES VERSION 1.2)
-
-ORXONOX_INSTALL(ois_orxonox)
Index: code/branches/pch/src/orxonox/CMakeLists.txt
===================================================================
--- code/branches/pch/src/orxonox/CMakeLists.txt	(revision 3114)
+++ code/branches/pch/src/orxonox/CMakeLists.txt	(revision 3116)
@@ -30,38 +30,39 @@
 ADD_SUBDIRECTORY(objects)
 ADD_SUBDIRECTORY(overlays)
+ADD_SUBDIRECTORY(sound)
 ADD_SUBDIRECTORY(tools)
-ADD_SUBDIRECTORY(sound)
-GET_ALL_HEADER_FILES(ORXONOX_HDR_FILES)
-SET(ORXONOX_FILES ${ORXONOX_SRC_FILES} ${ORXONOX_HDR_FILES})
 
-GENERATE_SOURCE_GROUPS(${ORXONOX_FILES})
-GENERATE_TOLUA_BINDINGS(Orxonox ORXONOX_FILES INPUTFILES gui/GUIManager.h objects/quest/QuestManager.h objects/quest/QuestDescription.h objects/pickup/PickupInventory.h objects/pickup/BaseItem.h)
+ORXONOX_ADD_EXECUTABLE(orxonox
+  FIND_HEADER_FILES
+  TOLUA_FILES
+    gui/GUIManager.h
+    objects/pickup/BaseItem.h
+    objects/pickup/PickupInventory.h
+    objects/quest/QuestDescription.h
+    objects/quest/QuestManager.h
+  LINK_LIBRARIES
+    ${OGRE_LIBRARY}
+    ${CEGUI_LIBRARY}
+    ${LUA_LIBRARIES}
+    ${CEGUILUA_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${OPENAL_LIBRARY}
+    ${ALUT_LIBRARY}
+    ${VORBISFILE_LIBRARY}
+    ${VORBIS_LIBRARY}
+    ${OGG_LIBRARY}
+    ogreceguirenderer_orxonox
+    tinyxml++_orxonox
+    tolua++_orxonox
+    bullet_orxonox
+    util
+    core
+    network
+  SOURCE_FILES ${ORXONOX_SRC_FILES}
+)
 
-ADD_EXECUTABLE(orxonox ${ORXONOX_FILES})
 GET_TARGET_PROPERTY(_exec_loc orxonox LOCATION)
 GET_FILENAME_COMPONENT(_exec_name ${_exec_loc} NAME)
 SET(ORXONOX_EXECUTABLE_NAME ${_exec_name} CACHE INTERNAL "")
-
-TARGET_LINK_LIBRARIES(orxonox
-  ${OGRE_LIBRARY}
-  ${CEGUI_LIBRARY}
-  ${LUA_LIBRARIES}
-  ${CEGUILUA_LIBRARY}
-  ${Boost_SYSTEM_LIBRARY}
-  ${OPENAL_LIBRARY}
-  ${ALUT_LIBRARY}
-  ${VORBISFILE_LIBRARY}
-  ${VORBIS_LIBRARY}
-  ${OGG_LIBRARY}
-  ogreceguirenderer_orxonox
-  tinyxml++_orxonox
-  tolua++_orxonox
-  bullet_orxonox
-  util
-  core
-  network
-)
-
-ORXONOX_INSTALL(orxonox)
 
 
Index: code/branches/pch/src/tinyxml/CMakeLists.txt
===================================================================
--- code/branches/pch/src/tinyxml/CMakeLists.txt	(revision 3114)
+++ code/branches/pch/src/tinyxml/CMakeLists.txt	(revision 3116)
@@ -30,5 +30,4 @@
   tinyxmlparser.cpp
 )
-GENERATE_SOURCE_GROUPS(${TINYXML++_FILES})
 
 # No warnings needed from third party libraries
@@ -36,10 +35,10 @@
 ADD_COMPILER_FLAGS("-w")
 
-IF(MSVC)
-  ADD_LIBRARY(tinyxml++_orxonox STATIC ${TINYXML++_FILES})
-ELSE()
-  ADD_LIBRARY(tinyxml++_orxonox SHARED ${TINYXML++_FILES})
-  ORXONOX_INSTALL(tinyxml++_orxonox)
-ENDIF()
-
-SET_TARGET_PROPERTIES(tinyxml++_orxonox PROPERTIES VERSION 2.5.3)
+ORXONOX_ADD_LIBRARY(tinyxml++_orxonox
+  ORXONOX_EXTERNAL
+  NO_DLL_INTERFACE
+  VERSION
+    2.5.3
+  SOURCE_FILES
+    ${TINYXML++_FILES}
+)
Index: code/branches/pch/src/tolua/CMakeLists.txt
===================================================================
--- code/branches/pch/src/tolua/CMakeLists.txt	(revision 3114)
+++ code/branches/pch/src/tolua/CMakeLists.txt	(revision 3116)
@@ -36,17 +36,28 @@
 ADD_COMPILER_FLAGS("-w")
 
-ADD_LIBRARY(tolua++_orxonox SHARED ${TOLUA++_FILES})
-SET_TARGET_PROPERTIES(tolua++_orxonox PROPERTIES DEFINE_SYMBOL "TOLUA_SHARED_BUILD")
-TARGET_LINK_LIBRARIES(tolua++_orxonox ${LUA_LIBRARIES})
-
-SET_TARGET_PROPERTIES(tolua++_orxonox PROPERTIES VERSION 1.0.92)
-
-ORXONOX_INSTALL(tolua++_orxonox)
+ORXONOX_ADD_LIBRARY(tolua++_orxonox
+  ORXONOX_EXTERNAL
+  DEFINE_SYMBOL
+    "TOLUA_SHARED_BUILD"
+  VERSION
+    1.0.92
+  LINK_LIBRARIES
+    ${LUA_LIBRARIES}
+  SOURCE_FILES
+    ${TOLUA++_FILES}
+)
 
 
 ################## Tolua++ generator ##################
 
-ADD_EXECUTABLE(tolua++app_orxonox tolua.c)
-TARGET_LINK_LIBRARIES(tolua++app_orxonox tolua++_orxonox ${LUA_LIBRARIES})
+ORXONOX_ADD_EXECUTABLE(tolua++app_orxonox
+  ORXONOX_EXTERNAL
+  VERSION
+    1.0.92
+  LINK_LIBRARIES
+    ${LUA_LIBRARIES}
+  SOURCE_FILES
+    tolua.c
+)
 
 OPTION(TOLUA_PARSER_RELEASE "Disable all debug messages from tolua bind files for Release and MinSizeRel build types." FALSE)
Index: code/branches/pch/src/util/CMakeLists.txt
===================================================================
--- code/branches/pch/src/util/CMakeLists.txt	(revision 3114)
+++ code/branches/pch/src/util/CMakeLists.txt	(revision 3116)
@@ -52,20 +52,4 @@
   SubString.cc
 )
-#GET_ALL_HEADER_FILES(UTIL_HDR_FILES)
-#SET(UTIL_FILES ${UTIL_SRC_FILES} ${UTIL_HDR_FILES})
-GENERATE_SOURCE_GROUPS(${UTIL_FILES})
-# Also add OrxonoxConfig to have it least somewhere in the IDE
-LIST(APPEND UTIL_FILES
-  ${CMAKE_BINARY_DIR}/src/OrxonoxConfig.h
-  ${CMAKE_SOURCE_DIR}/src/OrxonoxConfig.h.in
-  ${CMAKE_BINARY_DIR}/src/SpecialConfig.h
-  ${CMAKE_SOURCE_DIR}/src/SpecialConfig.h.in
-)
-SOURCE_GROUP("" FILES
-  ${CMAKE_BINARY_DIR}/src/OrxonoxConfig.h
-  ${CMAKE_SOURCE_DIR}/src/OrxonoxConfig.h.in
-  ${CMAKE_BINARY_DIR}/src/SpecialConfig.h
-  ${CMAKE_SOURCE_DIR}/src/SpecialConfig.h.in
-)
 
 IF(GCC_NO_SYSTEM_HEADER_SUPPORT)
@@ -74,7 +58,11 @@
 ENDIF()
 
-ADD_LIBRARY(util SHARED ${UTIL_FILES})
-SET_TARGET_PROPERTIES(util PROPERTIES DEFINE_SYMBOL "UTIL_SHARED_BUILD")
-TARGET_LINK_LIBRARIES(util ${OGRE_LIBRARY})
-
-ORXONOX_INSTALL(util)
+ORXONOX_ADD_LIBRARY(util
+  #FIND_HEADER_FILES
+  DEFINE_SYMBOL
+    "UTIL_SHARED_BUILD"
+  LINK_LIBRARIES
+    ${OGRE_LIBRARY}
+  SOURCE_FILES
+    ${UTIL_FILES}
+)
