From bc5fc040cbd3daa1f09e2ed11e5eb1834eeb7c52 Mon Sep 17 00:00:00 2001 From: Ryan Curtin Date: Sun, 3 Jan 2021 16:50:35 -0500 Subject: [PATCH 1/7] First attempt at a solution. --- src/mlpack/bindings/python/CMakeLists.txt | 10 ++++++++-- src/mlpack/bindings/python/PythonInstall.cmake | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) 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 () From c8c7e6594d9abb3411b45e52d4910250084c2bd8 Mon Sep 17 00:00:00 2001 From: Ryan Curtin Date: Sun, 3 Jan 2021 20:38:52 -0500 Subject: [PATCH 2/7] Update documentation for new CMake option. --- HISTORY.md | 3 +++ README.md | 1 + doc/guide/build.hpp | 1 + 3 files changed, 5 insertions(+) diff --git a/HISTORY.md b/HISTORY.md index 7529a3ee86..9bb5fc29ff 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -13,6 +13,9 @@ * Add finalizers to Julia binding model types to fix memory handling (#2756). + * Add `PYTHON_INSTALL_PREFIX` CMake option to specify installation root for + Python bindings. + ### 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) From 116c534a2b57a778a02b07bb7736206f2ba14858 Mon Sep 17 00:00:00 2001 From: Ryan Curtin Date: Tue, 5 Jan 2021 14:45:06 -0500 Subject: [PATCH 3/7] Fix missing parenthesis. --- src/mlpack/bindings/R/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mlpack/bindings/R/CMakeLists.txt b/src/mlpack/bindings/R/CMakeLists.txt index a6e8ee16e1..13f171140d 100644 --- a/src/mlpack/bindings/R/CMakeLists.txt +++ b/src/mlpack/bindings/R/CMakeLists.txt @@ -230,7 +230,7 @@ if (BUILD_R_BINDINGS) install(CODE "execute_process( COMMAND R CMD INSTALL mlpack_${PACKAGE_VERSION}.tar.gz - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})" ) add_dependencies(R r_build) From 43c62e830a60361e3ff41fb233aa2fe2c539a664 Mon Sep 17 00:00:00 2001 From: Ryan Curtin Date: Tue, 5 Jan 2021 14:45:28 -0500 Subject: [PATCH 4/7] Update issue number. --- HISTORY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index 9bb5fc29ff..918c95a59f 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -14,7 +14,7 @@ * Add finalizers to Julia binding model types to fix memory handling (#2756). * Add `PYTHON_INSTALL_PREFIX` CMake option to specify installation root for - Python bindings. + Python bindings (#2797). ### mlpack 3.4.2 ###### 2020-10-26 From f385522a5218fb644fced6ca164e137b098ab77e Mon Sep 17 00:00:00 2001 From: Ryan Curtin Date: Tue, 12 Jan 2021 20:25:42 -0500 Subject: [PATCH 5/7] Update src/mlpack/bindings/R/CMakeLists.txt Co-authored-by: Yashwant Singh Parihar --- src/mlpack/bindings/R/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mlpack/bindings/R/CMakeLists.txt b/src/mlpack/bindings/R/CMakeLists.txt index 13f171140d..f5f6907159 100644 --- a/src/mlpack/bindings/R/CMakeLists.txt +++ b/src/mlpack/bindings/R/CMakeLists.txt @@ -229,7 +229,7 @@ if (BUILD_R_BINDINGS) # Installation script for the packagae. install(CODE "execute_process( - COMMAND R CMD INSTALL mlpack_${PACKAGE_VERSION}.tar.gz + COMMAND ${R_EXECUTABLE} CMD INSTALL mlpack_${PACKAGE_VERSION}.tar.gz WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})" ) From eba621e9cbc965f4ea209d2d2f500d05c9168842 Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Fri, 22 Jan 2021 22:48:37 +0100 Subject: [PATCH 6/7] Remove libarmadillo-dev from the path, keep the manually installed one Signed-off-by: Omar Shrit --- .ci/linux-steps.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/linux-steps.yaml b/.ci/linux-steps.yaml index 21baace148..eba826ac92 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 liblapack-dev g++ libboost1.70-dev xz-utils if [ "$(binding)" == "python" ]; then export PYBIN=$(which python) From 8cc834fe4357a0a5289f739c9fcc8c8ee277c02d Mon Sep 17 00:00:00 2001 From: Omar Shrit Date: Sat, 23 Jan 2021 20:20:03 +0100 Subject: [PATCH 7/7] Remove lapack, it is not need, openblas should be enough Signed-off-by: Omar Shrit --- .ci/linux-steps.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/linux-steps.yaml b/.ci/linux-steps.yaml index eba826ac92..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 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)