aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2019-07-23 15:45:29 +0300
committerDenis Shienkov <denis.shienkov@gmail.com>2019-07-31 13:12:01 +0000
commit86747ff36bb162764fd8c2f741a1674d16b0b3cd (patch)
treeebc9323f57c601ae49af9cff9fe0674fd71bb6ca /src
parent2363f13f8fbd001a3544acb2a600010893e4cf80 (diff)
baremetal: Share common generators code
Common code which are used for the 'iarew' and 'keiluv' generators was moved to the corelib/generators library. Besides, this code also can be used in future for the XML-based generators. Change-Id: I79a21e3e078d563600d7f365785731fe9e847045 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/lib/corelib/corelib.qbs17
-rw-r--r--src/lib/corelib/generators/generators.pri22
-rw-r--r--src/lib/corelib/generators/generatorutils.cpp211
-rw-r--r--src/lib/corelib/generators/generatorutils.h90
-rw-r--r--src/lib/corelib/generators/generatorversioninfo.cpp83
-rw-r--r--src/lib/corelib/generators/generatorversioninfo.h78
-rw-r--r--src/lib/corelib/generators/ixmlnodevisitor.h (renamed from src/plugins/generator/keiluv/ikeiluvnodevisitor.h)42
-rw-r--r--src/lib/corelib/generators/xmlproject.cpp (renamed from src/plugins/generator/keiluv/keiluvproperty.cpp)16
-rw-r--r--src/lib/corelib/generators/xmlproject.h (renamed from src/plugins/generator/iarew/iarewpropertygroup.cpp)37
-rw-r--r--src/lib/corelib/generators/xmlprojectwriter.cpp (renamed from src/plugins/generator/iarew/iarewproperty.h)88
-rw-r--r--src/lib/corelib/generators/xmlprojectwriter.h (renamed from src/plugins/generator/iarew/iarewpropertygroup.h)47
-rw-r--r--src/lib/corelib/generators/xmlproperty.cpp (renamed from src/plugins/generator/iarew/iarewproperty.cpp)12
-rw-r--r--src/lib/corelib/generators/xmlproperty.h (renamed from src/plugins/generator/keiluv/keiluvproperty.h)30
-rw-r--r--src/lib/corelib/generators/xmlpropertygroup.cpp (renamed from src/plugins/generator/keiluv/keiluvpropertygroup.cpp)19
-rw-r--r--src/lib/corelib/generators/xmlpropertygroup.h (renamed from src/plugins/generator/keiluv/keiluvpropertygroup.h)35
-rw-r--r--src/lib/corelib/generators/xmlworkspace.cpp66
-rw-r--r--src/lib/corelib/generators/xmlworkspace.h69
-rw-r--r--src/lib/corelib/generators/xmlworkspacewriter.cpp92
-rw-r--r--src/lib/corelib/generators/xmlworkspacewriter.h (renamed from src/plugins/generator/iarew/iiarewnodevisitor.h)43
-rw-r--r--src/plugins/generator/iarew/archs/arm/armarchiversettingsgroup_v8.cpp7
-rw-r--r--src/plugins/generator/iarew/archs/arm/armassemblersettingsgroup_v8.cpp21
-rw-r--r--src/plugins/generator/iarew/archs/arm/armassemblersettingsgroup_v8.h10
-rw-r--r--src/plugins/generator/iarew/archs/arm/armbuildconfigurationgroup_v8.cpp21
-rw-r--r--src/plugins/generator/iarew/archs/arm/armbuildconfigurationgroup_v8.h23
-rw-r--r--src/plugins/generator/iarew/archs/arm/armcompilersettingsgroup_v8.cpp93
-rw-r--r--src/plugins/generator/iarew/archs/arm/armgeneralsettingsgroup_v8.cpp207
-rw-r--r--src/plugins/generator/iarew/archs/arm/armlinkersettingsgroup_v8.cpp24
-rw-r--r--src/plugins/generator/iarew/archs/avr/avrarchiversettingsgroup_v7.cpp7
-rw-r--r--src/plugins/generator/iarew/archs/avr/avrassemblersettingsgroup_v7.cpp25
-rw-r--r--src/plugins/generator/iarew/archs/avr/avrbuildconfigurationgroup_v7.cpp13
-rw-r--r--src/plugins/generator/iarew/archs/avr/avrbuildconfigurationgroup_v7.h20
-rw-r--r--src/plugins/generator/iarew/archs/avr/avrcompilersettingsgroup_v7.cpp94
-rw-r--r--src/plugins/generator/iarew/archs/avr/avrgeneralsettingsgroup_v7.cpp78
-rw-r--r--src/plugins/generator/iarew/archs/avr/avrlinkersettingsgroup_v7.cpp24
-rw-r--r--src/plugins/generator/iarew/archs/mcs51/mcs51archiversettingsgroup_v10.cpp7
-rw-r--r--src/plugins/generator/iarew/archs/mcs51/mcs51assemblersettingsgroup_v10.cpp26
-rw-r--r--src/plugins/generator/iarew/archs/mcs51/mcs51buildconfigurationgroup_v10.cpp14
-rw-r--r--src/plugins/generator/iarew/archs/mcs51/mcs51buildconfigurationgroup_v10.h12
-rw-r--r--src/plugins/generator/iarew/archs/mcs51/mcs51compilersettingsgroup_v10.cpp100
-rw-r--r--src/plugins/generator/iarew/archs/mcs51/mcs51generalsettingsgroup_v10.cpp136
-rw-r--r--src/plugins/generator/iarew/archs/mcs51/mcs51linkersettingsgroup_v10.cpp20
-rw-r--r--src/plugins/generator/iarew/iarew.pro21
-rw-r--r--src/plugins/generator/iarew/iarew.qbs5
-rw-r--r--src/plugins/generator/iarew/iarewfileversionproperty.h7
-rw-r--r--src/plugins/generator/iarew/iarewgenerator.cpp7
-rw-r--r--src/plugins/generator/iarew/iarewoptionpropertygroup.cpp12
-rw-r--r--src/plugins/generator/iarew/iarewoptionpropertygroup.h12
-rw-r--r--src/plugins/generator/iarew/iarewproject.cpp29
-rw-r--r--src/plugins/generator/iarew/iarewproject.h11
-rw-r--r--src/plugins/generator/iarew/iarewprojectwriter.cpp51
-rw-r--r--src/plugins/generator/iarew/iarewprojectwriter.h21
-rw-r--r--src/plugins/generator/iarew/iarewsettingspropertygroup.cpp27
-rw-r--r--src/plugins/generator/iarew/iarewsettingspropertygroup.h14
-rw-r--r--src/plugins/generator/iarew/iarewsourcefilepropertygroup.cpp10
-rw-r--r--src/plugins/generator/iarew/iarewsourcefilepropertygroup.h10
-rw-r--r--src/plugins/generator/iarew/iarewsourcefilespropertygroup.cpp9
-rw-r--r--src/plugins/generator/iarew/iarewsourcefilespropertygroup.h14
-rw-r--r--src/plugins/generator/iarew/iarewtoolchainpropertygroup.cpp3
-rw-r--r--src/plugins/generator/iarew/iarewtoolchainpropertygroup.h8
-rw-r--r--src/plugins/generator/iarew/iarewutils.cpp174
-rw-r--r--src/plugins/generator/iarew/iarewutils.h58
-rw-r--r--src/plugins/generator/iarew/iarewversioninfo.cpp46
-rw-r--r--src/plugins/generator/iarew/iarewversioninfo.h27
-rw-r--r--src/plugins/generator/iarew/iarewworkspace.cpp25
-rw-r--r--src/plugins/generator/iarew/iarewworkspace.h11
-rw-r--r--src/plugins/generator/iarew/iarewworkspacewriter.cpp51
-rw-r--r--src/plugins/generator/iarew/iarewworkspacewriter.h21
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51buildtargetgroup_v5.cpp33
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51buildtargetgroup_v5.h23
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51commonpropertygroup_v5.cpp8
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51commonpropertygroup_v5.h8
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51debugoptiongroup_v5.cpp8
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51debugoptiongroup_v5.h8
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51dlloptiongroup_v5.cpp8
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51dlloptiongroup_v5.h8
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51targetassemblergroup_v5.cpp8
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51targetassemblergroup_v5.h8
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51targetcommonoptionsgroup_v5.cpp25
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51targetcommonoptionsgroup_v5.h8
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51targetcompilergroup_v5.cpp16
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51targetcompilergroup_v5.h8
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51targetgroup_v5.cpp8
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51targetgroup_v5.h8
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51targetlinkergroup_v5.cpp6
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51targetlinkergroup_v5.h8
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51targetmiscgroup_v5.cpp6
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51targetmiscgroup_v5.h8
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51utilitiesgroup_v5.cpp8
-rw-r--r--src/plugins/generator/keiluv/archs/mcs51/mcs51utilitiesgroup_v5.h8
-rw-r--r--src/plugins/generator/keiluv/keiluv.pro13
-rw-r--r--src/plugins/generator/keiluv/keiluv.qbs5
-rw-r--r--src/plugins/generator/keiluv/keiluvfilesgroupspropertygroup.cpp49
-rw-r--r--src/plugins/generator/keiluv/keiluvfilesgroupspropertygroup.h11
-rw-r--r--src/plugins/generator/keiluv/keiluvgenerator.cpp18
-rw-r--r--src/plugins/generator/keiluv/keiluvproject.cpp40
-rw-r--r--src/plugins/generator/keiluv/keiluvproject.h19
-rw-r--r--src/plugins/generator/keiluv/keiluvprojectwriter.cpp61
-rw-r--r--src/plugins/generator/keiluv/keiluvprojectwriter.h21
-rw-r--r--src/plugins/generator/keiluv/keiluvutils.cpp148
-rw-r--r--src/plugins/generator/keiluv/keiluvutils.h45
-rw-r--r--src/plugins/generator/keiluv/keiluvversioninfo.cpp39
-rw-r--r--src/plugins/generator/keiluv/keiluvversioninfo.h27
-rw-r--r--src/plugins/generator/keiluv/keiluvworkspace.cpp34
-rw-r--r--src/plugins/generator/keiluv/keiluvworkspace.h13
-rw-r--r--src/plugins/generator/keiluv/keiluvworkspacewriter.cpp61
-rw-r--r--src/plugins/generator/keiluv/keiluvworkspacewriter.h21
106 files changed, 1885 insertions, 1740 deletions
diff --git a/src/lib/corelib/corelib.qbs b/src/lib/corelib/corelib.qbs
index a9ca5131a..92d7eb052 100644
--- a/src/lib/corelib/corelib.qbs
+++ b/src/lib/corelib/corelib.qbs
@@ -198,7 +198,24 @@ QbsLibrary {
"generatableprojectiterator.h",
"generator.cpp",
"generatordata.cpp",
+ "generatorutils.cpp",
+ "generatorutils.h",
+ "generatorversioninfo.cpp",
+ "generatorversioninfo.h",
"igeneratableprojectvisitor.h",
+ "ixmlnodevisitor.h",
+ "xmlproject.cpp",
+ "xmlproject.h",
+ "xmlprojectwriter.cpp",
+ "xmlprojectwriter.h",
+ "xmlproperty.cpp",
+ "xmlproperty.h",
+ "xmlpropertygroup.cpp",
+ "xmlpropertygroup.h",
+ "xmlworkspace.cpp",
+ "xmlworkspace.h",
+ "xmlworkspacewriter.cpp",
+ "xmlworkspacewriter.h",
]
}
Group {
diff --git a/src/lib/corelib/generators/generators.pri b/src/lib/corelib/generators/generators.pri
index 093e45f40..e9730d895 100644
--- a/src/lib/corelib/generators/generators.pri
+++ b/src/lib/corelib/generators/generators.pri
@@ -3,13 +3,31 @@ include(../../../install_prefix.pri)
SOURCES += \
$$PWD/generatableprojectiterator.cpp \
$$PWD/generator.cpp \
- $$PWD/generatordata.cpp
+ $$PWD/generatordata.cpp \
+ $$PWD/generatorutils.cpp \
+ $$PWD/generatorversioninfo.cpp \
+ $$PWD/xmlproject.cpp \
+ $$PWD/xmlprojectwriter.cpp\
+ $$PWD/xmlproperty.cpp \
+ $$PWD/xmlpropertygroup.cpp \
+ $$PWD/xmlworkspace.cpp \
+ $$PWD/xmlworkspacewriter.cpp
HEADERS += \
$$PWD/generatableprojectiterator.h \
$$PWD/generator.h \
$$PWD/generatordata.h \
- $$PWD/igeneratableprojectvisitor.h
+ $$PWD/generatorutils.h \
+ $$PWD/generatorversioninfo.h \
+ $$PWD/igeneratableprojectvisitor.h \
+ $$PWD/ixmlnodevisitor.h \
+ $$PWD/ixmlnodevisitor.h \
+ $$PWD/xmlproject.h \
+ $$PWD/xmlprojectwriter.h \
+ $$PWD/xmlproperty.h \
+ $$PWD/xmlpropertygroup.h \
+ $$PWD/xmlworkspace.h \
+ $$PWD/xmlworkspacewriter.h
!qbs_no_dev_install {
generators_headers.files = \
diff --git a/src/lib/corelib/generators/generatorutils.cpp b/src/lib/corelib/generators/generatorutils.cpp
new file mode 100644
index 000000000..4f76eab7f
--- /dev/null
+++ b/src/lib/corelib/generators/generatorutils.cpp
@@ -0,0 +1,211 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Denis Shienkov <denis.shienkov@gmail.com>
+** Contact: http://www.qt.io/licensing
+**
+** This file is part of Qbs.
+**
+** 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.
+**
+** In addition, 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.
+**
+****************************************************************************/
+
+#include "generatorutils.h"
+
+namespace qbs {
+namespace gen {
+namespace utils {
+
+QString architectureName(Architecture arch)
+{
+ switch (arch) {
+ case Architecture::Arm:
+ return QStringLiteral("arm");
+ case Architecture::Avr:
+ return QStringLiteral("avr");
+ case Architecture::Mcs51:
+ return QStringLiteral("mcs51");
+ default:
+ return QStringLiteral("unknown");
+ }
+}
+
+Architecture architecture(const Project &qbsProject)
+{
+ const auto qbsArch = qbsProject.projectConfiguration()
+ .value(Internal::StringConstants::qbsModule()).toMap()
+ .value(QStringLiteral("architecture")).toString();
+
+ if (qbsArch == QLatin1String("arm"))
+ return Architecture::Arm;
+ if (qbsArch == QLatin1String("avr"))
+ return Architecture::Avr;
+ if (qbsArch == QLatin1String("mcs51"))
+ return Architecture::Mcs51;
+ return Architecture::Unknown;
+}
+
+QString buildConfigurationName(const Project &qbsProject)
+{
+ return qbsProject.projectConfiguration()
+ .value(Internal::StringConstants::qbsModule()).toMap()
+ .value(QStringLiteral("configurationName")).toString();
+}
+
+int debugInformation(const ProductData &qbsProduct)
+{
+ return qbsProduct.moduleProperties().getModuleProperty(
+ Internal::StringConstants::qbsModule(),
+ QStringLiteral("debugInformation"))
+ .toInt();
+}
+
+QString buildRootPath(const Project &qbsProject)
+{
+ QDir dir(qbsProject.projectData().buildDirectory());
+ dir.cdUp();
+ return dir.absolutePath();
+}
+
+QString relativeFilePath(const QString &baseDirectory,
+ const QString &fullFilePath)
+{
+ return QDir(baseDirectory).relativeFilePath(fullFilePath);
+}
+
+QString binaryOutputDirectory(const QString &baseDirectory,
+ const ProductData &qbsProduct)
+{
+ return QDir(baseDirectory).relativeFilePath(
+ qbsProduct.buildDirectory())
+ + QLatin1String("/bin");
+}
+
+QString objectsOutputDirectory(const QString &baseDirectory,
+ const ProductData &qbsProduct)
+{
+ return QDir(baseDirectory).relativeFilePath(
+ qbsProduct.buildDirectory())
+ + QLatin1String("/obj");
+}
+
+QString listingOutputDirectory(const QString &baseDirectory,
+ const ProductData &qbsProduct)
+{
+ return QDir(baseDirectory).relativeFilePath(
+ qbsProduct.buildDirectory())
+ + QLatin1String("/lst");
+}
+
+std::vector<ProductData> dependenciesOf(const ProductData &qbsProduct,
+ const GeneratableProject &genProject,
+ const QString &configurationName)
+{
+ std::vector<ProductData> result;
+ const auto depsNames = qbsProduct.dependencies();
+ for (const auto &product : qAsConst(genProject.products)) {
+ const auto pt = product.type();
+ if (!pt.contains(QLatin1String("staticlibrary")))
+ continue;
+ const auto pn = product.name();
+ if (!depsNames.contains(pn))
+ continue;
+ result.push_back(product.data.value(configurationName));
+ }
+ return result;
+}
+
+QString targetBinary(const ProductData &qbsProduct)
+{
+ const auto type = qbsProduct.type();
+ if (type.contains(QLatin1String("application"))) {
+ return QFileInfo(qbsProduct.targetExecutable()).fileName();
+ } else if (type.contains(QLatin1String("staticlibrary"))) {
+ const auto artifacts = qbsProduct.targetArtifacts();
+ for (const auto &artifact : artifacts) {
+ if (artifact.fileTags().contains(QLatin1String("staticlibrary")))
+ return QFileInfo(artifact.filePath()).fileName();
+ }
+ }
+
+ return {};
+}
+
+QString targetBinaryPath(const QString &baseDirectory,
+ const ProductData &qbsProduct)
+{
+ return binaryOutputDirectory(baseDirectory, qbsProduct)
+ + QLatin1Char('/') + targetBinary(qbsProduct);
+}
+
+QString cppStringModuleProperty(const PropertyMap &qbsProps,
+ const QString &propertyName)
+{
+ return qbsProps.getModuleProperty(
+ Internal::StringConstants::cppModule(),
+ propertyName).toString().trimmed();
+}
+
+bool cppBooleanModuleProperty(const PropertyMap &qbsProps,
+ const QString &propertyName)
+{
+ return qbsProps.getModuleProperty(
+ Internal::StringConstants::cppModule(),
+ propertyName).toBool();
+}
+
+int cppIntegerModuleProperty(const PropertyMap &qbsProps,
+ const QString &propertyName)
+{
+ return qbsProps.getModuleProperty(
+ Internal::StringConstants::cppModule(),
+ propertyName).toInt();
+}
+
+QStringList cppStringModuleProperties(const PropertyMap &qbsProps,
+ const QStringList &propertyNames)
+{
+ QStringList properties;
+ for (const auto &propertyName : propertyNames) {
+ const auto entries = qbsProps.getModuleProperty(
+ Internal::StringConstants::cppModule(),
+ propertyName).toStringList();
+ for (const auto &entry : entries)
+ properties.push_back(entry.trimmed());
+ }
+ return properties;
+}
+
+QVariantList cppVariantModuleProperties(const PropertyMap &qbsProps,
+ const QStringList &propertyNames)
+{
+ QVariantList properties;
+ for (const auto &propertyName : propertyNames) {
+ properties << qbsProps.getModuleProperty(
+ Internal::StringConstants::cppModule(),
+ propertyName).toList();
+ }
+ return properties;
+}
+
+} // namespace utils
+} // namespace gen
+} // namespace qbs
diff --git a/src/lib/corelib/generators/generatorutils.h b/src/lib/corelib/generators/generatorutils.h
new file mode 100644
index 000000000..e13740105
--- /dev/null
+++ b/src/lib/corelib/generators/generatorutils.h
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Denis Shienkov <denis.shienkov@gmail.com>
+** Contact: http://www.qt.io/licensing
+**
+** This file is part of Qbs.
+**
+** 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.
+**
+** In addition, 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.
+**
+****************************************************************************/
+
+#ifndef GENERATORS_UTILS_H
+#define GENERATORS_UTILS_H
+
+#include <qbs.h>
+
+#include <tools/qbs_export.h>
+#include <tools/stringconstants.h>
+
+namespace qbs {
+namespace gen {
+namespace utils {
+
+enum class Architecture {
+ Arm,
+ Avr,
+ Mcs51,
+ Unknown
+};
+
+QBS_EXPORT QString architectureName(Architecture arch);
+QBS_EXPORT Architecture architecture(const Project &qbsProject);
+QBS_EXPORT QString buildConfigurationName(const Project &qbsProject);
+QBS_EXPORT int debugInformation(const ProductData &qbsProduct);
+QBS_EXPORT QString buildRootPath(const Project &qbsProject);
+QBS_EXPORT QString relativeFilePath(const QString &baseDirectory,
+ const QString &fullFilePath);
+QBS_EXPORT QString binaryOutputDirectory(const QString &baseDirectory,
+ const ProductData &qbsProduct);
+QBS_EXPORT QString objectsOutputDirectory(const QString &baseDirectory,
+ const ProductData &qbsProduct);
+QBS_EXPORT QString listingOutputDirectory(const QString &baseDirectory,
+ const ProductData &qbsProduct);
+QBS_EXPORT std::vector<ProductData> dependenciesOf(const ProductData &qbsProduct,
+ const GeneratableProject &genProject,
+ const QString &configurationName);
+QBS_EXPORT QString targetBinary(const ProductData &qbsProduct);
+QBS_EXPORT QString targetBinaryPath(const QString &baseDirectory,
+ const ProductData &qbsProduct);
+QBS_EXPORT QString cppStringModuleProperty(const PropertyMap &qbsProps,
+ const QString &propertyName);
+QBS_EXPORT bool cppBooleanModuleProperty(const PropertyMap &qbsProps,
+ const QString &propertyName);
+QBS_EXPORT int cppIntegerModuleProperty(const PropertyMap &qbsProps,
+ const QString &propertyName);
+QBS_EXPORT QStringList cppStringModuleProperties(const PropertyMap &qbsProps,
+ const QStringList &propertyNames);
+QBS_EXPORT QVariantList cppVariantModuleProperties(const PropertyMap &qbsProps,
+ const QStringList &propertyNames);
+
+template <typename T>
+bool inBounds(const T &value, const T &low, const T &high)
+{
+ return !(value < low) && !(high < value);
+}
+
+} // namespace utils
+} // namespace gen
+} // namespace qbs
+
+#endif // GENERATORS_UTILS_H
diff --git a/src/lib/corelib/generators/generatorversioninfo.cpp b/src/lib/corelib/generators/generatorversioninfo.cpp
new file mode 100644
index 000000000..3e2106b57
--- /dev/null
+++ b/src/lib/corelib/generators/generatorversioninfo.cpp
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Denis Shienkov <denis.shienkov@gmail.com>
+** Contact: https://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$
+**
+****************************************************************************/
+
+#include "generatorversioninfo.h"
+
+namespace qbs {
+namespace gen {
+
+VersionInfo::VersionInfo(const Version &version,
+ const std::set<utils::Architecture> &archs)
+ : m_version(version), m_archs(archs)
+{
+}
+
+bool VersionInfo::operator<(const VersionInfo &other) const
+{
+ return m_version < other.m_version;
+}
+
+bool VersionInfo::operator==(const VersionInfo &other) const
+{
+ return m_version == other.m_version
+ && m_archs == other.m_archs;
+}
+
+Version VersionInfo::version() const
+{
+ return m_version;
+}
+
+bool VersionInfo::containsArchitecture(utils::Architecture arch) const
+{
+ return m_archs.find(arch) != m_archs.cend();
+}
+
+int VersionInfo::marketingVersion() const
+{
+ return m_version.majorVersion();
+}
+
+quint32 qHash(const VersionInfo &info)
+{
+ return qHash(info.version().toString());
+}
+
+} // namespace gen
+} // namespace qbs
diff --git a/src/lib/corelib/generators/generatorversioninfo.h b/src/lib/corelib/generators/generatorversioninfo.h
new file mode 100644
index 000000000..65bfcf685
--- /dev/null
+++ b/src/lib/corelib/generators/generatorversioninfo.h
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Denis Shienkov <denis.shienkov@gmail.com>
+** Contact: https://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 GENERATORS_VERSION_INFO_H
+#define GENERATORS_VERSION_INFO_H
+
+#include "generatorutils.h"
+
+#include <tools/qbs_export.h>
+#include <tools/version.h>
+
+#include <set>
+
+namespace qbs {
+namespace gen {
+
+class QBS_EXPORT VersionInfo
+{
+public:
+ VersionInfo(const Version &version,
+ const std::set<utils::Architecture> &archs);
+ virtual ~VersionInfo() = default;
+
+ bool operator<(const VersionInfo &other) const;
+ bool operator==(const VersionInfo &other) const;
+
+ Version version() const;
+ bool containsArchitecture(utils::Architecture arch) const;
+
+ virtual int marketingVersion() const;
+
+private:
+ Version m_version;
+ std::set<utils::Architecture> m_archs;
+};
+
+quint32 qHash(const VersionInfo &info);
+
+} // namespace gen
+} // namespace qbs
+
+#endif // GENERATORS_VERSION_INFO_H
diff --git a/src/plugins/generator/keiluv/ikeiluvnodevisitor.h b/src/lib/corelib/generators/ixmlnodevisitor.h
index 8ba14d11f..6d62c86ed 100644
--- a/src/plugins/generator/keiluv/ikeiluvnodevisitor.h
+++ b/src/lib/corelib/generators/ixmlnodevisitor.h
@@ -28,38 +28,42 @@
**
****************************************************************************/
-#ifndef QBS_IKEILUVNODEVISITOR_H
-#define QBS_IKEILUVNODEVISITOR_H
+#ifndef GENERATORS_XML_INODE_VISITOR_H
+#define GENERATORS_XML_INODE_VISITOR_H
-#include <QtCore/qxmlstream.h>
+#include <tools/qbs_export.h>
-#include <memory>
+#include <QtCore/qxmlstream.h>
namespace qbs {
+namespace gen {
+namespace xml {
-class KeiluvProject;
-class KeiluvProperty;
-class KeiluvPropertyGroup;
-class KeiluvWorkspace;
+class Project;
+class Property;
+class PropertyGroup;
+class Workspace;
-class IKeiluvNodeVisitor
+class QBS_EXPORT INodeVisitor
{
public:
- virtual ~IKeiluvNodeVisitor() {}
+ virtual ~INodeVisitor() {}
- virtual void visitStart(const KeiluvWorkspace *workspace) { Q_UNUSED(workspace) }
- virtual void visitEnd(const KeiluvWorkspace *workspace) { Q_UNUSED(workspace) }
+ virtual void visitStart(const Workspace *workspace) { Q_UNUSED(workspace) }
+ virtual void visitEnd(const Workspace *workspace) { Q_UNUSED(workspace) }
- virtual void visitStart(const KeiluvProject *project) { Q_UNUSED(project) }
- virtual void visitEnd(const KeiluvProject *project) { Q_UNUSED(project) }
+ virtual void visitStart(const Project *project) { Q_UNUSED(project) }
+ virtual void visitEnd(const Project *project) { Q_UNUSED(project) }
- virtual void visitStart(const KeiluvProperty *property) = 0;
- virtual void visitEnd(const KeiluvProperty *property) = 0;
+ virtual void visitStart(const Property *property) = 0;
+ virtual void visitEnd(const Property *property) = 0;
- virtual void visitStart(const KeiluvPropertyGroup *propertyGroup) = 0;
- virtual void visitEnd(const KeiluvPropertyGroup *propertyGroup) = 0;
+ virtual void visitStart(const PropertyGroup *propertyGroup) = 0;
+ virtual void visitEnd(const PropertyGroup *propertyGroup) = 0;
};
+} // namespace xml
+} // namespace gen
} // namespace qbs
-#endif // QBS_IKEILUVNODEVISITOR_H
+#endif // GENERATORS_XML_INODE_VISITOR_H
diff --git a/src/plugins/generator/keiluv/keiluvproperty.cpp b/src/lib/corelib/generators/xmlproject.cpp
index 057ebe1f6..becd31dda 100644
--- a/src/plugins/generator/keiluv/keiluvproperty.cpp
+++ b/src/lib/corelib/generators/xmlproject.cpp
@@ -28,18 +28,14 @@
**
****************************************************************************/
-#include "ikeiluvnodevisitor.h"
-#include "keiluvproperty.h"
+#include "xmlproject.h"
+#include "ixmlnodevisitor.h"
namespace qbs {
+namespace gen {
+namespace xml {
-KeiluvProperty::KeiluvProperty(QByteArray name, QVariant value)
-{
- setName(std::move(name));
- setValue(std::move(value));
-}
-
-void KeiluvProperty::accept(IKeiluvNodeVisitor *visitor) const
+void Project::accept(INodeVisitor *visitor) const
{
visitor->visitStart(this);
@@ -49,4 +45,6 @@ void KeiluvProperty::accept(IKeiluvNodeVisitor *visitor) const
visitor->visitEnd(this);
}
+} // namespace xml
+} // namespace gen
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewpropertygroup.cpp b/src/lib/corelib/generators/xmlproject.h
index 89d0f078c..a7f5b2b65 100644
--- a/src/plugins/generator/iarew/iarewpropertygroup.cpp
+++ b/src/lib/corelib/generators/xmlproject.h
@@ -28,30 +28,27 @@
**
****************************************************************************/
-#include "iarewproperty.h"
-#include "iarewpropertygroup.h"
-#include "iiarewnodevisitor.h"
+#ifndef GENERATORS_XML_PROJECT_H
+#define GENERATORS_XML_PROJECT_H
-namespace qbs {
-
-IarewPropertyGroup::IarewPropertyGroup(QByteArray name)
-{
- setName(std::move(name));
-}
+#include "xmlproperty.h"
-void IarewPropertyGroup::appendProperty(QByteArray name, QVariant value)
-{
- appendChild<IarewProperty>(std::move(name), std::move(value));
-}
+#include <tools/qbs_export.h>
-void IarewPropertyGroup::accept(IIarewNodeVisitor *visitor) const
-{
- visitor->visitStart(this);
+#include <memory>
- for (const auto &child : children())
- child->accept(visitor);
+namespace qbs {
+namespace gen {
+namespace xml {
- visitor->visitEnd(this);
-}
+class QBS_EXPORT Project : public Property
+{
+public:
+ void accept(INodeVisitor *visitor) const final;
+};
+} // namespace xml
+} // namespace gen
} // namespace qbs
+
+#endif // GENERATORS_XML_PROJECT_H
diff --git a/src/plugins/generator/iarew/iarewproperty.h b/src/lib/corelib/generators/xmlprojectwriter.cpp
index d9c30a7f4..5b96564bd 100644
--- a/src/plugins/generator/iarew/iarewproperty.h
+++ b/src/lib/corelib/generators/xmlprojectwriter.cpp
@@ -28,55 +28,65 @@
**
****************************************************************************/
-#ifndef QBS_IAREWPROPERTY_H
-#define QBS_IAREWPROPERTY_H
+#include "xmlproject.h"
+#include "xmlprojectwriter.h"
+#include "xmlproperty.h"
+#include "xmlpropertygroup.h"
-#include <QtCore/qvariant.h>
-
-#include <memory>
+#include <ostream>
namespace qbs {
+namespace gen {
+namespace xml {
-class IIarewNodeVisitor;
-
-class IarewProperty
+ProjectWriter::ProjectWriter(std::ostream *device)
+ : m_device(device)
{
- Q_DISABLE_COPY(IarewProperty)
-public:
- IarewProperty() = default;
- explicit IarewProperty(QByteArray name, QVariant value);
- virtual ~IarewProperty() = default;
-
- QByteArray name() const { return m_name; }
- void setName(QByteArray name) { m_name = std::move(name); }
+ m_writer.reset(new QXmlStreamWriter(&m_buffer));
+ m_writer->setAutoFormatting(true);
+}
- QVariant value() const { return m_value; }
- void setValue(QVariant value) { m_value = std::move(value); }
+bool ProjectWriter::write(const Project *project)
+{
+ m_buffer.clear();
+ m_writer->writeStartDocument();
+ project->accept(this);
+ m_writer->writeEndDocument();
+ if (m_writer->hasError())
+ return false;
+ m_device->write(&*std::begin(m_buffer), m_buffer.size());
+ return m_device->good();
+}
- template<class T>
- T *appendChild(std::unique_ptr<T> child) {
- const auto p = child.get();
- m_children.push_back(std::move(child));
- return p;
- }
+void ProjectWriter::visitStart(const Property *property)
+{
+ const auto value = property->value().toString();
+ const auto name = QString::fromUtf8(property->name());
+ m_writer->writeTextElement(name, value);
+}
- template<class T, class... Args>
- T *appendChild(Args&&... args) {
- return appendChild(std::make_unique<T>(std::forward<Args>(args)...));
- }
+void ProjectWriter::visitEnd(const Property *property)
+{
+ Q_UNUSED(property)
+}
- virtual void accept(IIarewNodeVisitor *visitor) const;
+void ProjectWriter::visitStart(const PropertyGroup *propertyGroup)
+{
+ const auto name = QString::fromUtf8(propertyGroup->name());
+ m_writer->writeStartElement(name);
+}
-protected:
- const std::vector<std::unique_ptr<IarewProperty>> &children() const
- { return m_children; }
+void ProjectWriter::visitEnd(const PropertyGroup *propertyGroup)
+{
+ Q_UNUSED(propertyGroup)
+ m_writer->writeEndElement();
+}
-private:
- QByteArray m_name;
- QVariant m_value;
- std::vector<std::unique_ptr<IarewProperty>> m_children;
-};
+QXmlStreamWriter *ProjectWriter::writer() const
+{
+ return m_writer.get();
+}
+} // namespace xml
+} // namespace gen
} // namespace qbs
-
-#endif // QBS_IAREWPROPERTY_H
diff --git a/src/plugins/generator/iarew/iarewpropertygroup.h b/src/lib/corelib/generators/xmlprojectwriter.h
index 3f2bd2718..da4100a92 100644
--- a/src/plugins/generator/iarew/iarewpropertygroup.h
+++ b/src/lib/corelib/generators/xmlprojectwriter.h
@@ -28,42 +28,43 @@
**
****************************************************************************/
-#ifndef QBS_IAREWPROPERTYGROUP_H
-#define QBS_IAREWPROPERTYGROUP_H
+#ifndef GENERATORS_XML_PROJECT_WRITER_H
+#define GENERATORS_XML_PROJECT_WRITER_H
-#include "iarewproperty.h"
-#include "iarewversioninfo.h"
+#include "ixmlnodevisitor.h"
+
+#include <tools/qbs_export.h>
#include <memory>
namespace qbs {
+namespace gen {
+namespace xml {
-class ProductData;
-class Project;
-
-class IarewPropertyGroup : public IarewProperty
+class QBS_EXPORT ProjectWriter : public INodeVisitor
{
+ Q_DISABLE_COPY(ProjectWriter)
public:
- explicit IarewPropertyGroup(QByteArray name);
+ explicit ProjectWriter(std::ostream *device);
+ bool write(const Project *project);
- void appendProperty(QByteArray name, QVariant value);
+protected:
+ QXmlStreamWriter *writer() const;
- void accept(IIarewNodeVisitor *visitor) const final;
-};
+private:
+ void visitStart(const Property *property) final;
+ void visitEnd(const Property *property) final;
-class IarewPropertyGroupFactory
-{
-public:
- virtual ~IarewPropertyGroupFactory() = default;
- virtual bool canCreate(IarewUtils::Architecture architecture,
- const Version &version) const = 0;
+ void visitStart(const PropertyGroup *propertyGroup) final;
+ void visitEnd(const PropertyGroup *propertyGroup) final;
- virtual std::unique_ptr<IarewPropertyGroup> create(
- const Project &qbsProject,
- const ProductData &qbsProduct,
- const std::vector<ProductData> &qbsProductDeps) const = 0;
+ std::ostream *m_device = nullptr;
+ QByteArray m_buffer;
+ std::unique_ptr<QXmlStreamWriter> m_writer;
};
+} // namespace xml
+} // namespace gen
} // namespace qbs
-#endif // QBS_IAREWPROPERTYGROUP_H
+#endif // GENERATORS_XML_PROJECT_WRITER_H
diff --git a/src/plugins/generator/iarew/iarewproperty.cpp b/src/lib/corelib/generators/xmlproperty.cpp
index 9eb043c88..ae41eab4a 100644
--- a/src/plugins/generator/iarew/iarewproperty.cpp
+++ b/src/lib/corelib/generators/xmlproperty.cpp
@@ -28,18 +28,20 @@
**
****************************************************************************/
-#include "iarewproperty.h"
-#include "iiarewnodevisitor.h"
+#include "ixmlnodevisitor.h"
+#include "xmlproperty.h"
namespace qbs {
+namespace gen {
+namespace xml {
-IarewProperty::IarewProperty(QByteArray name, QVariant value)
+Property::Property(QByteArray name, QVariant value)
{
setName(std::move(name));
setValue(std::move(value));
}
-void IarewProperty::accept(IIarewNodeVisitor *visitor) const
+void Property::accept(INodeVisitor *visitor) const
{
visitor->visitStart(this);
@@ -49,4 +51,6 @@ void IarewProperty::accept(IIarewNodeVisitor *visitor) const
visitor->visitEnd(this);
}
+} // namespace xml
+} // namespace gen
} // namespace qbs
diff --git a/src/plugins/generator/keiluv/keiluvproperty.h b/src/lib/corelib/generators/xmlproperty.h
index a385c1314..795735881 100644
--- a/src/plugins/generator/keiluv/keiluvproperty.h
+++ b/src/lib/corelib/generators/xmlproperty.h
@@ -28,24 +28,28 @@
**
****************************************************************************/
-#ifndef QBS_KEILUVPROPERTY_H
-#define QBS_KEILUVPROPERTY_H
+#ifndef GENERATORS_XML_PROPERTY_H
+#define GENERATORS_XML_PROPERTY_H
+
+#include <tools/qbs_export.h>
#include <QtCore/qvariant.h>
#include <memory>
namespace qbs {
+namespace gen {
+namespace xml {
-class IKeiluvNodeVisitor;
+class INodeVisitor;
-class KeiluvProperty
+class QBS_EXPORT Property
{
- Q_DISABLE_COPY(KeiluvProperty)
+ Q_DISABLE_COPY(Property)
public:
- KeiluvProperty() = default;
- explicit KeiluvProperty(QByteArray name, QVariant value);
- virtual ~KeiluvProperty() = default;
+ Property() = default;
+ explicit Property(QByteArray name, QVariant value);
+ virtual ~Property() = default;
QByteArray name() const { return m_name; }
void setName(QByteArray name) { m_name = std::move(name); }
@@ -65,18 +69,20 @@ public:
return appendChild(std::make_unique<T>(std::forward<Args>(args)...));
}
- virtual void accept(IKeiluvNodeVisitor *visitor) const;
+ virtual void accept(INodeVisitor *visitor) const;
protected:
- const std::vector<std::unique_ptr<KeiluvProperty>> &children() const
+ const std::vector<std::unique_ptr<Property>> &children() const
{ return m_children; }
private:
QByteArray m_name;
QVariant m_value;
- std::vector<std::unique_ptr<KeiluvProperty>> m_children;
+ std::vector<std::unique_ptr<Property>> m_children;
};
+} // namespace xml
+} // namespace gen
} // namespace qbs
-#endif // QBS_KEILUVPROPERTY_H
+#endif // GENERATORS_XML_PROPERTY_H
diff --git a/src/plugins/generator/keiluv/keiluvpropertygroup.cpp b/src/lib/corelib/generators/xmlpropertygroup.cpp
index 9aeaa576d..2111b9b1e 100644
--- a/src/plugins/generator/keiluv/keiluvpropertygroup.cpp
+++ b/src/lib/corelib/generators/xmlpropertygroup.cpp
@@ -28,30 +28,31 @@
**
****************************************************************************/
-#include "ikeiluvnodevisitor.h"
-#include "keiluvproperty.h"
-#include "keiluvpropertygroup.h"
+#include "ixmlnodevisitor.h"
+#include "xmlpropertygroup.h"
namespace qbs {
+namespace gen {
+namespace xml {
-KeiluvPropertyGroup::KeiluvPropertyGroup(QByteArray name)
+PropertyGroup::PropertyGroup(QByteArray name)
{
setName(std::move(name));
}
-void KeiluvPropertyGroup::appendProperty(QByteArray name, QVariant value)
+void PropertyGroup::appendProperty(QByteArray name, QVariant value)
{
- appendChild<KeiluvProperty>(std::move(name), std::move(value));
+ appendChild<Property>(std::move(name), std::move(value));
}
-void KeiluvPropertyGroup::appendMultiLineProperty(
+void PropertyGroup::appendMultiLineProperty(
QByteArray key, QStringList values, QChar sep)
{
const auto line = values.join(std::move(sep));
appendProperty(std::move(key), QVariant::fromValue(line));
}
-void KeiluvPropertyGroup::accept(IKeiluvNodeVisitor *visitor) const
+void PropertyGroup::accept(INodeVisitor *visitor) const
{
visitor->visitStart(this);
@@ -61,4 +62,6 @@ void KeiluvPropertyGroup::accept(IKeiluvNodeVisitor *visitor) const
visitor->visitEnd(this);
}
+} // namespace xml
+} // namespace gen
} // namespace qbs
diff --git a/src/plugins/generator/keiluv/keiluvpropertygroup.h b/src/lib/corelib/generators/xmlpropertygroup.h
index bb5d608c4..e63b515fc 100644
--- a/src/plugins/generator/keiluv/keiluvpropertygroup.h
+++ b/src/lib/corelib/generators/xmlpropertygroup.h
@@ -28,11 +28,13 @@
**
****************************************************************************/
-#ifndef QBS_KEILUVPROPERTYGROUP_H
-#define QBS_KEILUVPROPERTYGROUP_H
+#ifndef GENERATORS_XML_PROPERTY_GROUP_H
+#define GENERATORS_XML_PROPERTY_GROUP_H
-#include "keiluvproperty.h"
-#include "keiluvversioninfo.h"
+#include "generatorversioninfo.h"
+#include "xmlproperty.h"
+
+#include <tools/qbs_export.h>
#include <memory>
@@ -41,31 +43,36 @@ namespace qbs {
class ProductData;
class Project;
-class KeiluvPropertyGroup : public KeiluvProperty
+namespace gen {
+namespace xml {
+
+class QBS_EXPORT PropertyGroup : public Property
{
public:
- explicit KeiluvPropertyGroup(QByteArray name);
+ explicit PropertyGroup(QByteArray name);
void appendProperty(QByteArray name, QVariant value);
void appendMultiLineProperty(QByteArray key, QStringList values,
QChar sep = QLatin1Char(','));
- void accept(IKeiluvNodeVisitor *visitor) const final;
+ void accept(INodeVisitor *visitor) const final;
};
-class KeiluvPropertyGroupFactory
+class PropertyGroupFactory
{
public:
- virtual ~KeiluvPropertyGroupFactory() = default;
- virtual bool canCreate(KeiluvUtils::Architecture architecture,
+ virtual ~PropertyGroupFactory() = default;
+ virtual bool canCreate(utils::Architecture arch,
const Version &version) const = 0;
- virtual std::unique_ptr<KeiluvPropertyGroup> create(
- const Project &qbsProject,
- const ProductData &qbsProduct,
+ virtual std::unique_ptr<PropertyGroup> create(
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct,
const std::vector<ProductData> &qbsProductDeps) const = 0;
};
+} // namespace xml
+} // namespace gen
} // namespace qbs
-#endif // QBS_KEILUVPROPERTYGROUP_H
+#endif // GENERATORS_XML_PROPERTY_GROUP_H
diff --git a/src/lib/corelib/generators/xmlworkspace.cpp b/src/lib/corelib/generators/xmlworkspace.cpp
new file mode 100644
index 000000000..8913ceffd
--- /dev/null
+++ b/src/lib/corelib/generators/xmlworkspace.cpp
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Denis Shienkov <denis.shienkov@gmail.com>
+** Contact: https://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$
+**
+****************************************************************************/
+
+#include "ixmlnodevisitor.h"
+#include "xmlproperty.h"
+#include "xmlpropertygroup.h"
+#include "xmlworkspace.h"
+
+namespace qbs {
+namespace gen {
+namespace xml {
+
+Workspace::Workspace(const QString &workspacePath)
+ : m_baseDirectory(QFileInfo(workspacePath).absoluteDir())
+{
+}
+
+void Workspace::accept(INodeVisitor *visitor) const
+{
+ visitor->visitStart(this);
+
+ for (const auto &child : children())
+ child->accept(visitor);
+
+ visitor->visitEnd(this);
+}
+
+} // namespace xml
+} // namespace gen
+} // namespace qbs
diff --git a/src/lib/corelib/generators/xmlworkspace.h b/src/lib/corelib/generators/xmlworkspace.h
new file mode 100644
index 000000000..beab22c4a
--- /dev/null
+++ b/src/lib/corelib/generators/xmlworkspace.h
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Denis Shienkov <denis.shienkov@gmail.com>
+** Contact: https://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 GENERATORS_XML_WWORKSPACE_H
+#define GENERATORS_XML_WWORKSPACE_H
+
+#include "xmlproperty.h"
+
+#include <tools/qbs_export.h>
+
+#include <QtCore/qdir.h>
+
+namespace qbs {
+namespace gen {
+namespace xml {
+
+class QBS_EXPORT Workspace : public Property
+{
+public:
+ explicit Workspace(const QString &workspacePath);
+ void accept(INodeVisitor *visitor) const final;
+
+ virtual void addProject(const QString &projectPath) = 0;
+
+protected:
+ const QDir m_baseDirectory;
+};
+
+} // namespace xml
+} // namespace gen
+} // namespace qbs
+
+#endif // GENERATORS_XML_WWORKSPACE_H
diff --git a/src/lib/corelib/generators/xmlworkspacewriter.cpp b/src/lib/corelib/generators/xmlworkspacewriter.cpp
new file mode 100644
index 000000000..2358d4047
--- /dev/null
+++ b/src/lib/corelib/generators/xmlworkspacewriter.cpp
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Denis Shienkov <denis.shienkov@gmail.com>
+** Contact: http://www.qt.io/licensing
+**
+** This file is part of Qbs.
+**
+** 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.
+**
+** In addition, 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.
+**
+****************************************************************************/
+
+#include "xmlproperty.h"
+#include "xmlpropertygroup.h"
+#include "xmlworkspace.h"
+#include "xmlworkspacewriter.h"
+
+#include <ostream>
+
+namespace qbs {
+namespace gen {
+namespace xml {
+
+WorkspaceWriter::WorkspaceWriter(std::ostream *device)
+ : m_device(device)
+{
+ m_writer.reset(new QXmlStreamWriter(&m_buffer));
+ m_writer->setAutoFormatting(true);
+}
+
+bool WorkspaceWriter::write(const Workspace *workspace)
+{
+ m_buffer.clear();
+ m_writer->writeStartDocument();
+ workspace->accept(this);
+ m_writer->writeEndDocument();
+ if (m_writer->hasError())
+ return false;
+ m_device->write(&*std::begin(m_buffer), m_buffer.size());
+ return m_device->good();
+}
+
+void WorkspaceWriter::visitStart(const Property *property)
+{
+ const auto value = property->value().toString();
+ const auto name = QString::fromUtf8(property->name());
+ m_writer->writeTextElement(name, value);
+}
+
+void WorkspaceWriter::visitEnd(const Property *property)
+{
+ Q_UNUSED(property)
+}
+
+void WorkspaceWriter::visitStart(const PropertyGroup *propertyGroup)
+{
+ const auto name = QString::fromUtf8(propertyGroup->name());
+ m_writer->writeStartElement(name);
+}
+
+void WorkspaceWriter::visitEnd(const PropertyGroup *propertyGroup)
+{
+ Q_UNUSED(propertyGroup)
+ m_writer->writeEndElement();
+}
+
+QXmlStreamWriter *WorkspaceWriter::writer() const
+{
+ return m_writer.get();
+}
+
+} // namespace xml
+} // namespace gen
+} // namespace qbs
diff --git a/src/plugins/generator/iarew/iiarewnodevisitor.h b/src/lib/corelib/generators/xmlworkspacewriter.h
index c97a8b280..73e7d0686 100644
--- a/src/plugins/generator/iarew/iiarewnodevisitor.h
+++ b/src/lib/corelib/generators/xmlworkspacewriter.h
@@ -28,38 +28,43 @@
**
****************************************************************************/
-#ifndef QBS_IIAREWNODEVISITOR_H
-#define QBS_IIAREWNODEVISITOR_H
+#ifndef GENERATORS_XML_WORKSPACE_WRITER_H
+#define GENERATORS_XML_WORKSPACE_WRITER_H
-#include <QtCore/qxmlstream.h>
+#include "ixmlnodevisitor.h"
+
+#include <tools/qbs_export.h>
#include <memory>
namespace qbs {
+namespace gen {
+namespace xml {
-class IarewProject;
-class IarewProperty;
-class IarewPropertyGroup;
-class IarewWorkspace;
-
-class IIarewNodeVisitor
+class QBS_EXPORT WorkspaceWriter : public INodeVisitor
{
+ Q_DISABLE_COPY(WorkspaceWriter)
public:
- virtual ~IIarewNodeVisitor() {}
+ explicit WorkspaceWriter(std::ostream *device);
+ bool write(const Workspace *workspace);
- virtual void visitStart(const IarewWorkspace *workspace) { Q_UNUSED(workspace) }
- virtual void visitEnd(const IarewWorkspace *workspace) { Q_UNUSED(workspace) }
+protected:
+ QXmlStreamWriter *writer() const;
- virtual void visitStart(const IarewProject *project) { Q_UNUSED(project) }
- virtual void visitEnd(const IarewProject *project) { Q_UNUSED(project) }
+private:
+ void visitStart(const Property *property) final;
+ void visitEnd(const Property *property) final;
- virtual void visitStart(const IarewProperty *property) = 0;
- virtual void visitEnd(const IarewProperty *property) = 0;
+ void visitStart(const PropertyGroup *propertyGroup) final;
+ void visitEnd(const PropertyGroup *propertyGroup) final;
- virtual void visitStart(const IarewPropertyGroup *propertyGroup) = 0;
- virtual void visitEnd(const IarewPropertyGroup *propertyGroup) = 0;
+ std::ostream *m_device = nullptr;
+ QByteArray m_buffer;
+ std::unique_ptr<QXmlStreamWriter> m_writer;
};
+} // namespace xml
+} // namespace gen
} // namespace qbs
-#endif // QBS_IIAREWNODEVISITOR_H
+#endif // GENERATORS_XML_WORKSPACE_WRITER_H
diff --git a/src/plugins/generator/iarew/archs/arm/armarchiversettingsgroup_v8.cpp b/src/plugins/generator/iarew/archs/arm/armarchiversettingsgroup_v8.cpp
index 50fceb40d..210c757da 100644
--- a/src/plugins/generator/iarew/archs/arm/armarchiversettingsgroup_v8.cpp
+++ b/src/plugins/generator/iarew/archs/arm/armarchiversettingsgroup_v8.cpp
@@ -30,7 +30,6 @@
#include "armarchiversettingsgroup_v8.h"
-#include "../../iarewproperty.h"
#include "../../iarewutils.h"
namespace qbs {
@@ -51,7 +50,7 @@ struct OutputPageOptions final
const ProductData &qbsProduct)
{
outputFile = QLatin1String("$PROJ_DIR$/")
- + IarewUtils::targetBinaryPath(baseDirectory, qbsProduct);
+ + gen::utils::targetBinaryPath(baseDirectory, qbsProduct);
}
QString outputFile;
@@ -71,9 +70,9 @@ ArmArchiverSettingsGroup::ArmArchiverSettingsGroup(
setName(QByteArrayLiteral("IARCHIVE"));
setArchiveVersion(kArchiverArchiveVersion);
setDataVersion(kArchiverDataVersion);
- setDataDebugInfo(IarewUtils::debugInformation(qbsProduct));
+ setDataDebugInfo(gen::utils::debugInformation(qbsProduct));
- const QString buildRootDirectory = IarewUtils::buildRootPath(qbsProject);
+ const QString buildRootDirectory = gen::utils::buildRootPath(qbsProject);
buildOutputPage(buildRootDirectory, qbsProduct);
}
diff --git a/src/plugins/generator/iarew/archs/arm/armassemblersettingsgroup_v8.cpp b/src/plugins/generator/iarew/archs/arm/armassemblersettingsgroup_v8.cpp
index f4125b188..b7870d626 100644
--- a/src/plugins/generator/iarew/archs/arm/armassemblersettingsgroup_v8.cpp
+++ b/src/plugins/generator/iarew/archs/arm/armassemblersettingsgroup_v8.cpp
@@ -30,7 +30,6 @@
#include "armassemblersettingsgroup_v8.h"
-#include "../../iarewproperty.h"
#include "../../iarewutils.h"
namespace qbs {
@@ -47,8 +46,12 @@ namespace {
struct LanguagePageOptions final
{
- enum MacroQuoteCharacter { AngleBracketsQuote, RoundBracketsQuote,
- SquareBracketsQuote, FigureBracketsQuote };
+ enum MacroQuoteCharacter {
+ AngleBracketsQuote,
+ RoundBracketsQuote,
+ SquareBracketsQuote,
+ FigureBracketsQuote
+ };
explicit LanguagePageOptions(const ProductData &qbsProduct)
{
@@ -80,7 +83,7 @@ struct OutputPageOptions final
{
explicit OutputPageOptions(const ProductData &qbsProduct)
{
- debugInfo = IarewUtils::debugInformation(qbsProduct);
+ debugInfo = gen::utils::debugInformation(qbsProduct);
}
int debugInfo = 0;
@@ -94,11 +97,11 @@ struct PreprocessorPageOptions final
const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- defineSymbols = IarewUtils::cppVariantModuleProperties(
+ defineSymbols = gen::utils::cppVariantModuleProperties(
qbsProps, {QStringLiteral("defines")});
const QString toolkitPath = IarewUtils::toolkitRootPath(qbsProduct);
- const QStringList fullIncludePaths = IarewUtils::cppStringModuleProperties(
+ const QStringList fullIncludePaths = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("includePaths"),
QStringLiteral("systemIncludePaths")});
for (const QString &fullIncludePath : fullIncludePaths) {
@@ -127,7 +130,7 @@ struct DiagnosticsPageOptions final
explicit DiagnosticsPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- const QString warningLevel = IarewUtils::cppStringModuleProperty(
+ const QString warningLevel = gen::utils::cppStringModuleProperty(
qbsProps, QStringLiteral("warningLevel"));
if (warningLevel == QLatin1String("all")) {
enableWarnings = 0;
@@ -159,9 +162,9 @@ ArmAssemblerSettingsGroup::ArmAssemblerSettingsGroup(
setName(QByteArrayLiteral("AARM"));
setArchiveVersion(kAssemblerArchiveVersion);
setDataVersion(kAssemblerDataVersion);
- setDataDebugInfo(IarewUtils::debugInformation(qbsProduct));
+ setDataDebugInfo(gen::utils::debugInformation(qbsProduct));
- const QString buildRootDirectory = IarewUtils::buildRootPath(qbsProject);
+ const QString buildRootDirectory = gen::utils::buildRootPath(qbsProject);
buildLanguagePage(qbsProduct);
buildOutputPage(qbsProduct);
diff --git a/src/plugins/generator/iarew/archs/arm/armassemblersettingsgroup_v8.h b/src/plugins/generator/iarew/archs/arm/armassemblersettingsgroup_v8.h
index b37f06eb1..620dcf1f5 100644
--- a/src/plugins/generator/iarew/archs/arm/armassemblersettingsgroup_v8.h
+++ b/src/plugins/generator/iarew/archs/arm/armassemblersettingsgroup_v8.h
@@ -38,12 +38,14 @@ namespace iarew {
namespace arm {
namespace v8 {
-class ArmAssemblerSettingsGroup final : public IarewSettingsPropertyGroup
+class ArmAssemblerSettingsGroup final
+ : public IarewSettingsPropertyGroup
{
public:
- explicit ArmAssemblerSettingsGroup(const Project &qbsProject,
- const ProductData &qbsProduct,
- const std::vector<ProductData> &qbsProductDeps);
+ explicit ArmAssemblerSettingsGroup(
+ const Project &qbsProject,
+ const ProductData &qbsProduct,
+ const std::vector<ProductData> &qbsProductDeps);
private:
void buildLanguagePage(const ProductData &qbsProduct);
diff --git a/src/plugins/generator/iarew/archs/arm/armbuildconfigurationgroup_v8.cpp b/src/plugins/generator/iarew/archs/arm/armbuildconfigurationgroup_v8.cpp
index 306b415de..a16e57a42 100644
--- a/src/plugins/generator/iarew/archs/arm/armbuildconfigurationgroup_v8.cpp
+++ b/src/plugins/generator/iarew/archs/arm/armbuildconfigurationgroup_v8.cpp
@@ -44,20 +44,20 @@ namespace arm {
namespace v8 {
ArmBuildConfigurationGroup::ArmBuildConfigurationGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct,
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct,
const std::vector<ProductData> &qbsProductDeps)
- : IarewPropertyGroup("configuration")
+ : gen::xml::PropertyGroup("configuration")
{
// Append configuration name item.
- const QString cfgName = IarewUtils::buildConfigurationName(qbsProject);
+ const QString cfgName = gen::utils::buildConfigurationName(qbsProject);
appendProperty("name", cfgName);
// Apend toolchain name group item.
appendChild<IarewToolchainPropertyGroup>("ARM");
// Append debug info item.
- const int debugBuild = IarewUtils::debugInformation(qbsProduct);
+ const int debugBuild = gen::utils::debugInformation(qbsProduct);
appendProperty("debug", debugBuild);
// Append settings group items.
@@ -74,16 +74,17 @@ ArmBuildConfigurationGroup::ArmBuildConfigurationGroup(
}
bool ArmBuildConfigurationGroupFactory::canCreate(
- IarewUtils::Architecture architecture,
+ gen::utils::Architecture arch,
const Version &version) const
{
- return architecture == IarewUtils::Architecture::ArmArchitecture
+ return arch == gen::utils::Architecture::Arm
&& version.majorVersion() == 8;
}
-std::unique_ptr<IarewPropertyGroup> ArmBuildConfigurationGroupFactory::create(
- const Project &qbsProject,
- const ProductData &qbsProduct,
+std::unique_ptr<gen::xml::PropertyGroup>
+ArmBuildConfigurationGroupFactory::create(
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct,
const std::vector<ProductData> &qbsProductDeps) const
{
const auto group = new ArmBuildConfigurationGroup(
diff --git a/src/plugins/generator/iarew/archs/arm/armbuildconfigurationgroup_v8.h b/src/plugins/generator/iarew/archs/arm/armbuildconfigurationgroup_v8.h
index 1bc3ab549..26370c9b8 100644
--- a/src/plugins/generator/iarew/archs/arm/armbuildconfigurationgroup_v8.h
+++ b/src/plugins/generator/iarew/archs/arm/armbuildconfigurationgroup_v8.h
@@ -31,32 +31,35 @@
#ifndef QBS_IAREWARMBUILDCONFIGURATIONGROUP_V8_H
#define QBS_IAREWARMBUILDCONFIGURATIONGROUP_V8_H
-#include "../../iarewpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
namespace qbs {
namespace iarew {
namespace arm {
namespace v8 {
-class ArmBuildConfigurationGroup final : public IarewPropertyGroup
+class ArmBuildConfigurationGroup final
+ : public gen::xml::PropertyGroup
{
private:
- explicit ArmBuildConfigurationGroup(const Project &qbsProject,
- const ProductData &qbsProduct,
- const std::vector<ProductData> &qbsProductDeps);
+ explicit ArmBuildConfigurationGroup(
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct,
+ const std::vector<ProductData> &qbsProductDeps);
friend class ArmBuildConfigurationGroupFactory;
};
-class ArmBuildConfigurationGroupFactory final : public IarewPropertyGroupFactory
+class ArmBuildConfigurationGroupFactory final
+ : public gen::xml::PropertyGroupFactory
{
public:
- bool canCreate(IarewUtils::Architecture architecture,
+ bool canCreate(gen::utils::Architecture arch,
const Version &version) const final;
- std::unique_ptr<IarewPropertyGroup> create(
- const Project &qbsProject,
- const ProductData &qbsProduct,
+ std::unique_ptr<gen::xml::PropertyGroup> create(
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct,
const std::vector<ProductData> &qbsProductDeps) const final;
};
diff --git a/src/plugins/generator/iarew/archs/arm/armcompilersettingsgroup_v8.cpp b/src/plugins/generator/iarew/archs/arm/armcompilersettingsgroup_v8.cpp
index 9d15db75e..bbe5b1758 100644
--- a/src/plugins/generator/iarew/archs/arm/armcompilersettingsgroup_v8.cpp
+++ b/src/plugins/generator/iarew/archs/arm/armcompilersettingsgroup_v8.cpp
@@ -48,7 +48,7 @@ struct OutputPageOptions final
{
explicit OutputPageOptions(const ProductData &qbsProduct)
{
- debugInfo = IarewUtils::debugInformation(qbsProduct);
+ debugInfo = gen::utils::debugInformation(qbsProduct);
}
int debugInfo = 0;
@@ -58,16 +58,22 @@ struct OutputPageOptions final
struct LanguageOnePageOptions final
{
- enum LanguageExtension { CLanguageExtension,
- CxxLanguageExtension,
- AutoLanguageExtension };
-
- enum CLanguageDialect { C89LanguageDialect,
- C11LanguageDialect };
-
- enum LanguageConformance { AllowIarExtension,
- RelaxedStandard,
- StrictStandard };
+ enum LanguageExtension {
+ CLanguageExtension,
+ CxxLanguageExtension,
+ AutoLanguageExtension
+ };
+
+ enum CLanguageDialect {
+ C89LanguageDialect,
+ C11LanguageDialect
+ };
+
+ enum LanguageConformance {
+ AllowIarExtension,
+ RelaxedStandard,
+ StrictStandard
+ };
explicit LanguageOnePageOptions(const ProductData &qbsProduct)
{
@@ -75,7 +81,7 @@ struct LanguageOnePageOptions final
// File extension based by default.
languageExtension = LanguageOnePageOptions::AutoLanguageExtension;
// Language dialect.
- const QStringList cLanguageVersion = IarewUtils::cppStringModuleProperties(
+ const QStringList cLanguageVersion = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("cLanguageVersion")});
cLanguageDialect = cLanguageVersion.contains(QLatin1String("c89"))
? LanguageOnePageOptions::C89LanguageDialect
@@ -115,10 +121,15 @@ struct LanguageOnePageOptions final
struct LanguageTwoPageOptions final
{
- enum PlainCharacter { SignedCharacter,
- UnsignedCharacter };
- enum FloatingPointSemantic { StrictSemantic,
- RelaxedSemantic };
+ enum PlainCharacter {
+ SignedCharacter,
+ UnsignedCharacter
+ };
+
+ enum FloatingPointSemantic {
+ StrictSemantic,
+ RelaxedSemantic
+ };
explicit LanguageTwoPageOptions(const ProductData &qbsProduct)
{
@@ -143,24 +154,30 @@ struct OptimizationsPageOptions final
// Optimizations level radio-buttons with
// combo-box on "level" widget.
- enum Strategy { StrategyBalanced,
- StrategySize,
- StrategySpeed };
-
- enum Level { LevelNone,
- LevelLow,
- LevelMedium,
- LevelHigh };
-
- enum LevelSlave { LevelSlave0,
- LevelSlave1,
- LevelSlave2,
- LevelSlave3 };
+ enum Strategy {
+ StrategyBalanced,
+ StrategySize,
+ StrategySpeed
+ };
+
+ enum Level {
+ LevelNone,
+ LevelLow,
+ LevelMedium,
+ LevelHigh
+ };
+
+ enum LevelSlave {
+ LevelSlave0,
+ LevelSlave1,
+ LevelSlave2,
+ LevelSlave3
+ };
explicit OptimizationsPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- const QString optimization = IarewUtils::cppStringModuleProperty(
+ const QString optimization = gen::utils::cppStringModuleProperty(
qbsProps, QStringLiteral("optimization"));
if (optimization == QLatin1String("none")) {
optimizationStrategy = OptimizationsPageOptions::StrategyBalanced;
@@ -222,11 +239,11 @@ struct PreprocessorPageOptions final
const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- defineSymbols = IarewUtils::cppVariantModuleProperties(
+ defineSymbols = gen::utils::cppVariantModuleProperties(
qbsProps, {QStringLiteral("defines")});
const QString toolkitPath = IarewUtils::toolkitRootPath(qbsProduct);
- const QStringList fullIncludePaths = IarewUtils::cppStringModuleProperties(
+ const QStringList fullIncludePaths = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("includePaths"),
QStringLiteral("systemIncludePaths")});
for (const QString &fullIncludePath : fullIncludePaths) {
@@ -255,7 +272,7 @@ struct DiagnosticsPageOptions final
explicit DiagnosticsPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- treatWarningsAsErrors = IarewUtils::cppIntegerModuleProperty(
+ treatWarningsAsErrors = gen::utils::cppIntegerModuleProperty(
qbsProps, QStringLiteral("treatWarningsAsErrors"));
}
@@ -266,8 +283,10 @@ struct DiagnosticsPageOptions final
struct CodePageOptions final
{
- enum ProcessorMode { CpuArmMode,
- CpuThumbMode };
+ enum ProcessorMode {
+ CpuArmMode,
+ CpuThumbMode
+ };
explicit CodePageOptions(const ProductData &qbsProduct)
{
@@ -312,9 +331,9 @@ ArmCompilerSettingsGroup::ArmCompilerSettingsGroup(
setName(QByteArrayLiteral("ICCARM"));
setArchiveVersion(kCompilerArchiveVersion);
setDataVersion(kCompilerDataVersion);
- setDataDebugInfo(IarewUtils::debugInformation(qbsProduct));
+ setDataDebugInfo(gen::utils::debugInformation(qbsProduct));
- const QString buildRootDirectory = IarewUtils::buildRootPath(qbsProject);
+ const QString buildRootDirectory = gen::utils::buildRootPath(qbsProject);
buildOutputPage(qbsProduct);
buildLanguageOnePage(qbsProduct);
diff --git a/src/plugins/generator/iarew/archs/arm/armgeneralsettingsgroup_v8.cpp b/src/plugins/generator/iarew/archs/arm/armgeneralsettingsgroup_v8.cpp
index 61525addd..d98dd0ebf 100644
--- a/src/plugins/generator/iarew/archs/arm/armgeneralsettingsgroup_v8.cpp
+++ b/src/plugins/generator/iarew/archs/arm/armgeneralsettingsgroup_v8.cpp
@@ -46,52 +46,54 @@ namespace {
struct CpuCoreEntry final
{
- enum CpuCoreCode { Arm7tdmi = 0,
- Arm7tdmis = 1,
- Arm710t = 2,
- Arm720t = 3,
- Arm740t = 4,
- Arm7ejs = 5,
- Arm9tdmi = 6,
- Arm920t = 7,
- Arm922t = 8,
- Arm940t = 9,
- Arm9e = 10,
- Arm9es = 11,
- Arm926ejs = 12,
- Arm946es = 13,
- Arm966es = 14,
- Arm968es = 15,
- Arm10e = 16,
- Arm1020e = 17,
- Arm1022e = 18,
- Arm1026ejs = 19,
- Arm1136j = 20,
- Arm1136js = 21,
- Arm1176j = 24,
- Arm1176js = 25,
- Xscale = 32,
- XscaleIr7 = 33,
- CortexM0 = 34,
- CortexM0Plus = 35,
- CortexM1 = 36,
- CortexMs1 = 37,
- CortexM3 = 38,
- CortexM4 = 39,
- CortexM7 = 41,
- CortexR4 = 42,
- CortexR5 = 44,
- CortexR7 = 46,
- CortexR8 = 48,
- CortexR52 = 49,
- CortexA5 = 50,
- CortexA7 = 52,
- CortexA8 = 53,
- CortexA9 = 54,
- CortexA15 = 55,
- CortexA17 = 56,
- CortexM23 = 58,
- CortexM33 = 59 };
+ enum CpuCoreCode {
+ Arm7tdmi = 0,
+ Arm7tdmis = 1,
+ Arm710t = 2,
+ Arm720t = 3,
+ Arm740t = 4,
+ Arm7ejs = 5,
+ Arm9tdmi = 6,
+ Arm920t = 7,
+ Arm922t = 8,
+ Arm940t = 9,
+ Arm9e = 10,
+ Arm9es = 11,
+ Arm926ejs = 12,
+ Arm946es = 13,
+ Arm966es = 14,
+ Arm968es = 15,
+ Arm10e = 16,
+ Arm1020e = 17,
+ Arm1022e = 18,
+ Arm1026ejs = 19,
+ Arm1136j = 20,
+ Arm1136js = 21,
+ Arm1176j = 24,
+ Arm1176js = 25,
+ Xscale = 32,
+ XscaleIr7 = 33,
+ CortexM0 = 34,
+ CortexM0Plus = 35,
+ CortexM1 = 36,
+ CortexMs1 = 37,
+ CortexM3 = 38,
+ CortexM4 = 39,
+ CortexM7 = 41,
+ CortexR4 = 42,
+ CortexR5 = 44,
+ CortexR7 = 46,
+ CortexR8 = 48,
+ CortexR52 = 49,
+ CortexA5 = 50,
+ CortexA7 = 52,
+ CortexA8 = 53,
+ CortexA9 = 54,
+ CortexA15 = 55,
+ CortexA17 = 56,
+ CortexM23 = 58,
+ CortexM33 = 59
+ };
// Required to compile in MSVC2015.
CpuCoreEntry(CpuCoreCode cc, QByteArray tf)
@@ -154,21 +156,24 @@ static const CpuCoreEntry cpusDict[] = {
struct FpuCoreEntry final
{
- enum FpuRegistersCount { NoFpuRegisters,
- Fpu16Registers,
- Fpu32Registers };
-
- enum FpuCoreCode { NoVfp = 0,
- Vfp2 = 2,
- Vfp3d16 = 3,
- Vfp3 = 3,
- Vfp4sp = 4,
- Vfp4d16 = 5,
- Vfp4 = 5,
- Vfp5sp = 6,
- Vfp5d16 = 7,
- Vfp9s = 8 };
-
+ enum FpuRegistersCount {
+ NoFpuRegisters,
+ Fpu16Registers,
+ Fpu32Registers
+ };
+
+ enum FpuCoreCode {
+ NoVfp = 0,
+ Vfp2 = 2,
+ Vfp3d16 = 3,
+ Vfp3 = 3,
+ Vfp4sp = 4,
+ Vfp4d16 = 5,
+ Vfp4 = 5,
+ Vfp5sp = 6,
+ Vfp5d16 = 7,
+ Vfp9s = 8
+ };
// Required to compile in MSVC2015.
FpuCoreEntry(FpuCoreCode cc, FpuRegistersCount rc,
@@ -198,13 +203,15 @@ static const FpuCoreEntry fpusDict[] = {
struct TargetPageOptions final
{
- enum Endianness { LittleEndian,
- BigEndian };
+ enum Endianness {
+ LittleEndian,
+ BigEndian
+ };
explicit TargetPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- const QStringList flags = IarewUtils::cppStringModuleProperties(
+ const QStringList flags = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("driverFlags")});
// Detect target CPU code.
const QString cpuValue = IarewUtils::flagValue(
@@ -233,7 +240,7 @@ struct TargetPageOptions final
targetFpuRegs = fpuIt->regsCount;
}
// Detect endian.
- const QString prop = IarewUtils::cppStringModuleProperty(
+ const QString prop = gen::utils::cppStringModuleProperty(
qbsProps, QStringLiteral("endianness"));
if (prop == QLatin1String("big"))
endianness = TargetPageOptions::BigEndian;
@@ -251,16 +258,20 @@ struct TargetPageOptions final
struct LibraryOnePageOptions final
{
- enum PrintfFormatter { PrintfAutoFormatter,
- PrintfFullFormatter,
- PrintfLargeFormatter,
- PrintfSmallFormatter,
- PrintfTinyFormatter };
-
- enum ScanfFormatter { ScanfAutoFormatter,
- ScanfFullFormatter,
- ScanfLargeFormatter,
- ScanfSmallFormatter };
+ enum PrintfFormatter {
+ PrintfAutoFormatter,
+ PrintfFullFormatter,
+ PrintfLargeFormatter,
+ PrintfSmallFormatter,
+ PrintfTinyFormatter
+ };
+
+ enum ScanfFormatter {
+ ScanfAutoFormatter,
+ ScanfFullFormatter,
+ ScanfLargeFormatter,
+ ScanfSmallFormatter
+ };
explicit LibraryOnePageOptions(const ProductData &qbsProduct)
{
@@ -304,10 +315,12 @@ struct LibraryOnePageOptions final
struct LibraryTwoPageOptions final
{
- enum HeapType { AutomaticHeap,
- AdvancedHeap,
- BasicHeap,
- NoFreeHeap };
+ enum HeapType {
+ AutomaticHeap,
+ AdvancedHeap,
+ BasicHeap,
+ NoFreeHeap
+ };
explicit LibraryTwoPageOptions(const ProductData &qbsProduct)
{
@@ -330,16 +343,22 @@ struct LibraryTwoPageOptions final
struct LibraryConfigPageOptions final
{
- enum RuntimeLibrary { NoLibrary,
- NormalLibrary,
- FullLibrary,
- CustomLibrary };
-
- enum ThreadSupport { NoThread,
- EnableThread };
-
- enum LowLevelInterface { NoInterface,
- SemihostedInterface };
+ enum RuntimeLibrary {
+ NoLibrary,
+ NormalLibrary,
+ FullLibrary,
+ CustomLibrary
+ };
+
+ enum ThreadSupport {
+ NoThread,
+ EnableThread
+ };
+
+ enum LowLevelInterface {
+ NoInterface,
+ SemihostedInterface
+ };
explicit LibraryConfigPageOptions(const QString &baseDirectory,
const ProductData &qbsProduct)
@@ -396,11 +415,11 @@ struct OutputPageOptions final
const ProductData &qbsProduct)
{
binaryType = IarewUtils::outputBinaryType(qbsProduct);
- binaryDirectory = IarewUtils::binaryOutputDirectory(
+ binaryDirectory = gen::utils::binaryOutputDirectory(
baseDirectory, qbsProduct);
- objectDirectory = IarewUtils::objectsOutputDirectory(
+ objectDirectory = gen::utils::objectsOutputDirectory(
baseDirectory, qbsProduct);
- listingDirectory = IarewUtils::listingOutputDirectory(
+ listingDirectory = gen::utils::listingOutputDirectory(
baseDirectory, qbsProduct);
}
@@ -424,9 +443,9 @@ ArmGeneralSettingsGroup::ArmGeneralSettingsGroup(
setName(QByteArrayLiteral("General"));
setArchiveVersion(kGeneralArchiveVersion);
setDataVersion(kGeneralDataVersion);
- setDataDebugInfo(IarewUtils::debugInformation(qbsProduct));
+ setDataDebugInfo(gen::utils::debugInformation(qbsProduct));
- const QString buildRootDirectory = IarewUtils::buildRootPath(qbsProject);
+ const QString buildRootDirectory = gen::utils::buildRootPath(qbsProject);
buildTargetPage(qbsProduct);
buildLibraryOptionsOnePage(qbsProduct);
diff --git a/src/plugins/generator/iarew/archs/arm/armlinkersettingsgroup_v8.cpp b/src/plugins/generator/iarew/archs/arm/armlinkersettingsgroup_v8.cpp
index d09a456ca..1fdbce5ce 100644
--- a/src/plugins/generator/iarew/archs/arm/armlinkersettingsgroup_v8.cpp
+++ b/src/plugins/generator/iarew/archs/arm/armlinkersettingsgroup_v8.cpp
@@ -116,12 +116,12 @@ struct LibraryPageOptions final
{
const auto &qbsProps = qbsProduct.moduleProperties();
- entryPoint = IarewUtils::cppStringModuleProperty(
+ entryPoint = gen::utils::cppStringModuleProperty(
qbsProps, QStringLiteral("entryPoint"));
// Add libraries search paths.
const QString toolkitPath = IarewUtils::toolkitRootPath(qbsProduct);
- const QStringList libraryPaths = IarewUtils::cppStringModuleProperties(
+ const QStringList libraryPaths = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("libraryPaths")});
for (const QString &libraryPath : libraryPaths) {
const QFileInfo libraryPathInfo(libraryPath);
@@ -141,7 +141,7 @@ struct LibraryPageOptions final
// Add static libraries paths.
const QStringList staticLibrariesProps =
- IarewUtils::cppStringModuleProperties(
+ gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("staticLibraries")});
for (const QString &staticLibrary : staticLibrariesProps) {
const QFileInfo staticLibraryInfo(staticLibrary);
@@ -166,7 +166,7 @@ struct LibraryPageOptions final
// Add static libraries from product dependencies.
for (const ProductData &qbsProductDep : qbsProductDeps) {
const QString depBinaryPath = QLatin1String("$PROJ_DIR$/")
- + IarewUtils::targetBinaryPath(baseDirectory,
+ + gen::utils::targetBinaryPath(baseDirectory,
qbsProductDep);
staticLibraries.push_back(depBinaryPath);
}
@@ -191,7 +191,7 @@ struct OutputPageOptions final
const auto &qbsProps = qbsProduct.moduleProperties();
const QStringList flags = IarewUtils::cppModuleLinkerFlags(qbsProps);
debugInfo = !flags.contains(QLatin1String("--strip"));
- outputFile = IarewUtils::targetBinary(qbsProduct);
+ outputFile = gen::utils::targetBinary(qbsProduct);
}
int debugInfo = 0;
@@ -216,13 +216,15 @@ struct InputPageOptions final
struct ListPageOptions final
{
- enum ListingAction { NoListing,
- GenerateListing };
+ enum ListingAction {
+ NoListing,
+ GenerateListing
+ };
explicit ListPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- generateMap = IarewUtils::cppBooleanModuleProperty(
+ generateMap = gen::utils::cppBooleanModuleProperty(
qbsProps, QStringLiteral("generateMapFile"))
? ListPageOptions::GenerateListing
: ListPageOptions::NoListing;
@@ -286,7 +288,7 @@ struct DiagnosticsPageOptions final
explicit DiagnosticsPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- treatWarningsAsErrors = IarewUtils::cppIntegerModuleProperty(
+ treatWarningsAsErrors = gen::utils::cppIntegerModuleProperty(
qbsProps, QStringLiteral("treatWarningsAsErrors"));
}
@@ -305,9 +307,9 @@ ArmLinkerSettingsGroup::ArmLinkerSettingsGroup(
setName(QByteArrayLiteral("ILINK"));
setArchiveVersion(kLinkerArchiveVersion);
setDataVersion(kLinkerDataVersion);
- setDataDebugInfo(IarewUtils::debugInformation(qbsProduct));
+ setDataDebugInfo(gen::utils::debugInformation(qbsProduct));
- const QString buildRootDirectory = IarewUtils::buildRootPath(qbsProject);
+ const QString buildRootDirectory = gen::utils::buildRootPath(qbsProject);
buildConfigPage(buildRootDirectory, qbsProduct);
buildLibraryPage(buildRootDirectory, qbsProduct, qbsProductDeps);
diff --git a/src/plugins/generator/iarew/archs/avr/avrarchiversettingsgroup_v7.cpp b/src/plugins/generator/iarew/archs/avr/avrarchiversettingsgroup_v7.cpp
index 0376b1621..a3babc1d1 100644
--- a/src/plugins/generator/iarew/archs/avr/avrarchiversettingsgroup_v7.cpp
+++ b/src/plugins/generator/iarew/archs/avr/avrarchiversettingsgroup_v7.cpp
@@ -30,7 +30,6 @@
#include "avrarchiversettingsgroup_v7.h"
-#include "../../iarewproperty.h"
#include "../../iarewutils.h"
namespace qbs {
@@ -51,7 +50,7 @@ struct OutputPageOptions final
const ProductData &qbsProduct)
{
outputFile = QLatin1String("$PROJ_DIR$/")
- + IarewUtils::targetBinaryPath(baseDirectory, qbsProduct);
+ + gen::utils::targetBinaryPath(baseDirectory, qbsProduct);
}
QString outputFile;
@@ -71,9 +70,9 @@ AvrArchiverSettingsGroup::AvrArchiverSettingsGroup(
setName(QByteArrayLiteral("XAR"));
setArchiveVersion(kArchiverArchiveVersion);
setDataVersion(kArchiverDataVersion);
- setDataDebugInfo(IarewUtils::debugInformation(qbsProduct));
+ setDataDebugInfo(gen::utils::debugInformation(qbsProduct));
- const QString buildRootDirectory = IarewUtils::buildRootPath(qbsProject);
+ const QString buildRootDirectory = gen::utils::buildRootPath(qbsProject);
buildOutputPage(buildRootDirectory, qbsProduct);
}
diff --git a/src/plugins/generator/iarew/archs/avr/avrassemblersettingsgroup_v7.cpp b/src/plugins/generator/iarew/archs/avr/avrassemblersettingsgroup_v7.cpp
index 80970087f..ecb5400ea 100644
--- a/src/plugins/generator/iarew/archs/avr/avrassemblersettingsgroup_v7.cpp
+++ b/src/plugins/generator/iarew/archs/avr/avrassemblersettingsgroup_v7.cpp
@@ -30,7 +30,6 @@
#include "avrassemblersettingsgroup_v7.h"
-#include "../../iarewproperty.h"
#include "../../iarewutils.h"
namespace qbs {
@@ -47,15 +46,17 @@ namespace {
struct LanguagePageOptions final
{
- enum MacroQuoteCharacter { AngleBracketsQuote,
- RoundBracketsQuote,
- SquareBracketsQuote,
- FigureBracketsQuote };
+ enum MacroQuoteCharacter {
+ AngleBracketsQuote,
+ RoundBracketsQuote,
+ SquareBracketsQuote,
+ FigureBracketsQuote
+ };
explicit LanguagePageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- const QStringList flags = IarewUtils::cppStringModuleProperties(
+ const QStringList flags = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("assemblerFlags")});
enableSymbolsCaseSensitive = flags.contains(QLatin1String("-s+"));
enableMultibyteSupport = flags.contains(QLatin1String("-n"));
@@ -81,7 +82,7 @@ struct OutputPageOptions final
{
explicit OutputPageOptions(const ProductData &qbsProduct)
{
- debugInfo = IarewUtils::debugInformation(qbsProduct);
+ debugInfo = gen::utils::debugInformation(qbsProduct);
}
int debugInfo = 0;
@@ -95,11 +96,11 @@ struct PreprocessorPageOptions final
const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- defineSymbols = IarewUtils::cppVariantModuleProperties(
+ defineSymbols = gen::utils::cppVariantModuleProperties(
qbsProps, {QStringLiteral("defines")});
const QString toolkitPath = IarewUtils::toolkitRootPath(qbsProduct);
- const QStringList fullIncludePaths = IarewUtils::cppStringModuleProperties(
+ const QStringList fullIncludePaths = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("includePaths"),
QStringLiteral("systemIncludePaths")});
for (const auto &fullIncludePath : fullIncludePaths) {
@@ -128,7 +129,7 @@ struct DiagnosticsPageOptions final
explicit DiagnosticsPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- const QString warningLevel = IarewUtils::cppStringModuleProperty(
+ const QString warningLevel = gen::utils::cppStringModuleProperty(
qbsProps, QStringLiteral("warningLevel"));
if (warningLevel == QLatin1String("all")) {
enableWarnings = 0;
@@ -160,9 +161,9 @@ AvrAssemblerSettingsGroup::AvrAssemblerSettingsGroup(
setName(QByteArrayLiteral("AAVR"));
setArchiveVersion(kAssemblerArchiveVersion);
setDataVersion(kAssemblerDataVersion);
- setDataDebugInfo(IarewUtils::debugInformation(qbsProduct));
+ setDataDebugInfo(gen::utils::debugInformation(qbsProduct));
- const QString buildRootDirectory = IarewUtils::buildRootPath(qbsProject);
+ const QString buildRootDirectory = gen::utils::buildRootPath(qbsProject);
buildLanguagePage(qbsProduct);
buildOutputPage(qbsProduct);
diff --git a/src/plugins/generator/iarew/archs/avr/avrbuildconfigurationgroup_v7.cpp b/src/plugins/generator/iarew/archs/avr/avrbuildconfigurationgroup_v7.cpp
index 07768c254..dbb5c6620 100644
--- a/src/plugins/generator/iarew/archs/avr/avrbuildconfigurationgroup_v7.cpp
+++ b/src/plugins/generator/iarew/archs/avr/avrbuildconfigurationgroup_v7.cpp
@@ -47,17 +47,17 @@ AvrBuildConfigurationGroup::AvrBuildConfigurationGroup(
const Project &qbsProject,
const ProductData &qbsProduct,
const std::vector<ProductData> &qbsProductDeps)
- : IarewPropertyGroup("configuration")
+ : gen::xml::PropertyGroup("configuration")
{
// Append configuration name item.
- const QString cfgName = IarewUtils::buildConfigurationName(qbsProject);
+ const QString cfgName = gen::utils::buildConfigurationName(qbsProject);
appendProperty("name", cfgName);
// Apend toolchain name group item.
appendChild<IarewToolchainPropertyGroup>("AVR");
// Append debug info item.
- const int debugBuild = IarewUtils::debugInformation(qbsProduct);
+ const int debugBuild = gen::utils::debugInformation(qbsProduct);
appendProperty("debug", debugBuild);
// Append settings group items.
@@ -74,14 +74,15 @@ AvrBuildConfigurationGroup::AvrBuildConfigurationGroup(
}
bool AvrBuildConfigurationGroupFactory::canCreate(
- IarewUtils::Architecture architecture,
+ gen::utils::Architecture arch,
const Version &version) const
{
- return architecture == IarewUtils::Architecture::AvrArchitecture
+ return arch == gen::utils::Architecture::Avr
&& version.majorVersion() == 7;
}
-std::unique_ptr<IarewPropertyGroup> AvrBuildConfigurationGroupFactory::create(
+std::unique_ptr<gen::xml::PropertyGroup>
+AvrBuildConfigurationGroupFactory::create(
const Project &qbsProject,
const ProductData &qbsProduct,
const std::vector<ProductData> &qbsProductDeps) const
diff --git a/src/plugins/generator/iarew/archs/avr/avrbuildconfigurationgroup_v7.h b/src/plugins/generator/iarew/archs/avr/avrbuildconfigurationgroup_v7.h
index f00db799e..618cef4c6 100644
--- a/src/plugins/generator/iarew/archs/avr/avrbuildconfigurationgroup_v7.h
+++ b/src/plugins/generator/iarew/archs/avr/avrbuildconfigurationgroup_v7.h
@@ -31,30 +31,34 @@
#ifndef QBS_IAREWAVRBUILDCONFIGURATIONGROUP_V7_H
#define QBS_IAREWAVRBUILDCONFIGURATIONGROUP_V7_H
-#include "../../iarewpropertygroup.h"
+#include <generators/generatorutils.h>
+#include <generators/xmlpropertygroup.h>
namespace qbs {
namespace iarew {
namespace avr {
namespace v7 {
-class AvrBuildConfigurationGroup final : public IarewPropertyGroup
+class AvrBuildConfigurationGroup final
+ : public gen::xml::PropertyGroup
{
private:
- explicit AvrBuildConfigurationGroup(const Project &qbsProject,
- const ProductData &qbsProduct,
- const std::vector<ProductData> &qbsProductDeps);
+ explicit AvrBuildConfigurationGroup(
+ const Project &qbsProject,
+ const ProductData &qbsProduct,
+ const std::vector<ProductData> &qbsProductDeps);
friend class AvrBuildConfigurationGroupFactory;
};
-class AvrBuildConfigurationGroupFactory final : public IarewPropertyGroupFactory
+class AvrBuildConfigurationGroupFactory final
+ : public gen::xml::PropertyGroupFactory
{
public:
- bool canCreate(IarewUtils::Architecture architecture,
+ bool canCreate(gen::utils::Architecture arch,
const Version &version) const final;
- std::unique_ptr<IarewPropertyGroup> create(
+ std::unique_ptr<gen::xml::PropertyGroup> create(
const Project &qbsProject,
const ProductData &qbsProduct,
const std::vector<ProductData> &qbsProductDeps) const final;
diff --git a/src/plugins/generator/iarew/archs/avr/avrcompilersettingsgroup_v7.cpp b/src/plugins/generator/iarew/archs/avr/avrcompilersettingsgroup_v7.cpp
index 03f6194f9..178eaab8c 100644
--- a/src/plugins/generator/iarew/archs/avr/avrcompilersettingsgroup_v7.cpp
+++ b/src/plugins/generator/iarew/archs/avr/avrcompilersettingsgroup_v7.cpp
@@ -53,7 +53,7 @@ struct OutputPageOptions final
moduleType = flags.contains(QLatin1String("--library_module"))
? OutputPageOptions::LibraryModule
: OutputPageOptions::ProgramModule;
- debugInfo = IarewUtils::debugInformation(qbsProduct);
+ debugInfo = gen::utils::debugInformation(qbsProduct);
disableErrorMessages = flags.contains(
QLatin1String("--no_ubrof_messages"));
}
@@ -68,19 +68,27 @@ struct OutputPageOptions final
struct LanguageOnePageOptions final
{
- enum LanguageExtension { CLanguageExtension,
- CxxLanguageExtension,
- AutoLanguageExtension };
-
- enum CLanguageDialect { C89LanguageDialect,
- C99LanguageDialect };
-
- enum CxxLanguageDialect { EmbeddedCPlusPlus,
- ExtendedEmbeddedCPlusPlus };
-
- enum LanguageConformance { AllowIarExtension,
- RelaxedStandard,
- StrictStandard };
+ enum LanguageExtension {
+ CLanguageExtension,
+ CxxLanguageExtension,
+ AutoLanguageExtension
+ };
+
+ enum CLanguageDialect {
+ C89LanguageDialect,
+ C99LanguageDialect
+ };
+
+ enum CxxLanguageDialect {
+ EmbeddedCPlusPlus,
+ ExtendedEmbeddedCPlusPlus
+ };
+
+ enum LanguageConformance {
+ AllowIarExtension,
+ RelaxedStandard,
+ StrictStandard
+ };
explicit LanguageOnePageOptions(const ProductData &qbsProduct)
{
@@ -89,7 +97,7 @@ struct LanguageOnePageOptions final
// File extension based by default.
languageExtension = LanguageOnePageOptions::AutoLanguageExtension;
// C language dialect.
- const QStringList cLanguageVersion = IarewUtils::cppStringModuleProperties(
+ const QStringList cLanguageVersion = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("cLanguageVersion")});
if (cLanguageVersion.contains(QLatin1String("c89")))
cLanguageDialect = LanguageOnePageOptions::C89LanguageDialect;
@@ -131,11 +139,15 @@ struct LanguageOnePageOptions final
struct LanguageTwoPageOptions final
{
- enum PlainCharacter { SignedCharacter,
- UnsignedCharacter };
+ enum PlainCharacter {
+ SignedCharacter,
+ UnsignedCharacter
+ };
- enum FloatingPointSemantic { StrictSemantic,
- RelaxedSemantic };
+ enum FloatingPointSemantic {
+ StrictSemantic,
+ RelaxedSemantic
+ };
explicit LanguageTwoPageOptions(const ProductData &qbsProduct)
{
@@ -162,24 +174,30 @@ struct OptimizationsPageOptions final
{
// Optimizations level radio-buttons with
// combo-box on "level" widget.
- enum Strategy { StrategyBalanced,
- StrategySize,
- StrategySpeed };
-
- enum Level { LevelNone,
- LevelLow,
- LevelMedium,
- LevelHigh };
-
- enum LevelSlave { LevelSlave0,
- LevelSlave1,
- LevelSlave2,
- LevelSlave3 };
+ enum Strategy {
+ StrategyBalanced,
+ StrategySize,
+ StrategySpeed
+ };
+
+ enum Level {
+ LevelNone,
+ LevelLow,
+ LevelMedium,
+ LevelHigh
+ };
+
+ enum LevelSlave {
+ LevelSlave0,
+ LevelSlave1,
+ LevelSlave2,
+ LevelSlave3
+ };
explicit OptimizationsPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- const QString optimization = IarewUtils::cppStringModuleProperty(
+ const QString optimization = gen::utils::cppStringModuleProperty(
qbsProps, QStringLiteral("optimization"));
if (optimization == QLatin1String("none")) {
optimizationStrategy = OptimizationsPageOptions::StrategyBalanced;
@@ -231,11 +249,11 @@ struct PreprocessorPageOptions final
const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- defineSymbols = IarewUtils::cppVariantModuleProperties(
+ defineSymbols = gen::utils::cppVariantModuleProperties(
qbsProps, {QStringLiteral("defines")});
const QString toolkitPath = IarewUtils::toolkitRootPath(qbsProduct);
- const QStringList fullIncludePaths = IarewUtils::cppStringModuleProperties(
+ const QStringList fullIncludePaths = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("includePaths"),
QStringLiteral("systemIncludePaths")});
for (const QString &fullIncludePath : fullIncludePaths) {
@@ -264,7 +282,7 @@ struct DiagnosticsPageOptions final
explicit DiagnosticsPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- warningsAsErrors = IarewUtils::cppIntegerModuleProperty(
+ warningsAsErrors = gen::utils::cppIntegerModuleProperty(
qbsProps, QStringLiteral("treatWarningsAsErrors"));
}
@@ -311,9 +329,9 @@ AvrCompilerSettingsGroup::AvrCompilerSettingsGroup(
setName(QByteArrayLiteral("ICCAVR"));
setArchiveVersion(kCompilerArchiveVersion);
setDataVersion(kCompilerDataVersion);
- setDataDebugInfo(IarewUtils::debugInformation(qbsProduct));
+ setDataDebugInfo(gen::utils::debugInformation(qbsProduct));
- const QString buildRootDirectory = IarewUtils::buildRootPath(qbsProject);
+ const QString buildRootDirectory = gen::utils::buildRootPath(qbsProject);
buildOutputPage(qbsProduct);
buildLanguageOnePage(qbsProduct);
diff --git a/src/plugins/generator/iarew/archs/avr/avrgeneralsettingsgroup_v7.cpp b/src/plugins/generator/iarew/archs/avr/avrgeneralsettingsgroup_v7.cpp
index 4136864b3..ff2f303c5 100644
--- a/src/plugins/generator/iarew/archs/avr/avrgeneralsettingsgroup_v7.cpp
+++ b/src/plugins/generator/iarew/archs/avr/avrgeneralsettingsgroup_v7.cpp
@@ -401,15 +401,17 @@ static const TargetMcuEntry mcusDict[] = {
struct TargetPageOptions final
{
- enum MemoryModel { TinyModel,
- SmallModel,
- LargeModel,
- HugeModel };
+ enum MemoryModel {
+ TinyModel,
+ SmallModel,
+ LargeModel,
+ HugeModel
+ };
explicit TargetPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- const QStringList flags = IarewUtils::cppStringModuleProperties(
+ const QStringList flags = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("driverFlags")});
// Detect target MCU record.
const QString mcuValue = IarewUtils::flagValue(
@@ -460,7 +462,7 @@ struct SystemPageOptions final
explicit SystemPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- const QStringList flags = IarewUtils::cppStringModuleProperties(
+ const QStringList flags = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("driverLinkerFlags"),
QStringLiteral("defines")});
cstackSize = IarewUtils::flagValue(
@@ -477,22 +479,26 @@ struct SystemPageOptions final
struct LibraryOptionsPageOptions final
{
- enum PrintfFormatter { PrintfAutoFormatter = 0,
- PrintfFullFormatter = 1,
- PrintfFullNoMultibytesFormatter = 2,
- PrintfLargeFormatter = 3,
- PrintfLargeNoMultibytesFormatter = 4,
- PrintfSmallFormatter = 6,
- PrintfSmallNoMultibytesFormatter = 7,
- PrintfTinyFormatter = 8 };
-
- enum ScanfFormatter { ScanfAutoFormatter = 0,
- ScanfFullFormatter = 1,
- ScanfFullNoMultibytesFormatter = 2,
- ScanfLargeFormatter = 3,
- ScanfLargeNoMultibytesFormatter = 4,
- ScanfSmallFormatter = 6,
- ScanfSmallNoMultibytesFormatter = 7 };
+ enum PrintfFormatter {
+ PrintfAutoFormatter = 0,
+ PrintfFullFormatter = 1,
+ PrintfFullNoMultibytesFormatter = 2,
+ PrintfLargeFormatter = 3,
+ PrintfLargeNoMultibytesFormatter = 4,
+ PrintfSmallFormatter = 6,
+ PrintfSmallNoMultibytesFormatter = 7,
+ PrintfTinyFormatter = 8
+ };
+
+ enum ScanfFormatter {
+ ScanfAutoFormatter = 0,
+ ScanfFullFormatter = 1,
+ ScanfFullNoMultibytesFormatter = 2,
+ ScanfLargeFormatter = 3,
+ ScanfLargeNoMultibytesFormatter = 4,
+ ScanfSmallFormatter = 6,
+ ScanfSmallNoMultibytesFormatter = 7
+ };
explicit LibraryOptionsPageOptions(const ProductData &qbsProduct)
{
@@ -541,13 +547,15 @@ struct LibraryOptionsPageOptions final
struct LibraryConfigPageOptions final
{
- enum RuntimeLibrary { NoLibrary,
- NormalDlibLibrary,
- FullDlibLibrary,
- CustomDlibLibrary,
- ClibLibrary,
- CustomClibLibrary,
- ThirdPartyLibrary };
+ enum RuntimeLibrary {
+ NoLibrary,
+ NormalDlibLibrary,
+ FullDlibLibrary,
+ CustomDlibLibrary,
+ ClibLibrary,
+ CustomClibLibrary,
+ ThirdPartyLibrary
+ };
explicit LibraryConfigPageOptions(const QString &baseDirectory,
const ProductData &qbsProduct)
@@ -555,7 +563,7 @@ struct LibraryConfigPageOptions final
const auto &qbsProps = qbsProduct.moduleProperties();
const QStringList flags = IarewUtils::cppModuleCompilerFlags(qbsProps);
- const QStringList libraryPaths = IarewUtils::cppStringModuleProperties(
+ const QStringList libraryPaths = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("staticLibraries")});
const auto libraryBegin = libraryPaths.cbegin();
const auto libraryEnd = libraryPaths.cend();
@@ -639,11 +647,11 @@ struct OutputPageOptions final
const ProductData &qbsProduct)
{
binaryType = IarewUtils::outputBinaryType(qbsProduct);
- binaryDirectory = IarewUtils::binaryOutputDirectory(
+ binaryDirectory = gen::utils::binaryOutputDirectory(
baseDirectory, qbsProduct);
- objectDirectory = IarewUtils::objectsOutputDirectory(
+ objectDirectory = gen::utils::objectsOutputDirectory(
baseDirectory, qbsProduct);
- listingDirectory = IarewUtils::listingOutputDirectory(
+ listingDirectory = gen::utils::listingOutputDirectory(
baseDirectory, qbsProduct);
}
@@ -667,9 +675,9 @@ AvrGeneralSettingsGroup::AvrGeneralSettingsGroup(
setName(QByteArrayLiteral("General"));
setArchiveVersion(kGeneralArchiveVersion);
setDataVersion(kGeneralDataVersion);
- setDataDebugInfo(IarewUtils::debugInformation(qbsProduct));
+ setDataDebugInfo(gen::utils::debugInformation(qbsProduct));
- const QString buildRootDirectory = IarewUtils::buildRootPath(qbsProject);
+ const QString buildRootDirectory = gen::utils::buildRootPath(qbsProject);
buildTargetPage(qbsProduct);
buildSystemPage(qbsProduct);
diff --git a/src/plugins/generator/iarew/archs/avr/avrlinkersettingsgroup_v7.cpp b/src/plugins/generator/iarew/archs/avr/avrlinkersettingsgroup_v7.cpp
index 1cf2e7302..9b86a860e 100644
--- a/src/plugins/generator/iarew/archs/avr/avrlinkersettingsgroup_v7.cpp
+++ b/src/plugins/generator/iarew/archs/avr/avrlinkersettingsgroup_v7.cpp
@@ -55,7 +55,7 @@ struct ConfigPageOptions final
const auto &qbsProps = qbsProduct.moduleProperties();
const QString toolkitPath = IarewUtils::toolkitRootPath(qbsProduct);
- entryPoint = IarewUtils::cppStringModuleProperty(
+ entryPoint = gen::utils::cppStringModuleProperty(
qbsProps, QStringLiteral("entryPoint"));
// Enumerate all product linker config files
@@ -101,7 +101,7 @@ struct ConfigPageOptions final
}
// Add libraries search paths.
- const QStringList libraryPaths = IarewUtils::cppStringModuleProperties(
+ const QStringList libraryPaths = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("libraryPaths")});
for (const QString &libraryPath : libraryPaths) {
const QFileInfo libraryPathInfo(libraryPath);
@@ -121,7 +121,7 @@ struct ConfigPageOptions final
// Add static libraries paths.
const QStringList staticLibrariesProps =
- IarewUtils::cppStringModuleProperties(
+ gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("staticLibraries")});
for (const QString &staticLibrary : staticLibrariesProps) {
const QFileInfo staticLibraryInfo(staticLibrary);
@@ -146,7 +146,7 @@ struct ConfigPageOptions final
// Add static libraries from product dependencies.
for (const ProductData &qbsProductDep : qbsProductDeps) {
const QString depBinaryPath = QLatin1String("$PROJ_DIR$/")
- + IarewUtils::targetBinaryPath(baseDirectory,
+ + gen::utils::targetBinaryPath(baseDirectory,
qbsProductDep);
staticLibraries.push_back(depBinaryPath);
}
@@ -164,7 +164,7 @@ struct OutputPageOptions final
{
explicit OutputPageOptions(const ProductData &qbsProduct)
{
- outputFile = IarewUtils::targetBinary(qbsProduct);
+ outputFile = gen::utils::targetBinary(qbsProduct);
}
QString outputFile;
@@ -174,13 +174,15 @@ struct OutputPageOptions final
struct ListPageOptions final
{
- enum ListingAction { NoListing,
- GenerateListing };
+ enum ListingAction {
+ NoListing,
+ GenerateListing
+ };
explicit ListPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- generateMap = IarewUtils::cppBooleanModuleProperty(
+ generateMap = gen::utils::cppBooleanModuleProperty(
qbsProps, QStringLiteral("generateMapFile"))
? ListPageOptions::GenerateListing
: ListPageOptions::NoListing;
@@ -243,7 +245,7 @@ struct DiagnosticsPageOptions final
explicit DiagnosticsPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- const QString warningLevel = IarewUtils::cppStringModuleProperty(
+ const QString warningLevel = gen::utils::cppStringModuleProperty(
qbsProps, QStringLiteral("warningLevel"));
suppressAllWarnings = (warningLevel == QLatin1String("none"));
}
@@ -263,9 +265,9 @@ AvrLinkerSettingsGroup::AvrLinkerSettingsGroup(
setName(QByteArrayLiteral("XLINK"));
setArchiveVersion(kLinkerArchiveVersion);
setDataVersion(kLinkerDataVersion);
- setDataDebugInfo(IarewUtils::debugInformation(qbsProduct));
+ setDataDebugInfo(gen::utils::debugInformation(qbsProduct));
- const QString buildRootDirectory = IarewUtils::buildRootPath(qbsProject);
+ const QString buildRootDirectory = gen::utils::buildRootPath(qbsProject);
buildConfigPage(buildRootDirectory, qbsProduct, qbsProductDeps);
buildOutputPage(qbsProduct);
diff --git a/src/plugins/generator/iarew/archs/mcs51/mcs51archiversettingsgroup_v10.cpp b/src/plugins/generator/iarew/archs/mcs51/mcs51archiversettingsgroup_v10.cpp
index a10b46079..36978bd15 100644
--- a/src/plugins/generator/iarew/archs/mcs51/mcs51archiversettingsgroup_v10.cpp
+++ b/src/plugins/generator/iarew/archs/mcs51/mcs51archiversettingsgroup_v10.cpp
@@ -30,7 +30,6 @@
#include "mcs51archiversettingsgroup_v10.h"
-#include "../../iarewproperty.h"
#include "../../iarewutils.h"
namespace qbs {
@@ -51,7 +50,7 @@ struct OutputPageOptions final
const ProductData &qbsProduct)
{
outputFile = QLatin1String("$PROJ_DIR$/")
- + IarewUtils::targetBinaryPath(baseDirectory, qbsProduct);
+ + gen::utils::targetBinaryPath(baseDirectory, qbsProduct);
}
QString outputFile;
@@ -71,9 +70,9 @@ Mcs51ArchiverSettingsGroup::Mcs51ArchiverSettingsGroup(
setName(QByteArrayLiteral("XAR"));
setArchiveVersion(kArchiverArchiveVersion);
setDataVersion(kArchiverDataVersion);
- setDataDebugInfo(IarewUtils::debugInformation(qbsProduct));
+ setDataDebugInfo(gen::utils::debugInformation(qbsProduct));
- const QString buildRootDirectory = IarewUtils::buildRootPath(qbsProject);
+ const QString buildRootDirectory = gen::utils::buildRootPath(qbsProject);
buildOutputPage(buildRootDirectory, qbsProduct);
}
diff --git a/src/plugins/generator/iarew/archs/mcs51/mcs51assemblersettingsgroup_v10.cpp b/src/plugins/generator/iarew/archs/mcs51/mcs51assemblersettingsgroup_v10.cpp
index 80ca0fd50..5f72f20e4 100644
--- a/src/plugins/generator/iarew/archs/mcs51/mcs51assemblersettingsgroup_v10.cpp
+++ b/src/plugins/generator/iarew/archs/mcs51/mcs51assemblersettingsgroup_v10.cpp
@@ -30,7 +30,7 @@
#include "mcs51assemblersettingsgroup_v10.h"
-#include "../../iarewproperty.h"
+//#include "../../iarewproperty.h"
#include "../../iarewutils.h"
namespace qbs {
@@ -47,15 +47,17 @@ namespace {
struct LanguagePageOptions final
{
- enum MacroQuoteCharacter { AngleBracketsQuote,
- RoundBracketsQuote,
- SquareBracketsQuote,
- FigureBracketsQuote };
+ enum MacroQuoteCharacter {
+ AngleBracketsQuote,
+ RoundBracketsQuote,
+ SquareBracketsQuote,
+ FigureBracketsQuote
+ };
explicit LanguagePageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- const QStringList flags = IarewUtils::cppStringModuleProperties(
+ const QStringList flags = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("assemblerFlags")});
enableSymbolsCaseSensitive = flags.contains(QLatin1String("-s+"));
enableMultibyteSupport = flags.contains(QLatin1String("-n"));
@@ -81,7 +83,7 @@ struct OutputPageOptions final
{
explicit OutputPageOptions(const ProductData &qbsProduct)
{
- debugInfo = IarewUtils::debugInformation(qbsProduct);
+ debugInfo = gen::utils::debugInformation(qbsProduct);
}
int debugInfo = 0;
@@ -95,11 +97,11 @@ struct PreprocessorPageOptions final
const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- defineSymbols = IarewUtils::cppVariantModuleProperties(
+ defineSymbols = gen::utils::cppVariantModuleProperties(
qbsProps, {QStringLiteral("defines")});
const QString toolkitPath = IarewUtils::toolkitRootPath(qbsProduct);
- const QStringList fullIncludePaths = IarewUtils::cppStringModuleProperties(
+ const QStringList fullIncludePaths = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("includePaths"),
QStringLiteral("systemIncludePaths")});
for (const auto &fullIncludePath : fullIncludePaths) {
@@ -128,7 +130,7 @@ struct DiagnosticsPageOptions final
explicit DiagnosticsPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- const QString warningLevel = IarewUtils::cppStringModuleProperty(
+ const QString warningLevel = gen::utils::cppStringModuleProperty(
qbsProps, QStringLiteral("warningLevel"));
if (warningLevel == QLatin1String("all")) {
enableWarnings = 0;
@@ -161,9 +163,9 @@ Mcs51AssemblerSettingsGroup::Mcs51AssemblerSettingsGroup(
setName(QByteArrayLiteral("A8051"));
setArchiveVersion(kAssemblerArchiveVersion);
setDataVersion(kAssemblerDataVersion);
- setDataDebugInfo(IarewUtils::debugInformation(qbsProduct));
+ setDataDebugInfo(gen::utils::debugInformation(qbsProduct));
- const QString buildRootDirectory = IarewUtils::buildRootPath(qbsProject);
+ const QString buildRootDirectory = gen::utils::buildRootPath(qbsProject);
buildLanguagePage(qbsProduct);
buildOutputPage(qbsProduct);
diff --git a/src/plugins/generator/iarew/archs/mcs51/mcs51buildconfigurationgroup_v10.cpp b/src/plugins/generator/iarew/archs/mcs51/mcs51buildconfigurationgroup_v10.cpp
index 74cdb6d0f..ba86bc54d 100644
--- a/src/plugins/generator/iarew/archs/mcs51/mcs51buildconfigurationgroup_v10.cpp
+++ b/src/plugins/generator/iarew/archs/mcs51/mcs51buildconfigurationgroup_v10.cpp
@@ -47,17 +47,17 @@ Mcs51BuildConfigurationGroup::Mcs51BuildConfigurationGroup(
const Project &qbsProject,
const ProductData &qbsProduct,
const std::vector<ProductData> &qbsProductDeps)
- : IarewPropertyGroup("configuration")
+ : gen::xml::PropertyGroup("configuration")
{
// Append configuration name item.
- const QString cfgName = IarewUtils::buildConfigurationName(qbsProject);
+ const QString cfgName = gen::utils::buildConfigurationName(qbsProject);
appendProperty("name", cfgName);
// Apend toolchain name group item.
appendChild<IarewToolchainPropertyGroup>("8051");
// Append debug info item.
- const int debugBuild = IarewUtils::debugInformation(qbsProduct);
+ const int debugBuild = gen::utils::debugInformation(qbsProduct);
appendProperty("debug", debugBuild);
// Append settings group items.
@@ -74,13 +74,15 @@ Mcs51BuildConfigurationGroup::Mcs51BuildConfigurationGroup(
}
bool Mcs51BuildConfigurationGroupFactory::canCreate(
- IarewUtils::Architecture architecture, const Version &version) const
+ gen::utils::Architecture arch,
+ const Version &version) const
{
- return architecture == IarewUtils::Architecture::Mcs51Architecture
+ return arch == gen::utils::Architecture::Mcs51
&& version.majorVersion() == 10;
}
-std::unique_ptr<IarewPropertyGroup> Mcs51BuildConfigurationGroupFactory::create(
+std::unique_ptr<gen::xml::PropertyGroup>
+Mcs51BuildConfigurationGroupFactory::create(
const Project &qbsProject,
const ProductData &qbsProduct,
const std::vector<ProductData> &qbsProductDeps) const
diff --git a/src/plugins/generator/iarew/archs/mcs51/mcs51buildconfigurationgroup_v10.h b/src/plugins/generator/iarew/archs/mcs51/mcs51buildconfigurationgroup_v10.h
index d8153a0f0..edd16d5d7 100644
--- a/src/plugins/generator/iarew/archs/mcs51/mcs51buildconfigurationgroup_v10.h
+++ b/src/plugins/generator/iarew/archs/mcs51/mcs51buildconfigurationgroup_v10.h
@@ -31,14 +31,15 @@
#ifndef QBS_IAREWMCS51BUILDCONFIGURATIONGROUP_V10_H
#define QBS_IAREWMCS51BUILDCONFIGURATIONGROUP_V10_H
-#include "../../iarewpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
namespace qbs {
namespace iarew {
namespace mcs51 {
namespace v10 {
-class Mcs51BuildConfigurationGroup final : public IarewPropertyGroup
+class Mcs51BuildConfigurationGroup final
+ : public gen::xml::PropertyGroup
{
private:
explicit Mcs51BuildConfigurationGroup(
@@ -49,13 +50,14 @@ private:
friend class Mcs51BuildConfigurationGroupFactory;
};
-class Mcs51BuildConfigurationGroupFactory final : public IarewPropertyGroupFactory
+class Mcs51BuildConfigurationGroupFactory final
+ : public gen::xml::PropertyGroupFactory
{
public:
- bool canCreate(IarewUtils::Architecture architecture,
+ bool canCreate(gen::utils::Architecture arch,
const Version &version) const final;
- std::unique_ptr<IarewPropertyGroup> create(
+ std::unique_ptr<gen::xml::PropertyGroup> create(
const Project &qbsProject,
const ProductData &qbsProduct,
const std::vector<ProductData> &qbsProductDeps) const final;
diff --git a/src/plugins/generator/iarew/archs/mcs51/mcs51compilersettingsgroup_v10.cpp b/src/plugins/generator/iarew/archs/mcs51/mcs51compilersettingsgroup_v10.cpp
index 94b747529..bda3d090b 100644
--- a/src/plugins/generator/iarew/archs/mcs51/mcs51compilersettingsgroup_v10.cpp
+++ b/src/plugins/generator/iarew/archs/mcs51/mcs51compilersettingsgroup_v10.cpp
@@ -46,8 +46,10 @@ namespace {
struct OutputPageOptions final
{
- enum ModuleType { ProgramModule,
- LibraryModule};
+ enum ModuleType {
+ ProgramModule,
+ LibraryModule
+ };
explicit OutputPageOptions(const ProductData &qbsProduct)
{
@@ -56,7 +58,7 @@ struct OutputPageOptions final
moduleType = flags.contains(QLatin1String("--library_module"))
? OutputPageOptions::LibraryModule
: OutputPageOptions::ProgramModule;
- debugInfo = IarewUtils::debugInformation(qbsProduct);
+ debugInfo = gen::utils::debugInformation(qbsProduct);
}
int debugInfo = 0;
@@ -67,19 +69,27 @@ struct OutputPageOptions final
struct LanguageOnePageOptions final
{
- enum LanguageExtension { CLanguageExtension,
- CxxLanguageExtension,
- AutoLanguageExtension };
-
- enum CLanguageDialect { C89LanguageDialect,
- C99LanguageDialect };
-
- enum CxxLanguageDialect { EmbeddedCPlusPlus,
- ExtendedEmbeddedCPlusPlus };
-
- enum LanguageConformance { AllowIarExtension,
- RelaxedStandard,
- StrictStandard };
+ enum LanguageExtension {
+ CLanguageExtension,
+ CxxLanguageExtension,
+ AutoLanguageExtension
+ };
+
+ enum CLanguageDialect {
+ C89LanguageDialect,
+ C99LanguageDialect
+ };
+
+ enum CxxLanguageDialect {
+ EmbeddedCPlusPlus,
+ ExtendedEmbeddedCPlusPlus
+ };
+
+ enum LanguageConformance {
+ AllowIarExtension,
+ RelaxedStandard,
+ StrictStandard
+ };
explicit LanguageOnePageOptions(const ProductData &qbsProduct)
{
@@ -88,7 +98,7 @@ struct LanguageOnePageOptions final
// File extension based by default.
languageExtension = LanguageOnePageOptions::AutoLanguageExtension;
// C language dialect.
- const QStringList cLanguageVersion = IarewUtils::cppStringModuleProperties(
+ const QStringList cLanguageVersion = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("cLanguageVersion")});
cLanguageDialect = cLanguageVersion.contains(QLatin1String("c89"))
? LanguageOnePageOptions::C89LanguageDialect
@@ -129,11 +139,15 @@ struct LanguageOnePageOptions final
struct LanguageTwoPageOptions final
{
- enum PlainCharacter { SignedCharacter,
- UnsignedCharacter };
+ enum PlainCharacter {
+ SignedCharacter,
+ UnsignedCharacter
+ };
- enum FloatingPointSemantic { StrictSemantic,
- RelaxedSemantic };
+ enum FloatingPointSemantic {
+ StrictSemantic,
+ RelaxedSemantic
+ };
explicit LanguageTwoPageOptions(const ProductData &qbsProduct)
{
@@ -162,24 +176,30 @@ struct OptimizationsPageOptions final
{
// Optimizations level radio-buttons with combo-box
// on "level" widget.
- enum Strategy { StrategyBalanced,
- StrategySize,
- StrategySpeed };
-
- enum Level { LevelNone,
- LevelLow,
- LevelMedium,
- LevelHigh };
-
- enum LevelSlave { LevelSlave0,
- LevelSlave1,
- LevelSlave2,
- LevelSlave3 };
+ enum Strategy {
+ StrategyBalanced,
+ StrategySize,
+ StrategySpeed
+ };
+
+ enum Level {
+ LevelNone,
+ LevelLow,
+ LevelMedium,
+ LevelHigh
+ };
+
+ enum LevelSlave {
+ LevelSlave0,
+ LevelSlave1,
+ LevelSlave2,
+ LevelSlave3
+ };
explicit OptimizationsPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- const QString optimization = IarewUtils::cppStringModuleProperty(
+ const QString optimization = gen::utils::cppStringModuleProperty(
qbsProps, QStringLiteral("optimization"));
if (optimization == QLatin1String("none")) {
optimizationStrategy = OptimizationsPageOptions::StrategyBalanced;
@@ -235,11 +255,11 @@ struct PreprocessorPageOptions final
const auto &qbsProps = qbsProduct.moduleProperties();
// TODO: Need to exclude the pre-defined maroses which are handled
// in 'General Options'.
- defineSymbols = IarewUtils::cppVariantModuleProperties(
+ defineSymbols = gen::utils::cppVariantModuleProperties(
qbsProps, {QStringLiteral("defines")});
const QString toolkitPath = IarewUtils::toolkitRootPath(qbsProduct);
- const QStringList fullIncludePaths = IarewUtils::cppStringModuleProperties(
+ const QStringList fullIncludePaths = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("includePaths"),
QStringLiteral("systemIncludePaths")});
const QString dlibToolkitPath = IarewUtils::dlibToolkitRootPath(qbsProduct);
@@ -273,7 +293,7 @@ struct DiagnosticsPageOptions final
explicit DiagnosticsPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- warningsAsErrors = IarewUtils::cppIntegerModuleProperty(
+ warningsAsErrors = gen::utils::cppIntegerModuleProperty(
qbsProps, QStringLiteral("treatWarningsAsErrors"));
}
@@ -313,9 +333,9 @@ Mcs51CompilerSettingsGroup::Mcs51CompilerSettingsGroup(
setName(QByteArrayLiteral("ICC8051"));
setArchiveVersion(kCompilerArchiveVersion);
setDataVersion(kCompilerDataVersion);
- setDataDebugInfo(IarewUtils::debugInformation(qbsProduct));
+ setDataDebugInfo(gen::utils::debugInformation(qbsProduct));
- const QString buildRootDirectory = IarewUtils::buildRootPath(qbsProject);
+ const QString buildRootDirectory = gen::utils::buildRootPath(qbsProject);
buildOutputPage(qbsProduct);
buildLanguageOnePage(qbsProduct);
diff --git a/src/plugins/generator/iarew/archs/mcs51/mcs51generalsettingsgroup_v10.cpp b/src/plugins/generator/iarew/archs/mcs51/mcs51generalsettingsgroup_v10.cpp
index 48a2681f0..28e051489 100644
--- a/src/plugins/generator/iarew/archs/mcs51/mcs51generalsettingsgroup_v10.cpp
+++ b/src/plugins/generator/iarew/archs/mcs51/mcs51generalsettingsgroup_v10.cpp
@@ -46,32 +46,42 @@ namespace {
struct TargetPageOptions final
{
- enum CpuCore { CorePlain = 1,
- CoreExtended1,
- CoreExtended2 };
-
- enum CodeModel { CodeModelNear = 1,
- CodeModelBanked,
- CodeModelFar,
- CodeModelBankedExtended2 };
-
- enum DataModel { DataModelTiny = 0,
- DataModelSmall,
- DataModelLarge,
- DataModelGeneric,
- DataModelFarGeneric,
- DataModelFar };
-
- enum ConstantsMemoryPlacement { RamMemoryPlace = 0,
- RomMemoryPlace,
- CodeMemoryPlace };
-
- enum CallingConvention { DataOverlayConvention = 0,
- IDataOverlayConvention,
- IDataReentrantConvention,
- PDataReentrantConvention,
- XDataReentrantConvention,
- ExtendedStackReentrantConvention };
+ enum CpuCore {
+ CorePlain = 1,
+ CoreExtended1,
+ CoreExtended2
+ };
+
+ enum CodeModel {
+ CodeModelNear = 1,
+ CodeModelBanked,
+ CodeModelFar,
+ CodeModelBankedExtended2
+ };
+
+ enum DataModel {
+ DataModelTiny = 0,
+ DataModelSmall,
+ DataModelLarge,
+ DataModelGeneric,
+ DataModelFarGeneric,
+ DataModelFar
+ };
+
+ enum ConstantsMemoryPlacement {
+ RamMemoryPlace = 0,
+ RomMemoryPlace,
+ CodeMemoryPlace
+ };
+
+ enum CallingConvention {
+ DataOverlayConvention = 0,
+ IDataOverlayConvention,
+ IDataReentrantConvention,
+ PDataReentrantConvention,
+ XDataReentrantConvention,
+ ExtendedStackReentrantConvention
+ };
explicit TargetPageOptions(const ProductData &qbsProduct)
{
@@ -273,9 +283,9 @@ struct StackHeapPageOptions final
explicit StackHeapPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- const QStringList defineSymbols = IarewUtils::cppStringModuleProperties(
+ const QStringList defineSymbols = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("defines")});
- const QStringList linkerFlags = IarewUtils::cppStringModuleProperties(
+ const QStringList linkerFlags = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("driverLinkerFlags")});
idataStack = IarewUtils::flagValue(
@@ -373,14 +383,20 @@ struct StackHeapPageOptions final
struct DptrPageOptions final
{
- enum DptrSize { Dptr16,
- Dptr24 };
+ enum DptrSize {
+ Dptr16,
+ Dptr24
+ };
- enum DptrVisibility { DptrShadowed,
- DptrSeparate };
+ enum DptrVisibility {
+ DptrShadowed,
+ DptrSeparate
+ };
- enum SwitchMethod { DptrIncludeMethod,
- DptrMaskMethod };
+ enum SwitchMethod {
+ DptrIncludeMethod,
+ DptrMaskMethod
+ };
explicit DptrPageOptions(const ProductData &qbsProduct)
{
@@ -464,9 +480,9 @@ struct DptrPageOptions final
}
}
- const QStringList defineSymbols = IarewUtils::cppStringModuleProperties(
+ const QStringList defineSymbols = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("defines")});
- const QStringList linkerFlags = IarewUtils::cppStringModuleProperties(
+ const QStringList linkerFlags = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("driverLinkerFlags")});
dptrPbank = IarewUtils::flagValue(
@@ -557,9 +573,9 @@ struct CodeBankPageOptions final
explicit CodeBankPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- const QStringList defineSymbols = IarewUtils::cppStringModuleProperties(
+ const QStringList defineSymbols = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("defines")});
- const QStringList linkerFlags = IarewUtils::cppStringModuleProperties(
+ const QStringList linkerFlags = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("driverLinkerFlags")});
banksCount = IarewUtils::flagValue(
@@ -610,14 +626,18 @@ struct CodeBankPageOptions final
struct LibraryOptionsPageOptions final
{
- enum PrintfFormatter { PrintfAutoFormatter = 0,
- PrintfLargeFormatter = 3,
- PrintfMediumFormatter = 5,
- PrintfSmallFormatter = 6 };
-
- enum ScanfFormatter { ScanfAutoFormatter = 0,
- ScanfLargeFormatter = 3,
- ScanfMediumFormatter = 5 };
+ enum PrintfFormatter {
+ PrintfAutoFormatter = 0,
+ PrintfLargeFormatter = 3,
+ PrintfMediumFormatter = 5,
+ PrintfSmallFormatter = 6
+ };
+
+ enum ScanfFormatter {
+ ScanfAutoFormatter = 0,
+ ScanfLargeFormatter = 3,
+ ScanfMediumFormatter = 5
+ };
explicit LibraryOptionsPageOptions(const ProductData &qbsProduct)
{
@@ -664,11 +684,13 @@ struct LibraryOptionsPageOptions final
struct LibraryConfigPageOptions final
{
- enum RuntimeLibrary { NoLibrary,
- NormalDlibLibrary,
- CustomDlibLibrary,
- ClibLibrary,
- CustomClibLibrary };
+ enum RuntimeLibrary {
+ NoLibrary,
+ NormalDlibLibrary,
+ CustomDlibLibrary,
+ ClibLibrary,
+ CustomClibLibrary
+ };
explicit LibraryConfigPageOptions(const QString &baseDirectory,
const ProductData &qbsProduct)
@@ -676,7 +698,7 @@ struct LibraryConfigPageOptions final
const auto &qbsProps = qbsProduct.moduleProperties();
const QStringList flags = IarewUtils::cppModuleCompilerFlags(qbsProps);
- const QStringList libraryPaths = IarewUtils::cppStringModuleProperties(
+ const QStringList libraryPaths = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("staticLibraries")});
const auto libraryBegin = libraryPaths.cbegin();
const auto libraryEnd = libraryPaths.cend();
@@ -747,11 +769,11 @@ struct OutputPageOptions final
const ProductData &qbsProduct)
{
binaryType = IarewUtils::outputBinaryType(qbsProduct);
- binaryDirectory = IarewUtils::binaryOutputDirectory(
+ binaryDirectory = gen::utils::binaryOutputDirectory(
baseDirectory, qbsProduct);
- objectDirectory = IarewUtils::objectsOutputDirectory(
+ objectDirectory = gen::utils::objectsOutputDirectory(
baseDirectory, qbsProduct);
- listingDirectory = IarewUtils::listingOutputDirectory(
+ listingDirectory = gen::utils::listingOutputDirectory(
baseDirectory, qbsProduct);
}
@@ -776,9 +798,9 @@ Mcs51GeneralSettingsGroup::Mcs51GeneralSettingsGroup(
setName(QByteArrayLiteral("General"));
setArchiveVersion(kGeneralArchiveVersion);
setDataVersion(kGeneralDataVersion);
- setDataDebugInfo(IarewUtils::debugInformation(qbsProduct));
+ setDataDebugInfo(gen::utils::debugInformation(qbsProduct));
- const QString buildRootDirectory = IarewUtils::buildRootPath(qbsProject);
+ const QString buildRootDirectory = gen::utils::buildRootPath(qbsProject);
buildTargetPage(qbsProduct);
buildStackHeapPage(qbsProduct);
diff --git a/src/plugins/generator/iarew/archs/mcs51/mcs51linkersettingsgroup_v10.cpp b/src/plugins/generator/iarew/archs/mcs51/mcs51linkersettingsgroup_v10.cpp
index 04e6f4f3d..c27fa51f2 100644
--- a/src/plugins/generator/iarew/archs/mcs51/mcs51linkersettingsgroup_v10.cpp
+++ b/src/plugins/generator/iarew/archs/mcs51/mcs51linkersettingsgroup_v10.cpp
@@ -54,7 +54,7 @@ struct ConfigPageOptions final
const auto &qbsProps = qbsProduct.moduleProperties();
const QString toolkitPath = IarewUtils::toolkitRootPath(qbsProduct);
- entryPoint = IarewUtils::cppStringModuleProperty(
+ entryPoint = gen::utils::cppStringModuleProperty(
qbsProps, QStringLiteral("entryPoint"));
// Enumerate all product linker config files
@@ -100,7 +100,7 @@ struct ConfigPageOptions final
}
// Add libraries search paths.
- const QStringList libraryPaths = IarewUtils::cppStringModuleProperties(
+ const QStringList libraryPaths = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("libraryPaths")});
for (const QString &libraryPath : libraryPaths) {
const QFileInfo libraryPathInfo(libraryPath);
@@ -129,7 +129,7 @@ struct OutputPageOptions final
{
explicit OutputPageOptions(const ProductData &qbsProduct)
{
- outputFile = IarewUtils::targetBinary(qbsProduct);
+ outputFile = gen::utils::targetBinary(qbsProduct);
}
QString outputFile;
@@ -139,13 +139,15 @@ struct OutputPageOptions final
struct ListPageOptions final
{
- enum ListingAction { NoListing,
- GenerateListing };
+ enum ListingAction {
+ NoListing,
+ GenerateListing
+ };
explicit ListPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- generateMap = IarewUtils::cppBooleanModuleProperty(
+ generateMap = gen::utils::cppBooleanModuleProperty(
qbsProps, QStringLiteral("generateMapFile"))
? ListPageOptions::GenerateListing
: ListPageOptions::NoListing;
@@ -188,7 +190,7 @@ struct DiagnosticsPageOptions final
explicit DiagnosticsPageOptions(const ProductData &qbsProduct)
{
const auto &qbsProps = qbsProduct.moduleProperties();
- const QString warningLevel = IarewUtils::cppStringModuleProperty(
+ const QString warningLevel = gen::utils::cppStringModuleProperty(
qbsProps, QStringLiteral("warningLevel"));
suppressAllWarnings = (warningLevel == QLatin1String("none"));
}
@@ -211,9 +213,9 @@ Mcs51LinkerSettingsGroup::Mcs51LinkerSettingsGroup(
setName(QByteArrayLiteral("XLINK"));
setArchiveVersion(kLinkerArchiveVersion);
setDataVersion(kLinkerDataVersion);
- setDataDebugInfo(IarewUtils::debugInformation(qbsProduct));
+ setDataDebugInfo(gen::utils::debugInformation(qbsProduct));
- const QString buildRootDirectory = IarewUtils::buildRootPath(qbsProject);
+ const QString buildRootDirectory = gen::utils::buildRootPath(qbsProject);
buildConfigPage(buildRootDirectory, qbsProduct);
buildOutputPage(qbsProduct);
diff --git a/src/plugins/generator/iarew/iarew.pro b/src/plugins/generator/iarew/iarew.pro
index 59e4be2f3..ec61f758f 100644
--- a/src/plugins/generator/iarew/iarew.pro
+++ b/src/plugins/generator/iarew/iarew.pro
@@ -18,8 +18,6 @@ HEADERS += \
$$PWD/iarewoptionpropertygroup.h \
$$PWD/iarewproject.h \
$$PWD/iarewprojectwriter.h \
- $$PWD/iarewproperty.h \
- $$PWD/iarewpropertygroup.h \
$$PWD/iarewsettingspropertygroup.h \
$$PWD/iarewsourcefilepropertygroup.h \
$$PWD/iarewsourcefilespropertygroup.h \
@@ -27,8 +25,7 @@ HEADERS += \
$$PWD/iarewutils.h \
$$PWD/iarewversioninfo.h \
$$PWD/iarewworkspace.h \
- $$PWD/iarewworkspacewriter.h \
- $$PWD/iiarewnodevisitor.h \
+ $$PWD/iarewworkspacewriter.h
SOURCES += \
$$PWD/iarewfileversionproperty.cpp \
@@ -36,8 +33,6 @@ SOURCES += \
$$PWD/iarewoptionpropertygroup.cpp \
$$PWD/iarewproject.cpp \
$$PWD/iarewprojectwriter.cpp \
- $$PWD/iarewproperty.cpp \
- $$PWD/iarewpropertygroup.cpp \
$$PWD/iarewsettingspropertygroup.cpp \
$$PWD/iarewsourcefilepropertygroup.cpp \
$$PWD/iarewsourcefilespropertygroup.cpp \
@@ -45,7 +40,7 @@ SOURCES += \
$$PWD/iarewutils.cpp \
$$PWD/iarewversioninfo.cpp \
$$PWD/iarewworkspace.cpp \
- $$PWD/iarewworkspacewriter.cpp \
+ $$PWD/iarewworkspacewriter.cpp
# For ARM architecture.
@@ -55,7 +50,7 @@ HEADERS += \
$$PWD/archs/arm/armbuildconfigurationgroup_v8.h \
$$PWD/archs/arm/armcompilersettingsgroup_v8.h \
$$PWD/archs/arm/armgeneralsettingsgroup_v8.h \
- $$PWD/archs/arm/armlinkersettingsgroup_v8.h \
+ $$PWD/archs/arm/armlinkersettingsgroup_v8.h
SOURCES += \
$$PWD/archs/arm/armarchiversettingsgroup_v8.cpp \
@@ -63,7 +58,7 @@ SOURCES += \
$$PWD/archs/arm/armbuildconfigurationgroup_v8.cpp \
$$PWD/archs/arm/armcompilersettingsgroup_v8.cpp \
$$PWD/archs/arm/armgeneralsettingsgroup_v8.cpp \
- $$PWD/archs/arm/armlinkersettingsgroup_v8.cpp \
+ $$PWD/archs/arm/armlinkersettingsgroup_v8.cpp
# For AVR architecture.
@@ -73,7 +68,7 @@ HEADERS += \
$$PWD/archs/avr/avrbuildconfigurationgroup_v7.h \
$$PWD/archs/avr/avrcompilersettingsgroup_v7.h \
$$PWD/archs/avr/avrgeneralsettingsgroup_v7.h \
- $$PWD/archs/avr/avrlinkersettingsgroup_v7.h \
+ $$PWD/archs/avr/avrlinkersettingsgroup_v7.h
SOURCES += \
$$PWD/archs/avr/avrarchiversettingsgroup_v7.cpp \
@@ -81,7 +76,7 @@ SOURCES += \
$$PWD/archs/avr/avrbuildconfigurationgroup_v7.cpp \
$$PWD/archs/avr/avrcompilersettingsgroup_v7.cpp \
$$PWD/archs/avr/avrgeneralsettingsgroup_v7.cpp \
- $$PWD/archs/avr/avrlinkersettingsgroup_v7.cpp \
+ $$PWD/archs/avr/avrlinkersettingsgroup_v7.cpp
# For MCS51 architecture.
@@ -91,7 +86,7 @@ HEADERS += \
$$PWD/archs/mcs51/mcs51buildconfigurationgroup_v10.h \
$$PWD/archs/mcs51/mcs51compilersettingsgroup_v10.h \
$$PWD/archs/mcs51/mcs51generalsettingsgroup_v10.h \
- $$PWD/archs/mcs51/mcs51linkersettingsgroup_v10.h \
+ $$PWD/archs/mcs51/mcs51linkersettingsgroup_v10.h
SOURCES += \
$$PWD/archs/mcs51/mcs51archiversettingsgroup_v10.cpp \
@@ -99,4 +94,4 @@ SOURCES += \
$$PWD/archs/mcs51/mcs51buildconfigurationgroup_v10.cpp \
$$PWD/archs/mcs51/mcs51compilersettingsgroup_v10.cpp \
$$PWD/archs/mcs51/mcs51generalsettingsgroup_v10.cpp \
- $$PWD/archs/mcs51/mcs51linkersettingsgroup_v10.cpp \
+ $$PWD/archs/mcs51/mcs51linkersettingsgroup_v10.cpp
diff --git a/src/plugins/generator/iarew/iarew.qbs b/src/plugins/generator/iarew/iarew.qbs
index e7d69f60b..46ab43160 100644
--- a/src/plugins/generator/iarew/iarew.qbs
+++ b/src/plugins/generator/iarew/iarew.qbs
@@ -21,10 +21,6 @@ QbsPlugin {
"iarewproject.h",
"iarewprojectwriter.cpp",
"iarewprojectwriter.h",
- "iarewproperty.cpp",
- "iarewproperty.h",
- "iarewpropertygroup.cpp",
- "iarewpropertygroup.h",
"iarewsettingspropertygroup.cpp",
"iarewsettingspropertygroup.h",
"iarewsourcefilepropertygroup.cpp",
@@ -41,7 +37,6 @@ QbsPlugin {
"iarewworkspace.h",
"iarewworkspacewriter.cpp",
"iarewworkspacewriter.h",
- "iiarewnodevisitor.h",
]
}
Group {
diff --git a/src/plugins/generator/iarew/iarewfileversionproperty.h b/src/plugins/generator/iarew/iarewfileversionproperty.h
index b9116b299..d377979fa 100644
--- a/src/plugins/generator/iarew/iarewfileversionproperty.h
+++ b/src/plugins/generator/iarew/iarewfileversionproperty.h
@@ -31,16 +31,17 @@
#ifndef QBS_IAREWFILEVERSIONPROPERTY_H
#define QBS_IAREWFILEVERSIONPROPERTY_H
-#include "iarewproperty.h"
+#include <generators/xmlproperty.h>
namespace qbs {
class IarewVersionInfo;
-class IarewFileVersionProperty final : public IarewProperty
+class IarewFileVersionProperty final : public gen::xml::Property
{
public:
- explicit IarewFileVersionProperty(const IarewVersionInfo &versionInfo);
+ explicit IarewFileVersionProperty(
+ const IarewVersionInfo &versionInfo);
};
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewgenerator.cpp b/src/plugins/generator/iarew/iarewgenerator.cpp
index ca69dcc68..e6b308182 100644
--- a/src/plugins/generator/iarew/iarewgenerator.cpp
+++ b/src/plugins/generator/iarew/iarewgenerator.cpp
@@ -147,11 +147,12 @@ void IarewGenerator::visitProduct(const GeneratableProject &project,
Q_UNUSED(projectData);
const QString projectFilePath = targetFilePath(
productData, project.baseBuildDirectory().absolutePath());
- const auto targetProject = std::make_shared<IarewProject>(project, productData,
- m_versionInfo);
+ const auto targetProject = std::make_shared<IarewProject>(
+ project, productData,
+ m_versionInfo);
m_projects.insert({projectFilePath, targetProject});
- m_workspace->addProjectPath(projectFilePath);
+ m_workspace->addProject(projectFilePath);
}
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewoptionpropertygroup.cpp b/src/plugins/generator/iarew/iarewoptionpropertygroup.cpp
index e65182c68..86f12016b 100644
--- a/src/plugins/generator/iarew/iarewoptionpropertygroup.cpp
+++ b/src/plugins/generator/iarew/iarewoptionpropertygroup.cpp
@@ -29,27 +29,29 @@
****************************************************************************/
#include "iarewoptionpropertygroup.h"
-#include "iarewproperty.h"
namespace qbs {
IarewOptionPropertyGroup::IarewOptionPropertyGroup(
QByteArray name, QVariant version,
const QVariantList &states)
- : IarewPropertyGroup(QByteArrayLiteral("option"))
+ : gen::xml::PropertyGroup(QByteArrayLiteral("option"))
{
// Append name property item.
- appendChild<IarewProperty>(QByteArrayLiteral("name"), std::move(name));
+ appendChild<gen::xml::Property>(QByteArrayLiteral("name"),
+ std::move(name));
// Append version property item.
if (!version.isNull())
- appendChild<IarewProperty>(QByteArrayLiteral("version"), std::move(version));
+ appendChild<gen::xml::Property>(QByteArrayLiteral("version"),
+ std::move(version));
// Append state property items.
for (const auto &state : states) {
if (state.isNull())
continue;
- appendChild<IarewProperty>(QByteArrayLiteral("state"), std::move(state));
+ appendChild<gen::xml::Property>(QByteArrayLiteral("state"),
+ std::move(state));
}
}
diff --git a/src/plugins/generator/iarew/iarewoptionpropertygroup.h b/src/plugins/generator/iarew/iarewoptionpropertygroup.h
index e562e7f74..272ee57e4 100644
--- a/src/plugins/generator/iarew/iarewoptionpropertygroup.h
+++ b/src/plugins/generator/iarew/iarewoptionpropertygroup.h
@@ -31,17 +31,19 @@
#ifndef QBS_IAREWOPTIONPROPERTYGROUP_H
#define QBS_IAREWOPTIONPROPERTYGROUP_H
-#include "iarewpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
-#include <QtCore/qvariant.h>
+//#include <QtCore/qvariant.h>
namespace qbs {
-class IarewOptionPropertyGroup final : public IarewPropertyGroup
+class IarewOptionPropertyGroup final
+ : public gen::xml::PropertyGroup
{
public:
- explicit IarewOptionPropertyGroup(QByteArray name, QVariant version,
- const QVariantList &states);
+ explicit IarewOptionPropertyGroup(
+ QByteArray name, QVariant version,
+ const QVariantList &states);
};
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewproject.cpp b/src/plugins/generator/iarew/iarewproject.cpp
index ee3775798..7fbad251f 100644
--- a/src/plugins/generator/iarew/iarewproject.cpp
+++ b/src/plugins/generator/iarew/iarewproject.cpp
@@ -33,7 +33,6 @@
#include "iarewsourcefilespropertygroup.h"
#include "iarewutils.h"
#include "iarewversioninfo.h"
-#include "iiarewnodevisitor.h"
#include "archs/arm/armbuildconfigurationgroup_v8.h"
#include "archs/avr/avrbuildconfigurationgroup_v7.h"
@@ -65,28 +64,30 @@ IarewProject::IarewProject(const GeneratableProject &genProject,
const int configsCount = std::max(genProject.projects.size(),
genProduct.data.size());
for (auto configIndex = 0; configIndex < configsCount; ++configIndex) {
- const Project qbsProject = genProject.projects.values().at(configIndex);
+ const qbs::Project qbsProject = genProject.projects
+ .values().at(configIndex);
const ProductData qbsProduct = genProduct.data.values().at(configIndex);
- const QString confName = IarewUtils::buildConfigurationName(qbsProject);
- const std::vector<ProductData> qbsProductDeps = IarewUtils::dependenciesOf
+ const QString confName = gen::utils::buildConfigurationName(qbsProject);
+ const std::vector<ProductData> qbsProductDeps = gen::utils::dependenciesOf
(qbsProduct, genProject, confName);
- const auto arch = IarewUtils::architecture(qbsProject);
- if (arch == IarewUtils::Architecture::UnknownArchitecture)
+ const auto arch = gen::utils::architecture(qbsProject);
+ if (arch == gen::utils::Architecture::Unknown)
throw ErrorInfo(Internal::Tr::tr("Target architecture is not set,"
" please use the 'profile' option"));
// Construct the build configuration item, which are depend from
// the architecture and the version.
const auto factoryEnd = m_factories.cend();
- const auto factoryIt = std::find_if(m_factories.cbegin(), factoryEnd,
- [arch, versionInfo](const auto &factory) {
+ const auto factoryIt = std::find_if(
+ m_factories.cbegin(), factoryEnd,
+ [arch, versionInfo](const auto &factory) {
return factory->canCreate(arch, versionInfo.version());
});
if (factoryIt == factoryEnd) {
throw ErrorInfo(Internal::Tr::tr("Incompatible target architecture '%1'"
" for IAR EW version %2xxx")
- .arg(IarewUtils::architectureName(arch))
+ .arg(gen::utils::architectureName(arch))
.arg(versionInfo.marketingVersion()));
}
auto configGroup = (*factoryIt)->create(
@@ -120,14 +121,4 @@ IarewProject::IarewProject(const GeneratableProject &genProject,
}
}
-void IarewProject::accept(IIarewNodeVisitor *visitor) const
-{
- visitor->visitStart(this);
-
- for (const auto &child : children())
- child->accept(visitor);
-
- visitor->visitEnd(this);
-}
-
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewproject.h b/src/plugins/generator/iarew/iarewproject.h
index 642407bab..567a58c55 100644
--- a/src/plugins/generator/iarew/iarewproject.h
+++ b/src/plugins/generator/iarew/iarewproject.h
@@ -31,10 +31,9 @@
#ifndef QBS_IAREWPROJECT_H
#define QBS_IAREWPROJECT_H
-#include "iarewproperty.h"
-#include "iarewpropertygroup.h"
-
#include <generators/generatordata.h>
+#include <generators/xmlproject.h>
+#include <generators/xmlpropertygroup.h>
#include <memory>
@@ -42,16 +41,14 @@ namespace qbs {
class IarewVersionInfo;
-class IarewProject final : public IarewProperty
+class IarewProject final : public gen::xml::Project
{
public:
explicit IarewProject(const GeneratableProject &genProject,
const GeneratableProductData &genProduct,
const IarewVersionInfo &versionInfo);
- void accept(IIarewNodeVisitor *visitor) const final;
-
private:
- std::vector<std::unique_ptr<IarewPropertyGroupFactory>> m_factories;
+ std::vector<std::unique_ptr<gen::xml::PropertyGroupFactory>> m_factories;
};
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewprojectwriter.cpp b/src/plugins/generator/iarew/iarewprojectwriter.cpp
index 046a2b374..a1c912a8c 100644
--- a/src/plugins/generator/iarew/iarewprojectwriter.cpp
+++ b/src/plugins/generator/iarew/iarewprojectwriter.cpp
@@ -28,66 +28,25 @@
**
****************************************************************************/
-#include "iarewproject.h"
#include "iarewprojectwriter.h"
-#include "iarewproperty.h"
-#include "iarewpropertygroup.h"
-
-#include <ostream>
namespace qbs {
IarewProjectWriter::IarewProjectWriter(std::ostream *device)
- : m_device(device)
-{
- m_writer.reset(new QXmlStreamWriter(&m_buffer));
- m_writer->setAutoFormatting(true);
-}
-
-bool IarewProjectWriter::write(const IarewProject *project)
+ : gen::xml::ProjectWriter(device)
{
- m_buffer.clear();
- m_writer->writeStartDocument();
- project->accept(this);
- m_writer->writeEndDocument();
- if (m_writer->hasError())
- return false;
- m_device->write(&*std::begin(m_buffer), m_buffer.size());
- return m_device->good();
}
-void IarewProjectWriter::visitStart(const IarewProject *project)
+void IarewProjectWriter::visitStart(const gen::xml::Project *project)
{
Q_UNUSED(project)
- m_writer->writeStartElement(QStringLiteral("project"));
+ writer()->writeStartElement(QStringLiteral("project"));
}
-void IarewProjectWriter::visitEnd(const IarewProject *project)
+void IarewProjectWriter::visitEnd(const gen::xml::Project *project)
{
Q_UNUSED(project)
- m_writer->writeEndElement();
-}
-
-void IarewProjectWriter::visitStart(const IarewProperty *property)
-{
- const QString stringValue = property->value().toString();
- m_writer->writeTextElement(QString::fromUtf8(property->name()), stringValue);
-}
-
-void IarewProjectWriter::visitEnd(const IarewProperty *property)
-{
- Q_UNUSED(property)
-}
-
-void IarewProjectWriter::visitStart(const IarewPropertyGroup *propertyGroup)
-{
- m_writer->writeStartElement(QString::fromUtf8(propertyGroup->name()));
-}
-
-void IarewProjectWriter::visitEnd(const IarewPropertyGroup *propertyGroup)
-{
- Q_UNUSED(propertyGroup)
- m_writer->writeEndElement();
+ writer()->writeEndElement();
}
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewprojectwriter.h b/src/plugins/generator/iarew/iarewprojectwriter.h
index db4c1c840..ae425b29e 100644
--- a/src/plugins/generator/iarew/iarewprojectwriter.h
+++ b/src/plugins/generator/iarew/iarewprojectwriter.h
@@ -31,32 +31,19 @@
#ifndef QBS_IAREWPROJECTWRITER_H
#define QBS_IAREWPROJECTWRITER_H
-#include "iiarewnodevisitor.h"
+#include <generators/xmlprojectwriter.h>
namespace qbs {
-class IarewProject;
-
-class IarewProjectWriter final : public IIarewNodeVisitor
+class IarewProjectWriter final : public gen::xml::ProjectWriter
{
Q_DISABLE_COPY(IarewProjectWriter)
public:
explicit IarewProjectWriter(std::ostream *device);
- bool write(const IarewProject *project);
private:
- void visitStart(const IarewProject *project) final;
- void visitEnd(const IarewProject *project) final;
-
- void visitStart(const IarewProperty *property) final;
- void visitEnd(const IarewProperty *property) final;
-
- void visitStart(const IarewPropertyGroup *propertyGroup) final;
- void visitEnd(const IarewPropertyGroup *propertyGroup) final;
-
- std::ostream *m_device = nullptr;
- QByteArray m_buffer;
- std::unique_ptr<QXmlStreamWriter> m_writer;
+ void visitStart(const gen::xml::Project *project) final;
+ void visitEnd(const gen::xml::Project *project) final;
};
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewsettingspropertygroup.cpp b/src/plugins/generator/iarew/iarewsettingspropertygroup.cpp
index e51cd317a..de6fae45a 100644
--- a/src/plugins/generator/iarew/iarewsettingspropertygroup.cpp
+++ b/src/plugins/generator/iarew/iarewsettingspropertygroup.cpp
@@ -29,7 +29,6 @@
****************************************************************************/
#include "iarewoptionpropertygroup.h"
-#include "iarewproperty.h"
#include "iarewsettingspropertygroup.h"
namespace qbs {
@@ -37,28 +36,30 @@ namespace qbs {
constexpr int kDataWantNonLocalPropertyValue = 1;
IarewSettingsPropertyGroup::IarewSettingsPropertyGroup()
- : IarewPropertyGroup(QByteArrayLiteral("settings"))
+ : gen::xml::PropertyGroup(QByteArrayLiteral("settings"))
{
// Append name property item.
- m_nameProperty = appendChild<IarewProperty>(
+ m_nameProperty = appendChild<gen::xml::Property>(
QByteArrayLiteral("name"), QVariant{});
// Append archive version property item.
- m_archiveVersionProperty = appendChild<IarewProperty>(
+ m_archiveVersionProperty = appendChild<gen::xml::Property>(
QByteArrayLiteral("archiveVersion"), QVariant{});
// Append data property group item.
- m_dataPropertyGroup = appendChild<IarewPropertyGroup>(
+ m_dataPropertyGroup = appendChild<gen::xml::PropertyGroup>(
QByteArrayLiteral("data"));
// Append data version property item.
- m_dataVersionProperty = m_dataPropertyGroup->appendChild<IarewProperty>(
+ m_dataVersionProperty = m_dataPropertyGroup->appendChild<
+ gen::xml::Property>(
QByteArrayLiteral("version"), QVariant{});
// Append data want non-local property item.
- m_dataPropertyGroup->appendChild<IarewProperty>(
+ m_dataPropertyGroup->appendChild<gen::xml::Property>(
QByteArrayLiteral("wantNonLocal"),
kDataWantNonLocalPropertyValue);
// Append data debug property item.
- m_dataDebugProperty = m_dataPropertyGroup->appendChild<IarewProperty>(
+ m_dataDebugProperty = m_dataPropertyGroup->appendChild<
+ gen::xml::Property>(
QByteArrayLiteral("debug"), QVariant{});
}
@@ -72,7 +73,8 @@ QByteArray IarewSettingsPropertyGroup::name() const
return m_nameProperty->value().toByteArray();
}
-void IarewSettingsPropertyGroup::setArchiveVersion(int archiveVersion)
+void IarewSettingsPropertyGroup::setArchiveVersion(
+ int archiveVersion)
{
m_archiveVersionProperty->setValue(archiveVersion);
}
@@ -92,9 +94,10 @@ void IarewSettingsPropertyGroup::setDataDebugInfo(int debugInfo)
m_dataDebugProperty->setValue(debugInfo);
}
-void IarewSettingsPropertyGroup::addOptionsGroup(QByteArray name,
- QVariant version,
- const QVariantList &states)
+void IarewSettingsPropertyGroup::addOptionsGroup(
+ QByteArray name,
+ QVariant version,
+ const QVariantList &states)
{
m_dataPropertyGroup->appendChild<IarewOptionPropertyGroup>(
std::move(name), std::move(version), states);
diff --git a/src/plugins/generator/iarew/iarewsettingspropertygroup.h b/src/plugins/generator/iarew/iarewsettingspropertygroup.h
index aca90492a..79de48018 100644
--- a/src/plugins/generator/iarew/iarewsettingspropertygroup.h
+++ b/src/plugins/generator/iarew/iarewsettingspropertygroup.h
@@ -31,11 +31,11 @@
#ifndef QBS_IAREWSETTINGSPROPERTYGROUP_H
#define QBS_IAREWSETTINGSPROPERTYGROUP_H
-#include "iarewpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
namespace qbs {
-class IarewSettingsPropertyGroup : public IarewPropertyGroup
+class IarewSettingsPropertyGroup : public gen::xml::PropertyGroup
{
public:
explicit IarewSettingsPropertyGroup();
@@ -55,12 +55,12 @@ protected:
private:
// Don't delete all this RAW pointers explicitly!
- IarewProperty *m_nameProperty = nullptr;
- IarewProperty *m_archiveVersionProperty = nullptr;
+ gen::xml::Property *m_nameProperty = nullptr;
+ gen::xml::Property *m_archiveVersionProperty = nullptr;
- IarewProperty *m_dataPropertyGroup = nullptr;
- IarewProperty *m_dataVersionProperty = nullptr;
- IarewProperty *m_dataDebugProperty = nullptr;
+ gen::xml::Property *m_dataPropertyGroup = nullptr;
+ gen::xml::Property *m_dataVersionProperty = nullptr;
+ gen::xml::Property *m_dataDebugProperty = nullptr;
};
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewsourcefilepropertygroup.cpp b/src/plugins/generator/iarew/iarewsourcefilepropertygroup.cpp
index e7b09484c..33c26e8b8 100644
--- a/src/plugins/generator/iarew/iarewsourcefilepropertygroup.cpp
+++ b/src/plugins/generator/iarew/iarewsourcefilepropertygroup.cpp
@@ -28,8 +28,8 @@
**
****************************************************************************/
-#include "iarewproperty.h"
#include "iarewsourcefilepropertygroup.h"
+#include "iarewutils.h"
#include <generators/generatordata.h>
@@ -40,13 +40,15 @@ namespace qbs {
IarewSourceFilePropertyGroup::IarewSourceFilePropertyGroup(
const GeneratableProject &genProject,
const ArtifactData &sourceArtifact)
- : IarewPropertyGroup(QByteArrayLiteral("file"))
+ : gen::xml::PropertyGroup(QByteArrayLiteral("file"))
{
// Create file path property item.
const QString fullFilePath = sourceArtifact.filePath();
const QString relativeFilePath = IarewUtils::projectRelativeFilePath(
- genProject.baseBuildDirectory().absolutePath(), fullFilePath);
- appendChild<IarewProperty>(QByteArrayLiteral("name"), relativeFilePath);
+ genProject.baseBuildDirectory().absolutePath(),
+ fullFilePath);
+ appendChild<gen::xml::Property>(QByteArrayLiteral("name"),
+ relativeFilePath);
}
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewsourcefilepropertygroup.h b/src/plugins/generator/iarew/iarewsourcefilepropertygroup.h
index dd714929f..5f88cec27 100644
--- a/src/plugins/generator/iarew/iarewsourcefilepropertygroup.h
+++ b/src/plugins/generator/iarew/iarewsourcefilepropertygroup.h
@@ -31,18 +31,20 @@
#ifndef QBS_IAREWSOURCEFILEPROPERTYGROUP_H
#define QBS_IAREWSOURCEFILEPROPERTYGROUP_H
-#include "iarewpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
namespace qbs {
class ArtifactData;
class GeneratableProject;
-class IarewSourceFilePropertyGroup final : public IarewPropertyGroup
+class IarewSourceFilePropertyGroup final
+ : public gen::xml::PropertyGroup
{
public:
- explicit IarewSourceFilePropertyGroup(const GeneratableProject &genProject,
- const ArtifactData &sourceArtifact);
+ explicit IarewSourceFilePropertyGroup(
+ const GeneratableProject &genProject,
+ const ArtifactData &sourceArtifact);
};
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewsourcefilespropertygroup.cpp b/src/plugins/generator/iarew/iarewsourcefilespropertygroup.cpp
index b87693bce..adb5925b2 100644
--- a/src/plugins/generator/iarew/iarewsourcefilespropertygroup.cpp
+++ b/src/plugins/generator/iarew/iarewsourcefilespropertygroup.cpp
@@ -28,7 +28,6 @@
**
****************************************************************************/
-#include "iarewproperty.h"
#include "iarewsourcefilepropertygroup.h"
#include "iarewsourcefilespropertygroup.h"
@@ -42,14 +41,16 @@ IarewSourceFilesPropertyGroup::IarewSourceFilesPropertyGroup(
const GeneratableProject &genProject,
const QString &filesGroupName,
const QList<ArtifactData> &sourceFiles)
- : IarewPropertyGroup(QByteArrayLiteral("group"))
+ : gen::xml::PropertyGroup(QByteArrayLiteral("group"))
{
// Create group name property item.
- appendChild<IarewProperty>(QByteArrayLiteral("name"), filesGroupName);
+ appendChild<gen::xml::Property>(QByteArrayLiteral("name"),
+ filesGroupName);
// Create file paths property items.
for (const auto &sourceFile : sourceFiles)
- appendChild<IarewSourceFilePropertyGroup>(genProject, sourceFile);
+ appendChild<IarewSourceFilePropertyGroup>(genProject,
+ sourceFile);
}
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewsourcefilespropertygroup.h b/src/plugins/generator/iarew/iarewsourcefilespropertygroup.h
index ed6a604b0..8d8a4be0c 100644
--- a/src/plugins/generator/iarew/iarewsourcefilespropertygroup.h
+++ b/src/plugins/generator/iarew/iarewsourcefilespropertygroup.h
@@ -31,18 +31,18 @@
#ifndef QBS_IAREWSOURCEFILESPROPERTYGROUP_H
#define QBS_IAREWSOURCEFILESPROPERTYGROUP_H
-#include "iarewpropertygroup.h"
-
-#include <generators/generatordata.h>
+#include <generators/xmlpropertygroup.h>
namespace qbs {
-class IarewSourceFilesPropertyGroup final : public IarewPropertyGroup
+class IarewSourceFilesPropertyGroup final
+ : public gen::xml::PropertyGroup
{
public:
- explicit IarewSourceFilesPropertyGroup(const GeneratableProject &genProject,
- const QString &filesGroupName,
- const QList<ArtifactData> &sourceFiles);
+ explicit IarewSourceFilesPropertyGroup(
+ const GeneratableProject &genProject,
+ const QString &filesGroupName,
+ const QList<ArtifactData> &sourceFiles);
};
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewtoolchainpropertygroup.cpp b/src/plugins/generator/iarew/iarewtoolchainpropertygroup.cpp
index dc1c812e1..dba5015bf 100644
--- a/src/plugins/generator/iarew/iarewtoolchainpropertygroup.cpp
+++ b/src/plugins/generator/iarew/iarewtoolchainpropertygroup.cpp
@@ -29,13 +29,12 @@
****************************************************************************/
#include "iarewtoolchainpropertygroup.h"
-#include "iarewproperty.h"
namespace qbs {
IarewToolchainPropertyGroup::IarewToolchainPropertyGroup(
const QByteArray &toolchainName)
- : IarewPropertyGroup(QByteArrayLiteral("toolchain"))
+ : gen::xml::PropertyGroup(QByteArrayLiteral("toolchain"))
{
// Append toolchain name property item.
appendProperty(QByteArrayLiteral("name"), toolchainName);
diff --git a/src/plugins/generator/iarew/iarewtoolchainpropertygroup.h b/src/plugins/generator/iarew/iarewtoolchainpropertygroup.h
index a4271b99b..e5bd6f071 100644
--- a/src/plugins/generator/iarew/iarewtoolchainpropertygroup.h
+++ b/src/plugins/generator/iarew/iarewtoolchainpropertygroup.h
@@ -31,14 +31,16 @@
#ifndef QBS_IAREWTOOLCHAINPROPERTYGROUP_H
#define QBS_IAREWTOOLCHAINPROPERTYGROUP_H
-#include "iarewpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
namespace qbs {
-class IarewToolchainPropertyGroup final : public IarewPropertyGroup
+class IarewToolchainPropertyGroup final
+ : public gen::xml::PropertyGroup
{
public:
- explicit IarewToolchainPropertyGroup(const QByteArray &toolchainName);
+ explicit IarewToolchainPropertyGroup(
+ const QByteArray &toolchainName);
};
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewutils.cpp b/src/plugins/generator/iarew/iarewutils.cpp
index a24e48490..da6237df7 100644
--- a/src/plugins/generator/iarew/iarewutils.cpp
+++ b/src/plugins/generator/iarew/iarewutils.cpp
@@ -30,53 +30,11 @@
#include "iarewutils.h"
+#include <generators/generatorutils.h>
+
namespace qbs {
namespace IarewUtils {
-QString architectureName(Architecture arch)
-{
- switch (arch) {
- case Architecture::ArmArchitecture:
- return QStringLiteral("arm");
- case Architecture::AvrArchitecture:
- return QStringLiteral("avr");
- case Architecture::Mcs51Architecture:
- return QStringLiteral("mcs51");
- default:
- return QStringLiteral("unknown");
- }
-}
-
-Architecture architecture(const Project &qbsProject)
-{
- const auto qbsArch = qbsProject.projectConfiguration()
- .value(Internal::StringConstants::qbsModule()).toMap()
- .value(QStringLiteral("architecture")).toString();
-
- if (qbsArch == QLatin1String("arm"))
- return Architecture::ArmArchitecture;
- if (qbsArch == QLatin1String("avr"))
- return Architecture::AvrArchitecture;
- if (qbsArch == QLatin1String("mcs51"))
- return Architecture::Mcs51Architecture;
- return Architecture::UnknownArchitecture;
-}
-
-QString buildConfigurationName(const Project &qbsProject)
-{
- return qbsProject.projectConfiguration()
- .value(Internal::StringConstants::qbsModule()).toMap()
- .value(QStringLiteral("configurationName")).toString();
-}
-
-int debugInformation(const ProductData &qbsProduct)
-{
- return qbsProduct.moduleProperties().getModuleProperty(
- Internal::StringConstants::qbsModule(),
- QStringLiteral("debugInformation"))
- .toInt();
-}
-
QString toolkitRootPath(const ProductData &qbsProduct)
{
QDir dir(qbsProduct.moduleProperties()
@@ -97,93 +55,18 @@ QString clibToolkitRootPath(const ProductData &qbsProduct)
return toolkitRootPath(qbsProduct) + QLatin1String("/lib/clib");
}
-QString buildRootPath(const Project &qbsProject)
-{
- QDir dir(qbsProject.projectData().buildDirectory());
- dir.cdUp();
- return dir.absolutePath();
-}
-
-QString relativeFilePath(const QString &baseDirectory,
- const QString &fullFilePath)
-{
- return QDir(baseDirectory).relativeFilePath(fullFilePath);
-}
-
QString toolkitRelativeFilePath(const QString &basePath,
const QString &fullFilePath)
{
return QLatin1String("$TOOLKIT_DIR$/")
- + IarewUtils::relativeFilePath(basePath, fullFilePath);
+ + gen::utils::relativeFilePath(basePath, fullFilePath);
}
QString projectRelativeFilePath(const QString &basePath,
const QString &fullFilePath)
{
return QLatin1String("$PROJ_DIR$/")
- + IarewUtils::relativeFilePath(basePath, fullFilePath);
-}
-
-QString binaryOutputDirectory(const QString &baseDirectory,
- const ProductData &qbsProduct)
-{
- return QDir(baseDirectory).relativeFilePath(qbsProduct.buildDirectory())
- + QLatin1String("/bin");
-}
-
-QString objectsOutputDirectory(const QString &baseDirectory,
- const ProductData &qbsProduct)
-{
- return QDir(baseDirectory).relativeFilePath(qbsProduct.buildDirectory())
- + QLatin1String("/obj");
-}
-
-QString listingOutputDirectory(const QString &baseDirectory,
- const ProductData &qbsProduct)
-{
- return QDir(baseDirectory).relativeFilePath(qbsProduct.buildDirectory())
- + QLatin1String("/lst");
-}
-
-std::vector<ProductData> dependenciesOf(const ProductData &qbsProduct,
- const GeneratableProject &genProject,
- const QString configurationName)
-{
- std::vector<ProductData> result;
- const auto depsNames = qbsProduct.dependencies();
- for (const auto &product : qAsConst(genProject.products)) {
- const auto pt = product.type();
- if (!pt.contains(QLatin1String("staticlibrary")))
- continue;
- const auto pn = product.name();
- if (!depsNames.contains(pn))
- continue;
- result.push_back(product.data.value(configurationName));
- }
- return result;
-}
-
-QString targetBinary(const ProductData &qbsProduct)
-{
- const auto type = qbsProduct.type();
- if (type.contains(QLatin1String("application"))) {
- return QFileInfo(qbsProduct.targetExecutable()).fileName();
- } else if (type.contains(QLatin1String("staticlibrary"))) {
- const auto artifacts = qbsProduct.targetArtifacts();
- for (const auto &artifact : artifacts) {
- if (artifact.fileTags().contains(QLatin1String("staticlibrary")))
- return QFileInfo(artifact.filePath()).fileName();
- }
- }
-
- return {};
-}
-
-QString targetBinaryPath(const QString &baseDirectory,
- const ProductData &qbsProduct)
-{
- return binaryOutputDirectory(baseDirectory, qbsProduct)
- + QLatin1Char('/') + targetBinary(qbsProduct);
+ + gen::utils::relativeFilePath(basePath, fullFilePath);
}
OutputBinaryType outputBinaryType(const ProductData &qbsProduct)
@@ -196,49 +79,6 @@ OutputBinaryType outputBinaryType(const ProductData &qbsProduct)
return ApplicationOutputType;
}
-QString cppStringModuleProperty(const PropertyMap &qbsProps,
- const QString &propertyName)
-{
- return qbsProps.getModuleProperty(Internal::StringConstants::cppModule(),
- propertyName).toString();
-}
-
-bool cppBooleanModuleProperty(const PropertyMap &qbsProps,
- const QString &propertyName)
-{
- return qbsProps.getModuleProperty(Internal::StringConstants::cppModule(),
- propertyName).toBool();
-}
-
-int cppIntegerModuleProperty(const PropertyMap &qbsProps,
- const QString &propertyName)
-{
- return qbsProps.getModuleProperty(Internal::StringConstants::cppModule(),
- propertyName).toInt();
-}
-
-QStringList cppStringModuleProperties(const PropertyMap &qbsProps,
- const QStringList &propertyNames)
-{
- QStringList properties;
- for (const auto &propertyName : propertyNames) {
- properties << qbsProps.getModuleProperty(Internal::StringConstants::cppModule(),
- propertyName).toStringList();
- }
- return properties;
-}
-
-QVariantList cppVariantModuleProperties(const PropertyMap &qbsProps,
- const QStringList &propertyNames)
-{
- QVariantList properties;
- for (const auto &propertyName : propertyNames) {
- properties << qbsProps.getModuleProperty(Internal::StringConstants::cppModule(),
- propertyName).toList();
- }
- return properties;
-}
-
QString flagValue(const QStringList &flags, const QString &flagKey)
{
// Seach for full 'flagKey' option matching.
@@ -288,7 +128,7 @@ QVariantList flagValues(const QStringList &flags, const QString &flagKey)
QStringList cppModuleCompilerFlags(const PropertyMap &qbsProps)
{
- return cppStringModuleProperties(
+ return gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("driverFlags"), QStringLiteral("cFlags"),
QStringLiteral("cppFlags"), QStringLiteral("cxxFlags"),
QStringLiteral("commonCompilerFlags")});
@@ -296,13 +136,13 @@ QStringList cppModuleCompilerFlags(const PropertyMap &qbsProps)
QStringList cppModuleAssemblerFlags(const PropertyMap &qbsProps)
{
- return cppStringModuleProperties(
+ return gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("assemblerFlags")});
}
QStringList cppModuleLinkerFlags(const PropertyMap &qbsProps)
{
- return cppStringModuleProperties(
+ return gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("driverFlags"),
QStringLiteral("driverLinkerFlags")});
}
diff --git a/src/plugins/generator/iarew/iarewutils.h b/src/plugins/generator/iarew/iarewutils.h
index c0adf3a9e..6599c27e3 100644
--- a/src/plugins/generator/iarew/iarewutils.h
+++ b/src/plugins/generator/iarew/iarewutils.h
@@ -38,20 +38,12 @@
namespace qbs {
namespace IarewUtils {
-enum class Architecture {
- ArmArchitecture,
- AvrArchitecture,
- Mcs51Architecture,
- UnknownArchitecture
+enum OutputBinaryType {
+ ApplicationOutputType,
+ LibraryOutputType
};
-QString architectureName(Architecture arch);
-
-Architecture architecture(const Project &qbsProject);
-
-QString buildConfigurationName(const Project &qbsProject);
-
-int debugInformation(const ProductData &qbsProduct);
+OutputBinaryType outputBinaryType(const ProductData &qbsProduct);
QString toolkitRootPath(const ProductData &qbsProduct);
@@ -59,54 +51,12 @@ QString dlibToolkitRootPath(const ProductData &qbsProduct);
QString clibToolkitRootPath(const ProductData &qbsProduct);
-QString buildRootPath(const Project &qbsProject);
-
-QString relativeFilePath(const QString &baseDirectory,
- const QString &fullFilePath);
-
QString toolkitRelativeFilePath(const QString &basePath,
const QString &fullFilePath);
QString projectRelativeFilePath(const QString &basePath,
const QString &fullFilePath);
-QString binaryOutputDirectory(const QString &baseDirectory,
- const ProductData &qbsProduct);
-
-QString objectsOutputDirectory(const QString &baseDirectory,
- const ProductData &qbsProduct);
-
-QString listingOutputDirectory(const QString &baseDirectory,
- const ProductData &qbsProduct);
-
-std::vector<ProductData> dependenciesOf(const ProductData &qbsProduct,
- const GeneratableProject &genProject,
- const QString configurationName);
-
-QString targetBinary(const ProductData &qbsProduct);
-
-QString targetBinaryPath(const QString &baseDirectory,
- const ProductData &qbsProduct);
-
-enum OutputBinaryType { ApplicationOutputType, LibraryOutputType };
-
-OutputBinaryType outputBinaryType(const ProductData &qbsProduct);
-
-QString cppStringModuleProperty(const PropertyMap &qbsProps,
- const QString &propertyName);
-
-bool cppBooleanModuleProperty(const PropertyMap &qbsProps,
- const QString &propertyName);
-
-int cppIntegerModuleProperty(const PropertyMap &qbsProps,
- const QString &propertyName);
-
-QStringList cppStringModuleProperties(const PropertyMap &qbsProps,
- const QStringList &propertyNames);
-
-QVariantList cppVariantModuleProperties(const PropertyMap &qbsProps,
- const QStringList &propertyNames);
-
QString flagValue(const QStringList &flags, const QString &flagKey);
QVariantList flagValues(const QStringList &flags, const QString &flagKey);
diff --git a/src/plugins/generator/iarew/iarewversioninfo.cpp b/src/plugins/generator/iarew/iarewversioninfo.cpp
index f0293b998..7191948ad 100644
--- a/src/plugins/generator/iarew/iarewversioninfo.cpp
+++ b/src/plugins/generator/iarew/iarewversioninfo.cpp
@@ -39,65 +39,37 @@
#include "iarewversioninfo.h"
-#include <tools/qbsassert.h>
-
#include <QtCore/qdebug.h>
-#include <QtCore/qglobal.h>
namespace qbs {
-IarewVersionInfo::IarewVersionInfo(const Version &version,
- const std::set<IarewUtils::Architecture> &archs)
- : m_version(version), m_archs(archs)
+IarewVersionInfo::IarewVersionInfo(
+ const Version &version,
+ const std::set<gen::utils::Architecture> &archs)
+ : gen::VersionInfo(version, archs)
{
}
std::set<IarewVersionInfo> IarewVersionInfo::knownVersions()
{
static const std::set<IarewVersionInfo> known = {
- {Version(8), {IarewUtils::Architecture::ArmArchitecture}},
- {Version(7), {IarewUtils::Architecture::AvrArchitecture}},
- {Version(10), {IarewUtils::Architecture::Mcs51Architecture}},
+ {Version(8), {gen::utils::Architecture::Arm}},
+ {Version(7), {gen::utils::Architecture::Avr}},
+ {Version(10), {gen::utils::Architecture::Mcs51}},
};
return known;
}
-bool IarewVersionInfo::operator<(const IarewVersionInfo &other) const
-{
- return m_version < other.m_version;
-}
-
-bool IarewVersionInfo::operator==(const IarewVersionInfo &other) const
-{
- return m_version == other.m_version
- && m_archs == other.m_archs;
-}
-
-Version IarewVersionInfo::version() const
-{
- return m_version;
-}
-
int IarewVersionInfo::marketingVersion() const
{
- const auto mv = m_version.majorVersion();
+ const auto mv = gen::VersionInfo::marketingVersion();
for (const IarewVersionInfo &known : knownVersions()) {
if (known.version().majorVersion() == mv)
return mv;
}
qWarning() << QStringLiteral("Unrecognized IAR EW version: ")
- << m_version.toString();
+ << version().toString();
return 0;
}
-bool IarewVersionInfo::containsArchitecture(IarewUtils::Architecture arch) const
-{
- return m_archs.find(arch) != m_archs.cend();
-}
-
-quint32 qHash(const IarewVersionInfo &info)
-{
- return qHash(info.version().toString());
-}
-
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewversioninfo.h b/src/plugins/generator/iarew/iarewversioninfo.h
index e240b65eb..4fd1b1fbc 100644
--- a/src/plugins/generator/iarew/iarewversioninfo.h
+++ b/src/plugins/generator/iarew/iarewversioninfo.h
@@ -40,37 +40,22 @@
#ifndef QBS_IAREWVERSIONINFO_H
#define QBS_IAREWVERSIONINFO_H
-#include "iarewutils.h"
-
-#include <tools/version.h>
-
-#include <set>
+#include <generators/generatorutils.h>
+#include <generators/generatorversioninfo.h>
namespace qbs {
-class IarewVersionInfo final
+class IarewVersionInfo final : public gen::VersionInfo
{
public:
IarewVersionInfo(const Version &version,
- const std::set<IarewUtils::Architecture> &archs);
-
- static std::set<IarewVersionInfo> knownVersions();
+ const std::set<gen::utils::Architecture> &archs);
- bool operator<(const IarewVersionInfo &other) const;
- bool operator==(const IarewVersionInfo &other) const;
+ int marketingVersion() const final;
- Version version() const;
- int marketingVersion() const;
-
- bool containsArchitecture(IarewUtils::Architecture arch) const;
-
-private:
- Version m_version;
- std::set<IarewUtils::Architecture> m_archs;
+ static std::set<IarewVersionInfo> knownVersions();
};
-quint32 qHash(const IarewVersionInfo &info);
-
} // namespace qbs
#endif // QBS_IAREWVERSIONINFO_H
diff --git a/src/plugins/generator/iarew/iarewworkspace.cpp b/src/plugins/generator/iarew/iarewworkspace.cpp
index 19542ebae..bfe22aea7 100644
--- a/src/plugins/generator/iarew/iarewworkspace.cpp
+++ b/src/plugins/generator/iarew/iarewworkspace.cpp
@@ -37,38 +37,27 @@
**
****************************************************************************/
-#include "iarewproperty.h"
-#include "iarewpropertygroup.h"
#include "iarewworkspace.h"
-#include "iiarewnodevisitor.h"
+
+#include <generators/xmlpropertygroup.h>
namespace qbs {
IarewWorkspace::IarewWorkspace(const QString &workspacePath)
+ : gen::xml::Workspace(workspacePath)
{
- m_baseDirectory = QFileInfo(workspacePath).absoluteDir();
-
- appendChild<IarewPropertyGroup>(QByteArrayLiteral("batchBuild"));
+ appendChild<gen::xml::PropertyGroup>(
+ QByteArrayLiteral("batchBuild"));
}
-void IarewWorkspace::addProjectPath(const QString &projectFilePath)
+void IarewWorkspace::addProject(const QString &projectFilePath)
{
const QString relativeProjectPath = QLatin1String("$WS_DIR$/")
+ m_baseDirectory.relativeFilePath(projectFilePath);
- const auto projectGroup = appendChild<IarewPropertyGroup>(
+ const auto projectGroup = appendChild<gen::xml::PropertyGroup>(
QByteArrayLiteral("project"));
projectGroup->appendProperty("path", relativeProjectPath);
}
-void IarewWorkspace::accept(IIarewNodeVisitor *visitor) const
-{
- visitor->visitStart(this);
-
- for (const auto &child : children())
- child->accept(visitor);
-
- visitor->visitEnd(this);
-}
-
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewworkspace.h b/src/plugins/generator/iarew/iarewworkspace.h
index c357ba4ff..ea14e4174 100644
--- a/src/plugins/generator/iarew/iarewworkspace.h
+++ b/src/plugins/generator/iarew/iarewworkspace.h
@@ -40,22 +40,17 @@
#ifndef QBS_IAREWWORKSPACE_H
#define QBS_IAREWWORKSPACE_H
-#include "iarewproperty.h"
+#include <generators/xmlworkspace.h>
#include <QtCore/qdir.h>
namespace qbs {
-class IarewWorkspace final : public IarewProperty
+class IarewWorkspace final : public gen::xml::Workspace
{
public:
explicit IarewWorkspace(const QString &workspacePath);
- void addProjectPath(const QString &projectPath);
-
- void accept(IIarewNodeVisitor *visitor) const final;
-
-private:
- QDir m_baseDirectory;
+ void addProject(const QString &projectPath) final;
};
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewworkspacewriter.cpp b/src/plugins/generator/iarew/iarewworkspacewriter.cpp
index bf7cdee75..8b56b7c54 100644
--- a/src/plugins/generator/iarew/iarewworkspacewriter.cpp
+++ b/src/plugins/generator/iarew/iarewworkspacewriter.cpp
@@ -28,66 +28,25 @@
**
****************************************************************************/
-#include "iarewproperty.h"
-#include "iarewpropertygroup.h"
-#include "iarewworkspace.h"
#include "iarewworkspacewriter.h"
-#include <ostream>
-
namespace qbs {
IarewWorkspaceWriter::IarewWorkspaceWriter(std::ostream *device)
- : m_device(device)
-{
- m_writer.reset(new QXmlStreamWriter(&m_buffer));
- m_writer->setAutoFormatting(true);
-}
-
-bool IarewWorkspaceWriter::write(const IarewWorkspace *workspace)
+ : gen::xml::WorkspaceWriter(device)
{
- m_buffer.clear();
- m_writer->writeStartDocument();
- workspace->accept(this);
- m_writer->writeEndDocument();
- if (m_writer->hasError())
- return false;
- m_device->write(&*std::begin(m_buffer), m_buffer.size());
- return m_device->good();
}
-void IarewWorkspaceWriter::visitStart(const IarewWorkspace *workspace)
+void IarewWorkspaceWriter::visitStart(const gen::xml::Workspace *workspace)
{
Q_UNUSED(workspace)
- m_writer->writeStartElement(QStringLiteral("workspace"));
+ writer()->writeStartElement(QStringLiteral("workspace"));
}
-void IarewWorkspaceWriter::visitEnd(const IarewWorkspace *workspace)
+void IarewWorkspaceWriter::visitEnd(const gen::xml::Workspace *workspace)
{
Q_UNUSED(workspace)
- m_writer->writeEndElement();
-}
-
-void IarewWorkspaceWriter::visitStart(const IarewProperty *property)
-{
- const QString stringValue = property->value().toString();
- m_writer->writeTextElement(QString::fromLatin1(property->name()), stringValue);
-}
-
-void IarewWorkspaceWriter::visitEnd(const IarewProperty *property)
-{
- Q_UNUSED(property)
-}
-
-void IarewWorkspaceWriter::visitStart(const IarewPropertyGroup *propertyGroup)
-{
- m_writer->writeStartElement(QString::fromLatin1(propertyGroup->name()));
-}
-
-void IarewWorkspaceWriter::visitEnd(const IarewPropertyGroup *propertyGroup)
-{
- Q_UNUSED(propertyGroup)
- m_writer->writeEndElement();
+ writer()->writeEndElement();
}
} // namespace qbs
diff --git a/src/plugins/generator/iarew/iarewworkspacewriter.h b/src/plugins/generator/iarew/iarewworkspacewriter.h
index 47457dd00..3966744fb 100644
--- a/src/plugins/generator/iarew/iarewworkspacewriter.h
+++ b/src/plugins/generator/iarew/iarewworkspacewriter.h
@@ -31,32 +31,19 @@
#ifndef QBS_IAREWWORKSPACEWRITER_H
#define QBS_IAREWWORKSPACEWRITER_H
-#include "iiarewnodevisitor.h"
+#include <generators/xmlworkspacewriter.h>
namespace qbs {
-class IarewWorkspace;
-
-class IarewWorkspaceWriter final : public IIarewNodeVisitor
+class IarewWorkspaceWriter final : public gen::xml::WorkspaceWriter
{
Q_DISABLE_COPY(IarewWorkspaceWriter)
public:
explicit IarewWorkspaceWriter(std::ostream *device);
- bool write(const IarewWorkspace *workspace);
private:
- void visitStart(const IarewWorkspace *workspace) final;
- void visitEnd(const IarewWorkspace *workspace) final;
-
- void visitStart(const IarewProperty *property) final;
- void visitEnd(const IarewProperty *property) final;
-
- void visitStart(const IarewPropertyGroup *propertyGroup) final;
- void visitEnd(const IarewPropertyGroup *propertyGroup) final;
-
- std::ostream *m_device = nullptr;
- QByteArray m_buffer;
- std::unique_ptr<QXmlStreamWriter> m_writer;
+ void visitStart(const gen::xml::Workspace *workspace) final;
+ void visitEnd(const gen::xml::Workspace *workspace) final;
};
} // namespace qbs
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51buildtargetgroup_v5.cpp b/src/plugins/generator/keiluv/archs/mcs51/mcs51buildtargetgroup_v5.cpp
index e9af55743..ce013fba5 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51buildtargetgroup_v5.cpp
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51buildtargetgroup_v5.cpp
@@ -46,24 +46,24 @@ namespace mcs51 {
namespace v5 {
Mcs51BuildTargetGroup::Mcs51BuildTargetGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct,
- const std::vector<ProductData> &qbsProductDeps)
- : KeiluvPropertyGroup("Target")
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct,
+ const std::vector<qbs::ProductData> &qbsProductDeps)
+ : gen::xml::PropertyGroup("Target")
{
// Append target name item (it is a build configuration name).
- const QString targetName = qbs::KeiluvUtils::buildConfigurationName(
+ const QString targetName = gen::utils::buildConfigurationName(
qbsProject);
appendProperty(QByteArrayLiteral("TargetName"), targetName);
// Append toolset number group item.
- appendChild<KeiluvProperty>(QByteArrayLiteral("ToolsetNumber"),
- QByteArrayLiteral("0x0"));
+ appendChild<gen::xml::Property>(QByteArrayLiteral("ToolsetNumber"),
+ QByteArrayLiteral("0x0"));
// Append toolset name group item.
- appendChild<KeiluvProperty>(QByteArrayLiteral("ToolsetName"),
- QByteArrayLiteral("MCS-51"));
+ appendChild<gen::xml::Property>(QByteArrayLiteral("ToolsetName"),
+ QByteArrayLiteral("MCS-51"));
// Append target option group item.
- const auto targetOptionGroup = appendChild<KeiluvPropertyGroup>(
+ const auto targetOptionGroup = appendChild<gen::xml::PropertyGroup>(
QByteArrayLiteral("TargetOption"));
targetOptionGroup->appendChild<Mcs51TargetCommonOptionsGroup>(
@@ -85,17 +85,18 @@ Mcs51BuildTargetGroup::Mcs51BuildTargetGroup(
}
bool Mcs51BuildTargetGroupFactory::canCreate(
- qbs::KeiluvUtils::Architecture architecture,
+ gen::utils::Architecture arch,
const Version &version) const
{
- return architecture == qbs::KeiluvUtils::Architecture::Mcs51Architecture
+ return arch == gen::utils::Architecture::Mcs51
&& version.majorVersion() == KeiluvConstants::kUVisionVersion;
}
-std::unique_ptr<KeiluvPropertyGroup> Mcs51BuildTargetGroupFactory::create(
- const Project &qbsProject,
- const ProductData &qbsProduct,
- const std::vector<ProductData> &qbsProductDeps) const
+std::unique_ptr<gen::xml::PropertyGroup>
+Mcs51BuildTargetGroupFactory::create(
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct,
+ const std::vector<qbs::ProductData> &qbsProductDeps) const
{
const auto group = new Mcs51BuildTargetGroup(
qbsProject, qbsProduct, qbsProductDeps);
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51buildtargetgroup_v5.h b/src/plugins/generator/keiluv/archs/mcs51/mcs51buildtargetgroup_v5.h
index 3f11c489e..ef0c0ccba 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51buildtargetgroup_v5.h
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51buildtargetgroup_v5.h
@@ -31,34 +31,35 @@
#ifndef QBS_KEILUVMCS51BUILDTARGETGROUP_V5_H
#define QBS_KEILUVMCS51BUILDTARGETGROUP_V5_H
-#include "../../keiluvpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
namespace qbs {
namespace keiluv {
namespace mcs51 {
namespace v5 {
-class Mcs51BuildTargetGroup final : public KeiluvPropertyGroup
+class Mcs51BuildTargetGroup final : public gen::xml::PropertyGroup
{
private:
explicit Mcs51BuildTargetGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct,
- const std::vector<ProductData> &qbsProductDeps);
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct,
+ const std::vector<qbs::ProductData> &qbsProductDeps);
friend class Mcs51BuildTargetGroupFactory;
};
-class Mcs51BuildTargetGroupFactory final : public KeiluvPropertyGroupFactory
+class Mcs51BuildTargetGroupFactory final
+ : public gen::xml::PropertyGroupFactory
{
public:
- bool canCreate(KeiluvUtils::Architecture architecture,
+ bool canCreate(gen::utils::Architecture arch,
const Version &version) const final;
- std::unique_ptr<KeiluvPropertyGroup> create(
- const Project &qbsProject,
- const ProductData &qbsProduct,
- const std::vector<ProductData> &qbsProductDeps) const final;
+ std::unique_ptr<gen::xml::PropertyGroup> create(
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct,
+ const std::vector<qbs::ProductData> &qbsProductDeps) const final;
};
} // namespace v5
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51commonpropertygroup_v5.cpp b/src/plugins/generator/keiluv/archs/mcs51/mcs51commonpropertygroup_v5.cpp
index 32760df23..3d4d33046 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51commonpropertygroup_v5.cpp
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51commonpropertygroup_v5.cpp
@@ -30,17 +30,15 @@
#include "mcs51commonpropertygroup_v5.h"
-#include "../../keiluvutils.h"
-
namespace qbs {
namespace keiluv {
namespace mcs51 {
namespace v5 {
Mcs51CommonPropertyGroup::Mcs51CommonPropertyGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct)
- : KeiluvPropertyGroup("CommonProperty")
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct)
+ : gen::xml::PropertyGroup("CommonProperty")
{
Q_UNUSED(qbsProject)
Q_UNUSED(qbsProduct)
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51commonpropertygroup_v5.h b/src/plugins/generator/keiluv/archs/mcs51/mcs51commonpropertygroup_v5.h
index 185d498d0..66dfc7a3e 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51commonpropertygroup_v5.h
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51commonpropertygroup_v5.h
@@ -31,19 +31,19 @@
#ifndef QBS_KEILUVMCS51COMMONPROPERTYGROUP_V5_H
#define QBS_KEILUVMCS51COMMONPROPERTYGROUP_V5_H
-#include "../../keiluvpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
namespace qbs {
namespace keiluv {
namespace mcs51 {
namespace v5 {
-class Mcs51CommonPropertyGroup final : public KeiluvPropertyGroup
+class Mcs51CommonPropertyGroup final : public gen::xml::PropertyGroup
{
public:
explicit Mcs51CommonPropertyGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct);
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct);
};
} // namespace v5
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51debugoptiongroup_v5.cpp b/src/plugins/generator/keiluv/archs/mcs51/mcs51debugoptiongroup_v5.cpp
index 5f2494f8f..2175cc488 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51debugoptiongroup_v5.cpp
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51debugoptiongroup_v5.cpp
@@ -30,17 +30,15 @@
#include "mcs51debugoptiongroup_v5.h"
-#include "../../keiluvutils.h"
-
namespace qbs {
namespace keiluv {
namespace mcs51 {
namespace v5 {
Mcs51DebugOptionGroup::Mcs51DebugOptionGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct)
- : KeiluvPropertyGroup("DebugOption")
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct)
+ : gen::xml::PropertyGroup("DebugOption")
{
Q_UNUSED(qbsProject)
Q_UNUSED(qbsProduct)
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51debugoptiongroup_v5.h b/src/plugins/generator/keiluv/archs/mcs51/mcs51debugoptiongroup_v5.h
index e19f1edf8..473cf605c 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51debugoptiongroup_v5.h
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51debugoptiongroup_v5.h
@@ -31,19 +31,19 @@
#ifndef QBS_KEILUVMCS51DEBUGOPTIONGROUP_V5_H
#define QBS_KEILUVMCS51DEBUGOPTIONGROUP_V5_H
-#include "../../keiluvpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
namespace qbs {
namespace keiluv {
namespace mcs51 {
namespace v5 {
-class Mcs51DebugOptionGroup final : public KeiluvPropertyGroup
+class Mcs51DebugOptionGroup final : public gen::xml::PropertyGroup
{
public:
explicit Mcs51DebugOptionGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct);
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct);
};
} // namespace v5
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51dlloptiongroup_v5.cpp b/src/plugins/generator/keiluv/archs/mcs51/mcs51dlloptiongroup_v5.cpp
index 26639b9bf..59aec721d 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51dlloptiongroup_v5.cpp
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51dlloptiongroup_v5.cpp
@@ -30,17 +30,15 @@
#include "mcs51dlloptiongroup_v5.h"
-#include "../../keiluvutils.h"
-
namespace qbs {
namespace keiluv {
namespace mcs51 {
namespace v5 {
Mcs51DllOptionGroup::Mcs51DllOptionGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct)
- : KeiluvPropertyGroup("DllOption")
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct)
+ : gen::xml::PropertyGroup("DllOption")
{
Q_UNUSED(qbsProject)
Q_UNUSED(qbsProduct)
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51dlloptiongroup_v5.h b/src/plugins/generator/keiluv/archs/mcs51/mcs51dlloptiongroup_v5.h
index 5144dfd72..e16833acc 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51dlloptiongroup_v5.h
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51dlloptiongroup_v5.h
@@ -31,19 +31,19 @@
#ifndef QBS_KEILUVMCS51DLLOPTIONGROUP_V5_H
#define QBS_KEILUVMCS51DLLOPTIONGROUP_V5_H
-#include "../../keiluvpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
namespace qbs {
namespace keiluv {
namespace mcs51 {
namespace v5 {
-class Mcs51DllOptionGroup final : public KeiluvPropertyGroup
+class Mcs51DllOptionGroup final : public gen::xml::PropertyGroup
{
public:
explicit Mcs51DllOptionGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct);
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct);
};
} // namespace v5
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetassemblergroup_v5.cpp b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetassemblergroup_v5.cpp
index 00120a56d..8d7257713 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetassemblergroup_v5.cpp
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetassemblergroup_v5.cpp
@@ -100,9 +100,9 @@ struct AssemblerPageOptions final
} // namespace
Mcs51TargetAssemblerGroup::Mcs51TargetAssemblerGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct)
- : KeiluvPropertyGroup("Ax51")
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct)
+ : gen::xml::PropertyGroup("Ax51")
{
const AssemblerPageOptions opts(qbsProject, qbsProduct);
@@ -118,7 +118,7 @@ Mcs51TargetAssemblerGroup::Mcs51TargetAssemblerGroup(
// Add other various controls.
// Note: A sub-items order makes sense!
- const auto variousControlsGroup = appendChild<KeiluvPropertyGroup>(
+ const auto variousControlsGroup = appendChild<gen::xml::PropertyGroup>(
QByteArrayLiteral("VariousControls"));
// Add 'Misc Controls' item.
variousControlsGroup->appendMultiLineProperty(
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetassemblergroup_v5.h b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetassemblergroup_v5.h
index 8a183c30b..f9a82304d 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetassemblergroup_v5.h
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetassemblergroup_v5.h
@@ -31,19 +31,19 @@
#ifndef QBS_KEILUVMCS51TARGETASSEMBLERGROUP_V3
#define QBS_KEILUVMCS51TARGETASSEMBLERGROUP_V3
-#include "../../keiluvpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
namespace qbs {
namespace keiluv {
namespace mcs51 {
namespace v5 {
-class Mcs51TargetAssemblerGroup final : public KeiluvPropertyGroup
+class Mcs51TargetAssemblerGroup final : public gen::xml::PropertyGroup
{
public:
explicit Mcs51TargetAssemblerGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct);
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct);
};
} // namespace v5
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetcommonoptionsgroup_v5.cpp b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetcommonoptionsgroup_v5.cpp
index 00d15d34b..de1be1ef6 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetcommonoptionsgroup_v5.cpp
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetcommonoptionsgroup_v5.cpp
@@ -32,6 +32,8 @@
#include "../../keiluvutils.h"
+#include <generators/generatorutils.h>
+
namespace qbs {
namespace keiluv {
namespace mcs51 {
@@ -54,22 +56,23 @@ struct CommonPageOptions final
browseInfo = true;
// Debug information.
- debugInfo = KeiluvUtils::debugInformation(qbsProduct);
+ debugInfo = gen::utils::debugInformation(qbsProduct);
// Output parameters.
- executableName = KeiluvUtils::targetBinary(qbsProduct);
+ executableName = gen::utils::targetBinary(qbsProduct);
// Fix output binary name if it is a library. Because
// the IDE appends an additional suffix (.LIB) to end
// of an output library name.
if (executableName.endsWith(QLatin1String(".lib")))
executableName = qbsProduct.targetName();
-
- const QString baseDirectory = KeiluvUtils::buildRootPath(qbsProject);
- objectDirectory = KeiluvUtils::objectsOutputDirectory(
- baseDirectory, qbsProduct);
- listingDirectory = KeiluvUtils::listingOutputDirectory(
- baseDirectory, qbsProduct);
+ const QString baseDirectory = gen::utils::buildRootPath(qbsProject);
+ objectDirectory = QDir::toNativeSeparators(
+ gen::utils::objectsOutputDirectory(
+ baseDirectory, qbsProduct));
+ listingDirectory = QDir::toNativeSeparators(
+ gen::utils::listingOutputDirectory(
+ baseDirectory, qbsProduct));
// Target type.
targetType = KeiluvUtils::outputBinaryType(qbsProduct);
@@ -87,9 +90,9 @@ struct CommonPageOptions final
} // namespace
Mcs51TargetCommonOptionsGroup::Mcs51TargetCommonOptionsGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct)
- : KeiluvPropertyGroup("TargetCommonOption")
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct)
+ : gen::xml::PropertyGroup("TargetCommonOption")
{
const CommonPageOptions opts(qbsProject, qbsProduct);
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetcommonoptionsgroup_v5.h b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetcommonoptionsgroup_v5.h
index 7535b3373..eccd9d42d 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetcommonoptionsgroup_v5.h
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetcommonoptionsgroup_v5.h
@@ -31,19 +31,19 @@
#ifndef QBS_KEILUVMCS51TARGETCOMMONOPTIONSGROUP_V5_H
#define QBS_KEILUVMCS51TARGETCOMMONOPTIONSGROUP_V5_H
-#include "../../keiluvpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
namespace qbs {
namespace keiluv {
namespace mcs51 {
namespace v5 {
-class Mcs51TargetCommonOptionsGroup final : public KeiluvPropertyGroup
+class Mcs51TargetCommonOptionsGroup final : public gen::xml::PropertyGroup
{
public:
explicit Mcs51TargetCommonOptionsGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct);
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct);
};
} // namespace v5
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetcompilergroup_v5.cpp b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetcompilergroup_v5.cpp
index 76a246508..e33c0c211 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetcompilergroup_v5.cpp
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetcompilergroup_v5.cpp
@@ -88,7 +88,7 @@ struct CompilerPageOptions final
const auto flags = qbs::KeiluvUtils::cppModuleCompilerFlags(qbsProps);
// Warnings.
- const QString level = qbs::KeiluvUtils::cppStringModuleProperty(
+ const QString level = gen::utils::cppStringModuleProperty(
qbsProps, QStringLiteral("warningLevel"));
if (level == QLatin1String("none")) {
warningLevel = WarningLevelNone;
@@ -101,14 +101,14 @@ struct CompilerPageOptions final
flags, QStringLiteral("WARNINGLEVEL"));
bool ok = false;
const auto level = warnValue.toInt(&ok);
- if (ok && qbs::KeiluvUtils::inBounds(
+ if (ok && gen::utils::inBounds(
level, int(WarningLevelNone),int(WarningLevelTwo))) {
warningLevel = static_cast<WarningLevel>(level);
}
}
// Optimizations.
- const QString optimization = qbs::KeiluvUtils::cppStringModuleProperty(
+ const QString optimization = gen::utils::cppStringModuleProperty(
qbsProps, QStringLiteral("optimization"));
if (optimization == QLatin1String("fast")) {
optimizationEmphasis = FavorSpeedOptimizationEmphasis;
@@ -163,7 +163,7 @@ struct CompilerPageOptions final
flags, QStringLiteral("FLOATFUZZY"));
bool ok = false;
const auto bits = bitsValue.toInt(&ok);
- if (ok && qbs::KeiluvUtils::inBounds(
+ if (ok && gen::utils::inBounds(
bits, int(NoFloatFuzzyBits), int(SevenFloatFuzzyBits))) {
floatFuzzyBits = static_cast<FloatFuzzyBits>(bits);
}
@@ -222,9 +222,9 @@ struct CompilerPageOptions final
} // namespace
Mcs51TargetCompilerGroup::Mcs51TargetCompilerGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct)
- : KeiluvPropertyGroup("C51")
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct)
+ : gen::xml::PropertyGroup("C51")
{
const CompilerPageOptions opts(qbsProject, qbsProduct);
@@ -256,7 +256,7 @@ Mcs51TargetCompilerGroup::Mcs51TargetCompilerGroup(
// Add other various controls.
// Note: A sub-items order makes sense!
- const auto variousControlsGroup = appendChild<KeiluvPropertyGroup>(
+ const auto variousControlsGroup = appendChild<gen::xml::PropertyGroup>(
QByteArrayLiteral("VariousControls"));
// Add 'Misc Controls' item.
variousControlsGroup->appendMultiLineProperty(
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetcompilergroup_v5.h b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetcompilergroup_v5.h
index 801f79ee6..0f1e52ce4 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetcompilergroup_v5.h
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetcompilergroup_v5.h
@@ -31,19 +31,19 @@
#ifndef QBS_KEILUVMCS51TARGETCOMPILERGROUP_V5_H
#define QBS_KEILUVMCS51TARGETCOMPILERGROUP_V5_H
-#include "../../keiluvpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
namespace qbs {
namespace keiluv {
namespace mcs51 {
namespace v5 {
-class Mcs51TargetCompilerGroup final : public KeiluvPropertyGroup
+class Mcs51TargetCompilerGroup final : public gen::xml::PropertyGroup
{
public:
explicit Mcs51TargetCompilerGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct);
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct);
};
} // namespace v5
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetgroup_v5.cpp b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetgroup_v5.cpp
index ec583aa29..2a05649dd 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetgroup_v5.cpp
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetgroup_v5.cpp
@@ -34,17 +34,15 @@
#include "mcs51targetlinkergroup_v5.h"
#include "mcs51targetmiscgroup_v5.h"
-#include "../../keiluvutils.h"
-
namespace qbs {
namespace keiluv {
namespace mcs51 {
namespace v5 {
Mcs51TargetGroup::Mcs51TargetGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct)
- : KeiluvPropertyGroup("Target51")
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct)
+ : gen::xml::PropertyGroup("Target51")
{
appendChild<Mcs51TargetMiscGroup>(qbsProject, qbsProduct);
appendChild<Mcs51TargetCompilerGroup>(qbsProject, qbsProduct);
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetgroup_v5.h b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetgroup_v5.h
index 989e50991..d256dfcc7 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetgroup_v5.h
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetgroup_v5.h
@@ -31,19 +31,19 @@
#ifndef QBS_KEILUVMCS51TARGETGROUP_V5_H
#define QBS_KEILUVMCS51TARGETGROUP_V5_H
-#include "../../keiluvpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
namespace qbs {
namespace keiluv {
namespace mcs51 {
namespace v5 {
-class Mcs51TargetGroup final : public KeiluvPropertyGroup
+class Mcs51TargetGroup final : public gen::xml::PropertyGroup
{
public:
explicit Mcs51TargetGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct);
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct);
};
} // namespace v5
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetlinkergroup_v5.cpp b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetlinkergroup_v5.cpp
index 6e5f807a5..4d52b627a 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetlinkergroup_v5.cpp
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetlinkergroup_v5.cpp
@@ -172,9 +172,9 @@ struct LinkerPageOptions final
} // namespace
Mcs51TargetLinkerGroup::Mcs51TargetLinkerGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct)
- : KeiluvPropertyGroup("Lx51")
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct)
+ : gen::xml::PropertyGroup("Lx51")
{
const LinkerPageOptions opts(qbsProject, qbsProduct);
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetlinkergroup_v5.h b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetlinkergroup_v5.h
index d9bbcea4b..d701c5e0e 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetlinkergroup_v5.h
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetlinkergroup_v5.h
@@ -31,19 +31,19 @@
#ifndef QBS_KEILUVMCS51TARGETLINKERGROUP_V5_H
#define QBS_KEILUVMCS51TARGETLINKERGROUP_V5_H
-#include "../../keiluvpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
namespace qbs {
namespace keiluv {
namespace mcs51 {
namespace v5 {
-class Mcs51TargetLinkerGroup final : public KeiluvPropertyGroup
+class Mcs51TargetLinkerGroup final : public gen::xml::PropertyGroup
{
public:
explicit Mcs51TargetLinkerGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct);
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct);
};
} // namespace v5
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetmiscgroup_v5.cpp b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetmiscgroup_v5.cpp
index 193330864..5d95d443f 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetmiscgroup_v5.cpp
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetmiscgroup_v5.cpp
@@ -84,9 +84,9 @@ struct MiscPageOptions final
} // namespace
Mcs51TargetMiscGroup::Mcs51TargetMiscGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct)
- : KeiluvPropertyGroup("Target51Misc")
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct)
+ : gen::xml::PropertyGroup("Target51Misc")
{
const MiscPageOptions opts(qbsProject, qbsProduct);
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetmiscgroup_v5.h b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetmiscgroup_v5.h
index e1dfd4a56..f1680d927 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51targetmiscgroup_v5.h
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51targetmiscgroup_v5.h
@@ -31,19 +31,19 @@
#ifndef QBS_KEILUVMCS51TARGETMISCGROUP_V5_H
#define QBS_KEILUVMCS51TARGETMISCGROUP_V5_H
-#include "../../keiluvpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
namespace qbs {
namespace keiluv {
namespace mcs51 {
namespace v5 {
-class Mcs51TargetMiscGroup final : public KeiluvPropertyGroup
+class Mcs51TargetMiscGroup final : public gen::xml::PropertyGroup
{
public:
explicit Mcs51TargetMiscGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct);
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct);
};
} // namespace v5
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51utilitiesgroup_v5.cpp b/src/plugins/generator/keiluv/archs/mcs51/mcs51utilitiesgroup_v5.cpp
index 380876e51..8e8307f72 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51utilitiesgroup_v5.cpp
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51utilitiesgroup_v5.cpp
@@ -30,17 +30,15 @@
#include "mcs51utilitiesgroup_v5.h"
-#include "../../keiluvutils.h"
-
namespace qbs {
namespace keiluv {
namespace mcs51 {
namespace v5 {
Mcs51UtilitiesGroup::Mcs51UtilitiesGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct)
- : KeiluvPropertyGroup("Utilities")
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct)
+ : gen::xml::PropertyGroup("Utilities")
{
Q_UNUSED(qbsProject)
Q_UNUSED(qbsProduct)
diff --git a/src/plugins/generator/keiluv/archs/mcs51/mcs51utilitiesgroup_v5.h b/src/plugins/generator/keiluv/archs/mcs51/mcs51utilitiesgroup_v5.h
index 4345bd981..f95ec67c4 100644
--- a/src/plugins/generator/keiluv/archs/mcs51/mcs51utilitiesgroup_v5.h
+++ b/src/plugins/generator/keiluv/archs/mcs51/mcs51utilitiesgroup_v5.h
@@ -31,19 +31,19 @@
#ifndef QBS_KEILUVMCS51UTILITIESGROUP_V5_H
#define QBS_KEILUVMCS51UTILITIESGROUP_V5_H
-#include "../../keiluvpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
namespace qbs {
namespace keiluv {
namespace mcs51 {
namespace v5 {
-class Mcs51UtilitiesGroup final : public KeiluvPropertyGroup
+class Mcs51UtilitiesGroup final : public gen::xml::PropertyGroup
{
public:
explicit Mcs51UtilitiesGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct);
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct);
};
} // namespace v5
diff --git a/src/plugins/generator/keiluv/keiluv.pro b/src/plugins/generator/keiluv/keiluv.pro
index 99bf44d54..d260adea1 100644
--- a/src/plugins/generator/keiluv/keiluv.pro
+++ b/src/plugins/generator/keiluv/keiluv.pro
@@ -13,29 +13,24 @@ SOURCES += \
# Common files.
HEADERS += \
- $$PWD/ikeiluvnodevisitor.h \
$$PWD/keiluvfilesgroupspropertygroup.h \
$$PWD/keiluvgenerator.h \
$$PWD/keiluvproject.h \
$$PWD/keiluvprojectwriter.h \
- $$PWD/keiluvproperty.h \
- $$PWD/keiluvpropertygroup.h \
$$PWD/keiluvutils.h \
$$PWD/keiluvversioninfo.h \
$$PWD/keiluvworkspace.h \
- $$PWD/keiluvworkspacewriter.h \
+ $$PWD/keiluvworkspacewriter.h
SOURCES += \
$$PWD/keiluvfilesgroupspropertygroup.cpp \
$$PWD/keiluvgenerator.cpp \
$$PWD/keiluvproject.cpp \
$$PWD/keiluvprojectwriter.cpp \
- $$PWD/keiluvproperty.cpp \
- $$PWD/keiluvpropertygroup.cpp \
$$PWD/keiluvutils.cpp \
$$PWD/keiluvversioninfo.cpp \
$$PWD/keiluvworkspace.cpp \
- $$PWD/keiluvworkspacewriter.cpp \
+ $$PWD/keiluvworkspacewriter.cpp
# For MCS51 architecture.
@@ -51,7 +46,7 @@ HEADERS += \
$$PWD/archs/mcs51/mcs51targetlinkergroup_v5.h \
$$PWD/archs/mcs51/mcs51targetmiscgroup_v5.h \
$$PWD/archs/mcs51/mcs51utilitiesgroup_v5.h \
- $$PWD/archs/mcs51/mcs51utils.h \
+ $$PWD/archs/mcs51/mcs51utils.h
SOURCES += \
$$PWD/archs/mcs51/mcs51buildtargetgroup_v5.cpp \
@@ -65,4 +60,4 @@ SOURCES += \
$$PWD/archs/mcs51/mcs51targetlinkergroup_v5.cpp \
$$PWD/archs/mcs51/mcs51targetmiscgroup_v5.cpp \
$$PWD/archs/mcs51/mcs51utilitiesgroup_v5.cpp \
- $$PWD/archs/mcs51/mcs51utils.cpp \
+ $$PWD/archs/mcs51/mcs51utils.cpp
diff --git a/src/plugins/generator/keiluv/keiluv.qbs b/src/plugins/generator/keiluv/keiluv.qbs
index 5734f0538..62e03593c 100644
--- a/src/plugins/generator/keiluv/keiluv.qbs
+++ b/src/plugins/generator/keiluv/keiluv.qbs
@@ -11,7 +11,6 @@ QbsPlugin {
Group {
name: "KEIL UV generator common"
files: [
- "ikeiluvnodevisitor.h",
"keiluvfilesgroupspropertygroup.cpp",
"keiluvfilesgroupspropertygroup.h",
"keiluvgenerator.cpp",
@@ -20,10 +19,6 @@ QbsPlugin {
"keiluvproject.h",
"keiluvprojectwriter.cpp",
"keiluvprojectwriter.h",
- "keiluvproperty.cpp",
- "keiluvproperty.h",
- "keiluvpropertygroup.cpp",
- "keiluvpropertygroup.h",
"keiluvutils.cpp",
"keiluvutils.h",
"keiluvversioninfo.cpp",
diff --git a/src/plugins/generator/keiluv/keiluvfilesgroupspropertygroup.cpp b/src/plugins/generator/keiluv/keiluvfilesgroupspropertygroup.cpp
index 137cabe3d..b9a234d6a 100644
--- a/src/plugins/generator/keiluv/keiluvfilesgroupspropertygroup.cpp
+++ b/src/plugins/generator/keiluv/keiluvfilesgroupspropertygroup.cpp
@@ -29,6 +29,7 @@
****************************************************************************/
#include "keiluvfilesgroupspropertygroup.h"
+#include "keiluvutils.h"
#include <generators/generatordata.h>
@@ -36,26 +37,28 @@
namespace qbs {
-class KeiluvFilePropertyGroup final : public KeiluvPropertyGroup
+class KeiluvFilePropertyGroup final : public gen::xml::PropertyGroup
{
public:
explicit KeiluvFilePropertyGroup(
const QString &fullFilePath,
const QString &baseDirectory)
- : KeiluvPropertyGroup("File")
+ : gen::xml::PropertyGroup("File")
{
const QFileInfo fileInfo(fullFilePath);
const auto fileName = fileInfo.fileName();
const auto fileType = encodeFileType(fileInfo.suffix());
- const auto filePath = KeiluvUtils::relativeFilePath(
- baseDirectory, fileInfo.absoluteFilePath());
-
- appendChild<KeiluvProperty>(QByteArrayLiteral("FileName"),
- fileName);
- appendChild<KeiluvProperty>(QByteArrayLiteral("FileType"),
- fileType);
- appendChild<KeiluvProperty>(QByteArrayLiteral("FilePath"),
- filePath);
+ const auto filePath = QDir::toNativeSeparators(
+ gen::utils::relativeFilePath(
+ baseDirectory,
+ fileInfo.absoluteFilePath()));
+
+ appendChild<gen::xml::Property>(QByteArrayLiteral("FileName"),
+ fileName);
+ appendChild<gen::xml::Property>(QByteArrayLiteral("FileType"),
+ fileType);
+ appendChild<gen::xml::Property>(QByteArrayLiteral("FilePath"),
+ filePath);
}
private:
@@ -92,13 +95,13 @@ private:
}
};
-class KeiluvFilesPropertyGroup final : public KeiluvPropertyGroup
+class KeiluvFilesPropertyGroup final : public gen::xml::PropertyGroup
{
public:
explicit KeiluvFilesPropertyGroup(
const QList<ArtifactData> &sourceArtifacts,
const QString &baseDirectory)
- : KeiluvPropertyGroup("Files")
+ : gen::xml::PropertyGroup("Files")
{
for (const auto &artifact : sourceArtifacts)
appendChild<KeiluvFilePropertyGroup>(artifact.filePath(),
@@ -108,7 +111,7 @@ public:
explicit KeiluvFilesPropertyGroup(
const QStringList &filePaths,
const QString &baseDirectory)
- : KeiluvPropertyGroup("Files")
+ : gen::xml::PropertyGroup("Files")
{
for (const auto &filePath : filePaths)
appendChild<KeiluvFilePropertyGroup>(filePath,
@@ -116,17 +119,17 @@ public:
}
};
-class KeiluvFileGroupPropertyGroup final : public KeiluvPropertyGroup
+class KeiluvFileGroupPropertyGroup final : public gen::xml::PropertyGroup
{
public:
explicit KeiluvFileGroupPropertyGroup(
const QString &groupName,
const QList<ArtifactData> &sourceArtifacts,
const QString &baseDirectory)
- : KeiluvPropertyGroup("Group")
+ : gen::xml::PropertyGroup("Group")
{
- appendChild<KeiluvProperty>(QByteArrayLiteral("GroupName"),
- groupName);
+ appendChild<gen::xml::Property>(QByteArrayLiteral("GroupName"),
+ groupName);
appendChild<KeiluvFilesPropertyGroup>(sourceArtifacts,
baseDirectory);
@@ -136,10 +139,10 @@ public:
const QString &groupName,
const QStringList &filePaths,
const QString &baseDirectory)
- : KeiluvPropertyGroup("Group")
+ : gen::xml::PropertyGroup("Group")
{
- appendChild<KeiluvProperty>(QByteArrayLiteral("GroupName"),
- groupName);
+ appendChild<gen::xml::Property>(QByteArrayLiteral("GroupName"),
+ groupName);
appendChild<KeiluvFilesPropertyGroup>(filePaths,
baseDirectory);
@@ -150,9 +153,9 @@ KeiluvFilesGroupsPropertyGroup::KeiluvFilesGroupsPropertyGroup(
const Project &qbsProject,
const ProductData &qbsProduct,
const std::vector<ProductData> &qbsProductDeps)
- : KeiluvPropertyGroup(QByteArrayLiteral("Groups"))
+ : gen::xml::PropertyGroup(QByteArrayLiteral("Groups"))
{
- const auto baseDirectory = KeiluvUtils::buildRootPath(qbsProject);
+ const auto baseDirectory = gen::utils::buildRootPath(qbsProject);
// Build source items.
const auto groups = qbsProduct.groups();
diff --git a/src/plugins/generator/keiluv/keiluvfilesgroupspropertygroup.h b/src/plugins/generator/keiluv/keiluvfilesgroupspropertygroup.h
index 6ae335875..bde86b89c 100644
--- a/src/plugins/generator/keiluv/keiluvfilesgroupspropertygroup.h
+++ b/src/plugins/generator/keiluv/keiluvfilesgroupspropertygroup.h
@@ -31,19 +31,20 @@
#ifndef QBS_KEILUVFILESGROUPSPROPERTYGROUP_H
#define QBS_KEILUVFILESGROUPSPROPERTYGROUP_H
-#include "keiluvpropertygroup.h"
+#include <generators/xmlpropertygroup.h>
#include <generators/generatordata.h>
namespace qbs {
-class KeiluvFilesGroupsPropertyGroup final : public KeiluvPropertyGroup
+class KeiluvFilesGroupsPropertyGroup final
+ : public gen::xml::PropertyGroup
{
public:
explicit KeiluvFilesGroupsPropertyGroup(
- const Project &qbsProject,
- const ProductData &qbsProduct,
- const std::vector<ProductData> &qbsProductDeps);
+ const qbs::Project &qbsProject,
+ const qbs::ProductData &qbsProduct,
+ const std::vector<qbs::ProductData> &qbsProductDeps);
};
} // namespace qbs
diff --git a/src/plugins/generator/keiluv/keiluvgenerator.cpp b/src/plugins/generator/keiluv/keiluvgenerator.cpp
index 570f7693e..657a98ad4 100644
--- a/src/plugins/generator/keiluv/keiluvgenerator.cpp
+++ b/src/plugins/generator/keiluv/keiluvgenerator.cpp
@@ -133,25 +133,27 @@ void KeiluvGenerator::visitProject(const GeneratableProject &project)
m_workspace = std::make_shared<KeiluvWorkspace>(m_workspaceFilePath);
}
-void KeiluvGenerator::visitProjectData(const GeneratableProject &project,
- const GeneratableProjectData &projectData)
+void KeiluvGenerator::visitProjectData(
+ const GeneratableProject &project,
+ const GeneratableProjectData &projectData)
{
Q_UNUSED(project)
Q_UNUSED(projectData)
}
-void KeiluvGenerator::visitProduct(const GeneratableProject &project,
- const GeneratableProjectData &projectData,
- const GeneratableProductData &productData)
+void KeiluvGenerator::visitProduct(
+ const GeneratableProject &project,
+ const GeneratableProjectData &projectData,
+ const GeneratableProductData &productData)
{
Q_UNUSED(projectData);
const QString projectFilePath = targetFilePath(
productData, project.baseBuildDirectory().absolutePath());
- const auto targetProject = std::make_shared<KeiluvProject>(project, productData,
- m_versionInfo);
+ const auto targetProject = std::make_shared<KeiluvProject>(
+ project, productData, m_versionInfo);
m_projects.insert({projectFilePath, targetProject});
- m_workspace->addProjectPath(projectFilePath);
+ m_workspace->addProject(projectFilePath);
}
} // namespace qbs
diff --git a/src/plugins/generator/keiluv/keiluvproject.cpp b/src/plugins/generator/keiluv/keiluvproject.cpp
index d9e256bdb..bd5e80658 100644
--- a/src/plugins/generator/keiluv/keiluvproject.cpp
+++ b/src/plugins/generator/keiluv/keiluvproject.cpp
@@ -28,7 +28,6 @@
**
****************************************************************************/
-#include "ikeiluvnodevisitor.h"
#include "keiluvproject.h"
#include "keiluvutils.h"
#include "keiluvversioninfo.h"
@@ -51,9 +50,10 @@ static QString keilProjectSchema(const KeiluvVersionInfo &info)
}
}
-KeiluvProject::KeiluvProject(const GeneratableProject &genProject,
- const GeneratableProductData &genProduct,
- const KeiluvVersionInfo &versionInfo)
+KeiluvProject::KeiluvProject(
+ const qbs::GeneratableProject &genProject,
+ const qbs::GeneratableProductData &genProduct,
+ const KeiluvVersionInfo &versionInfo)
{
Q_ASSERT(genProject.projects.size() == genProject.commandLines.size());
Q_ASSERT(genProject.projects.size() == genProduct.data.size());
@@ -64,25 +64,27 @@ KeiluvProject::KeiluvProject(const GeneratableProject &genProject,
// Construct schema version item (depends on a project version).
const auto schema = keilProjectSchema(versionInfo);
- appendChild<KeiluvProperty>(QByteArrayLiteral("SchemaVersion"),
- schema);
+ appendChild<gen::xml::Property>(QByteArrayLiteral("SchemaVersion"),
+ schema);
// Construct targets group.
- const auto targetsGroup = appendChild<KeiluvPropertyGroup>(
+ const auto targetsGroup = appendChild<gen::xml::PropertyGroup>(
QByteArrayLiteral("Targets"));
// Construct all build target items.
const int configsCount = std::max(genProject.projects.size(),
genProduct.data.size());
for (auto configIndex = 0; configIndex < configsCount; ++configIndex) {
- const Project qbsProject = genProject.projects.values().at(configIndex);
- const ProductData qbsProduct = genProduct.data.values().at(configIndex);
- const QString confName = KeiluvUtils::buildConfigurationName(qbsProject);
- const std::vector<ProductData> qbsProductDeps = KeiluvUtils::dependenciesOf
+ const qbs::Project qbsProject = genProject.projects
+ .values().at(configIndex);
+ const qbs::ProductData qbsProduct = genProduct.data
+ .values().at(configIndex);
+ const QString confName = gen::utils::buildConfigurationName(qbsProject);
+ const std::vector<ProductData> qbsProductDeps = gen::utils::dependenciesOf
(qbsProduct, genProject, confName);
- const auto arch = KeiluvUtils::architecture(qbsProject);
- if (arch == KeiluvUtils::Architecture::UnknownArchitecture)
+ const auto arch = gen::utils::architecture(qbsProject);
+ if (arch == gen::utils::Architecture::Unknown)
throw ErrorInfo(Internal::Tr::tr("Target architecture is not set,"
" please use the 'profile' option"));
@@ -96,7 +98,7 @@ KeiluvProject::KeiluvProject(const GeneratableProject &genProject,
if (factoryIt == factoryEnd) {
throw ErrorInfo(Internal::Tr::tr("Incompatible target architecture '%1'"
" for KEIL UV version %2")
- .arg(KeiluvUtils::architectureName(arch))
+ .arg(gen::utils::architectureName(arch))
.arg(versionInfo.marketingVersion()));
}
@@ -106,14 +108,4 @@ KeiluvProject::KeiluvProject(const GeneratableProject &genProject,
}
}
-void KeiluvProject::accept(IKeiluvNodeVisitor *visitor) const
-{
- visitor->visitStart(this);
-
- for (const auto &child : children())
- child->accept(visitor);
-
- visitor->visitEnd(this);
-}
-
} // namespace qbs
diff --git a/src/plugins/generator/keiluv/keiluvproject.h b/src/plugins/generator/keiluv/keiluvproject.h
index fc9893da5..98b2815ed 100644
--- a/src/plugins/generator/keiluv/keiluvproject.h
+++ b/src/plugins/generator/keiluv/keiluvproject.h
@@ -31,27 +31,26 @@
#ifndef QBS_KEILUVPROJECT_H
#define QBS_KEILUVPROJECT_H
-#include "keiluvproperty.h"
-#include "keiluvpropertygroup.h"
-
#include <generators/generatordata.h>
+#include <generators/xmlproject.h>
+#include <generators/xmlpropertygroup.h>
+
#include <memory>
namespace qbs {
class KeiluvVersionInfo;
-class KeiluvProject final : public KeiluvProperty
+class KeiluvProject final : public gen::xml::Project
{
public:
- explicit KeiluvProject(const GeneratableProject &genProject,
- const GeneratableProductData &genProduct,
- const KeiluvVersionInfo &versionInfo);
- void accept(IKeiluvNodeVisitor *visitor) const final;
-
+ explicit KeiluvProject(
+ const qbs::GeneratableProject &genProject,
+ const qbs::GeneratableProductData &genProduct,
+ const KeiluvVersionInfo &versionInfo);
private:
- std::vector<std::unique_ptr<KeiluvPropertyGroupFactory>> m_factories;
+ std::vector<std::unique_ptr<gen::xml::PropertyGroupFactory>> m_factories;
};
} // namespace qbs
diff --git a/src/plugins/generator/keiluv/keiluvprojectwriter.cpp b/src/plugins/generator/keiluv/keiluvprojectwriter.cpp
index 7f63b4714..f2ae8befb 100644
--- a/src/plugins/generator/keiluv/keiluvprojectwriter.cpp
+++ b/src/plugins/generator/keiluv/keiluvprojectwriter.cpp
@@ -28,70 +28,31 @@
**
****************************************************************************/
-#include "keiluvproject.h"
#include "keiluvprojectwriter.h"
-#include "keiluvproperty.h"
-#include "keiluvpropertygroup.h"
-
-#include <ostream>
namespace qbs {
KeiluvProjectWriter::KeiluvProjectWriter(std::ostream *device)
- : m_device(device)
-{
- m_writer.reset(new QXmlStreamWriter(&m_buffer));
- m_writer->setAutoFormatting(true);
-}
-
-bool KeiluvProjectWriter::write(const KeiluvProject *project)
+ : gen::xml::ProjectWriter(device)
{
- m_buffer.clear();
- m_writer->writeStartDocument();
- project->accept(this);
- m_writer->writeEndDocument();
- if (m_writer->hasError())
- return false;
- m_device->write(&*std::begin(m_buffer), m_buffer.size());
- return m_device->good();
}
-void KeiluvProjectWriter::visitStart(const KeiluvProject *project)
+void KeiluvProjectWriter::visitStart(const gen::xml::Project *project)
{
Q_UNUSED(project)
- m_writer->writeStartElement(QStringLiteral("Project"));
- m_writer->writeAttribute(QStringLiteral("xmlns:xsi"),
- QStringLiteral("http://www.w3.org/2001/XMLSchema-instance"));
- m_writer->writeAttribute(QStringLiteral("xsi:noNamespaceSchemaLocation"),
- QStringLiteral("project_proj.xsd"));
+ writer()->writeStartElement(QStringLiteral("Project"));
+ writer()->writeAttribute(
+ QStringLiteral("xmlns:xsi"),
+ QStringLiteral("http://www.w3.org/2001/XMLSchema-instance"));
+ writer()->writeAttribute(
+ QStringLiteral("xsi:noNamespaceSchemaLocation"),
+ QStringLiteral("project_proj.xsd"));
}
-void KeiluvProjectWriter::visitEnd(const KeiluvProject *project)
+void KeiluvProjectWriter::visitEnd(const gen::xml::Project *project)
{
Q_UNUSED(project)
- m_writer->writeEndElement();
-}
-
-void KeiluvProjectWriter::visitStart(const KeiluvProperty *property)
-{
- const QString stringValue = property->value().toString();
- m_writer->writeTextElement(QString::fromUtf8(property->name()), stringValue);
-}
-
-void KeiluvProjectWriter::visitEnd(const KeiluvProperty *property)
-{
- Q_UNUSED(property)
-}
-
-void KeiluvProjectWriter::visitStart(const KeiluvPropertyGroup *propertyGroup)
-{
- m_writer->writeStartElement(QString::fromUtf8(propertyGroup->name()));
-}
-
-void KeiluvProjectWriter::visitEnd(const KeiluvPropertyGroup *propertyGroup)
-{
- Q_UNUSED(propertyGroup)
- m_writer->writeEndElement();
+ writer()->writeEndElement();
}
} // namespace qbs
diff --git a/src/plugins/generator/keiluv/keiluvprojectwriter.h b/src/plugins/generator/keiluv/keiluvprojectwriter.h
index ad807e29e..ad6fd1124 100644
--- a/src/plugins/generator/keiluv/keiluvprojectwriter.h
+++ b/src/plugins/generator/keiluv/keiluvprojectwriter.h
@@ -31,32 +31,19 @@
#ifndef QBS_KEILUVPROJECTWRITER_H
#define QBS_KEILUVPROJECTWRITER_H
-#include "ikeiluvnodevisitor.h"
+#include <generators/xmlprojectwriter.h>
namespace qbs {
-class KeiluvProject;
-
-class KeiluvProjectWriter final : public IKeiluvNodeVisitor
+class KeiluvProjectWriter final : public gen::xml::ProjectWriter
{
Q_DISABLE_COPY(KeiluvProjectWriter)
public:
explicit KeiluvProjectWriter(std::ostream *device);
- bool write(const KeiluvProject *project);
private:
- void visitStart(const KeiluvProject *project) final;
- void visitEnd(const KeiluvProject *project) final;
-
- void visitStart(const KeiluvProperty *property) final;
- void visitEnd(const KeiluvProperty *property) final;
-
- void visitStart(const KeiluvPropertyGroup *propertyGroup) final;
- void visitEnd(const KeiluvPropertyGroup *propertyGroup) final;
-
- std::ostream *m_device = nullptr;
- QByteArray m_buffer;
- std::unique_ptr<QXmlStreamWriter> m_writer;
+ void visitStart(const gen::xml::Project *project) final;
+ void visitEnd(const gen::xml::Project *project) final;
};
} // namespace qbs
diff --git a/src/plugins/generator/keiluv/keiluvutils.cpp b/src/plugins/generator/keiluv/keiluvutils.cpp
index 51382dc36..8932f0f16 100644
--- a/src/plugins/generator/keiluv/keiluvutils.cpp
+++ b/src/plugins/generator/keiluv/keiluvutils.cpp
@@ -30,6 +30,8 @@
#include "keiluvutils.h"
+#include <generators/generatorutils.h>
+
namespace qbs {
namespace KeiluvUtils {
@@ -43,100 +45,6 @@ OutputBinaryType outputBinaryType(const ProductData &qbsProduct)
return ApplicationOutputType;
}
-QString architectureName(Architecture arch)
-{
- switch (arch) {
- case Architecture::Mcs51Architecture:
- return QStringLiteral("mcs51");
- default:
- return QStringLiteral("unknown");
- }
-}
-
-Architecture architecture(const Project &qbsProject)
-{
- const auto qbsArch = qbsProject.projectConfiguration()
- .value(Internal::StringConstants::qbsModule()).toMap()
- .value(QStringLiteral("architecture")).toString();
-
- if (qbsArch == QLatin1String("mcs51"))
- return Architecture::Mcs51Architecture;
- return Architecture::UnknownArchitecture;
-}
-
-QString buildConfigurationName(const Project &qbsProject)
-{
- return qbsProject.projectConfiguration()
- .value(Internal::StringConstants::qbsModule()).toMap()
- .value(QStringLiteral("configurationName")).toString();
-}
-
-int debugInformation(const ProductData &qbsProduct)
-{
- return qbsProduct.moduleProperties().getModuleProperty(
- Internal::StringConstants::qbsModule(),
- QStringLiteral("debugInformation"))
- .toInt();
-}
-
-QString binaryOutputDirectory(const QString &baseDirectory,
- const ProductData &qbsProduct)
-{
- const auto path = QDir(baseDirectory).relativeFilePath(
- qbsProduct.buildDirectory()) + QLatin1String("/bin");
- return QDir::toNativeSeparators(path);
-}
-
-QString objectsOutputDirectory(const QString &baseDirectory,
- const ProductData &qbsProduct)
-{
- const auto path = QDir(baseDirectory).relativeFilePath(
- qbsProduct.buildDirectory()) + QLatin1String("/obj");
- return QDir::toNativeSeparators(path);
-}
-
-QString listingOutputDirectory(const QString &baseDirectory,
- const ProductData &qbsProduct)
-{
- const auto path = QDir(baseDirectory).relativeFilePath(
- qbsProduct.buildDirectory()) + QLatin1String("/lst");
- return QDir::toNativeSeparators(path);
-}
-
-QString targetBinary(const ProductData &qbsProduct)
-{
- const auto type = qbsProduct.type();
- if (type.contains(QLatin1String("application"))) {
- return QFileInfo(qbsProduct.targetExecutable()).fileName();
- } else if (type.contains(QLatin1String("staticlibrary"))) {
- const auto artifacts = qbsProduct.targetArtifacts();
- for (const auto &artifact : artifacts) {
- if (artifact.fileTags().contains(QLatin1String("staticlibrary")))
- return QFileInfo(artifact.filePath()).fileName();
- }
- }
-
- return {};
-}
-
-std::vector<ProductData> dependenciesOf(const ProductData &qbsProduct,
- const GeneratableProject &genProject,
- const QString configurationName)
-{
- std::vector<ProductData> result;
- const auto depsNames = qbsProduct.dependencies();
- for (const auto &product : qAsConst(genProject.products)) {
- const auto pt = product.type();
- if (!pt.contains(QLatin1String("staticlibrary")))
- continue;
- const auto pn = product.name();
- if (!depsNames.contains(pn))
- continue;
- result.push_back(product.data.value(configurationName));
- }
- return result;
-}
-
QString toolkitRootPath(const ProductData &qbsProduct)
{
QDir dir(qbsProduct.moduleProperties()
@@ -148,47 +56,9 @@ QString toolkitRootPath(const ProductData &qbsProduct)
return QDir::toNativeSeparators(path);
}
-QString buildRootPath(const Project &qbsProject)
-{
- QDir dir(qbsProject.projectData().buildDirectory());
- dir.cdUp();
- const auto path = dir.absolutePath();
- return QDir::toNativeSeparators(path);
-}
-
-QString relativeFilePath(const QString &baseDirectory,
- const QString &fullFilePath)
-{
- const auto path = QDir(baseDirectory).relativeFilePath(fullFilePath);
- return QDir::toNativeSeparators(path);
-}
-
-QString cppStringModuleProperty(const PropertyMap &qbsProps,
- const QString &propertyName)
-{
- return qbsProps.getModuleProperty(Internal::StringConstants::cppModule(),
- propertyName).toString().trimmed();
-}
-
-QStringList cppStringModuleProperties(const PropertyMap &qbsProps,
- const QStringList &propertyNames)
-{
- QStringList properties;
- for (const auto &propertyName : propertyNames) {
- properties << qbsProps.getModuleProperty(
- Internal::StringConstants::cppModule(),
- propertyName).toStringList();
- }
- std::transform(properties.begin(), properties.end(), properties.begin(),
- [](const auto &property) {
- return property.trimmed();
- });
- return properties;
-}
-
QStringList cppModuleCompilerFlags(const PropertyMap &qbsProps)
{
- return cppStringModuleProperties(
+ return gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("driverFlags"), QStringLiteral("cFlags"),
QStringLiteral("cppFlags"), QStringLiteral("cxxFlags"),
QStringLiteral("commonCompilerFlags")});
@@ -196,19 +66,19 @@ QStringList cppModuleCompilerFlags(const PropertyMap &qbsProps)
QStringList cppModuleAssemblerFlags(const PropertyMap &qbsProps)
{
- return cppStringModuleProperties(
+ return gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("assemblerFlags")});
}
QStringList cppModuleLinkerFlags(const PropertyMap &qbsProps)
{
- return cppStringModuleProperties(
+ return gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("driverLinkerFlags")});
}
QStringList includes(const PropertyMap &qbsProps)
{
- auto paths = qbs::KeiluvUtils::cppStringModuleProperties(
+ auto paths = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("includePaths"),
QStringLiteral("systemIncludePaths")});
// Transform include path separators to native.
@@ -221,13 +91,13 @@ QStringList includes(const PropertyMap &qbsProps)
QStringList defines(const PropertyMap &qbsProps)
{
- return qbs::KeiluvUtils::cppStringModuleProperties(
+ return gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("defines")});
}
QStringList staticLibraries(const PropertyMap &qbsProps)
{
- auto libs = qbs::KeiluvUtils::cppStringModuleProperties(
+ auto libs = gen::utils::cppStringModuleProperties(
qbsProps, {QStringLiteral("staticLibraries")});
// Transform library path separators to native.
std::transform(libs.begin(), libs.end(), libs.begin(),
@@ -243,7 +113,7 @@ QStringList dependencies(const std::vector<ProductData> &qbsProductDeps)
for (const ProductData &qbsProductDep : qbsProductDeps) {
const auto path = qbsProductDep.buildDirectory()
+ QLatin1String("/obj/")
- + qbs::KeiluvUtils::targetBinary(qbsProductDep);
+ + gen::utils::targetBinary(qbsProductDep);
deps.push_back(QDir::toNativeSeparators(path));
}
return deps;
diff --git a/src/plugins/generator/keiluv/keiluvutils.h b/src/plugins/generator/keiluv/keiluvutils.h
index a1de6c543..92209dc53 100644
--- a/src/plugins/generator/keiluv/keiluvutils.h
+++ b/src/plugins/generator/keiluv/keiluvutils.h
@@ -38,60 +38,15 @@
namespace qbs {
namespace KeiluvUtils {
-enum class Architecture {
- Mcs51Architecture,
- UnknownArchitecture
-};
-
enum OutputBinaryType {
ApplicationOutputType,
LibraryOutputType
};
-template <typename T>
-bool inBounds(const T &value, const T &low, const T &high)
-{
- return !(value < low) && !(high < value);
-}
-
OutputBinaryType outputBinaryType(const ProductData &qbsProduct);
-QString architectureName(Architecture arch);
-
-Architecture architecture(const Project &qbsProject);
-
-QString buildConfigurationName(const Project &qbsProject);
-
-int debugInformation(const ProductData &qbsProduct);
-
-QString binaryOutputDirectory(const QString &baseDirectory,
- const ProductData &qbsProduct);
-
-QString objectsOutputDirectory(const QString &baseDirectory,
- const ProductData &qbsProduct);
-
-QString listingOutputDirectory(const QString &baseDirectory,
- const ProductData &qbsProduct);
-
-QString targetBinary(const ProductData &qbsProduct);
-
-std::vector<ProductData> dependenciesOf(const ProductData &qbsProduct,
- const GeneratableProject &genProject,
- const QString configurationName);
-
QString toolkitRootPath(const ProductData &qbsProduct);
-QString buildRootPath(const Project &qbsProject);
-
-QString relativeFilePath(const QString &baseDirectory,
- const QString &fullFilePath);
-
-QString cppStringModuleProperty(const PropertyMap &qbsProps,
- const QString &propertyName);
-
-QStringList cppStringModuleProperties(const PropertyMap &qbsProps,
- const QStringList &propertyNames);
-
QStringList cppModuleCompilerFlags(const PropertyMap &qbsProps);
QStringList cppModuleAssemblerFlags(const PropertyMap &qbsProps);
diff --git a/src/plugins/generator/keiluv/keiluvversioninfo.cpp b/src/plugins/generator/keiluv/keiluvversioninfo.cpp
index 9d9723307..544a07aff 100644
--- a/src/plugins/generator/keiluv/keiluvversioninfo.cpp
+++ b/src/plugins/generator/keiluv/keiluvversioninfo.cpp
@@ -41,17 +41,14 @@
#include "archs/mcs51/mcs51utils.h"
-#include <tools/qbsassert.h>
-
#include <QtCore/qdebug.h>
-#include <QtCore/qglobal.h>
namespace qbs {
KeiluvVersionInfo::KeiluvVersionInfo(
const Version &version,
- const std::set<KeiluvUtils::Architecture> &archs)
- : m_version(version), m_archs(archs)
+ const std::set<gen::utils::Architecture> &archs)
+ : gen::VersionInfo(version, archs)
{
}
@@ -59,47 +56,21 @@ std::set<KeiluvVersionInfo> KeiluvVersionInfo::knownVersions()
{
static const std::set<KeiluvVersionInfo> known = {
{Version(keiluv::mcs51::v5::KeiluvConstants::kUVisionVersion),
- {KeiluvUtils::Architecture::Mcs51Architecture}},
+ {gen::utils::Architecture::Mcs51}},
};
return known;
}
-bool KeiluvVersionInfo::operator<(const KeiluvVersionInfo &other) const
-{
- return m_version < other.m_version;
-}
-
-bool KeiluvVersionInfo::operator==(const KeiluvVersionInfo &other) const
-{
- return m_version == other.m_version
- && m_archs == other.m_archs;
-}
-
-Version KeiluvVersionInfo::version() const
-{
- return m_version;
-}
-
int KeiluvVersionInfo::marketingVersion() const
{
- const auto mv = m_version.majorVersion();
+ const auto mv = gen::VersionInfo::marketingVersion();
for (const KeiluvVersionInfo &known : knownVersions()) {
if (known.version().majorVersion() == mv)
return mv;
}
qWarning() << QStringLiteral("Unrecognized KEIL UV version: ")
- << m_version.toString();
+ << version().toString();
return 0;
}
-bool KeiluvVersionInfo::containsArchitecture(KeiluvUtils::Architecture arch) const
-{
- return m_archs.find(arch) != m_archs.cend();
-}
-
-quint32 qHash(const KeiluvVersionInfo &info)
-{
- return qHash(info.version().toString());
-}
-
} // namespace qbs
diff --git a/src/plugins/generator/keiluv/keiluvversioninfo.h b/src/plugins/generator/keiluv/keiluvversioninfo.h
index 5bec6ac6e..a64513492 100644
--- a/src/plugins/generator/keiluv/keiluvversioninfo.h
+++ b/src/plugins/generator/keiluv/keiluvversioninfo.h
@@ -40,37 +40,22 @@
#ifndef QBS_KEILUVVERSIONINFO_H
#define QBS_KEILUVVERSIONINFO_H
-#include "keiluvutils.h"
-
-#include <tools/version.h>
-
-#include <set>
+#include <generators/generatorutils.h>
+#include <generators/generatorversioninfo.h>
namespace qbs {
-class KeiluvVersionInfo final
+class KeiluvVersionInfo final : public gen::VersionInfo
{
public:
KeiluvVersionInfo(const Version &version,
- const std::set<KeiluvUtils::Architecture> &archs);
-
- static std::set<KeiluvVersionInfo> knownVersions();
+ const std::set<gen::utils::Architecture> &archs);
- bool operator<(const KeiluvVersionInfo &other) const;
- bool operator==(const KeiluvVersionInfo &other) const;
+ int marketingVersion() const final;
- Version version() const;
- int marketingVersion() const;
-
- bool containsArchitecture(KeiluvUtils::Architecture arch) const;
-
-private:
- Version m_version;
- std::set<KeiluvUtils::Architecture> m_archs;
+ static std::set<KeiluvVersionInfo> knownVersions();
};
-quint32 qHash(const KeiluvVersionInfo &info);
-
} // namespace qbs
#endif // QBS_KEILUVVERSIONINFO_H
diff --git a/src/plugins/generator/keiluv/keiluvworkspace.cpp b/src/plugins/generator/keiluv/keiluvworkspace.cpp
index 948929ee0..b4df92001 100644
--- a/src/plugins/generator/keiluv/keiluvworkspace.cpp
+++ b/src/plugins/generator/keiluv/keiluvworkspace.cpp
@@ -37,44 +37,32 @@
**
****************************************************************************/
-#include "ikeiluvnodevisitor.h"
-#include "keiluvproperty.h"
-#include "keiluvpropertygroup.h"
#include "keiluvworkspace.h"
+#include <generators/xmlpropertygroup.h>
+
namespace qbs {
KeiluvWorkspace::KeiluvWorkspace(const QString &workspacePath)
+ : gen::xml::Workspace(workspacePath)
{
- m_baseDirectory = QFileInfo(workspacePath).absoluteDir();
-
// Construct schema version item.
- appendChild<KeiluvProperty>(QByteArrayLiteral("SchemaVersion"),
- QStringLiteral("1.0"));
+ appendChild<gen::xml::Property>(QByteArrayLiteral("SchemaVersion"),
+ QStringLiteral("1.0"));
// Construct workspace name item.
- appendChild<KeiluvProperty>(QByteArrayLiteral("WorkspaceName"),
- QStringLiteral("WorkSpace"));
+ appendChild<gen::xml::Property>(QByteArrayLiteral("WorkspaceName"),
+ QStringLiteral("WorkSpace"));
}
-void KeiluvWorkspace::addProjectPath(const QString &projectFilePath)
+void KeiluvWorkspace::addProject(const QString &projectFilePath)
{
- const QString relativeProjectPath =
- m_baseDirectory.relativeFilePath(projectFilePath);
+ const QString relativeProjectPath = QDir::toNativeSeparators(
+ m_baseDirectory.relativeFilePath(projectFilePath));
- const auto projectGroup = appendChild<KeiluvPropertyGroup>(
+ const auto projectGroup = appendChild<gen::xml::PropertyGroup>(
QByteArrayLiteral("project"));
projectGroup->appendProperty("PathAndName", relativeProjectPath);
}
-void KeiluvWorkspace::accept(IKeiluvNodeVisitor *visitor) const
-{
- visitor->visitStart(this);
-
- for (const auto &child : children())
- child->accept(visitor);
-
- visitor->visitEnd(this);
-}
-
} // namespace qbs
diff --git a/src/plugins/generator/keiluv/keiluvworkspace.h b/src/plugins/generator/keiluv/keiluvworkspace.h
index 09950efd7..2b274c99f 100644
--- a/src/plugins/generator/keiluv/keiluvworkspace.h
+++ b/src/plugins/generator/keiluv/keiluvworkspace.h
@@ -40,22 +40,15 @@
#ifndef QBS_KEILUVWORKSPACE_H
#define QBS_KEILUVWORKSPACE_H
-#include "keiluvproperty.h"
-
-#include <QtCore/qdir.h>
+#include <generators/xmlworkspace.h>
namespace qbs {
-class KeiluvWorkspace final : public KeiluvProperty
+class KeiluvWorkspace final : public gen::xml::Workspace
{
public:
explicit KeiluvWorkspace(const QString &workspacePath);
- void addProjectPath(const QString &projectPath);
-
- void accept(IKeiluvNodeVisitor *visitor) const final;
-
-private:
- QDir m_baseDirectory;
+ void addProject(const QString &projectPath) final;
};
} // namespace qbs
diff --git a/src/plugins/generator/keiluv/keiluvworkspacewriter.cpp b/src/plugins/generator/keiluv/keiluvworkspacewriter.cpp
index e646a1122..9070a2542 100644
--- a/src/plugins/generator/keiluv/keiluvworkspacewriter.cpp
+++ b/src/plugins/generator/keiluv/keiluvworkspacewriter.cpp
@@ -28,70 +28,31 @@
**
****************************************************************************/
-#include "keiluvproperty.h"
-#include "keiluvpropertygroup.h"
-#include "keiluvworkspace.h"
#include "keiluvworkspacewriter.h"
-#include <ostream>
-
namespace qbs {
KeiluvWorkspaceWriter::KeiluvWorkspaceWriter(std::ostream *device)
- : m_device(device)
-{
- m_writer.reset(new QXmlStreamWriter(&m_buffer));
- m_writer->setAutoFormatting(true);
-}
-
-bool KeiluvWorkspaceWriter::write(const KeiluvWorkspace *workspace)
+ : gen::xml::WorkspaceWriter(device)
{
- m_buffer.clear();
- m_writer->writeStartDocument();
- workspace->accept(this);
- m_writer->writeEndDocument();
- if (m_writer->hasError())
- return false;
- m_device->write(&*std::begin(m_buffer), m_buffer.size());
- return m_device->good();
}
-void KeiluvWorkspaceWriter::visitStart(const KeiluvWorkspace *workspace)
+void KeiluvWorkspaceWriter::visitStart(const gen::xml::Workspace *workspace)
{
Q_UNUSED(workspace)
- m_writer->writeStartElement(QStringLiteral("ProjectWorkspace"));
- m_writer->writeAttribute(QStringLiteral("xmlns:xsi"),
- QStringLiteral("http://www.w3.org/2001/XMLSchema-instance"));
- m_writer->writeAttribute(QStringLiteral("xsi:noNamespaceSchemaLocation"),
- QStringLiteral("project_mpw.xsd"));
+ writer()->writeStartElement(QStringLiteral("ProjectWorkspace"));
+ writer()->writeAttribute(
+ QStringLiteral("xmlns:xsi"),
+ QStringLiteral("http://www.w3.org/2001/XMLSchema-instance"));
+ writer()->writeAttribute(
+ QStringLiteral("xsi:noNamespaceSchemaLocation"),
+ QStringLiteral("project_mpw.xsd"));
}
-void KeiluvWorkspaceWriter::visitEnd(const KeiluvWorkspace *workspace)
+void KeiluvWorkspaceWriter::visitEnd(const gen::xml::Workspace *workspace)
{
Q_UNUSED(workspace)
- m_writer->writeEndElement();
-}
-
-void KeiluvWorkspaceWriter::visitStart(const KeiluvProperty *property)
-{
- const QString stringValue = property->value().toString();
- m_writer->writeTextElement(QString::fromLatin1(property->name()), stringValue);
-}
-
-void KeiluvWorkspaceWriter::visitEnd(const KeiluvProperty *property)
-{
- Q_UNUSED(property)
-}
-
-void KeiluvWorkspaceWriter::visitStart(const KeiluvPropertyGroup *propertyGroup)
-{
- m_writer->writeStartElement(QString::fromLatin1(propertyGroup->name()));
-}
-
-void KeiluvWorkspaceWriter::visitEnd(const KeiluvPropertyGroup *propertyGroup)
-{
- Q_UNUSED(propertyGroup)
- m_writer->writeEndElement();
+ writer()->writeEndElement();
}
} // namespace qbs
diff --git a/src/plugins/generator/keiluv/keiluvworkspacewriter.h b/src/plugins/generator/keiluv/keiluvworkspacewriter.h
index 4b4f2dde0..56bcd1ebc 100644
--- a/src/plugins/generator/keiluv/keiluvworkspacewriter.h
+++ b/src/plugins/generator/keiluv/keiluvworkspacewriter.h
@@ -31,32 +31,19 @@
#ifndef QBS_KEILUVWORKSPACEWRITER_H
#define QBS_KEILUVWORKSPACEWRITER_H
-#include "ikeiluvnodevisitor.h"
+#include <generators/xmlworkspacewriter.h>
namespace qbs {
-class KeiluvWorkspace;
-
-class KeiluvWorkspaceWriter final : public IKeiluvNodeVisitor
+class KeiluvWorkspaceWriter final : public gen::xml::WorkspaceWriter
{
Q_DISABLE_COPY(KeiluvWorkspaceWriter)
public:
explicit KeiluvWorkspaceWriter(std::ostream *device);
- bool write(const KeiluvWorkspace *workspace);
private:
- void visitStart(const KeiluvWorkspace *workspace) final;
- void visitEnd(const KeiluvWorkspace *workspace) final;
-
- void visitStart(const KeiluvProperty *property) final;
- void visitEnd(const KeiluvProperty *property) final;
-
- void visitStart(const KeiluvPropertyGroup *propertyGroup) final;
- void visitEnd(const KeiluvPropertyGroup *propertyGroup) final;
-
- std::ostream *m_device = nullptr;
- QByteArray m_buffer;
- std::unique_ptr<QXmlStreamWriter> m_writer;
+ void visitStart(const gen::xml::Workspace *workspace) final;
+ void visitEnd(const gen::xml::Workspace *workspace) final;
};
} // namespace qbs