src/coverage.pri
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 23 Jun 2010 18:33:25 +0300
changeset 6 c3690ec91ef8
parent 0 16d8024aca5e
permissions -rw-r--r--
Revision: 201023 Kit: 2010125

#
#############################################################################
##
## Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
## All rights reserved.
## Contact: Nokia Corporation (developer.feedback@nokia.com)
##
## This file is part of the UI Extensions for Mobile.
##
## GNU Lesser General Public License Usage
## This file may be used under the terms of the GNU Lesser General Public
## License version 2.1 as published by the Free Software Foundation and
## appearing in the file LICENSE.LGPL included in the packaging of this file.
## Please review the following information to ensure the GNU Lesser General
## Public License version 2.1 requirements will be met:
## http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
##
## In addition, as a special exception, Nokia gives you certain additional
## rights.  These rights are described in the Nokia Qt LGPL Exception
## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
##
## If you have questions regarding the use of this file, please contact
## Nokia at developer.feedback@nokia.com.
##
#############################################################################
#

coverage:!symbian {

    HB_COVERAGE_DIR = $${HB_BUILD_DIR}/coverage
    unix:HB_COVERAGE_EXCLUDE += \"/usr/*\" \"*/3rdparty/*\" \"*.moc\" \"moc_*.cpp\" \"qrc_*.cpp\"
    win32:HB_COVERAGE_EXCLUDE += "EXCLUDE+*/3rdparty/*,*/moc/*,*/rcc/*,*/unit/*"

    root {

        unix {
            pre_coverage.recurse = src
            measure_coverage.recurse = src
            post_coverage.recurse = src

            post_coverage.commands = @[ ! -e $${HB_COVERAGE_DIR}/*.cov ]
            post_coverage.commands += || ( rm -f $${HB_COVERAGE_DIR}/Hb.cov
            post_coverage.commands += && cat $${HB_COVERAGE_DIR}/*.cov > $${HB_COVERAGE_DIR}/Hb.cov
            post_coverage.commands += && genhtml --output-directory $${HB_COVERAGE_DIR}/html $${HB_COVERAGE_DIR}/Hb.cov
            # would open a browser automatically if wanted
            # post_coverage.commands += && xdg-open $${HB_BUILD_DIR}/coverage/html/index.html
            post_coverage.commands += && echo \"\nTest code coverage results stored to: $${HB_COVERAGE_DIR}\n\" )
        }

        win32 {
            pre_coverage.commands = $(DEL_FILE) $$hbNativePath($${HB_COVERAGE_DIR}/MON.dat) > NUL 2>&1

            measure_coverage.commands = ctcwrap -C $${HB_COVERAGE_EXCLUDE} -n $${HB_COVERAGE_DIR}/MON.sym -i m $(MAKE) test

            post_coverage.commands = post_coverage.commands = ctcpost $${HB_COVERAGE_DIR}/MON.sym $${HB_COVERAGE_DIR}/MON.dat -p $${HB_COVERAGE_DIR}/profile.txt $$escape_expand(\n\t)
            post_coverage.commands += ctc2html -i $${HB_COVERAGE_DIR}/profile.txt -o $${HB_COVERAGE_DIR} $$escape_expand(\n\t)
            post_coverage.commands += @echo "Test code coverage results stored to: $${HB_COVERAGE_DIR}"
        }

        measure_coverage.depends = pre_coverage
        unix:measure_coverage.depends = unittest
        post_coverage.depends = measure_coverage
        coverage.depends = post_coverage
        QMAKE_EXTRA_TARGETS *= coverage pre_coverage measure_coverage post_coverage

    }

    contains(TEMPLATE, .*subdirs$) {

        unix {
            pre_coverage.CONFIG += recursive
            measure_coverage.CONFIG += recursive
            post_coverage.CONFIG += recursive
            QMAKE_EXTRA_TARGETS *= pre_coverage measure_coverage post_coverage
        }

    } else:contains(TEMPLATE, .*lib$)|contains(TEMPLATE, .*app$) {

        unix {
            QMAKE_CXXFLAGS += -fprofile-arcs -ftest-coverage
            QMAKE_LIBS += -lgcov

            pre_coverage.commands = @lcov --directory \$(OBJECTS_DIR) --zerocounters

            measure_coverage.commands = @[ ! -e *.gcda ]
            measure_coverage.commands += || ( mkdir -p $${HB_COVERAGE_DIR}
            measure_coverage.commands += && lcov --directory \$(OBJECTS_DIR) --capture --output-file $${HB_COVERAGE_DIR}/\$(QMAKE_TARGET).cov
            measure_coverage.commands += && lcov --remove $${HB_COVERAGE_DIR}/\$(QMAKE_TARGET).cov $${HB_COVERAGE_EXCLUDE} --output-file $${HB_COVERAGE_DIR}/\$(QMAKE_TARGET).cov )

            QMAKE_EXTRA_TARGETS *= pre_coverage measure_coverage post_coverage
        }
    }
}