qt5base-lts/tests/auto/cmake/CMakeLists.txt
Stephen Kelly 8266de089c CMake: Create a Qt5::<ModuleName>Private target for each module
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>
2016-12-23 19:24:35 +00:00

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()