From d6beb1c6d3b62a341e647b761dd93349beca3b5c Mon Sep 17 00:00:00 2001
From: Justin Carpentier <justin.carpentier@inria.fr>
Date: Wed, 4 Dec 2019 21:58:41 +0100
Subject: [PATCH] cmake: refactor Python bindings to allow easy creation of
 wheels (pip)

---
 python/CMakeLists.txt     | 27 ++++++++++++++++++++++++---
 python/hppfcl/__init__.py | 34 ++++++++++++++++++++++++++++++++++
 2 files changed, 58 insertions(+), 3 deletions(-)
 create mode 100644 python/hppfcl/__init__.py

diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
index 6521c301..6204ed71 100644
--- a/python/CMakeLists.txt
+++ b/python/CMakeLists.txt
@@ -1,7 +1,7 @@
 #
 # Software License Agreement (BSD License)
 #
-#  Copyright (c) 2019 CNRS-LAAS
+#  Copyright (c) 2019 CNRS-LAAS INRIA
 #  Author: Joseph Mirabel
 #  All rights reserved.
 #
@@ -34,6 +34,7 @@
 
 ADD_REQUIRED_DEPENDENCY("eigenpy >= 1.2")
 
+# Name of the Python library
 SET(LIBRARY_NAME hppfcl)
 
 INCLUDE_DIRECTORIES("${Boost_INCLUDE_DIRS}" ${PYTHON_INCLUDE_DIRS})
@@ -54,7 +55,27 @@ PKG_CONFIG_USE_DEPENDENCY(${LIBRARY_NAME} eigenpy)
 SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES
   PREFIX ""
   SUFFIX "${PYTHON_EXT_SUFFIX}"
-  LIBRARY_OUTPUT_NAME ${LIBRARY_NAME})
+  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()
 
 INSTALL(TARGETS ${LIBRARY_NAME}
-  DESTINATION ${PYTHON_SITELIB})
+  DESTINATION ${${LIBRARY_NAME}_INSTALL_DIR})
+
+# --- INSTALL SCRIPTS 
+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)
diff --git a/python/hppfcl/__init__.py b/python/hppfcl/__init__.py
new file mode 100644
index 00000000..257d4a9c
--- /dev/null
+++ b/python/hppfcl/__init__.py
@@ -0,0 +1,34 @@
+# Software License Agreement (BSD License)
+#
+#  Copyright (c) 2019 INRIA
+#  Author: Justin Carpentier
+#  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.
+
+from hppfcl import *
-- 
GitLab