
cmake_version_output = $$system(cmake --version 2>$$QMAKE_SYSTEM_NULL_DEVICE, lines)
# First line
cmake_version_output = $$first(cmake_version_output)
# Format is "cmake version X.Y.Z"
cmake_version_output = $$split(cmake_version_output)
CMAKE_VERSION = $$last(cmake_version_output)

check.commands =
QMAKE_EXTRA_TARGETS *= check

isEmpty(CMAKE_VERSION) {
    message("cmake executable not found. Not running CMake unit tests")
    return()
}

CTEST_VERSION = $$system(ctest --version 2>$$QMAKE_SYSTEM_NULL_DEVICE)
isEmpty(CTEST_VERSION) {
    message("ctest executable not found. Not running CMake unit tests")
    return()
}

!versionAtLeast(CMAKE_VERSION, 3.1.0) {
    message("cmake $$CMAKE_VERSION is too old for this test.")
    return()
}

load(cmake_functions)

CMAKE_BUILD_TYPE = Debug
CONFIG(release, debug|release):CMAKE_BUILD_TYPE = Release
win32: CMAKE_GENERATOR = -G \"NMake Makefiles\"
mingw:isEmpty(CROSS_COMPILE):CMAKE_GENERATOR = -G \"MinGW Makefiles\"

BUILD_DIR = $$replace($$list($$OUT_PWD/build), /, $$QMAKE_DIR_SEP)

!qtHaveModule(gui): CMAKE_MODULE_DEFINES += -DNO_GUI=True
!qtHaveModule(widgets): CMAKE_MODULE_DEFINES += -DNO_WIDGETS=True
!qtHaveModule(dbus): CMAKE_MODULE_DEFINES += -DNO_DBUS=True

dependentmodules = $$resolve_depends(CMAKE_QT_MODULES_UNDER_TEST, "QT.")
dependentmodules -= $$CMAKE_QT_MODULES_UNDER_TEST

mod_deps =
for (dep, dependentmodules): \
    !contains(QT.$${dep}.module_config, no_link): \
        mod_deps += $$cmakeModuleName($$dep)
dependentmodules = $$join(mod_deps, ";")

QT_FOR_CONFIG += gui-private
qtHaveModule(gui):qtConfig(angle): CMAKE_GL_DEFINES = -DQT_WITH_ANGLE=True
qtHaveModule(gui):!qtConfig(egl): CMAKE_GL_DEFINES += -DNO_EGL=True

CMAKE_MODULE_VERSIONS =
CMAKE_MODULES_UNDER_TEST =
for (MODULE_UNDER_TEST, CMAKE_QT_MODULES_UNDER_TEST) {
    CMAKE_NAME = $$cmakeModuleName($$MODULE_UNDER_TEST)
    ver = $$eval(QT.$${MODULE_UNDER_TEST}.VERSION)
    CMAKE_MODULE_VERSIONS += \
        -DCMAKE_$${CMAKE_NAME}_MODULE_MAJOR_VERSION=$$section(ver, ., 0, 0) \
        -DCMAKE_$${CMAKE_NAME}_MODULE_MINOR_VERSION=$$section(ver, ., 1, 1) \
        -DCMAKE_$${CMAKE_NAME}_MODULE_PATCH_VERSION=$$section(ver, ., 2, 2)
    CMAKE_MODULES_UNDER_TEST += $$CMAKE_NAME
}
CMAKE_MODULES_UNDER_TEST = $$join(CMAKE_MODULES_UNDER_TEST, ;)

check.commands = \
    $$sprintf($$QMAKE_MKDIR_CMD, $$BUILD_DIR) $$escape_expand(\\n\\t) \
    $$QMAKE_CD $$BUILD_DIR && \
    cmake $$CMAKE_TEST_LOCATION $$CMAKE_GENERATOR \
        -DCMAKE_C_COMPILER=$$QMAKE_CC \
        -DCMAKE_CXX_COMPILER=$$QMAKE_CXX \
        -DCMAKE_VERBOSE_MAKEFILE=1 \
        $$CMAKE_MODULE_DEFINES \
        $$CMAKE_GL_DEFINES \
        -DCMAKE_BUILD_TYPE=$${CMAKE_BUILD_TYPE} \
        -DCMAKE_PREFIX_PATH=$$CMAKE_PREFIX_PATH \
        -DQt5_MODULE_TEST_DEPENDS=\"$${dependentmodules}\" \
        $${CMAKE_MODULE_VERSIONS} \
        -DCMAKE_MODULES_UNDER_TEST=\"$$CMAKE_MODULES_UNDER_TEST\" && \
    $(TESTRUNNER) ctest --output-on-failure

insignificant_test:!isEmpty(check.commands): \
    check.commands = -$${check.commands}
