summaryrefslogtreecommitdiffstats
path: root/tests/auto/cmake/test_widgets_app_deployment/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/cmake/test_widgets_app_deployment/CMakeLists.txt')
-rw-r--r--tests/auto/cmake/test_widgets_app_deployment/CMakeLists.txt74
1 files changed, 74 insertions, 0 deletions
diff --git a/tests/auto/cmake/test_widgets_app_deployment/CMakeLists.txt b/tests/auto/cmake/test_widgets_app_deployment/CMakeLists.txt
new file mode 100644
index 0000000000..9457278e12
--- /dev/null
+++ b/tests/auto/cmake/test_widgets_app_deployment/CMakeLists.txt
@@ -0,0 +1,74 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(deployment_api)
+enable_testing()
+
+find_package(Qt6 COMPONENTS REQUIRED Widgets Test)
+
+qt6_standard_project_setup()
+
+function(create_test_executable target)
+ cmake_parse_arguments(arg "" "" "" ${ARGN})
+
+ if(CMAKE_VERSION VERSION_LESS "3.19")
+ qt_add_executable(${target} MANUAL_FINALIZATION main.cpp)
+ else()
+ qt_add_executable(${target} main.cpp)
+ endif()
+
+ set_target_properties(${target} PROPERTIES
+ # We explicitly don't set WIN32_EXECUTABLE to ensure we see errors from stderr when
+ # something fails and not having to use DebugView.
+
+ MACOSX_BUNDLE TRUE
+ )
+ target_link_libraries(${target} PRIVATE Qt::Widgets Qt::Test)
+
+ install(TARGETS ${target}
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ )
+
+ qt_generate_deploy_app_script(
+ TARGET ${target}
+ OUTPUT_SCRIPT deploy_script
+ # Don't fail at configure time on unsupported platforms
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ )
+ install(SCRIPT ${deploy_script})
+
+ if(CMAKE_VERSION VERSION_LESS "3.19")
+ qt_finalize_target(${target})
+ endif()
+
+ if(APPLE AND NOT IOS)
+ set(installed_app_location "${CMAKE_INSTALL_PREFIX}/${target}.app/Contents/MacOS/${target}")
+ elseif(WIN32)
+ set(installed_app_location "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/${target}.exe")
+ elseif(UNIX AND NOT APPLE AND NOT ANDROID AND NOT CMAKE_CROSSCOMPILING)
+ set(installed_app_location "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/${target}")
+ endif()
+
+ # There's no nice way to get the location of an installed binary, so we need to construct
+ # the binary install path by hand, somewhat similar to how it's done in
+ # the implementation of qt_deploy_runtime_dependencies.
+ # On unsupported deployment platforms, either the install_ test will fail not finding
+ # the location of the app (because we do not set a installed_app_location value)
+ # or the run_deployed_ test will fail because we didn't deploy the runtime dependencies.
+ # When support for additional platforms is added, these locations will have to be augmented.
+ add_test(install_${target} "${CMAKE_COMMAND}" --install .)
+ set_tests_properties(install_${target} PROPERTIES FIXTURES_SETUP deploy_step)
+ add_test(NAME run_deployed_${target}
+ COMMAND "${installed_app_location}"
+ # Make sure that we don't use the default working directory which is
+ # CMAKE_CURRENT_BINARY_DIR because on Windows the loader might pick up dlls
+ # from the working directory instead of the installed app dir, if the dll is
+ # missing in the app dir.
+ WORKING_DIRECTORY "${CMAKE_INSTALL_PREFIX}")
+ set_tests_properties(run_deployed_${target} PROPERTIES FIXTURES_REQUIRED deploy_step)
+endfunction()
+
+create_test_executable(App)
+