Tests: Add support for testing Qt6

The minimum CMake version for Qt6 is 3.16, so all the calls to
cmake_minimum_required() are updated here to enforce that
minimum. This will avoid any CMake version-related warnings
from Qt.

Avoid hard-coding Qt5 where the tests could now be using
Qt5 or Qt6.

Fixes: #22188
This commit is contained in:
Craig Scott
2021-10-04 22:10:56 +11:00
parent b3a0bddc4e
commit a742088472
78 changed files with 273 additions and 167 deletions

View File

@@ -56,7 +56,7 @@
# Test directories.
- build/Tests/CTest*
- build/Tests/Find*
- build/Tests/Qt5*
- build/Tests/Qt*
- build/Tests/RunCMake/
- build/Tests/CMakeOnly/
- build/Tests/CMakeTests/

View File

@@ -257,6 +257,13 @@ if(BUILD_TESTING)
#---------------------------------------------------------------------------
# Add tests below here.
if(NOT DEFINED CMake_TEST_Qt6)
set(CMake_TEST_Qt6 1)
endif()
if(CMake_TEST_Qt6)
find_package(Qt6 COMPONENTS Core Widgets QUIET NO_MODULE)
endif()
if(NOT DEFINED CMake_TEST_Qt5)
set(CMake_TEST_Qt5 1)
endif()
@@ -1384,6 +1391,9 @@ if(BUILD_TESTING)
)
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/QtAutomocNoQt")
if(CMake_TEST_Qt6 AND Qt6Widgets_FOUND)
add_subdirectory(Qt6Autogen)
endif()
if(CMake_TEST_Qt5 AND Qt5Widgets_FOUND)
add_subdirectory(Qt5Autogen)
endif()

View File

@@ -0,0 +1,8 @@
# Set Qt test version and include the Autogen test macros
set(QT_TEST_VERSION 6)
include("../QtAutogen/TestMacros.cmake")
# Common tests
include("../QtAutogen/Tests.cmake")
set(TEST_BUILD_DIRS "${TEST_BUILD_DIRS}" PARENT_SCOPE)

View File

@@ -21,27 +21,27 @@ if (QT_TEST_VERSION EQUAL 4)
qt4_generate_moc(${ARGN})
endmacro()
elseif(QT_TEST_VERSION EQUAL 5)
elseif(QT_TEST_VERSION GREATER_EQUAL 5)
find_package(Qt5Core REQUIRED)
find_package(Qt${QT_TEST_VERSION}Core REQUIRED)
set(QT_QTCORE_TARGET Qt5::Core)
set(QT_LIBRARIES Qt5::Core)
set(QT_QTCORE_TARGET Qt${QT_TEST_VERSION}::Core)
set(QT_LIBRARIES Qt${QT_TEST_VERSION}::Core)
# Include directories
include_directories(${Qt5Core_INCLUDE_DIRS})
include_directories(${Qt${QT_TEST_VERSION}Core_INCLUDE_DIRS})
# Definitions
if(Qt5_POSITION_INDEPENDENT_CODE AND CMAKE_CXX_COMPILE_OPTIONS_PIC)
if(Qt${QT_TEST_VERSION}_POSITION_INDEPENDENT_CODE AND CMAKE_CXX_COMPILE_OPTIONS_PIC)
add_definitions(${CMAKE_CXX_COMPILE_OPTIONS_PIC})
endif()
# Qt macros
macro(qtx_wrap_cpp)
qt5_wrap_cpp(${ARGN})
cmake_language(CALL qt${QT_TEST_VERSION}_wrap_cpp ${ARGN})
endmacro()
macro(qtx_generate_moc)
qt5_generate_moc(${ARGN})
cmake_language(CALL qt${QT_TEST_VERSION}_generate_moc ${ARGN})
endmacro()
else()

View File

@@ -21,27 +21,27 @@ if (QT_TEST_VERSION EQUAL 4)
qt4_generate_moc(${ARGN})
endmacro()
elseif(QT_TEST_VERSION EQUAL 5)
elseif(QT_TEST_VERSION GREATER_EQUAL 5)
find_package(Qt5Widgets REQUIRED)
find_package(Qt${QT_TEST_VERSION}Widgets REQUIRED)
set(QT_QTCORE_TARGET Qt5::Core)
set(QT_LIBRARIES Qt5::Widgets)
set(QT_QTCORE_TARGET Qt${QT_TEST_VERSION}::Core)
set(QT_LIBRARIES Qt${QT_TEST_VERSION}::Widgets)
# Include directories
include_directories(${Qt5Widgets_INCLUDE_DIRS})
include_directories(${Qt${QT_TEST_VERSION}Widgets_INCLUDE_DIRS})
# Definitions
if(Qt5_POSITION_INDEPENDENT_CODE AND CMAKE_CXX_COMPILE_OPTIONS_PIC)
if(Qt${QT_TEST_VERSION}_POSITION_INDEPENDENT_CODE AND CMAKE_CXX_COMPILE_OPTIONS_PIC)
add_definitions(${CMAKE_CXX_COMPILE_OPTIONS_PIC})
endif()
# Qt macros
macro(qtx_wrap_cpp)
qt5_wrap_cpp(${ARGN})
cmake_language(CALL qt${QT_TEST_VERSION}_wrap_cpp ${ARGN})
endmacro()
macro(qtx_generate_moc)
qt5_generate_moc(${ARGN})
cmake_language(CALL qt${QT_TEST_VERSION}_generate_moc ${ARGN})
endmacro()
else()

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.11)
cmake_minimum_required(VERSION 3.16)
project(AutogenOriginDependsOff)
include("../AutogenCoreTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(AutogenOriginDependsOn)
include("../AutogenCoreTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(AutogenTargetDepends)
include("../AutogenCoreTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(Complex)
include("../AutogenGuiTest.cmake")
@@ -16,6 +16,8 @@ add_library(privateSlot OBJECT private_slot.cpp)
# Pass Qt compiler features to targets that don't link against Qt
target_compile_features(codeeditorLib PRIVATE ${QT_COMPILE_FEATURES})
target_compile_features(privateSlot PRIVATE ${QT_COMPILE_FEATURES})
target_link_libraries(codeeditorLib PRIVATE ${QT_LIBRARIES})
target_link_libraries(privateSlot PRIVATE ${QT_LIBRARIES})
configure_file(generated_resource.qrc.in generated_resource.qrc @ONLY)
add_custom_command(

View File

@@ -70,7 +70,11 @@ int CodeEditor::lineNumberAreaWidth()
++digits;
}
#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
int space = 3 + fontMetrics().horizontalAdvance(QLatin1Char('9')) * digits;
#else
int space = 3 + fontMetrics().width(QLatin1Char('9')) * digits;
#endif
return space;
}

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12)
cmake_minimum_required(VERSION 3.16)
project(GlobalAutogenTarget)
include("../AutogenCoreTest.cmake")
@@ -74,6 +74,7 @@ execute_process(
-T "${CMAKE_GENERATOR_TOOLSET}"
"-DQT_TEST_VERSION=${QT_TEST_VERSION}"
"-DCMAKE_AUTOGEN_VERBOSE=${CMAKE_AUTOGEN_VERBOSE}"
"-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
"-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}"
WORKING_DIRECTORY "${GAT_BDIR}"
OUTPUT_VARIABLE output

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.12)
cmake_minimum_required(VERSION 3.16)
project(GAT)
include("../../AutogenCoreTest.cmake")
@@ -9,7 +9,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
# Disable ORIGN_DEPENDS and enable AUTOGEN global targets
# Disable ORIGIN_DEPENDS and enable AUTOGEN global targets
set(CMAKE_AUTOGEN_ORIGIN_DEPENDS OFF)
set(CMAKE_GLOBAL_AUTOGEN_TARGET ON)
set(CMAKE_GLOBAL_AUTORCC_TARGET ON)

View File

@@ -1,21 +1,23 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(MacOsFW)
include("../AutogenGuiTest.cmake")
find_package(Qt5Test REQUIRED)
find_package(Qt${QT_TEST_VERSION}Test REQUIRED)
if(QT_TEST_VERSION EQUAL 5)
set(CMAKE_CXX_STANDARD 11)
elseif(QT_TEST_VERSION EQUAL 6)
set(CMAKE_CXX_STANDARD 17)
else()
message(FATAL_ERROR "Unsupported Qt version: ${QT_TEST_VERSION}")
endif()
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output/lib)
set(CMAKE_INSTALL_NAME_DIR ${CMAKE_BINARY_DIR}/output/lib)
if(POLICY CMP0042) # in CMake 3.0.0+
set (CMAKE_MACOSX_RPATH OFF) # otherwise ON by default
endif(POLICY CMP0042)
if(POLICY CMP0068) # in CMake 3.9+
cmake_policy(SET CMP0068 NEW)
endif(POLICY CMP0068)
set (CMAKE_MACOSX_RPATH OFF) # otherwise ON by default
cmake_policy(SET CMP0068 NEW)
add_subdirectory(src)
add_subdirectory(test)

View File

@@ -9,7 +9,7 @@ set(MACOS_FW_LIB_HDRS
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
${Qt5Core_INCLUDE_DIRS}
${Qt${QT_TEST_VERSION}Core_INCLUDE_DIRS}
)
add_library(macos_fw_lib SHARED
@@ -28,6 +28,4 @@ set_target_properties(macos_fw_lib PROPERTIES
POSITION_INDEPENDENT_CODE ON
PUBLIC_HEADER "${MACOS_FW_LIB_HDRS}"
)
target_link_libraries(macos_fw_lib
Qt5::Core
)
target_link_libraries(macos_fw_lib PRIVATE ${QT_QTCORE_TARGET})

View File

@@ -4,16 +4,16 @@ include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/../src
)
include_directories(SYSTEM
${Qt5Core_INCLUDE_DIRS}
${Qt5Widgets_INCLUDE_DIRS}
${Qt${QT_TEST_VERSION}Core_INCLUDE_DIRS}
${Qt${QT_TEST_VERSION}Widgets_INCLUDE_DIRS}
)
set(testname AutomocMacosFWLib)
add_executable(${testname} testMacosFWLib.cpp)
set_target_properties(${testname} PROPERTIES AUTOMOC TRUE)
target_link_libraries(${testname}
Qt5::Core
Qt5::Widgets
Qt5::Test
target_link_libraries(${testname} PRIVATE
Qt${QT_TEST_VERSION}::Core
Qt${QT_TEST_VERSION}::Widgets
Qt${QT_TEST_VERSION}::Test
macos_fw_lib
)

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(ManySources)
include("../AutogenGuiTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(MocCMP0071)
include("../AutogenCoreTest.cmake")

View File

@@ -1,4 +1,3 @@
cmake_minimum_required(VERSION 3.10)
cmake_policy(SET CMP0071 NEW)
# *Generate* files

View File

@@ -1,4 +1,3 @@
cmake_minimum_required(VERSION 3.10)
cmake_policy(SET CMP0071 OLD)
# *Generate* files

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(MocCMP0100)
include("../AutogenCoreTest.cmake")

View File

@@ -1,4 +1,3 @@
cmake_minimum_required(VERSION 3.16)
cmake_policy(SET CMP0100 NEW)
add_executable(mocCMP0100New

View File

@@ -1,4 +1,3 @@
cmake_minimum_required(VERSION 3.16)
cmake_policy(SET CMP0100 OLD)
# Generate moc files externally.

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.15)
cmake_minimum_required(VERSION 3.16)
project(MocInclude)
get_filename_component(CS_REAL ${CMAKE_CURRENT_SOURCE_DIR} REALPATH)
include("${CS_REAL}/../AutogenCoreTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.15)
cmake_minimum_required(VERSION 3.16)
project(MocIncludeSymlink)
include("../AutogenCoreTest.cmake")
@@ -63,6 +63,7 @@ macro(buildMocInclude sourceDir binaryDir)
CMAKE_FLAGS "-DQT_TEST_VERSION=${QT_TEST_VERSION}"
"-DCMAKE_AUTOMOC_PATH_PREFIX=ON"
"-DCMAKE_AUTOGEN_VERBOSE=${CMAKE_AUTOGEN_VERBOSE}"
"-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
"-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}"
OUTPUT_VARIABLE output
)

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(MocMacroName)
include("../AutogenCoreTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(MocOnly)
include("../AutogenCoreTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(MocOptions)
include("../AutogenCoreTest.cmake")

View File

@@ -1,10 +1,10 @@
cmake_minimum_required(VERSION 3.11)
cmake_minimum_required(VERSION 3.16)
project(MocOsMacros)
include("../AutogenCoreTest.cmake")
# Tests if moc processes Q_OS_XXX macros
message( "Qt5Core_VERSION: ${Qt5Core_VERSION}" )
message( "Qt${QT_TEST_VERSION}Core_VERSION: ${Qt${QT_TEST_VERSION}Core_VERSION}" )
message(
"CMAKE_CXX_COMPILER_PREDEFINES_COMMAND: "
${CMAKE_CXX_COMPILER_PREDEFINES_COMMAND} )
@@ -12,7 +12,7 @@ message(
# On some platforms (e.g. MAC) Q_OS_XXX requires moc to include moc_predefs.h
# which is supported since Qt 5.8 and requires
# CMAKE_CXX_COMPILER_PREDEFINES_COMMAND to be defined.
if( ( ${Qt5Core_VERSION} VERSION_GREATER_EQUAL "5.8" ) AND
if( ( ${Qt${QT_TEST_VERSION}Core_VERSION} VERSION_GREATER_EQUAL "5.8" ) AND
DEFINED CMAKE_CXX_COMPILER_PREDEFINES_COMMAND
)
message( "Test enabled!" )

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(MocSkipSource)
include("../AutogenCoreTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(ObjectLibrary)
include("../AutogenCoreTest.cmake")
@@ -11,7 +11,7 @@ add_subdirectory(a)
# Object library b defined locally
include_directories(b)
add_library(b OBJECT b/classb.cpp)
target_compile_features(b PRIVATE ${QT_COMPILE_FEATURES})
target_link_libraries(b PRIVATE ${QT_LIBRARIES})
# Executable with OBJECT library generator expressions
add_executable(someProgram main.cpp $<TARGET_OBJECTS:a> $<TARGET_OBJECTS:b>)

View File

@@ -1,2 +1,2 @@
add_library(a OBJECT classa.cpp)
target_compile_features(a PRIVATE ${QT_COMPILE_FEATURES})
target_link_libraries(a PRIVATE ${QT_LIBRARIES})

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(Parallel)
include("../AutogenGuiTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(Parallel1)
include("../AutogenGuiTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(Parallel2)
include("../AutogenGuiTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(Parallel3)
include("../AutogenGuiTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(Parallel4)
include("../AutogenGuiTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(ParallelAUTO)
include("../AutogenGuiTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(RccEmpty)
include("../AutogenCoreTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(RccOffMocLibrary)
include("../AutogenCoreTest.cmake")
@@ -9,9 +9,7 @@ include("../AutogenCoreTest.cmake")
add_library(empty STATIC empty.cpp not_generated_file.qrc)
set_target_properties(empty PROPERTIES AUTORCC OFF)
set_target_properties(empty PROPERTIES AUTOMOC TRUE)
target_link_libraries(empty no_link_language)
target_link_libraries(empty PRIVATE no_link_language ${QT_LIBRARIES})
add_library(no_link_language STATIC empty.h)
set_target_properties(no_link_language PROPERTIES AUTOMOC TRUE)
# Pass Qt compiler features to targets that don't link against Qt
target_compile_features(no_link_language PRIVATE ${QT_COMPILE_FEATURES})
target_compile_features(empty PRIVATE ${QT_COMPILE_FEATURES})
target_link_libraries(no_link_language PRIVATE ${QT_LIBRARIES})

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(RccOnly)
include("../AutogenCoreTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(RccSkipSource)
include("../AutogenCoreTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(RerunMocBasic)
include("../AutogenCoreTest.cmake")
@@ -63,6 +63,7 @@ execute_process(
${_D_CMAKE_GENERATOR_INSTANCE}
"-DQT_TEST_VERSION=${QT_TEST_VERSION}"
"-DCMAKE_AUTOGEN_VERBOSE=${CMAKE_AUTOGEN_VERBOSE}"
"-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
"-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}"
RESULT_VARIABLE exit_code
OUTPUT_VARIABLE output

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(MocBasic)
include("../../AutogenCoreTest.cmake")

View File

@@ -1,6 +1,6 @@
# This test checks whether adding a source file to the project triggers an AUTOMOC re-run.
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(RerunMocOnAddFile)
include("../AutogenCoreTest.cmake")
@@ -64,6 +64,7 @@ try_compile(MOC_RERUN
MocOnAddFile
CMAKE_FLAGS "-DQT_TEST_VERSION=${QT_TEST_VERSION}"
"-DCMAKE_AUTOGEN_VERBOSE=${CMAKE_AUTOGEN_VERBOSE}"
"-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
"-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}"
OUTPUT_VARIABLE output
)

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(MocOnAddFile)
include("@CMAKE_CURRENT_LIST_DIR@/../AutogenCoreTest.cmake")

View File

@@ -1,6 +1,6 @@
# This test checks whether a missing dependency of the moc output triggers an AUTOMOC re-run.
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(RerunMocOnMissingDependency)
include("../AutogenCoreTest.cmake")
@@ -13,10 +13,10 @@ add_executable(exe "${main_source}")
set(testProjectTemplateDir "${CMAKE_CURRENT_SOURCE_DIR}/MocOnMissingDependency")
set(testProjectSrc "${CMAKE_CURRENT_BINARY_DIR}/MocOnMissingDependency")
set(testProjectBinDir "${CMAKE_CURRENT_BINARY_DIR}/MocOnMissingDependency-build")
if(DEFINED Qt5Core_VERSION AND Qt5Core_VERSION VERSION_GREATER_EQUAL "5.15.0")
set(moc_depfiles_supported TRUE)
if(DEFINED Qt${QT_TEST_VERSION}Core_VERSION AND Qt${QT_TEST_VERSION}Core_VERSION VERSION_GREATER_EQUAL "5.15.0")
set(moc_depfiles_supported TRUE)
else()
set(moc_depfiles_supported FALSE)
set(moc_depfiles_supported FALSE)
endif()
# Utility macros
@@ -48,6 +48,7 @@ try_compile(MOC_RERUN
MocOnMissingDependency
CMAKE_FLAGS "-DQT_TEST_VERSION=${QT_TEST_VERSION}"
"-DCMAKE_AUTOGEN_VERBOSE=ON"
"-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
"-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}"
OUTPUT_VARIABLE output
)

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(RerunMocPlugin)
include("../AutogenCoreTest.cmake")
@@ -63,6 +63,7 @@ try_compile(MOC_PLUGIN
MocPlugin
CMAKE_FLAGS "-DQT_TEST_VERSION=${QT_TEST_VERSION}"
"-DCMAKE_AUTOGEN_VERBOSE=${CMAKE_AUTOGEN_VERBOSE}"
"-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
"-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}"
OUTPUT_VARIABLE output
)

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(MocPlugin)
include("../../AutogenGuiTest.cmake")
@@ -22,7 +22,7 @@ configure_file(jsonIn/StyleE.json jsonFiles/StyleE_Custom.json)
set(CMAKE_AUTOMOC TRUE)
include_directories("${CMAKE_CURRENT_BINARY_DIR}/jsonFiles")
link_libraries(Qt5::Widgets)
link_libraries(Qt${QT_TEST_VERSION}::Widgets)
add_library(PlugA STATIC StyleA.cpp)
add_library(PlugB STATIC StyleB.cpp)

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.11.2)
cmake_minimum_required(VERSION 3.16)
project(RerunRccConfigChange)
include("../AutogenCoreTest.cmake")
@@ -33,6 +33,7 @@ try_compile(RCC_DEPENDS
RccConfigChange
CMAKE_FLAGS "-DQT_TEST_VERSION=${QT_TEST_VERSION}"
"-DCMAKE_AUTOGEN_VERBOSE=${CMAKE_AUTOGEN_VERBOSE}"
"-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
"-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}"
OUTPUT_VARIABLE output
)

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.11.2)
cmake_minimum_required(VERSION 3.16)
project(RccConfigChange)
include("../../AutogenCoreTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(RerunRccDepends)
include("../AutogenCoreTest.cmake")
@@ -66,6 +66,7 @@ try_compile(RCC_DEPENDS
RccDepends
CMAKE_FLAGS "-DQT_TEST_VERSION=${QT_TEST_VERSION}"
"-DCMAKE_AUTOGEN_VERBOSE=${CMAKE_AUTOGEN_VERBOSE}"
"-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
"-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}"
OUTPUT_VARIABLE output
)

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(RccDepends)
include("../../AutogenCoreTest.cmake")

View File

@@ -66,6 +66,7 @@ execute_process(
"${build_type_extra}"
"-DQT_TEST_VERSION=${QT_TEST_VERSION}"
"-DCMAKE_AUTOGEN_VERBOSE=${CMAKE_AUTOGEN_VERBOSE}"
"-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
"-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}"
RESULT_VARIABLE exit_code
OUTPUT_VARIABLE output

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(UicOnFileChange)
include("@CMAKE_CURRENT_LIST_DIR@/../AutogenGuiTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(StaticLibraryCycle)
include("../AutogenCoreTest.cmake")

View File

@@ -7,8 +7,17 @@ else()
endif()
list(APPEND Autogen_BUILD_OPTIONS
"-DCMAKE_AUTOGEN_VERBOSE=1"
"-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}"
)
if(Qt${QT_TEST_VERSION}Core_DIR)
get_filename_component(prefix "${Qt${QT_TEST_VERSION}Core_DIR}" DIRECTORY)
get_filename_component(prefix "${prefix}" DIRECTORY)
get_filename_component(prefix "${prefix}" DIRECTORY)
list(APPEND Autogen_BUILD_OPTIONS "-DCMAKE_PREFIX_PATH:STRING=${prefix}")
else()
list(APPEND Autogen_BUILD_OPTIONS
"-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}"
)
endif()
# XXX(xcode-per-cfg-src): Drop the NO_PER_CONFIG_SOURCES exclusion
# when the Xcode generator supports per-config sources.
if(CMAKE_GENERATOR STREQUAL "Xcode")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(UicInclude)
include("../AutogenGuiTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(UicInterface)
include("../AutogenGuiTest.cmake")
@@ -11,12 +11,12 @@ set(CMAKE_AUTOUIC ON)
set(CMAKE_VERBOSE_MAKEFILE ON)
add_library(KI18n klocalizedstring.cpp)
target_link_libraries(KI18n ${QT_QTCORE_TARGET})
target_link_libraries(KI18n PRIVATE ${QT_QTCORE_TARGET})
set(autouic_options
-tr tr2$<$<NOT:$<BOOL:$<TARGET_PROPERTY:NO_KUIT_SEMANTIC>>>:x>i18n
)
if (NOT Qt5Widgets_VERSION VERSION_LESS 5.3.0)
if (NOT Qt${QT_TEST_VERSION}Widgets_VERSION VERSION_LESS 5.3.0)
list(APPEND autouic_options -include klocalizedstring.h)
endif()

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.13)
cmake_minimum_required(VERSION 3.16)
project(UicNoGui)
include("../AutogenCoreTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(UicOnly)
include("../AutogenGuiTest.cmake")

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.16)
project(UicSkipSource)
include("../AutogenGuiTest.cmake")

View File

@@ -1,6 +1,6 @@
enable_language(CXX)
find_package(Qt5 REQUIRED COMPONENTS Core)
find_package(Qt${with_qt_version} REQUIRED COMPONENTS Core)
# Detect `-NOTFOUND` libraries at generate time.
cmake_policy(SET CMP0111 NEW)

View File

@@ -1,3 +1,3 @@
cmake_minimum_required(VERSION 3.13)
cmake_minimum_required(VERSION 3.16)
project(${RunCMake_TEST} NONE)
include(${RunCMake_TEST}.cmake)

View File

@@ -1,9 +1,9 @@
enable_language(CXX)
function (use_autogen target)
find_package(Qt5 REQUIRED COMPONENTS Core Widgets)
set(Qt5Core_VERSION_MAJOR "${Qt5Core_VERSION_MAJOR}" PARENT_SCOPE)
set(Qt5Core_VERSION_MINOR "${Qt5Core_VERSION_MINOR}" PARENT_SCOPE)
find_package(Qt${with_qt_version} REQUIRED COMPONENTS Core Widgets)
set(Qt${with_qt_version}Core_VERSION_MAJOR "${Qt${with_qt_version}Core_VERSION_MAJOR}" PARENT_SCOPE)
set(Qt${with_qt_version}Core_VERSION_MINOR "${Qt${with_qt_version}Core_VERSION_MINOR}" PARENT_SCOPE)
set_property(TARGET "${target}" PROPERTY AUTOMOC 1)
set_property(TARGET "${target}" PROPERTY AUTORCC 1)
set_property(TARGET "${target}" PROPERTY AUTOUIC 1)

View File

@@ -1,9 +1,9 @@
enable_language(CXX)
function (use_autogen target)
find_package(Qt5 REQUIRED COMPONENTS Core Widgets)
set(Qt5Core_VERSION_MAJOR "${Qt5Core_VERSION_MAJOR}" PARENT_SCOPE)
set(Qt5Core_VERSION_MINOR "${Qt5Core_VERSION_MINOR}" PARENT_SCOPE)
find_package(Qt${with_qt_version} REQUIRED COMPONENTS Core Widgets)
set(Qt${with_qt_version}Core_VERSION_MAJOR "${Qt${with_qt_version}Core_VERSION_MAJOR}" PARENT_SCOPE)
set(Qt${with_qt_version}Core_VERSION_MINOR "${Qt${with_qt_version}Core_VERSION_MINOR}" PARENT_SCOPE)
set_property(TARGET "${target}" PROPERTY AUTOMOC 1)
set_property(TARGET "${target}" PROPERTY AUTORCC 1)
set_property(TARGET "${target}" PROPERTY AUTOUIC 1)

View File

@@ -1,13 +1,13 @@
enable_language(CXX)
function (use_autogen target)
find_package(Qt5 REQUIRED COMPONENTS Core Widgets)
find_package(Qt${with_qt_version} REQUIRED COMPONENTS Core Widgets)
set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
PROPERTY
Qt5Core_VERSION_MAJOR "${Qt5Core_VERSION_MAJOR}")
Qt${with_qt_version}Core_VERSION_MAJOR "${Qt${with_qt_version}Core_VERSION_MAJOR}")
set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
PROPERTY
Qt5Core_VERSION_MINOR "${Qt5Core_VERSION_MINOR}")
Qt${with_qt_version}Core_VERSION_MINOR "${Qt${with_qt_version}Core_VERSION_MINOR}")
set_property(TARGET "${target}" PROPERTY AUTOMOC 1)
set_property(TARGET "${target}" PROPERTY AUTORCC 1)
set_property(TARGET "${target}" PROPERTY AUTOUIC 1)

View File

@@ -1,7 +1,13 @@
include(RunCMake)
run_cmake(NoQt)
if (with_qt5)
if (DEFINED with_qt_version)
set(RunCMake_TEST_OPTIONS
-Dwith_qt_version=${with_qt_version}
"-DQt${with_qt_version}_DIR:PATH=${Qt${with_qt_version}_DIR}"
"-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
)
run_cmake(QtInFunction)
run_cmake(QtInFunctionNested)
run_cmake(QtInFunctionProperty)

View File

@@ -151,8 +151,23 @@ endif()
if(CMAKE_GENERATOR MATCHES "Make")
add_RunCMake_test(Make -DMAKE_IS_GNU=${MAKE_IS_GNU})
endif()
if(CMake_TEST_Qt5)
unset(ninja_test_with_qt_version)
unset(ninja_qt_args)
if(CMake_TEST_Qt6)
find_package(Qt6Widgets QUIET NO_MODULE)
if(Qt6Widgets_FOUND)
set(ninja_test_with_qt_version 6)
# Work around Qt6 not finding sibling dependencies without CMAKE_PREFIX_PATH
cmake_path(GET Qt6_DIR PARENT_PATH base_dir) # <base>/lib/cmake
cmake_path(GET base_dir PARENT_PATH base_dir) # <base>/lib
cmake_path(GET base_dir PARENT_PATH base_dir) # <base>
set(ninja_qt_args -DCMAKE_PREFIX_PATH=${base_dir})
endif()
elseif(CMake_TEST_Qt5)
find_package(Qt5Widgets QUIET NO_MODULE)
if(Qt5Widgets_FOUND)
set(ninja_test_with_qt_version 5)
endif()
endif()
if(CMAKE_GENERATOR MATCHES "Ninja")
set(Ninja_ARGS
@@ -162,18 +177,27 @@ if(CMAKE_GENERATOR MATCHES "Ninja")
if(CMAKE_Fortran_COMPILER)
list(APPEND Ninja_ARGS -DTEST_Fortran=1)
endif()
if(CMake_TEST_Qt5 AND Qt5Core_FOUND)
list(APPEND Ninja_ARGS -DCMake_TEST_Qt5=1 -DQt5Core_DIR=${Qt5Core_DIR} -DCMAKE_TEST_Qt5Core_Version=${Qt5Core_VERSION})
if(Qt5Widgets_FOUND)
list(APPEND Ninja_ARGS -DQt5Widgets_DIR=${Qt5Widgets_DIR})
endif()
if(ninja_test_with_qt_version)
list(APPEND Ninja_ARGS
-DCMake_TEST_Qt_version=${ninja_test_with_qt_version}
-DQt${ninja_test_with_qt_version}_DIR=${Qt${ninja_test_with_qt_version}_DIR}
-DQt${ninja_test_with_qt_version}Core_DIR=${Qt${ninja_test_with_qt_version}Core_DIR}
-DCMake_TEST_Qt${ninja_test_with_qt_version}Core_Version=${Qt${ninja_test_with_qt_version}Core_VERSION}
-DQt${ninja_test_with_qt_version}Widgets_DIR=${Qt${ninja_test_with_qt_version}Widgets_DIR}
${ninja_qt_args}
)
endif()
add_RunCMake_test(Ninja)
set(NinjaMultiConfig_ARGS
-DCYGWIN=${CYGWIN} -DMSYS=${MSYS}
)
if(CMake_TEST_Qt5 AND Qt5Core_FOUND)
list(APPEND NinjaMultiConfig_ARGS -DCMake_TEST_Qt5=1 -DQt5Core_DIR=${Qt5Core_DIR} -DCMAKE_TEST_Qt5Core_Version=${Qt5Core_VERSION})
if(ninja_test_with_qt_version)
list(APPEND NinjaMultiConfig_ARGS
-DCMake_TEST_Qt_version=${ninja_test_with_qt_version}
-DQt${ninja_test_with_qt_version}Core_DIR=${Qt${ninja_test_with_qt_version}Core_DIR}
-DCMake_TEST_Qt${ninja_test_with_qt_version}Core_Version=${Qt${ninja_test_with_qt_version}Core_VERSION}
${ninja_qt_args}
)
endif()
if(DEFINED CMake_TEST_CUDA)
list(APPEND NinjaMultiConfig_ARGS -DCMake_TEST_CUDA=${CMake_TEST_CUDA})
@@ -205,11 +229,29 @@ add_RunCMake_test(AndroidTestUtilities)
if(CMake_TEST_APPLE_SILICON)
add_RunCMake_test(AppleSilicon)
endif()
set(autogen_with_qt5 FALSE)
if(CMake_TEST_Qt5 AND Qt5Widgets_FOUND)
set(autogen_with_qt5 TRUE)
set(want_NoQt_test TRUE)
if(CMake_TEST_Qt6 AND Qt6Widgets_FOUND)
# Work around Qt6 not finding sibling dependencies without CMAKE_PREFIX_PATH
cmake_path(GET Qt6_DIR PARENT_PATH base_dir) # <base>/lib/cmake
cmake_path(GET base_dir PARENT_PATH base_dir) # <base>/lib
cmake_path(GET base_dir PARENT_PATH base_dir) # <base>
add_RunCMake_test(AutogenQt6 TEST_DIR Autogen
-Dwith_qt_version=6
"-DQt6_DIR:PATH=${Qt6_DIR}"
"-DCMAKE_PREFIX_PATH:STRING=${base_dir}"
)
set(want_NoQt_test FALSE)
endif ()
add_RunCMake_test(Autogen -Dwith_qt5=${autogen_with_qt5})
if(CMake_TEST_Qt5 AND Qt5Widgets_FOUND)
add_RunCMake_test(AutogenQt5 TEST_DIR Autogen
-Dwith_qt_version=5
"-DQt5_DIR:PATH=${Qt5_DIR}"
)
set(want_NoQt_test FALSE)
endif ()
if(want_NoQt_test)
add_RunCMake_test(AutogenNoQt TEST_DIR Autogen)
endif()
add_RunCMake_test(ArtifactOutputDirs)

View File

@@ -1,21 +0,0 @@
enable_language(CXX)
find_package(Qt5Core REQUIRED)
set(CMAKE_AUTOMOC ON)
add_library(simple_lib SHARED simple_lib.cpp)
add_executable(app_with_qt app.cpp app_qt.cpp)
target_link_libraries(app_with_qt PRIVATE simple_lib Qt5::Core)
if(Qt5Widgets_DIR)
find_package(Qt5Widgets REQUIRED)
qt5_wrap_ui(_headers MyWindow.ui)
add_executable(app_with_widget app.cpp MyWindow.cpp ${_headers})
target_link_libraries(app_with_widget PRIVATE Qt5::Widgets)
target_include_directories(app_with_widget PRIVATE "${CMAKE_BINARY_DIR}")
endif()
add_subdirectory(QtSubDir1)
add_subdirectory(QtSubDir2)
add_subdirectory(QtSubDir3)

View File

@@ -0,0 +1,27 @@
enable_language(CXX)
set(QtX Qt${with_qt_version})
find_package(${QtX} REQUIRED COMPONENTS Core)
set(CMAKE_AUTOMOC ON)
add_library(simple_lib SHARED simple_lib.cpp)
add_executable(app_with_qt app.cpp app_qt.cpp)
target_link_libraries(app_with_qt PRIVATE simple_lib ${QtX}::Core)
if(${QtX}Widgets_DIR)
find_package(${QtX} REQUIRED COMPONENTS Widgets)
if(with_qt_version STREQUAL 5)
qt5_wrap_ui(_headers MyWindow.ui)
else()
qt_wrap_ui(_headers MyWindow.ui)
endif()
add_executable(app_with_widget app.cpp MyWindow.cpp ${_headers})
target_link_libraries(app_with_widget PRIVATE ${QtX}::Widgets)
target_include_directories(app_with_widget PRIVATE "${CMAKE_BINARY_DIR}")
endif()
add_subdirectory(QtSubDir1)
add_subdirectory(QtSubDir2)
add_subdirectory(QtSubDir3)

View File

@@ -1,4 +1,4 @@
cmake_policy(SET CMP0116 OLD)
add_executable(sub_exe_1 ../app.cpp)
target_link_libraries(sub_exe_1 PRIVATE Qt5::Core)
target_link_libraries(sub_exe_1 PRIVATE ${QtX}::Core)

View File

@@ -1,4 +1,4 @@
cmake_policy(SET CMP0116 NEW)
add_executable(sub_exe_2 ../app.cpp)
target_link_libraries(sub_exe_2 PRIVATE Qt5::Core)
target_link_libraries(sub_exe_2 PRIVATE ${QtX}::Core)

View File

@@ -1,2 +1,2 @@
add_executable(sub_exe_3 ../app.cpp)
target_link_libraries(sub_exe_3 PRIVATE Qt5::Core)
target_link_libraries(sub_exe_3 PRIVATE ${QtX}::Core)

View File

@@ -319,12 +319,17 @@ function (run_ChangeBuildType)
endfunction()
run_ChangeBuildType()
function(run_Qt5AutoMocDeps)
if(CMake_TEST_Qt5 AND CMAKE_TEST_Qt5Core_Version VERSION_GREATER_EQUAL 5.15.0)
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Qt5AutoMocDeps-build)
set(RunCMake_TEST_OPTIONS "-DQt5Core_DIR=${Qt5Core_DIR}" "-DQt5Widgets_DIR=${Qt5Widgets_DIR}")
run_cmake(Qt5AutoMocDeps)
unset(RunCMake_TEST_OPTIONS)
function(run_QtAutoMocDeps)
set(QtX Qt${CMake_TEST_Qt_version})
if(CMake_TEST_${QtX}Core_Version VERSION_GREATER_EQUAL 5.15.0)
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/QtAutoMocDeps-build)
run_cmake_with_options(QtAutoMocDeps
"-Dwith_qt_version=${CMake_TEST_Qt_version}"
"-D${QtX}_DIR=${${QtX}_DIR}"
"-D${QtX}Core_DIR=${${QtX}Core_DIR}"
"-D${QtX}Widgets_DIR=${${QtX}Widgets_DIR}"
"-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
)
# Build the project.
run_ninja("${RunCMake_TEST_BINARY_DIR}")
# Touch just the library source file, which shouldn't cause a rerun of AUTOMOC
@@ -352,4 +357,6 @@ function(run_Qt5AutoMocDeps)
run_ninja("${RunCMake_TEST_BINARY_DIR}")
endif()
endfunction()
run_Qt5AutoMocDeps()
if(CMake_TEST_Qt_version)
run_QtAutoMocDeps()
endif()

View File

@@ -1,18 +1,21 @@
enable_language(CXX)
find_package(Qt5Core REQUIRED)
set(QtX Qt${with_qt_version})
find_package(${QtX} REQUIRED COMPONENTS Core)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOMOC_COMPILER_PREDEFINES OFF)
# Source files are always named qt5.* for simplicity but apply to Qt5 and later
add_executable(exe qt5.cxx)
target_link_libraries(exe PRIVATE Qt5::Core)
target_link_libraries(exe PRIVATE ${QtX}::Core)
include(${CMAKE_CURRENT_LIST_DIR}/Common.cmake)
generate_output_files(exe)
set(moc_writes_depfiles 0)
if(Qt5Core_VERSION VERSION_GREATER_EQUAL "5.15.0")
if(${QtX}Core_VERSION VERSION_GREATER_EQUAL "5.15.0")
set(moc_writes_depfiles 1)
endif()

View File

@@ -446,14 +446,20 @@ if(CMake_TEST_CUDA AND NOT CMake_TEST_CUDA STREQUAL "Clang")
run_ninja(CudaSimple all-clean build-Debug.ninja clean:Debug)
endif()
if(CMake_TEST_Qt5)
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Qt5-build)
set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=all" "-DQt5Core_DIR=${Qt5Core_DIR}")
run_cmake_configure(Qt5)
if(CMake_TEST_Qt_version)
set(QtX Qt${CMake_TEST_Qt_version})
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/QtX-build)
set(RunCMake_TEST_OPTIONS
"-DCMAKE_CROSS_CONFIGS=all"
"-Dwith_qt_version:STRING=${CMake_TEST_Qt_version}"
"-D${QtX}Core_DIR=${${QtX}Core_DIR}"
"-DCMAKE_PREFIX_PATH:STRING=${CMAKE_PREFIX_PATH}"
)
run_cmake_configure(QtX)
unset(RunCMake_TEST_OPTIONS)
include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
run_cmake_build(Qt5 debug-in-release-graph Release exe:Debug)
if(CMAKE_TEST_Qt5Core_Version VERSION_GREATER_EQUAL 5.15.0)
run_ninja(Qt5 automoc-check build-Debug.ninja -t query exe_autogen/timestamp)
run_cmake_build(QtX debug-in-release-graph Release exe:Debug)
if(CMake_TEST_${QtX}Core_Version VERSION_GREATER_EQUAL 5.15.0)
run_ninja(QtX automoc-check build-Debug.ninja -t query exe_autogen/timestamp)
endif()
endif()