Browse Source

VST3 Client: Update moduleinfotool to write compatibility info from plugin

Reintegrates changes from cf9fc84669
v7.0.9
reuk 2 years ago
parent
commit
06a2089872
No known key found for this signature in database GPG Key ID: FCB43929F012EE5C
4 changed files with 46 additions and 5 deletions
  1. +3
    -1
      extras/Build/CMake/JUCEUtils.cmake
  2. +2
    -0
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h
  3. +3
    -0
      modules/juce_audio_processors/format_types/VST3_SDK/JUCE_README.md
  4. +38
    -4
      modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp

+ 3
- 1
extras/Build/CMake/JUCEUtils.cmake View File

@@ -949,6 +949,7 @@ function(_juce_add_vst3_manifest_helper_target)
set(vst3_dir "${module_path}/juce_audio_processors/format_types/VST3_SDK")
set(public_dir "${vst3_dir}/public.sdk")
set(public_source_dir "${public_dir}/source")
set(public_common_dir "${public_source_dir}/common")
set(public_vst_dir "${public_source_dir}/vst")
set(hosting_dir "${public_vst_dir}/hosting")

@@ -966,8 +967,9 @@ function(_juce_add_vst3_manifest_helper_target)
add_executable(juce_vst3_helper
"${extra_source}"
"${hosting_dir}/module.cpp"
"${public_common_dir}/memorystream.cpp"
"${public_common_dir}/readfile.cpp"
"${public_dir}/samples/vst-utilities/moduleinfotool/source/main.cpp"
"${public_source_dir}/common/memorystream.cpp"
"${public_vst_dir}/moduleinfo/moduleinfocreator.cpp"
"${public_vst_dir}/moduleinfo/moduleinfoparser.cpp"
"${public_vst_dir}/utility/stringconvert.cpp"


+ 2
- 0
extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h View File

@@ -245,6 +245,8 @@ public:
.getChildFile ("main.cpp"),
source.getChildFile ("common")
.getChildFile ("memorystream.cpp"),
source.getChildFile ("common")
.getChildFile ("readfile.cpp"),
vst.getChildFile ("moduleinfo")
.getChildFile ("moduleinfocreator.cpp"),
vst.getChildFile ("moduleinfo")


+ 3
- 0
modules/juce_audio_processors/format_types/VST3_SDK/JUCE_README.md View File

@@ -1,2 +1,5 @@
This list details modifications made to the VST3 SDK in order to facilitate
inclusion in JUCE.

- The main.cpp of moduleinfotool was updated to include information exported
by the plugin's IPluginCompatibility object, if present.

+ 38
- 4
modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/samples/vst-utilities/moduleinfotool/source/main.cpp View File

@@ -35,14 +35,16 @@
// OF THE POSSIBILITY OF SUCH DAMAGE.
//-----------------------------------------------------------------------------

#include "base/source/fcommandline.h"
#include "pluginterfaces/base/fplatform.h"
#include "pluginterfaces/base/iplugincompatibility.h"
#include "pluginterfaces/vst/vsttypes.h"
#include "public.sdk/source/common/memorystream.h"
#include "public.sdk/source/common/readfile.h"
#include "public.sdk/source/vst/hosting/module.h"
#include "public.sdk/source/vst/moduleinfo/moduleinfocreator.h"
#include "public.sdk/source/vst/moduleinfo/moduleinfoparser.h"
#include "public.sdk/source/vst/utility/stringconvert.h"
#include "public.sdk/source/common/readfile.h"
#include "base/source/fcommandline.h"
#include "pluginterfaces/vst/vsttypes.h"
#include "pluginterfaces/base/fplatform.h"
#include <cstdio>
#include <fstream>
#include <iostream>
@@ -96,6 +98,35 @@ std::optional<ModuleInfo::CompatibilityList> openAndParseCompatJSON (const std::
return result;
}

//------------------------------------------------------------------------
std::optional<ModuleInfo::CompatibilityList> loadCompatibilityFromModule (const VST3::Hosting::Module& module)
{
const auto& factory = module.getFactory();
const auto& infos = factory.classInfos();

const auto iter = std::find_if (infos.begin(), infos.end(), [&] (const auto& info)
{
return info.category() == kPluginCompatibilityClass;
});

if (iter == infos.end())
return {};

const auto compatibility = factory.createInstance<Steinberg::IPluginCompatibility> (iter->ID());

if (compatibility == nullptr)
return {};

Steinberg::MemoryStream stream;

if (compatibility->getCompatibilityJSON (&stream) != kResultOk)
return {};

const std::string_view streamView (stream.getData(), stream.getSize());

return ModuleInfoLib::parseCompatibilityJson (streamView, nullptr);
}

//------------------------------------------------------------------------
int createJSON (const std::optional<ModuleInfo::CompatibilityList>& compat,
const std::string& modulePath, const std::string& moduleVersion,
@@ -111,6 +142,9 @@ int createJSON (const std::optional<ModuleInfo::CompatibilityList>& compat,
auto moduleInfo = ModuleInfoLib::createModuleInfo (*module, false);
if (compat)
moduleInfo.compatibility = *compat;
else if (auto loaded = loadCompatibilityFromModule (*module))
moduleInfo.compatibility = *loaded;

moduleInfo.version = moduleVersion;

std::stringstream output;


Loading…
Cancel
Save