@@ -258,16 +258,36 @@ function(add_manual_test COMPONENT_NAME TARGET)
258endfunction()
258endfunction()
261−################### INTERNAL ####################
261+# add_meta_test(target)
263+# Adds a test target that will run one of our "meta" test targets, like
264+# xvfbuitests. This script will run the specified suite of tests on an
263−function(add_test_target TARGET_NAME)
267+function(add_meta_test TARGET_NAME)
264− cmake_parse_arguments(TEST "" "" "COMMAND;ENVIRONMENT;DEPENDS" ${ARGN})
268+ cmake_parse_arguments(TEST "" "" "DEPENDS" ${ARGN})
266− add_custom_target(${TARGET_NAME}
270+ add_custom_target(${TARGET_NAME})
267− env ${TEST_ENVIRONMENT}
271+
268− ${TEST_COMMAND}
272+ set(filename "${CMAKE_BINARY_DIR}/tests/scripts/${TARGET_NAME}.sh")
273+ file(WRITE "${filename}" "#!/bin/sh\n\nset -e\n\n")
269− DEPENDS ${TEST_DEPENDS}
275+ add_meta_dependencies(${TARGET_NAME} DEPENDS ${TEST_DEPENDS})
276+ # else we will write the rest of the script as we add cmake targets
278+ install(FILES "${filename}"
279+ PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE
280+ GROUP_EXECUTE GROUP_READ
281+ WORLD_EXECUTE WORLD_READ
282+ DESTINATION "${SHELL_PRIVATE_LIBDIR}/tests/scripts"
287+################### INTERNAL ####################
289+function(install_test_script TARGET_NAME)
290+ cmake_parse_arguments(TEST "" "" "COMMAND;ENVIRONMENT" ${ARGN})
272 # Now write the above test into a shell script that we can run on an
292 # Now write the above test into a shell script that we can run on an
273 # installed system.
293 # installed system.
@@ -279,10 +299,7 @@ function(add_test_target TARGET_NAME)
279 set(script "${script}export UNITY_TESTING_LIBDIR=\"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}\"\n")
299 set(script "${script}export UNITY_TESTING_LIBDIR=\"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}\"\n")
280 set(script "${script}\n")
300 set(script "${script}\n")
281 foreach(ONE_CMD ${TEST_COMMAND})
301 foreach(ONE_CMD ${TEST_COMMAND})
282− if (NOT ONE_CMD MATCHES "\\$\\(")
283− # skip variables that look like subcommands like $(FUNCTION)
284− set(script "${script}'${ONE_CMD}' ")
302+ set(script "${script}'${ONE_CMD}' ")
286 endforeach()
303 endforeach()
287 set(script "${script}$@")
304 set(script "${script}$@")
@@ -331,6 +348,20 @@ function(add_test_target TARGET_NAME)
332endfunction()
349endfunction()
351+function(add_meta_dependencies UPSTREAM_TARGET)
352+ cmake_parse_arguments(TEST "" "" "DEPENDS" ${ARGN})
354+ foreach(depend ${TEST_DEPENDS})
355+ add_dependencies(${UPSTREAM_TARGET} ${depend})
357+ # add target to the meta test script that we will install on system
358+ set(filename "${CMAKE_BINARY_DIR}/tests/scripts/${UPSTREAM_TARGET}.sh")
359+ if (EXISTS "${filename}")
360+ file(APPEND "${filename}" "${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}/tests/scripts/${depend}.sh\n")
334# add_qmltest_target(target_name target
365# add_qmltest_target(target_name target
335# COMMAND test_exe [arg1 [...]] # execute this test with arguments
366# COMMAND test_exe [arg1 [...]] # execute this test with arguments
336# [...] # see above for available arguments:
367# [...] # see above for available arguments:
@@ -347,12 +378,17 @@ function(add_qmltest_target TARGET_NAME TARGET)
347 set(function "$(FUNCTION)")
378 set(function "$(FUNCTION)")
350− add_test_target(${TARGET_NAME}
381+ add_custom_target(${TARGET_NAME}
351− ENVIRONMENT ${QMLTEST_ENVIRONMENT}
382+ env ${QMLTEST_ENVIRONMENT}
352− COMMAND ${QMLTEST_COMMAND} ${function}
383+ ${QMLTEST_COMMAND} ${function}
353 DEPENDS ${TARGET} ${QMLTEST_DEPENDS}
384 DEPENDS ${TARGET} ${QMLTEST_DEPENDS}
387+ install_test_script(${TARGET_NAME}
388+ ENVIRONMENT ${QMLTEST_ENVIRONMENT}
389+ COMMAND ${QMLTEST_COMMAND}
356 if(QMLTEST_ADD_TEST)
392 if(QMLTEST_ADD_TEST)
357 add_test(
393 add_test(
358 NAME ${TARGET_NAME}
394 NAME ${TARGET_NAME}
@@ -370,7 +406,7 @@ function(add_qmltest_target TARGET_NAME TARGET)
372 foreach(UPSTREAM_TARGET ${QMLTEST_TARGETS})
408 foreach(UPSTREAM_TARGET ${QMLTEST_TARGETS})
373− add_dependencies(${UPSTREAM_TARGET} ${TARGET_NAME})
409+ add_meta_dependencies(${UPSTREAM_TARGET} DEPENDS ${TARGET_NAME})
374 endforeach()
410 endforeach()
375endfunction()
411endfunction()