CMakeLists.txt 5.49 KB
Newer Older
Joseph Mirabel's avatar
Joseph Mirabel committed
1
2
3
#
# Software License Agreement (BSD License)
#
Justin Carpentier's avatar
Justin Carpentier committed
4
#  Copyright (c) 2019-2021 CNRS-LAAS INRIA
Joseph Mirabel's avatar
Joseph Mirabel committed
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#  Author: Joseph Mirabel
#  All rights reserved.
#
#  Redistribution and use in source and binary forms, with or without
#  modification, are permitted provided that the following conditions
#  are met:
#
#   * Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
#   * Redistributions in binary form must reproduce the above
#     copyright notice, this list of conditions and the following
#     disclaimer in the documentation and/or other materials provided
#     with the distribution.
#   * Neither the name of CNRS-LAAS. nor the names of its
#     contributors may be used to endorse or promote products derived
#     from this software without specific prior written permission.
#
#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
#  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
#  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
#  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
#  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
#  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
#  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
#  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
#  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
#  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
#  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
#  POSSIBILITY OF SUCH DAMAGE.

Justin Carpentier's avatar
Justin Carpentier committed
35
36
37
ADD_CUSTOM_TARGET(python)
SET_TARGET_PROPERTIES(python PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True)

38
# Name of the Python library
Joseph Mirabel's avatar
Joseph Mirabel committed
39
40
SET(LIBRARY_NAME hppfcl)

41
42
SET(${LIBRARY_NAME}_HEADERS
  fcl.hh
43
  )
44

45
46
47
SET(ENABLE_PYTHON_DOXYGEN_AUTODOC TRUE CACHE BOOL "Enable automatic documentation of Python bindings from Doxygen documentation")

IF(    NOT ENABLE_PYTHON_DOXYGEN_AUTODOC
Justin Carpentier's avatar
Justin Carpentier committed
48
    OR NOT DOXYGEN_FOUND)
49
50
51
  SET(ENABLE_DOXYGEN_AUTODOC FALSE)
ELSE()
  SET(ENABLE_DOXYGEN_AUTODOC TRUE)
52
53

  EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "import lxml"
54
    RESULT_VARIABLE _pypkg_found
55
56
    OUTPUT_QUIET
    ERROR_QUIET)
57
  IF(_pypkg_found EQUAL 0)
58
59
60
61
    MESSAGE(STATUS "Found Python package lxml.")
  ELSE()
    SET(ENABLE_DOXYGEN_AUTODOC FALSE)
    MESSAGE(STATUS "Python package lxml not found. Python bindings will not be documented.")
62
    MESSAGE(STATUS "  You can install it with: pip install lxml")
63
  ENDIF()
64
65
66
67
68
69
70
71
72
73
74

  EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "import pylatexenc"
    RESULT_VARIABLE _pypkg_found
    OUTPUT_QUIET
    ERROR_QUIET)
  IF(NOT _pypkg_found EQUAL 0)
    MESSAGE(STATUS "Python package pylatexenc not found.")
    MESSAGE(STATUS "  Formulas in the Python bindings documentation may look ugly.")
    MESSAGE(STATUS "  You can install it with: pip install pylatexenc")
  ENDIF()
  UNSET(_pypkg_found)
75
76
ENDIF()
IF(ENABLE_DOXYGEN_AUTODOC)
77
  ADD_CUSTOM_TARGET(generate_doxygen_cpp_doc
78
    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/doc/python/doxygen_xml_parser.py
79
80
81
82
83
84
85
86
87
88
89
90
91
    ${CMAKE_BINARY_DIR}/doc/doxygen-xml/index.xml
    ${CMAKE_CURRENT_BINARY_DIR}/doxygen_autodoc > ${CMAKE_CURRENT_BINARY_DIR}/doxygen_autodoc.log
    BYPRODUCTS
    ${CMAKE_CURRENT_BINARY_DIR}/doxygen_autodoc/doxygen_xml_parser_for_cmake.hh
    ${CMAKE_CURRENT_BINARY_DIR}/doxygen_autodoc.log
    COMMENT "Generating Doxygen C++ documentation"
    )
  ADD_DEPENDENCIES(generate_doxygen_cpp_doc doc)

  LIST(APPEND ${LIBRARY_NAME}_HEADERS
    ${CMAKE_CURRENT_BINARY_DIR}/doxygen_autodoc/doxygen_xml_parser_for_cmake.hh
    )
ENDIF()
92
93

SET(${LIBRARY_NAME}_SOURCES
94
  version.cc
Joseph Mirabel's avatar
Joseph Mirabel committed
95
96
97
98
  math.cc
  collision-geometries.cc
  collision.cc
  distance.cc
99
  fcl.cc
Joseph Mirabel's avatar
Joseph Mirabel committed
100
  gjk.cc
101
102
  )

103
104
105
106
IF(HPP_FCL_HAS_OCTOMAP)
  LIST(APPEND ${LIBRARY_NAME}_SOURCES octree.cc)
ENDIF(HPP_FCL_HAS_OCTOMAP)

107
ADD_LIBRARY(${LIBRARY_NAME} SHARED ${${LIBRARY_NAME}_SOURCES} ${${LIBRARY_NAME}_HEADERS})
Joseph Mirabel's avatar
Joseph Mirabel committed
108
TARGET_INCLUDE_DIRECTORIES(${LIBRARY_NAME} SYSTEM PRIVATE ${PYTHON_INCLUDE_DIRS})
109
TARGET_INCLUDE_DIRECTORIES(${LIBRARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}/src" "${CMAKE_CURRENT_BINARY_DIR}")
110
111
112
IF(WIN32)
  TARGET_LINK_LIBRARIES(${LIBRARY_NAME} PUBLIC ${PYTHON_LIBRARY})
ENDIF(WIN32)
113

Justin Carpentier's avatar
Justin Carpentier committed
114
ADD_DEPENDENCIES(python ${LIBRARY_NAME})
115
116
ADD_HEADER_GROUP(${LIBRARY_NAME}_HEADER)
ADD_SOURCE_GROUP(${LIBRARY_NAME}_SOURCES)
117
IF(ENABLE_DOXYGEN_AUTODOC)
118
  ADD_DEPENDENCIES(${LIBRARY_NAME} generate_doxygen_cpp_doc)
119
  TARGET_COMPILE_DEFINITIONS(${LIBRARY_NAME} PRIVATE -DHPP_FCL_HAS_DOXYGEN_AUTODOC)
120
ENDIF()
Joseph Mirabel's avatar
Joseph Mirabel committed
121

122
TARGET_LINK_BOOST_PYTHON(${LIBRARY_NAME} PUBLIC)
Joseph Mirabel's avatar
Joseph Mirabel committed
123
124
125
126
TARGET_LINK_LIBRARIES(${LIBRARY_NAME} PUBLIC
  ${PROJECT_NAME}
  eigenpy::eigenpy
  Boost::system)
Joseph Mirabel's avatar
Joseph Mirabel committed
127
128
129

SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES
  PREFIX ""
Guilhem Saurel's avatar
Guilhem Saurel committed
130
  SUFFIX "${PYTHON_EXT_SUFFIX}"
131
132
133
134
  LIBRARY_OUTPUT_NAME ${LIBRARY_NAME}
  LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/python/${LIBRARY_NAME}"
  )

135
136
137
138
IF(UNIX AND NOT APPLE)
  SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES INSTALL_RPATH "\$ORIGIN/../../..")
ENDIF()

139
140
IF(IS_ABSOLUTE ${PYTHON_SITELIB})
  SET(${LIBRARY_NAME}_INSTALL_DIR ${PYTHON_SITELIB}/${LIBRARY_NAME})
141
142
143
ELSE()
  SET(${LIBRARY_NAME}_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/${PYTHON_SITELIB}/${LIBRARY_NAME})
ENDIF()
Joseph Mirabel's avatar
Joseph Mirabel committed
144
145

INSTALL(TARGETS ${LIBRARY_NAME}
146
147
  DESTINATION ${${LIBRARY_NAME}_INSTALL_DIR})

148
# --- INSTALL SCRIPTS
149
150
SET(PYTHON_FILES
  __init__.py
151
  viewer.py
152
153
154
155
156
157
158
159
  )

FOREACH(python ${PYTHON_FILES})
  PYTHON_BUILD(${LIBRARY_NAME} ${python})
  INSTALL(FILES
    "${CMAKE_CURRENT_SOURCE_DIR}/${LIBRARY_NAME}/${python}"
    DESTINATION ${${LIBRARY_NAME}_INSTALL_DIR})
ENDFOREACH(python)