summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmake/QtBuild.cmake54
-rwxr-xr-xutil/cmake/pro2cmake.py20
2 files changed, 71 insertions, 3 deletions
diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake
index 1ef14c152b..da5b863ebd 100644
--- a/cmake/QtBuild.cmake
+++ b/cmake/QtBuild.cmake
@@ -1818,7 +1818,9 @@ endfunction()
# This function creates a CMake test target with the specified name for use with CTest.
function(add_qt_test name)
- qt_parse_all_arguments(arg "add_qt_test" "RUN_SERIAL;EXCEPTIONS" "" "${__default_private_args}" ${ARGN})
+ qt_parse_all_arguments(arg "add_qt_test"
+ "RUN_SERIAL;EXCEPTIONS"
+ "" "TESTDATA;${__default_private_args}" ${ARGN})
set(path "${CMAKE_CURRENT_BINARY_DIR}")
if (${arg_EXCEPTIONS})
@@ -1857,6 +1859,47 @@ function(add_qt_test name)
set_tests_properties("${name}" PROPERTIES RUN_SERIAL "${arg_RUN_SERIAL}" LABELS "${label}")
set_property(TEST "${name}" APPEND PROPERTY ENVIRONMENT "PATH=${path}${QT_PATH_SEPARATOR}${CMAKE_CURRENT_BINARY_DIR}${QT_PATH_SEPARATOR}$ENV{PATH}")
set_property(TEST "${name}" APPEND PROPERTY ENVIRONMENT "QT_PLUGIN_PATH=${PROJECT_BINARY_DIR}/${INSTALL_PLUGINSDIR}")
+
+
+ if(ANDROID OR IOS OR WINRT)
+ set(builtin_testdata TRUE)
+ endif()
+
+ if(builtin_testdata)
+ target_compile_definitions("${name}" PRIVATE BUILTIN_TESTDATA)
+
+ foreach(testdata IN LISTS arg_TESTDATA)
+ list(APPEND builtin_files ${testdata})
+ endforeach()
+
+ set(blacklist_path "BLACKLIST")
+ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${blacklist_path}")
+ list(APPEND builtin_files ${blacklist_path})
+ endif()
+
+ list(REMOVE_DUPLICATES builtin_files)
+
+ if (builtin_files)
+ add_qt_resource(${name} "testdata"
+ FILES ${builtin_files}
+ BASE ${CMAKE_CURRENT_SOURCE_DIR})
+ endif()
+ else()
+ # Install test data
+ foreach(testdata IN LISTS arg_TESTDATA)
+ set(testdata "${CMAKE_CURRENT_SOURCE_DIR}/${testdata}")
+ if (IS_DIRECTORY "${testdata}")
+ qt_copy_or_install(
+ DIRECTORY "${testdata}"
+ DESTINATION "${INSTALL_TESTSDIR}/${name}")
+ else()
+ qt_copy_or_install(
+ FILES "${testdata}"
+ DESTINATION "${INSTALL_TESTSDIR}/${name}")
+ endif()
+ endforeach()
+ endif()
+
endfunction()
@@ -2044,11 +2087,16 @@ function(add_qt_resource target resourceName)
if (NOT alias)
set(alias "${file}")
endif()
+
+ if (NOT IS_ABSOLUTE ${based_file})
+ set(based_file "${CMAKE_CURRENT_SOURCE_DIR}/${based_file}")
+ endif()
+
### FIXME: escape file paths to be XML conform
# <file ...>...</file>
string(APPEND qrcContents " <file alias=\"${alias}\">")
- string(APPEND qrcContents "${CMAKE_CURRENT_SOURCE_DIR}/${based_file}</file>\n")
- list(APPEND files "${CMAKE_CURRENT_SOURCE_DIR}/${based_file}")
+ string(APPEND qrcContents "${based_file}</file>\n")
+ list(APPEND files "${based_file}")
endforeach()
# </qresource></RCC>
diff --git a/util/cmake/pro2cmake.py b/util/cmake/pro2cmake.py
index 495c0e14ce..44768efa03 100755
--- a/util/cmake/pro2cmake.py
+++ b/util/cmake/pro2cmake.py
@@ -1590,12 +1590,32 @@ def write_main_part(cm_fh: typing.IO[str], name: str, typename: str,
# Now write out the scopes:
write_header(cm_fh, name, typename, indent=indent)
+ # collect all testdata and insert globbing commands
+ has_test_data = False
+ if typename == 'Test':
+ test_data = scope.expand('TESTDATA')
+ if test_data:
+ has_test_data = True
+ cm_fh.write('# Collect test data\n')
+ for data in test_data:
+ if data.endswith('*'):
+ cm_fh.write('{}file(GLOB test_data_glob \n{}LIST_DIRECTORIES'
+ ' true\n{}RELATIVE ${{CMAKE_CURRENT_SOURCE_DIR}}\n{}"{}")\n'\
+ .format(spaces(indent), spaces(indent + 1), \
+ spaces(indent + 1), spaces(indent + 1), data))
+ cm_fh.write('{}list(APPEND test_data ${{test_data_glob}})\n'.format(spaces(indent)))
+ else:
+ cm_fh.write('{}list(APPEND test_data "{}")\n'.format(spaces(indent), data))
+ cm_fh.write('\n')
+
cm_fh.write('{}{}({}\n'.format(spaces(indent), cmake_function, name))
for extra_line in extra_lines:
cm_fh.write('{} {}\n'.format(spaces(indent), extra_line))
write_sources_section(cm_fh, scopes[0], indent=indent, **kwargs)
+ if has_test_data:
+ cm_fh.write('{} TESTDATA ${{test_data}}\n'.format(spaces(indent)))
# Footer:
cm_fh.write('{})\n'.format(spaces(indent)))