Index: OpenSceneGraph/trunk/CMakeModules/OsgMacroUtils.cmake
===================================================================
--- OpenSceneGraph/trunk/CMakeModules/OsgMacroUtils.cmake (revision 11817)
+++ OpenSceneGraph/trunk/CMakeModules/OsgMacroUtils.cmake (revision 11904)
@@ -10,4 +10,34 @@
 #######################################################################################################
 
+# VALID_BUILDER_VERSION: used for replacing CMAKE_VERSION (available in v2.6.3 RC9) and VERSION_GREATER/VERSION_LESS (available in 2.6.2 RC4).
+# This can be replaced by "IF(${CMAKE_VERSION} VERSION_LESS "x.y.z")" from 2.6.4.
+SET(VALID_BUILDER_VERSION OFF)
+MACRO(BUILDER_VERSION_GREATER MAJOR_VER MINOR_VER PATCH_VER)
+    SET(VALID_BUILDER_VERSION OFF)
+    IF(CMAKE_MAJOR_VERSION GREATER ${MAJOR_VER})
+        SET(VALID_BUILDER_VERSION ON)
+    ELSEIF(CMAKE_MAJOR_VERSION EQUAL ${MAJOR_VER})
+        IF(CMAKE_MINOR_VERSION GREATER ${MINOR_VER})
+            SET(VALID_BUILDER_VERSION ON)
+        ELSEIF(CMAKE_MINOR_VERSION EQUAL ${MINOR_VER})
+            IF(CMAKE_PATCH_VERSION GREATER ${PATCH_VER})
+                SET(VALID_BUILDER_VERSION ON)
+            ENDIF(CMAKE_PATCH_VERSION GREATER ${PATCH_VER})
+        ENDIF()
+    ENDIF()
+ENDMACRO(BUILDER_VERSION_GREATER MAJOR_VER MINOR_VER PATCH_VER)
+
+# CMAKE24: if CMake version is <2.6.0.
+SET(CMAKE24 OFF)
+IF(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} LESS 5)
+    SET(CMAKE24 ON)
+ENDIF(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} LESS 5)
+
+# CMAKE_VERSION_TEST: Define whether "IF(${CMAKE_VERSION} VERSION_LESS "x.y.z")" can be used or not.
+BUILDER_VERSION_GREATER(2 6 3)
+SET(CMAKE_VERSION_TEST ${VALID_BUILDER_VERSION})        # >= 2.6.4
+
+SET(VALID_BUILDER_VERSION OFF)
+
 
 MACRO(LINK_WITH_VARIABLES TRGTNAME)
@@ -22,7 +52,7 @@
 
 MACRO(LINK_INTERNAL TRGTNAME)
-    IF(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} GREATER 4)
+    IF(NOT CMAKE24)
         TARGET_LINK_LIBRARIES(${TRGTNAME} ${ARGN})
-    ELSE(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} GREATER 4)
+    ELSE(NOT CMAKE24)
         FOREACH(LINKLIB ${ARGN})
             IF(MSVC AND OSG_MSVC_VERSIONED_DLL)
@@ -37,5 +67,5 @@
             ENDIF(MSVC AND OSG_MSVC_VERSIONED_DLL)
         ENDFOREACH(LINKLIB)
-    ENDIF(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} GREATER 4)
+    ENDIF(NOT CMAKE24)
 ENDMACRO(LINK_INTERNAL TRGTNAME)
 
@@ -130,4 +160,42 @@
 #
 
+# Sets the output directory property for CMake >= 2.6.0, giving an output path RELATIVE to default one
+MACRO(SET_OUTPUT_DIR_PROPERTY_260 TARGET_TARGETNAME RELATIVE_OUTDIR)
+    BUILDER_VERSION_GREATER(2 8 0)
+    IF(NOT VALID_BUILDER_VERSION)
+        # If CMake <= 2.8.0 (Testing CMAKE_VERSION is possible in >= 2.6.4)
+        IF(MSVC_IDE)
+            # Using the "prefix" hack
+            SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "../${RELATIVE_OUTDIR}/")
+        ELSE(MSVC_IDE)
+            SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "${RELATIVE_OUTDIR}/")
+        ENDIF(MSVC_IDE)
+    ELSE(NOT VALID_BUILDER_VERSION)
+        # Using the output directory properties
+
+        # Global properties (All generators but VS & Xcode)
+        FILE(TO_CMAKE_PATH TMPVAR "CMAKE_ARCHIVE_OUTPUT_DIRECTORY/${RELATIVE_OUTDIR}")
+        SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${TMPVAR}")
+        FILE(TO_CMAKE_PATH TMPVAR "CMAKE_RUNTIME_OUTPUT_DIRECTORY/${RELATIVE_OUTDIR}")
+        SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TMPVAR}")
+        FILE(TO_CMAKE_PATH TMPVAR "CMAKE_LIBRARY_OUTPUT_DIRECTORY/${RELATIVE_OUTDIR}")
+        SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${TMPVAR}")
+
+        # Per-configuration property (VS, Xcode)
+        FOREACH(CONF ${CMAKE_CONFIGURATION_TYPES})        # For each configuration (Debug, Release, MinSizeRel... and/or anything the user chooses)
+            STRING(TOUPPER "${CONF}" CONF)                # Go uppercase (DEBUG, RELEASE...)
+
+            # We use "FILE(TO_CMAKE_PATH", to create nice looking paths
+            FILE(TO_CMAKE_PATH "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONF}}/${RELATIVE_OUTDIR}" TMPVAR)
+            SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES "ARCHIVE_OUTPUT_DIRECTORY_${CONF}" "${TMPVAR}")
+            FILE(TO_CMAKE_PATH "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONF}}/${RELATIVE_OUTDIR}" TMPVAR)
+            SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES "RUNTIME_OUTPUT_DIRECTORY_${CONF}" "${TMPVAR}")
+            FILE(TO_CMAKE_PATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONF}}/${RELATIVE_OUTDIR}" TMPVAR)
+            SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES "LIBRARY_OUTPUT_DIRECTORY_${CONF}" "${TMPVAR}")
+        ENDFOREACH(CONF ${CMAKE_CONFIGURATION_TYPES})
+    ENDIF(NOT VALID_BUILDER_VERSION)
+ENDMACRO(SET_OUTPUT_DIR_PROPERTY_260 TARGET_TARGETNAME RELATIVE_OUTDIR)
+
+
 MACRO(SETUP_PLUGIN PLUGIN_NAME)
 
@@ -169,13 +237,8 @@
         ENDIF(NOT UNIX)
     ELSE(NOT MSVC)
-        IF(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} GREATER 4)
-            IF(NOT MSVC_IDE)
-                SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "${OSG_PLUGINS}/")                     
-            ELSE(NOT MSVC_IDE)
-                IF(MSVC_VERSION LESS 1600)
-                    SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "../${OSG_PLUGINS}/")
-                ENDIF()
-            ENDIF(NOT MSVC_IDE)
-        ELSE(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} GREATER 4)
+        IF(NOT CMAKE24)
+            SET_OUTPUT_DIR_PROPERTY_260(${TARGET_TARGETNAME} "${OSG_PLUGINS}")        # Sets the ouput to be /osgPlugin-X.X.X ; also ensures the /Debug /Release are removed
+        ELSE(NOT CMAKE24)
+
             IF(OSG_MSVC_VERSIONED_DLL) 
 
@@ -200,5 +263,6 @@
                 SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "${OSG_PLUGINS}/")
             ENDIF(OSG_MSVC_VERSIONED_DLL)
-        ENDIF(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} GREATER 4)
+
+        ENDIF(NOT CMAKE24)
     ENDIF(NOT MSVC)
 
@@ -279,7 +343,5 @@
 
     IF(MSVC_IDE AND OSG_MSVC_VERSIONED_DLL)
-        IF(MSVC_VERSION LESS 1600)
-            SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "../")    
-        ENDIF()
+        SET_OUTPUT_DIR_PROPERTY_260(${TARGET_TARGETNAME} "")        # Ensure the /Debug /Release are removed
     ENDIF(MSVC_IDE AND OSG_MSVC_VERSIONED_DLL)
 
@@ -365,8 +427,17 @@
                 SET(LIB_SOVERSION ${OPENSCENEGRAPH_SOVERSION})
         ENDIF(${ARGC} GREATER 1)
-    
+
+        SET_OUTPUT_DIR_PROPERTY_260(${LIB_NAME} "")        # Ensure the /Debug /Release are removed
         IF(NOT MSVC_IDE) 
-            SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../bin/${LIB_PREFIX}${LIB_SOVERSION}-")
-            IF (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) 
+            IF (NOT CMAKE24)
+                BUILDER_VERSION_GREATER(2 8 0)
+                IF(NOT VALID_BUILDER_VERSION)
+                    # If CMake < 2.8.1
+                    SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../bin/${LIB_PREFIX}${LIB_SOVERSION}-" IMPORT_PREFIX "../")
+                ELSE(NOT VALID_BUILDER_VERSION)
+                    SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "${LIB_PREFIX}${LIB_SOVERSION}-")
+                ENDIF(NOT VALID_BUILDER_VERSION)
+            ELSE (NOT CMAKE24)
+                SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../bin/${LIB_PREFIX}${LIB_SOVERSION}-" IMPORT_PREFIX "../")
                 SET(NEW_LIB_NAME "${OUTPUT_BINDIR}/${LIB_PREFIX}${LIB_SOVERSION}-${LIB_NAME}")
                 ADD_CUSTOM_COMMAND(
@@ -378,9 +449,17 @@
                     COMMAND ${CMAKE_COMMAND} -E remove "${NEW_LIB_NAME}.exp"
                     )
-            ENDIF (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) 
-        ELSE(NOT MSVC_IDE) 
-            IF(MSVC_VERSION LESS 1600)
+            ENDIF (NOT CMAKE24)
+        ELSE(NOT MSVC_IDE)
+            IF (NOT CMAKE24)
+                BUILDER_VERSION_GREATER(2 8 0)
+                IF(NOT VALID_BUILDER_VERSION)
+                    # If CMake < 2.8.1
+                    SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../../bin/${LIB_PREFIX}${LIB_SOVERSION}-" IMPORT_PREFIX "../")
+                ELSE(NOT VALID_BUILDER_VERSION)
+                    SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "${LIB_PREFIX}${LIB_SOVERSION}-")
+                ENDIF(NOT VALID_BUILDER_VERSION)
+            ELSE (NOT CMAKE24)
                 SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../../bin/${LIB_PREFIX}${LIB_SOVERSION}-" IMPORT_PREFIX "../")
-            ENDIF()
+            ENDIF (NOT CMAKE24)
         ENDIF(NOT MSVC_IDE) 
 
