From 9a8e8fb6bea324f2ca189088ca7739ce4428ba34 Mon Sep 17 00:00:00 2001 From: Corentin Le Molgat Date: Mon, 29 Jan 2018 10:26:03 +0100 Subject: [PATCH] search python module, and install it if needed --- cmake/python.cmake | 79 ++++++++++++++++++++++------------------------ 1 file changed, 38 insertions(+), 41 deletions(-) diff --git a/cmake/python.cmake b/cmake/python.cmake index 9eb252f7f8..ad4e4cf978 100644 --- a/cmake/python.cmake +++ b/cmake/python.cmake @@ -140,58 +140,55 @@ add_custom_command(OUTPUT setup.py dist ${PROJECT_NAME}.egg-info COMMAND ${CMAKE_COMMAND} -E echo ")" >> setup.py VERBATIM) +function(search_python_module MODULE_NAME) + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -c "import ${MODULE_NAME}; print(${MODULE_NAME}.__version__)" + RESULT_VARIABLE _RESULT + OUTPUT_VARIABLE MODULE_VERSION + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(${_RESULT} STREQUAL "0") + message(STATUS "Found python module: ${MODULE_NAME} (found version \"${MODULE_VERSION}\")") + else() + message(WARNING "Can't find python module \"${MODULE_NAME}\", install it using pip...") + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -m pip install ${MODULE_NAME} + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + endif() +endfunction() + # Look for python module wheel -execute_process( - COMMAND ${PYTHON_EXECUTABLE} "-c" "import wheel" - RESULT_VARIABLE _RESULT - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE - ) -set(BDIST_WHEEL "") -if(${_RESULT} STREQUAL "0") - message(STATUS "Found python module: wheel") - set(BDIST_WHEEL "bdist_wheel") -else() - message(WARNING "Can't find python module: wheel") -endif() +search_python_module(wheel) # Main Target add_custom_target(bdist ALL DEPENDS setup.py Py${PROJECT_NAME}_proto COMMAND ${CMAKE_COMMAND} -E remove_directory dist - COMMAND ${PYTHON_EXECUTABLE} setup.py bdist ${BDIST_WHEEL} + COMMAND ${PYTHON_EXECUTABLE} setup.py bdist bdist_wheel ) # Test if(BUILD_TESTING) # Look for python module virtualenv - execute_process( - COMMAND ${PYTHON_EXECUTABLE} "-c" "import virtualenv" - RESULT_VARIABLE _RESULT - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - if(${_RESULT} STREQUAL "0") - message(STATUS "Found python module: virtualenv") - # Testing using a vitual environment - set(VENV_EXECUTABLE ${PYTHON_EXECUTABLE} -m virtualenv) - set(VENV_DIR ${CMAKE_BINARY_DIR}/venv) - if(WIN32) - set(VENV_BIN_DIR "${VENV_DIR}\\Scripts") - else() - set(VENV_BIN_DIR ${VENV_DIR}/bin) - endif() - # make a virtualenv to install our python package in it - add_custom_command(TARGET bdist POST_BUILD - COMMAND ${VENV_EXECUTABLE} -p ${PYTHON_EXECUTABLE} ${VENV_DIR} - COMMAND ${VENV_BIN_DIR}/python setup.py install - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/test.py.in - ${VENV_DIR}/test.py - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) - # run the tests within the virtualenv - add_test(pytest_venv ${VENV_BIN_DIR}/python ${VENV_DIR}/test.py) + search_python_module(virtualenv) + # Testing using a vitual environment + set(VENV_EXECUTABLE ${PYTHON_EXECUTABLE} -m virtualenv) + set(VENV_DIR ${CMAKE_BINARY_DIR}/venv) + if(WIN32) + set(VENV_BIN_DIR "${VENV_DIR}\\Scripts") else() - message(WARNING "Can't find python module: virtualenv") + set(VENV_BIN_DIR ${VENV_DIR}/bin) endif() + # make a virtualenv to install our python package in it + add_custom_command(TARGET bdist POST_BUILD + COMMAND ${VENV_EXECUTABLE} -p ${PYTHON_EXECUTABLE} ${VENV_DIR} + COMMAND ${VENV_BIN_DIR}/python setup.py install + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/test.py.in + ${VENV_DIR}/test.py + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + # run the tests within the virtualenv + add_test(pytest_venv ${VENV_BIN_DIR}/python ${VENV_DIR}/test.py) endif()