qt5base-lts/mkspecs/features/testcocoon.prf
Oswald Buddenhagen e07372ff50 fix host vs. makefile directory separator mess
the system path separator and shell are bound to the host system
(system() will use cmd even on mingw with sh.exe in path).
the makefiles otoh may depend on what the qmakespec defines.

consequently, add $$system_path() and $$system_quote() (for use with
system() & $$system()). $$native_path() is renamed to $$shell_path() and
should be used with $$shell_quote() to produce command lines in
makefiles.
$$QMAKE_DIR_SEP needs to be applied to Option::dir_sep right after
parsing the spec, so it is available to $$shell_{path,quote}().

Change-Id: If3db4849e7f96068cf03a32348a24f3a72d6292c
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
2012-07-28 00:09:45 +02:00

58 lines
2.2 KiB
Plaintext

#
# Tested with TestCocoon 1.6.14
#
load(resolve_target)
# Retrieve the target basename
TARGET_BASENAME = $$basename(QMAKE_RESOLVED_TARGET)
# Configure testcocoon for a full instrumentation - excluding the moc, ui and qrc files from the instrumentation
# --cs-output defines the name to give to the execution report (.csexe).
TESTCOCOON_COVERAGE_OPTIONS = \
--cs-qt4 \
--cs-exclude-file-regex=\'(^|[/\\\\])(qrc|moc)_.*\\.cpp\$\$\' \
--cs-exclude-file-regex=\'.*\\.moc\$\$\' \
--cs-exclude-file-regex=\'.*\\.g\$\$\' \
--cs-exclude-file-regex=\'.*\\.h\$\$\' \
--cs-output=\'$$TARGET_BASENAME\' # name of the csexe file (execution report)
# The .csmes file should be placed alongside the .so or binary.
# Unfortunately, testcocoon has no option to specify the output directory,
# so we must move it into place if a custom destdir was used.
# We don't move applications' csmes because some qt applications (tools, examples)
# are using DESTDIR in some cases but always alongside target.path, so the binary
# is built directly in target.path and there is no need to move the csmes.
!isEmpty(DESTDIR):contains(TEMPLATE, lib) {
!isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$escape_expand(\\n\\t)$$QMAKE_POST_LINK
QMAKE_POST_LINK = -$(MOVE) $${TARGET_BASENAME}.csmes $$shell_path($${QMAKE_RESOLVED_TARGET}.csmes)$$QMAKE_POST_LINK
}
QMAKE_CLEAN += *.csexe *.csmes
# The compiler/linker is replaced by the coveragescanner which is named after the name of the
# compiler/linker preceded by cs (ie gcc is replaced by csgcc).
# Testcocoon options defined in TESTCOCOON_COVERAGE_OPTIONS are added as argument to the coveragescanner (ie csgcc).
# In practice they are added as compiler/linker flags.
*-g++* {
QMAKE_CXX ~= s/(\\S*g\\+\\+)/cs\\1/
QMAKE_CC ~= s/(\\S*gcc)/cs\\1/
QMAKE_LINK ~= s/(\\S*g\\+\\+|\\S*gcc)/cs\\1/
QMAKE_AR ~= s/(\\S*ar)/cs\\1/
QMAKE_AR += $$TESTCOCOON_COVERAGE_OPTIONS
} else {
error("Non-gcc qmake specs not supported by TestCocoon integration yet")
}
QMAKE_CFLAGS += $$TESTCOCOON_COVERAGE_OPTIONS
QMAKE_CXXFLAGS += $$TESTCOCOON_COVERAGE_OPTIONS
QMAKE_LFLAGS += $$TESTCOCOON_COVERAGE_OPTIONS
unix {
QMAKE_LFLAGS += --cs-libgen=-fPIC
}
unset(TARGET_BASENAME)
unset(TESTCOCOON_COVERAGE_OPTIONS)