aboutsummaryrefslogtreecommitdiffstats
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
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>
-rw-r--r--src/CMakeLists.txt7
-rw-r--r--src/ivicore/Qt6IviCoreMacros.cmake27
-rw-r--r--src/tools/ivigenerator/CMakeLists.txt220
3 files changed, 135 insertions, 119 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 636fb71..e3c7d29 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -6,6 +6,10 @@ qt_feature_evaluate_features("${CMAKE_CURRENT_SOURCE_DIR}/ivimedia/configure.cma
qt_feature_evaluate_features("${CMAKE_CURRENT_SOURCE_DIR}/geniviextras/configure.cmake") # special case
add_subdirectory(3rdparty) # special case
+if(QT_FEATURE_ivicore AND QT_FEATURE_ivigenerator AND NOT QT_FEATURE_geniviextras_only AND NOT QT_FEATURE_system_ivigenerator)
+ add_subdirectory(tools/ivigenerator)
+endif()
+
add_subdirectory(doc)
if(QT_FEATURE_ivicore AND NOT QT_FEATURE_geniviextras_only AND NOT QT_FEATURE_host_tools_only)
add_subdirectory(ivicore)
@@ -27,9 +31,6 @@ endif()
if(QT_FEATURE_geniviextras AND NOT QT_FEATURE_host_tools_only)
add_subdirectory(geniviextras)
endif()
-if(QT_FEATURE_ivicore AND QT_FEATURE_ivigenerator AND NOT QT_FEATURE_geniviextras_only AND NOT QT_FEATURE_system_ivigenerator)
- add_subdirectory(tools/ivigenerator)
-endif()
add_subdirectory(plugins)
add_subdirectory(imports)
# special case end
diff --git a/src/ivicore/Qt6IviCoreMacros.cmake b/src/ivicore/Qt6IviCoreMacros.cmake
index 7bacbcf..2e504b8 100644
--- a/src/ivicore/Qt6IviCoreMacros.cmake
+++ b/src/ivicore/Qt6IviCoreMacros.cmake
@@ -23,7 +23,8 @@ endmacro()
function(qt6_ivigenerator_generate)
internal_resolve_ivigenerator_path()
- if (NOT EXISTS ${VIRTUALENV}/bin/activate AND NOT EXISTS ${VIRTUALENV}/Scripts/activate.bat)
+ if (QT_FEATURE_python3_virtualenv AND NOT QT_FEATURE_system_qface
+ AND NOT EXISTS ${VIRTUALENV}/bin/activate AND NOT EXISTS ${VIRTUALENV}/Scripts/activate.bat)
return()
endif()
@@ -128,19 +129,24 @@ function(qt6_ivigenerator_generate)
# TODO How to best unset those again afterwards ?
# Use cmake -E slee + cmake -E env COMMAND instead ?
#equals(QMAKE_HOST.os, Windows): ENV = chcp 65001 &&
- if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
- set(PYTHON_EXECUTABLE ${VIRTUALENV}/Scripts/python.exe)
- file(TO_NATIVE_PATH "${VIRTUALENV}" VIRTUALENV)
+ if (QT_FEATURE_python3_virtualenv AND NOT QT_FEATURE_system_qface)
+ if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
+ set(PYTHON_EXECUTABLE ${VIRTUALENV}/Scripts/python.exe)
+ file(TO_NATIVE_PATH "${VIRTUALENV}" VIRTUALENV)
+ else()
+ set(PYTHON_EXECUTABLE ${VIRTUALENV}/bin/python)
+ set(ENV{LC_ALL} en_US.UTF-8)
+ set(ENV{LD_LIBRARY_PATH} ${VIRTUALENV}/bin)
+ endif()
+ set(ENV{PYTHONHOME} ${VIRTUALENV})
+ set(ENV{VIRTUAL_ENV} ${VIRTUALENV})
else()
- set(PYTHON_EXECUTABLE ${VIRTUALENV}/bin/python)
- set(ENV{LC_ALL} en_US.UTF-8)
- set(ENV{LD_LIBRARY_PATH} ${VIRTUALENV}/bin)
+ qt_find_package(Python3 PROVIDED_TARGETS Python3::Interpreter MODULE_NAME ivicore)
+ set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
endif()
if (DEFINED IVIGENERATOR_CONFIG)
set(ENV{IVIGENERATOR_CONFIG} ${IVIGENERATOR_CONFIG})
endif()
- set(ENV{PYTHONHOME} ${VIRTUALENV})
- set(ENV{VIRTUAL_ENV} ${VIRTUALENV})
message(STATUS "Running ivigenerator for ${QFACE_SOURCES}")
execute_process(
@@ -181,7 +187,8 @@ endif()
function(qt6_ivigenerator_include target)
internal_resolve_ivigenerator_path()
- if (NOT EXISTS ${VIRTUALENV}/bin/activate AND NOT EXISTS ${VIRTUALENV}/Scripts/activate.bat)
+ if (QT_FEATURE_python3_virtualenv AND NOT QT_FEATURE_system_qface
+ AND NOT EXISTS ${VIRTUALENV}/bin/activate AND NOT EXISTS ${VIRTUALENV}/Scripts/activate.bat)
# Create a dummy target instead
if (NOT TARGET ${target} AND NOT TEST ${target})
if (DEFINED QtIvi_BINARY_DIR)
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