From dcae5db3acf0e914f79f79384cf5562c2c529f23 Mon Sep 17 00:00:00 2001
From: mkroehnert <mkroehnert@042f3d55-54a8-47e9-b7fb-15903f145c44>
Date: Thu, 15 May 2014 16:23:16 +0000
Subject: [PATCH] cmake: after 'make install' the package is now relocatable

git-svn-id: http://svn.code.sf.net/p/simox/code/trunk@593 042f3d55-54a8-47e9-b7fb-15903f145c44
---
 CMakeLists.txt                               | 38 ++++++++++++--------
 CMakeModules/SimoxBuildTreeSettings.cmake.in |  9 +++++
 CMakeModules/SimoxConfig.cmake.in            | 28 +++++++++++----
 VirtualRobot/CMakeLists.txt                  |  2 +-
 config.cmake                                 |  9 +++--
 5 files changed, 58 insertions(+), 28 deletions(-)
 create mode 100644 CMakeModules/SimoxBuildTreeSettings.cmake.in

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 45ecced70..d23439238 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -74,29 +74,37 @@ export(TARGETS ${SIMOX_EXPORT_TARGET_LIST}
 export(PACKAGE Simox)
 
 # Create the SimoxConfig.cmake and SimoxVersion files
-file(RELATIVE_PATH REL_INCLUDE_DIR "${INSTALL_CMAKE_DIR}"
-   "${INSTALL_INCLUDE_DIR}")
 # ... for the build tree
 set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}" "${PROJECT_BINARY_DIR}")
-set (Simox_DATA_PATH ${Simox_DATA_DIR})
-set (Simox_MACROS_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/CMakeModules")
-configure_file(CMakeModules/SimoxConfig.cmake.in
-  "${PROJECT_BINARY_DIR}/SimoxConfig.cmake" @ONLY)
+set(Simox_DATA_PATH ${Simox_DATA_DIR})
+set(Simox_MACROS_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/CMakeModules")
+
+configure_file(CMakeModules/SimoxBuildTreeSettings.cmake.in
+    "${PROJECT_BINARY_DIR}/SimoxBuildTreeSettings.cmake" @ONLY)
+
+
 # ... for the install tree
-set(CONF_INCLUDE_DIRS "\${Simox_CMAKE_DIR}/${REL_INCLUDE_DIR}")
-set (Simox_DATA_PATH ${Simox_INSTALL_DATA_DIR})
-set (Simox_MACROS_INCLUDE_DIR "\${Simox_CMAKE_DIR}")
+file(RELATIVE_PATH RELATIVE_INSTALL_DIR
+     "${CMAKE_INSTALL_PREFIX}/${INSTALL_CMAKE_DIR}"
+     "${CMAKE_INSTALL_PREFIX}")
+
+set(CONF_INCLUDE_DIRS "${INSTALL_INCLUDE_DIR}")
+set(Simox_DATA_PATH "${Simox_INSTALL_DATA_DIR}")
+set(Simox_MACROS_INCLUDE_DIR "\${Simox_CMAKE_DIR}")
+
 configure_file(CMakeModules/SimoxConfig.cmake.in
-  "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/SimoxConfig.cmake" @ONLY)
+    "${PROJECT_BINARY_DIR}/SimoxConfig.cmake" @ONLY)
+
 # ... for both
 configure_file(CMakeModules/SimoxConfigVersion.cmake.in
-  "${PROJECT_BINARY_DIR}/SimoxConfigVersion.cmake" @ONLY)
+    "${PROJECT_BINARY_DIR}/SimoxConfigVersion.cmake" @ONLY)
 
-# Install the SimoxConfig.cmake and SimoxConfigVersion.cmake
+# Install the SimoxBuildTreeSettings.cmake, SimoxConfig.cmake, and SimoxConfigVersion.cmake
 install(FILES
-  "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/SimoxConfig.cmake"
-  "${PROJECT_BINARY_DIR}/SimoxConfigVersion.cmake"
-  DESTINATION "${INSTALL_CMAKE_DIR}" COMPONENT dev)
+    "${PROJECT_BINARY_DIR}/SimoxBuildTreeSettings.cmake"
+    "${PROJECT_BINARY_DIR}/SimoxConfig.cmake"
+    "${PROJECT_BINARY_DIR}/SimoxConfigVersion.cmake"
+    DESTINATION "${INSTALL_CMAKE_DIR}" COMPONENT dev)
 
 install(FILES
     "${PROJECT_SOURCE_DIR}/CMakeModules/SimoxMacros.cmake"
diff --git a/CMakeModules/SimoxBuildTreeSettings.cmake.in b/CMakeModules/SimoxBuildTreeSettings.cmake.in
new file mode 100644
index 000000000..d2346b1cb
--- /dev/null
+++ b/CMakeModules/SimoxBuildTreeSettings.cmake.in
@@ -0,0 +1,9 @@
+##  Copyright (c) 2014, Nikolaus Vahrenkamp (Karlsruhe Institute of Technology)
+
+# set the parameters which are different for an in-source build
+
+set(Simox_INCLUDE_DIRS "@CONF_INCLUDE_DIRS@")
+
+set(Simox_DATA_PATH "@Simox_DATA_PATH@")
+
+set(Simox_MACROS_INCLUDE_DIR "@Simox_MACROS_INCLUDE_DIR@")
diff --git a/CMakeModules/SimoxConfig.cmake.in b/CMakeModules/SimoxConfig.cmake.in
index 9d552b818..efcc47932 100644
--- a/CMakeModules/SimoxConfig.cmake.in
+++ b/CMakeModules/SimoxConfig.cmake.in
@@ -10,23 +10,37 @@
 #  Simox_USE_COIN_VISUALIZATION   - if Coin3D visualization was selected
 
 if(Simox_FOUND)
-	return()
+    return()
 endif()
 set(Simox_FOUND TRUE)
 
 # Compute paths
 get_filename_component(Simox_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
-set(Simox_INCLUDE_DIRS "@CONF_INCLUDE_DIRS@")
- 
+
 # Our library dependencies (contains definitions for IMPORTED targets)
 if(NOT TARGET Simox AND NOT Simox_BINARY_DIR)
   include("${Simox_CMAKE_DIR}/SimoxTargets.cmake")
 endif()
- 
 # These are IMPORTED targets created by SimoxTargets.cmake
 set(Simox_LIBRARIES "@Simox_LIBRARIES@")
 set(Simox_EXECUTABLE "@Simox_EXECUTABLE@")
-set(Simox_DATA_PATH "@Simox_DATA_PATH@")
+
+
+if(EXISTS "${Simox_CMAKE_DIR}/CMakeCache.txt")
+    # In build tree
+    message(STATUS "Using Simox Source-Build from: ${Simox_CURRENT_CMAKE_DIR}")
+    include("${Simox_CMAKE_DIR}/SimoxBuildTreeSettings.cmake")
+else()
+    # Installed project
+    message(STATUS "Using Simox Binary Package from: ${Simox_CMAKE_DIR}")
+    set(Simox_INCLUDE_DIRS "")
+    foreach (INCLUDE_DIR @CONF_INCLUDE_DIRS@)
+        LIST(APPEND Simox_INCLUDE_DIRS "${Simox_CMAKE_DIR}/@RELATIVE_INSTALL_DIR@/${INCLUDE_DIR}")
+    endforeach ()
+
+    set(Simox_DATA_PATH "${Simox_CMAKE_DIR}/@RELATIVE_INSTALL_DIR@/@Simox_DATA_PATH@")
+    set(Simox_MACROS_INCLUDE_DIR "${Simox_CMAKE_DIR}")
+endif()
 
 SET(Simox_VISUALIZATION "@Simox_VISUALIZATION@")
 SET(Simox_USE_COIN_VISUALIZATION "@Simox_USE_COIN_VISUALIZATION@")
@@ -42,7 +56,7 @@ SET(Simox_EXTERNAL_CMAKE_INCLUDE "@Simox_EXTERNAL_CMAKE_INCLUDE@")
 
 
 
-if (NOT (Simox_FIND_QUIETLY OR VirtualRobot_FIND_QUIETLY)) 
+if (NOT (Simox_FIND_QUIETLY OR VirtualRobot_FIND_QUIETLY))
     MESSAGE(STATUS " * Including ${Simox_CMAKE_DIR}/SimoxMacros.cmake")
 endif()
-include(@Simox_MACROS_INCLUDE_DIR@/SimoxMacros.cmake)
+include(${Simox_MACROS_INCLUDE_DIR}/SimoxMacros.cmake)
diff --git a/VirtualRobot/CMakeLists.txt b/VirtualRobot/CMakeLists.txt
index 66aad122b..7b4788283 100644
--- a/VirtualRobot/CMakeLists.txt
+++ b/VirtualRobot/CMakeLists.txt
@@ -315,7 +315,7 @@ INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR} DESTINATION "${Simox_INSTALL_HEADER_DIR}
         PATTERN "examples" EXCLUDE
 	)
 
-INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR}/data DESTINATION ${Simox_INSTALL_DIR}
+INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR}/data DESTINATION ${CMAKE_INSTALL_PREFIX}
 	COMPONENT ApplicationData
         FILES_MATCHING 
         PATTERN "*.xml"
diff --git a/config.cmake b/config.cmake
index 8f8927603..f9b3c44a8 100644
--- a/config.cmake
+++ b/config.cmake
@@ -66,11 +66,10 @@ IF (NOT Simox_CONFIGURED)
 	MESSAGE (STATUS "** SIMOX BIN DIR: ${Simox_BIN_DIR}")
 	MESSAGE (STATUS "** SIMOX DATA DIR: ${Simox_DATA_DIR}")
 
-	SET(Simox_INSTALL_DIR ${CMAKE_INSTALL_PREFIX})
-	SET(Simox_INSTALL_LIB_DIR ${Simox_INSTALL_DIR}/${LIB_DIR})
-	SET(Simox_INSTALL_BIN_DIR ${Simox_INSTALL_DIR}/${BIN_DIR})
-	SET(Simox_INSTALL_DATA_DIR ${Simox_INSTALL_DIR}/${DATA_DIR})
-	SET(Simox_INSTALL_HEADER_DIR ${Simox_INSTALL_DIR}/include)
+	SET(Simox_INSTALL_LIB_DIR ${LIB_DIR})
+	SET(Simox_INSTALL_BIN_DIR ${BIN_DIR})
+	SET(Simox_INSTALL_DATA_DIR ${DATA_DIR})
+	SET(Simox_INSTALL_HEADER_DIR include)
 	MESSAGE (STATUS "** SIMOX INSTALL LIB DIR: ${Simox_INSTALL_LIB_DIR}")
 	MESSAGE (STATUS "** SIMOX INSTALL BIN DIR: ${Simox_INSTALL_BIN_DIR}")
 	MESSAGE (STATUS "** SIMOX INSTALL DATA DIR: ${Simox_INSTALL_DATA_DIR}")
-- 
GitLab