From d3fe34389a5deea58b7d3b9af11e327fa994f7e8 Mon Sep 17 00:00:00 2001
From: Jeongseok Lee <jslee02@gmail.com>
Date: Sun, 5 Apr 2015 04:58:11 -0400
Subject: [PATCH] Enable out-of-source build by generating configs to binary
 directory

---
 CMakeLists.txt                 | 8 +++++---
 include/fcl/CMakeLists.txt     | 6 ++++--
 test/CMakeLists.txt            | 9 ++++++---
 test/fcl_resources/config.h.in | 2 +-
 4 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index a74a5c0c..41cfb3e8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -105,6 +105,7 @@ add_definitions(-DBOOST_TEST_DYN_LINK)
 
 # FCL's own include dir should be at the front of the include path
 include_directories(BEFORE "include")
+include_directories("${CMAKE_CURRENT_BINARY_DIR}/include")
 
 if(PKG_CONFIG_FOUND)
   pkg_check_modules(CCD ccd)
@@ -133,15 +134,16 @@ link_directories(${CCD_LIBRARY_DIRS})
 add_subdirectory(include/fcl)
 add_subdirectory(src)
 
-set(pkg_conf_file "${CMAKE_CURRENT_SOURCE_DIR}/fcl.pc")
-configure_file("${pkg_conf_file}.in" "${pkg_conf_file}" @ONLY)
+set(pkg_conf_file_in "${CMAKE_CURRENT_SOURCE_DIR}/fcl.pc.in")
+set(pkg_conf_file_out "${CMAKE_CURRENT_BINARY_DIR}/fcl.pc")
+configure_file("${pkg_conf_file_in}" "${pkg_conf_file_out}" @ONLY)
 
 install(DIRECTORY include/ DESTINATION include
   FILES_MATCHING PATTERN "*.h" PATTERN "*.hxx"
   PATTERN ".DS_Store" EXCLUDE
 )
 
-install(FILES "${pkg_conf_file}" DESTINATION lib/pkgconfig/ COMPONENT pkgconfig)
+install(FILES "${pkg_conf_file_out}" DESTINATION lib/pkgconfig/ COMPONENT pkgconfig)
 
 
 enable_testing()
diff --git a/include/fcl/CMakeLists.txt b/include/fcl/CMakeLists.txt
index 00022861..eeba55a1 100644
--- a/include/fcl/CMakeLists.txt
+++ b/include/fcl/CMakeLists.txt
@@ -1,2 +1,4 @@
-file(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" VERSION_DIR)
-configure_file("${VERSION_DIR}/config.h.in" "${VERSION_DIR}/config.h")
+file(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" FCL_CONFIG_IN_DIR)
+file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}" FCL_CONFIG_OUT_DIR)
+configure_file("${FCL_CONFIG_IN_DIR}/config.h.in" "${FCL_CONFIG_OUT_DIR}/config.h")
+install(FILES "${FCL_CONFIG_OUT_DIR}/config.h" DESTINATION include/fcl)
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index f684fcd6..ed7e36e5 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -10,14 +10,17 @@ macro(add_fcl_test test_name)
 endmacro(add_fcl_test)
 
 # configure location of resources
-file(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/fcl_resources" TEST_RESOURCES_DIR)
+file(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/fcl_resources" TEST_RESOURCES_SRC_DIR)
+file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}/fcl_resources" TEST_RESOURCES_BIN_DIR)
 if(WIN32)
     # Correct directory separator for Windows
-    string(REPLACE "\\" "\\\\" TEST_RESOURCES_DIR ${TEST_RESOURCES_DIR})
+    string(REPLACE "\\" "\\\\" TEST_RESOURCES_SRC_DIR ${TEST_RESOURCES_SRC_DIR})
+    string(REPLACE "\\" "\\\\" TEST_RESOURCES_BIN_DIR ${TEST_RESOURCES_BIN_DIR})
 endif(WIN32)
-configure_file("${TEST_RESOURCES_DIR}/config.h.in" "${TEST_RESOURCES_DIR}/config.h")
+configure_file("${TEST_RESOURCES_SRC_DIR}/config.h.in" "${TEST_RESOURCES_BIN_DIR}/config.h")
 
 include_directories(.)
+include_directories("${CMAKE_CURRENT_BINARY_DIR}")
 
 add_fcl_test(test_fcl_collision test_fcl_collision.cpp test_fcl_utility.cpp)
 add_fcl_test(test_fcl_distance test_fcl_distance.cpp test_fcl_utility.cpp)
diff --git a/test/fcl_resources/config.h.in b/test/fcl_resources/config.h.in
index 1f8e8cf6..8486bd25 100644
--- a/test/fcl_resources/config.h.in
+++ b/test/fcl_resources/config.h.in
@@ -37,5 +37,5 @@
 #ifndef FCL_TEST_RESOURCES_CONFIG_
 #define FCL_TEST_RESOURCES_CONFIG_
 
-#define TEST_RESOURCES_DIR "@TEST_RESOURCES_DIR@"
+#define TEST_RESOURCES_DIR "@TEST_RESOURCES_SRC_DIR@"
 #endif
-- 
GitLab