diff options
author | Edward Welbourne <edward.welbourne@theqtcompany.com> | 2015-11-24 14:45:52 +0100 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@theqtcompany.com> | 2015-12-15 09:21:27 +0000 |
commit | 214e271b93b9c9f4f52d2e56956cf5c8da9b4251 (patch) | |
tree | f40d73c9871998b3863e91bddc50b01d62ef1adf /tests/auto/tools/qmake/testdata/findDeps | |
parent | d47baa7236fb0c44e85c1247eedec444aefe428c (diff) | |
download | qtbase-214e271b93b9c9f4f52d2e56956cf5c8da9b4251.tar.gz |
Rewrote qmake's #include-detection to be more faithful to CPP.
The C preprocessor allows backslash-newline anywhere and allows
comments anywhere it allows space. Testing wilfully perverse
applications of that revealed qmake's parsing of #include directives
wasn't very robust. So rework to actually follow the rules and add
those tests.
Change-Id: If5cc7bfb65f9994e9ab9ed216dd1ee7285c63934
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Diffstat (limited to 'tests/auto/tools/qmake/testdata/findDeps')
4 files changed, 124 insertions, 10 deletions
diff --git a/tests/auto/tools/qmake/testdata/findDeps/findDeps.pro b/tests/auto/tools/qmake/testdata/findDeps/findDeps.pro index 2713296f5b..afb3f65297 100644 --- a/tests/auto/tools/qmake/testdata/findDeps/findDeps.pro +++ b/tests/auto/tools/qmake/testdata/findDeps/findDeps.pro @@ -1,4 +1,5 @@ DESTDIR = ./ +gcc: QMAKE_CXXFLAGS += -Wno-comment HEADERS += object1.h \ object2.h \ @@ -8,5 +9,7 @@ HEADERS += object1.h \ object6.h \ object7.h \ object8.h \ - object9.h + object9.h \ + objecta.h \ + objectf.h SOURCES += main.cpp needed.cpp diff --git a/tests/auto/tools/qmake/testdata/findDeps/main.cpp b/tests/auto/tools/qmake/testdata/findDeps/main.cpp index d5dd5b81d3..3f4f5def3c 100644 --- a/tests/auto/tools/qmake/testdata/findDeps/main.cpp +++ b/tests/auto/tools/qmake/testdata/findDeps/main.cpp @@ -39,23 +39,52 @@ static const char text[] = "lorem ""ipsum /*"; #include <moc_object1.cpp> -/**/ #include <moc_object2.cpp> -/**//**/ #include <moc_object3.cpp> -/*'*/ #include <moc_object4.cpp> -/* -*/ #include <moc_object5.cpp> - -// +/**/ #include "\ +moc_object2.cpp\ +" +/**//**/ #include <moc_\ +o\ +b\ +j\ +e\ +c\ +t\ +3\ +.cpp> +/*'"*/ #include <moc_object4.cpp> +/*"' +*/ #include <moc_object5.cpp> /* +#include "missing.cpp" +*/// a backslash newline does make the next line part of this comment \ +/* so this text is in last line's C++-style comment, not a C-comment ! #include <moc_object6.cpp> +#if 0 +#pragma "ignore me" '&' L"me" +#line 4321 "main.cpp" more /* preprocessing */ tokens +#endif static void function1(); -#include <moc_object7.cpp> +#include/* every comment +gets replaced (in phase 3) by a single +space */<moc_object7.cpp> static void function2(); /**/ -#include <moc_object8.cpp> +#include \ +<moc_object8.cpp> static void function3(); // #include <moc_object9.cpp> +/* backslash-newline elimination happens in phase 2 *\ +/ # /* and that's valid here, too. *\ +/ include/* and, of course, here *\ +/<moc_objecta.cpp>// while we're here, ... \ +#include "needed.cpp" int main () { extern int needed(void); return needed(); } + +/* + Deliberately end file in a #include, with nothing after it but the mandatory + (unescaped) newline at the end of every source file. +*/ +#include "moc_objectf.cpp" diff --git a/tests/auto/tools/qmake/testdata/findDeps/objecta.h b/tests/auto/tools/qmake/testdata/findDeps/objecta.h new file mode 100644 index 0000000000..b9813b9e18 --- /dev/null +++ b/tests/auto/tools/qmake/testdata/findDeps/objecta.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QObject> + +class ObjectA : public QObject +{ + Q_OBJECT +}; + diff --git a/tests/auto/tools/qmake/testdata/findDeps/objectf.h b/tests/auto/tools/qmake/testdata/findDeps/objectf.h new file mode 100644 index 0000000000..5dead815a0 --- /dev/null +++ b/tests/auto/tools/qmake/testdata/findDeps/objectf.h @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QObject> + +class ObjectF : public QObject +{ + Q_OBJECT +}; + |