mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-09 23:34:20 +00:00
VST3 Client: Enable manifest generation globally
This commit is contained in:
parent
77458fb4f9
commit
c509a1821a
7 changed files with 28 additions and 60 deletions
|
|
@ -527,17 +527,6 @@ attributes directly to these creation functions, rather than adding them later.
|
||||||
`Pitch Shift`, `Restoration`, `Reverb`, `Sampler`, `Spatial`, `Stereo`, `Surround`, `Synth`,
|
`Pitch Shift`, `Restoration`, `Reverb`, `Sampler`, `Spatial`, `Stereo`, `Surround`, `Synth`,
|
||||||
`Tools`, `Up-Downmix`
|
`Tools`, `Up-Downmix`
|
||||||
|
|
||||||
`VST3_MANIFEST_ENABLED`
|
|
||||||
- May be either TRUE or FALSE. Defaults to FALSE. Set this to TRUE if you want a moduleinfo.json
|
|
||||||
file to be generated as part of the VST3 build. This may improve startup/scanning time for hosts
|
|
||||||
that understand the contents of this file. This setting is disabled by default because the
|
|
||||||
moduleinfo.json path can cause problems during code signing on macOS. Bundles containing a
|
|
||||||
moduleinfo.json may be rejected by code signing verification at any point in the future without
|
|
||||||
notice per https://developer.apple.com/library/archive/technotes/tn2206. If you enable this
|
|
||||||
setting, be aware that the code signature for the moduleinfo.json will be stored in its extended
|
|
||||||
file attributes. Therefore, you will need to ensure that these attributes are not changed or
|
|
||||||
removed when distributing the VST3.
|
|
||||||
|
|
||||||
`AU_MAIN_TYPE`
|
`AU_MAIN_TYPE`
|
||||||
- Should be one of: `kAudioUnitType_Effect`, `kAudioUnitType_FormatConverter`,
|
- Should be one of: `kAudioUnitType_Effect`, `kAudioUnitType_FormatConverter`,
|
||||||
`kAudioUnitType_Generator`, `kAudioUnitType_MIDIProcessor`, `kAudioUnitType_Mixer`,
|
`kAudioUnitType_Generator`, `kAudioUnitType_MIDIProcessor`, `kAudioUnitType_Mixer`,
|
||||||
|
|
|
||||||
|
|
@ -1019,23 +1019,21 @@ function(_juce_set_plugin_target_properties shared_code_target kind)
|
||||||
LIBRARY_OUTPUT_DIRECTORY "${output_path}/Contents/${JUCE_TARGET_ARCHITECTURE}-linux")
|
LIBRARY_OUTPUT_DIRECTORY "${output_path}/Contents/${JUCE_TARGET_ARCHITECTURE}-linux")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if("${manifest_enabled}")
|
# Add a target for the helper tool
|
||||||
# Add a target for the helper tool
|
_juce_add_vst3_manifest_helper_target()
|
||||||
_juce_add_vst3_manifest_helper_target()
|
|
||||||
|
|
||||||
get_target_property(target_version_string ${shared_code_target} JUCE_VERSION)
|
get_target_property(target_version_string ${shared_code_target} JUCE_VERSION)
|
||||||
|
|
||||||
# Use the helper tool to write out the moduleinfo.json
|
# Use the helper tool to write out the moduleinfo.json
|
||||||
add_custom_command(TARGET ${target_name} POST_BUILD
|
add_custom_command(TARGET ${target_name} POST_BUILD
|
||||||
COMMAND ${CMAKE_COMMAND} -E remove -f "${output_path}/Contents/moduleinfo.json"
|
COMMAND ${CMAKE_COMMAND} -E remove -f "${output_path}/Contents/moduleinfo.json"
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory "${output_path}/Contents/Resources"
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${output_path}/Contents/Resources"
|
||||||
COMMAND juce_vst3_helper
|
COMMAND juce_vst3_helper
|
||||||
-create
|
-create
|
||||||
-version "${target_version_string}"
|
-version "${target_version_string}"
|
||||||
-path "${output_path}"
|
-path "${output_path}"
|
||||||
-output "${output_path}/Contents/Resources/moduleinfo.json"
|
-output "${output_path}/Contents/Resources/moduleinfo.json"
|
||||||
VERBATIM)
|
VERBATIM)
|
||||||
endif()
|
|
||||||
|
|
||||||
_juce_set_copy_properties(${shared_code_target} ${target_name} "${output_path}" JUCE_VST3_COPY_DIR)
|
_juce_set_copy_properties(${shared_code_target} ${target_name} "${output_path}" JUCE_VST3_COPY_DIR)
|
||||||
elseif(kind STREQUAL "VST")
|
elseif(kind STREQUAL "VST")
|
||||||
|
|
@ -1503,8 +1501,6 @@ function(_juce_set_fallback_properties target)
|
||||||
_juce_set_property_if_not_set(${target} VST_NUM_MIDI_INS 16)
|
_juce_set_property_if_not_set(${target} VST_NUM_MIDI_INS 16)
|
||||||
_juce_set_property_if_not_set(${target} VST_NUM_MIDI_OUTS 16)
|
_juce_set_property_if_not_set(${target} VST_NUM_MIDI_OUTS 16)
|
||||||
|
|
||||||
_juce_set_property_if_not_set(${target} VST3_MANIFEST_ENABLED FALSE)
|
|
||||||
|
|
||||||
_juce_set_property_if_not_set(${target} AU_SANDBOX_SAFE FALSE)
|
_juce_set_property_if_not_set(${target} AU_SANDBOX_SAFE FALSE)
|
||||||
|
|
||||||
_juce_set_property_if_not_set(${target} SUPPRESS_AU_PLIST_RESOURCE_USAGE FALSE)
|
_juce_set_property_if_not_set(${target} SUPPRESS_AU_PLIST_RESOURCE_USAGE FALSE)
|
||||||
|
|
@ -1792,7 +1788,6 @@ function(_juce_initialise_target target)
|
||||||
IS_ARA_EFFECT
|
IS_ARA_EFFECT
|
||||||
ARA_FACTORY_ID
|
ARA_FACTORY_ID
|
||||||
ARA_DOCUMENT_ARCHIVE_ID
|
ARA_DOCUMENT_ARCHIVE_ID
|
||||||
VST3_MANIFEST_ENABLED
|
|
||||||
|
|
||||||
VST_COPY_DIR
|
VST_COPY_DIR
|
||||||
VST3_COPY_DIR
|
VST3_COPY_DIR
|
||||||
|
|
|
||||||
|
|
@ -369,8 +369,6 @@ void Project::initialiseAudioPluginValues()
|
||||||
pluginVSTNumMidiOutputsValue.referTo (projectRoot, Ids::pluginVSTNumMidiOutputs, getUndoManager(), 16);
|
pluginVSTNumMidiOutputsValue.referTo (projectRoot, Ids::pluginVSTNumMidiOutputs, getUndoManager(), 16);
|
||||||
|
|
||||||
pluginLV2URIValue.referTo (projectRoot, Ids::lv2Uri, getUndoManager(), getDefaultLV2URI());
|
pluginLV2URIValue.referTo (projectRoot, Ids::lv2Uri, getUndoManager(), getDefaultLV2URI());
|
||||||
|
|
||||||
vst3ManifestEnabledValue.referTo (projectRoot, Ids::vst3ManifestEnabled, getUndoManager(), false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Project::updateOldStyleConfigList()
|
void Project::updateOldStyleConfigList()
|
||||||
|
|
@ -1265,7 +1263,7 @@ bool Project::shouldBuildTargetType (build_tools::ProjectType::Target::Type targ
|
||||||
case Target::VST3PlugIn:
|
case Target::VST3PlugIn:
|
||||||
return shouldBuildVST3();
|
return shouldBuildVST3();
|
||||||
case Target::VST3Helper:
|
case Target::VST3Helper:
|
||||||
return shouldBuildVST3() && isVst3ManifestEnabled();
|
return shouldBuildVST3();
|
||||||
case Target::AAXPlugIn:
|
case Target::AAXPlugIn:
|
||||||
return shouldBuildAAX();
|
return shouldBuildAAX();
|
||||||
case Target::AudioUnitPlugIn:
|
case Target::AudioUnitPlugIn:
|
||||||
|
|
@ -1541,14 +1539,6 @@ void Project::createAudioPluginPropertyEditors (PropertyListBuilder& props)
|
||||||
"If neither of these are selected, the appropriate one will be automatically added based on the \"Plugin is a synth\" option.");
|
"If neither of these are selected, the appropriate one will be automatically added based on the \"Plugin is a synth\" option.");
|
||||||
}
|
}
|
||||||
|
|
||||||
props.add (new ChoicePropertyComponent (vst3ManifestEnabledValue, "Plugin VST3 moduleinfo.json Enabled"),
|
|
||||||
"Check this box if you want a moduleinfo.json file to be generated as part of the VST3 build. "
|
|
||||||
"This may improve startup/scanning time for hosts that understand the contents of this file. "
|
|
||||||
"This setting is disabled by default because the moduleinfo.json path can cause problems during code signing on macOS. "
|
|
||||||
"Bundles containing a moduleinfo.json may be rejected by code signing verification at any point in the future without notice per https://developer.apple.com/library/archive/technotes/tn2206."
|
|
||||||
"If you enable this setting, be aware that the code signature for the moduleinfo.json will be stored in its extended file attributes. "
|
|
||||||
"Therefore, you will need to ensure that these attributes are not changed or removed when distributing the VST3.");
|
|
||||||
|
|
||||||
props.add (new MultiChoicePropertyComponent (pluginAAXCategoryValue, "Plugin AAX Category", getAllAAXCategoryStrings(), getAllAAXCategoryVars()),
|
props.add (new MultiChoicePropertyComponent (pluginAAXCategoryValue, "Plugin AAX Category", getAllAAXCategoryStrings(), getAllAAXCategoryVars()),
|
||||||
"AAX category.");
|
"AAX category.");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -292,8 +292,6 @@ public:
|
||||||
bool isPluginAAXBypassDisabled() const { return checkMultiChoiceVar (pluginCharacteristicsValue, Ids::pluginAAXDisableBypass); }
|
bool isPluginAAXBypassDisabled() const { return checkMultiChoiceVar (pluginCharacteristicsValue, Ids::pluginAAXDisableBypass); }
|
||||||
bool isPluginAAXMultiMonoDisabled() const { return checkMultiChoiceVar (pluginCharacteristicsValue, Ids::pluginAAXDisableMultiMono); }
|
bool isPluginAAXMultiMonoDisabled() const { return checkMultiChoiceVar (pluginCharacteristicsValue, Ids::pluginAAXDisableMultiMono); }
|
||||||
|
|
||||||
bool isVst3ManifestEnabled() const { return vst3ManifestEnabledValue.get(); }
|
|
||||||
|
|
||||||
void disableStandaloneForARAPlugIn();
|
void disableStandaloneForARAPlugIn();
|
||||||
|
|
||||||
static StringArray getAllAUMainTypeStrings() noexcept;
|
static StringArray getAllAUMainTypeStrings() noexcept;
|
||||||
|
|
@ -586,7 +584,7 @@ private:
|
||||||
pluginCodeValue, pluginChannelConfigsValue, pluginCharacteristicsValue, pluginAUExportPrefixValue, pluginAAXIdentifierValue,
|
pluginCodeValue, pluginChannelConfigsValue, pluginCharacteristicsValue, pluginAUExportPrefixValue, pluginAAXIdentifierValue,
|
||||||
pluginAUMainTypeValue, pluginAUSandboxSafeValue, pluginVSTCategoryValue, pluginVST3CategoryValue, pluginAAXCategoryValue,
|
pluginAUMainTypeValue, pluginAUSandboxSafeValue, pluginVSTCategoryValue, pluginVST3CategoryValue, pluginAAXCategoryValue,
|
||||||
pluginEnableARA, pluginARAAnalyzableContentValue, pluginARAFactoryIDValue, pluginARAArchiveIDValue, pluginARACompatibleArchiveIDsValue, pluginARATransformFlagsValue,
|
pluginEnableARA, pluginARAAnalyzableContentValue, pluginARAFactoryIDValue, pluginARAArchiveIDValue, pluginARACompatibleArchiveIDsValue, pluginARATransformFlagsValue,
|
||||||
pluginVSTNumMidiInputsValue, pluginVSTNumMidiOutputsValue, pluginLV2URIValue, vst3ManifestEnabledValue;
|
pluginVSTNumMidiInputsValue, pluginVSTNumMidiOutputsValue, pluginLV2URIValue;
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
std::unique_ptr<EnabledModulesList> enabledModulesList;
|
std::unique_ptr<EnabledModulesList> enabledModulesList;
|
||||||
|
|
|
||||||
|
|
@ -1774,7 +1774,7 @@ protected:
|
||||||
if (target->type == MSVCTargetBase::LV2PlugIn && lv2HelperGuid.isNotEmpty())
|
if (target->type == MSVCTargetBase::LV2PlugIn && lv2HelperGuid.isNotEmpty())
|
||||||
out << "\t\t" << lv2HelperGuid << " = " << lv2HelperGuid << newLine;
|
out << "\t\t" << lv2HelperGuid << " = " << lv2HelperGuid << newLine;
|
||||||
|
|
||||||
if (target->type == MSVCTargetBase::VST3PlugIn && vst3HelperGuid.isNotEmpty() && project.isVst3ManifestEnabled())
|
if (target->type == MSVCTargetBase::VST3PlugIn && vst3HelperGuid.isNotEmpty())
|
||||||
out << "\t\t" << vst3HelperGuid << " = " << vst3HelperGuid << newLine;
|
out << "\t\t" << vst3HelperGuid << " = " << vst3HelperGuid << newLine;
|
||||||
|
|
||||||
out << "\tEndProjectSection" << newLine;
|
out << "\tEndProjectSection" << newLine;
|
||||||
|
|
|
||||||
|
|
@ -356,7 +356,7 @@ public:
|
||||||
|
|
||||||
if (type == LV2PlugIn)
|
if (type == LV2PlugIn)
|
||||||
out << " $(JUCE_OUTDIR)/$(JUCE_TARGET_LV2_MANIFEST_HELPER)";
|
out << " $(JUCE_OUTDIR)/$(JUCE_TARGET_LV2_MANIFEST_HELPER)";
|
||||||
else if (type == VST3PlugIn && owner.project.isVst3ManifestEnabled())
|
else if (type == VST3PlugIn)
|
||||||
out << " $(JUCE_OUTDIR)/$(JUCE_TARGET_VST3_MANIFEST_HELPER)";
|
out << " $(JUCE_OUTDIR)/$(JUCE_TARGET_VST3_MANIFEST_HELPER)";
|
||||||
|
|
||||||
out << newLine;
|
out << newLine;
|
||||||
|
|
@ -408,18 +408,14 @@ public:
|
||||||
|
|
||||||
if (type == VST3PlugIn)
|
if (type == VST3PlugIn)
|
||||||
{
|
{
|
||||||
if (owner.project.isVst3ManifestEnabled())
|
out << "\t-$(V_AT)mkdir -p $(JUCE_OUTDIR)/$(JUCE_VST3DIR)/Contents/Resources" << newLine
|
||||||
{
|
<< "\t-$(V_AT)rm -f $(JUCE_OUTDIR)/$(JUCE_VST3DIR)/Contents/moduleinfo.json" << newLine
|
||||||
out << "\t-$(V_AT)mkdir -p $(JUCE_OUTDIR)/$(JUCE_VST3DIR)/Contents/Resources" << newLine
|
<< "\t$(V_AT) $(JUCE_OUTDIR)/$(JUCE_TARGET_VST3_MANIFEST_HELPER) "
|
||||||
<< "\t-$(V_AT)rm -f $(JUCE_OUTDIR)/$(JUCE_VST3DIR)/Contents/moduleinfo.json" << newLine
|
"-create "
|
||||||
<< "\t$(V_AT) $(JUCE_OUTDIR)/$(JUCE_TARGET_VST3_MANIFEST_HELPER) "
|
"-version " << owner.project.getVersionString().quoted() << " "
|
||||||
"-create "
|
"-path \"$(JUCE_OUTDIR)/$(JUCE_VST3DIR)\" "
|
||||||
"-version " << owner.project.getVersionString().quoted() << " "
|
"-output \"$(JUCE_OUTDIR)/$(JUCE_VST3DIR)/Contents/Resources/moduleinfo.json\"" << newLine
|
||||||
"-path \"$(JUCE_OUTDIR)/$(JUCE_VST3DIR)\" "
|
<< "\t-$(V_AT)[ ! \"$(JUCE_VST3DESTDIR)\" ] || (mkdir -p $(JUCE_VST3DESTDIR) && cp -R $(JUCE_COPYCMD_VST3))" << newLine;
|
||||||
"-output \"$(JUCE_OUTDIR)/$(JUCE_VST3DIR)/Contents/Resources/moduleinfo.json\"" << newLine;
|
|
||||||
}
|
|
||||||
|
|
||||||
out << "\t-$(V_AT)[ ! \"$(JUCE_VST3DESTDIR)\" ] || (mkdir -p $(JUCE_VST3DESTDIR) && cp -R $(JUCE_COPYCMD_VST3))" << newLine;
|
|
||||||
}
|
}
|
||||||
else if (type == VSTPlugIn)
|
else if (type == VSTPlugIn)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1291,7 +1291,7 @@ public:
|
||||||
dependencyIDs.add (helperTarget->addDependencyFor (*this));
|
dependencyIDs.add (helperTarget->addDependencyFor (*this));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == VST3PlugIn && owner.project.isVst3ManifestEnabled())
|
if (type == VST3PlugIn)
|
||||||
{
|
{
|
||||||
if (auto* helperTarget = owner.getTargetOfType (VST3Helper))
|
if (auto* helperTarget = owner.getTargetOfType (VST3Helper))
|
||||||
dependencyIDs.add (helperTarget->addDependencyFor (*this));
|
dependencyIDs.add (helperTarget->addDependencyFor (*this));
|
||||||
|
|
@ -2125,7 +2125,7 @@ private:
|
||||||
if (target->type == XcodeTarget::LV2Helper
|
if (target->type == XcodeTarget::LV2Helper
|
||||||
&& project.getEnabledModules().isModuleEnabled ("juce_audio_plugin_client"))
|
&& project.getEnabledModules().isModuleEnabled ("juce_audio_plugin_client"))
|
||||||
{
|
{
|
||||||
const auto path = rebaseFromProjectFolderToBuildTarget (getLV2HelperProgramSource ());
|
const auto path = rebaseFromProjectFolderToBuildTarget (getLV2HelperProgramSource());
|
||||||
addFile (FileOptions().withRelativePath ({ expandPath (path.toUnixStyle()), path.getRoot() })
|
addFile (FileOptions().withRelativePath ({ expandPath (path.toUnixStyle()), path.getRoot() })
|
||||||
.withSkipPCHEnabled (true)
|
.withSkipPCHEnabled (true)
|
||||||
.withCompilationEnabled (true)
|
.withCompilationEnabled (true)
|
||||||
|
|
@ -2364,7 +2364,7 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (target->type == XcodeTarget::VST3PlugIn && project.isVst3ManifestEnabled())
|
else if (target->type == XcodeTarget::VST3PlugIn)
|
||||||
{
|
{
|
||||||
script << "\"$CONFIGURATION_BUILD_DIR/" << Project::getVST3FileWriterName() << "\" "
|
script << "\"$CONFIGURATION_BUILD_DIR/" << Project::getVST3FileWriterName() << "\" "
|
||||||
"-create "
|
"-create "
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue