summaryrefslogtreecommitdiffstats
path: root/cmake/tests/CMakeLists.txt
blob: 5ee20fbf15d100442671bf8d6749c7bb365deda2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0

# These macros are inspired by ECM:

# a macro for tests that have a simple format where the name matches the
# directory and project

# The following macros will produce tests that generate the build
# system for the test project, build it and then run its tests.
macro(add_cmake_test_generate_build_run_variant name base command)
    string(REPLACE "." "/" src_dir "${base}")
    string(REPLACE "." "/" build_dir "${name}")
    string(REGEX REPLACE "[^.]*\\." "" proj "${name}")
    add_test(NAME "cmake_${name}"
        COMMAND ${CMAKE_CTEST_COMMAND}
            --build-and-test
                "${CMAKE_CURRENT_SOURCE_DIR}/${src_dir}"
                "${CMAKE_CURRENT_BINARY_DIR}/${build_dir}"
            --build-two-config
            --build-generator ${CMAKE_GENERATOR}
            --build-makeprogram ${CMAKE_MAKE_PROGRAM}
            --build-project ${proj}
            ${${name}_EXTRA_OPTIONS}
            --test-command ${command} ${ARGN})
endmacro()

macro(add_cmake_test_generate_build_run name)
    add_cmake_test_generate_build_run_variant("${name}" "${name}" ${ARGN})
endmacro()

# The following macros will produce tests that just run cmake
# to generate the build system for the test project.
macro(add_cmake_test_generate_variant name base)
    string(REPLACE "." "/" src_dir "${base}")
    string(REPLACE "." "/" build_dir "${name}")
    file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${build_dir}")
    add_test(NAME "cmake_${name}"
        COMMAND "${CMAKE_COMMAND}" "-G${CMAKE_GENERATOR}"
            "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}"
            ${${name}_EXTRA_OPTIONS}
            "${CMAKE_CURRENT_SOURCE_DIR}/${src_dir}"
        WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${build_dir}")
endmacro()

macro(add_cmake_test_generate name)
    add_cmake_test_generate_variant("${name}" "${name}")
endmacro()

add_cmake_test_generate(features)
add_cmake_test_generate(qt_make_output_file)