diff --git a/.ci/linux-steps.yaml b/.ci/linux-steps.yaml index 21baace148..f695c14fe1 100644 --- a/.ci/linux-steps.yaml +++ b/.ci/linux-steps.yaml @@ -21,7 +21,7 @@ steps: unset BOOST_ROOT echo "##vso[task.setvariable variable=BOOST_ROOT]"$BOOST_ROOT - sudo apt-get install -y --allow-unauthenticated libopenblas-dev liblapack-dev g++ libboost1.70-dev libarmadillo-dev xz-utils + sudo apt-get install -y --allow-unauthenticated libopenblas-dev g++ libboost1.70-dev xz-utils if [ "$(binding)" == "python" ]; then export PYBIN=$(which python) diff --git a/HISTORY.md b/HISTORY.md index 001e6e2762..b94b7afdc0 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -18,6 +18,9 @@ * Replace Boost serialization library by Cereal (#2458). + * Add `PYTHON_INSTALL_PREFIX` CMake option to specify installation root for + Python bindings (#2797). + ### mlpack 3.4.2 ###### 2020-10-26 * Added Mean Absolute Percentage Error. diff --git a/README.md b/README.md index 610e4f6d33..bb8ba1be6c 100644 --- a/README.md +++ b/README.md @@ -203,6 +203,7 @@ Options are specified with the -D flag. The allowed options include: BUILD_CLI_EXECUTABLES=(ON/OFF): whether or not to build command-line programs BUILD_PYTHON_BINDINGS=(ON/OFF): whether or not to build Python bindings PYTHON_EXECUTABLE=(/path/to/python_version): Path to specific Python executable + PYTHON_INSTALL_PREFIX=(/path/to/python/): Path to root of Python installation BUILD_JULIA_BINDINGS=(ON/OFF): whether or not to build Julia bindings JULIA_EXECUTABLE=(/path/to/julia): Path to specific Julia executable BUILD_GO_BINDINGS=(ON/OFF): whether or not to build Go bindings diff --git a/doc/guide/build.hpp b/doc/guide/build.hpp index a7b5d149ad..d889652e81 100644 --- a/doc/guide/build.hpp +++ b/doc/guide/build.hpp @@ -190,6 +190,7 @@ The full list of options mlpack allows: - BUILD_WITH_COVERAGE=(ON/OFF): Build with support for code coverage tools (gcc only) (default OFF) - PYTHON_EXECUTABLE=(/path/to/python_version): Path to specific Python executable + - PYTHON_INSTALL_PREFIX=(/path/to/python/): Path to root of Python installation - JULIA_EXECUTABLE=(/path/to/julia): Path to specific Julia executable - BUILD_MARKDOWN_BINDINGS=(ON/OFF): Build Markdown bindings for website documentation (default OFF) diff --git a/src/mlpack/bindings/R/CMakeLists.txt b/src/mlpack/bindings/R/CMakeLists.txt index 7352b92918..b1c7daab0a 100644 --- a/src/mlpack/bindings/R/CMakeLists.txt +++ b/src/mlpack/bindings/R/CMakeLists.txt @@ -310,8 +310,8 @@ if (BUILD_R_BINDINGS) # Installation script for the packagae. install(CODE "execute_process( - COMMAND R CMD INSTALL mlpack_${PACKAGE_VERSION}.tar.gz - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}" + COMMAND ${R_EXECUTABLE} CMD INSTALL mlpack_${PACKAGE_VERSION}.tar.gz + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})" ) add_dependencies(R r_build) diff --git a/src/mlpack/bindings/python/CMakeLists.txt b/src/mlpack/bindings/python/CMakeLists.txt index 65490997c3..c36a026590 100644 --- a/src/mlpack/bindings/python/CMakeLists.txt +++ b/src/mlpack/bindings/python/CMakeLists.txt @@ -214,14 +214,20 @@ add_custom_command(TARGET python POST_BUILD add_dependencies(python python_configured) # Configure installation script file. +if (NOT PYTHON_INSTALL_PREFIX) + set(PYTHON_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") +endif () + execute_process(COMMAND ${PYTHON_EXECUTABLE} - "${CMAKE_CURRENT_SOURCE_DIR}/print_python_version.py" "${CMAKE_INSTALL_PREFIX}" + "${CMAKE_CURRENT_SOURCE_DIR}/print_python_version.py" + "${PYTHON_INSTALL_PREFIX}" OUTPUT_VARIABLE CMAKE_PYTHON_PATH) string(STRIP "${CMAKE_PYTHON_PATH}" CMAKE_PYTHON_PATH) install(CODE "set(ENV{PYTHONPATH} ${CMAKE_PYTHON_PATH})") install(CODE "set(PYTHON_EXECUTABLE \"${PYTHON_EXECUTABLE}\")") install(CODE "set(CMAKE_BINARY_DIR \"${CMAKE_BINARY_DIR}\")") -install(CODE "set(CMAKE_INSTALL_PREFIX \"${CMAKE_INSTALL_PREFIX}\")") + +install(CODE "set(PYTHON_INSTALL_PREFIX \"${PYTHON_INSTALL_PREFIX}\")") install(CODE "execute_process(COMMAND mkdir -p $ENV{DESTDIR}${CMAKE_PYTHON_PATH})") install(SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/PythonInstall.cmake") diff --git a/src/mlpack/bindings/python/PythonInstall.cmake b/src/mlpack/bindings/python/PythonInstall.cmake index 881b48344a..6e25fb926e 100644 --- a/src/mlpack/bindings/python/PythonInstall.cmake +++ b/src/mlpack/bindings/python/PythonInstall.cmake @@ -5,13 +5,13 @@ if (DEFINED ENV{DESTDIR}) execute_process(COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_BINARY_DIR}/src/mlpack/bindings/python/setup.py" install - --prefix=${CMAKE_INSTALL_PREFIX} --root=$ENV{DESTDIR} + --prefix=${PYTHON_INSTALL_PREFIX} --root=$ENV{DESTDIR} WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src/mlpack/bindings/python/" RESULT_VARIABLE setup_res) else () execute_process(COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_BINARY_DIR}/src/mlpack/bindings/python/setup.py" install - --prefix=${CMAKE_INSTALL_PREFIX} + --prefix=${PYTHON_INSTALL_PREFIX} WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src/mlpack/bindings/python/" RESULT_VARIABLE setup_res) endif ()