diff options
Diffstat (limited to 'src/plugins/generator/keiluv')
44 files changed, 251 insertions, 945 deletions
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/ikeiluvnodevisitor.h b/src/plugins/generator/keiluv/ikeiluvnodevisitor.h deleted file mode 100644 index 8ba14d11f..000000000 --- a/src/plugins/generator/keiluv/ikeiluvnodevisitor.h +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** -** -** 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 QBS_IKEILUVNODEVISITOR_H -#define QBS_IKEILUVNODEVISITOR_H - -#include <QtCore/qxmlstream.h> - -#include <memory> - -namespace qbs { - -class KeiluvProject; -class KeiluvProperty; -class KeiluvPropertyGroup; -class KeiluvWorkspace; - -class IKeiluvNodeVisitor -{ -public: - virtual ~IKeiluvNodeVisitor() {} - - virtual void visitStart(const KeiluvWorkspace *workspace) { Q_UNUSED(workspace) } - virtual void visitEnd(const KeiluvWorkspace *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 KeiluvProperty *property) = 0; - virtual void visitEnd(const KeiluvProperty *property) = 0; - - virtual void visitStart(const KeiluvPropertyGroup *propertyGroup) = 0; - virtual void visitEnd(const KeiluvPropertyGroup *propertyGroup) = 0; -}; - -} // namespace qbs - -#endif // QBS_IKEILUVNODEVISITOR_H 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/keiluvproperty.cpp b/src/plugins/generator/keiluv/keiluvproperty.cpp deleted file mode 100644 index 057ebe1f6..000000000 --- a/src/plugins/generator/keiluv/keiluvproperty.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/**************************************************************************** -** -** 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 "ikeiluvnodevisitor.h" -#include "keiluvproperty.h" - -namespace qbs { - -KeiluvProperty::KeiluvProperty(QByteArray name, QVariant value) -{ - setName(std::move(name)); - setValue(std::move(value)); -} - -void KeiluvProperty::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/keiluvproperty.h b/src/plugins/generator/keiluv/keiluvproperty.h deleted file mode 100644 index a385c1314..000000000 --- a/src/plugins/generator/keiluv/keiluvproperty.h +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** -** -** 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 QBS_KEILUVPROPERTY_H -#define QBS_KEILUVPROPERTY_H - -#include <QtCore/qvariant.h> - -#include <memory> - -namespace qbs { - -class IKeiluvNodeVisitor; - -class KeiluvProperty -{ - Q_DISABLE_COPY(KeiluvProperty) -public: - KeiluvProperty() = default; - explicit KeiluvProperty(QByteArray name, QVariant value); - virtual ~KeiluvProperty() = default; - - QByteArray name() const { return m_name; } - void setName(QByteArray name) { m_name = std::move(name); } - - QVariant value() const { return m_value; } - void setValue(QVariant value) { m_value = std::move(value); } - - template<class T> - T *appendChild(std::unique_ptr<T> child) { - const auto p = child.get(); - m_children.push_back(std::move(child)); - return p; - } - - template<class T, class... Args> - T *appendChild(Args&&... args) { - return appendChild(std::make_unique<T>(std::forward<Args>(args)...)); - } - - virtual void accept(IKeiluvNodeVisitor *visitor) const; - -protected: - const std::vector<std::unique_ptr<KeiluvProperty>> &children() const - { return m_children; } - -private: - QByteArray m_name; - QVariant m_value; - std::vector<std::unique_ptr<KeiluvProperty>> m_children; -}; - -} // namespace qbs - -#endif // QBS_KEILUVPROPERTY_H diff --git a/src/plugins/generator/keiluv/keiluvpropertygroup.cpp b/src/plugins/generator/keiluv/keiluvpropertygroup.cpp deleted file mode 100644 index 9aeaa576d..000000000 --- a/src/plugins/generator/keiluv/keiluvpropertygroup.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** 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 "ikeiluvnodevisitor.h" -#include "keiluvproperty.h" -#include "keiluvpropertygroup.h" - -namespace qbs { - -KeiluvPropertyGroup::KeiluvPropertyGroup(QByteArray name) -{ - setName(std::move(name)); -} - -void KeiluvPropertyGroup::appendProperty(QByteArray name, QVariant value) -{ - appendChild<KeiluvProperty>(std::move(name), std::move(value)); -} - -void KeiluvPropertyGroup::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 -{ - visitor->visitStart(this); - - for (const auto &child : children()) - child->accept(visitor); - - visitor->visitEnd(this); -} - -} // namespace qbs diff --git a/src/plugins/generator/keiluv/keiluvpropertygroup.h b/src/plugins/generator/keiluv/keiluvpropertygroup.h deleted file mode 100644 index bb5d608c4..000000000 --- a/src/plugins/generator/keiluv/keiluvpropertygroup.h +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** 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 QBS_KEILUVPROPERTYGROUP_H -#define QBS_KEILUVPROPERTYGROUP_H - -#include "keiluvproperty.h" -#include "keiluvversioninfo.h" - -#include <memory> - -namespace qbs { - -class ProductData; -class Project; - -class KeiluvPropertyGroup : public KeiluvProperty -{ -public: - explicit KeiluvPropertyGroup(QByteArray name); - - void appendProperty(QByteArray name, QVariant value); - void appendMultiLineProperty(QByteArray key, QStringList values, - QChar sep = QLatin1Char(',')); - - void accept(IKeiluvNodeVisitor *visitor) const final; -}; - -class KeiluvPropertyGroupFactory -{ -public: - virtual ~KeiluvPropertyGroupFactory() = default; - virtual bool canCreate(KeiluvUtils::Architecture architecture, - const Version &version) const = 0; - - virtual std::unique_ptr<KeiluvPropertyGroup> create( - const Project &qbsProject, - const ProductData &qbsProduct, - const std::vector<ProductData> &qbsProductDeps) const = 0; -}; - -} // namespace qbs - -#endif // QBS_KEILUVPROPERTYGROUP_H 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 |