From 9c28b4c4cd2ecf828beebb7d6fca7eb5fad75e1e Mon Sep 17 00:00:00 2001 From: jcarpent <jcarpent@laas.fr> Date: Mon, 25 Jul 2016 09:39:33 +0200 Subject: [PATCH] [CMake] Move python to a dedicated directory --- CMakeLists.txt | 41 +---- bindings/CMakeLists.txt | 17 +++ bindings/python/CMakeLists.txt | 148 +++++++++++++++++++ {src => bindings}/python/__init__.py | 0 {src => bindings}/python/algorithms.hpp | 0 {src => bindings}/python/data.hpp | 0 {src => bindings}/python/eigen_container.hpp | 0 {src => bindings}/python/explog.hpp | 0 {src => bindings}/python/explog.py | 0 {src => bindings}/python/force.hpp | 0 {src => bindings}/python/frame.hpp | 0 {src => bindings}/python/geometry-data.hpp | 0 {src => bindings}/python/geometry-model.hpp | 0 {src => bindings}/python/geometry-object.hpp | 0 {src => bindings}/python/handler.hpp | 0 {src => bindings}/python/inertia.hpp | 0 {src => bindings}/python/joint-derived.hpp | 0 {src => bindings}/python/joint.hpp | 0 {src => bindings}/python/joints-models.hpp | 0 {src => bindings}/python/joints-variant.hpp | 0 {src => bindings}/python/model.hpp | 0 {src => bindings}/python/module.cpp | 0 {src => bindings}/python/motion.hpp | 0 {src => bindings}/python/parsers.hpp | 0 {src => bindings}/python/python.cpp | 0 {src => bindings}/python/python.hpp | 0 {src => bindings}/python/robot_wrapper.py | 0 {src => bindings}/python/romeo_wrapper.py | 0 {src => bindings}/python/rpy.py | 0 {src => bindings}/python/se3.hpp | 0 {src => bindings}/python/utils.py | 0 src/CMakeLists.txt | 76 ---------- 32 files changed, 169 insertions(+), 113 deletions(-) create mode 100644 bindings/CMakeLists.txt create mode 100644 bindings/python/CMakeLists.txt rename {src => bindings}/python/__init__.py (100%) rename {src => bindings}/python/algorithms.hpp (100%) rename {src => bindings}/python/data.hpp (100%) rename {src => bindings}/python/eigen_container.hpp (100%) rename {src => bindings}/python/explog.hpp (100%) rename {src => bindings}/python/explog.py (100%) rename {src => bindings}/python/force.hpp (100%) rename {src => bindings}/python/frame.hpp (100%) rename {src => bindings}/python/geometry-data.hpp (100%) rename {src => bindings}/python/geometry-model.hpp (100%) rename {src => bindings}/python/geometry-object.hpp (100%) rename {src => bindings}/python/handler.hpp (100%) rename {src => bindings}/python/inertia.hpp (100%) rename {src => bindings}/python/joint-derived.hpp (100%) rename {src => bindings}/python/joint.hpp (100%) rename {src => bindings}/python/joints-models.hpp (100%) rename {src => bindings}/python/joints-variant.hpp (100%) rename {src => bindings}/python/model.hpp (100%) rename {src => bindings}/python/module.cpp (100%) rename {src => bindings}/python/motion.hpp (100%) rename {src => bindings}/python/parsers.hpp (100%) rename {src => bindings}/python/python.cpp (100%) rename {src => bindings}/python/python.hpp (100%) rename {src => bindings}/python/robot_wrapper.py (100%) rename {src => bindings}/python/romeo_wrapper.py (100%) rename {src => bindings}/python/rpy.py (100%) rename {src => bindings}/python/se3.hpp (100%) rename {src => bindings}/python/utils.py (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index f9fcd87d0..5478746fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -194,40 +194,6 @@ SET(${PROJECT_NAME}_ALGORITHM_HEADERS algorithm/copy.hpp ) - -IF(BUILD_PYTHON_INTERFACE) - SET(${PROJECT_NAME}_PYTHON_HEADERS - python/eigen_container.hpp - python/handler.hpp - python/python.hpp - python/se3.hpp - python/force.hpp - python/motion.hpp - python/inertia.hpp - python/joints-models.hpp - python/joints-variant.hpp - python/joint.hpp - python/joint-derived.hpp - python/frame.hpp - python/model.hpp - python/data.hpp - python/algorithms.hpp - python/parsers.hpp - python/explog.hpp - ) - - -LIST(APPEND ${PROJECT_NAME}_PYTHON_HEADERS - python/geometry-object.hpp - python/geometry-model.hpp - python/geometry-data.hpp - ) - - -ELSE(BUILD_PYTHON_INTERFACE) - SET(${PROJECT_NAME}_PYTHON_HEADERS "") -ENDIF(BUILD_PYTHON_INTERFACE) - SET(${PROJECT_NAME}_PARSERS_HEADERS parsers/sample-models.hpp parsers/utils.hpp @@ -279,7 +245,6 @@ IF(LUA5_1_FOUND) LIST(APPEND CFLAGS_DEPENDENCIES "-DWITH_LUA") ENDIF(LUA5_1_FOUND) - SET(HEADERS ${${PROJECT_NAME}_MATH_HEADERS} ${${PROJECT_NAME}_TOOLS_HEADERS} @@ -288,7 +253,6 @@ SET(HEADERS ${${PROJECT_NAME}_MULTIBODY_HEADERS} ${${PROJECT_NAME}_PARSERS_HEADERS} ${${PROJECT_NAME}_ALGORITHM_HEADERS} - ${${PROJECT_NAME}_PYTHON_HEADERS} exception.hpp assert.hpp ) @@ -307,7 +271,6 @@ MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/parsers") MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/parsers/urdf") MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/tools") MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/algorithm") -MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/python") FOREACH(header ${HEADERS}) GET_FILENAME_COMPONENT(headerName ${header} NAME) @@ -321,6 +284,10 @@ FOREACH(header ${HEADERS}) ENDFOREACH(header) ADD_SUBDIRECTORY(src) + +# --- BINDINGS ----------------------------------------------------------------- +ADD_SUBDIRECTORY(bindings) + # --- EXECUTABLES -------------------------------------------------------------- # --- EXECUTABLES -------------------------------------------------------------- # --- EXECUTABLES -------------------------------------------------------------- diff --git a/bindings/CMakeLists.txt b/bindings/CMakeLists.txt new file mode 100644 index 000000000..5d9271606 --- /dev/null +++ b/bindings/CMakeLists.txt @@ -0,0 +1,17 @@ +# +# Copyright (c) 2016 CNRS +# +# This file is part of Pinocchio +# pinocchio is free software: you can redistribute it +# and/or modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either version +# 3 of the License, or (at your option) any later version. +# pinocchio is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Lesser Public License for more details. You should have +# received a copy of the GNU Lesser General Public License along with +# pinocchio If not, see +# <http://www.gnu.org/licenses/>. + +ADD_SUBDIRECTORY(python) diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt new file mode 100644 index 000000000..05f928c5a --- /dev/null +++ b/bindings/python/CMakeLists.txt @@ -0,0 +1,148 @@ +# +# Copyright (c) 2015-2016 CNRS +# Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. +# +# This file is part of Pinocchio +# Pinocchio is free software: you can redistribute it +# and/or modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either version +# 3 of the License, or (at your option) any later version. +# Pinocchio is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Lesser Public License for more details. You should have +# received a copy of the GNU Lesser General Public License along with +# Pinocchio If not, see +# <http://www.gnu.org/licenses/>. + +MACRO(ADD_GROUP GROUP_NAME FILENAMES) + FOREACH(filename ${${FILENAMES}}) + GET_FILENAME_COMPONENT(filenamePath ${filename} PATH) + IF(NOT (filenamePath STREQUAL "")) + STRING(REGEX REPLACE "/" "\\\\" filenamePath ${filenamePath}) + SOURCE_GROUP("${GROUP_NAME}\\${filenamePath}" FILES ${filename}) + ELSE() + SOURCE_GROUP("${GROUP_NAME}" FILES ${filename}) + ENDIF() + ENDFOREACH() +ENDMACRO(ADD_GROUP) + +MACRO(ADD_HEADER_GROUP FILENAMES) + ADD_GROUP("Header Files" ${FILENAMES}) +ENDMACRO(ADD_HEADER_GROUP FILENAMES) + +MACRO(ADD_SOURCE_GROUP FILENAMES) + ADD_GROUP("Source Files" ${FILENAMES}) +ENDMACRO(ADD_SOURCE_GROUP FILENAMES) + +IF(BUILD_PYTHON_INTERFACE) + # --- Collect header files + SET(${PROJECT_NAME}_PYTHON_HEADERS + eigen_container.hpp + handler.hpp + python.hpp + se3.hpp + force.hpp + motion.hpp + inertia.hpp + joints-models.hpp + joints-variant.hpp + joint.hpp + joint-derived.hpp + frame.hpp + model.hpp + data.hpp + algorithms.hpp + parsers.hpp + explog.hpp + geometry-object.hpp + geometry-model.hpp + geometry-data.hpp + ) + + LIST(APPEND HEADERS ${${PROJECT_NAME}_PYTHON_HEADERS}) + LIST(REMOVE_DUPLICATES HEADERS) + + MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/bindings/python") + FOREACH(header ${${PROJECT_NAME}_PYTHON_HEADERS}) + GET_FILENAME_COMPONENT(headerName ${header} NAME) + GET_FILENAME_COMPONENT(headerPath ${header} PATH) + EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E ${LINK} + ${${PROJECT_NAME}_SOURCE_DIR}/bindings/python/${header} + ${${PROJECT_NAME}_BINARY_DIR}/include/${PROJECT_NAME}/bindings/python/${header}) + INSTALL(FILES ${${PROJECT_NAME}_SOURCE_DIR}/bindings/python/${header} + DESTINATION ${CMAKE_INSTALL_PREFIX}/include/${PROJECT_NAME}/bindings/python + PERMISSIONS OWNER_READ GROUP_READ WORLD_READ OWNER_WRITE) + ENDFOREACH(header) + + MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}") + + # --- COMPILE WRAPPER + SET(PYWRAP ${PROJECT_NAME}_pywrap) + ADD_LIBRARY(${PYWRAP} SHARED module.cpp python.cpp) + PKG_CONFIG_USE_DEPENDENCY(${PYWRAP} eigenpy) + + IF(URDFDOM_FOUND) + PKG_CONFIG_USE_DEPENDENCY(${PYWRAP} urdfdom) + ENDIF(URDFDOM_FOUND) + IF(HPP_FCL_FOUND) + PKG_CONFIG_USE_DEPENDENCY(${PYWRAP} hpp-fcl) + ENDIF(HPP_FCL_FOUND) + IF(LUA5_1_FOUND) + PKG_CONFIG_USE_DEPENDENCY(${PYWRAP} lua5.1) + ENDIF(LUA5_1_FOUND) + + TARGET_LINK_LIBRARIES(${PYWRAP} ${PROJECT_NAME} ${Boost_LIBRARIES}) + TARGET_LINK_BOOST_PYTHON(${PYWRAP}) + + IF(APPLE) + # We need to change the extension for python bindings + SET_TARGET_PROPERTIES(${PYWRAP} PROPERTIES SUFFIX ".so") + ENDIF(APPLE) + + 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 + __init__.py + utils.py + robot_wrapper.py + romeo_wrapper.py + rpy.py + explog.py + ) + + FOREACH(python ${PYTHON_FILES}) + GET_FILENAME_COMPONENT(pythonFile ${python} NAME) + EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E ${LINK} + ${${PROJECT_NAME}_SOURCE_DIR}/bindings/python/${python} + ${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}) + + # Tag pyc file as generated. + SET_SOURCE_FILES_PROPERTIES( + "${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c" + PROPERTIES GENERATED TRUE) + + EXECUTE_PROCESS(COMMAND + ${PYTHON_EXECUTABLE} -m py_compile + ${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}) + + # Clean generated files. + SET_PROPERTY( + DIRECTORY APPEND PROPERTY + ADDITIONAL_MAKE_CLEAN_FILES + "${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c") + + INSTALL(FILES + "${${PROJECT_NAME}_SOURCE_DIR}/bindings/python/${python}" + "${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c" + DESTINATION ${PYTHON_SITELIB}/${PROJECT_NAME}) + ENDFOREACH(python) + +ENDIF(BUILD_PYTHON_INTERFACE) + diff --git a/src/python/__init__.py b/bindings/python/__init__.py similarity index 100% rename from src/python/__init__.py rename to bindings/python/__init__.py diff --git a/src/python/algorithms.hpp b/bindings/python/algorithms.hpp similarity index 100% rename from src/python/algorithms.hpp rename to bindings/python/algorithms.hpp diff --git a/src/python/data.hpp b/bindings/python/data.hpp similarity index 100% rename from src/python/data.hpp rename to bindings/python/data.hpp diff --git a/src/python/eigen_container.hpp b/bindings/python/eigen_container.hpp similarity index 100% rename from src/python/eigen_container.hpp rename to bindings/python/eigen_container.hpp diff --git a/src/python/explog.hpp b/bindings/python/explog.hpp similarity index 100% rename from src/python/explog.hpp rename to bindings/python/explog.hpp diff --git a/src/python/explog.py b/bindings/python/explog.py similarity index 100% rename from src/python/explog.py rename to bindings/python/explog.py diff --git a/src/python/force.hpp b/bindings/python/force.hpp similarity index 100% rename from src/python/force.hpp rename to bindings/python/force.hpp diff --git a/src/python/frame.hpp b/bindings/python/frame.hpp similarity index 100% rename from src/python/frame.hpp rename to bindings/python/frame.hpp diff --git a/src/python/geometry-data.hpp b/bindings/python/geometry-data.hpp similarity index 100% rename from src/python/geometry-data.hpp rename to bindings/python/geometry-data.hpp diff --git a/src/python/geometry-model.hpp b/bindings/python/geometry-model.hpp similarity index 100% rename from src/python/geometry-model.hpp rename to bindings/python/geometry-model.hpp diff --git a/src/python/geometry-object.hpp b/bindings/python/geometry-object.hpp similarity index 100% rename from src/python/geometry-object.hpp rename to bindings/python/geometry-object.hpp diff --git a/src/python/handler.hpp b/bindings/python/handler.hpp similarity index 100% rename from src/python/handler.hpp rename to bindings/python/handler.hpp diff --git a/src/python/inertia.hpp b/bindings/python/inertia.hpp similarity index 100% rename from src/python/inertia.hpp rename to bindings/python/inertia.hpp diff --git a/src/python/joint-derived.hpp b/bindings/python/joint-derived.hpp similarity index 100% rename from src/python/joint-derived.hpp rename to bindings/python/joint-derived.hpp diff --git a/src/python/joint.hpp b/bindings/python/joint.hpp similarity index 100% rename from src/python/joint.hpp rename to bindings/python/joint.hpp diff --git a/src/python/joints-models.hpp b/bindings/python/joints-models.hpp similarity index 100% rename from src/python/joints-models.hpp rename to bindings/python/joints-models.hpp diff --git a/src/python/joints-variant.hpp b/bindings/python/joints-variant.hpp similarity index 100% rename from src/python/joints-variant.hpp rename to bindings/python/joints-variant.hpp diff --git a/src/python/model.hpp b/bindings/python/model.hpp similarity index 100% rename from src/python/model.hpp rename to bindings/python/model.hpp diff --git a/src/python/module.cpp b/bindings/python/module.cpp similarity index 100% rename from src/python/module.cpp rename to bindings/python/module.cpp diff --git a/src/python/motion.hpp b/bindings/python/motion.hpp similarity index 100% rename from src/python/motion.hpp rename to bindings/python/motion.hpp diff --git a/src/python/parsers.hpp b/bindings/python/parsers.hpp similarity index 100% rename from src/python/parsers.hpp rename to bindings/python/parsers.hpp diff --git a/src/python/python.cpp b/bindings/python/python.cpp similarity index 100% rename from src/python/python.cpp rename to bindings/python/python.cpp diff --git a/src/python/python.hpp b/bindings/python/python.hpp similarity index 100% rename from src/python/python.hpp rename to bindings/python/python.hpp diff --git a/src/python/robot_wrapper.py b/bindings/python/robot_wrapper.py similarity index 100% rename from src/python/robot_wrapper.py rename to bindings/python/robot_wrapper.py diff --git a/src/python/romeo_wrapper.py b/bindings/python/romeo_wrapper.py similarity index 100% rename from src/python/romeo_wrapper.py rename to bindings/python/romeo_wrapper.py diff --git a/src/python/rpy.py b/bindings/python/rpy.py similarity index 100% rename from src/python/rpy.py rename to bindings/python/rpy.py diff --git a/src/python/se3.hpp b/bindings/python/se3.hpp similarity index 100% rename from src/python/se3.hpp rename to bindings/python/se3.hpp diff --git a/src/python/utils.py b/bindings/python/utils.py similarity index 100% rename from src/python/utils.py rename to bindings/python/utils.py diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9eee54a07..0947423cd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -109,79 +109,3 @@ IF(UNIX) INSTALL(TARGETS ${PROJECT_NAME} DESTINATION lib) ENDIF(UNIX) -# ---------------------------------------------------- -# --- PYTHON ----------------------------------------- -# ---------------------------------------------------- -IF(BUILD_PYTHON_INTERFACE) - MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}") - - # --- COMPILE WRAPPER - SET(PYWRAP ${PROJECT_NAME}_pywrap) - ADD_LIBRARY(${PYWRAP} SHARED python/module.cpp python/python.cpp) - PKG_CONFIG_USE_DEPENDENCY(${PYWRAP} eigenpy) - - IF(URDFDOM_FOUND) - PKG_CONFIG_USE_DEPENDENCY(${PYWRAP} urdfdom) - ENDIF(URDFDOM_FOUND) - IF(HPP_FCL_FOUND) - PKG_CONFIG_USE_DEPENDENCY(${PYWRAP} hpp-fcl) - ADD_TARGET_CFLAGS (${PYWRAP} "-DWITH_HPP_FCL") - ENDIF(HPP_FCL_FOUND) - IF(LUA5_1_FOUND) - PKG_CONFIG_USE_DEPENDENCY(${PYWRAP} lua5.1) - ENDIF(LUA5_1_FOUND) - - TARGET_LINK_LIBRARIES(${PYWRAP} ${PROJECT_NAME} ${Boost_LIBRARIES}) - TARGET_LINK_BOOST_PYTHON(${PYWRAP}) - - IF(APPLE) - # We need to change the extension for python bindings - SET_TARGET_PROPERTIES(${PYWRAP} PROPERTIES SUFFIX ".so") - ENDIF(APPLE) - - 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/romeo_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( - "${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c" - PROPERTIES GENERATED TRUE) - - EXECUTE_PROCESS(COMMAND - ${PYTHON_EXECUTABLE} -m py_compile - ${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}) - - # Clean generated files. - SET_PROPERTY( - DIRECTORY APPEND PROPERTY - ADDITIONAL_MAKE_CLEAN_FILES - "${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c") - - INSTALL(FILES - "${${PROJECT_NAME}_SOURCE_DIR}/src/${python}" - "${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c" - DESTINATION ${PYTHON_SITELIB}/${PROJECT_NAME}) - ENDFOREACH(python) - -ENDIF(BUILD_PYTHON_INTERFACE) - -- GitLab