From d1eb77be5092211055dc5a0702cc41835f2b2fa5 Mon Sep 17 00:00:00 2001 From: attila Date: Thu, 11 Sep 2025 15:21:14 +0200 Subject: [PATCH] Projucer: Add Visual Studio 2026 exporter --- .../ProjectSaving/jucer_ProjectExport_MSVC.h | 45 +++++++++++++++++++ .../ProjectSaving/jucer_ProjectExporter.cpp | 3 ++ .../Utility/PIPs/jucer_PIPGenerator.cpp | 3 +- 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_MSVC.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_MSVC.h index a591ef0e64..06041a7be1 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_MSVC.h +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_MSVC.h @@ -2863,3 +2863,48 @@ private: JUCE_DECLARE_NON_COPYABLE (MSVCProjectExporterVC2022) }; + +//============================================================================== +class MSVCProjectExporterVC2026 final : public MSVCProjectExporterBase +{ +public: + MSVCProjectExporterVC2026 (Project& p, const ValueTree& t) + : MSVCProjectExporterBase (p, t, getTargetFolderName()) + { + name = getDisplayName(); + + targetPlatformVersion.setDefault (defaultTargetPlatform); + platformToolsetValue.setDefault (defaultToolset); + } + + static String getDisplayName() { return "Visual Studio 2026"; } + static String getValueTreeTypeName() { return "VS2026"; } + static String getTargetFolderName() { return "VisualStudio2026"; } + + Identifier getExporterIdentifier() const override { return getValueTreeTypeName(); } + + int getVisualStudioVersion() const override { return 18; } + String getSolutionComment() const override { return "# Visual Studio Version 18"; } + String getToolsVersion() const override { return "18.0"; } + String getDefaultToolset() const override { return defaultToolset; } + String getDefaultWindowsTargetPlatformVersion() const override { return defaultTargetPlatform; } + + static MSVCProjectExporterVC2026* createForSettings (Project& projectToUse, const ValueTree& settingsToUse) + { + if (settingsToUse.hasType (getValueTreeTypeName())) + return new MSVCProjectExporterVC2026 (projectToUse, settingsToUse); + + return nullptr; + } + + void createExporterProperties (PropertyListBuilder& props) override + { + addToolsetProperty (props, { "v140", "v140_xp", "v141", "v141_xp", "v142", "v143", "v145", "ClangCL" }); + MSVCProjectExporterBase::createExporterProperties (props); + } + +private: + const String defaultToolset { "v145" }, defaultTargetPlatform { "10.0" }; + + JUCE_DECLARE_NON_COPYABLE (MSVCProjectExporterVC2026) +}; diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp index 4f3eb3002f..82e1667b6c 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp @@ -90,6 +90,7 @@ std::vector ProjectExporter::getExporterTypeI XcodeProjectExporter::getTargetFolderNameiOS(), createIcon (export_xcode_svg, (size_t) export_xcode_svgSize) }, + createExporterTypeInfo (export_visualStudio_svg, export_visualStudio_svgSize), createExporterTypeInfo (export_visualStudio_svg, export_visualStudio_svgSize), createExporterTypeInfo (export_visualStudio_svg, export_visualStudio_svgSize), @@ -160,6 +161,7 @@ std::unique_ptr ProjectExporter::createExporterFromSettings (Pr return tryCreatingExporter (project, settings, Tag{}, + Tag{}, Tag{}, Tag{}, Tag{}, @@ -176,6 +178,7 @@ bool ProjectExporter::canProjectBeLaunched (Project* project) XcodeProjectExporter::getValueTreeTypeNameMac(), XcodeProjectExporter::getValueTreeTypeNameiOS(), #elif JUCE_WINDOWS + MSVCProjectExporterVC2026::getValueTreeTypeName(), MSVCProjectExporterVC2022::getValueTreeTypeName(), MSVCProjectExporterVC2019::getValueTreeTypeName(), #endif diff --git a/extras/Projucer/Source/Utility/PIPs/jucer_PIPGenerator.cpp b/extras/Projucer/Source/Utility/PIPs/jucer_PIPGenerator.cpp index 4e66e8afed..ea488f4e81 100644 --- a/extras/Projucer/Source/Utility/PIPs/jucer_PIPGenerator.cpp +++ b/extras/Projucer/Source/Utility/PIPs/jucer_PIPGenerator.cpp @@ -254,7 +254,8 @@ ValueTree PIPGenerator::createExporterChild (const Identifier& exporterIdentifie exporter.setProperty (Ids::targetFolder, "Builds/" + ProjectExporter::getTypeInfoForExporter (exporterIdentifier).targetFolder, nullptr); const Identifier vsExporters[] { MSVCProjectExporterVC2019::getValueTreeTypeName(), - MSVCProjectExporterVC2022::getValueTreeTypeName() }; + MSVCProjectExporterVC2022::getValueTreeTypeName(), + MSVCProjectExporterVC2026::getValueTreeTypeName() }; if (isJUCEExample (pipFile) && std::find (std::begin (vsExporters), std::end (vsExporters), exporterIdentifier) != std::end (vsExporters)) {