Refactor headersclean for usage from modules other than qtbase
authorRohan McGovern <rohan.mcgovern@nokia.com>
Thu, 1 Mar 2012 04:37:50 +0000 (14:37 +1000)
committerQt by Nokia <qt-info@nokia.com>
Wed, 7 Mar 2012 02:49:59 +0000 (03:49 +0100)
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>
tests/auto/other/headersclean/headersclean.pri [new file with mode: 0644]
tests/auto/other/headersclean/headersclean.pro
tests/auto/other/headersclean/qt_headersclean_headers.h [new file with mode: 0644]
tests/auto/other/headersclean/tst_headersclean.cpp
tests/auto/other/headersclean/tst_headersclean.h [new file with mode: 0644]
tests/auto/other/other.pro

diff --git a/tests/auto/other/headersclean/headersclean.pri b/tests/auto/other/headersclean/headersclean.pri
new file mode 100644 (file)
index 0000000..163ef6d
--- /dev/null
@@ -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_
index 5444beb..9bfadca 100644 (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)
diff --git a/tests/auto/other/headersclean/qt_headersclean_headers.h b/tests/auto/other/headersclean/qt_headersclean_headers.h
new file mode 100644 (file)
index 0000000..c9b4e3f
--- /dev/null
@@ -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
index 81d0aa3..d442ad3 100644 (file)
 **
 ****************************************************************************/
 
-#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"
diff --git a/tests/auto/other/headersclean/tst_headersclean.h b/tests/auto/other/headersclean/tst_headersclean.h
new file mode 100644 (file)
index 0000000..7479e06
--- /dev/null
@@ -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
index 9ec5ea8..6c708ba 100644 (file)
@@ -30,8 +30,7 @@ testcocoon: SUBDIRS -= headersclean
 
 cross_compile: SUBDIRS -= \
    atwrapper \
-   compiler \
-   headersclean \
+   compiler
 
 wince*|!contains(QT_CONFIG, accessibility):SUBDIRS -= qaccessibility