From d6e151bc91ce6ad0f162d8dbe607951c13a29181 Mon Sep 17 00:00:00 2001
From: isucan <isucan@253336fb-580f-4252-a368-f3cef5a2a82b>
Date: Fri, 24 Aug 2012 08:02:20 +0000
Subject: [PATCH] fixes for build system; add version, linking to boost,
 looking for octomap using pkg config

git-svn-id: https://kforge.ros.org/fcl/fcl_ros@172 253336fb-580f-4252-a368-f3cef5a2a82b
---
 trunk/fcl/CMakeLists.txt                     | 28 +++++++-----
 trunk/fcl/CMakeModules/FCLCheckOctomap.cmake | 45 --------------------
 trunk/fcl/CMakeModules/FCLVersion.cmake      |  8 ++++
 trunk/fcl/include/fcl/config.h.in            |  4 ++
 trunk/fcl/src/CMakeLists.txt                 |  2 +-
 5 files changed, 30 insertions(+), 57 deletions(-)
 delete mode 100644 trunk/fcl/CMakeModules/FCLCheckOctomap.cmake
 create mode 100644 trunk/fcl/CMakeModules/FCLVersion.cmake

diff --git a/trunk/fcl/CMakeLists.txt b/trunk/fcl/CMakeLists.txt
index 6b6060ff..e64d1a6d 100644
--- a/trunk/fcl/CMakeLists.txt
+++ b/trunk/fcl/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 2.4.6)
+cmake_minimum_required(VERSION 2.8)
 project(fcl CXX C)
 
 # Set the build type.  Options are:
@@ -9,9 +9,10 @@ project(fcl CXX C)
 #  MinSizeRel     : w/o debug symbols, w/ optimization, stripped binaries
 
 set(CMAKE_BUILD_TYPE Release)
-set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
+set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
 set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
 
+include(FCLVersion)
 
 # Check for SSE flags
 set(FCL_HAVE_SSE 0)
@@ -26,22 +27,28 @@ else()
   message(STATUS "FCL does not use SSE")
 endif()
 
-# Check for Octomap flags
+# Find Octomap (optional)
+find_package(PkgConfig REQUIRED)
 set(FCL_HAVE_OCTOMAP 0)
-include(FCLCheckOctomap)
-fcl_check_for_octomap()
-if (OCTOMAP_FLAGS)
-  message(STATUS "FCL uses octomap")
-  add_definitions(${OCTOMAP_FLAGS})
+pkg_check_modules(OCTOMAP QUIET octomap)
+if (OCTOMAP_INCLUDE_DIRS)
+  include_directories(${OCTOMAP_INCLUDE_DIRS})
+  link_directories(${OCTOMAP_LIBRARY_DIRS})
   set(FCL_HAVE_OCTOMAP 1)
+  message(STATUS "FCL uses Octomap")
 else()
-  message(STATUS "FCL does not use octomap")
+  message(STATUS "FCL does not use Octomap")
+endif()
+
+if(MSVC OR MSVC90 OR MSVC10)
+    add_definitions(-DBOOST_ALL_NO_LIB)
 endif()
+find_package(Boost COMPONENTS thread REQUIRED)
+include_directories(${Boost_INCLUDE_DIR})
 
 # make sure we know what flag we used for SSE 
 include_directories("include")
 
-find_package(PkgConfig)
 pkg_check_modules(CCD REQUIRED ccd)
 include_directories(${CCD_INCLUDE_DIRS})
 link_directories(${CCD_LIBRARY_DIRS})
@@ -52,7 +59,6 @@ if(OCTOMAP_FOUND)
     link_directories(${OCTOMAP_LIBRARY_DIRS})
 endif()
 
-
 add_subdirectory(include/fcl)
 add_subdirectory(src)
 
diff --git a/trunk/fcl/CMakeModules/FCLCheckOctomap.cmake b/trunk/fcl/CMakeModules/FCLCheckOctomap.cmake
deleted file mode 100644
index 43261a61..00000000
--- a/trunk/fcl/CMakeModules/FCLCheckOctomap.cmake
+++ /dev/null
@@ -1,45 +0,0 @@
-macro(fcl_check_for_octomap)
-  #check for Octomap
-  include(CheckCXXSourceRuns)
-  set(OCTOMAP_FLAGS)
-  
-  check_cxx_source_runs("
-    #include <octomap/octomap.h>
-    int main()
-    {
-      octomap::OcTree* tree = new octomap::OcTree(0.1);
-      
-      for(int x = -20; x < 20; ++x)
-      {
-        for(int y = -20; y < 20; ++y)
-	{
-	  for(int z = -20; z < 20; ++z)
-	  {
-	    tree->updateNode(octomap::point3d(x * 0.05, y * 0.05, z * 0.05), true);
-	  }
-	}
-      }
-      
-      for(int x = -30; x < 30; ++x)
-      {
-        for(int y = -30; y < 30; ++y)
-	{
-	  for(int z = -30; z < 30; ++z)
-	  {
-	    tree->updateNode(octomap::point3d(x * 0.02 - 1.0, y * 0.02 - 1.0, z * 0.02 - 1.0), false);
-	  }
-	}
-      }
-
-      return 1;
-    }"
-    HAS_OCTOMAP)
-  
-  set(CMAKE_REQUIRED_FLAGS)
-  
-  if(HAS_OCTOMAP)
-    set(OCTOMAP_FLAGS "-loctomap")
-    message(STATUS " Found octomap, using flags: ${OCTOMAP_FLAGS}")
-  endif()
-
-endmacro(fcl_check_for_octomap)
\ No newline at end of file
diff --git a/trunk/fcl/CMakeModules/FCLVersion.cmake b/trunk/fcl/CMakeModules/FCLVersion.cmake
new file mode 100644
index 00000000..68b53676
--- /dev/null
+++ b/trunk/fcl/CMakeModules/FCLVersion.cmake
@@ -0,0 +1,8 @@
+# set the version in a way CMake can use
+set(FCL_MAJOR_VERSION 0)
+set(FCL_MINOR_VERSION 2)
+set(FCL_PATCH_VERSION 0)
+set(FCL_VERSION "${FCL_MAJOR_VERSION}.${FCL_MINOR_VERSION}.${FCL_PATCH_VERSION}")
+
+# increment this when we have ABI changes
+set(FCL_ABI_VERSION 1)
diff --git a/trunk/fcl/include/fcl/config.h.in b/trunk/fcl/include/fcl/config.h.in
index eff6e78b..ba1aed54 100644
--- a/trunk/fcl/include/fcl/config.h.in
+++ b/trunk/fcl/include/fcl/config.h.in
@@ -36,6 +36,10 @@
 #define FCL_CONFIG_
 
 #define FCL_VERSION "@FCL_VERSION@"
+#define FCL_MAJOR_VERSION @FCL_MAJOR_VERSION@
+#define FCL_MINOR_VERSION @FCL_MINOR_VERSION@
+#define FCL_PATCH_VERSION @FCL_PATCH_VERSION@
+
 #cmakedefine01 FCL_HAVE_SSE
 #cmakedefine01 FCL_HAVE_OCTOMAP
 
diff --git a/trunk/fcl/src/CMakeLists.txt b/trunk/fcl/src/CMakeLists.txt
index abe55237..c349391a 100644
--- a/trunk/fcl/src/CMakeLists.txt
+++ b/trunk/fcl/src/CMakeLists.txt
@@ -45,6 +45,6 @@ add_library(${PROJECT_NAME} SHARED
   profile.cpp
   collision_data.cpp)
 
-target_link_libraries(${PROJECT_NAME} ${CCD_LIBRARIES} ${OCTOMAP_LIBRARIES})
+target_link_libraries(${PROJECT_NAME} ${CCD_LIBRARIES} ${OCTOMAP_LIBRARIES} ${Boost_LIBRARIES})
 
 install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION lib/ LIBRARY DESTINATION lib/)
-- 
GitLab