summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2020-04-30 17:00:13 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2020-05-01 19:11:29 +0200
commita876ff1283d997795a421f7e0a49e0ad3c2f2ad5 (patch)
tree0932dfb2faaecbf9f5085b36675c0d0f9f92a705 /cmake
parent88f6087f01377e629814d2c7808e7c398268b6b6 (diff)
CMake: Fix failing standalone tests on Windows
Due to the install prefix being changed for standalone tests, the correct $qt_prefix/bin folder was not added to the PATH environment variable when running tests. Make sure to always include the the original qt install prefix, even if a different install prefix is specified when configuring standalone tests. Amends 39090ea15c41eded8a233ec2633c0c657280297c Change-Id: I22aab732bb2bb679074a811d28d8209e1d535df3 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r--cmake/QtBuild.cmake25
-rw-r--r--cmake/QtBuildInternalsExtra.cmake.in8
2 files changed, 29 insertions, 4 deletions
diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake
index 6375ffdca7..933fc367a6 100644
--- a/cmake/QtBuild.cmake
+++ b/cmake/QtBuild.cmake
@@ -3310,17 +3310,34 @@ function(qt_add_test name)
if (arg_TIMEOUT)
set_tests_properties(${name} PROPERTIES TIMEOUT ${arg_TIMEOUT})
endif()
- # Get path to qtbase/bin, then prepend this path containing the shared libraries to PATH
- set(INSTALL_PREFIX_BIN "${CMAKE_INSTALL_PREFIX}/${INSTALL_BINDIR}")
- set(test_env_path "PATH=${CMAKE_CURRENT_BINARY_DIR}${QT_PATH_SEPARATOR}${INSTALL_PREFIX_BIN}${QT_PATH_SEPARATOR}$ENV{PATH}")
+
+ # Get path to <original_qtbase_install_prefix>/bin, as well as CMAKE_INSTALL_PREFIX/bin, then
+ # prepend them to the PATH environment variable.
+ # It's needed on Windows to find the shared libraries and plugins.
+ # original_qtbase_install_prefix is the CMAKE_INSTALL_PREFIX specified when building qtbase.
+ # The regular CMAKE_INSTALL_PREFIX can be different for example when building standalone tests.
+ # Latest CMAKE_INSTALL_PREFIX takes priority for the PATH environment variable.
+ set(install_prefixes "${CMAKE_INSTALL_PREFIX}")
+ if(QT_BUILD_INTERNALS_ORIGINAL_INSTALL_PREFIX)
+ list(APPEND install_prefixes "${QT_BUILD_INTERNALS_ORIGINAL_INSTALL_PREFIX}")
+ endif()
+
+ set(test_env_path "PATH=${CMAKE_CURRENT_BINARY_DIR}")
+ foreach(install_prefix ${install_prefixes})
+ set(test_env_path "${test_env_path}${QT_PATH_SEPARATOR}${install_prefix}/${INSTALL_BINDIR}")
+ endforeach()
+ set(test_env_path "${test_env_path}${QT_PATH_SEPARATOR}$ENV{PATH}")
string(REPLACE ";" "\;" test_env_path "${test_env_path}")
set_property(TEST "${name}" APPEND PROPERTY ENVIRONMENT "${test_env_path}")
set_property(TEST "${name}" APPEND PROPERTY ENVIRONMENT "QT_TEST_RUNNING_IN_CTEST=1")
# Add the install prefix to list of plugin paths when doing a prefix build
if(NOT QT_INSTALL_DIR)
- list(APPEND plugin_paths "${CMAKE_INSTALL_PREFIX}/${INSTALL_PLUGINSDIR}")
+ foreach(install_prefix ${install_prefixes})
+ list(APPEND plugin_paths "${install_prefix}/${INSTALL_PLUGINSDIR}")
+ endforeach()
endif()
+
#TODO: Collect all paths from known repositories when performing a super
# build.
list(APPEND plugin_paths "${PROJECT_BINARY_DIR}/${INSTALL_PLUGINSDIR}")
diff --git a/cmake/QtBuildInternalsExtra.cmake.in b/cmake/QtBuildInternalsExtra.cmake.in
index 5278890337..ea945a913d 100644
--- a/cmake/QtBuildInternalsExtra.cmake.in
+++ b/cmake/QtBuildInternalsExtra.cmake.in
@@ -10,6 +10,14 @@ set(QT_BUILD_INTERNALS_PATH "${CMAKE_CURRENT_LIST_DIR}")
set(CMAKE_INSTALL_PREFIX @CMAKE_INSTALL_PREFIX@ CACHE PATH
"Install path prefix, prepended onto install directories." FORCE)
+# Save the original install prefix in an additional variable.
+# While CMAKE_INSTALL_PREFIX may be overridden in certain cases (like for standalone tests building
+# or for singular qt-cmake-standalone-test usage), we still need the original qtbase install prefix
+# to know where the shared libraries are located to inject them into PATH when running tests via
+# ctest.
+set(QT_BUILD_INTERNALS_ORIGINAL_INSTALL_PREFIX @CMAKE_INSTALL_PREFIX@ CACHE PATH
+ "Original install prefix specified when building qtbase." FORCE)
+
# Propagate developer builds to other modules via BuildInternals package.
if(@FEATURE_developer_build@)
set(FEATURE_developer_build ON CACHE BOOL "Developer build." FORCE)