aboutsummaryrefslogtreecommitdiffstats
path: root/src/tools/ivigenerator/CMakeLists.txt
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@qt.io>2021-05-20 15:55:40 +0200
committerDominik Holland <dominik.holland@qt.io>2021-05-26 18:04:55 +0200
commit6a14fc6172f687fbbbc6a5a5d0df081508fd2d41 (patch)
treeb5e305c5bb692df3c1bd74fbeea43fb0245da706 /src/tools/ivigenerator/CMakeLists.txt
parentf357bb6e64ea24e4ec27b6d84c94c3a6dadc24fa (diff)
cmake: Don't build the virtualenv if the python3 qface package is installed
Change-Id: Ifdb724662b53b6c848ec956578bfe8ade3ab115a Reviewed-by: Robert Griebl <robert.griebl@qt.io>
Diffstat (limited to 'src/tools/ivigenerator/CMakeLists.txt')
-rw-r--r--src/tools/ivigenerator/CMakeLists.txt220
1 files changed, 114 insertions, 106 deletions
diff --git a/src/tools/ivigenerator/CMakeLists.txt b/src/tools/ivigenerator/CMakeLists.txt
index 62c2469..f71c42e 100644
--- a/src/tools/ivigenerator/CMakeLists.txt
+++ b/src/tools/ivigenerator/CMakeLists.txt
@@ -3,96 +3,124 @@
## Virtual env creation
#####################################################################
-qt_find_package(Python3 PROVIDED_TARGETS Python3::Interpreter MODULE_NAME ivicore)
-
-set(VIRTUALENV_NAME qtivi_qface_virtualenv)
-set(VIRTUALENV_PATH ${CMAKE_CURRENT_BINARY_DIR}/${VIRTUALENV_NAME})
-set(QFACE_SOURCE_DIR ${QtIvi_SOURCE_DIR}/src/3rdparty/qface)
-set(RELOCATE_VIRTUALENV ${QtIvi_SOURCE_DIR}/src/3rdparty/virtualenv/relocate_virtualenv.py)
-
-if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
- set(VIRTUALENV_ACTIVATE ${VIRTUALENV_PATH}/Scripts/activate.bat)
- set(VIRTUALENV_ACTIVATE_COMMAND ${VIRTUALENV_ACTIVATE})
- set(QFACE_BIN ${VIRTUALENV_PATH}/Scripts/qface.exe)
- set(DEPLOY_VIRTUALENV ${CMAKE_CURRENT_SOURCE_DIR}/deploy-virtualenv.bat)
-else()
- set(VIRTUALENV_ACTIVATE ${VIRTUALENV_PATH}/bin/activate)
- set(VIRTUALENV_ACTIVATE_COMMAND . ${VIRTUALENV_ACTIVATE})
- set(QFACE_BIN ${VIRTUALENV_PATH}/bin/qface)
- set(DEPLOY_VIRTUALENV ${CMAKE_CURRENT_SOURCE_DIR}/deploy-virtualenv.sh)
-endif()
+set(ivigenerator_install_dir "${CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR}/ivigenerator")
+set(templates_install_dir "${ivigenerator_install_dir}/templates")
-add_custom_command(OUTPUT ${VIRTUALENV_ACTIVATE}
- COMMAND ${CMAKE_COMMAND} -E make_directory ${VIRTUALENV_PATH}
-
- # virtualenv is always using the default interpreter, which is python2 on many systems"
- # by adding -p we enforce that the python3 interpreter is used and make sure python3 is installed in the virtualenv
- COMMAND ${CMAKE_COMMAND} -E chdir ${VIRTUALENV_PATH}
- ${Python3_EXECUTABLE} -m virtualenv -p ${Python3_EXECUTABLE} --always-copy .
-
- # Use a Python virtualenv for installing qface, so we don't pollute the user environment
- # On some systems virtualenv --always-copy doesn't work (https://github.com/pypa/virtualenv/issues/565).
- # To workaround the problem, we need to manually create the folder and create the virtualenv from
- # inside
- COMMAND ${CMAKE_COMMAND} -E chdir ${VIRTUALENV_PATH}
- ${Python3_EXECUTABLE} ${RELOCATE_VIRTUALENV} .
- COMMENT "Setting up virtualenv for qface, name: ${VIRTUALENV_NAME}"
- )
-
-# This is not very nice, but it gives us at least a good way to handle virtualenv rebuilding when
-# someone is working on the qface sources
-file(GLOB_RECURSE QFACE_SOURCE_FILES ${QFACE_SOURCE_DIR}/*.py)
-
-# On the CI we use the special wheel folder when available to not download all packages again on each build
-set(PYTHON3_WHEEL_CACHE "$ENV{PYTHON3_WHEEL_CACHE}" CACHE PATH "Python3 wheel cache")
-if (EXISTS "${PYTHON3_WHEEL_CACHE}")
- message(STATUS "Using wheel cache for python package installation: ${PYTHON3_WHEEL_CACHE}")
- set(PIP3_INSTALL_COMMAND pip3 install --no-index --find-links=${PYTHON3_WHEEL_CACHE} ${QFACE_SOURCE_DIR} --verbose)
-else()
- set(PIP3_INSTALL_COMMAND pip3 install --upgrade ${QFACE_SOURCE_DIR})
-endif()
+if(QT_FEATURE_python3_virtualenv AND NOT QT_FEATURE_system_qface)
+ qt_find_package(Python3 PROVIDED_TARGETS Python3::Interpreter MODULE_NAME ivicore)
+
+ set(VIRTUALENV_NAME qtivi_qface_virtualenv)
+ set(VIRTUALENV_PATH ${CMAKE_CURRENT_BINARY_DIR}/${VIRTUALENV_NAME})
+ set(QFACE_SOURCE_DIR ${QtIvi_SOURCE_DIR}/src/3rdparty/qface)
+ set(RELOCATE_VIRTUALENV ${QtIvi_SOURCE_DIR}/src/3rdparty/virtualenv/relocate_virtualenv.py)
+
+ if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
+ set(VIRTUALENV_ACTIVATE ${VIRTUALENV_PATH}/Scripts/activate.bat)
+ set(VIRTUALENV_ACTIVATE_COMMAND ${VIRTUALENV_ACTIVATE})
+ set(QFACE_BIN ${VIRTUALENV_PATH}/Scripts/qface.exe)
+ set(DEPLOY_VIRTUALENV ${CMAKE_CURRENT_SOURCE_DIR}/deploy-virtualenv.bat)
+ else()
+ set(VIRTUALENV_ACTIVATE ${VIRTUALENV_PATH}/bin/activate)
+ set(VIRTUALENV_ACTIVATE_COMMAND . ${VIRTUALENV_ACTIVATE})
+ set(QFACE_BIN ${VIRTUALENV_PATH}/bin/qface)
+ set(DEPLOY_VIRTUALENV ${CMAKE_CURRENT_SOURCE_DIR}/deploy-virtualenv.sh)
+ endif()
-add_custom_command(OUTPUT ${QFACE_BIN}
- COMMAND ${VIRTUALENV_ACTIVATE_COMMAND}
- COMMAND ${PIP3_INSTALL_COMMAND}
- DEPENDS ${VIRTUALENV_ACTIVATE}
- ${QFACE_SOURCE_DIR}/requirements.txt
- ${QFACE_SOURCE_FILES}|
- COMMENT "Installing qface development version into ${VIRTUALENV_NAME}"
- )
-
-add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/.stamp-deploy_virtualenv
- ${CMAKE_CURRENT_BINARY_DIR}/.stamp-cmake-rerun
- COMMAND ${DEPLOY_VIRTUALENV} qtivi_qface_virtualenv
- COMMAND ${CMAKE_COMMAND} -E touch .stamp-deploy_virtualenv
- COMMAND ${CMAKE_COMMAND} -E touch .stamp-cmake-rerun
- DEPENDS ${QFACE_BIN}
- )
-
-# main target which just relies on the stamp file to be uptodate
-add_custom_target(ivigenerator ALL
- DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/.stamp-deploy_virtualenv
- DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/.stamp-cmake-rerun
- )
-# Create the rerun cmake stamp file here to be able to add cmake configure dependency
-# A dependency can only be added to an existing file
-# This file is touched during the build during the deploy virtualenv step and is marked as an output
-# there as well.
-# In the end it makes sure that virtualenv deployment is a dependency for the configure run and
-# done first. Once it is done the configure step is done again and we can use the created virtualenv
-# within CMakeLists.txt istelf
-file(TOUCH ${CMAKE_CURRENT_BINARY_DIR}/.stamp-cmake-rerun)
-set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/.stamp-cmake-rerun)
+ add_custom_command(OUTPUT ${VIRTUALENV_ACTIVATE}
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${VIRTUALENV_PATH}
+
+ # virtualenv is always using the default interpreter, which is python2 on many systems"
+ # by adding -p we enforce that the python3 interpreter is used and make sure python3 is installed in the virtualenv
+ COMMAND ${CMAKE_COMMAND} -E chdir ${VIRTUALENV_PATH}
+ ${Python3_EXECUTABLE} -m virtualenv -p ${Python3_EXECUTABLE} --always-copy .
+
+ # Use a Python virtualenv for installing qface, so we don't pollute the user environment
+ # On some systems virtualenv --always-copy doesn't work (https://github.com/pypa/virtualenv/issues/565).
+ # To workaround the problem, we need to manually create the folder and create the virtualenv from
+ # inside
+ COMMAND ${CMAKE_COMMAND} -E chdir ${VIRTUALENV_PATH}
+ ${Python3_EXECUTABLE} ${RELOCATE_VIRTUALENV} .
+ COMMENT "Setting up virtualenv for qface, name: ${VIRTUALENV_NAME}"
+ )
+
+ # This is not very nice, but it gives us at least a good way to handle virtualenv rebuilding when
+ # someone is working on the qface sources
+ file(GLOB_RECURSE QFACE_SOURCE_FILES ${QFACE_SOURCE_DIR}/*.py)
+
+ # On the CI we use the special wheel folder when available to not download all packages again on each build
+ set(PYTHON3_WHEEL_CACHE "$ENV{PYTHON3_WHEEL_CACHE}" CACHE PATH "Python3 wheel cache")
+ if (EXISTS "${PYTHON3_WHEEL_CACHE}")
+ message(STATUS "Using wheel cache for python package installation: ${PYTHON3_WHEEL_CACHE}")
+ set(PIP3_INSTALL_COMMAND pip3 install --no-index --find-links=${PYTHON3_WHEEL_CACHE} ${QFACE_SOURCE_DIR} --verbose)
+ else()
+ set(PIP3_INSTALL_COMMAND pip3 install --upgrade ${QFACE_SOURCE_DIR})
+ endif()
-#####################################################################
-## clean target
-#####################################################################
+ add_custom_command(OUTPUT ${QFACE_BIN}
+ COMMAND ${VIRTUALENV_ACTIVATE_COMMAND}
+ COMMAND ${PIP3_INSTALL_COMMAND}
+ DEPENDS ${VIRTUALENV_ACTIVATE}
+ ${QFACE_SOURCE_DIR}/requirements.txt
+ ${QFACE_SOURCE_FILES}|
+ COMMENT "Installing qface development version into ${VIRTUALENV_NAME}"
+ )
+
+ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/.stamp-deploy_virtualenv
+ ${CMAKE_CURRENT_BINARY_DIR}/.stamp-cmake-rerun
+ COMMAND ${DEPLOY_VIRTUALENV} qtivi_qface_virtualenv
+ COMMAND ${CMAKE_COMMAND} -E touch .stamp-deploy_virtualenv
+ COMMAND ${CMAKE_COMMAND} -E touch .stamp-cmake-rerun
+ DEPENDS ${QFACE_BIN}
+ )
-set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_CLEAN_FILES
- ${CMAKE_CURRENT_BINARY_DIR}/.stamp-deploy_virtualenv
- ${CMAKE_CURRENT_BINARY_DIR}/.stamp-cmake-rerun
- ${VIRTUALENV_PATH}
- )
+ # main target which just relies on the stamp file to be uptodate
+ add_custom_target(ivigenerator ALL
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/.stamp-deploy_virtualenv
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/.stamp-cmake-rerun
+ )
+ # Create the rerun cmake stamp file here to be able to add cmake configure dependency
+ # A dependency can only be added to an existing file
+ # This file is touched during the build during the deploy virtualenv step and is marked as an output
+ # there as well.
+ # In the end it makes sure that virtualenv deployment is a dependency for the configure run and
+ # done first. Once it is done the configure step is done again and we can use the created virtualenv
+ # within CMakeLists.txt istelf
+ file(TOUCH ${CMAKE_CURRENT_BINARY_DIR}/.stamp-cmake-rerun)
+ set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/.stamp-cmake-rerun)
+
+ #####################################################################
+ ## clean target
+ #####################################################################
+
+ set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_CLEAN_FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/.stamp-deploy_virtualenv
+ ${CMAKE_CURRENT_BINARY_DIR}/.stamp-cmake-rerun
+ ${VIRTUALENV_PATH}
+ )
+
+
+ #####################################################################
+ ## virtualenv INSTALL Targets
+ #####################################################################
+
+ # qt_copy_or_install does the copying at configure time
+ # QT_WILL_INSTALL is the same variable which is used in qt_copy_or_install internally to determine
+ # whether installing or copying is needed
+ if(QT_WILL_INSTALL)
+ qt_install(
+ DIRECTORY
+ ${VIRTUALENV_PATH}
+ USE_SOURCE_PERMISSIONS
+ DESTINATION "${ivigenerator_install_dir}"
+ )
+ else()
+ add_custom_target(copy_virtualenv
+ COMMAND ${CMAKE_COMMAND} -E copy ${VIRTUALENV_PATH} "${ivigenerator_install_dir}"
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/.stamp-deploy_virtualenv
+ )
+ add_dependencies(ivigenerator copy_virtualenv)
+ endif()
+endif()
#####################################################################
## .config file generation
@@ -127,26 +155,6 @@ add_custom_target(generator SOURCES
## INSTALL Targets
#####################################################################
-set(ivigenerator_install_dir "${CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR}/ivigenerator")
-set(templates_install_dir "${ivigenerator_install_dir}/templates")
-# qt_copy_or_install does the copying at configure time
-# QT_WILL_INSTALL is the same variable which is used in qt_copy_or_install internally to determine
-# whether installing or copying is needed
-if(QT_WILL_INSTALL)
- qt_install(
- DIRECTORY
- ${VIRTUALENV_PATH}
- USE_SOURCE_PERMISSIONS
- DESTINATION "${ivigenerator_install_dir}"
- )
-else()
- add_custom_target(copy_virtualenv
- COMMAND ${CMAKE_COMMAND} -E copy ${VIRTUALENV_PATH} "${ivigenerator_install_dir}"
- DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/.stamp-deploy_virtualenv
- )
- add_dependencies(ivigenerator copy_virtualenv)
-endif()
-
qt_copy_or_install(
FILES
templates/common/generated_comment.cpp.tpl