From 4a218cf5ab2a29bf7b9ae399a99cdd2de8257e61 Mon Sep 17 00:00:00 2001
From: Mansard <nmansard@laas.fr>
Date: Fri, 14 Nov 2014 15:13:54 +0100
Subject: [PATCH] Added conditionnal compilation of urdf and python. Added
 precompilation of pyc file.

---
 CMakeLists.txt | 125 ++++++++++++++++++++++++++-----------------------
 1 file changed, 67 insertions(+), 58 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 616402d50..adc38b069 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -27,18 +27,16 @@ ELSE(WIN32)
   SET(LINK create_symlink)
 ENDIF(WIN32)
 
+# --- OPTIONS ----------------------------------------
+OPTION (BUILD_BENCHMARK "Build the benchmarks" OFF)
 
 # ----------------------------------------------------
 # --- DEPENDANCIES -----------------------------------
 # ----------------------------------------------------
-ADD_REQUIRED_DEPENDENCY("eigenpy >= v1.2.0")
-ADD_REQUIRED_DEPENDENCY("urdfdom >= v0.3.0")
-ADD_REQUIRED_DEPENDENCY("eigen3 >= v3.0.5")
-
-# ----------------------------------------------------
-# --- BENCHMARKS -------------------------------------
-# ----------------------------------------------------
-OPTION (BUILD_BENCHMARK "Build the benchmarks" OFF)
+ADD_REQUIRED_DEPENDENCY("eigen3 >= 3.0.5")
+ADD_OPTIONAL_DEPENDENCY("eigenpy >= 1.2.0")
+ADD_OPTIONAL_DEPENDENCY("metapod >= 1.0.7")
+ADD_OPTIONAL_DEPENDENCY("urdfdom >= 0.2.10")
 
 # ----------------------------------------------------
 # --- INCLUDE ----------------------------------------
@@ -66,7 +64,6 @@ SET(HEADERS
   multibody/joint/joint-generic.hpp
   multibody/model.hpp
   multibody/visitor.hpp
-  multibody/parser/urdf.hpp
   multibody/parser/sample-models.hpp
   algorithm/rnea.hpp
   algorithm/crba.hpp
@@ -87,6 +84,10 @@ SET(HEADERS
   python/parsers.hpp
 )
 
+IF(URDFDOM_FOUND)
+  LIST(APPEND HEADERS multibody/parser/urdf.hpp)
+ENDIF(URDFDOM_FOUND)
+
 MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio")
 MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/math")
 MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/spatial")
@@ -111,60 +112,68 @@ ENDFOREACH(header)
 # ----------------------------------------------------
 # --- PYTHON -----------------------------------------
 # ----------------------------------------------------
-FINDPYTHON()
-MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}")
-
-# --- COMPILE WRAPPER
-SET(PYWRAP ${PROJECT_NAME}_pywrap)
-ADD_LIBRARY(${PYWRAP} SHARED src/python/module.cpp src/python/python.cpp)
-PKG_CONFIG_USE_DEPENDENCY(${PYWRAP} eigenpy)
-PKG_CONFIG_USE_DEPENDENCY(${PYWRAP} urdfdom)
-TARGET_LINK_LIBRARIES(${PYWRAP} ${Boost_LIBRARIES} eigenpy)
-SET_TARGET_PROPERTIES(${PYWRAP} PROPERTIES
-  LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/python/${PROJECT_NAME}")
-INSTALL(FILES
-  "${CMAKE_BINARY_DIR}/lib/python/${PROJECT_NAME}/lib${PYWRAP}.so"
-    DESTINATION ${PYTHON_SITELIB}/${PROJECT_NAME})
-
-# --- INSTALL SCRIPTS 
-SET(PYTHON_FILES
-  python/__init__.py
-  python/utils.py
-  python/robot_wrapper.py
-  python/rpy.py
-  python/explog.py
-)
-FOREACH(python ${PYTHON_FILES})
-  GET_FILENAME_COMPONENT(pythonFile ${python} NAME)
-  EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E ${LINK}
-    ${${PROJECT_NAME}_SOURCE_DIR}/src/${python}
-    ${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile})
-
-  # Tag pyc file as generated.
-  SET_SOURCE_FILES_PROPERTIES(
-    "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c"
-    PROPERTIES GENERATED TRUE)
-
-  EXECUTE_PROCESS(COMMAND
-    ${PYTHON_EXECUTABLE} -m py_compile
-    ${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile} )
-
-  # Clean generated files.
-  SET_PROPERTY(
-    DIRECTORY APPEND PROPERTY
-    ADDITIONAL_MAKE_CLEAN_FILES
-    "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c")
 
+IF(EIGENPY_FOUND)
+  FINDPYTHON()
+  MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}")
+  
+  # --- COMPILE WRAPPER
+  SET(PYWRAP ${PROJECT_NAME}_pywrap)
+  ADD_LIBRARY(${PYWRAP} SHARED src/python/module.cpp src/python/python.cpp)
+  PKG_CONFIG_USE_DEPENDENCY(${PYWRAP} eigenpy)
+  IF(URDFDOM_FOUND)
+    PKG_CONFIG_USE_DEPENDENCY(${PYWRAP} urdfdom)
+    
+  ENDIF(URDFDOM_FOUND)
+  TARGET_LINK_LIBRARIES(${PYWRAP} ${Boost_LIBRARIES} eigenpy)
+  SET_TARGET_PROPERTIES(${PYWRAP} PROPERTIES
+    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/python/${PROJECT_NAME}")
   INSTALL(FILES
-    "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}"
-    "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c"
+    "${CMAKE_BINARY_DIR}/lib/python/${PROJECT_NAME}/lib${PYWRAP}.so"
     DESTINATION ${PYTHON_SITELIB}/${PROJECT_NAME})
-ENDFOREACH(python)
-
+  
+  # --- INSTALL SCRIPTS 
+  SET(PYTHON_FILES
+    python/__init__.py
+    python/utils.py
+    python/robot_wrapper.py
+    python/rpy.py
+    python/explog.py
+    )
+  FOREACH(python ${PYTHON_FILES})
+    GET_FILENAME_COMPONENT(pythonFile ${python} NAME)
+    EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E ${LINK}
+      ${${PROJECT_NAME}_SOURCE_DIR}/src/${python}
+      ${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile})
+    
+    # Tag pyc file as generated.
+    SET_SOURCE_FILES_PROPERTIES(
+      "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c"
+      PROPERTIES GENERATED TRUE)
+    
+    EXECUTE_PROCESS(COMMAND
+      ${PYTHON_EXECUTABLE} -m py_compile
+      ${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile} )
+    
+    # Clean generated files.
+    SET_PROPERTY(
+      DIRECTORY APPEND PROPERTY
+      ADDITIONAL_MAKE_CLEAN_FILES
+      "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c")
+    
+    INSTALL(FILES
+      "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}"
+      "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c"
+      DESTINATION ${PYTHON_SITELIB}/${PROJECT_NAME})
+  ENDFOREACH(python)
+ENDIF(EIGENPY_FOUND)
+
+# --- EXECUTABLES --------------------------------------------------------------
+# --- EXECUTABLES --------------------------------------------------------------
+# --- EXECUTABLES --------------------------------------------------------------
 ADD_SUBDIRECTORY(unittest)
-
 IF (BUILD_BENCHMARK)
-	ADD_SUBDIRECTORY (benchmark)
+  ADD_SUBDIRECTORY (benchmark)
 ENDIF (BUILD_BENCHMARK)
 
 SETUP_PROJECT_FINALIZE()
-- 
GitLab