Refactor headersclean for usage from modules other than qtbase

headersclean enforces various rules which all Qt headers are supposed to
abide by.  It fails compilation if these rules are broken.

These rules should be followed also by modules hosted outside of
qtbase.  Split the test up so that it can be easily reused by other
modules.

Change-Id: Icf09cbfde411c926ed87914dc821e6dfc569b0de
Reviewed-by: Jason McDonald <jason.mcdonald@nokia.com>
This commit is contained in:
Rohan McGovern 2012-03-01 14:37:50 +10:00 committed by Qt by Nokia
parent 3ae2dce911
commit dd7a06d0c9
6 changed files with 176 additions and 60 deletions

View File

@ -0,0 +1,38 @@
# The headersclean test attempts to ensure all public Qt headers
# abide by various rules.
#
# To reuse this test outside of the qtbase module,
# include this .pri and create a qt_headersclean_headers.h which includes
# the headers you'd like to test.
*-g++*: QMAKE_CXXFLAGS += -W -Wall -Wextra -Werror
# The flags here come from http://wiki.qt-project.org/Coding_Conventions#Conventions_for_public_header_files
# -Wold-style-cast cannot be used, /usr/include/bits/byteswap.h defines the macro bswap_16 using C style casts :(
# -Wfloat-equal cannot be used, qrect.h and qvector2d.h do exact comparisons in isNull and operator==. Would need #pragmas.
*-g++*: QMAKE_CXXFLAGS += -Woverloaded-virtual -Wshadow -Wundef
# Other nice flags
*-g++*: QMAKE_CXXFLAGS += -Wnon-virtual-dtor -ansi -Wcast-align -Wchar-subscripts -Wpointer-arith -Wformat-security
# Enable pedantic mode, but accept variadic macros and 'long long' usage.
*-g++*: QMAKE_CXXFLAGS += -Wno-long-long -Wno-variadic-macros -pedantic-errors
# There are outstanding alignment issues on ARM in some container classes.
contains(QT_ARCH,arm):*-g++*:QMAKE_CXXFLAGS -= -Wcast-align
QMAKE_CXXFLAGS += -DQT_NO_CAST_TO_ASCII \
-DQT_NO_CAST_FROM_ASCII \
-DQT_STRICT_ITERATORS \
-DQT_NO_URL_CAST_FROM_STRING \
-DQT_NO_CAST_FROM_BYTEARRAY \
-DQT_NO_KEYWORDS \
-DQT_USE_FAST_CONCATENATION \
-DQT_USE_FAST_OPERATOR_PLUS
TARGET = tst_headersclean
SOURCES += $$PWD/tst_headersclean.cpp
HEADERS += $$PWD/tst_headersclean.h
# qt_headersclean_headers.h should be alongside the .pro file
INCLUDEPATH += $$_PRO_FILE_PWD_

View File

@ -1,28 +1,2 @@
CONFIG += testcase
TARGET = tst_headersclean
SOURCES += tst_headersclean.cpp
# No need to link to all modules, only those actually used
QT = core testlib gui widgets
*-g++*: QMAKE_CXXFLAGS += -W -Wall -Wextra -Werror
# The flags here come from http://wiki.qt-project.org/Coding_Conventions#Conventions_for_public_header_files
# -Wold-style-cast cannot be used, /usr/include/bits/byteswap.h defines the macro bswap_16 using C style casts :(
# -Wfloat-equal cannot be used, qrect.h and qvector2d.h do exact comparisons in isNull and operator==. Would need #pragmas.
*-g++*: QMAKE_CXXFLAGS += -Woverloaded-virtual -Wshadow -Wundef
# Other nice flags
*-g++*: QMAKE_CXXFLAGS += -Wnon-virtual-dtor -ansi -Wcast-align -Wchar-subscripts -Wpointer-arith -Wformat-security
# Enable pedantic mode, but accept variadic macros and 'long long' usage.
*-g++*: QMAKE_CXXFLAGS += -Wno-long-long -Wno-variadic-macros -pedantic-errors
QMAKE_CXXFLAGS += -DQT_NO_CAST_TO_ASCII \
-DQT_NO_CAST_FROM_ASCII \
-DQT_STRICT_ITERATORS \
-DQT_NO_URL_CAST_FROM_STRING \
-DQT_NO_CAST_FROM_BYTEARRAY \
-DQT_NO_KEYWORDS \
-DQT_USE_FAST_CONCATENATION \
-DQT_USE_FAST_OPERATOR_PLUS
include(headersclean.pri)

View File

@ -0,0 +1,70 @@
/****************************************************************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/
**
** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** 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.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef QT_HEADERSCLEAN_HEADERS
#define QT_HEADERSCLEAN_HEADERS
/*
This file should include all the headers to be tested by the headersclean
test. It may be copied and customized for each module.
*/
#include <QtCore/QtCore>
#include <QtConcurrent/QtConcurrent>
#include <QtTest/QtTest>
#include <QtNetwork/QtNetwork>
#include <QtXml/QtXml>
#include <QtSql/QtSql>
#include <QtGui/QtGui>
#include <QtWidgets/QtWidgets>
#include <QtPrintSupport/QtPrintSupport>
#include <QtPlatformSupport/QtPlatformSupport>
#ifndef QT_NO_OPENGL
#include <QtOpenGL/QtOpenGL>
#endif
#if !defined(QT_NO_DBUS) && defined(Q_OS_UNIX)
#include <QtDBus/QtDBus>
#endif
#endif

View File

@ -39,38 +39,12 @@
**
****************************************************************************/
#define signals int
#define slots int
#define emit public:;
#define foreach public:;
#define forever public:;
#include "tst_headersclean.h"
#include <QTest>
#include <QtCore/QtCore>
#include <QtConcurrent/QtConcurrent>
#include <QtTest/QtTest>
#include <QtNetwork/QtNetwork>
#include <QtXml/QtXml>
#include <QtSql/QtSql>
#include <QtGui/QtGui>
#include <QtWidgets/QtWidgets>
#include <QtPrintSupport/QtPrintSupport>
#include <QtPlatformSupport/QtPlatformSupport>
#ifndef QT_NO_OPENGL
#include <QtOpenGL/QtOpenGL>
#endif
#if !defined(QT_NO_DBUS) && defined(Q_OS_UNIX)
#include <QtDBus/QtDBus>
#endif
class tst_HeadersClean: public QObject
void tst_HeadersClean::initTestCase()
{
Q_OBJECT
public:
tst_HeadersClean() {}
};
QWARN("This is a compile test only");
}
QTEST_MAIN(tst_HeadersClean)
#include "tst_headersclean.moc"

View File

@ -0,0 +1,61 @@
/****************************************************************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/
**
** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** 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.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef TST_HEADERSCLEAN_H
#define TST_HEADERSCLEAN_H
#define signals int
#define slots int
#define emit public:;
#define foreach public:;
#define forever public:;
#include <qt_headersclean_headers.h>
#include <QObject>
class tst_HeadersClean: public QObject
{
Q_OBJECT
private Q_SLOTS:
void initTestCase();
};
#endif

View File

@ -30,8 +30,7 @@ testcocoon: SUBDIRS -= headersclean
cross_compile: SUBDIRS -= \
atwrapper \
compiler \
headersclean \
compiler
wince*|!contains(QT_CONFIG, accessibility):SUBDIRS -= qaccessibility