qt6-bb10/tests/auto/cmake/test_qt_add_ui_common/RunCMake.cmake

158 lines
5.3 KiB
CMake

# Copyright (C) 2024 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
function(run_cmake_configure)
set(options CLEAN_FIRST)
set(oneValueArgs SOURCE_DIR BUILD_DIR RESULT_VARIABLE OUTPUT_VARIABLE
ERROR_VARIABLE GENERATOR)
set(multiValueArgs ADDITIONAL_ARGS)
cmake_parse_arguments(arg "${options}" "${oneValueArgs}" "${multiValueArgs}"
${ARGN})
if(NOT arg_SOURCE_DIR)
message(FATAL_ERROR "SOURCE_DIR not specified")
endif()
if(NOT arg_BUILD_DIR)
message(FATAL_ERROR "BUILD_DIR not specified")
endif()
is_multi_config(arg_GENERATOR multi_config_out)
if (NOT ${multi_config_out})
set(run_arg_config_arg -Darg_TYPE=Debug)
endif()
set(test_project_source_dir ${arg_SOURCE_DIR})
set(test_project_build_dir ${arg_BUILD_DIR})
# Make sure that file paths are 'real' paths
get_filename_component(test_project_source_dir "${test_project_source_dir}"
REALPATH)
get_filename_component(test_project_build_dir "${test_project_build_dir}"
REALPATH)
if(arg_CLEAN_FIRST)
file(REMOVE_RECURSE "${test_project_build_dir}")
endif()
file(MAKE_DIRECTORY "${test_project_build_dir}")
execute_process(COMMAND
"${CMAKE_COMMAND}"
-S "${test_project_source_dir}"
-B "${test_project_build_dir}"
-G "${arg_GENERATOR}"
"-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}"
${run_arg_config_arg}
${arg_ADDITIONAL_ARGS}
RESULT_VARIABLE cmake_result
OUTPUT_VARIABLE cmake_output
ERROR_VARIABLE cmake_error
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
ECHO_OUTPUT_VARIABLE
ECHO_ERROR_VARIABLE
)
# set output variables
set(${arg_RESULT_VARIABLE} ${cmake_result} PARENT_SCOPE)
set(${arg_OUTPUT_VARIABLE} ${cmake_output} PARENT_SCOPE)
set(${arg_ERROR_VARIABLE} ${cmake_error} PARENT_SCOPE)
endfunction()
function(run_cmake_build)
set(options VERBOSE)
set(oneValueArgs CONFIG BUILD_DIR RESULT_VARIABLE OUTPUT_VARIABLE
ERROR_VARIABLE)
cmake_parse_arguments(arg "${options}" "${oneValueArgs}" "${multiValueArgs}"
${ARGN})
if(NOT arg_BUILD_DIR)
message(FATAL_ERROR "BUILD_DIR not specified")
endif()
if (arg_VERBOSE OR arg_VERBOSE STREQUAL "")
set(arg_VERBOSE_ARG --verbose)
endif()
if(arg_CONFIG)
set(arg_BUILD_CONFIG_ARG --config ${arg_CONFIG})
endif()
execute_process(COMMAND ${CMAKE_COMMAND}
--build ${arg_BUILD_DIR}
${arg_VERBOSE_ARG}
${arg_BUILD_CONFIG_ARG}
RESULT_VARIABLE cmake_result
OUTPUT_VARIABLE cmake_output
ERROR_VARIABLE cmake_error
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
ECHO_OUTPUT_VARIABLE
ECHO_ERROR_VARIABLE)
set(${arg_RESULT_VARIABLE} ${cmake_result} PARENT_SCOPE)
set(${arg_OUTPUT_VARIABLE} ${cmake_output} PARENT_SCOPE)
set(${arg_ERROR_VARIABLE} ${cmake_error} PARENT_SCOPE)
endfunction()
function(is_multi_config generator output)
if ("${generator}" MATCHES "Visual Studio" OR "${generator}" MATCHES "Xcode"
OR "${generator}" MATCHES "Ninja Multi-Config")
set(${output} TRUE PARENT_SCOPE)
else()
set(${output} FALSE PARENT_SCOPE)
endif()
endfunction()
# check if string includes substring
function(_internal_string_contains output string substring)
if("${string}" MATCHES "${substring}")
set(${output} TRUE PARENT_SCOPE)
else()
set(${output} FALSE PARENT_SCOPE)
endif()
endfunction()
function(expect_string_contains string substring)
set(oneValueArgs SUCCESS_MESSAGE FAILURE_MESSAGE)
cmake_parse_arguments(expect_string_contains "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN})
_internal_string_contains(result "${string}" "${substring}")
if("${result}" STREQUAL TRUE)
if (expect_string_contains_SUCCESS_MESSAGE)
message(STATUS "PASS: ${expect_string_contains_SUCCESS_MESSAGE}")
else()
message(STATUS "PASS: \"${string}\" contains \"${substring}\"")
endif()
else()
if (expect_string_contains_FAILURE_MESSAGE)
message(FATAL_ERROR
"FAIL: ${expect_string_contains_FAILURE_MESSAGE}")
else()
message(FATAL_ERROR "FAIL: \"${string}\" contains \"${substring}\"")
endif()
endif()
endfunction()
function(expect_string_not_contains string substring)
set(oneValueArgs SUCCESS_MESSAGE FAILURE_MESSAGE)
cmake_parse_arguments(expect_string_not_contains
"${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
_internal_string_contains(result ${string} ${substring})
if(${result} STREQUAL FALSE)
if (expect_string_not_contains_SUCCESS_MESSAGE)
message(STATUS "PASS: ${expect_string_not_contains_SUCCESS_MESSAGE}")
else()
message(STATUS "PASS: \"${string}\" not contains \"${substring}\"")
endif()
else()
if (expect_string_not_contains_FAILURE_MESSAGE)
message(FATAL_ERROR
"FAIL: ${expect_string_not_contains_FAILURE_MESSAGE}")
else()
message(FATAL_ERROR "FAIL: \"${string}\" contains \"${substring}\"")
endif()
endif()
endfunction()