From 93a00a38a40a21e21a1c20da9209192a7076fc85 Mon Sep 17 00:00:00 2001 From: Varun Agrawal Date: Mon, 22 Jun 2020 20:14:03 -0500 Subject: [PATCH] add new make command for installing python wrapper --- cmake/GtsamCythonWrap.cmake | 17 ++++++++++++----- cython/CMakeLists.txt | 3 +++ cython/scripts/install.bat | 0 cython/scripts/install.sh | 21 +++++++++++++++++++++ 4 files changed, 36 insertions(+), 5 deletions(-) create mode 100755 cython/scripts/install.bat create mode 100755 cython/scripts/install.sh diff --git a/cmake/GtsamCythonWrap.cmake b/cmake/GtsamCythonWrap.cmake index 3ca8b903f..361038ce0 100644 --- a/cmake/GtsamCythonWrap.cmake +++ b/cmake/GtsamCythonWrap.cmake @@ -280,9 +280,16 @@ function(install_cython_files source_files dest_directory) endfunction() function(install_python_package install_path) - set(package_path "${install_path}${GTSAM_BUILD_TAG}") - # set cython directory permissions to user so we don't get permission denied - install(CODE "execute_process(COMMAND sh \"-c\" \"chown -R $(logname):$(logname) ${package_path}\")") - # go to cython directory and run setup.py - install(CODE "execute_process(COMMAND sh \"-c\" \"cd ${package_path} && python setup.py install\")") +#TODO this will only work for Linux. Need to make it work on macOS and Windows as well +#TODO Running `sudo make install` makes this run in admin space causing Python 2.7 to be picked up. + # # go to cython directory and run setup.py + # install(CODE "execute_process(COMMAND sh \"-c\" \"cd ${package_path} && python setup.py install\")") + if(CMAKE_SYSTEM_NAME STREQUAL "Windows") + set(PYTHON_INSTALL_SCRIPT "install.bat") + elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(PYTHON_INSTALL_SCRIPT "install.sh") + endif() + + configure_file(${PROJECT_SOURCE_DIR}/cython/scripts/${PYTHON_INSTALL_SCRIPT} ${PROJECT_BINARY_DIR}/cython/scripts/${PYTHON_INSTALL_SCRIPT}) + add_custom_target(python-install "${PROJECT_BINARY_DIR}/cython/scripts/${PYTHON_INSTALL_SCRIPT}") endfunction() diff --git a/cython/CMakeLists.txt b/cython/CMakeLists.txt index 96503b82f..638bdfb2d 100644 --- a/cython/CMakeLists.txt +++ b/cython/CMakeLists.txt @@ -45,6 +45,9 @@ if (GTSAM_INSTALL_CYTHON_TOOLBOX) install_cython_scripts("${PROJECT_SOURCE_DIR}/cython/gtsam" "${GTSAM_CYTHON_INSTALL_PATH}" "*.py") install_cython_scripts("${PROJECT_SOURCE_DIR}/cython/gtsam_unstable" "${GTSAM_CYTHON_INSTALL_PATH}" "*.py") + # file(GLOB GTSAM_PYTHON_INSTALL_SCRIPTS "scripts/*") + # file(COPY ${GTSAM_PYTHON_INSTALL_SCRIPTS} DESTINATION ${PROJECT_BINARY_DIR}/cython/scripts) + install_python_package("${GTSAM_CYTHON_INSTALL_PATH}") endif () diff --git a/cython/scripts/install.bat b/cython/scripts/install.bat new file mode 100755 index 000000000..e69de29bb diff --git a/cython/scripts/install.sh b/cython/scripts/install.sh new file mode 100755 index 000000000..04759ca5e --- /dev/null +++ b/cython/scripts/install.sh @@ -0,0 +1,21 @@ +#!/bin/sh +echo "Installing GTSAM Python Wrapper" + +PACKAGE_PATH=${GTSAM_CYTHON_INSTALL_PATH}${GTSAM_BUILD_TAG} + +if [ ! -d "$PACKAGE_PATH" ] +then + echo "Directory $PACKAGE_PATH DOES NOT exist. Please run 'make install' first."; + exit 1; +fi + +# set cython directory permissions to user so we don't get permission denied +if [ "$(whoami)" != "root" ] +then + sudo chown -R $(logname) ${GTSAM_CYTHON_INSTALL_PATH} +else + chown -R $(logname) ${GTSAM_CYTHON_INSTALL_PATH} +fi + +echo "Running setup.py in $PACKAGE_PATH" +${PYTHON_EXECUTABLE} $PACKAGE_PATH/setup.py install