From 527d5a8ec54e44291d4968754bdf574ebe57822b Mon Sep 17 00:00:00 2001 From: Ivan Komissarov Date: Fri, 14 Aug 2020 21:01:17 +0200 Subject: Fix passing compiler defines to moc This fixes the issue that Qbs doesn't pass the compiler defines to moc when processing header files which resulted to Q_OS_* being not defined. Fixes: QBS-1592 Change-Id: I58a0cc9af5cfa2fb4a370bb0d7204a3b100da437 Reviewed-by: Christian Kandeler --- share/qbs/module-providers/Qt/templates/moc.js | 2 +- .../testdata-qt/moc-compiler-defines/main.cpp | 7 +++ .../moc-compiler-defines/moc-compiler-defines.qbs | 3 ++ .../testdata-qt/moc-compiler-defines/object.cpp | 6 +++ .../testdata-qt/moc-compiler-defines/object.h | 58 ++++++++++++++++++++++ tests/auto/blackbox/tst_blackboxqt.cpp | 6 +++ tests/auto/blackbox/tst_blackboxqt.h | 1 + 7 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 tests/auto/blackbox/testdata-qt/moc-compiler-defines/main.cpp create mode 100644 tests/auto/blackbox/testdata-qt/moc-compiler-defines/moc-compiler-defines.qbs create mode 100644 tests/auto/blackbox/testdata-qt/moc-compiler-defines/object.cpp create mode 100644 tests/auto/blackbox/testdata-qt/moc-compiler-defines/object.h diff --git a/share/qbs/module-providers/Qt/templates/moc.js b/share/qbs/module-providers/Qt/templates/moc.js index dfc72b7c1..92983e4f7 100644 --- a/share/qbs/module-providers/Qt/templates/moc.js +++ b/share/qbs/module-providers/Qt/templates/moc.js @@ -35,7 +35,7 @@ function args(product, input, outputs) var defines = product.cpp.compilerDefinesByLanguage; if (input.fileTags.contains("objcpp")) defines = ModUtils.flattenDictionary(defines["objcpp"]) || []; - else if (input.fileTags.contains("cpp")) + else if (input.fileTags.contains("cpp") || input.fileTags.contains("hpp")) defines = ModUtils.flattenDictionary(defines["cpp"]) || []; else defines = []; diff --git a/tests/auto/blackbox/testdata-qt/moc-compiler-defines/main.cpp b/tests/auto/blackbox/testdata-qt/moc-compiler-defines/main.cpp new file mode 100644 index 000000000..d3b8f310e --- /dev/null +++ b/tests/auto/blackbox/testdata-qt/moc-compiler-defines/main.cpp @@ -0,0 +1,7 @@ +#include "object.h" + +int main() +{ + QObject o; + return 0; +} diff --git a/tests/auto/blackbox/testdata-qt/moc-compiler-defines/moc-compiler-defines.qbs b/tests/auto/blackbox/testdata-qt/moc-compiler-defines/moc-compiler-defines.qbs new file mode 100644 index 000000000..e184f554e --- /dev/null +++ b/tests/auto/blackbox/testdata-qt/moc-compiler-defines/moc-compiler-defines.qbs @@ -0,0 +1,3 @@ +QtApplication { + files: ["main.cpp", "object.h", "object.cpp"] +} diff --git a/tests/auto/blackbox/testdata-qt/moc-compiler-defines/object.cpp b/tests/auto/blackbox/testdata-qt/moc-compiler-defines/object.cpp new file mode 100644 index 000000000..7ffcf419b --- /dev/null +++ b/tests/auto/blackbox/testdata-qt/moc-compiler-defines/object.cpp @@ -0,0 +1,6 @@ +#include "object.h" + +Object::Object(QObject *parent) : QObject(parent) +{ + +} diff --git a/tests/auto/blackbox/testdata-qt/moc-compiler-defines/object.h b/tests/auto/blackbox/testdata-qt/moc-compiler-defines/object.h new file mode 100644 index 000000000..3221d1173 --- /dev/null +++ b/tests/auto/blackbox/testdata-qt/moc-compiler-defines/object.h @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2020 Ivan Komissarov (abbapoh@gmail.com) +** Contact: http://www.qt.io/licensing +** +** This file is part of Qbs. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OBJECT_H +#define OBJECT_H + +#include + +// These were not defined during the moc run (QBS-1592). +// Do not use Q_OS_UNIX here as it is a fallback value which is defined when nothing else is. +#if defined(Q_OS_DARWIN) || defined(Q_OS_LINUX) || defined(Q_OS_WIN) + +class Object : public QObject +{ + Q_OBJECT +public: + explicit Object(QObject *parent = nullptr); +}; + +#endif + +#endif // OBJECT_H diff --git a/tests/auto/blackbox/tst_blackboxqt.cpp b/tests/auto/blackbox/tst_blackboxqt.cpp index f77509b4d..4fc038923 100644 --- a/tests/auto/blackbox/tst_blackboxqt.cpp +++ b/tests/auto/blackbox/tst_blackboxqt.cpp @@ -266,6 +266,12 @@ void TestBlackboxQt::mocFlags() QVERIFY(runQbs(params) != 0); } +void TestBlackboxQt::mocCompilerDefines() +{ + QDir::setCurrent(testDataDir + "/moc-compiler-defines"); + QCOMPARE(runQbs(), 0); +} + void TestBlackboxQt::mocSameFileName() { QDir::setCurrent(testDataDir + "/moc-same-file-name"); diff --git a/tests/auto/blackbox/tst_blackboxqt.h b/tests/auto/blackbox/tst_blackboxqt.h index 18c9d1a58..820df26d9 100644 --- a/tests/auto/blackbox/tst_blackboxqt.h +++ b/tests/auto/blackbox/tst_blackboxqt.h @@ -55,6 +55,7 @@ private slots: void mixedBuildVariants(); void mocAndCppCombining(); void mocFlags(); + void mocCompilerDefines(); void mocSameFileName(); void pkgconfig(); void pluginMetaData(); -- cgit v1.2.1