diff --git a/cmake/GtsamCythonWrap.cmake b/cmake/GtsamCythonWrap.cmake index 361038ce0..4cd061852 100644 --- a/cmake/GtsamCythonWrap.cmake +++ b/cmake/GtsamCythonWrap.cmake @@ -280,16 +280,16 @@ function(install_cython_files source_files dest_directory) endfunction() function(install_python_package install_path) -#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\")") + # Select the correct install script based on the OS 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 the variables in the script configure_file(${PROJECT_SOURCE_DIR}/cython/scripts/${PYTHON_INSTALL_SCRIPT} ${PROJECT_BINARY_DIR}/cython/scripts/${PYTHON_INSTALL_SCRIPT}) + + # Add the new make target command 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 638bdfb2d..96503b82f 100644 --- a/cython/CMakeLists.txt +++ b/cython/CMakeLists.txt @@ -45,9 +45,6 @@ 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.sh b/cython/scripts/install.sh index 04759ca5e..8e409803d 100755 --- a/cython/scripts/install.sh +++ b/cython/scripts/install.sh @@ -1,15 +1,22 @@ #!/bin/sh + +# This script runs the installation flow for python wrapped GTSAM. +# It does so by first setting the correct ownership permissions on the package directory, +# and then running `python setup.py install` to install the wrapped package. + echo "Installing GTSAM Python Wrapper" +# Set the package path PACKAGE_PATH=${GTSAM_CYTHON_INSTALL_PATH}${GTSAM_BUILD_TAG} +# Check if package directory exists. If not, print warning and exit. 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 +# 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} @@ -17,5 +24,6 @@ else chown -R $(logname) ${GTSAM_CYTHON_INSTALL_PATH} fi +# Run setup.py install with full paths echo "Running setup.py in $PACKAGE_PATH" ${PYTHON_EXECUTABLE} $PACKAGE_PATH/setup.py install