From 681e8b4ead432b2658b0be9f90454bbdbd80d1b1 Mon Sep 17 00:00:00 2001 From: Leander Beernaert Date: Tue, 12 Nov 2019 15:31:34 +0100 Subject: Add add_qt_manual_test() This patch adds add_qt_manual_test() which is a simple wrapper around add_qt_executable() which does not build under ${CMAKE_BUILD_DIR}/bin or install the targets. This could potentially be used later to tag manual tests. Change-Id: Ic4e0a1d133009f5a858b9394347a0996cf42683f Reviewed-by: Alexandru Croitor --- cmake/QtBuild.cmake | 34 ++++++++++++++++++++++++++++++++++ util/cmake/pro2cmake.py | 14 +++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index 31830b06b3..31a0e3f7c9 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -2390,6 +2390,40 @@ function(add_qt_benchmark target) endfunction() +# Simple wrapper around add_qt_executable for manual tests which insure that +# the binary is built under ${CMAKE_CURRENT_BINARY_DIR} and never installed. +# See add_qt_executable() for more details. +function(add_qt_manual_test target) + + qt_parse_all_arguments(arg "add_qt_benchmark" + "${__add_qt_executable_optional_args}" + "${__add_qt_executable_single_args}" + "${__add_qt_executable_multi_args}" + ${ARGN} + ) + + qt_remove_args(exec_args + ARGS_TO_REMOVE + ${target} + OUTPUT_DIRECTORY + INSTALL_DIRECTORY + ALL_ARGS + "${__add_qt_executable_optional_args}" + "${__add_qt_executable_single_args}" + "${__add_qt_executable_multi_args}" + ARGS + ${ARGV} + ) + + add_qt_executable(${target} + NO_INSTALL # we don't install benchmarks + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" # avoid polluting bin directory + ${exec_args} + ) + +endfunction() + + # This function creates a CMake test target with the specified name for use with CTest. function(add_qt_test name) qt_parse_all_arguments(arg "add_qt_test" diff --git a/util/cmake/pro2cmake.py b/util/cmake/pro2cmake.py index 63865aafd7..18ec08ad0a 100755 --- a/util/cmake/pro2cmake.py +++ b/util/cmake/pro2cmake.py @@ -246,9 +246,18 @@ def is_benchmark_project(project_file_path: str = "") -> bool: project_relative_path = os.path.relpath(project_file_path, qmake_conf_dir_path) # If the project file is found in a subdir called 'tests/benchmarks' - # relative to the repo source dir, then it must be benchmark + # relative to the repo source dir, then it must be a benchmark return project_relative_path.startswith("tests/benchmarks") +def is_manual_test(project_file_path: str = "") -> bool: + qmake_conf_path = find_qmake_conf(project_file_path) + qmake_conf_dir_path = os.path.dirname(qmake_conf_path) + + project_relative_path = os.path.relpath(project_file_path, qmake_conf_dir_path) + # If the project file is found in a subdir called 'tests/manual' + # relative to the repo source dir, then it must be a manual test + return project_relative_path.startswith("tests/manual") + @lru_cache(maxsize=None) def find_qmake_conf(project_file_path: str = "") -> str: @@ -2808,6 +2817,7 @@ def write_binary(cm_fh: IO[str], scope: Scope, gui: bool = False, *, indent: int assert binary_name is_benchmark = is_benchmark_project(scope.file_absolute_path) + is_manual_test = is_manual_test(scope.file_absolute_path) is_qt_test_helper = "qt_test_helper" in scope.get("_LOADED") @@ -2821,6 +2831,8 @@ def write_binary(cm_fh: IO[str], scope: Scope, gui: bool = False, *, indent: int if is_benchmark: cmake_function_call = "add_qt_benchmark" + elif is_manual_test: + cmake_function_call = "add_qt_manual_test" else: extra_keys = ["target.path", "INSTALLS"] target_path = scope.get_string("target.path") -- cgit v1.2.3