123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- have_target {
- # qt_build_config.prf disables execptions for all Qt modules which don't
- # explicitly turn it on again, while the qmake default is to build with
- # exceptions. As we want tests to be built like 3rd party applications,
- # qt_build_config tells us to re-enable exceptions here.
- testcase_exceptions: CONFIG += exceptions
- benchmark: type = benchmark
- else: type = check
- $${type}.files =
- $${type}.path = .
- # Add environment for non-installed builds. Do this first, so the
- # 'make' variable expansions don't end up in a batch file/script.
- QT_TOOL_NAME = target
- qtAddTargetEnv($${type}.commands, QT)
- # If the test ends up in a different directory, we should cd to that directory.
- TESTRUN_CWD = $$DESTDIR
- debug_and_release:debug_and_release_target {
- # But in debug-and-release-target mode we don't want to cd into the debug/release
- # directory (e.g. if the test goes to foo/release/tst_thing.exe, we want to do
- # 'cd foo && release/tst_thing.exe', not 'cd foo/release && tst_thing.exe').
- TESTRUN_CWD ~= s/(release|debug)$//
- TEST_TARGET_DIR = $$relative_path($$absolute_path($$DESTDIR, $$OUT_PWD), $$absolute_path($$TESTRUN_CWD, $$OUT_PWD))
- }
- # Allow for a custom test runner script
- $${type}.commands += $(TESTRUNNER)
- unix {
- isEmpty(TEST_TARGET_DIR): TEST_TARGET_DIR = .
- app_bundle: \
- $${type}.commands += $${TEST_TARGET_DIR}/$(QMAKE_TARGET).app/Contents/MacOS/$(QMAKE_TARGET)
- else: \
- $${type}.commands += $${TEST_TARGET_DIR}/$(QMAKE_TARGET)
- } else {
- # Windows
- !isEmpty(TEST_TARGET_DIR): TEST_TARGET_DIR = $${TEST_TARGET_DIR}$${QMAKE_DIR_SEP}
- $${type}.commands += $${TEST_TARGET_DIR}$(TARGET)
- }
- # Allow for custom arguments to tests
- $${type}.commands += $(TESTARGS)
- !isEmpty(TESTRUN_CWD):!contains(TESTRUN_CWD, ^\\./?): \
- $${type}.commands = cd $$shell_path($$TESTRUN_CWD) && $$eval($${type}.commands)
- # If the test is marked as insignificant, discard the exit code
- insignificant_test: $${type}.commands = -$$eval($${type}.commands)
- QMAKE_EXTRA_TARGETS *= $${type}
- isEmpty(BUILDS)|build_pass {
- $${type}.depends = first
- } else {
- # For exclusive builds, only run the test once.
- $${type}.CONFIG = recursive
- $${type}.target = $${type}_all
- $${type}.recurse_target = $${type}
- $${type}.commands =
- $${type}_first.depends = $$eval($$first(BUILDS).target)-$${type}
- $${type}_first.target = $${type}
- QMAKE_EXTRA_TARGETS += $${type}_first
- }
- !no_testcase_installs:!contains(INSTALLS, target) {
- # Install tests unless no_testcase_installs is set, or there is already
- # a `target' in INSTALLS.
- #
- # Tests are installed under a directory named after the target so that each
- # test has its own directory for testdata etc.
- #
- load(resolve_target)
- TARGET_BASENAME = $$basename(QMAKE_RESOLVED_TARGET)
- target.path = $$[QT_INSTALL_TESTS]/$$TARGET_BASENAME
- INSTALLS += target
- }
- !builtin_testdata:contains(INSTALLS, target) {
- # Install testdata and helpers as well, but only if we're actually installing the test.
- #
- # Testdata is installed relative to the directory containing the testcase
- # binary itself, e.g. this:
- #
- # CONFIG += testcase
- # TARGET = tst_qxmlreader
- #
- # TESTDATA += testdata/test1.xml testdata/test2.xml
- #
- # ... will result in:
- #
- # /usr/lib/qt5/tests/tst_qxmlreader/tst_qxmlreader
- # /usr/lib/qt5/tests/tst_qxmlreader/testdata/test1.xml
- # /usr/lib/qt5/tests/tst_qxmlreader/testdata/test2.xml
- # ...
- #
- for(file, TESTDATA) {
- tnam = $$file
- tnam ~= s,\\.\\.,dotdot,
- tnam ~= s,[?*],wildcard,
- tnam ~= s,[^A-Za-z0-9],_,
- tdi = testdata_$$tnam
- # TESTDATA consists of the files to install (source)...
- $${tdi}.files = $$file
- # ... and the destination preserves the relative path.
- # Strip any leading ../ from the testdata, so that installation does not escape
- # the test's directory in the case of e.g.
- #
- # TARGET = ../tst_qprocess
- # TESTDATA = ../thing1 ../thing2
- #
- # The testdata should end up at $$[QT_INSTALL_TESTS]/tst_qprocess/thing1,
- # rather than $$[QT_INSTALL_TESTS]/tst_qprocess/../thing1.
- #
- # Note that this does not guarantee the same relative path between test binary
- # and testdata in the build and install tree, but should cover most cases.
- #
- file = $$replace(file, ^(\\.\\./)+, )
- $${tdi}.path = $${target.path}/$$dirname(file)
- INSTALLS += $$tdi
- }
- # Install GENERATED_TESTDATA.
- # Logic is copied from the TESTDATA installation, only difference being that
- # INSTALL target is added with CONFIG = no_check_exist
- for(file, GENERATED_TESTDATA) {
- tnam = $$file
- tnam ~= s,\\.\\.,dotdot,
- tnam ~= s,[?*],wildcard,
- tnam ~= s,[^A-Za-z0-9],_,
- tdi = testdata_$$tnam
- $${tdi}.files = $$file
- $${tdi}.CONFIG = no_check_exist
- file = $$replace(file, ^(\\.\\./)+, )
- $${tdi}.path = $${target.path}/$$dirname(file)
- INSTALLS += $$tdi
- }
- # TEST_HELPER_INSTALLS specifies additional test helper executables for installation.
- #
- # Typical usage is:
- #
- # TEST_HELPER_INSTALLS += ../some/helper1 ../some/helper2
- #
- # Resulting in the test helpers being installed to:
- #
- # $$[QT_INSTALL_TESTS]/$$TARGET/some/helper1
- # $$[QT_INSTALL_TESTS]/$$TARGET/some/helper2
- #
- win32: extension = .exe
- for(test_helper, TEST_HELPER_INSTALLS) {
- test_helper_dir = $$dirname(test_helper)
- output = $$basename(test_helper_dir)
- target = $$basename(test_helper)
- targetName = $$replace(target, ' ', '_') # handle spaces in name
- subTarget = $${targetName}.target
- subInstall = $${targetName}_install
- subConfig = $${subInstall}.CONFIG
- subFiles = $${subInstall}.files
- subPath = $${subInstall}.path
- $$subTarget = $${output}/$${target}$${extension}
- $$subFiles = $${OUT_PWD}/$${test_helper}$${extension}
- $$subPath = $${target.path}/$${output}
- $$subConfig += no_check_exist executable
- INSTALLS += $${subInstall}
- }
- }
- builtin_testdata {
- ALL_TESTDATA = $$TESTDATA $$GENERATED_TESTDATA
- # RESOURCES does not support wildcards (for good reasons)
- for(td, ALL_TESTDATA): \
- testdata.files += $$files($$absolute_path($$td, $$_PRO_FILE_PWD_))
- !isEmpty(testdata.files) {
- testdata.base = $$_PRO_FILE_PWD_
- RESOURCES += testdata
- }
- !isEmpty(TEST_HELPER_INSTALLS): \
- error("This platform does not support tests which require helpers.")
- }
- macx-xcode:bundle:isEmpty(QMAKE_BUNDLE_EXTENSION) {
- QMAKE_PBX_PRODUCT_TYPE = com.apple.product-type.bundle.unit-test
- QMAKE_PBX_BUNDLE_TYPE = wrapper.cfbundle
- QMAKE_BUNDLE_EXTENSION = .xctest
- }
- } # have_target
|