8266de089c
Make it depend on the corresponding Private target of each dependency. This way, user code can write find_package(Qt5Gui REQUIRED) add_executable(hello hello.cpp) target_link_libraries(hello Qt5::GuiPrivate) and get the private include directories for both Qt5Core and Qt5Gui. Don't create the Private target if any of the private include directories do not exist. This way, if user code uses one of the targets, CMake will issue an error if the private include directories do not exist. Unfortunately the error is somewhat cryptic (eg, 'the "Qt5::CorePrivate" was not found'), but this is still an improvement over an error at compile time. This is an improvement on the situation described in QTBUG-37417 using Modern CMake features. Change-Id: I034f8216c3ec64d1a3309682456a713cac9bf854 Reviewed-by: Kai Pastor <dg0yt@darc.de> Reviewed-by: Stephen Kelly <steveire@gmail.com>
164 lines
5.3 KiB
CMake
164 lines
5.3 KiB
CMake
|
|
# This is an automatic test for the CMake configuration files.
|
|
# To run it manually,
|
|
# 1) mkdir build # Create a build directory
|
|
# 2) cd build
|
|
# 3) cmake .. # Run cmake on this directory.
|
|
# 4) ctest # Run ctest
|
|
#
|
|
# The expected output is something like:
|
|
#
|
|
# Start 1: test_use_modules_function
|
|
# 1/11 Test #1: test_use_modules_function ........ Passed 3.36 sec
|
|
# Start 2: test_wrap_cpp_and_resources
|
|
# 2/11 Test #2: test_wrap_cpp_and_resources ...... Passed 1.41 sec
|
|
# Start 3: test_dependent_modules
|
|
# 3/11 Test #3: test_dependent_modules ........... Passed 2.22 sec
|
|
# Start 4: test_add_resource_options
|
|
# 4/11 Test #4: test_add_resource_options ........ Passed 0.16 sec
|
|
# Start 5: test_wrap_cpp_options
|
|
# 5/11 Test #5: test_wrap_cpp_options ............ Passed 0.36 sec
|
|
# Start 6: test_needsquoting_dirname
|
|
# 6/11 Test #6: test_needsquoting_dirname ........ Passed 2.20 sec
|
|
# Start 7: test_platform_defs_include
|
|
# 7/11 Test #7: test_platform_defs_include ....... Passed 0.28 sec
|
|
# Start 8: test_qtmainwin_library
|
|
# 8/11 Test #8: test_qtmainwin_library ........... Passed 1.27 sec
|
|
# Start 9: test_dbus_module
|
|
# 9/11 Test #9: test_dbus_module ................. Passed 3.46 sec
|
|
# Start 10: test_multiple_find_package
|
|
# 10/11 Test #10: test_multiple_find_package ....... Passed 0.07 sec
|
|
# Start 11: test_add_resources_delayed_file
|
|
# 11/11 Test #11: test_add_resources_delayed_file .. Passed 0.38 sec
|
|
#
|
|
#
|
|
# Note that if Qt is not installed, or if it is installed to a
|
|
# non-standard prefix, the environment variable CMAKE_PREFIX_PATH
|
|
# needs to be set to the installation prefix or build prefix of Qt
|
|
# before running these tests.
|
|
|
|
cmake_minimum_required(VERSION 2.8)
|
|
|
|
project(qmake_cmake_files)
|
|
|
|
enable_testing()
|
|
|
|
find_package(Qt5Core REQUIRED)
|
|
|
|
include("${_Qt5CTestMacros}")
|
|
|
|
if(NOT ${CMAKE_VERSION} VERSION_LESS 2.8.9)
|
|
# Requires INCLUDE_DIRECTORIES target property in CMake 2.8.8
|
|
# and POSITION_INDEPENDENT_CODE target property in 2.8.9
|
|
if (NOT NO_GUI)
|
|
expect_pass(test_use_modules_function)
|
|
endif()
|
|
expect_pass(test_umbrella_config)
|
|
else()
|
|
message("CMake version older than 2.8.9 (Found ${CMAKE_VERSION}). Not running test \"test_use_modules_function\" or \"test_umbrella_config\"")
|
|
endif()
|
|
|
|
expect_pass(test_wrap_cpp_and_resources)
|
|
if (NOT NO_WIDGETS)
|
|
expect_pass(test_dependent_modules)
|
|
expect_pass("test(needsquoting)dirname")
|
|
endif()
|
|
expect_fail(test_add_resource_options)
|
|
expect_fail(test_wrap_cpp_options)
|
|
expect_pass(test_platform_defs_include)
|
|
expect_pass(test_qtmainwin_library)
|
|
|
|
if (HAVE_NINJA)
|
|
make_directory("${CMAKE_CURRENT_SOURCE_DIR}/test_QFINDTESTDATA/build")
|
|
add_test(test_QFINDTESTDATA ${CMAKE_CTEST_COMMAND}
|
|
--build-and-test
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/test_QFINDTESTDATA"
|
|
# Build in a subdir of the source dir.
|
|
# This causes Ninja to use relative paths.
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/test_QFINDTESTDATA/build"
|
|
--build-generator Ninja
|
|
--build-options "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}"
|
|
)
|
|
add_test(NAME run_test_QFINDTESTDATA COMMAND sh -c "cd \"${CMAKE_SOURCE_DIR}/test_QFINDTESTDATA/build/tests\" && ./test_QFINDTESTDATA -v2")
|
|
|
|
set_property(TEST run_test_QFINDTESTDATA
|
|
PROPERTY DEPENDS test_QFINDTESTDATA
|
|
)
|
|
endif()
|
|
|
|
if (NOT NO_DBUS)
|
|
expect_pass(test_dbus_module)
|
|
endif()
|
|
expect_pass(test_multiple_find_package)
|
|
if (NOT WIN32 OR (WIN32 AND NOT CMAKE_VERSION VERSION_LESS 2.8.11))
|
|
# Broken on windows on earlier CMake versions.
|
|
# http://public.kitware.com/Bug/view.php?id=13392
|
|
expect_pass(test_add_resources_delayed_file)
|
|
expect_pass(test_add_binary_resources_delayed_file BINARY test_add_binary_resources_delayed_file)
|
|
endif()
|
|
expect_pass(test_private_includes)
|
|
expect_pass(test_private_targets)
|
|
expect_pass(test_testlib_definitions)
|
|
expect_pass(test_json_plugin_includes)
|
|
|
|
expect_fail(test_testlib_no_link_gui)
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/test_testlib_definitions/main.cpp"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/failbuild/test_testlib_no_link_gui/test_testlib_no_link_gui/"
|
|
)
|
|
|
|
if (NOT NO_WIDGETS)
|
|
expect_fail(test_testlib_no_link_widgets)
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E copy
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/test_testlib_definitions/main.cpp"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/failbuild/test_testlib_no_link_widgets/test_testlib_no_link_widgets/"
|
|
)
|
|
endif()
|
|
|
|
set(qt_module_includes
|
|
Core QObject
|
|
Network QHostInfo
|
|
Sql QSqlError
|
|
Test QTestEventList
|
|
Xml QDomDocument
|
|
)
|
|
|
|
if (NOT NO_GUI)
|
|
list(APPEND qt_module_includes
|
|
Gui QImage
|
|
)
|
|
endif()
|
|
|
|
if (NOT NO_WIDGETS)
|
|
list(APPEND qt_module_includes
|
|
Widgets QWidget
|
|
OpenGL QGLBuffer
|
|
PrintSupport QPrinter
|
|
)
|
|
endif()
|
|
|
|
if (NOT NO_DBUS)
|
|
list(APPEND qt_module_includes
|
|
DBus QDBusMessage
|
|
)
|
|
endif()
|
|
|
|
test_module_includes(
|
|
${qt_module_includes}
|
|
)
|
|
expect_pass(test_concurrent_module)
|
|
expect_pass(test_openglextensions_module)
|
|
if (QT_WITH_ANGLE OR (NOT WIN32 AND NOT APPLE AND NOT NO_EGL))
|
|
expect_pass(test_egl_lib)
|
|
endif()
|
|
expect_pass(test_opengl_lib)
|
|
|
|
if (NOT CMAKE_VERSION VERSION_LESS 2.8.11 AND NOT NO_WIDGETS)
|
|
expect_pass(test_interface)
|
|
endif()
|
|
|
|
if (NOT CMAKE_VERSION VERSION_LESS 2.8.12)
|
|
expect_pass(test_interface_link_libraries)
|
|
expect_pass(test_moc_macro_target)
|
|
endif()
|