CMakeLists.txt 5.17 KB
Newer Older
Joseph Mirabel's avatar
Joseph Mirabel committed
1
2
3
#
# Software License Agreement (BSD License)
#
4
#  Copyright (c) 2019-2020 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
48

IF(NOT DOXYGEN_FOUND OR (APPLE AND PYTHON_VERSION_MAJOR LESS 3))
  SET(ENABLE_DOXYGEN_AUTODOC FALSE)
ELSE()
  SET(ENABLE_DOXYGEN_AUTODOC TRUE)
49
50

  EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "import lxml"
51
    RESULT_VARIABLE _pypkg_found
52
53
    OUTPUT_QUIET
    ERROR_QUIET)
54
  IF(_pypkg_found EQUAL 0)
55
56
57
58
    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.")
59
    MESSAGE(STATUS "  You can install it with: pip install lxml")
60
  ENDIF()
61
62
63
64
65
66
67
68
69
70
71

  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)
72
73
ENDIF()
IF(ENABLE_DOXYGEN_AUTODOC)
74
  ADD_CUSTOM_TARGET(generate_doxygen_cpp_doc
75
    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/doc/python/doxygen_xml_parser.py
76
77
78
79
80
81
82
83
84
85
86
87
88
    ${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()
89
90

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

ADD_LIBRARY(${LIBRARY_NAME} SHARED ${${LIBRARY_NAME}_SOURCES} ${${LIBRARY_NAME}_HEADERS})
101
102
103
TARGET_INCLUDE_DIRECTORIES(${LIBRARY_NAME} SYSTEM PRIVATE "${Boost_INCLUDE_DIRS}" ${PYTHON_INCLUDE_DIRS})
TARGET_INCLUDE_DIRECTORIES(${LIBRARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}/src" "${CMAKE_CURRENT_BINARY_DIR}")

Justin Carpentier's avatar
Justin Carpentier committed
104
ADD_DEPENDENCIES(python ${LIBRARY_NAME})
105
106
ADD_HEADER_GROUP(${LIBRARY_NAME}_HEADER)
ADD_SOURCE_GROUP(${LIBRARY_NAME}_SOURCES)
107
IF(ENABLE_DOXYGEN_AUTODOC)
108
  ADD_DEPENDENCIES(${LIBRARY_NAME} generate_doxygen_cpp_doc)
109
  TARGET_COMPILE_DEFINITIONS(${LIBRARY_NAME} PRIVATE -DHPP_FCL_HAS_DOXYGEN_AUTODOC)
110
ENDIF()
Joseph Mirabel's avatar
Joseph Mirabel committed
111

112
TARGET_LINK_BOOST_PYTHON(${LIBRARY_NAME} PUBLIC)
Justin Carpentier's avatar
Justin Carpentier committed
113
TARGET_LINK_LIBRARIES(${LIBRARY_NAME} PUBLIC ${PROJECT_NAME} ${BOOST_system_LIBRARY})
114
TARGET_LINK_LIBRARIES(${LIBRARY_NAME} PUBLIC eigenpy::eigenpy)
Joseph Mirabel's avatar
Joseph Mirabel committed
115
116
117

SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES
  PREFIX ""
Guilhem Saurel's avatar
Guilhem Saurel committed
118
  SUFFIX "${PYTHON_EXT_SUFFIX}"
119
120
121
122
123
124
125
126
127
  LIBRARY_OUTPUT_NAME ${LIBRARY_NAME}
  LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/python/${LIBRARY_NAME}"
  )

IF(DEFINED HPP_FCL_SITELIB_ROOT AND HPP_FCL_SITELIB_ROOT)
  SET(${LIBRARY_NAME}_INSTALL_DIR ${HPP_FCL_SITELIB_ROOT}/${PYTHON_SITELIB}/${LIBRARY_NAME})
ELSE()
  SET(${LIBRARY_NAME}_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/${PYTHON_SITELIB}/${LIBRARY_NAME})
ENDIF()
Joseph Mirabel's avatar
Joseph Mirabel committed
128
129

INSTALL(TARGETS ${LIBRARY_NAME}
130
131
  DESTINATION ${${LIBRARY_NAME}_INSTALL_DIR})

132
# --- INSTALL SCRIPTS
133
134
135
136
137
138
139
140
141
142
SET(PYTHON_FILES
  __init__.py
  )

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)