@@ -258,16 +258,36 @@ function(add_manual_test COMPONENT_NAME TARGET)
258258endfunction()
259259
260260
261−################### INTERNAL ####################
261+# add_meta_test(target)
262+#
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
265+# installed system.
262266
263−function(add_test_target TARGET_NAME)
264− cmake_parse_arguments(TEST "" "" "COMMAND;ENVIRONMENT;DEPENDS" ${ARGN})
267+function(add_meta_test TARGET_NAME)
268+ cmake_parse_arguments(TEST "" "" "DEPENDS" ${ARGN})
265269
266− add_custom_target(${TARGET_NAME}
267− env ${TEST_ENVIRONMENT}
268− ${TEST_COMMAND}
269− DEPENDS ${TEST_DEPENDS}
270+ add_custom_target(${TARGET_NAME})
271+
272+ set(filename "${CMAKE_BINARY_DIR}/tests/scripts/${TARGET_NAME}.sh")
273+ file(WRITE "${filename}" "#!/bin/sh\n\nset -e\n\n")
274+
275+ add_meta_dependencies(${TARGET_NAME} DEPENDS ${TEST_DEPENDS})
276+ # else we will write the rest of the script as we add cmake targets
277+
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"
270283 )
284+endfunction()
285+
286+
287+################### INTERNAL ####################
288+
289+function(install_test_script TARGET_NAME)
290+ cmake_parse_arguments(TEST "" "" "COMMAND;ENVIRONMENT" ${ARGN})
271291
272292 # Now write the above test into a shell script that we can run on an
273293 # installed system.
@@ -279,10 +299,7 @@ function(add_test_target TARGET_NAME)
279299 set(script "${script}export UNITY_TESTING_LIBDIR=\"${CMAKE_INSTALL_PREFIX}/${SHELL_PRIVATE_LIBDIR}\"\n")
280300 set(script "${script}\n")
281301 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}' ")
285− endif()
302+ set(script "${script}'${ONE_CMD}' ")
286303 endforeach()
287304 set(script "${script}$@")
288305
@@ -331,6 +348,20 @@ function(add_test_target TARGET_NAME)
331348 )
332349endfunction()
333350
351+function(add_meta_dependencies UPSTREAM_TARGET)
352+ cmake_parse_arguments(TEST "" "" "DEPENDS" ${ARGN})
353+
354+ foreach(depend ${TEST_DEPENDS})
355+ add_dependencies(${UPSTREAM_TARGET} ${depend})
356+
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")
361+ endif()
362+ endforeach()
363+endfunction()
364+
334365# add_qmltest_target(target_name target
335366# COMMAND test_exe [arg1 [...]] # execute this test with arguments
336367# [...] # see above for available arguments:
@@ -347,12 +378,17 @@ function(add_qmltest_target TARGET_NAME TARGET)
347378 set(function "$(FUNCTION)")
348379 endif()
349380
350− add_test_target(${TARGET_NAME}
351− ENVIRONMENT ${QMLTEST_ENVIRONMENT}
352− COMMAND ${QMLTEST_COMMAND} ${function}
381+ add_custom_target(${TARGET_NAME}
382+ env ${QMLTEST_ENVIRONMENT}
383+ ${QMLTEST_COMMAND} ${function}
353384 DEPENDS ${TARGET} ${QMLTEST_DEPENDS}
354385 )
355386
387+ install_test_script(${TARGET_NAME}
388+ ENVIRONMENT ${QMLTEST_ENVIRONMENT}
389+ COMMAND ${QMLTEST_COMMAND}
390+ )
391+
356392 if(QMLTEST_ADD_TEST)
357393 add_test(
358394 NAME ${TARGET_NAME}
@@ -370,7 +406,7 @@ function(add_qmltest_target TARGET_NAME TARGET)
370406 endif()
371407
372408 foreach(UPSTREAM_TARGET ${QMLTEST_TARGETS})
373− add_dependencies(${UPSTREAM_TARGET} ${TARGET_NAME})
409+ add_meta_dependencies(${UPSTREAM_TARGET} DEPENDS ${TARGET_NAME})
374410 endforeach()
375411endfunction()
376412