diff --git a/CMakeLists.txt b/CMakeLists.txt
index e35658db19..be73802ffa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -55,7 +55,7 @@ include(extras/Build/CMake/JUCEUtils.cmake)
set_directory_properties(PROPERTIES
JUCE_COMPANY_NAME "JUCE"
- JUCE_COMPANY_WEBSITE "juce.com"
+ JUCE_COMPANY_WEBSITE "https://juce.com"
JUCE_COMPANY_EMAIL "info@juce.com"
JUCE_COMPANY_COPYRIGHT "Copyright (c) 2020 - Raw Material Software Limited")
@@ -138,6 +138,7 @@ install(FILES "${JUCE_BINARY_DIR}/JUCEConfigVersion.cmake"
"${JUCE_CMAKE_UTILS_DIR}/JUCEHelperTargets.cmake"
"${JUCE_CMAKE_UTILS_DIR}/JUCEModuleSupport.cmake"
"${JUCE_CMAKE_UTILS_DIR}/JUCEUtils.cmake"
+ "${JUCE_CMAKE_UTILS_DIR}/JuceLV2Defines.h.in"
"${JUCE_CMAKE_UTILS_DIR}/LaunchScreen.storyboard"
"${JUCE_CMAKE_UTILS_DIR}/PIPAudioProcessor.cpp.in"
"${JUCE_CMAKE_UTILS_DIR}/PIPComponent.cpp.in"
diff --git a/examples/DemoRunner/Builds/LinuxMakefile/Makefile b/examples/DemoRunner/Builds/LinuxMakefile/Makefile
index 236baadfd0..4501004c8e 100644
--- a/examples/DemoRunner/Builds/LinuxMakefile/Makefile
+++ b/examples/DemoRunner/Builds/LinuxMakefile/Makefile
@@ -40,7 +40,7 @@ ifeq ($(CONFIG),Debug)
endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60106" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_box2d=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_USE_MP3AUDIOFORMAT=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_USE_CAMERA=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=6.1.6" "-DJUCE_APP_VERSION_HEX=0x60106" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
- JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
+ JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := DemoRunner
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS)
@@ -61,7 +61,7 @@ ifeq ($(CONFIG),Release)
endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60106" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_box2d=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_USE_MP3AUDIOFORMAT=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_USE_CAMERA=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=6.1.6" "-DJUCE_APP_VERSION_HEX=0x60106" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
- JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
+ JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := DemoRunner
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 $(CFLAGS)
diff --git a/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj b/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj
index a000dd3d7e..60f1814900 100644
--- a/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj
+++ b/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj
@@ -552,6 +552,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
@@ -644,6 +645,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
diff --git a/examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj
index 7af428eb3e..fff1bfc407 100644
--- a/examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
true
NotUsing
@@ -106,7 +106,7 @@
Full
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreaded
true
NotUsing
diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
index c2dc587bc3..08f94d3255 100644
--- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
true
NotUsing
@@ -106,7 +106,7 @@
Full
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreaded
true
NotUsing
diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
index 365218980b..fc20ce9631 100644
--- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
true
NotUsing
@@ -106,7 +106,7 @@
Full
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreaded
true
NotUsing
diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
index 467260f38c..145a0c3869 100644
--- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
true
NotUsing
@@ -106,7 +106,7 @@
Full
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_box2d=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_USE_MP3AUDIOFORMAT=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_USE_CAMERA=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreaded
true
NotUsing
diff --git a/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj b/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj
index eeddbe32f8..5230f6d63a 100644
--- a/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj
+++ b/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj
@@ -556,6 +556,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
@@ -648,6 +649,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
diff --git a/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile b/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile
index 90bc98ba94..a5a703096e 100644
--- a/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile
+++ b/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile
@@ -40,7 +40,7 @@ ifeq ($(CONFIG),Debug)
endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60106" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
- JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
+ JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := AudioPerformanceTest
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS)
@@ -61,7 +61,7 @@ ifeq ($(CONFIG),Release)
endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60106" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
- JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
+ JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := AudioPerformanceTest
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 $(CFLAGS)
diff --git a/extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj b/extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj
index 164a725b88..47e4d35f5c 100644
--- a/extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj
+++ b/extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj
@@ -354,6 +354,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
@@ -417,6 +418,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
index e1211c3072..83cfb2029f 100644
--- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
+++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
true
NotUsing
@@ -105,7 +105,7 @@
Full
..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDLL
true
NotUsing
diff --git a/extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj b/extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj
index b7e28d9ce5..b43aa9a583 100644
--- a/extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj
+++ b/extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj
@@ -367,6 +367,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
@@ -429,6 +430,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
diff --git a/extras/AudioPluginHost/Builds/LinuxMakefile/Makefile b/extras/AudioPluginHost/Builds/LinuxMakefile/Makefile
index 7fd2578a66..b5ae84ac75 100644
--- a/extras/AudioPluginHost/Builds/LinuxMakefile/Makefile
+++ b/extras/AudioPluginHost/Builds/LinuxMakefile/Makefile
@@ -40,7 +40,7 @@ ifeq ($(CONFIG),Debug)
endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60106" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
- JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
+ JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := AudioPluginHost
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS)
@@ -61,7 +61,7 @@ ifeq ($(CONFIG),Release)
endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60106" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_WASAPI=1" "-DJUCE_DIRECTSOUND=1" "-DJUCE_ALSA=1" "-DJUCE_USE_FLAC=0" "-DJUCE_USE_OGGVORBIS=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_AU=1" "-DJUCE_PLUGINHOST_LADSPA=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_USE_CDREADER=0" "-DJUCE_USE_CDBURNER=0" "-DJUCE_WEB_BROWSER=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
- JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
+ JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := AudioPluginHost
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -Os $(CFLAGS)
diff --git a/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj b/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj
index ace3223cc1..78aac00578 100644
--- a/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj
+++ b/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj
@@ -477,6 +477,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
@@ -617,6 +618,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj
index 3dca655868..5a347101d3 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
true
NotUsing
@@ -106,7 +106,7 @@
Full
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDLL
true
NotUsing
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
index b615027cbd..ad59eadc2b 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
true
NotUsing
@@ -106,7 +106,7 @@
Full
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDLL
true
NotUsing
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
index 458f0ec903..3a444aac02 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
true
NotUsing
@@ -106,7 +106,7 @@
Full
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDLL
true
NotUsing
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
index f2391d269d..134418ca2f 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
true
NotUsing
@@ -106,7 +106,7 @@
Full
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_WASAPI=1;JUCE_DIRECTSOUND=1;JUCE_ALSA=1;JUCE_USE_FLAC=0;JUCE_USE_OGGVORBIS=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_AU=1;JUCE_PLUGINHOST_LADSPA=1;JUCE_PLUGINHOST_LV2=1;JUCE_USE_CDREADER=0;JUCE_USE_CDBURNER=0;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDLL
true
NotUsing
diff --git a/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj b/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj
index 77eb91a585..2333e3ba22 100644
--- a/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj
+++ b/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj
@@ -486,6 +486,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
@@ -627,6 +628,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
diff --git a/extras/BinaryBuilder/Builds/LinuxMakefile/Makefile b/extras/BinaryBuilder/Builds/LinuxMakefile/Makefile
index 7a1affb4e9..2aa29378af 100644
--- a/extras/BinaryBuilder/Builds/LinuxMakefile/Makefile
+++ b/extras/BinaryBuilder/Builds/LinuxMakefile/Makefile
@@ -40,7 +40,7 @@ ifeq ($(CONFIG),Debug)
endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60106" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
- JUCE_CPPFLAGS_CONSOLEAPP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
+ JUCE_CPPFLAGS_CONSOLEAPP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_CONSOLEAPP := BinaryBuilder
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS)
@@ -61,7 +61,7 @@ ifeq ($(CONFIG),Release)
endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60106" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
- JUCE_CPPFLAGS_CONSOLEAPP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
+ JUCE_CPPFLAGS_CONSOLEAPP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_CONSOLEAPP := BinaryBuilder
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -Os $(CFLAGS)
diff --git a/extras/BinaryBuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj b/extras/BinaryBuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj
index 83de5c3d8d..acc1688263 100644
--- a/extras/BinaryBuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj
+++ b/extras/BinaryBuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj
@@ -216,6 +216,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
@@ -314,6 +315,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
diff --git a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj
index 62cf8190d0..d388eecece 100644
--- a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj
+++ b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
true
NotUsing
@@ -105,7 +105,7 @@
Full
..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDLL
true
NotUsing
diff --git a/extras/Build/CMake/JUCEConfig.cmake.in b/extras/Build/CMake/JUCEConfig.cmake.in
index 782c732154..6a96e24e57 100644
--- a/extras/Build/CMake/JUCEConfig.cmake.in
+++ b/extras/Build/CMake/JUCEConfig.cmake.in
@@ -20,6 +20,8 @@
@PACKAGE_INIT@
+include("${CMAKE_CURRENT_LIST_DIR}/LV2_HELPER.cmake")
+
if(NOT TARGET juce::juceaide)
add_executable(juce::juceaide IMPORTED)
set_target_properties(juce::juceaide PROPERTIES
diff --git a/extras/Build/CMake/JUCEUtils.cmake b/extras/Build/CMake/JUCEUtils.cmake
index eb32c1eb58..a2de746b1e 100644
--- a/extras/Build/CMake/JUCEUtils.cmake
+++ b/extras/Build/CMake/JUCEUtils.cmake
@@ -68,6 +68,10 @@ define_property(TARGET PROPERTY JUCE_UNITY_COPY_DIR INHERITED
BRIEF_DOCS "Install location for Unity plugins"
FULL_DOCS "This is where the plugin will be copied if plugin copying is enabled")
+define_property(TARGET PROPERTY JUCE_LV2_COPY_DIR INHERITED
+ BRIEF_DOCS "Install location for LV2 plugins"
+ FULL_DOCS "This is where the plugin will be copied if plugin copying is enabled")
+
define_property(TARGET PROPERTY JUCE_COPY_PLUGIN_AFTER_BUILD INHERITED
BRIEF_DOCS "Whether or not plugins should be copied after building"
FULL_DOCS "Whether or not plugins should be copied after building")
@@ -90,10 +94,12 @@ endif()
function(_juce_set_default_properties)
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
- set_property(GLOBAL PROPERTY JUCE_VST_COPY_DIR "$ENV{HOME}/Library/Audio/Plug-Ins/VST")
- set_property(GLOBAL PROPERTY JUCE_VST3_COPY_DIR "$ENV{HOME}/Library/Audio/Plug-Ins/VST3")
- set_property(GLOBAL PROPERTY JUCE_AU_COPY_DIR "$ENV{HOME}/Library/Audio/Plug-Ins/Components")
- set_property(GLOBAL PROPERTY JUCE_AAX_COPY_DIR "/Library/Application Support/Avid/Audio/Plug-Ins")
+ set_property(GLOBAL PROPERTY JUCE_LV2_COPY_DIR "$ENV{HOME}/Library/Audio/Plug-Ins/LV2")
+ set_property(GLOBAL PROPERTY JUCE_VST_COPY_DIR "$ENV{HOME}/Library/Audio/Plug-Ins/VST")
+ set_property(GLOBAL PROPERTY JUCE_VST3_COPY_DIR "$ENV{HOME}/Library/Audio/Plug-Ins/VST3")
+ set_property(GLOBAL PROPERTY JUCE_AU_COPY_DIR "$ENV{HOME}/Library/Audio/Plug-Ins/Components")
+ set_property(GLOBAL PROPERTY JUCE_UNITY_COPY_DIR "$ENV{HOME}/Library/Audio/Plug-Ins/Unity")
+ set_property(GLOBAL PROPERTY JUCE_AAX_COPY_DIR "/Library/Application Support/Avid/Audio/Plug-Ins")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set_property(GLOBAL PROPERTY JUCE_VST_COPY_DIR "$ENV{ProgramW6432}/Steinberg/Vstplugins")
@@ -103,11 +109,15 @@ function(_juce_set_default_properties)
set(prefix "$ENV{CommonProgramFiles\(x86\)}")
endif()
- set_property(GLOBAL PROPERTY JUCE_VST3_COPY_DIR "${prefix}/VST3")
- set_property(GLOBAL PROPERTY JUCE_AAX_COPY_DIR "${prefix}/Avid/Audio/Plug-Ins")
+ set_property(GLOBAL PROPERTY JUCE_VST3_COPY_DIR "${prefix}/VST3")
+ set_property(GLOBAL PROPERTY JUCE_AAX_COPY_DIR "${prefix}/Avid/Audio/Plug-Ins")
+ set_property(GLOBAL PROPERTY JUCE_LV2_COPY_DIR "$ENV{APPDATA}/LV2")
+ set_property(GLOBAL PROPERTY JUCE_UNITY_COPY_DIR "$ENV{APPDATA}/Unity")
elseif((CMAKE_SYSTEM_NAME STREQUAL "Linux") OR (CMAKE_SYSTEM_NAME MATCHES ".*BSD"))
- set_property(GLOBAL PROPERTY JUCE_VST_COPY_DIR "$ENV{HOME}/.vst")
- set_property(GLOBAL PROPERTY JUCE_VST3_COPY_DIR "$ENV{HOME}/.vst3")
+ set_property(GLOBAL PROPERTY JUCE_LV2_COPY_DIR "$ENV{HOME}/.lv2")
+ set_property(GLOBAL PROPERTY JUCE_VST_COPY_DIR "$ENV{HOME}/.vst")
+ set_property(GLOBAL PROPERTY JUCE_VST3_COPY_DIR "$ENV{HOME}/.vst3")
+ set_property(GLOBAL PROPERTY JUCE_UNITY_COPY_DIR "$ENV{HOME}/.unity")
endif()
endfunction()
@@ -499,10 +509,13 @@ function(_juce_execute_juceaide)
message(FATAL_ERROR "juceaide was imported, but it doesn't exist!")
endif()
- execute_process(COMMAND "${juceaide_location}" ${ARGN} RESULT_VARIABLE result_variable)
+ execute_process(COMMAND "${juceaide_location}" ${ARGN}
+ RESULT_VARIABLE result_variable
+ OUTPUT_VARIABLE output
+ ERROR_VARIABLE output)
if(result_variable)
- message(FATAL_ERROR "Running juceaide failed")
+ message(FATAL_ERROR "Running juceaide failed:\n${output}")
endif()
endfunction()
@@ -985,6 +998,29 @@ function(_juce_set_plugin_target_properties shared_code_target kind)
"${script_file}"
JUCE_UNITY_COPY_DIR)
endif()
+ elseif(kind STREQUAL "LV2")
+ set_target_properties(${target_name} PROPERTIES BUNDLE FALSE)
+
+ get_target_property(JUCE_LV2URI "${shared_code_target}" JUCE_LV2URI)
+
+ if(NOT JUCE_LV2URI MATCHES "https?://.*")
+ message(WARNING
+ "LV2URI should be well-formed with an 'http' prefix. "
+ "Check the LV2URI argument to juce_add_plugin.")
+ endif()
+
+ set(source_header "${JUCE_CMAKE_UTILS_DIR}/JuceLV2Defines.h.in")
+ get_target_property(juce_library_code "${shared_code_target}" JUCE_GENERATED_SOURCES_DIRECTORY)
+ configure_file("${source_header}" "${juce_library_code}/JuceLV2Defines.h")
+
+ set(output_path "${products_folder}/${product_name}.lv2")
+ set_target_properties(${target_name} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${output_path}")
+
+ add_custom_command(TARGET ${target_name} POST_BUILD
+ COMMAND juce::juce_lv2_helper "$"
+ VERBATIM)
+
+ _juce_set_copy_properties(${shared_code_target} ${target_name} "${output_path}" JUCE_LV2_COPY_DIR)
endif()
endfunction()
@@ -1010,6 +1046,8 @@ function(_juce_get_plugin_kind_name kind out_var)
set(${out_var} "AUv3 AppExtension" PARENT_SCOPE)
elseif(kind STREQUAL "AAX")
set(${out_var} "AAX" PARENT_SCOPE)
+ elseif(kind STREQUAL "LV2")
+ set(${out_var} "LV2" PARENT_SCOPE)
elseif(kind STREQUAL "Standalone")
set(${out_var} "Standalone Plugin" PARENT_SCOPE)
elseif(kind STREQUAL "Unity")
@@ -1070,7 +1108,10 @@ function(_juce_link_plugin_wrapper shared_code_target kind)
add_dependencies(${shared_code_target}_All ${target_name})
- _juce_configure_bundle(${shared_code_target} ${target_name})
+ if(NOT kind STREQUAL "LV2")
+ _juce_configure_bundle(${shared_code_target} ${target_name})
+ endif()
+
_juce_set_plugin_target_properties(${shared_code_target} ${kind})
endfunction()
@@ -1464,6 +1505,12 @@ function(_juce_set_fallback_properties target)
if(NOT aax_category_int STREQUAL "")
set_target_properties(${target} PROPERTIES JUCE_AAX_CATEGORY ${aax_category_int})
endif()
+
+ # Ensure this matches the Projucer implementation
+ get_target_property(company_website ${target} JUCE_COMPANY_WEBSITE)
+ get_target_property(plugin_name ${target} JUCE_PLUGIN_NAME)
+ string(MAKE_C_IDENTIFIER "${plugin_name}" plugin_name_sanitised)
+ _juce_set_property_if_not_set(${target} LV2URI "${company_website}/plugins/${plugin_name_sanitised}")
endfunction()
# ==================================================================================================
@@ -1530,6 +1577,7 @@ function(_juce_initialise_target target)
SUPPRESS_AU_PLIST_RESOURCE_USAGE
PLUGINHOST_AU # Set this true if you want to host AU plugins
USE_LEGACY_COMPATIBILITY_PLUGIN_CODE
+ LV2URI
VST_COPY_DIR
VST3_COPY_DIR
@@ -1768,7 +1816,7 @@ function(juce_add_pip header)
list(APPEND extra_target_args MICROPHONE_PERMISSION_ENABLED TRUE)
juce_add_plugin(${JUCE_PIP_NAME}
- FORMATS AU AUv3 VST3 Unity Standalone ${extra_formats}
+ FORMATS AU AUv3 LV2 Standalone Unity VST3 ${extra_formats}
${extra_target_args})
elseif(pip_kind STREQUAL "Component")
set(source_main "${JUCE_CMAKE_UTILS_DIR}/PIPComponent.cpp.in")
diff --git a/extras/Build/CMake/JuceLV2Defines.h.in b/extras/Build/CMake/JuceLV2Defines.h.in
new file mode 100644
index 0000000000..3e3ea0e783
--- /dev/null
+++ b/extras/Build/CMake/JuceLV2Defines.h.in
@@ -0,0 +1,5 @@
+#pragma once
+
+#ifndef JucePlugin_LV2URI
+ #define JucePlugin_LV2URI "${JUCE_LV2URI}"
+#endif
diff --git a/extras/Build/juce_build_tools/utils/juce_BuildHelperFunctions.cpp b/extras/Build/juce_build_tools/utils/juce_BuildHelperFunctions.cpp
index cce91a2cd4..db222a368b 100644
--- a/extras/Build/juce_build_tools/utils/juce_BuildHelperFunctions.cpp
+++ b/extras/Build/juce_build_tools/utils/juce_BuildHelperFunctions.cpp
@@ -71,6 +71,8 @@ namespace build_tools
case Type::ConsoleApp:
case Type::StaticLibrary:
case Type::DynamicLibrary:
+ case Type::LV2PlugIn:
+ case Type::LV2TurtleProgram:
case Type::SharedCodeTarget:
case Type::AggregateTarget:
case Type::unspecified:
@@ -101,6 +103,8 @@ namespace build_tools
case Type::ConsoleApp:
case Type::StaticLibrary:
case Type::DynamicLibrary:
+ case Type::LV2PlugIn:
+ case Type::LV2TurtleProgram:
case Type::SharedCodeTarget:
case Type::AggregateTarget:
case Type::unspecified:
diff --git a/extras/Build/juce_build_tools/utils/juce_ProjectType.h b/extras/Build/juce_build_tools/utils/juce_ProjectType.h
index 151601ac64..f65e8c5330 100644
--- a/extras/Build/juce_build_tools/utils/juce_ProjectType.h
+++ b/extras/Build/juce_build_tools/utils/juce_ProjectType.h
@@ -69,10 +69,13 @@ namespace build_tools
AudioUnitv3PlugIn = 15,
StandalonePlugIn = 16,
UnityPlugIn = 17,
+ LV2PlugIn = 18,
SharedCodeTarget = 20, // internal
AggregateTarget = 21,
+ LV2TurtleProgram = 25, // internal
+
unspecified = 30
};
@@ -105,8 +108,10 @@ namespace build_tools
case AAXPlugIn: return "AAX";
case RTASPlugIn: return "RTAS";
case UnityPlugIn: return "Unity Plugin";
+ case LV2PlugIn: return "LV2 Plugin";
case SharedCodeTarget: return "Shared Code";
case AggregateTarget: return "All";
+ case LV2TurtleProgram: return "LV2 Manifest Helper";
case unspecified:
default: break;
}
@@ -116,20 +121,22 @@ namespace build_tools
static Type typeFromName (const String& name)
{
- if (name == "App") return Type::GUIApp;
- if (name == "ConsoleApp") return Type::ConsoleApp;
- if (name == "Static Library") return Type::StaticLibrary;
- if (name == "Dynamic Library") return Type::DynamicLibrary;
- if (name == "VST") return Type::VSTPlugIn;
- if (name == "VST3") return Type::VST3PlugIn;
- if (name == "AU") return Type::AudioUnitPlugIn;
- if (name == "Standalone Plugin") return Type::StandalonePlugIn;
- if (name == "AUv3 AppExtension") return Type::AudioUnitv3PlugIn;
- if (name == "AAX") return Type::AAXPlugIn;
- if (name == "RTAS") return Type::RTASPlugIn;
- if (name == "Unity Plugin") return Type::UnityPlugIn;
- if (name == "Shared Code") return Type::SharedCodeTarget;
- if (name == "All") return Type::AggregateTarget;
+ if (name == "App") return Type::GUIApp;
+ if (name == "ConsoleApp") return Type::ConsoleApp;
+ if (name == "Static Library") return Type::StaticLibrary;
+ if (name == "Dynamic Library") return Type::DynamicLibrary;
+ if (name == "VST") return Type::VSTPlugIn;
+ if (name == "VST3") return Type::VST3PlugIn;
+ if (name == "AU") return Type::AudioUnitPlugIn;
+ if (name == "Standalone Plugin") return Type::StandalonePlugIn;
+ if (name == "AUv3 AppExtension") return Type::AudioUnitv3PlugIn;
+ if (name == "AAX") return Type::AAXPlugIn;
+ if (name == "RTAS") return Type::RTASPlugIn;
+ if (name == "Unity Plugin") return Type::UnityPlugIn;
+ if (name == "LV2 Plugin") return Type::LV2PlugIn;
+ if (name == "Shared Code") return Type::SharedCodeTarget;
+ if (name == "All") return Type::AggregateTarget;
+ if (name == "LV2 Manifest Helper") return Type::LV2TurtleProgram;
jassertfalse;
return Type::ConsoleApp;
@@ -151,7 +158,9 @@ namespace build_tools
case AAXPlugIn: return pluginBundle;
case RTASPlugIn: return pluginBundle;
case UnityPlugIn: return pluginBundle;
+ case LV2PlugIn: return pluginBundle;
case SharedCodeTarget: return staticLibrary;
+ case LV2TurtleProgram: return executable;
case AggregateTarget:
case unspecified:
default: break;
@@ -236,6 +245,8 @@ namespace build_tools
case Target::AudioUnitv3PlugIn:
case Target::StandalonePlugIn:
case Target::UnityPlugIn:
+ case Target::LV2PlugIn:
+ case Target::LV2TurtleProgram:
case Target::SharedCodeTarget:
case Target::AggregateTarget:
return true;
diff --git a/extras/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile b/extras/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile
index f75f6cc524..ae0f896c9a 100644
--- a/extras/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile
+++ b/extras/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile
@@ -40,7 +40,7 @@ ifeq ($(CONFIG),Debug)
endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60106" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
- JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
+ JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := JUCE\ Network\ Graphics\ Demo
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS)
@@ -61,7 +61,7 @@ ifeq ($(CONFIG),Release)
endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60106" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
- JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
+ JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := JUCE\ Network\ Graphics\ Demo
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 $(CFLAGS)
diff --git a/extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.pbxproj b/extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.pbxproj
index adb24a00db..6829fd1ba3 100644
--- a/extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.pbxproj
+++ b/extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.pbxproj
@@ -397,6 +397,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
@@ -562,6 +563,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
index 853b7b22c9..dc3c7d0c88 100644
--- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
+++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
true
NotUsing
@@ -105,7 +105,7 @@
Full
..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDLL
true
NotUsing
diff --git a/extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.pbxproj b/extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.pbxproj
index 1ad1b06da9..df1bc6aaa8 100644
--- a/extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.pbxproj
+++ b/extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.pbxproj
@@ -410,6 +410,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
@@ -578,6 +579,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
diff --git a/extras/Projucer/Builds/LinuxMakefile/Makefile b/extras/Projucer/Builds/LinuxMakefile/Makefile
index 263c613a7a..68e41d3407 100644
--- a/extras/Projucer/Builds/LinuxMakefile/Makefile
+++ b/extras/Projucer/Builds/LinuxMakefile/Makefile
@@ -40,7 +40,7 @@ ifeq ($(CONFIG),Debug)
endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60106" "-DJUCE_MODULE_AVAILABLE_juce_build_tools=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_LOG_ASSERTIONS=1" "-DJUCE_USE_CURL=1" "-DJUCE_LOAD_CURL_SYMBOLS_LAZILY=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_WEB_BROWSER=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=6.1.6" "-DJUCE_APP_VERSION_HEX=0x60106" $(shell $(PKG_CONFIG) --cflags freetype2) -pthread -I../../JuceLibraryCode -I../../../Build -I../../../../modules $(CPPFLAGS)
- JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
+ JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := Projucer
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS)
@@ -61,7 +61,7 @@ ifeq ($(CONFIG),Release)
endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60106" "-DJUCE_MODULE_AVAILABLE_juce_build_tools=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_LOG_ASSERTIONS=1" "-DJUCE_USE_CURL=1" "-DJUCE_LOAD_CURL_SYMBOLS_LAZILY=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_WEB_BROWSER=0" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=6.1.6" "-DJUCE_APP_VERSION_HEX=0x60106" $(shell $(PKG_CONFIG) --cflags freetype2) -pthread -I../../JuceLibraryCode -I../../../Build -I../../../../modules $(CPPFLAGS)
- JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
+ JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_APP := Projucer
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 $(CFLAGS)
diff --git a/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj b/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj
index 5c5fe087f8..b40db3b608 100644
--- a/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj
+++ b/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj
@@ -246,6 +246,7 @@
8FEF6F5EA676B824C021EB6F /* wizard_AnimatedApp.svg */ /* wizard_AnimatedApp.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; name = wizard_AnimatedApp.svg; path = ../../Source/BinaryData/Icons/wizard_AnimatedApp.svg; sourceTree = SOURCE_ROOT; };
8FF26BF72A522FBEAAFDDF54 /* wizard_AudioApp.svg */ /* wizard_AudioApp.svg */ = {isa = PBXFileReference; lastKnownFileType = file.svg; name = wizard_AudioApp.svg; path = ../../Source/BinaryData/Icons/wizard_AudioApp.svg; sourceTree = SOURCE_ROOT; };
9069981E414A631B036CC9AC /* jucer_MainWindow.cpp */ /* jucer_MainWindow.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_MainWindow.cpp; path = ../../Source/Application/jucer_MainWindow.cpp; sourceTree = SOURCE_ROOT; };
+ 921D263A2EAFD96C8D389693 /* JuceLV2Defines.h.in */ /* JuceLV2Defines.h.in */ = {isa = PBXFileReference; lastKnownFileType = file.in; name = JuceLV2Defines.h.in; path = ../../../Build/CMake/JuceLV2Defines.h.in; sourceTree = SOURCE_ROOT; };
92926A4D3CC4BB2A9D35EB0B /* jucer_UTF8WindowComponent.h */ /* jucer_UTF8WindowComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_UTF8WindowComponent.h; path = ../../Source/Application/Windows/jucer_UTF8WindowComponent.h; sourceTree = SOURCE_ROOT; };
92A66A8BD87F98EB6B4FB6D0 /* jucer_ProjectContentComponent.h */ /* jucer_ProjectContentComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectContentComponent.h; path = ../../Source/Project/UI/jucer_ProjectContentComponent.h; sourceTree = SOURCE_ROOT; };
94146B40B41BF0AACF4359DD /* jucer_LicenseState.h */ /* jucer_LicenseState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_LicenseState.h; path = ../../Source/Application/UserAccount/jucer_LicenseState.h; sourceTree = SOURCE_ROOT; };
@@ -846,6 +847,7 @@
DC3A4B0AD79334BA8A7E0661 /* BinaryData */ = {
isa = PBXGroup;
children = (
+ 921D263A2EAFD96C8D389693,
50F89D3827B83B48855B3564,
A0ECDAF137029C445910D3ED,
463C8CF42FAA00014198B71B,
@@ -1157,6 +1159,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
@@ -1227,6 +1230,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
diff --git a/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj
index 9084547f13..eef4cbe087 100644
--- a/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
true
NotUsing
@@ -106,7 +106,7 @@
Full
..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreaded
true
NotUsing
@@ -2141,6 +2141,7 @@
+
diff --git a/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj.filters
index 97820a92ca..d5f0a1bc4a 100644
--- a/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj.filters
@@ -3776,6 +3776,9 @@
+
+ Projucer\BinaryData
+
Projucer\BinaryData
diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj
index 712ba5f91d..5b8cd08ba0 100644
--- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebug
true
NotUsing
@@ -106,7 +106,7 @@
Full
..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreaded
true
NotUsing
@@ -2141,6 +2141,7 @@
+
diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters
index 8181840dfc..3db0598689 100644
--- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters
@@ -3776,6 +3776,9 @@
+
+ Projucer\BinaryData
+
Projucer\BinaryData
diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
index 9b2d02fd14..92e787482d 100644
--- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebug
true
NotUsing
@@ -106,7 +106,7 @@
Full
..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreaded
true
NotUsing
@@ -2141,6 +2141,7 @@
+
diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
index 47f240eeb9..3a6b70316d 100644
--- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
@@ -3776,6 +3776,9 @@
+
+ Projucer\BinaryData
+
Projucer\BinaryData
diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
index d8dcb4a4b2..1ad2377115 100644
--- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebug
true
NotUsing
@@ -106,7 +106,7 @@
Full
..\..\JuceLibraryCode;..\..\..\Build;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_build_tools=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_LOG_ASSERTIONS=1;JUCE_USE_CURL=1;JUCE_LOAD_CURL_SYMBOLS_LAZILY=1;JUCE_ALLOW_STATIC_NULL_VARIABLES=0;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_WEB_BROWSER=0;JUCE_STANDALONE_APPLICATION=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=6.1.6;JUCE_APP_VERSION_HEX=0x60106;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreaded
true
NotUsing
@@ -2141,6 +2141,7 @@
+
diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
index 5f8655e7ec..154e88be0d 100644
--- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
@@ -3776,6 +3776,9 @@
+
+ Projucer\BinaryData
+
Projucer\BinaryData
diff --git a/extras/Projucer/CMakeLists.txt b/extras/Projucer/CMakeLists.txt
index fa336401c3..c31a76c74c 100644
--- a/extras/Projucer/CMakeLists.txt
+++ b/extras/Projucer/CMakeLists.txt
@@ -142,6 +142,7 @@ juce_add_binary_data(ProjucerData SOURCES
Source/BinaryData/gradle/gradlew
Source/BinaryData/gradle/gradlew.bat
+ ../Build/CMake/JuceLV2Defines.h.in
../Build/CMake/LaunchScreen.storyboard
../Build/CMake/PIPAudioProcessor.cpp.in
../Build/CMake/PIPComponent.cpp.in
diff --git a/extras/Projucer/JuceLibraryCode/BinaryData.cpp b/extras/Projucer/JuceLibraryCode/BinaryData.cpp
index 7b5505add3..7bd0332fe2 100644
--- a/extras/Projucer/JuceLibraryCode/BinaryData.cpp
+++ b/extras/Projucer/JuceLibraryCode/BinaryData.cpp
@@ -9,8 +9,18 @@
namespace BinaryData
{
-//================== LaunchScreen.storyboard ==================
+//================== JuceLV2Defines.h.in ==================
static const unsigned char temp_binary_data_0[] =
+"#pragma once\n"
+"\n"
+"#ifndef JucePlugin_LV2URI\n"
+" #define JucePlugin_LV2URI \"${JUCE_LV2URI}\"\n"
+"#endif\n";
+
+const char* JuceLV2Defines_h_in = (const char*) temp_binary_data_0;
+
+//================== LaunchScreen.storyboard ==================
+static const unsigned char temp_binary_data_1[] =
"\n"
"\n"
@@ -29,10 +39,10 @@ static const unsigned char temp_binary_data_0[] =
" \n"
"\n";
-const char* LaunchScreen_storyboard = (const char*) temp_binary_data_0;
+const char* LaunchScreen_storyboard = (const char*) temp_binary_data_1;
//================== PIPAudioProcessor.cpp.in ==================
-static const unsigned char temp_binary_data_1[] =
+static const unsigned char temp_binary_data_2[] =
"/*\n"
" ==============================================================================\n"
"\n"
@@ -50,10 +60,10 @@ static const unsigned char temp_binary_data_1[] =
" return new ${JUCE_PIP_MAIN_CLASS}();\n"
"}\n";
-const char* PIPAudioProcessor_cpp_in = (const char*) temp_binary_data_1;
+const char* PIPAudioProcessor_cpp_in = (const char*) temp_binary_data_2;
//================== PIPComponent.cpp.in ==================
-static const unsigned char temp_binary_data_2[] =
+static const unsigned char temp_binary_data_3[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -123,10 +133,10 @@ static const unsigned char temp_binary_data_2[] =
"//==============================================================================\r\n"
"START_JUCE_APPLICATION (Application)\r\n";
-const char* PIPComponent_cpp_in = (const char*) temp_binary_data_2;
+const char* PIPComponent_cpp_in = (const char*) temp_binary_data_3;
//================== PIPConsole.cpp.in ==================
-static const unsigned char temp_binary_data_3[] =
+static const unsigned char temp_binary_data_4[] =
"/*\n"
" ==============================================================================\n"
"\n"
@@ -138,10 +148,10 @@ static const unsigned char temp_binary_data_3[] =
"#include \n"
"#include \"${JUCE_PIP_HEADER}\"\n";
-const char* PIPConsole_cpp_in = (const char*) temp_binary_data_3;
+const char* PIPConsole_cpp_in = (const char*) temp_binary_data_4;
//================== RecentFilesMenuTemplate.nib ==================
-static const unsigned char temp_binary_data_4[] =
+static const unsigned char temp_binary_data_5[] =
{ 98,112,108,105,115,116,48,48,212,0,1,0,2,0,3,0,4,0,5,0,6,1,53,1,54,88,36,118,101,114,115,105,111,110,88,36,111,98,106,101,99,116,115,89,36,97,114,99,104,105,118,101,114,84,36,116,111,112,18,0,1,134,160,175,16,74,0,7,0,8,0,31,0,35,0,36,0,42,0,46,0,50,
0,53,0,57,0,74,0,77,0,78,0,86,0,87,0,97,0,112,0,113,0,114,0,119,0,120,0,121,0,124,0,128,0,129,0,132,0,143,0,144,0,145,0,149,0,153,0,162,0,163,0,164,0,169,0,173,0,180,0,181,0,182,0,185,0,192,0,193,0,200,0,201,0,208,0,209,0,216,0,217,0,224,0,225,0,226,
0,229,0,230,0,232,0,249,1,11,1,29,1,30,1,31,1,32,1,33,1,34,1,35,1,36,1,37,1,38,1,39,1,40,1,41,1,42,1,43,1,44,1,47,1,50,85,36,110,117,108,108,219,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,
@@ -178,10 +188,10 @@ static const unsigned char temp_binary_data_4[] =
7,157,7,159,7,161,7,163,7,165,7,167,7,169,7,171,7,173,7,175,7,177,7,179,7,181,7,190,7,192,7,225,7,227,7,229,7,231,7,233,7,235,7,237,7,239,7,241,7,243,7,245,7,247,7,249,7,251,7,253,7,255,8,2,8,5,8,8,8,11,8,14,8,17,8,20,8,23,8,26,8,29,8,32,8,35,8,38,8,
41,8,44,8,53,8,55,8,56,8,65,8,67,8,68,8,77,8,92,8,97,8,115,8,120,8,134,0,0,0,0,0,0,2,2,0,0,0,0,0,0,1,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,136,0,0 };
-const char* RecentFilesMenuTemplate_nib = (const char*) temp_binary_data_4;
+const char* RecentFilesMenuTemplate_nib = (const char*) temp_binary_data_5;
//================== UnityPluginGUIScript.cs.in ==================
-static const unsigned char temp_binary_data_5[] =
+static const unsigned char temp_binary_data_6[] =
"#if UNITY_EDITOR\n"
"\n"
"using UnityEditor;\n"
@@ -364,10 +374,10 @@ static const unsigned char temp_binary_data_5[] =
"\n"
"#endif\n";
-const char* UnityPluginGUIScript_cs_in = (const char*) temp_binary_data_5;
+const char* UnityPluginGUIScript_cs_in = (const char*) temp_binary_data_6;
//================== gradle-wrapper.jar ==================
-static const unsigned char temp_binary_data_6[] =
+static const unsigned char temp_binary_data_7[] =
{ 80,75,3,4,10,0,0,8,8,0,42,178,149,71,0,0,0,0,2,0,0,0,0,0,0,0,9,0,0,0,77,69,84,65,45,73,78,70,47,3,0,80,75,3,4,10,0,0,8,8,0,42,178,149,71,215,149,152,82,63,0,0,0,85,0,0,0,20,0,0,0,77,69,84,65,45,73,78,70,47,77,65,78,73,70,69,83,84,46,77,70,243,77,204,
203,76,75,45,46,209,13,75,45,42,206,204,207,179,82,48,212,51,224,229,242,204,45,200,73,205,77,205,43,73,44,1,10,234,134,100,150,228,164,90,41,184,23,37,166,228,164,98,200,194,181,26,233,25,2,245,242,114,1,0,80,75,3,4,10,0,0,8,8,0,22,178,149,71,0,0,0,
0,2,0,0,0,0,0,0,0,4,0,0,0,111,114,103,47,3,0,80,75,3,4,10,0,0,8,8,0,22,178,149,71,0,0,0,0,2,0,0,0,0,0,0,0,11,0,0,0,111,114,103,47,103,114,97,100,108,101,47,3,0,80,75,3,4,10,0,0,8,8,0,22,178,149,71,0,0,0,0,2,0,0,0,0,0,0,0,19,0,0,0,111,114,103,47,103,114,
@@ -1119,10 +1129,10 @@ static const unsigned char temp_binary_data_6[] =
76,105,110,101,80,97,114,115,101,114,36,65,102,116,101,114,70,105,114,115,116,83,117,98,67,111,109,109,97,110,100,46,99,108,97,115,115,80,75,1,2,20,3,10,0,0,8,8,0,10,178,149,71,105,222,125,0,70,0,0,0,68,0,0,0,31,0,0,0,0,0,0,0,0,0,0,0,180,129,219,191,
0,0,103,114,97,100,108,101,45,99,108,105,45,99,108,97,115,115,112,97,116,104,46,112,114,111,112,101,114,116,105,101,115,80,75,5,6,0,0,0,0,49,0,49,0,16,17,0,0,94,192,0,0,0,0,0,0 };
-const char* gradlewrapper_jar = (const char*) temp_binary_data_6;
+const char* gradlewrapper_jar = (const char*) temp_binary_data_7;
//================== gradlew ==================
-static const unsigned char temp_binary_data_7[] =
+static const unsigned char temp_binary_data_8[] =
"#!/usr/bin/env bash\n"
"\n"
"##############################################################################\n"
@@ -1284,10 +1294,10 @@ static const unsigned char temp_binary_data_7[] =
"\n"
"exec \"$JAVACMD\" \"${JVM_OPTS[@]}\" -classpath \"$CLASSPATH\" org.gradle.wrapper.GradleWrapperMain \"$@\"\n";
-const char* gradlew = (const char*) temp_binary_data_7;
+const char* gradlew = (const char*) temp_binary_data_8;
//================== gradlew.bat ==================
-static const unsigned char temp_binary_data_8[] =
+static const unsigned char temp_binary_data_9[] =
"@if \"%DEBUG%\" == \"\" @echo off\r\n"
"@rem ##########################################################################\r\n"
"@rem\r\n"
@@ -1379,10 +1389,10 @@ static const unsigned char temp_binary_data_8[] =
"\r\n"
":omega\r\n";
-const char* gradlew_bat = (const char*) temp_binary_data_8;
+const char* gradlew_bat = (const char*) temp_binary_data_9;
//================== LICENSE ==================
-static const unsigned char temp_binary_data_9[] =
+static const unsigned char temp_binary_data_10[] =
"Apache License\n"
" Version 2.0, January 2004\n"
" http://www.apache.org/licenses/\n"
@@ -1586,10 +1596,10 @@ static const unsigned char temp_binary_data_9[] =
" limitations under the License.\n"
"\n";
-const char* LICENSE = (const char*) temp_binary_data_9;
+const char* LICENSE = (const char*) temp_binary_data_10;
//================== background_logo.svg ==================
-static const unsigned char temp_binary_data_10[] =
+static const unsigned char temp_binary_data_11[] =
"\n";
-const char* background_logo_svg = (const char*) temp_binary_data_10;
+const char* background_logo_svg = (const char*) temp_binary_data_11;
//================== export_android.svg ==================
-static const unsigned char temp_binary_data_11[] =
+static const unsigned char temp_binary_data_12[] =
"\n"
"";
-const char* export_android_svg = (const char*) temp_binary_data_11;
+const char* export_android_svg = (const char*) temp_binary_data_12;
//================== export_clion.svg ==================
-static const unsigned char temp_binary_data_12[] =
+static const unsigned char temp_binary_data_13[] =
"\n";
-const char* export_clion_svg = (const char*) temp_binary_data_12;
+const char* export_clion_svg = (const char*) temp_binary_data_13;
//================== export_codeBlocks.svg ==================
-static const unsigned char temp_binary_data_13[] =
+static const unsigned char temp_binary_data_14[] =
"\n"
"";
-const char* export_codeBlocks_svg = (const char*) temp_binary_data_13;
+const char* export_codeBlocks_svg = (const char*) temp_binary_data_14;
//================== export_linux.svg ==================
-static const unsigned char temp_binary_data_14[] =
+static const unsigned char temp_binary_data_15[] =
"\n"
"";
-const char* export_linux_svg = (const char*) temp_binary_data_14;
+const char* export_linux_svg = (const char*) temp_binary_data_15;
//================== export_visualStudio.svg ==================
-static const unsigned char temp_binary_data_15[] =
+static const unsigned char temp_binary_data_16[] =
"\n"
"";
-const char* export_visualStudio_svg = (const char*) temp_binary_data_15;
+const char* export_visualStudio_svg = (const char*) temp_binary_data_16;
//================== export_xcode.svg ==================
-static const unsigned char temp_binary_data_16[] =
+static const unsigned char temp_binary_data_17[] =
"\n"
"";
-const char* export_xcode_svg = (const char*) temp_binary_data_16;
+const char* export_xcode_svg = (const char*) temp_binary_data_17;
//================== gpl_logo.svg ==================
-static const unsigned char temp_binary_data_17[] =
+static const unsigned char temp_binary_data_18[] =
"";
-const char* gpl_logo_svg = (const char*) temp_binary_data_17;
+const char* gpl_logo_svg = (const char*) temp_binary_data_18;
//================== juce_icon.png ==================
-static const unsigned char temp_binary_data_18[] =
+static const unsigned char temp_binary_data_19[] =
{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,0,0,0,2,0,8,6,0,0,0,244,120,212,250,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,132,101,88,73,102,77,77,0,42,0,0,0,8,0,5,1,18,0,3,0,0,0,1,0,1,0,0,1,26,0,5,0,0,0,1,0,0,0,74,1,27,0,5,0,0,0,1,0,0,0,82,
1,40,0,3,0,0,0,1,0,2,0,0,135,105,0,4,0,0,0,1,0,0,0,90,0,0,0,0,0,0,0,144,0,0,0,1,0,0,0,144,0,0,0,1,0,3,160,1,0,3,0,0,0,1,0,1,0,0,160,2,0,4,0,0,0,1,0,0,2,0,160,3,0,4,0,0,0,1,0,0,2,0,0,0,0,0,25,192,84,16,0,0,0,9,112,72,89,115,0,0,22,37,0,0,22,37,1,73,82,
36,240,0,0,1,89,105,84,88,116,88,77,76,58,99,111,109,46,97,100,111,98,101,46,120,109,112,0,0,0,0,0,60,120,58,120,109,112,109,101,116,97,32,120,109,108,110,115,58,120,61,34,97,100,111,98,101,58,110,115,58,109,101,116,97,47,34,32,120,58,120,109,112,116,
@@ -3585,10 +3595,10 @@ static const unsigned char temp_binary_data_18[] =
246,44,212,239,33,44,75,155,114,119,199,74,182,59,225,163,230,56,187,0,203,253,163,244,158,144,61,194,134,54,75,89,109,30,70,120,118,29,207,206,219,205,104,221,216,184,128,155,196,214,68,235,181,92,180,4,225,231,230,249,31,56,76,178,107,226,240,74,169,
60,174,167,167,149,58,7,146,87,83,147,170,92,246,47,193,107,255,83,221,119,125,168,20,16,4,4,1,245,55,199,228,93,104,231,183,98,169,0,0,0,0,73,69,78,68,174,66,96,130,0,0 };
-const char* juce_icon_png = (const char*) temp_binary_data_18;
+const char* juce_icon_png = (const char*) temp_binary_data_19;
//================== wizard_AnimatedApp.svg ==================
-static const unsigned char temp_binary_data_19[] =
+static const unsigned char temp_binary_data_20[] =
"\n"
"\n"
"\n"
@@ -3765,10 +3775,10 @@ static const unsigned char temp_binary_data_19[] =
" id=\"line44\"\n"
" style=\"stroke:#a45c94;stroke-opacity:0.94117647\" />";
-const char* wizard_AnimatedApp_svg = (const char*) temp_binary_data_19;
+const char* wizard_AnimatedApp_svg = (const char*) temp_binary_data_20;
//================== wizard_AudioApp.svg ==================
-static const unsigned char temp_binary_data_20[] =
+static const unsigned char temp_binary_data_21[] =
"\n"
"\n"
"\n"
@@ -4522,10 +4532,10 @@ static const unsigned char temp_binary_data_20[] =
" id=\"line131\"\n"
" style=\"stroke:#a45c94;stroke-opacity:1\" />";
-const char* wizard_AudioApp_svg = (const char*) temp_binary_data_20;
+const char* wizard_AudioApp_svg = (const char*) temp_binary_data_21;
//================== wizard_AudioPlugin.svg ==================
-static const unsigned char temp_binary_data_21[] =
+static const unsigned char temp_binary_data_22[] =
"\n"
"\n"
"\n"
@@ -5381,10 +5391,10 @@ static const unsigned char temp_binary_data_21[] =
" id=\"circle175\"\n"
" style=\"stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1\" />";
-const char* wizard_AudioPlugin_svg = (const char*) temp_binary_data_21;
+const char* wizard_AudioPlugin_svg = (const char*) temp_binary_data_22;
//================== wizard_ConsoleApp.svg ==================
-static const unsigned char temp_binary_data_22[] =
+static const unsigned char temp_binary_data_23[] =
"\n"
"\n"
"\n"
@@ -5471,10 +5481,10 @@ static const unsigned char temp_binary_data_22[] =
" id=\"path19\"\n"
" style=\"stroke:#a45c94;stroke-opacity:1;fill:#a45c94;fill-opacity:1\" />";
-const char* wizard_ConsoleApp_svg = (const char*) temp_binary_data_22;
+const char* wizard_ConsoleApp_svg = (const char*) temp_binary_data_23;
//================== wizard_DLL.svg ==================
-static const unsigned char temp_binary_data_23[] =
+static const unsigned char temp_binary_data_24[] =
"\n"
"\n"
"\n"
@@ -5745,10 +5755,10 @@ static const unsigned char temp_binary_data_23[] =
" id=\"path54\"\n"
" style=\"stroke:#a45c94;stroke-opacity:1\" />";
-const char* wizard_DLL_svg = (const char*) temp_binary_data_23;
+const char* wizard_DLL_svg = (const char*) temp_binary_data_24;
//================== wizard_GUI.svg ==================
-static const unsigned char temp_binary_data_24[] =
+static const unsigned char temp_binary_data_25[] =
"\n"
"\n"
"\n"
@@ -5918,10 +5928,10 @@ static const unsigned char temp_binary_data_24[] =
" id=\"path47\"\n"
" style=\"stroke:#a45c94;stroke-opacity:1\" />";
-const char* wizard_GUI_svg = (const char*) temp_binary_data_24;
+const char* wizard_GUI_svg = (const char*) temp_binary_data_25;
//================== wizard_Highlight.svg ==================
-static const unsigned char temp_binary_data_25[] =
+static const unsigned char temp_binary_data_26[] =
"\n"
"\n"
"\n"
@@ -5971,10 +5981,10 @@ static const unsigned char temp_binary_data_25[] =
" id=\"path3\"\n"
" style=\"fill:#a45c94;fill-opacity:1\" />";
-const char* wizard_Highlight_svg = (const char*) temp_binary_data_25;
+const char* wizard_Highlight_svg = (const char*) temp_binary_data_26;
//================== wizard_Openfile.svg ==================
-static const unsigned char temp_binary_data_26[] =
+static const unsigned char temp_binary_data_27[] =
"\n"
"\n"
"\n"
@@ -6026,10 +6036,10 @@ static const unsigned char temp_binary_data_26[] =
" id=\"path3\"\n"
" style=\"stroke:#a45c94;stroke-opacity:1\" />";
-const char* wizard_Openfile_svg = (const char*) temp_binary_data_26;
+const char* wizard_Openfile_svg = (const char*) temp_binary_data_27;
//================== wizard_OpenGL.svg ==================
-static const unsigned char temp_binary_data_27[] =
+static const unsigned char temp_binary_data_28[] =
"\n"
"\n"
"\n"
@@ -6157,10 +6167,10 @@ static const unsigned char temp_binary_data_27[] =
" id=\"path23\"\n"
" style=\"stroke:#a45c94;stroke-opacity:1\" />";
-const char* wizard_OpenGL_svg = (const char*) temp_binary_data_27;
+const char* wizard_OpenGL_svg = (const char*) temp_binary_data_28;
//================== wizard_StaticLibrary.svg ==================
-static const unsigned char temp_binary_data_28[] =
+static const unsigned char temp_binary_data_29[] =
"\n"
"\n"
"\n"
@@ -6431,10 +6441,10 @@ static const unsigned char temp_binary_data_28[] =
" id=\"path54\"\n"
" style=\"stroke:#a45c94;stroke-opacity:1\" />";
-const char* wizard_StaticLibrary_svg = (const char*) temp_binary_data_28;
+const char* wizard_StaticLibrary_svg = (const char*) temp_binary_data_29;
//================== jucer_AnimatedComponentSimpleTemplate.h ==================
-static const unsigned char temp_binary_data_29[] =
+static const unsigned char temp_binary_data_30[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@@ -6492,10 +6502,10 @@ static const unsigned char temp_binary_data_29[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
-const char* jucer_AnimatedComponentSimpleTemplate_h = (const char*) temp_binary_data_29;
+const char* jucer_AnimatedComponentSimpleTemplate_h = (const char*) temp_binary_data_30;
//================== jucer_AnimatedComponentTemplate.cpp ==================
-static const unsigned char temp_binary_data_30[] =
+static const unsigned char temp_binary_data_31[] =
"%%include_corresponding_header%%\r\n"
"\r\n"
"//==============================================================================\r\n"
@@ -6534,10 +6544,10 @@ static const unsigned char temp_binary_data_30[] =
" // update their positions.\r\n"
"}\r\n";
-const char* jucer_AnimatedComponentTemplate_cpp = (const char*) temp_binary_data_30;
+const char* jucer_AnimatedComponentTemplate_cpp = (const char*) temp_binary_data_31;
//================== jucer_AnimatedComponentTemplate.h ==================
-static const unsigned char temp_binary_data_31[] =
+static const unsigned char temp_binary_data_32[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@@ -6569,10 +6579,10 @@ static const unsigned char temp_binary_data_31[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
-const char* jucer_AnimatedComponentTemplate_h = (const char*) temp_binary_data_31;
+const char* jucer_AnimatedComponentTemplate_h = (const char*) temp_binary_data_32;
//================== jucer_AudioComponentSimpleTemplate.h ==================
-static const unsigned char temp_binary_data_32[] =
+static const unsigned char temp_binary_data_33[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@@ -6668,10 +6678,10 @@ static const unsigned char temp_binary_data_32[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
-const char* jucer_AudioComponentSimpleTemplate_h = (const char*) temp_binary_data_32;
+const char* jucer_AudioComponentSimpleTemplate_h = (const char*) temp_binary_data_33;
//================== jucer_AudioComponentTemplate.cpp ==================
-static const unsigned char temp_binary_data_33[] =
+static const unsigned char temp_binary_data_34[] =
"%%include_corresponding_header%%\r\n"
"\r\n"
"//==============================================================================\r\n"
@@ -6748,10 +6758,10 @@ static const unsigned char temp_binary_data_33[] =
" // update their positions.\r\n"
"}\r\n";
-const char* jucer_AudioComponentTemplate_cpp = (const char*) temp_binary_data_33;
+const char* jucer_AudioComponentTemplate_cpp = (const char*) temp_binary_data_34;
//================== jucer_AudioComponentTemplate.h ==================
-static const unsigned char temp_binary_data_34[] =
+static const unsigned char temp_binary_data_35[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@@ -6785,10 +6795,10 @@ static const unsigned char temp_binary_data_34[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
-const char* jucer_AudioComponentTemplate_h = (const char*) temp_binary_data_34;
+const char* jucer_AudioComponentTemplate_h = (const char*) temp_binary_data_35;
//================== jucer_AudioPluginEditorTemplate.cpp ==================
-static const unsigned char temp_binary_data_35[] =
+static const unsigned char temp_binary_data_36[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -6829,10 +6839,10 @@ static const unsigned char temp_binary_data_35[] =
" // subcomponents in your editor..\r\n"
"}\r\n";
-const char* jucer_AudioPluginEditorTemplate_cpp = (const char*) temp_binary_data_35;
+const char* jucer_AudioPluginEditorTemplate_cpp = (const char*) temp_binary_data_36;
//================== jucer_AudioPluginEditorTemplate.h ==================
-static const unsigned char temp_binary_data_36[] =
+static const unsigned char temp_binary_data_37[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -6866,10 +6876,10 @@ static const unsigned char temp_binary_data_36[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%editor_class_name%%)\r\n"
"};\r\n";
-const char* jucer_AudioPluginEditorTemplate_h = (const char*) temp_binary_data_36;
+const char* jucer_AudioPluginEditorTemplate_h = (const char*) temp_binary_data_37;
//================== jucer_AudioPluginFilterTemplate.cpp ==================
-static const unsigned char temp_binary_data_37[] =
+static const unsigned char temp_binary_data_38[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7061,10 +7071,10 @@ static const unsigned char temp_binary_data_37[] =
" return new %%filter_class_name%%();\r\n"
"}\r\n";
-const char* jucer_AudioPluginFilterTemplate_cpp = (const char*) temp_binary_data_37;
+const char* jucer_AudioPluginFilterTemplate_cpp = (const char*) temp_binary_data_38;
//================== jucer_AudioPluginFilterTemplate.h ==================
-static const unsigned char temp_binary_data_38[] =
+static const unsigned char temp_binary_data_39[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7125,10 +7135,10 @@ static const unsigned char temp_binary_data_38[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%filter_class_name%%)\r\n"
"};\r\n";
-const char* jucer_AudioPluginFilterTemplate_h = (const char*) temp_binary_data_38;
+const char* jucer_AudioPluginFilterTemplate_h = (const char*) temp_binary_data_39;
//================== jucer_ComponentTemplate.cpp ==================
-static const unsigned char temp_binary_data_39[] =
+static const unsigned char temp_binary_data_40[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7204,10 +7214,10 @@ static const unsigned char temp_binary_data_39[] =
"//[EndFile] You can add extra defines here...\r\n"
"//[/EndFile]\r\n";
-const char* jucer_ComponentTemplate_cpp = (const char*) temp_binary_data_39;
+const char* jucer_ComponentTemplate_cpp = (const char*) temp_binary_data_40;
//================== jucer_ComponentTemplate.h ==================
-static const unsigned char temp_binary_data_40[] =
+static const unsigned char temp_binary_data_41[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7270,10 +7280,10 @@ static const unsigned char temp_binary_data_40[] =
"//[EndFile] You can add extra defines here...\r\n"
"//[/EndFile]\r\n";
-const char* jucer_ComponentTemplate_h = (const char*) temp_binary_data_40;
+const char* jucer_ComponentTemplate_h = (const char*) temp_binary_data_41;
//================== jucer_ContentCompSimpleTemplate.h ==================
-static const unsigned char temp_binary_data_41[] =
+static const unsigned char temp_binary_data_42[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@@ -7323,10 +7333,10 @@ static const unsigned char temp_binary_data_41[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
-const char* jucer_ContentCompSimpleTemplate_h = (const char*) temp_binary_data_41;
+const char* jucer_ContentCompSimpleTemplate_h = (const char*) temp_binary_data_42;
//================== jucer_ContentCompTemplate.cpp ==================
-static const unsigned char temp_binary_data_42[] =
+static const unsigned char temp_binary_data_43[] =
"%%include_corresponding_header%%\r\n"
"\r\n"
"//==============================================================================\r\n"
@@ -7357,10 +7367,10 @@ static const unsigned char temp_binary_data_42[] =
" // update their positions.\r\n"
"}\r\n";
-const char* jucer_ContentCompTemplate_cpp = (const char*) temp_binary_data_42;
+const char* jucer_ContentCompTemplate_cpp = (const char*) temp_binary_data_43;
//================== jucer_ContentCompTemplate.h ==================
-static const unsigned char temp_binary_data_43[] =
+static const unsigned char temp_binary_data_44[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@@ -7389,10 +7399,10 @@ static const unsigned char temp_binary_data_43[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
-const char* jucer_ContentCompTemplate_h = (const char*) temp_binary_data_43;
+const char* jucer_ContentCompTemplate_h = (const char*) temp_binary_data_44;
//================== jucer_InlineComponentTemplate.h ==================
-static const unsigned char temp_binary_data_44[] =
+static const unsigned char temp_binary_data_45[] =
"//==============================================================================\r\n"
"class %%component_class%% : public juce::Component\r\n"
"{\r\n"
@@ -7434,10 +7444,10 @@ static const unsigned char temp_binary_data_44[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%component_class%%)\r\n"
"};\r\n";
-const char* jucer_InlineComponentTemplate_h = (const char*) temp_binary_data_44;
+const char* jucer_InlineComponentTemplate_h = (const char*) temp_binary_data_45;
//================== jucer_MainConsoleAppTemplate.cpp ==================
-static const unsigned char temp_binary_data_45[] =
+static const unsigned char temp_binary_data_46[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7458,10 +7468,10 @@ static const unsigned char temp_binary_data_45[] =
" return 0;\r\n"
"}\r\n";
-const char* jucer_MainConsoleAppTemplate_cpp = (const char*) temp_binary_data_45;
+const char* jucer_MainConsoleAppTemplate_cpp = (const char*) temp_binary_data_46;
//================== jucer_MainTemplate_NoWindow.cpp ==================
-static const unsigned char temp_binary_data_46[] =
+static const unsigned char temp_binary_data_47[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7514,10 +7524,10 @@ static const unsigned char temp_binary_data_46[] =
"// This macro generates the main() routine that launches the app.\r\n"
"START_JUCE_APPLICATION (%%app_class_name%%)\r\n";
-const char* jucer_MainTemplate_NoWindow_cpp = (const char*) temp_binary_data_46;
+const char* jucer_MainTemplate_NoWindow_cpp = (const char*) temp_binary_data_47;
//================== jucer_MainTemplate_Window.cpp ==================
-static const unsigned char temp_binary_data_47[] =
+static const unsigned char temp_binary_data_48[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7623,10 +7633,10 @@ static const unsigned char temp_binary_data_47[] =
"// This macro generates the main() routine that launches the app.\r\n"
"START_JUCE_APPLICATION (%%app_class_name%%)\r\n";
-const char* jucer_MainTemplate_Window_cpp = (const char*) temp_binary_data_47;
+const char* jucer_MainTemplate_Window_cpp = (const char*) temp_binary_data_48;
//================== jucer_NewComponentTemplate.cpp ==================
-static const unsigned char temp_binary_data_48[] =
+static const unsigned char temp_binary_data_49[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7679,10 +7689,10 @@ static const unsigned char temp_binary_data_48[] =
"\r\n"
"}\r\n";
-const char* jucer_NewComponentTemplate_cpp = (const char*) temp_binary_data_48;
+const char* jucer_NewComponentTemplate_cpp = (const char*) temp_binary_data_49;
//================== jucer_NewComponentTemplate.h ==================
-static const unsigned char temp_binary_data_49[] =
+static const unsigned char temp_binary_data_50[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7713,10 +7723,10 @@ static const unsigned char temp_binary_data_49[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%component_class%%)\r\n"
"};\r\n";
-const char* jucer_NewComponentTemplate_h = (const char*) temp_binary_data_49;
+const char* jucer_NewComponentTemplate_h = (const char*) temp_binary_data_50;
//================== jucer_NewCppFileTemplate.cpp ==================
-static const unsigned char temp_binary_data_50[] =
+static const unsigned char temp_binary_data_51[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7729,10 +7739,10 @@ static const unsigned char temp_binary_data_50[] =
"\r\n"
"%%include_corresponding_header%%\r\n";
-const char* jucer_NewCppFileTemplate_cpp = (const char*) temp_binary_data_50;
+const char* jucer_NewCppFileTemplate_cpp = (const char*) temp_binary_data_51;
//================== jucer_NewCppFileTemplate.h ==================
-static const unsigned char temp_binary_data_51[] =
+static const unsigned char temp_binary_data_52[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7745,10 +7755,10 @@ static const unsigned char temp_binary_data_51[] =
"\r\n"
"#pragma once\r\n";
-const char* jucer_NewCppFileTemplate_h = (const char*) temp_binary_data_51;
+const char* jucer_NewCppFileTemplate_h = (const char*) temp_binary_data_52;
//================== jucer_NewInlineComponentTemplate.h ==================
-static const unsigned char temp_binary_data_52[] =
+static const unsigned char temp_binary_data_53[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -7811,10 +7821,10 @@ static const unsigned char temp_binary_data_52[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%component_class%%)\r\n"
"};\r\n";
-const char* jucer_NewInlineComponentTemplate_h = (const char*) temp_binary_data_52;
+const char* jucer_NewInlineComponentTemplate_h = (const char*) temp_binary_data_53;
//================== jucer_OpenGLComponentSimpleTemplate.h ==================
-static const unsigned char temp_binary_data_53[] =
+static const unsigned char temp_binary_data_54[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@@ -7883,10 +7893,10 @@ static const unsigned char temp_binary_data_53[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
-const char* jucer_OpenGLComponentSimpleTemplate_h = (const char*) temp_binary_data_53;
+const char* jucer_OpenGLComponentSimpleTemplate_h = (const char*) temp_binary_data_54;
//================== jucer_OpenGLComponentTemplate.cpp ==================
-static const unsigned char temp_binary_data_54[] =
+static const unsigned char temp_binary_data_55[] =
"%%include_corresponding_header%%\r\n"
"\r\n"
"//==============================================================================\r\n"
@@ -7936,10 +7946,10 @@ static const unsigned char temp_binary_data_54[] =
" // update their positions.\r\n"
"}\r\n";
-const char* jucer_OpenGLComponentTemplate_cpp = (const char*) temp_binary_data_54;
+const char* jucer_OpenGLComponentTemplate_cpp = (const char*) temp_binary_data_55;
//================== jucer_OpenGLComponentTemplate.h ==================
-static const unsigned char temp_binary_data_55[] =
+static const unsigned char temp_binary_data_56[] =
"#pragma once\r\n"
"\r\n"
"%%include_juce%%\r\n"
@@ -7973,10 +7983,10 @@ static const unsigned char temp_binary_data_55[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%content_component_class%%)\r\n"
"};\r\n";
-const char* jucer_OpenGLComponentTemplate_h = (const char*) temp_binary_data_55;
+const char* jucer_OpenGLComponentTemplate_h = (const char*) temp_binary_data_56;
//================== jucer_PIPAudioProcessorTemplate.h ==================
-static const unsigned char temp_binary_data_56[] =
+static const unsigned char temp_binary_data_57[] =
"class %%class_name%% : public juce::AudioProcessor\r\n"
"{\r\n"
"public:\r\n"
@@ -8085,10 +8095,10 @@ static const unsigned char temp_binary_data_56[] =
" JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (%%class_name%%)\r\n"
"};\r\n";
-const char* jucer_PIPAudioProcessorTemplate_h = (const char*) temp_binary_data_56;
+const char* jucer_PIPAudioProcessorTemplate_h = (const char*) temp_binary_data_57;
//================== jucer_PIPTemplate.h ==================
-static const unsigned char temp_binary_data_57[] =
+static const unsigned char temp_binary_data_58[] =
"/*******************************************************************************\r\n"
" The block below describes the properties of this PIP. A PIP is a short snippet\r\n"
" of code that can be read by the Projucer and used to generate a JUCE project.\r\n"
@@ -8107,10 +8117,10 @@ static const unsigned char temp_binary_data_57[] =
"//==============================================================================\r\n"
"%%pip_code%%\r\n";
-const char* jucer_PIPTemplate_h = (const char*) temp_binary_data_57;
+const char* jucer_PIPTemplate_h = (const char*) temp_binary_data_58;
//================== colourscheme_dark.xml ==================
-static const unsigned char temp_binary_data_58[] =
+static const unsigned char temp_binary_data_59[] =
"\r\n"
"\r\n"
"\r\n"
@@ -8135,10 +8145,10 @@ static const unsigned char temp_binary_data_58[] =
" \r\n"
"\r\n";
-const char* colourscheme_dark_xml = (const char*) temp_binary_data_58;
+const char* colourscheme_dark_xml = (const char*) temp_binary_data_59;
//================== colourscheme_light.xml ==================
-static const unsigned char temp_binary_data_59[] =
+static const unsigned char temp_binary_data_60[] =
"\r\n"
"\r\n"
"\r\n"
@@ -8163,10 +8173,10 @@ static const unsigned char temp_binary_data_59[] =
" \r\n"
"\r\n";
-const char* colourscheme_light_xml = (const char*) temp_binary_data_59;
+const char* colourscheme_light_xml = (const char*) temp_binary_data_60;
//================== juce_runtime_arch_detection.cpp ==================
-static const unsigned char temp_binary_data_60[] =
+static const unsigned char temp_binary_data_61[] =
"/*\r\n"
" ==============================================================================\r\n"
"\r\n"
@@ -8245,7 +8255,7 @@ static const unsigned char temp_binary_data_60[] =
"\r\n"
"#endif\r\n";
-const char* juce_runtime_arch_detection_cpp = (const char*) temp_binary_data_60;
+const char* juce_runtime_arch_detection_cpp = (const char*) temp_binary_data_61;
const char* getNamedResource (const char* resourceNameUTF8, int& numBytes);
@@ -8259,6 +8269,7 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes)
switch (hash)
{
+ case 0xd764ff7e: numBytes = 91; return JuceLV2Defines_h_in;
case 0x31d21131: numBytes = 1042; return LaunchScreen_storyboard;
case 0x24e5a04d: numBytes = 483; return PIPAudioProcessor_cpp_in;
case 0xd572ce5a: numBytes = 2275; return PIPComponent_cpp_in;
@@ -8329,6 +8340,7 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes)
const char* namedResourceList[] =
{
+ "JuceLV2Defines_h_in",
"LaunchScreen_storyboard",
"PIPAudioProcessor_cpp_in",
"PIPComponent_cpp_in",
@@ -8394,6 +8406,7 @@ const char* namedResourceList[] =
const char* originalFilenames[] =
{
+ "JuceLV2Defines.h.in",
"LaunchScreen.storyboard",
"PIPAudioProcessor.cpp.in",
"PIPComponent.cpp.in",
diff --git a/extras/Projucer/JuceLibraryCode/BinaryData.h b/extras/Projucer/JuceLibraryCode/BinaryData.h
index 70e459410c..a21c2091c3 100644
--- a/extras/Projucer/JuceLibraryCode/BinaryData.h
+++ b/extras/Projucer/JuceLibraryCode/BinaryData.h
@@ -8,6 +8,9 @@
namespace BinaryData
{
+ extern const char* JuceLV2Defines_h_in;
+ const int JuceLV2Defines_h_inSize = 91;
+
extern const char* LaunchScreen_storyboard;
const int LaunchScreen_storyboardSize = 1042;
@@ -192,7 +195,7 @@ namespace BinaryData
const int juce_runtime_arch_detection_cppSize = 2760;
// Number of elements in the namedResourceList and originalFileNames arrays.
- const int namedResourceListSize = 61;
+ const int namedResourceListSize = 62;
// Points to the start of a list of resource names.
extern const char* namedResourceList[];
diff --git a/extras/Projucer/Projucer.jucer b/extras/Projucer/Projucer.jucer
index 49dd7305e0..9400d5b4a5 100644
--- a/extras/Projucer/Projucer.jucer
+++ b/extras/Projucer/Projucer.jucer
@@ -187,6 +187,8 @@
file="Source/Application/jucer_MainWindow.h"/>
+
@@ -192,6 +194,7 @@ public:
String getDefaultBundleIdentifierString() const;
String getDefaultAAXIdentifierString() const { return getDefaultBundleIdentifierString(); }
String getDefaultPluginManufacturerString() const;
+ String getDefaultLV2URI() const { return getCompanyWebsiteString() + "/plugins/" + build_tools::makeValidIdentifier (getProjectNameString(), false, true, false); }
String getCompanyNameString() const { return companyNameValue.get(); }
String getCompanyCopyrightString() const { return companyCopyrightValue.get(); }
@@ -265,6 +268,7 @@ public:
bool shouldBuildAAX() const { return isAudioPluginProject() && checkMultiChoiceVar (pluginFormatsValue, Ids::buildAAX); }
bool shouldBuildStandalonePlugin() const { return isAudioPluginProject() && checkMultiChoiceVar (pluginFormatsValue, Ids::buildStandalone); }
bool shouldBuildUnityPlugin() const { return isAudioPluginProject() && checkMultiChoiceVar (pluginFormatsValue, Ids::buildUnity); }
+ bool shouldBuildLV2() const { return isAudioPluginProject() && checkMultiChoiceVar (pluginFormatsValue, Ids::buildLV2); }
bool shouldEnableIAA() const { return isAudioPluginProject() && checkMultiChoiceVar (pluginFormatsValue, Ids::enableIAA); }
bool isPluginSynth() const { return checkMultiChoiceVar (pluginCharacteristicsValue, Ids::pluginIsSynth); }
@@ -314,6 +318,8 @@ public:
return name;
}
+ String getLV2URI() const { return pluginLV2URIValue.get(); }
+
//==============================================================================
bool isAUPluginHost();
bool isVSTPluginHost();
@@ -550,7 +556,7 @@ private:
ValueTreePropertyWithDefault pluginFormatsValue, pluginNameValue, pluginDescriptionValue, pluginManufacturerValue, pluginManufacturerCodeValue,
pluginCodeValue, pluginChannelConfigsValue, pluginCharacteristicsValue, pluginAUExportPrefixValue, pluginAAXIdentifierValue,
pluginAUMainTypeValue, pluginAUSandboxSafeValue, pluginRTASCategoryValue, pluginVSTCategoryValue, pluginVST3CategoryValue, pluginAAXCategoryValue,
- pluginVSTNumMidiInputsValue, pluginVSTNumMidiOutputsValue;
+ pluginVSTNumMidiInputsValue, pluginVSTNumMidiOutputsValue, pluginLV2URIValue;
//==============================================================================
std::unique_ptr enabledModulesList;
@@ -595,6 +601,7 @@ private:
void updateTitleDependencies();
void updateCompanyNameDependencies();
void updateProjectSettings();
+ void updateWebsiteDependencies();
ValueTree getConfigurations() const;
ValueTree getConfigNode();
diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h
index 0c249dcf7c..732491b534 100644
--- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h
+++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h
@@ -100,24 +100,28 @@ public:
bool supportsTargetType (build_tools::ProjectType::Target::Type type) const override
{
+ using Target = build_tools::ProjectType::Target;
+
switch (type)
{
- case build_tools::ProjectType::Target::StandalonePlugIn:
- case build_tools::ProjectType::Target::GUIApp:
- case build_tools::ProjectType::Target::ConsoleApp:
- case build_tools::ProjectType::Target::StaticLibrary:
- case build_tools::ProjectType::Target::SharedCodeTarget:
- case build_tools::ProjectType::Target::AggregateTarget:
- case build_tools::ProjectType::Target::VSTPlugIn:
- case build_tools::ProjectType::Target::DynamicLibrary:
+ case Target::StandalonePlugIn:
+ case Target::GUIApp:
+ case Target::ConsoleApp:
+ case Target::StaticLibrary:
+ case Target::SharedCodeTarget:
+ case Target::AggregateTarget:
+ case Target::VSTPlugIn:
+ case Target::DynamicLibrary:
return true;
- case build_tools::ProjectType::Target::AAXPlugIn:
- case build_tools::ProjectType::Target::RTASPlugIn:
- case build_tools::ProjectType::Target::UnityPlugIn:
- case build_tools::ProjectType::Target::VST3PlugIn:
- case build_tools::ProjectType::Target::AudioUnitPlugIn:
- case build_tools::ProjectType::Target::AudioUnitv3PlugIn:
- case build_tools::ProjectType::Target::unspecified:
+ case Target::AAXPlugIn:
+ case Target::RTASPlugIn:
+ case Target::UnityPlugIn:
+ case Target::LV2PlugIn:
+ case Target::LV2TurtleProgram:
+ case Target::VST3PlugIn:
+ case Target::AudioUnitPlugIn:
+ case Target::AudioUnitv3PlugIn:
+ case Target::unspecified:
default:
break;
}
diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_MSVC.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_MSVC.h
index f858a3513b..30a5e0c258 100644
--- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_MSVC.h
+++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_MSVC.h
@@ -162,6 +162,7 @@ public:
vst3BinaryLocation (config, Ids::vst3BinaryLocation, getUndoManager()),
rtasBinaryLocation (config, Ids::rtasBinaryLocation, getUndoManager()),
aaxBinaryLocation (config, Ids::aaxBinaryLocation, getUndoManager()),
+ lv2BinaryLocation (config, Ids::aaxBinaryLocation, getUndoManager()),
unityPluginBinaryLocation (config, Ids::unityPluginBinaryLocation, getUndoManager(), {})
{
setPluginBinaryCopyLocationDefaults();
@@ -181,6 +182,7 @@ public:
String getVST3BinaryLocationString() const { return vst3BinaryLocation.get(); }
String getRTASBinaryLocationString() const { return rtasBinaryLocation.get();}
String getAAXBinaryLocationString() const { return aaxBinaryLocation.get();}
+ String getLV2BinaryLocationString() const { return lv2BinaryLocation.get();}
String getUnityPluginBinaryLocationString() const { return unityPluginBinaryLocation.get(); }
String getIntermediatesPathString() const { return intermediatesPathValue.get(); }
String getCharacterSetString() const { return characterSetValue.get(); }
@@ -204,8 +206,16 @@ public:
return getName() + "|" + (is64Bit() ? "x64" : "Win32");
}
- String getOutputFilename (const String& suffix, bool forceSuffix, bool forceUnityPrefix) const
+ String getOutputFilename (const String& suffix,
+ bool forceSuffix,
+ build_tools::ProjectType::Target::Type type) const
{
+ using Target = build_tools::ProjectType::Target::Type;
+
+ if (type == Target::LV2TurtleProgram)
+ return Project::getLV2FileWriterName() + suffix;
+
+ const auto forceUnityPrefix = type == Target::UnityPlugIn;
auto target = File::createLegalFileName (getTargetBinaryNameString (forceUnityPrefix).trim());
if (forceSuffix || ! target.containsChar ('.'))
@@ -316,7 +326,7 @@ public:
intermediatesPathValue, characterSetValue, architectureTypeValue, fastMathValue, debugInformationFormatValue,
pluginBinaryCopyStepValue;
- ValueTreePropertyWithDefault vstBinaryLocation, vst3BinaryLocation, rtasBinaryLocation, aaxBinaryLocation, unityPluginBinaryLocation;
+ ValueTreePropertyWithDefault vstBinaryLocation, vst3BinaryLocation, rtasBinaryLocation, aaxBinaryLocation, lv2BinaryLocation, unityPluginBinaryLocation;
Value architectureValueToListenTo;
@@ -345,6 +355,11 @@ public:
1024, false),
"The folder in which the compiled AAX binary should be placed.");
+ if (project.shouldBuildLV2())
+ props.add (new TextPropertyComponentWithEnablement (lv2BinaryLocation, pluginBinaryCopyStepValue, "LV2 Binary Location",
+ 1024, false),
+ "The folder in which the compiled LV2 binary should be placed.");
+
if (project.shouldBuildUnityPlugin())
props.add (new TextPropertyComponentWithEnablement (unityPluginBinaryLocation, pluginBinaryCopyStepValue, "Unity Binary Location",
1024, false),
@@ -367,6 +382,7 @@ public:
vst3BinaryLocation.setDefault (prefix + String ("\\VST3"));
rtasBinaryLocation.setDefault (prefix + String ("\\Digidesign\\DAE\\Plug-Ins"));
aaxBinaryLocation.setDefault (prefix + String ("\\Avid\\Audio\\Plug-Ins"));
+ lv2BinaryLocation.setDefault ("%APPDATA%\\LV2");
}
void valueChanged (Value&) override
@@ -513,7 +529,7 @@ public:
{
auto* targetName = props->createNewChildElement ("TargetName");
setConditionAttribute (*targetName, config);
- targetName->addTextElement (msBuildEscape (config.getOutputFilename ("", false, type == UnityPlugIn)));
+ targetName->addTextElement (msBuildEscape (config.getOutputFilename ("", false, type)));
}
{
@@ -555,7 +571,7 @@ public:
}
bool isUsingEditAndContinue = false;
- const auto pdbFilename = getOwner().getIntDirFile (config, config.getOutputFilename (".pdb", true, type == UnityPlugIn));
+ const auto pdbFilename = getOwner().getIntDirFile (config, config.getOutputFilename (".pdb", true, type));
{
auto* cl = group->createNewChildElement ("ClCompile");
@@ -565,7 +581,7 @@ public:
if (isDebug || config.shouldGenerateDebugSymbols())
{
cl->createNewChildElement ("DebugInformationFormat")
- ->addTextElement (config.getDebugInformationFormatString());
+ ->addTextElement (config.getDebugInformationFormatString());
}
auto includePaths = getOwner().getHeaderSearchPaths (config);
@@ -607,24 +623,24 @@ public:
}
auto externalLibraries = getExternalLibraries (config, getOwner().getExternalLibrariesStringArray());
- auto additionalDependencies = type != SharedCodeTarget && ! externalLibraries.isEmpty()
+ auto additionalDependencies = type != SharedCodeTarget && type != LV2TurtleProgram && ! externalLibraries.isEmpty()
? externalLibraries.joinIntoString (";") + ";%(AdditionalDependencies)"
: String();
auto librarySearchPaths = config.getLibrarySearchPaths();
- auto additionalLibraryDirs = type != SharedCodeTarget && librarySearchPaths.size() > 0
+ auto additionalLibraryDirs = type != SharedCodeTarget && type != LV2TurtleProgram && librarySearchPaths.size() > 0
? getOwner().replacePreprocessorTokens (config, librarySearchPaths.joinIntoString (";")) + ";%(AdditionalLibraryDirectories)"
: String();
{
auto* link = group->createNewChildElement ("Link");
- link->createNewChildElement ("OutputFile")->addTextElement (getOutputFilePath (config, type == UnityPlugIn));
+ link->createNewChildElement ("OutputFile")->addTextElement (getOutputFilePath (config));
link->createNewChildElement ("SuppressStartupBanner")->addTextElement ("true");
link->createNewChildElement ("IgnoreSpecificDefaultLibraries")->addTextElement (isDebug ? "libcmt.lib; msvcrt.lib;;%(IgnoreSpecificDefaultLibraries)"
: "%(IgnoreSpecificDefaultLibraries)");
link->createNewChildElement ("GenerateDebugInformation")->addTextElement ((isDebug || config.shouldGenerateDebugSymbols()) ? "true" : "false");
link->createNewChildElement ("ProgramDatabaseFile")->addTextElement (pdbFilename);
- link->createNewChildElement ("SubSystem")->addTextElement (type == ConsoleApp ? "Console" : "Windows");
+ link->createNewChildElement ("SubSystem")->addTextElement (type == ConsoleApp || type == LV2TurtleProgram ? "Console" : "Windows");
if (! config.is64Bit())
link->createNewChildElement ("TargetMachine")->addTextElement ("MachineX86");
@@ -667,10 +683,10 @@ public:
{
auto* bsc = group->createNewChildElement ("Bscmake");
bsc->createNewChildElement ("SuppressStartupBanner")->addTextElement ("true");
- bsc->createNewChildElement ("OutputFile")->addTextElement (getOwner().getIntDirFile (config, config.getOutputFilename (".bsc", true, type == UnityPlugIn)));
+ bsc->createNewChildElement ("OutputFile")->addTextElement (getOwner().getIntDirFile (config, config.getOutputFilename (".bsc", true, type)));
}
- if (type != SharedCodeTarget)
+ if (type != SharedCodeTarget && type != LV2TurtleProgram)
{
auto* lib = group->createNewChildElement ("Lib");
@@ -725,6 +741,12 @@ public:
if (group.getNumChildren() > 0)
addFilesToCompile (group, *cppFiles, *headerFiles, *otherFilesGroup);
}
+
+ if (type == LV2TurtleProgram)
+ {
+ cppFiles->createNewChildElement ("ClCompile")
+ ->setAttribute ("Include", owner.getLV2TurtleDumpProgramSource().toWindowsStyle());
+ }
}
if (getOwner().iconFile.existsAsFile())
@@ -1055,8 +1077,12 @@ public:
String getConfigTargetPath (const BuildConfiguration& config) const
{
- auto solutionTargetFolder = getSolutionTargetPath (config);
- return solutionTargetFolder + "\\" + getName();
+ const auto result = getSolutionTargetPath (config) + "\\" + getName();
+
+ if (type == LV2PlugIn)
+ return result + "\\" + config.getTargetBinaryNameString() + ".lv2";
+
+ return result;
}
String getIntermediatesPath (const MSVCBuildConfiguration& config) const
@@ -1101,13 +1127,6 @@ public:
return {};
}
- XmlElement* createToolElement (XmlElement& parent, const String& toolName) const
- {
- auto* e = parent.createNewChildElement ("Tool");
- e->setAttribute ("Name", toolName);
- return e;
- }
-
String getPreprocessorDefs (const BuildConfiguration& config, const String& joinString) const
{
auto defines = getOwner().msvcExtraPreprocessorDefs;
@@ -1168,13 +1187,13 @@ public:
build_tools::RelativePath bundleScript = aaxSDK.getChildFile ("Utilities").getChildFile ("CreatePackage.bat");
build_tools::RelativePath iconFilePath = getAAXIconFile();
- auto outputFilename = config.getOutputFilename (".aaxplugin", true, false);
+ auto outputFilename = config.getOutputFilename (".aaxplugin", true, type);
auto bundleDir = getOwner().getOutDirFile (config, outputFilename);
auto bundleContents = bundleDir + "\\Contents";
auto archDir = bundleContents + String ("\\") + (config.is64Bit() ? "x64" : "Win32");
auto executablePath = archDir + String ("\\") + outputFilename;
- auto pkgScript = String ("copy /Y ") + getOutputFilePath (config, false).quoted() + String (" ") + executablePath.quoted() + String ("\r\ncall ")
+ auto pkgScript = String ("copy /Y ") + getOutputFilePath (config).quoted() + String (" ") + executablePath.quoted() + String ("\r\ncall ")
+ createRebasedPath (bundleScript) + String (" ") + archDir.quoted() + String (" ") + createRebasedPath (iconFilePath);
if (config.isPluginBinaryCopyStepEnabled())
@@ -1183,11 +1202,12 @@ public:
return pkgScript;
}
- else if (type == UnityPlugIn)
+
+ if (type == UnityPlugIn)
{
build_tools::RelativePath scriptPath (config.project.getGeneratedCodeFolder().getChildFile (config.project.getUnityScriptName()),
- getOwner().getTargetFolder(),
- build_tools::RelativePath::projectFolder);
+ getOwner().getTargetFolder(),
+ build_tools::RelativePath::projectFolder);
auto pkgScript = String ("copy /Y ") + scriptPath.toWindowsStyle().quoted() + " \"$(OutDir)\"";
@@ -1201,7 +1221,35 @@ public:
return pkgScript;
}
- else if (config.isPluginBinaryCopyStepEnabled())
+
+ if (type == LV2PlugIn)
+ {
+ const auto* writerTarget = [&]() -> MSVCTargetBase*
+ {
+ for (auto* target : owner.targets)
+ if (target->type == LV2TurtleProgram)
+ return target;
+
+ return nullptr;
+ }();
+
+ const auto writer = writerTarget->getConfigTargetPath (config)
+ + "\\"
+ + writerTarget->getBinaryNameWithSuffix (config);
+
+ const auto copyScript = [&]() -> String
+ {
+ if (! config.isPluginBinaryCopyStepEnabled())
+ return "";
+
+ return "xcopy /E /H /I /K /R /Y \"$(OutDir)\" \"" + config.getLV2BinaryLocationString()
+ + '\\' + config.getTargetBinaryNameString() + ".lv2\"\r\n";
+ }();
+
+ return writer.quoted() + " \"$(OutDir)$(TargetFileName)\"\r\n" + copyScript;
+ }
+
+ if (config.isPluginBinaryCopyStepEnabled())
{
auto copyScript = String ("copy /Y \"$(OutDir)$(TargetFileName)\"") + String (" \"$COPYDIR$\\$(TargetFileName)\"");
@@ -1219,7 +1267,7 @@ public:
{
String script;
- auto bundleDir = getOwner().getOutDirFile (config, config.getOutputFilename (".aaxplugin", false, false));
+ auto bundleDir = getOwner().getOutDirFile (config, config.getOutputFilename (".aaxplugin", false, type));
auto bundleContents = bundleDir + "\\Contents";
auto archDir = bundleContents + String ("\\") + (config.is64Bit() ? "x64" : "Win32");
@@ -1311,21 +1359,21 @@ public:
return searchPaths;
}
- String getBinaryNameWithSuffix (const MSVCBuildConfiguration& config, bool forceUnityPrefix) const
+ String getBinaryNameWithSuffix (const MSVCBuildConfiguration& config) const
{
- return config.getOutputFilename (getTargetSuffix(), true, forceUnityPrefix);
+ return config.getOutputFilename (getTargetSuffix(), true, type);
}
- String getOutputFilePath (const MSVCBuildConfiguration& config, bool forceUnityPrefix) const
+ String getOutputFilePath (const MSVCBuildConfiguration& config) const
{
- return getOwner().getOutDirFile (config, getBinaryNameWithSuffix (config, forceUnityPrefix));
+ return getOwner().getOutDirFile (config, getBinaryNameWithSuffix (config));
}
StringArray getLibrarySearchPaths (const BuildConfiguration& config) const
{
auto librarySearchPaths = config.getLibrarySearchPaths();
- if (type != SharedCodeTarget)
+ if (type != SharedCodeTarget && type != LV2TurtleProgram)
if (auto* shared = getOwner().getSharedCodeTarget())
librarySearchPaths.add (shared->getConfigTargetPath (config));
@@ -1348,9 +1396,9 @@ public:
result.addArray (msBuildEscape (getOwner().getModuleLibs()));
- if (type != SharedCodeTarget)
+ if (type != SharedCodeTarget && type != LV2TurtleProgram)
if (auto* shared = getOwner().getSharedCodeTarget())
- result.add (msBuildEscape (shared->getBinaryNameWithSuffix (config, false)));
+ result.add (msBuildEscape (shared->getBinaryNameWithSuffix (config)));
return result;
}
@@ -1440,24 +1488,28 @@ public:
bool supportsTargetType (build_tools::ProjectType::Target::Type type) const override
{
+ using Target = build_tools::ProjectType::Target;
+
switch (type)
{
- case build_tools::ProjectType::Target::StandalonePlugIn:
- case build_tools::ProjectType::Target::GUIApp:
- case build_tools::ProjectType::Target::ConsoleApp:
- case build_tools::ProjectType::Target::StaticLibrary:
- case build_tools::ProjectType::Target::SharedCodeTarget:
- case build_tools::ProjectType::Target::AggregateTarget:
- case build_tools::ProjectType::Target::VSTPlugIn:
- case build_tools::ProjectType::Target::VST3PlugIn:
- case build_tools::ProjectType::Target::AAXPlugIn:
- case build_tools::ProjectType::Target::RTASPlugIn:
- case build_tools::ProjectType::Target::UnityPlugIn:
- case build_tools::ProjectType::Target::DynamicLibrary:
+ case Target::StandalonePlugIn:
+ case Target::GUIApp:
+ case Target::ConsoleApp:
+ case Target::StaticLibrary:
+ case Target::SharedCodeTarget:
+ case Target::AggregateTarget:
+ case Target::VSTPlugIn:
+ case Target::VST3PlugIn:
+ case Target::AAXPlugIn:
+ case Target::RTASPlugIn:
+ case Target::UnityPlugIn:
+ case Target::LV2PlugIn:
+ case Target::LV2TurtleProgram:
+ case Target::DynamicLibrary:
return true;
- case build_tools::ProjectType::Target::AudioUnitPlugIn:
- case build_tools::ProjectType::Target::AudioUnitv3PlugIn:
- case build_tools::ProjectType::Target::unspecified:
+ case Target::AudioUnitPlugIn:
+ case Target::AudioUnitv3PlugIn:
+ case Target::unspecified:
default:
break;
}
@@ -1639,14 +1691,11 @@ protected:
return getCleanedStringArray (searchPaths);
}
- String getSharedCodeGuid() const
+ String getTargetGuid (MSVCTargetBase::Type type) const
{
- String sharedCodeGuid;
-
- for (int i = 0; i < targets.size(); ++i)
- if (auto* target = targets[i])
- if (target->type == build_tools::ProjectType::Target::SharedCodeTarget)
- return target->getProjectGuid();
+ for (auto* target : targets)
+ if (target != nullptr && target->type == type)
+ return target->getProjectGuid();
return {};
}
@@ -1654,7 +1703,8 @@ protected:
//==============================================================================
void writeProjectDependencies (OutputStream& out) const
{
- auto sharedCodeGuid = getSharedCodeGuid();
+ const auto sharedCodeGuid = getTargetGuid (MSVCTargetBase::SharedCodeTarget);
+ const auto turtleGuid = getTargetGuid (MSVCTargetBase::LV2TurtleProgram);
for (int addingOtherTargets = 0; addingOtherTargets < (sharedCodeGuid.isNotEmpty() ? 2 : 1); ++addingOtherTargets)
{
@@ -1662,16 +1712,24 @@ protected:
{
if (auto* target = targets[i])
{
- if (sharedCodeGuid.isEmpty() || (addingOtherTargets != 0) == (target->type != build_tools::ProjectType::Target::StandalonePlugIn))
+ if (sharedCodeGuid.isEmpty() || (addingOtherTargets != 0) == (target->type != MSVCTargetBase::StandalonePlugIn))
{
out << "Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"" << projectName << " - "
<< target->getName() << "\", \""
<< target->getVCProjFile().getFileName() << "\", \"" << target->getProjectGuid() << '"' << newLine;
- if (sharedCodeGuid.isNotEmpty() && target->type != build_tools::ProjectType::Target::SharedCodeTarget)
+ if (sharedCodeGuid.isNotEmpty()
+ && target->type != MSVCTargetBase::SharedCodeTarget
+ && target->type != MSVCTargetBase::LV2TurtleProgram)
+ {
out << "\tProjectSection(ProjectDependencies) = postProject" << newLine
- << "\t\t" << sharedCodeGuid << " = " << sharedCodeGuid << newLine
- << "\tEndProjectSection" << newLine;
+ << "\t\t" << sharedCodeGuid << " = " << sharedCodeGuid << newLine;
+
+ if (target->type == MSVCTargetBase::LV2PlugIn && turtleGuid.isNotEmpty())
+ out << "\t\t" << turtleGuid << " = " << turtleGuid << newLine;
+
+ out << "\tEndProjectSection" << newLine;
+ }
out << "EndProject" << newLine;
}
diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h
index 06353b532b..8d40563ffc 100644
--- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h
+++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h
@@ -33,6 +33,7 @@ protected:
pluginBinaryCopyStepValue (config, Ids::enablePluginBinaryCopyStep, getUndoManager(), true),
vstBinaryLocation (config, Ids::vstBinaryLocation, getUndoManager(), "$(HOME)/.vst"),
vst3BinaryLocation (config, Ids::vst3BinaryLocation, getUndoManager(), "$(HOME)/.vst3"),
+ lv2BinaryLocation (config, Ids::lv2BinaryLocation, getUndoManager(), "$(HOME)/.lv2"),
unityPluginBinaryLocation (config, Ids::unityPluginBinaryLocation, getUndoManager(), "$(HOME)/UnityPlugins")
{
linkTimeOptimisationValue.setDefault (false);
@@ -50,7 +51,7 @@ protected:
"Specifies the 32/64-bit architecture to use. If you don't see the required architecture in this list, you can also specify the desired "
"flag on the command-line when invoking make by passing \"TARGET_ARCH=-march=\"");
- auto isBuildingAnyPlugins = (project.shouldBuildVST() || project.shouldBuildVST3() || project.shouldBuildUnityPlugin());
+ auto isBuildingAnyPlugins = (project.shouldBuildVST() || project.shouldBuildVST3() || project.shouldBuildUnityPlugin() || project.shouldBuildLV2());
if (isBuildingAnyPlugins)
{
@@ -62,6 +63,11 @@ protected:
1024, false),
"The folder in which the compiled VST3 binary should be placed.");
+ if (project.shouldBuildLV2())
+ props.add (new TextPropertyComponentWithEnablement (lv2BinaryLocation, pluginBinaryCopyStepValue, "LV2 Binary Location",
+ 1024, false),
+ "The folder in which the compiled LV2 binary should be placed.");
+
if (project.shouldBuildUnityPlugin())
props.add (new TextPropertyComponentWithEnablement (unityPluginBinaryLocation, pluginBinaryCopyStepValue, "Unity Binary Location",
1024, false),
@@ -96,12 +102,13 @@ protected:
bool isPluginBinaryCopyStepEnabled() const { return pluginBinaryCopyStepValue.get(); }
String getVSTBinaryLocationString() const { return vstBinaryLocation.get(); }
String getVST3BinaryLocationString() const { return vst3BinaryLocation.get(); }
+ String getLV2BinaryLocationString() const { return lv2BinaryLocation.get(); }
String getUnityPluginBinaryLocationString() const { return unityPluginBinaryLocation.get(); }
private:
//==============================================================================
ValueTreePropertyWithDefault architectureTypeValue, pluginBinaryCopyStepValue,
- vstBinaryLocation, vst3BinaryLocation, unityPluginBinaryLocation;
+ vstBinaryLocation, vst3BinaryLocation, lv2BinaryLocation, unityPluginBinaryLocation;
};
BuildConfiguration::Ptr createBuildConfig (const ValueTree& tree) const override
@@ -202,10 +209,20 @@ public:
s.add ("JUCE_UNITYDIR := Unity");
targetName = "$(JUCE_UNITYDIR)/" + targetName;
}
+ else if (type == LV2PlugIn)
+ {
+ s.add ("JUCE_LV2DIR := " + targetName + ".lv2");
+ targetName = "$(JUCE_LV2DIR)/" + targetName + ".so";
+ }
+ else if (type == LV2TurtleProgram)
+ {
+ targetName = Project::getLV2FileWriterName();
+ }
s.add ("JUCE_TARGET_" + getTargetVarName() + String (" := ") + escapeQuotesAndSpaces (targetName));
- if (config.isPluginBinaryCopyStepEnabled() && (type == VST3PlugIn || type == VSTPlugIn || type == UnityPlugIn))
+ if (config.isPluginBinaryCopyStepEnabled()
+ && (type == VST3PlugIn || type == VSTPlugIn || type == UnityPlugIn || type == LV2PlugIn))
{
String copyCmd ("JUCE_COPYCMD_" + getTargetVarName() + String (" := $(JUCE_OUTDIR)/"));
@@ -224,6 +241,12 @@ public:
s.add ("JUCE_UNITYDESTDIR := " + config.getUnityPluginBinaryLocationString());
s.add (copyCmd + "$(JUCE_UNITYDIR)/. $(JUCE_UNITYDESTDIR)");
}
+ else if (type == LV2PlugIn)
+ {
+ s.add ("JUCE_LV2DESTDIR := " + config.getLV2BinaryLocationString());
+ s.add ("JUCE_LV2_FULL_PATH := $(JUCE_OUTDIR)/$(JUCE_TARGET_LV2_PLUGIN)");
+ s.add (copyCmd + "$(JUCE_LV2DIR) $(JUCE_LV2DESTDIR)");
+ }
}
return s;
@@ -282,6 +305,9 @@ public:
String getPhonyName() const
{
+ if (type == LV2TurtleProgram)
+ return "LV2_MANIFEST_HELPER";
+
return String (getName()).upToFirstOccurrenceOf (" ", false, false);
}
@@ -295,6 +321,9 @@ public:
if (type != SharedCodeTarget && owner.shouldBuildTargetType (SharedCodeTarget))
out << " $(JUCE_OUTDIR)/$(JUCE_TARGET_SHARED_CODE)";
+ if (type == LV2PlugIn)
+ out << " $(JUCE_OUTDIR)/$(JUCE_TARGET_LV2_MANIFEST_HELPER)";
+
out << newLine;
if (! packages.isEmpty())
@@ -317,6 +346,8 @@ public:
out << "\t-$(V_AT)mkdir -p $(JUCE_OUTDIR)/$(JUCE_VST3DIR)/$(JUCE_VST3SUBDIR)" << newLine;
else if (type == UnityPlugIn)
out << "\t-$(V_AT)mkdir -p $(JUCE_OUTDIR)/$(JUCE_UNITYDIR)" << newLine;
+ else if (type == LV2PlugIn)
+ out << "\t-$(V_AT)mkdir -p $(JUCE_OUTDIR)/$(JUCE_LV2DIR)" << newLine;
if (owner.projectType.isStaticLibrary() || type == SharedCodeTarget)
{
@@ -362,6 +393,13 @@ public:
<< "\t-$(V_AT)mkdir -p $(JUCE_UNITYDESTDIR)" << newLine
<< "\t-$(V_AT)cp -R $(JUCE_COPYCMD_UNITY_PLUGIN)" << newLine;
}
+ else if (type == LV2PlugIn)
+ {
+ out << "\t$(V_AT) $(JUCE_OUTDIR)/$(JUCE_TARGET_LV2_MANIFEST_HELPER) "
+ "$(abspath $(JUCE_LV2_FULL_PATH))" << newLine
+ << "\t-$(V_AT)mkdir -p $(JUCE_LV2DESTDIR)" << newLine
+ << "\t-$(V_AT)cp -R $(JUCE_COPYCMD_LV2_PLUGIN)" << newLine;
+ }
out << newLine;
}
@@ -417,24 +455,28 @@ public:
bool supportsTargetType (build_tools::ProjectType::Target::Type type) const override
{
+ using Target = build_tools::ProjectType::Target;
+
switch (type)
{
- case build_tools::ProjectType::Target::GUIApp:
- case build_tools::ProjectType::Target::ConsoleApp:
- case build_tools::ProjectType::Target::StaticLibrary:
- case build_tools::ProjectType::Target::SharedCodeTarget:
- case build_tools::ProjectType::Target::AggregateTarget:
- case build_tools::ProjectType::Target::VSTPlugIn:
- case build_tools::ProjectType::Target::VST3PlugIn:
- case build_tools::ProjectType::Target::StandalonePlugIn:
- case build_tools::ProjectType::Target::DynamicLibrary:
- case build_tools::ProjectType::Target::UnityPlugIn:
+ case Target::GUIApp:
+ case Target::ConsoleApp:
+ case Target::StaticLibrary:
+ case Target::SharedCodeTarget:
+ case Target::AggregateTarget:
+ case Target::VSTPlugIn:
+ case Target::VST3PlugIn:
+ case Target::StandalonePlugIn:
+ case Target::DynamicLibrary:
+ case Target::UnityPlugIn:
+ case Target::LV2PlugIn:
+ case Target::LV2TurtleProgram:
return true;
- case build_tools::ProjectType::Target::AAXPlugIn:
- case build_tools::ProjectType::Target::RTASPlugIn:
- case build_tools::ProjectType::Target::AudioUnitPlugIn:
- case build_tools::ProjectType::Target::AudioUnitv3PlugIn:
- case build_tools::ProjectType::Target::unspecified:
+ case Target::AAXPlugIn:
+ case Target::RTASPlugIn:
+ case Target::AudioUnitPlugIn:
+ case Target::AudioUnitv3PlugIn:
+ case Target::unspecified:
default:
break;
}
@@ -961,9 +1003,9 @@ private:
writeCompilerFlagSchemes (out, filesToCompile);
- auto getFilesForTarget = [] (const Array>& files,
- MakefileTarget* target,
- const Project& p) -> Array>
+ auto getFilesForTarget = [this] (const Array>& files,
+ MakefileTarget* target,
+ const Project& p) -> Array>
{
Array> targetFiles;
@@ -973,6 +1015,9 @@ private:
if (p.getTargetTypeFromFilePath (f.first, true) == targetType)
targetFiles.add (f);
+ if (targetType == MakefileTarget::LV2TurtleProgram)
+ targetFiles.add ({ project.resolveFilename (getLV2TurtleDumpProgramSource().toUnixStyle()), {} });
+
return targetFiles;
};
diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h
index 55c29e77b9..d1433d31bc 100644
--- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h
+++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h
@@ -260,25 +260,29 @@ public:
bool supportsTargetType (build_tools::ProjectType::Target::Type type) const override
{
+ using Target = build_tools::ProjectType::Target;
+
switch (type)
{
- case build_tools::ProjectType::Target::AudioUnitv3PlugIn:
- case build_tools::ProjectType::Target::StandalonePlugIn:
- case build_tools::ProjectType::Target::GUIApp:
- case build_tools::ProjectType::Target::StaticLibrary:
- case build_tools::ProjectType::Target::DynamicLibrary:
- case build_tools::ProjectType::Target::SharedCodeTarget:
- case build_tools::ProjectType::Target::AggregateTarget:
+ case Target::AudioUnitv3PlugIn:
+ case Target::StandalonePlugIn:
+ case Target::GUIApp:
+ case Target::StaticLibrary:
+ case Target::DynamicLibrary:
+ case Target::SharedCodeTarget:
+ case Target::AggregateTarget:
return true;
- case build_tools::ProjectType::Target::ConsoleApp:
- case build_tools::ProjectType::Target::VSTPlugIn:
- case build_tools::ProjectType::Target::VST3PlugIn:
- case build_tools::ProjectType::Target::AAXPlugIn:
- case build_tools::ProjectType::Target::RTASPlugIn:
- case build_tools::ProjectType::Target::AudioUnitPlugIn:
- case build_tools::ProjectType::Target::UnityPlugIn:
+ case Target::ConsoleApp:
+ case Target::VSTPlugIn:
+ case Target::VST3PlugIn:
+ case Target::AAXPlugIn:
+ case Target::RTASPlugIn:
+ case Target::AudioUnitPlugIn:
+ case Target::UnityPlugIn:
+ case Target::LV2PlugIn:
+ case Target::LV2TurtleProgram:
return ! iOS;
- case build_tools::ProjectType::Target::unspecified:
+ case Target::unspecified:
default:
break;
}
@@ -800,7 +804,8 @@ protected:
auBinaryLocation (config, Ids::auBinaryLocation, getUndoManager(), "$(HOME)/Library/Audio/Plug-Ins/Components/"),
rtasBinaryLocation (config, Ids::rtasBinaryLocation, getUndoManager(), "/Library/Application Support/Digidesign/Plug-Ins/"),
aaxBinaryLocation (config, Ids::aaxBinaryLocation, getUndoManager(), "/Library/Application Support/Avid/Audio/Plug-Ins/"),
- unityPluginBinaryLocation (config, Ids::unityPluginBinaryLocation, getUndoManager())
+ unityPluginBinaryLocation (config, Ids::unityPluginBinaryLocation, getUndoManager()),
+ lv2BinaryLocation (config, Ids::lv2BinaryLocation, getUndoManager(), "$(HOME)/Library/Audio/Plug-Ins/LV2/")
{
updateOldPluginBinaryLocations();
updateOldSDKDefaults();
@@ -896,6 +901,7 @@ protected:
String getRTASBinaryLocationString() const { return rtasBinaryLocation.get();}
String getAAXBinaryLocationString() const { return aaxBinaryLocation.get();}
String getUnityPluginBinaryLocationString() const { return unityPluginBinaryLocation.get(); }
+ String getLV2PluginBinaryLocationString() const { return lv2BinaryLocation.get(); }
private:
//==============================================================================
@@ -905,7 +911,7 @@ protected:
customXcodeFlags, plistPreprocessorDefinitions, codeSignIdentity,
fastMathEnabled, stripLocalSymbolsEnabled, pluginBinaryCopyStepEnabled,
vstBinaryLocation, vst3BinaryLocation, auBinaryLocation, rtasBinaryLocation,
- aaxBinaryLocation, unityPluginBinaryLocation;
+ aaxBinaryLocation, unityPluginBinaryLocation, lv2BinaryLocation;
//==============================================================================
void valueTreePropertyChanged (ValueTree&, const Identifier& property) override
@@ -957,6 +963,11 @@ protected:
1024, false),
"The folder in which the compiled AAX binary should be placed.");
+ if (project.shouldBuildLV2())
+ props.add (new TextPropertyComponentWithEnablement (lv2BinaryLocation, pluginBinaryCopyStepEnabled, "LV2 Binary Location",
+ 1024, false),
+ "The folder in which the compiled LV2 binary should be placed.");
+
if (project.shouldBuildUnityPlugin())
props.add (new TextPropertyComponentWithEnablement (unityPluginBinaryLocation, pluginBinaryCopyStepEnabled, "Unity Binary Location",
1024, false),
@@ -1041,6 +1052,7 @@ public:
break;
case ConsoleApp:
+ case LV2TurtleProgram:
xcodeFileType = "compiled.mach-o.executable";
xcodeBundleExtension = String();
xcodeProductType = "com.apple.product-type.tool";
@@ -1122,6 +1134,13 @@ public:
xcodeCopyToProductInstallPathAfterBuild = true;
break;
+ case LV2PlugIn:
+ xcodeFileType = "compiled.mach-o.executable";
+ xcodeProductType = "com.apple.product-type.tool";
+ xcodeBundleExtension = ".so";
+ xcodeCopyToProductInstallPathAfterBuild = true;
+ break;
+
case SharedCodeTarget:
xcodeFileType = "archive.ar";
xcodeBundleExtension = ".a";
@@ -1173,43 +1192,6 @@ public:
String mainBuildProductID;
File infoPlistFile;
- struct SourceFileInfo
- {
- build_tools::RelativePath path;
- bool shouldBeCompiled = false;
- };
-
- Array getSourceFilesInfo (const Project::Item& projectItem) const
- {
- Array result;
-
- auto targetType = (owner.getProject().isAudioPluginProject() ? type : SharedCodeTarget);
-
- if (projectItem.isGroup())
- {
- for (int i = 0; i < projectItem.getNumChildren(); ++i)
- result.addArray (getSourceFilesInfo (projectItem.getChild (i)));
- }
- else if (projectItem.shouldBeAddedToTargetProject() && projectItem.shouldBeAddedToTargetExporter (owner)
- && owner.getProject().getTargetTypeFromFilePath (projectItem.getFile(), true) == targetType)
- {
- SourceFileInfo info;
-
- info.path = build_tools::RelativePath (projectItem.getFile(),
- owner.getTargetFolder(),
- build_tools::RelativePath::buildTargetFolder);
-
- jassert (info.path.getRoot() == build_tools::RelativePath::buildTargetFolder);
-
- if (targetType == SharedCodeTarget || projectItem.shouldBeCompiled())
- info.shouldBeCompiled = projectItem.shouldBeCompiled();
-
- result.add (info);
- }
-
- return result;
- }
-
//==============================================================================
void addMainBuildProduct() const
{
@@ -1218,12 +1200,18 @@ public:
if (ProjectExporter::BuildConfiguration::Ptr config = owner.getConfiguration (0))
{
- auto productName = owner.replacePreprocessorTokens (*config, config->getTargetBinaryNameString (type == UnityPlugIn));
+ const auto productName = [&]() -> String
+ {
+ const auto binaryName = owner.replacePreprocessorTokens (*config, config->getTargetBinaryNameString (type == UnityPlugIn));
- if (xcodeFileType == "archive.ar")
- productName = getStaticLibbedFilename (productName);
- else
- productName += xcodeBundleExtension;
+ if (xcodeFileType == "archive.ar")
+ return getStaticLibbedFilename (binaryName);
+
+ if (type == LV2TurtleProgram)
+ return Project::getLV2FileWriterName();
+
+ return binaryName + xcodeBundleExtension;
+ }();
addBuildProduct (xcodeFileType, productName);
}
@@ -1274,6 +1262,18 @@ public:
if (target->type != XcodeTarget::AggregateTarget)
dependencyIDs.add (target->addDependencyFor (*this));
}
+ else if (type == XcodeTarget::LV2PlugIn)
+ {
+ if (auto* helperTarget = owner.getTargetOfType (XcodeTarget::LV2TurtleProgram))
+ dependencyIDs.add (helperTarget->addDependencyFor (*this));
+
+ if (auto* sharedCodeTarget = owner.getTargetOfType (XcodeTarget::SharedCodeTarget))
+ dependencyIDs.add (sharedCodeTarget->addDependencyFor (*this));
+ }
+ else if (type == XcodeTarget::LV2TurtleProgram)
+ {
+ // No thanks
+ }
else if (type != XcodeTarget::SharedCodeTarget) // shared code doesn't depend on anything; all other targets depend only on the shared code
{
if (auto* sharedCodeTarget = owner.getTargetOfType (XcodeTarget::SharedCodeTarget))
@@ -1429,6 +1429,27 @@ public:
return mergePreprocessorDefs (defines, owner.getAllPreprocessorDefs (config, type));
}
+ String getConfigurationBuildDir (const XcodeBuildConfiguration& config) const
+ {
+ const String configurationBuildDir ("$(PROJECT_DIR)/build/$(CONFIGURATION)");
+
+ if (config.getTargetBinaryRelativePathString().isEmpty())
+ return configurationBuildDir;
+
+ // a target's position can either be defined via installPath + xcodeCopyToProductInstallPathAfterBuild
+ // (= for audio plug-ins) or using a custom binary path (for everything else), but not both (= conflict!)
+ jassert (! xcodeCopyToProductInstallPathAfterBuild);
+
+ build_tools::RelativePath binaryPath (config.getTargetBinaryRelativePathString(),
+ build_tools::RelativePath::projectFolder);
+
+ return expandPath (binaryPath.rebased (owner.projectFolder,
+ owner.getTargetFolder(),
+ build_tools::RelativePath::buildTargetFolder).toUnixStyle());
+ }
+
+ String getLV2BundleName() const { return owner.project.getPluginNameString() + ".lv2"; }
+
//==============================================================================
StringPairArray getTargetSettings (const XcodeBuildConfiguration& config) const
{
@@ -1444,7 +1465,15 @@ public:
return s;
}
- s.set ("PRODUCT_NAME", owner.replacePreprocessorTokens (config, config.getTargetBinaryNameString (type == UnityPlugIn)).quoted());
+ const auto productName = [&]
+ {
+ if (type == LV2TurtleProgram)
+ return Project::getLV2FileWriterName().quoted();
+
+ return owner.replacePreprocessorTokens (config, config.getTargetBinaryNameString (type == UnityPlugIn)).quoted();
+ }();
+
+ s.set ("PRODUCT_NAME", productName);
s.set ("PRODUCT_BUNDLE_IDENTIFIER", getBundleIdentifier());
auto arch = (! owner.isiOS() && type == Target::AudioUnitv3PlugIn) ? macOSArch_64Bit
@@ -1598,7 +1627,7 @@ public:
{
s.set ("INSTALL_PATH", installPath.quoted());
- if (type == Target::SharedCodeTarget)
+ if (type == Target::SharedCodeTarget || type == Target::LV2PlugIn)
s.set ("SKIP_INSTALL", "YES");
if (! owner.embeddedFrameworkIDs.isEmpty())
@@ -1621,24 +1650,11 @@ public:
if (xcodeOtherRezFlags.isNotEmpty())
s.set ("OTHER_REZFLAGS", "\"" + xcodeOtherRezFlags + "\"");
- String configurationBuildDir ("$(PROJECT_DIR)/build/$(CONFIGURATION)");
+ const auto configurationBuildDir = getConfigurationBuildDir (config);
+ const auto adjustedConfigBuildDir = type == LV2PlugIn ? configurationBuildDir + "/" + getLV2BundleName()
+ : configurationBuildDir;
- if (config.getTargetBinaryRelativePathString().isNotEmpty())
- {
- // a target's position can either be defined via installPath + xcodeCopyToProductInstallPathAfterBuild
- // (= for audio plug-ins) or using a custom binary path (for everything else), but not both (= conflict!)
- jassert (! xcodeCopyToProductInstallPathAfterBuild);
-
- build_tools::RelativePath binaryPath (config.getTargetBinaryRelativePathString(),
- build_tools::RelativePath::projectFolder);
-
- configurationBuildDir = expandPath (binaryPath.rebased (owner.projectFolder,
- owner.getTargetFolder(),
- build_tools::RelativePath::buildTargetFolder)
- .toUnixStyle());
- }
-
- s.set ("CONFIGURATION_BUILD_DIR", addQuotesIfRequired (configurationBuildDir));
+ s.set ("CONFIGURATION_BUILD_DIR", addQuotesIfRequired (adjustedConfigBuildDir));
if (owner.isHardenedRuntimeEnabled())
s.set ("ENABLE_HARDENED_RUNTIME", "YES");
@@ -1703,6 +1719,10 @@ public:
s.set ("OTHER_LDFLAGS", linkerFlags.joinIntoString (" ").quoted());
librarySearchPaths.addArray (config.getLibrarySearchPaths());
+
+ if (type == LV2PlugIn)
+ librarySearchPaths.add (configurationBuildDir);
+
librarySearchPaths = getCleanedStringArray (librarySearchPaths);
if (librarySearchPaths.size() > 0)
@@ -1777,8 +1797,10 @@ public:
case RTASPlugIn: return config.isPluginBinaryCopyStepEnabled() ? config.getRTASBinaryLocationString() : String();
case AAXPlugIn: return config.isPluginBinaryCopyStepEnabled() ? config.getAAXBinaryLocationString() : String();
case UnityPlugIn: return config.isPluginBinaryCopyStepEnabled() ? config.getUnityPluginBinaryLocationString() : String();
+ case LV2PlugIn: return config.isPluginBinaryCopyStepEnabled() ? config.getLV2PluginBinaryLocationString() : String();
case SharedCodeTarget: return owner.isiOS() ? "@executable_path/Frameworks" : "@executable_path/../Frameworks";
case StaticLibrary:
+ case LV2TurtleProgram:
case DynamicLibrary:
case AudioUnitv3PlugIn:
case StandalonePlugIn:
@@ -1794,7 +1816,7 @@ public:
if (getTargetFileType() == pluginBundle)
flags.add (owner.isiOS() ? "-bitcode_bundle" : "-bundle");
- if (type != Target::SharedCodeTarget)
+ if (type != Target::SharedCodeTarget && type != Target::LV2TurtleProgram)
{
Array extraLibs;
@@ -2141,6 +2163,18 @@ private:
target->addMainBuildProduct();
+ if (target->type == XcodeTarget::LV2TurtleProgram
+ && project.getEnabledModules().isModuleEnabled ("juce_audio_plugin_client"))
+ {
+ const auto path = getLV2TurtleDumpProgramSource();
+ addFile (FileOptions().withRelativePath ({ expandPath (path.toUnixStyle()), path.getRoot() })
+ .withSkipPCHEnabled (true)
+ .withCompilationEnabled (true)
+ .withInhibitWarningsEnabled (true)
+ .withCompilerFlags ("-std=c++11")
+ .withXcodeTarget (target));
+ }
+
auto targetName = String (target->getName());
auto fileID = createID (targetName + "__targetbuildref");
auto fileRefID = createID ("__productFileID" + targetName);
@@ -2289,7 +2323,10 @@ private:
{
auto skipAUv3 = (target->type == XcodeTarget::AudioUnitv3PlugIn && ! shouldDuplicateAppExResourcesFolder());
- if (! projectType.isStaticLibrary() && target->type != XcodeTarget::SharedCodeTarget && ! skipAUv3)
+ if (! projectType.isStaticLibrary()
+ && target->type != XcodeTarget::SharedCodeTarget
+ && target->type != XcodeTarget::LV2TurtleProgram
+ && ! skipAUv3)
target->addBuildPhase ("PBXResourcesBuildPhase", resourceIDs);
auto rezFiles = rezFileIDs;
@@ -2306,10 +2343,35 @@ private:
target->addBuildPhase ("PBXSourcesBuildPhase", sourceFiles);
- if (! projectType.isStaticLibrary() && target->type != XcodeTarget::SharedCodeTarget)
+ if (! projectType.isStaticLibrary()
+ && target->type != XcodeTarget::SharedCodeTarget
+ && target->type != XcodeTarget::LV2TurtleProgram)
target->addBuildPhase ("PBXFrameworksBuildPhase", target->frameworkIDs);
}
+ if (target->type == XcodeTarget::LV2PlugIn)
+ {
+ auto script = "set -e\n\"$CONFIGURATION_BUILD_DIR/../"
+ + Project::getLV2FileWriterName()
+ + "\" \"$CONFIGURATION_BUILD_DIR/$PRODUCT_NAME\"\n";
+
+ for (ConstConfigIterator config (*this); config.next();)
+ {
+ auto& xcodeConfig = dynamic_cast (*config);
+ const auto installPath = target->getInstallPathForConfiguration (xcodeConfig);
+
+ if (installPath.isNotEmpty())
+ {
+ script << "if [ \"$CONFIGURATION\" = \"" << config->getName()
+ << "\" ]; then\n /bin/ln -sfh \"$CONFIGURATION_BUILD_DIR\" \""
+ << installPath.replace ("$(HOME)", "$HOME") << '/' << target->getLV2BundleName()
+ << "\"\nfi\n";
+ }
+ }
+
+ target->addShellScriptBuildPhase ("Generate manifest", script);
+ }
+
target->addShellScriptBuildPhase ("Post-build script", getPostBuildScript());
if (project.isAudioPluginProject() && project.shouldBuildAUv3()
diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp
index 166736950f..7c04d1f3e0 100644
--- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp
+++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp
@@ -364,7 +364,7 @@ void ProjectExporter::addExtraIncludePathsIfPluginOrHost()
const auto lv2BasePath = getModuleFolderRelativeToProject ("juce_audio_processors").getChildFile ("format_types")
.getChildFile ("LV2_SDK");
- if (project.isLV2PluginHost())
+ if ((shouldBuildTargetType (Target::LV2PlugIn) && project.shouldBuildLV2()) || project.isLV2PluginHost())
{
const std::vector paths[] { { "" },
{ "lv2" },
@@ -455,16 +455,16 @@ StringPairArray ProjectExporter::getAllPreprocessorDefs() const
void ProjectExporter::addTargetSpecificPreprocessorDefs (StringPairArray& defs, const build_tools::ProjectType::Target::Type targetType) const
{
- std::pair targetFlags[] = {
- {"JucePlugin_Build_VST", build_tools::ProjectType::Target::VSTPlugIn},
- {"JucePlugin_Build_VST3", build_tools::ProjectType::Target::VST3PlugIn},
- {"JucePlugin_Build_AU", build_tools::ProjectType::Target::AudioUnitPlugIn},
- {"JucePlugin_Build_AUv3", build_tools::ProjectType::Target::AudioUnitv3PlugIn},
- {"JucePlugin_Build_RTAS", build_tools::ProjectType::Target::RTASPlugIn},
- {"JucePlugin_Build_AAX", build_tools::ProjectType::Target::AAXPlugIn},
- {"JucePlugin_Build_Standalone", build_tools::ProjectType::Target::StandalonePlugIn},
- {"JucePlugin_Build_Unity", build_tools::ProjectType::Target::UnityPlugIn}
- };
+ using Target = build_tools::ProjectType::Target::Type;
+ const std::pair targetFlags[] { { "JucePlugin_Build_VST", Target::VSTPlugIn },
+ { "JucePlugin_Build_VST3", Target::VST3PlugIn },
+ { "JucePlugin_Build_AU", Target::AudioUnitPlugIn },
+ { "JucePlugin_Build_AUv3", Target::AudioUnitv3PlugIn },
+ { "JucePlugin_Build_RTAS", Target::RTASPlugIn },
+ { "JucePlugin_Build_AAX", Target::AAXPlugIn },
+ { "JucePlugin_Build_Standalone", Target::StandalonePlugIn },
+ { "JucePlugin_Build_Unity", Target::UnityPlugIn },
+ { "JucePlugin_Build_LV2", Target::LV2PlugIn } };
if (targetType == build_tools::ProjectType::Target::SharedCodeTarget)
{
diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h
index b837b3447b..e25b2b9360 100644
--- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h
+++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h
@@ -181,6 +181,13 @@ public:
void createPropertyEditors (PropertyListBuilder&);
void addSettingsForProjectType (const build_tools::ProjectType&);
+ build_tools::RelativePath getLV2TurtleDumpProgramSource() const
+ {
+ return getModuleFolderRelativeToProject ("juce_audio_plugin_client")
+ .getChildFile ("LV2")
+ .getChildFile ("juce_LV2TurtleDumpProgram.cpp");
+ }
+
//==============================================================================
void copyMainGroupFromProject();
Array& getAllGroups() noexcept { jassert (itemGroups.size() > 0); return itemGroups; }
@@ -460,7 +467,6 @@ private:
: name + suffix;
}
- void createDependencyPathProperties (PropertyListBuilder&);
void createIconProperties (PropertyListBuilder&);
void addExtraIncludePathsIfPluginOrHost();
void addCommonAudioPluginSettings();
diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.cpp b/extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.cpp
index 883b8c9d03..6445fe627d 100644
--- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.cpp
+++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.cpp
@@ -74,6 +74,7 @@ Result ProjectSaver::saveResourcesOnly()
void ProjectSaver::saveBasicProjectItems (const OwnedArray& modules, const String& appConfigUserContent)
{
+ writeLV2DefinesFile();
writePluginDefines();
writeAppConfigFile (modules, appConfigUserContent);
writeBinaryDataFiles();
@@ -495,6 +496,17 @@ void ProjectSaver::writeAppConfigFile (const OwnedArray& modules,
});
}
+void ProjectSaver::writeLV2DefinesFile()
+{
+ if (! project.shouldBuildLV2())
+ return;
+
+ writeOrRemoveGeneratedFile (Project::getJuceLV2DefinesFilename(), [&] (MemoryOutputStream& mem)
+ {
+ writeLV2Defines (mem);
+ });
+}
+
void ProjectSaver::writeAppHeader (MemoryOutputStream& out, const OwnedArray& modules)
{
writeAutoGenWarningComment (out);
@@ -638,6 +650,21 @@ void ProjectSaver::writeBinaryDataFiles()
}
}
+void ProjectSaver::writeLV2Defines (MemoryOutputStream& mem)
+{
+ String templateFile { BinaryData::JuceLV2Defines_h_in };
+
+ const auto isValidUri = [&] (const String& text) { return URL (text).isWellFormed(); };
+
+ if (! isValidUri (project.getLV2URI()))
+ {
+ addError ("LV2 URI is malformed.");
+ return;
+ }
+
+ mem << templateFile.replace ("${JUCE_LV2URI}", project.getLV2URI());
+}
+
void ProjectSaver::writeReadmeFile()
{
MemoryOutputStream out;
diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.h
index a3f5ebb14c..258f222f8c 100644
--- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.h
+++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.h
@@ -96,6 +96,7 @@ private:
void writePluginDefines (MemoryOutputStream& outStream) const;
void writePluginDefines();
void writeAppConfigFile (const OwnedArray& modules, const String& userContent);
+ void writeLV2Defines (MemoryOutputStream&);
void writeProjectFile();
void writeAppConfig (MemoryOutputStream& outStream, const OwnedArray& modules, const String& userContent);
@@ -107,6 +108,7 @@ private:
void writePluginCharacteristicsFile();
void writeUnityScriptFile();
void writeProjects (const OwnedArray&, ProjectExporter*);
+ void writeLV2DefinesFile();
void runPostExportScript();
void saveExporter (ProjectExporter& exporter, const OwnedArray& modules);
diff --git a/extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h b/extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h
index 98a50f510a..72c20af1ba 100644
--- a/extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h
+++ b/extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h
@@ -332,6 +332,7 @@ namespace Ids
DECLARE_ID (buildAAX);
DECLARE_ID (buildStandalone);
DECLARE_ID (buildUnity);
+ DECLARE_ID (buildLV2);
DECLARE_ID (enableIAA);
DECLARE_ID (pluginName);
DECLARE_ID (pluginDesc);
@@ -376,6 +377,9 @@ namespace Ids
DECLARE_ID (guiEditorEnabled);
DECLARE_ID (jucerFormatVersion);
DECLARE_ID (buildNumber);
+ DECLARE_ID (lv2Uri);
+ DECLARE_ID (lv2UriUi);
+ DECLARE_ID (lv2BinaryLocation);
DECLARE_ID (osxSDK);
DECLARE_ID (osxCompatibility);
diff --git a/extras/UnitTestRunner/Builds/LinuxMakefile/Makefile b/extras/UnitTestRunner/Builds/LinuxMakefile/Makefile
index 43b6a4a326..385e9a7470 100644
--- a/extras/UnitTestRunner/Builds/LinuxMakefile/Makefile
+++ b/extras/UnitTestRunner/Builds/LinuxMakefile/Makefile
@@ -40,7 +40,7 @@ ifeq ($(CONFIG),Debug)
endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60106" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
- JUCE_CPPFLAGS_CONSOLEAPP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
+ JUCE_CPPFLAGS_CONSOLEAPP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_CONSOLEAPP := UnitTestRunner
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS)
@@ -61,7 +61,7 @@ ifeq ($(CONFIG),Release)
endif
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x60106" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
- JUCE_CPPFLAGS_CONSOLEAPP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0"
+ JUCE_CPPFLAGS_CONSOLEAPP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_RTAS=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
JUCE_TARGET_CONSOLEAPP := UnitTestRunner
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 $(CFLAGS)
diff --git a/extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj b/extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj
index a884a999ab..14759a8d3a 100644
--- a/extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj
+++ b/extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj
@@ -444,6 +444,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
@@ -577,6 +578,7 @@
"JucePlugin_Build_AAX=0",
"JucePlugin_Build_Standalone=0",
"JucePlugin_Build_Unity=0",
+ "JucePlugin_Build_LV2=0",
);
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
HEADER_SEARCH_PATHS = (
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
index 0d1578d457..8fc8f04991 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
true
NotUsing
@@ -107,7 +107,7 @@
Full
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDLL
true
NotUsing
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
index d906dc19ec..d054e2d9dd 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
true
NotUsing
@@ -107,7 +107,7 @@
Full
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDLL
true
NotUsing
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
index 0d639da42e..d08e471059 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
true
NotUsing
@@ -107,7 +107,7 @@
Full
..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lilv;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sratom;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord\src;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\sord;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\serd;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK\lv2;..\..\..\..\modules\juce_audio_processors\format_types\LV2_SDK;..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_analytics=1;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_dsp=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_osc=1;JUCE_MODULE_AVAILABLE_juce_product_unlocking=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_PLUGINHOST_VST3=1;JUCE_PLUGINHOST_LV2=1;JUCE_STRICT_REFCOUNTEDPOINTER=1;JUCE_STANDALONE_APPLICATION=1;JUCE_UNIT_TESTS=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;%(PreprocessorDefinitions)
MultiThreadedDLL
true
NotUsing
diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
index 128633dc2a..c5f7a50ea2 100644
--- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
+++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
@@ -64,7 +64,7 @@
Disabled
ProgramDatabase
..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DLL_BUILD=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;_LIB;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DLL_BUILD=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;_LIB;%(PreprocessorDefinitions)
MultiThreadedDebugDLL
true
NotUsing
@@ -105,7 +105,7 @@
Full
..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)
- _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DLL_BUILD=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;_LIB;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DISPLAY_SPLASH_SCREEN=0;JUCE_USE_DARK_SPLASH_SCREEN=1;JUCE_PROJUCER_VERSION=0x60106;JUCE_MODULE_AVAILABLE_juce_audio_basics=1;JUCE_MODULE_AVAILABLE_juce_audio_devices=1;JUCE_MODULE_AVAILABLE_juce_audio_formats=1;JUCE_MODULE_AVAILABLE_juce_audio_processors=1;JUCE_MODULE_AVAILABLE_juce_audio_utils=1;JUCE_MODULE_AVAILABLE_juce_core=1;JUCE_MODULE_AVAILABLE_juce_cryptography=1;JUCE_MODULE_AVAILABLE_juce_data_structures=1;JUCE_MODULE_AVAILABLE_juce_events=1;JUCE_MODULE_AVAILABLE_juce_graphics=1;JUCE_MODULE_AVAILABLE_juce_gui_basics=1;JUCE_MODULE_AVAILABLE_juce_gui_extra=1;JUCE_MODULE_AVAILABLE_juce_opengl=1;JUCE_MODULE_AVAILABLE_juce_video=1;JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1;JUCE_STANDALONE_APPLICATION=1;JUCE_DLL_BUILD=1;JUCER_VS2022_78A503E=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;JucePlugin_Build_LV2=0;_LIB;%(PreprocessorDefinitions)
MultiThreadedDLL
true
NotUsing
diff --git a/modules/juce_audio_plugin_client/LV2/juce_LV2_Client.cpp b/modules/juce_audio_plugin_client/LV2/juce_LV2_Client.cpp
new file mode 100644
index 0000000000..e9401a981e
--- /dev/null
+++ b/modules/juce_audio_plugin_client/LV2/juce_LV2_Client.cpp
@@ -0,0 +1,1756 @@
+/*
+ ==============================================================================
+
+ This file is part of the JUCE 7 technical preview.
+ Copyright (c) 2022 - Raw Material Software Limited
+
+ You may use this code under the terms of the GPL v3
+ (see www.gnu.org/licenses).
+
+ For the technical preview this file cannot be licensed commercially.
+
+ JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
+ EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
+ DISCLAIMED.
+
+ ==============================================================================
+*/
+
+#if JucePlugin_Build_LV2
+
+#ifndef _SCL_SECURE_NO_WARNINGS
+ #define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#ifndef _CRT_SECURE_NO_WARNINGS
+ #define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#define JUCE_CORE_INCLUDE_NATIVE_HEADERS 1
+#define JUCE_CORE_INCLUDE_OBJC_HELPERS 1
+#define JUCE_GUI_BASICS_INCLUDE_XHEADERS 1
+
+#include
+#include
+#include
+
+#include
+#include
+
+#include "JuceLV2Defines.h"
+#include
+
+#include
+
+#define JUCE_TURTLE_RECALL_URI "https://lv2-extensions.juce.com/turtle_recall"
+
+#ifndef JucePlugin_LV2URI
+ #error "You need to define the JucePlugin_LV2URI value! If you're using the Projucer/CMake, the definition will be written into JuceLV2Defines.h automatically."
+#endif
+
+namespace juce
+{
+namespace lv2_client
+{
+
+constexpr auto uriSeparator = ":";
+const auto JucePluginLV2UriUi = String (JucePlugin_LV2URI) + uriSeparator + "UI";
+const auto JucePluginLV2UriState = String (JucePlugin_LV2URI) + uriSeparator + "StateString";
+const auto JucePluginLV2UriProgram = String (JucePlugin_LV2URI) + uriSeparator + "Program";
+
+static const LV2_Feature* findMatchingFeature (const LV2_Feature* const* features, const char* uri)
+{
+ for (auto feature = features; *feature != nullptr; ++feature)
+ if (std::strcmp ((*feature)->URI, uri) == 0)
+ return *feature;
+
+ return nullptr;
+}
+
+static bool hasFeature (const LV2_Feature* const* features, const char* uri)
+{
+ return findMatchingFeature (features, uri) != nullptr;
+}
+
+template
+Data findMatchingFeatureData (const LV2_Feature* const* features, const char* uri)
+{
+ if (const auto* feature = findMatchingFeature (features, uri))
+ return static_cast (feature->data);
+
+ return {};
+}
+
+static const LV2_Options_Option* findMatchingOption (const LV2_Options_Option* options, LV2_URID urid)
+{
+ for (auto option = options; option->value != nullptr; ++option)
+ if (option->key == urid)
+ return option;
+
+ return nullptr;
+}
+
+class ParameterStorage : private AudioProcessorListener
+{
+public:
+ ParameterStorage (AudioProcessor& proc, LV2_URID_Map map)
+ : processor (proc),
+ mapFeature (map),
+ legacyParameters (proc, false)
+ {
+ processor.addListener (this);
+ }
+
+ ~ParameterStorage() override
+ {
+ processor.removeListener (this);
+ }
+
+ static String getUri (const AudioProcessorParameter& param)
+ {
+ return LegacyAudioParameter::getParamID (¶m, false);
+ }
+
+ void setValueFromHost (LV2_URID urid, float value) noexcept
+ {
+ const auto it = uridToIndexMap.find (urid);
+
+ if (it == uridToIndexMap.end())
+ {
+ // No such parameter.
+ jassertfalse;
+ return;
+ }
+
+ if (auto* param = legacyParameters.getParamForIndex ((int) it->second))
+ {
+ const auto scaledValue = [&]
+ {
+ if (auto* rangedParam = dynamic_cast (param))
+ return rangedParam->convertTo0to1 (value);
+
+ return value;
+ }();
+
+ if (scaledValue != param->getValue())
+ {
+ ScopedValueSetter scope (ignoreCallbacks, true);
+ param->setValueNotifyingHost (scaledValue);
+ }
+ }
+ }
+
+ struct Options
+ {
+ bool parameterValue, gestureBegin, gestureEnd;
+ };
+
+ static constexpr auto newClientValue = 1 << 0,
+ gestureBegan = 1 << 1,
+ gestureEnded = 1 << 2;
+
+ template
+ void forEachChangedParameter (Callback&& callback)
+ {
+ stateCache.ifSet ([this, &callback] (size_t parameterIndex, float, uint32_t bits)
+ {
+ const Options options { (bits & newClientValue) != 0,
+ (bits & gestureBegan) != 0,
+ (bits & gestureEnded) != 0 };
+
+ callback (*legacyParameters.getParamForIndex ((int) parameterIndex),
+ indexToUridMap[parameterIndex],
+ options);
+ });
+ }
+
+private:
+ void audioProcessorParameterChanged (AudioProcessor*, int parameterIndex, float value) override
+ {
+ if (! ignoreCallbacks)
+ stateCache.setValueAndBits ((size_t) parameterIndex, value, newClientValue);
+ }
+
+ void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int parameterIndex) override
+ {
+ if (! ignoreCallbacks)
+ stateCache.setBits ((size_t) parameterIndex, gestureBegan);
+ }
+
+ void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int parameterIndex) override
+ {
+ if (! ignoreCallbacks)
+ stateCache.setBits ((size_t) parameterIndex, gestureEnded);
+ }
+
+ void audioProcessorChanged (AudioProcessor*, const ChangeDetails&) override {}
+
+ AudioProcessor& processor;
+ const LV2_URID_Map mapFeature;
+ const LegacyAudioParametersWrapper legacyParameters;
+ const std::vector indexToUridMap = [&]
+ {
+ std::vector result;
+
+ for (auto* param : legacyParameters)
+ {
+ jassert ((size_t) param->getParameterIndex() == result.size());
+
+ const auto uri = JucePlugin_LV2URI + String (uriSeparator) + getUri (*param);
+ const auto urid = mapFeature.map (mapFeature.handle, uri.toRawUTF8());
+ result.push_back (urid);
+ }
+
+ return result;
+ }();
+ const std::map uridToIndexMap = [&]
+ {
+ std::map result;
+ size_t index = 0;
+
+ for (const auto& urid : indexToUridMap)
+ result.emplace (urid, index++);
+
+ return result;
+ }();
+ FlaggedFloatCache<3> stateCache { (size_t) legacyParameters.getNumParameters() };
+ bool ignoreCallbacks = false;
+
+ JUCE_LEAK_DETECTOR (ParameterStorage)
+};
+
+enum class PortKind { seqInput, seqOutput, latencyOutput, freeWheelingInput, enabledInput };
+
+struct PortIndices
+{
+ PortIndices (int numInputsIn, int numOutputsIn)
+ : numInputs (numInputsIn), numOutputs (numOutputsIn) {}
+
+ int getPortIndexForAudioInput (int audioIndex) const noexcept
+ {
+ return audioIndex;
+ }
+
+ int getPortIndexForAudioOutput (int audioIndex) const noexcept
+ {
+ return audioIndex + numInputs;
+ }
+
+ int getPortIndexFor (PortKind p) const noexcept { return getMaxAudioPortIndex() + (int) p; }
+
+ // Audio ports are numbered from 0 to numInputs + numOutputs
+ int getMaxAudioPortIndex() const noexcept { return numInputs + numOutputs; }
+
+ int numInputs, numOutputs;
+};
+
+//==============================================================================
+class PlayHead : public AudioPlayHead
+{
+public:
+ PlayHead (LV2_URID_Map mapFeatureIn, double sampleRateIn)
+ : parser (mapFeatureIn), sampleRate (sampleRateIn)
+ {
+ info.frameRate = fpsUnknown;
+ info.isLooping = false;
+ info.isRecording = false;
+ info.ppqLoopEnd = 0;
+ info.ppqLoopStart = 0;
+ info.ppqPositionOfLastBarStart = 0;
+ }
+
+ void invalidate() { valid = false; }
+
+ void readNewInfo (const LV2_Atom_Event* event)
+ {
+ if (event->body.type != mLV2_ATOM__Object && event->body.type != mLV2_ATOM__Blank)
+ return;
+
+ const auto* object = reinterpret_cast (&event->body);
+
+ if (object->body.otype != mLV2_TIME__Position)
+ return;
+
+ const LV2_Atom* atomFrame = nullptr;
+ const LV2_Atom* atomSpeed = nullptr;
+ const LV2_Atom* atomBeat = nullptr;
+ const LV2_Atom* atomBeatUnit = nullptr;
+ const LV2_Atom* atomBeatsPerBar = nullptr;
+ const LV2_Atom* atomBeatsPerMinute = nullptr;
+
+ LV2_Atom_Object_Query query[] { { mLV2_TIME__frame, &atomFrame },
+ { mLV2_TIME__speed, &atomSpeed },
+ { mLV2_TIME__beat, &atomBeat },
+ { mLV2_TIME__beatUnit, &atomBeatUnit },
+ { mLV2_TIME__beatsPerBar, &atomBeatsPerBar },
+ { mLV2_TIME__beatsPerMinute, &atomBeatsPerMinute },
+ LV2_ATOM_OBJECT_QUERY_END };
+
+ lv2_atom_object_query (object, query);
+
+ const auto setTimeInFrames = [&] (int64_t value)
+ {
+ info.timeInSamples = value;
+ info.timeInSeconds = (double) info.timeInSamples / sampleRate;
+ };
+
+ // Carla always seems to give us an integral 'beat' even though I'd expect
+ // it to be a floating-point value
+
+ if ( parser.parseNumericAtom (atomBeatsPerMinute).andThen ([&] (float value) { info.bpm = value; })
+ && parser.parseNumericAtom (atomBeatsPerBar) .andThen ([&] (float value) { info.timeSigNumerator = (int) value; })
+ && parser.parseNumericAtom (atomBeatUnit) .andThen ([&] (int32_t value) { info.timeSigDenominator = value; })
+ && parser.parseNumericAtom (atomBeat) .andThen ([&] (double value) { info.ppqPosition = value; })
+ && parser.parseNumericAtom (atomSpeed) .andThen ([&] (float value) { info.isPlaying = value != 0.0f; })
+ && parser.parseNumericAtom (atomFrame) .andThen (setTimeInFrames))
+ {
+ valid = true;
+ }
+ }
+
+ bool getCurrentPosition (CurrentPositionInfo& result) override
+ {
+ result = info;
+ return valid;
+ }
+
+private:
+ lv2_shared::NumericAtomParser parser;
+ CurrentPositionInfo info;
+ double sampleRate;
+ bool valid = false;
+
+ #define X(str) const LV2_URID m##str = parser.map (str);
+ X (LV2_ATOM__Blank)
+ X (LV2_ATOM__Object)
+ X (LV2_TIME__Position)
+ X (LV2_TIME__beat)
+ X (LV2_TIME__beatUnit)
+ X (LV2_TIME__beatsPerBar)
+ X (LV2_TIME__beatsPerMinute)
+ X (LV2_TIME__frame)
+ X (LV2_TIME__speed)
+ #undef X
+
+ JUCE_LEAK_DETECTOR (PlayHead)
+};
+
+//==============================================================================
+class Ports
+{
+public:
+ Ports (LV2_URID_Map map, int numInputsIn, int numOutputsIn)
+ : forge (map),
+ indices (numInputsIn, numOutputsIn),
+ mLV2_ATOM__Sequence (map.map (map.handle, LV2_ATOM__Sequence))
+ {
+ audioBuffers.resize (static_cast (numInputsIn + numOutputsIn), nullptr);
+ }
+
+ void connect (int port, void* data)
+ {
+ // The following is not UB _if_ data really points to an object with the expected type.
+
+ if (port == indices.getPortIndexFor (PortKind::seqInput))
+ {
+ inputData = static_cast (data);
+ }
+ else if (port == indices.getPortIndexFor (PortKind::seqOutput))
+ {
+ outputData = static_cast (data);
+ }
+ else if (port == indices.getPortIndexFor (PortKind::latencyOutput))
+ {
+ latency = static_cast (data);
+ }
+ else if (port == indices.getPortIndexFor (PortKind::freeWheelingInput))
+ {
+ freeWheeling = static_cast (data);
+ }
+ else if (port == indices.getPortIndexFor (PortKind::enabledInput))
+ {
+ enabled = static_cast (data);
+ }
+ else if (isPositiveAndBelow (port, indices.getMaxAudioPortIndex()))
+ {
+ audioBuffers[(size_t) port] = static_cast (data);
+ }
+ else
+ {
+ // This port was not declared!
+ jassertfalse;
+ }
+ }
+
+ template
+ void forEachInputEvent (Callback&& callback)
+ {
+ if (inputData != nullptr && inputData->atom.type == mLV2_ATOM__Sequence)
+ for (const auto* event : lv2_shared::SequenceIterator { lv2_shared::SequenceWithSize { inputData } })
+ callback (event);
+ }
+
+ void prepareToWrite()
+ {
+ // Note: Carla seems to have a bug (verified with the eg-fifths plugin) where
+ // the output buffer size is incorrect on alternate calls.
+ forge.setBuffer (reinterpret_cast (outputData), outputData->atom.size);
+ }
+
+ void writeLatency (int value)
+ {
+ if (latency != nullptr)
+ *latency = (float) value;
+ }
+
+ const float* getBufferForAudioInput (int index) const noexcept
+ {
+ return audioBuffers[(size_t) indices.getPortIndexForAudioInput (index)];
+ }
+
+ float* getBufferForAudioOutput (int index) const noexcept
+ {
+ return audioBuffers[(size_t) indices.getPortIndexForAudioOutput (index)];
+ }
+
+ bool isFreeWheeling() const noexcept
+ {
+ if (freeWheeling != nullptr)
+ return *freeWheeling > 0.5f;
+
+ return false;
+ }
+
+ bool isEnabled() const noexcept
+ {
+ if (enabled != nullptr)
+ return *enabled > 0.5f;
+
+ return true;
+ }
+
+ lv2_shared::AtomForge forge;
+ PortIndices indices;
+
+private:
+ static constexpr auto numParamPorts = 3;
+ const LV2_Atom_Sequence* inputData = nullptr;
+ LV2_Atom_Sequence* outputData = nullptr;
+ float* latency = nullptr;
+ float* freeWheeling = nullptr;
+ float* enabled = nullptr;
+ std::vector audioBuffers;
+ const LV2_URID mLV2_ATOM__Sequence;
+
+ JUCE_LEAK_DETECTOR (Ports)
+};
+
+class LV2PluginInstance : private AudioProcessorListener
+{
+public:
+ LV2PluginInstance (double sampleRate,
+ int64_t maxBlockSize,
+ const char*,
+ LV2_URID_Map mapFeatureIn)
+ : mapFeature (mapFeatureIn),
+ playHead (mapFeature, sampleRate)
+ {
+ processor->addListener (this);
+ processor->setPlayHead (&playHead);
+ prepare (sampleRate, (int) maxBlockSize);
+ }
+
+ void connect (uint32_t port, void* data)
+ {
+ ports.connect ((int) port, data);
+ }
+
+ void activate() {}
+
+ template
+ static void iterateAudioBuffer (AudioBuffer& ab, UnaryFunction fn)
+ {
+ float** sampleData = ab.getArrayOfWritePointers();
+
+ for (int c = ab.getNumChannels(); --c >= 0;)
+ for (int s = ab.getNumSamples(); --s >= 0;)
+ fn (sampleData[c][s]);
+ }
+
+ static int countNaNs (AudioBuffer& ab) noexcept
+ {
+ int count = 0;
+ iterateAudioBuffer (ab, [&count] (float s)
+ {
+ if (std::isnan (s))
+ ++count;
+ });
+
+ return count;
+ }
+
+ void run (uint32_t numSteps)
+ {
+ midi.clear();
+ playHead.invalidate();
+
+ ports.forEachInputEvent ([&] (const LV2_Atom_Event* event)
+ {
+ struct Callback
+ {
+ explicit Callback (LV2PluginInstance& s) : self (s) {}
+
+ void setParameter (LV2_URID property, float value) const noexcept
+ {
+ self.parameters.setValueFromHost (property, value);
+ }
+
+ // The host probably shouldn't send us 'touched' messages.
+ void gesture (LV2_URID, bool) const noexcept {}
+
+ LV2PluginInstance& self;
+ };
+
+ patchSetHelper.processPatchSet (event, Callback { *this });
+
+ playHead.readNewInfo (event);
+
+ if (event->body.type == mLV2_MIDI__MidiEvent)
+ midi.addEvent (event + 1, static_cast (event->body.size), static_cast (event->time.frames));
+ });
+
+ processor->setNonRealtime (ports.isFreeWheeling());
+
+ for (auto i = 0, end = processor->getTotalNumInputChannels(); i < end; ++i)
+ audio.copyFrom (i, 0, ports.getBufferForAudioInput (i), (int) numSteps);
+
+ jassert (countNaNs (audio) == 0);
+
+ {
+ const ScopedLock lock { processor->getCallbackLock() };
+
+ if (processor->isSuspended())
+ {
+ for (auto i = 0, end = processor->getTotalNumOutputChannels(); i < end; ++i)
+ {
+ const auto ptr = ports.getBufferForAudioOutput (i);
+ std::fill (ptr, ptr + numSteps, 0.0f);
+ }
+ }
+ else
+ {
+ const auto isEnabled = ports.isEnabled();
+
+ if (auto* param = processor->getBypassParameter())
+ {
+ param->setValueNotifyingHost (isEnabled ? 0.0f : 1.0f);
+ processor->processBlock (audio, midi);
+ }
+ else if (isEnabled)
+ {
+ processor->processBlock (audio, midi);
+ }
+ else
+ {
+ processor->processBlockBypassed (audio, midi);
+ }
+ }
+ }
+
+ for (auto i = 0, end = processor->getTotalNumOutputChannels(); i < end; ++i)
+ {
+ const auto src = audio.getReadPointer (i);
+ const auto dst = ports.getBufferForAudioOutput (i);
+
+ if (dst != nullptr)
+ std::copy (src, src + numSteps, dst);
+ }
+
+ ports.prepareToWrite();
+ auto* forge = ports.forge.get();
+ lv2_shared::SequenceFrame sequence { forge, (uint32_t) 0 };
+
+ parameters.forEachChangedParameter ([&] (const AudioProcessorParameter& param,
+ LV2_URID paramUrid,
+ const ParameterStorage::Options& options)
+ {
+ const auto sendTouched = [&] (bool state)
+ {
+ // TODO Implement begin/end change gesture support once it's supported by LV2
+ ignoreUnused (state);
+ };
+
+ if (options.gestureBegin)
+ sendTouched (true);
+
+ if (options.parameterValue)
+ {
+ lv2_atom_forge_frame_time (forge, 0);
+
+ lv2_shared::ObjectFrame object { forge, (uint32_t) 0, patchSetHelper.mLV2_PATCH__Set };
+
+ lv2_atom_forge_key (forge, patchSetHelper.mLV2_PATCH__property);
+ lv2_atom_forge_urid (forge, paramUrid);
+
+ lv2_atom_forge_key (forge, patchSetHelper.mLV2_PATCH__value);
+ lv2_atom_forge_float (forge, [&]
+ {
+ if (auto* rangedParam = dynamic_cast (¶m))
+ return rangedParam->convertFrom0to1 (rangedParam->getValue());
+
+ return param.getValue();
+ }());
+ }
+
+ if (options.gestureEnd)
+ sendTouched (false);
+ });
+
+ if (shouldSendStateChange.exchange (false))
+ {
+ lv2_atom_forge_frame_time (forge, 0);
+ lv2_shared::ObjectFrame { forge, (uint32_t) 0, mLV2_STATE__StateChanged };
+ }
+
+ for (const auto meta : midi)
+ {
+ const auto bytes = static_cast (meta.numBytes);
+ lv2_atom_forge_frame_time (forge, meta.samplePosition);
+ lv2_atom_forge_atom (forge, bytes, mLV2_MIDI__MidiEvent);
+ lv2_atom_forge_write (forge, meta.data, bytes);
+ }
+
+ ports.writeLatency (processor->getLatencySamples());
+ }
+
+ void deactivate() {}
+
+ LV2_State_Status store (LV2_State_Store_Function storeFn,
+ LV2_State_Handle handle,
+ uint32_t,
+ const LV2_Feature* const*)
+ {
+ MemoryBlock block;
+ processor->getStateInformation (block);
+ const auto text = block.toBase64Encoding();
+ storeFn (handle,
+ mJucePluginLV2UriState,
+ text.toRawUTF8(),
+ text.getNumBytesAsUTF8() + 1,
+ mLV2_ATOM__String,
+ LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE);
+
+ return LV2_STATE_SUCCESS;
+ }
+
+ LV2_State_Status retrieve (LV2_State_Retrieve_Function retrieveFn,
+ LV2_State_Handle handle,
+ uint32_t,
+ const LV2_Feature* const*)
+ {
+ size_t size = 0;
+ uint32_t type = 0;
+ uint32_t dataFlags = 0;
+
+ // Try retrieving a port index (if this is a 'program' preset).
+ const auto* programData = retrieveFn (handle, mJucePluginLV2UriProgram, &size, &type, &dataFlags);
+
+ if (programData != nullptr && type == mLV2_ATOM__Int && size == sizeof (int32_t))
+ {
+ const auto programIndex = readUnaligned (programData);
+ processor->setCurrentProgram (programIndex);
+ return LV2_STATE_SUCCESS;
+ }
+
+ // This doesn't seem to be a 'program' preset, try setting the full state from a string instead.
+ const auto* data = retrieveFn (handle, mJucePluginLV2UriState, &size, &type, &dataFlags);
+
+ if (data == nullptr)
+ return LV2_STATE_ERR_NO_PROPERTY;
+
+ if (type != mLV2_ATOM__String)
+ return LV2_STATE_ERR_BAD_TYPE;
+
+ String text (static_cast (data), (size_t) size);
+ MemoryBlock block;
+ block.fromBase64Encoding (text);
+ processor->setStateInformation (block.getData(), (int) block.getSize());
+
+ return LV2_STATE_SUCCESS;
+ }
+
+ std::unique_ptr createEditor()
+ {
+ return std::unique_ptr (processor->createEditorIfNeeded());
+ }
+
+ void editorBeingDeleted (AudioProcessorEditor* editor)
+ {
+ processor->editorBeingDeleted (editor);
+ }
+
+ static std::unique_ptr createProcessorInstance()
+ {
+ std::unique_ptr result { createPluginFilterOfType (AudioProcessor::wrapperType_LV2) };
+
+ #if defined (JucePlugin_PreferredChannelConfigurations)
+ constexpr short channelConfigurations[][2] { JucePlugin_PreferredChannelConfigurations };
+
+ static_assert (numElementsInArray (channelConfigurations) > 0,
+ "JucePlugin_PreferredChannelConfigurations must contain at least one entry");
+ static_assert (channelConfigurations[0][0] > 0 || channelConfigurations[0][1] > 0,
+ "JucePlugin_PreferredChannelConfigurations must have at least one input or output channel");
+ result->setPlayConfigDetails (channelConfigurations[0][0], channelConfigurations[0][1], 44100.0, 1024);
+
+ const auto desiredChannels = std::make_tuple (channelConfigurations[0][0], channelConfigurations[0][1]);
+ const auto actualChannels = std::make_tuple (result->getTotalNumInputChannels(), result->getTotalNumOutputChannels());
+
+ if (desiredChannels != actualChannels)
+ Logger::outputDebugString ("Failed to apply requested channel configuration!");
+ #else
+ result->enableAllBuses();
+ #endif
+
+ return result;
+ }
+
+private:
+ void audioProcessorParameterChanged (AudioProcessor*, int, float) override {}
+
+ void audioProcessorChanged (AudioProcessor*, const ChangeDetails& details) override
+ {
+ // Only check for non-parameter state here because:
+ // - Latency is automatically written every block.
+ // - There's no way for an LV2 plugin to report an internal program change.
+ // - Parameter info is hard-coded in the plugin's turtle description.
+ if (details.nonParameterStateChanged)
+ shouldSendStateChange = true;
+ }
+
+ void prepare (double sampleRate, int maxBlockSize)
+ {
+ jassert (processor != nullptr);
+ processor->setRateAndBufferSizeDetails (sampleRate, maxBlockSize);
+ processor->prepareToPlay (sampleRate, maxBlockSize);
+
+ const auto numChannels = jmax (processor->getTotalNumInputChannels(),
+ processor->getTotalNumOutputChannels());
+
+ midi.ensureSize (8192);
+ audio.setSize (numChannels, maxBlockSize);
+ audio.clear();
+ }
+
+ LV2_URID map (StringRef uri) const { return mapFeature.map (mapFeature.handle, uri); }
+
+ ScopedJuceInitialiser_GUI scopedJuceInitialiser;
+
+ #if JUCE_LINUX || JUCE_BSD
+ SharedResourcePointer messageThread;
+ #endif
+
+ std::unique_ptr processor = createProcessorInstance();
+ const LV2_URID_Map mapFeature;
+ ParameterStorage parameters { *processor, mapFeature };
+ Ports ports { mapFeature,
+ processor->getTotalNumInputChannels(),
+ processor->getTotalNumOutputChannels() };
+ lv2_shared::PatchSetHelper patchSetHelper { mapFeature, JucePlugin_LV2URI };
+ PlayHead playHead;
+ MidiBuffer midi;
+ AudioBuffer audio;
+ std::atomic shouldSendStateChange { false };
+
+ #define X(str) const LV2_URID m##str = map (str);
+ X (JucePluginLV2UriProgram)
+ X (JucePluginLV2UriState)
+ X (LV2_ATOM__Int)
+ X (LV2_ATOM__String)
+ X (LV2_BUF_SIZE__maxBlockLength)
+ X (LV2_BUF_SIZE__sequenceSize)
+ X (LV2_MIDI__MidiEvent)
+ X (LV2_PATCH__Set)
+ X (LV2_STATE__StateChanged)
+ #undef X
+
+ JUCE_LEAK_DETECTOR (LV2PluginInstance)
+};
+
+//==============================================================================
+struct RecallFeature
+{
+ int (*doRecall) (const char*) = [] (const char* libraryPath) -> int
+ {
+ const ScopedJuceInitialiser_GUI scope;
+ const auto processor = LV2PluginInstance::createProcessorInstance();
+ const File absolutePath { CharPointer_UTF8 { libraryPath } };
+
+ processor->enableAllBuses();
+
+ for (auto* fn : { writeManifestTtl, writeDspTtl, writeUiTtl })
+ {
+ const auto result = fn (*processor, absolutePath);
+
+ if (result.wasOk())
+ continue;
+
+ std::cerr << result.getErrorMessage() << '\n';
+ return 1;
+ }
+
+ return 0;
+ };
+
+private:
+ static String getPresetUri (int index)
+ {
+ return JucePlugin_LV2URI + String (uriSeparator) + "preset" + String (index + 1);
+ }
+
+ static std::ofstream openStream (const File& libraryPath, StringRef name)
+ {
+ return std::ofstream { libraryPath.getSiblingFile (name + ".ttl").getFullPathName().toRawUTF8() };
+ }
+
+ static Result writeManifestTtl (AudioProcessor& proc, const File& libraryPath)
+ {
+ auto os = openStream (libraryPath, "manifest");
+
+ os << "@prefix lv2: .\n"
+ "@prefix rdfs: .\n"
+ "@prefix pset: .\n"
+ "@prefix state: .\n"
+ "@prefix ui: .\n"
+ "@prefix xsd: .\n"
+ "\n"
+ "<" JucePlugin_LV2URI ">\n"
+ "\ta lv2:Plugin ;\n"
+ "\tlv2:binary <" << libraryPath.getFileName() << "> ;\n"
+ "\trdfs:seeAlso .\n";
+
+ if (proc.hasEditor())
+ {
+ #if JUCE_MAC
+ #define JUCE_LV2_UI_KIND "CocoaUI"
+ #elif JUCE_WINDOWS
+ #define JUCE_LV2_UI_KIND "WindowsUI"
+ #elif JUCE_LINUX
+ #define JUCE_LV2_UI_KIND "X11UI"
+ #else
+ #error "LV2 UI is unsupported on this platform"
+ #endif
+
+ os << "\n"
+ "<" << JucePluginLV2UriUi << ">\n"
+ "\ta ui:" JUCE_LV2_UI_KIND " ;\n"
+ "\tlv2:binary <" << libraryPath.getFileName() << "> ;\n"
+ "\trdfs:seeAlso .\n"
+ "\n";
+ }
+
+ for (auto i = 0, end = proc.getNumPrograms(); i < end; ++i)
+ {
+ os << "<" << getPresetUri (i) << ">\n"
+ "\ta pset:Preset ;\n"
+ "\tlv2:appliesTo <" JucePlugin_LV2URI "> ;\n"
+ "\trdfs:label \"" << proc.getProgramName (i) << "\" ;\n"
+ "\tstate:state [ <" << JucePluginLV2UriProgram << "> \"" << i << "\"^^xsd:int ; ] .\n"
+ "\n";
+ }
+
+ return Result::ok();
+ }
+
+ static std::vector findAllSubgroupsDepthFirst (const AudioProcessorParameterGroup& group,
+ std::vector foundSoFar = {})
+ {
+ foundSoFar.push_back (&group);
+
+ for (auto* node : group)
+ {
+ if (auto* subgroup = node->getGroup())
+ foundSoFar = findAllSubgroupsDepthFirst (*subgroup, std::move (foundSoFar));
+ }
+
+ return foundSoFar;
+ }
+
+ using GroupSymbolMap = std::map;
+
+ static String getFlattenedGroupSymbol (const AudioProcessorParameterGroup& group, String symbol = "")
+ {
+ if (auto* parent = group.getParent())
+ return getFlattenedGroupSymbol (*parent, group.getID() + (symbol.isEmpty() ? "" : group.getSeparator() + symbol));
+
+ return symbol;
+ }
+
+ static String getSymbolForGroup (const AudioProcessorParameterGroup& group)
+ {
+ const String allowedCharacters ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789");
+ const auto base = getFlattenedGroupSymbol (group);
+
+ if (base.isEmpty())
+ return {};
+
+ String copy;
+
+ for (const auto character : base)
+ copy << String::charToString (allowedCharacters.containsChar (character) ? character : (juce_wchar) '_');
+
+ return "paramgroup_" + copy;
+ }
+
+ static GroupSymbolMap getGroupsAndSymbols (const std::vector& groups)
+ {
+ std::set symbols;
+ GroupSymbolMap result;
+
+ for (const auto& group : groups)
+ {
+ const auto symbol = [&]
+ {
+ const auto idealSymbol = getSymbolForGroup (*group);
+
+ if (symbols.find (idealSymbol) == symbols.cend())
+ return idealSymbol;
+
+ for (auto i = 2; i < std::numeric_limits::max(); ++i)
+ {
+ const auto toTest = idealSymbol + "_" + String (i);
+
+ if (symbols.find (toTest) == symbols.cend())
+ return toTest;
+ }
+
+ jassertfalse;
+ return String();
+ }();
+
+ symbols.insert (symbol);
+ result.emplace (group, symbol);
+ }
+
+ return result;
+ }
+
+ template
+ static void visitAllParameters (const GroupSymbolMap& groups, Fn&& fn)
+ {
+ for (const auto& group : groups)
+ for (const auto* node : *group.first)
+ if (auto* param = node->getParameter())
+ fn (group.second, *param);
+ }
+
+ static Result writeDspTtl (AudioProcessor& proc, const File& libraryPath)
+ {
+ auto os = openStream (libraryPath, "dsp");
+
+ os << "@prefix atom: .\n"
+ "@prefix bufs: .\n"
+ "@prefix doap: .\n"
+ "@prefix foaf: .\n"
+ "@prefix lv2: .\n"
+ "@prefix midi: .\n"
+ "@prefix opts: .\n"
+ "@prefix param: .\n"
+ "@prefix patch: .\n"
+ "@prefix pg: .\n"
+ "@prefix plug: <" JucePlugin_LV2URI << uriSeparator << "> .\n"
+ "@prefix pprop: .\n"
+ "@prefix rdfs: .\n"
+ "@prefix rdf: .\n"
+ "@prefix state: .\n"
+ "@prefix time: .\n"
+ "@prefix ui: .\n"
+ "@prefix units: .\n"
+ "@prefix urid: .\n"
+ "@prefix xsd: .\n"
+ "\n";
+
+ LegacyAudioParametersWrapper legacyParameters (proc, false);
+
+ const auto allGroups = findAllSubgroupsDepthFirst (legacyParameters.getGroup());
+ const auto groupsAndSymbols = getGroupsAndSymbols (allGroups);
+
+ const auto parameterVisitor = [&] (const String& symbol,
+ const AudioProcessorParameter& param)
+ {
+ os << "plug:" << ParameterStorage::getUri (param) << "\n"
+ "\ta lv2:Parameter ;\n"
+ "\trdfs:label \"" << param.getName (1024) << "\" ;\n";
+
+ if (symbol.isNotEmpty())
+ os << "\tpg:group plug:" << symbol << " ;\n";
+
+ os << "\trdfs:range atom:Float ;\n";
+
+ if (auto* rangedParam = dynamic_cast (¶m))
+ {
+ os << "\tlv2:default " << rangedParam->convertFrom0to1 (rangedParam->getDefaultValue()) << " ;\n"
+ "\tlv2:minimum " << rangedParam->getNormalisableRange().start << " ;\n"
+ "\tlv2:maximum " << rangedParam->getNormalisableRange().end;
+ }
+ else
+ {
+ os << "\tlv2:default " << param.getDefaultValue() << " ;\n"
+ "\tlv2:minimum 0.0 ;\n"
+ "\tlv2:maximum 1.0";
+ }
+
+ // Avoid writing out loads of scale points for parameters with lots of steps
+ constexpr auto stepLimit = 1000;
+ const auto numSteps = param.getNumSteps();
+
+ if (param.isDiscrete() && 2 <= numSteps && numSteps < stepLimit)
+ {
+ os << "\t ;\n"
+ "\tlv2:portProperty lv2:enumeration " << (param.isBoolean() ? ", lv2:toggled " : "") << ";\n"
+ "\tlv2:scalePoint ";
+
+ const auto maxIndex = numSteps - 1;
+
+ for (int i = 0; i < numSteps; ++i)
+ {
+ const auto value = (float) i / (float) maxIndex;
+ const auto text = param.getText (value, 1024);
+
+ os << (i != 0 ? ", " : "") << "[\n"
+ "\t\trdfs:label \"" << text << "\" ;\n"
+ "\t\trdf:value " << value << " ;\n"
+ "\t]";
+ }
+ }
+
+ os << " .\n\n";
+ };
+
+ visitAllParameters (groupsAndSymbols, parameterVisitor);
+
+ for (const auto& groupInfo : groupsAndSymbols)
+ {
+ if (groupInfo.second.isEmpty())
+ continue;
+
+ os << "plug:" << groupInfo.second << "\n"
+ "\ta pg:Group ;\n";
+
+ if (auto* parent = groupInfo.first->getParent())
+ {
+ if (parent->getParent() != nullptr)
+ {
+ const auto it = groupsAndSymbols.find (parent);
+
+ if (it != groupsAndSymbols.cend())
+ os << "\tpg:subGroupOf plug:" << it->second << " ;\n";
+ }
+ }
+
+ os << "\tlv2:symbol \"" << groupInfo.second << "\" ;\n"
+ "\tlv2:name \"" << groupInfo.first->getName() << "\" .\n\n";
+ }
+
+ const auto getBaseBusName = [] (bool isInput) { return isInput ? "input_group_" : "output_group_"; };
+
+ for (const auto isInput : { true, false })
+ {
+ const auto baseBusName = getBaseBusName (isInput);
+ const auto groupKind = isInput ? "InputGroup" : "OutputGroup";
+ const auto busCount = proc.getBusCount (isInput);
+
+ for (auto i = 0; i < busCount; ++i)
+ {
+ if (const auto* bus = proc.getBus (isInput, i))
+ {
+ os << "plug:" << baseBusName << (i + 1) << "\n"
+ "\ta pg:" << groupKind << " ;\n"
+ "\tlv2:name \"" << bus->getName() << "\" ;\n"
+ "\tlv2:symbol \"" << baseBusName << (i + 1) << "\" .\n\n";
+ }
+ }
+ }
+
+ os << "<" JucePlugin_LV2URI ">\n";
+
+ if (proc.hasEditor())
+ os << "\tui:ui <" << JucePluginLV2UriUi << "> ;\n";
+
+ const auto versionParts = StringArray::fromTokens (JucePlugin_VersionString, ".", "");
+
+ const auto getVersionOrZero = [&] (int indexFromBack)
+ {
+ const auto str = versionParts[versionParts.size() - indexFromBack];
+ return str.isEmpty() ? 0 : str.getIntValue();
+ };
+
+ const auto minorVersion = getVersionOrZero (2);
+ const auto microVersion = getVersionOrZero (1);
+
+ os << "\ta "
+ #if JucePlugin_IsSynth
+ "lv2:InstrumentPlugin"
+ #else
+ "lv2:Plugin"
+ #endif
+ " ;\n"
+ "\tdoap:name \"" JucePlugin_Name "\" ;\n"
+ "\tdoap:description \"" JucePlugin_Desc "\" ;\n"
+ "\tlv2:minorVersion " << minorVersion << " ;\n"
+ "\tlv2:microVersion " << microVersion << " ;\n"
+ "\tdoap:maintainer [\n"
+ "\t\ta foaf:Person ;\n"
+ "\t\tfoaf:name \"" JucePlugin_Manufacturer "\" ;\n"
+ "\t\tfoaf:homepage <" JucePlugin_ManufacturerWebsite "> ;\n"
+ "\t\tfoaf:mbox <" JucePlugin_ManufacturerEmail "> ;\n"
+ "\t] ;\n"
+ "\tdoap:release [\n"
+ "\t\ta doap:Version ;\n"
+ "\t\tdoap:revision \"" JucePlugin_VersionString "\" ;\n"
+ "\t] ;\n"
+ "\tlv2:optionalFeature\n"
+ "\t\tlv2:hardRTCapable ;\n"
+ "\tlv2:extensionData\n"
+ "\t\t<" JUCE_TURTLE_RECALL_URI "> ,\n"
+ "\t\tstate:interface ;\n"
+ "\tlv2:requiredFeature\n"
+ "\t\turid:map ,\n"
+ "\t\topts:options ,\n"
+ "\t\tbufs:boundedBlockLength ;\n";
+
+ for (const auto isInput : { true, false })
+ {
+ const auto kind = isInput ? "mainInput" : "mainOutput";
+
+ if (proc.getBusCount (isInput) > 0)
+ os << "\tpg:" << kind << " plug:" << getBaseBusName (isInput) << "1 ;\n";
+ }
+
+ if (legacyParameters.size() != 0)
+ {
+ for (const auto header : { "writable", "readable" })
+ {
+ os << "\tpatch:" << header;
+
+ bool isFirst = true;
+
+ for (const auto* param : legacyParameters)
+ {
+ os << (isFirst ? "" : " ,") << "\n\t\tplug:" << ParameterStorage::getUri (*param);
+ isFirst = false;
+ }
+
+ os << " ;\n";
+ }
+ }
+
+ os << "\tlv2:port [\n";
+
+ const PortIndices indices (proc.getTotalNumInputChannels(),
+ proc.getTotalNumOutputChannels());
+
+ const auto designationMap = [&]
+ {
+ std::map result;
+
+ for (const auto& pair : lv2_shared::channelDesignationMap)
+ result.emplace (pair.second, pair.first);
+
+ return result;
+ }();
+
+ // TODO add support for specific audio group kinds
+ for (const auto isInput : { true, false })
+ {
+ const auto baseBusName = getBaseBusName (isInput);
+ const auto portKind = isInput ? "InputPort" : "OutputPort";
+ const auto portName = isInput ? "Audio In " : "Audio Out ";
+ const auto portSymbol = isInput ? "audio_in_" : "audio_out_";
+ const auto busCount = proc.getBusCount (isInput);
+
+ auto channelCounter = 0;
+
+ for (auto busIndex = 0; busIndex < busCount; ++busIndex)
+ {
+ if (const auto* bus = proc.getBus (isInput, busIndex))
+ {
+ const auto channelCount = bus->getNumberOfChannels();
+ const auto optionalBus = ! bus->isEnabledByDefault();
+
+ for (auto channelIndex = 0; channelIndex < channelCount; ++channelIndex, ++channelCounter)
+ {
+ const auto portIndex = isInput ? indices.getPortIndexForAudioInput (channelCounter)
+ : indices.getPortIndexForAudioOutput (channelCounter);
+
+ os << "\t\ta lv2:" << portKind << " , lv2:AudioPort ;\n"
+ "\t\tlv2:index " << portIndex << " ;\n"
+ "\t\tlv2:symbol \"" << portSymbol << (channelCounter + 1) << "\" ;\n"
+ "\t\tlv2:name \"" << portName << (channelCounter + 1) << "\" ;\n"
+ "\t\tpg:group plug:" << baseBusName << (busIndex + 1) << " ;\n";
+
+ if (optionalBus)
+ os << "\t\tlv2:portProperty lv2:connectionOptional ;\n";
+
+ const auto designation = bus->getCurrentLayout().getTypeOfChannel (channelIndex);
+ const auto it = designationMap.find (designation);
+
+ if (it != designationMap.end())
+ os << "\t\tlv2:designation <" << it->second << "> ;\n";
+
+ os << "\t] , [\n";
+ }
+ }
+ }
+ }
+
+ os << "\t\ta lv2:InputPort , atom:AtomPort ;\n"
+ "\t\tatom:bufferType atom:Sequence ;\n"
+ "\t\tatom:supports\n";
+
+ #if ! JucePlugin_IsSynth && ! JucePlugin_IsMidiEffect
+ if (proc.acceptsMidi())
+ #endif
+ os << "\t\t\tmidi:MidiEvent ,\n";
+
+ os << "\t\t\tpatch:Message ,\n"
+ "\t\t\ttime:Position ;\n"
+ "\t\tlv2:designation lv2:control ;\n"
+ "\t\tlv2:index " << indices.getPortIndexFor (PortKind::seqInput) << " ;\n"
+ "\t\tlv2:symbol \"in\" ;\n"
+ "\t\tlv2:name \"In\" ;\n"
+ "\t] , [\n"
+ "\t\ta lv2:OutputPort , atom:AtomPort ;\n"
+ "\t\tatom:bufferType atom:Sequence ;\n"
+ "\t\tatom:supports\n";
+
+ #if ! JucePlugin_IsMidiEffect
+ if (proc.producesMidi())
+ #endif
+ os << "\t\t\tmidi:MidiEvent ,\n";
+
+ os << "\t\t\tpatch:Message ;\n"
+ "\t\tlv2:designation lv2:control ;\n"
+ "\t\tlv2:index " << indices.getPortIndexFor (PortKind::seqOutput) << " ;\n"
+ "\t\tlv2:symbol \"out\" ;\n"
+ "\t\tlv2:name \"Out\" ;\n"
+ "\t] , [\n"
+ "\t\ta lv2:OutputPort , lv2:ControlPort ;\n"
+ "\t\tlv2:designation lv2:latency ;\n"
+ "\t\tlv2:symbol \"latency\" ;\n"
+ "\t\tlv2:name \"Latency\" ;\n"
+ "\t\tlv2:index " << indices.getPortIndexFor (PortKind::latencyOutput) << " ;\n"
+ "\t\tlv2:portProperty lv2:reportsLatency , lv2:integer , lv2:connectionOptional , pprop:notOnGUI ;\n"
+ "\t\tunits:unit units:frame ;\n"
+ "\t] , [\n"
+ "\t\ta lv2:InputPort , lv2:ControlPort ;\n"
+ "\t\tlv2:designation lv2:freeWheeling ;\n"
+ "\t\tlv2:symbol \"freeWheeling\" ;\n"
+ "\t\tlv2:name \"Free Wheeling\" ;\n"
+ "\t\tlv2:default 0.0 ;\n"
+ "\t\tlv2:minimum 0.0 ;\n"
+ "\t\tlv2:maximum 1.0 ;\n"
+ "\t\tlv2:index " << indices.getPortIndexFor (PortKind::freeWheelingInput) << " ;\n"
+ "\t\tlv2:portProperty lv2:toggled , lv2:connectionOptional , pprop:notOnGUI ;\n"
+ "\t] , [\n"
+ "\t\ta lv2:InputPort , lv2:ControlPort ;\n"
+ "\t\tlv2:designation lv2:enabled ;\n"
+ "\t\tlv2:symbol \"enabled\" ;\n"
+ "\t\tlv2:name \"Enabled\" ;\n"
+ "\t\tlv2:default 1.0 ;\n"
+ "\t\tlv2:minimum 0.0 ;\n"
+ "\t\tlv2:maximum 1.0 ;\n"
+ "\t\tlv2:index " << indices.getPortIndexFor (PortKind::enabledInput) << " ;\n"
+ "\t\tlv2:portProperty lv2:toggled , lv2:connectionOptional , pprop:notOnGUI ;\n"
+ "\t] ;\n"
+ "\topts:supportedOption\n"
+ "\t\tbufs:maxBlockLength .\n";
+
+ return Result::ok();
+ }
+
+ static Result writeUiTtl (AudioProcessor& proc, const File& libraryPath)
+ {
+ if (! proc.hasEditor())
+ return Result::ok();
+
+ auto os = openStream (libraryPath, "ui");
+
+ const auto editorInstance = rawToUniquePtr (proc.createEditor());
+ const auto resizeFeatureString = editorInstance->isResizable() ? "ui:resize" : "ui:noUserResize";
+
+ os << "@prefix lv2: .\n"
+ "@prefix opts: .\n"
+ "@prefix param: .\n"
+ "@prefix ui: .\n"
+ "@prefix urid: .\n"
+ "\n"
+ "<" << JucePluginLV2UriUi << ">\n"
+ "\tlv2:extensionData\n"
+ #if JUCE_LINUX || JUCE_BSD
+ "\t\tui:idleInterface ,\n"
+ #endif
+ "\t\topts:interface ,\n"
+ "\t\t" << resizeFeatureString << " ;\n"
+ "\n"
+ "\tlv2:requiredFeature\n"
+ #if JUCE_LINUX || JUCE_BSD
+ "\t\tui:idleInterface ,\n"
+ #endif
+ "\t\turid:map ,\n"
+ "\t\tui:parent ,\n"
+ "\t\t ;\n"
+ "\n"
+ "\tlv2:optionalFeature\n"
+ "\t\t" << resizeFeatureString << " ,\n"
+ "\t\topts:interface ,\n"
+ "\t\topts:options .\n\n"
+ "\topts:supportedOption\n"
+ "\t\tui:scaleFactor ,\n"
+ "\t\tparam:sampleRate .\n";
+
+ return Result::ok();
+ }
+
+ JUCE_LEAK_DETECTOR (RecallFeature)
+};
+
+//==============================================================================
+LV2_SYMBOL_EXPORT const LV2_Descriptor* lv2_descriptor (uint32_t index)
+{
+ PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_LV2;
+
+ if (index != 0)
+ return nullptr;
+
+ static const LV2_Descriptor descriptor
+ {
+ JucePlugin_LV2URI, // TODO some constexpr check that this is a valid URI in terms of RFC 3986
+ [] (const LV2_Descriptor*,
+ double sampleRate,
+ const char* pathToBundle,
+ const LV2_Feature* const* features) -> LV2_Handle
+ {
+ const auto* mapFeature = findMatchingFeatureData (features, LV2_URID__map);
+
+ if (mapFeature == nullptr)
+ {
+ // The host doesn't provide the 'urid map' feature
+ jassertfalse;
+ return nullptr;
+ }
+
+ const auto boundedBlockLength = hasFeature (features, LV2_BUF_SIZE__boundedBlockLength);
+
+ if (! boundedBlockLength)
+ {
+ // The host doesn't provide the 'bounded block length' feature
+ jassertfalse;
+ return nullptr;
+ }
+
+ const auto* options = findMatchingFeatureData (features, LV2_OPTIONS__options);
+
+ if (options == nullptr)
+ {
+ // The host doesn't provide the 'options' feature
+ jassertfalse;
+ return nullptr;
+ }
+
+ const lv2_shared::NumericAtomParser parser { *mapFeature };
+ const auto blockLengthUrid = mapFeature->map (mapFeature->handle, LV2_BUF_SIZE__maxBlockLength);
+ const auto blockSize = parser.parseNumericOption (findMatchingOption (options, blockLengthUrid));
+
+ if (! blockSize.successful)
+ {
+ // The host doesn't specify a maximum block size
+ jassertfalse;
+ return nullptr;
+ }
+
+ return new LV2PluginInstance { sampleRate, blockSize.value, pathToBundle, *mapFeature };
+ },
+ [] (LV2_Handle instance, uint32_t port, void* data)
+ {
+ static_cast (instance)->connect (port, data);
+ },
+ [] (LV2_Handle instance) { static_cast (instance)->activate(); },
+ [] (LV2_Handle instance, uint32_t sampleCount)
+ {
+ static_cast (instance)->run (sampleCount);
+ },
+ [] (LV2_Handle instance) { static_cast (instance)->deactivate(); },
+ [] (LV2_Handle instance)
+ {
+ JUCE_AUTORELEASEPOOL
+ {
+ delete static_cast (instance);
+ }
+ },
+ [] (const char* uri) -> const void*
+ {
+ const auto uriMatches = [&] (const LV2_Feature& f) { return std::strcmp (f.URI, uri) == 0; };
+
+ static RecallFeature recallFeature;
+
+ static LV2_State_Interface stateInterface
+ {
+ [] (LV2_Handle instance,
+ LV2_State_Store_Function store,
+ LV2_State_Handle handle,
+ uint32_t flags,
+ const LV2_Feature* const* features) -> LV2_State_Status
+ {
+ return static_cast (instance)->store (store, handle, flags, features);
+ },
+ [] (LV2_Handle instance,
+ LV2_State_Retrieve_Function retrieve,
+ LV2_State_Handle handle,
+ uint32_t flags,
+ const LV2_Feature* const* features) -> LV2_State_Status
+ {
+ return static_cast (instance)->retrieve (retrieve, handle, flags, features);
+ }
+ };
+
+ static const LV2_Feature features[] { { JUCE_TURTLE_RECALL_URI, &recallFeature },
+ { LV2_STATE__interface, &stateInterface } };
+
+ const auto it = std::find_if (std::begin (features), std::end (features), uriMatches);
+ return it != std::end (features) ? it->data : nullptr;
+ }
+ };
+
+ return &descriptor;
+}
+
+static lv2_shared::NumericAtomParser::ParseResult findScaleFactor (const LV2_URID_Map* symap,
+ const LV2_Options_Option* options)
+{
+ if (options == nullptr || symap == nullptr)
+ return {};
+
+ const lv2_shared::NumericAtomParser parser { *symap };
+ const auto scaleFactorUrid = symap->map (symap->handle, LV2_UI__scaleFactor);
+ const auto* scaleFactorOption = findMatchingOption (options, scaleFactorUrid);
+ return parser.parseNumericOption (scaleFactorOption);
+}
+
+class LV2UIInstance : private Component,
+ private ComponentListener
+{
+public:
+ LV2UIInstance (const char*,
+ const char*,
+ LV2UI_Write_Function writeFunctionIn,
+ LV2UI_Controller controllerIn,
+ LV2UI_Widget* widget,
+ LV2PluginInstance* pluginIn,
+ LV2UI_Widget parentIn,
+ const LV2_URID_Map* symapIn,
+ const LV2UI_Resize* resizeFeatureIn,
+ lv2_shared::NumericAtomParser::ParseResult scaleFactorIn)
+ : writeFunction (writeFunctionIn),
+ controller (controllerIn),
+ plugin (pluginIn),
+ parent (parentIn),
+ symap (symapIn),
+ resizeFeature (resizeFeatureIn),
+ scaleFactor (scaleFactorIn),
+ editor (plugin->createEditor())
+ {
+ jassert (plugin != nullptr);
+ jassert (parent != nullptr);
+ jassert (editor != nullptr);
+
+ if (editor == nullptr)
+ return;
+
+ const auto bounds = getSizeToContainChild();
+ setSize (bounds.getWidth(), bounds.getHeight());
+
+ addAndMakeVisible (*editor);
+
+ setBroughtToFrontOnMouseClick (true);
+ setOpaque (true);
+ setVisible (false);
+ removeFromDesktop();
+ addToDesktop (0, parent);
+ editor->addComponentListener (this);
+
+ *widget = getWindowHandle();
+
+ setVisible (true);
+
+ editor->setScaleFactor (getScaleFactor());
+ requestResize();
+ }
+
+ ~LV2UIInstance() override
+ {
+ plugin->editorBeingDeleted (editor.get());
+ }
+
+ // This is called by the host when a parameter changes.
+ // We don't care, our UI will listen to the processor directly.
+ void portEvent (uint32_t, uint32_t, uint32_t, const void*) {}
+
+ // Called when the host requests a resize
+ int resize (int width, int height)
+ {
+ const ScopedValueSetter scope (hostRequestedResize, true);
+ setSize (width, height);
+ return 0;
+ }
+
+ // Called by the host to give us an opportunity to process UI events
+ void idleCallback()
+ {
+ #if JUCE_LINUX || JUCE_BSD
+ messageThread->processPendingEvents();
+ #endif
+ }
+
+ void resized() override
+ {
+ const ScopedValueSetter scope (hostRequestedResize, true);
+
+ if (editor != nullptr)
+ {
+ const auto localArea = editor->getLocalArea (this, getLocalBounds());
+ editor->setBoundsConstrained ({ localArea.getWidth(), localArea.getHeight() });
+ }
+ }
+
+ void paint (Graphics& g) override { g.fillAll (Colours::black); }
+
+ uint32_t getOptions (LV2_Options_Option* options)
+ {
+ const auto scaleFactorUrid = symap->map (symap->handle, LV2_UI__scaleFactor);
+ const auto floatUrid = symap->map (symap->handle, LV2_ATOM__Float);;
+
+ for (auto* opt = options; opt->key != 0; ++opt)
+ {
+ if (opt->context != LV2_OPTIONS_INSTANCE || opt->subject != 0 || opt->key != scaleFactorUrid)
+ continue;
+
+ if (scaleFactor.successful)
+ {
+ opt->type = floatUrid;
+ opt->size = sizeof (float);
+ opt->value = &scaleFactor.value;
+ }
+ }
+
+ return LV2_OPTIONS_SUCCESS;
+ }
+
+ uint32_t setOptions (const LV2_Options_Option* options)
+ {
+ const auto scaleFactorUrid = symap->map (symap->handle, LV2_UI__scaleFactor);
+ const auto floatUrid = symap->map (symap->handle, LV2_ATOM__Float);;
+
+ for (auto* opt = options; opt->key != 0; ++opt)
+ {
+ if (opt->context != LV2_OPTIONS_INSTANCE
+ || opt->subject != 0
+ || opt->key != scaleFactorUrid
+ || opt->type != floatUrid
+ || opt->size != sizeof (float))
+ {
+ continue;
+ }
+
+ scaleFactor.successful = true;
+ scaleFactor.value = *static_cast (opt->value);
+ updateScale();
+ }
+
+ return LV2_OPTIONS_SUCCESS;
+ }
+
+private:
+ void updateScale()
+ {
+ editor->setScaleFactor (getScaleFactor());
+ requestResize();
+ }
+
+ Rectangle getSizeToContainChild() const
+ {
+ if (editor != nullptr)
+ return getLocalArea (editor.get(), editor->getLocalBounds());
+
+ return {};
+ }
+
+ float getScaleFactor() const noexcept
+ {
+ return scaleFactor.successful ? scaleFactor.value : 1.0f;
+ }
+
+ void componentMovedOrResized (Component&, bool, bool wasResized) override
+ {
+ if (! hostRequestedResize && wasResized)
+ requestResize();
+ }
+
+ void write (uint32_t portIndex, uint32_t bufferSize, uint32_t portProtocol, const void* data)
+ {
+ writeFunction (controller, portIndex, bufferSize, portProtocol, data);
+ }
+
+ void requestResize()
+ {
+ if (editor == nullptr)
+ return;
+
+ const auto bounds = getSizeToContainChild();
+
+ if (resizeFeature == nullptr)
+ return;
+
+ if (auto* fn = resizeFeature->ui_resize)
+ fn (resizeFeature->handle, bounds.getWidth(), bounds.getHeight());
+
+ setSize (bounds.getWidth(), bounds.getHeight());
+ repaint();
+ }
+
+ #if JUCE_LINUX || JUCE_BSD
+ SharedResourcePointer messageThread;
+ #endif
+
+ LV2UI_Write_Function writeFunction;
+ LV2UI_Controller controller;
+ LV2PluginInstance* plugin;
+ LV2UI_Widget parent;
+ const LV2_URID_Map* symap = nullptr;
+ const LV2UI_Resize* resizeFeature = nullptr;
+ lv2_shared::NumericAtomParser::ParseResult scaleFactor;
+ std::unique_ptr editor;
+ bool hostRequestedResize = false;
+
+ JUCE_LEAK_DETECTOR (LV2UIInstance)
+};
+
+LV2_SYMBOL_EXPORT const LV2UI_Descriptor* lv2ui_descriptor (uint32_t index)
+{
+ if (index != 0)
+ return nullptr;
+
+ static const LV2UI_Descriptor descriptor
+ {
+ JucePluginLV2UriUi.toRawUTF8(), // TODO some constexpr check that this is a valid URI in terms of RFC 3986
+ [] (const LV2UI_Descriptor*,
+ const char* pluginUri,
+ const char* bundlePath,
+ LV2UI_Write_Function writeFunction,
+ LV2UI_Controller controller,
+ LV2UI_Widget* widget,
+ const LV2_Feature* const* features) -> LV2UI_Handle
+ {
+ #if JUCE_LINUX || JUCE_BSD
+ SharedResourcePointer messageThread;
+ #endif
+
+ auto* plugin = findMatchingFeatureData (features, LV2_INSTANCE_ACCESS_URI);
+
+ if (plugin == nullptr)
+ {
+ // No instance access
+ jassertfalse;
+ return nullptr;
+ }
+
+ auto* parent = findMatchingFeatureData (features, LV2_UI__parent);
+
+ if (parent == nullptr)
+ {
+ // No parent access
+ jassertfalse;
+ return nullptr;
+ }
+
+ auto* resizeFeature = findMatchingFeatureData (features, LV2_UI__resize);
+
+ const auto* symap = findMatchingFeatureData (features, LV2_URID__map);
+ const auto scaleFactor = findScaleFactor (symap, findMatchingFeatureData (features, LV2_OPTIONS__options));
+
+ return new LV2UIInstance { pluginUri,
+ bundlePath,
+ writeFunction,
+ controller,
+ widget,
+ plugin,
+ parent,
+ symap,
+ resizeFeature,
+ scaleFactor };
+ },
+ [] (LV2UI_Handle ui)
+ {
+ #if JUCE_LINUX || JUCE_BSD
+ SharedResourcePointer messageThread;
+ #endif
+
+ JUCE_AUTORELEASEPOOL
+ {
+ delete static_cast (ui);
+ }
+ },
+ [] (LV2UI_Handle ui, uint32_t portIndex, uint32_t bufferSize, uint32_t format, const void* buffer)
+ {
+ JUCE_ASSERT_MESSAGE_THREAD
+ static_cast (ui)->portEvent (portIndex, bufferSize, format, buffer);
+ },
+ [] (const char* uri) -> const void*
+ {
+ const auto uriMatches = [&] (const LV2_Feature& f) { return std::strcmp (f.URI, uri) == 0; };
+
+ static LV2UI_Resize resize { nullptr, [] (LV2UI_Feature_Handle handle, int width, int height) -> int
+ {
+ JUCE_ASSERT_MESSAGE_THREAD
+ return static_cast (handle)->resize (width, height);
+ } };
+
+ static LV2UI_Idle_Interface idle { [] (LV2UI_Handle handle)
+ {
+ static_cast (handle)->idleCallback();
+ return 0;
+ } };
+
+ static LV2_Options_Interface options
+ {
+ [] (LV2_Handle handle, LV2_Options_Option* optionsIn)
+ {
+ return static_cast (handle)->getOptions (optionsIn);
+ },
+ [] (LV2_Handle handle, const LV2_Options_Option* optionsIn)
+ {
+ return static_cast (handle)->setOptions (optionsIn);
+ }
+ };
+
+ // We'll always define noUserResize and idle in the extension data array, but we'll
+ // only declare them in the ui.ttl if the UI is actually non-resizable, or requires
+ // idle callbacks.
+ // Well-behaved hosts should check the ttl before trying to search the
+ // extension-data array.
+ static const LV2_Feature features[] { { LV2_UI__resize, &resize },
+ { LV2_UI__noUserResize, nullptr },
+ { LV2_UI__idleInterface, &idle },
+ { LV2_OPTIONS__interface, &options } };
+
+ const auto it = std::find_if (std::begin (features), std::end (features), uriMatches);
+ return it != std::end (features) ? it->data : nullptr;
+ }
+ };
+
+ return &descriptor;
+}
+
+}
+}
+
+#endif
diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
index 8fc46bfc0b..61433739f2 100644
--- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
+++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
@@ -184,35 +184,6 @@ namespace
#endif
-#if JUCE_LINUX || JUCE_BSD
-class HostDrivenEventLoop
-{
-public:
- HostDrivenEventLoop()
- {
- messageThread->stop();
- MessageManager::getInstance()->setCurrentThreadAsMessageThread();
- }
-
- void processPendingEvents()
- {
- MessageManager::getInstance()->setCurrentThreadAsMessageThread();
-
- for (;;)
- if (! dispatchNextMessageOnSystemQueue (true))
- return;
- }
-
- ~HostDrivenEventLoop()
- {
- messageThread->start();
- }
-
-private:
- SharedResourcePointer messageThread;
-};
-#endif
-
//==============================================================================
// Ableton Live host specific commands
struct AbletonLiveHostSpecific
diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client_LV2.cpp b/modules/juce_audio_plugin_client/juce_audio_plugin_client_LV2.cpp
new file mode 100644
index 0000000000..f0e10d3f79
--- /dev/null
+++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client_LV2.cpp
@@ -0,0 +1,19 @@
+/*
+ ==============================================================================
+
+ This file is part of the JUCE 7 technical preview.
+ Copyright (c) 2022 - Raw Material Software Limited
+
+ You may use this code under the terms of the GPL v3
+ (see www.gnu.org/licenses).
+
+ For the technical preview this file cannot be licensed commercially.
+
+ JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
+ EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
+ DISCLAIMED.
+
+ ==============================================================================
+*/
+
+#include "LV2/juce_LV2_Client.cpp"
diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client_LV2.mm b/modules/juce_audio_plugin_client/juce_audio_plugin_client_LV2.mm
new file mode 100644
index 0000000000..056191e1a8
--- /dev/null
+++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client_LV2.mm
@@ -0,0 +1,19 @@
+/*
+ ==============================================================================
+
+ This file is part of the JUCE 7 technical preview.
+ Copyright (c) 2022 - Raw Material Software Limited
+
+ You may use this code under the terms of the GPL v3
+ (see www.gnu.org/licenses).
+
+ For the technical preview this file cannot be licensed commercially.
+
+ JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
+ EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
+ DISCLAIMED.
+
+ ==============================================================================
+*/
+
+#include "juce_audio_plugin_client_LV2.cpp"
diff --git a/modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h b/modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h
index e3de81df6c..f42da132f4 100644
--- a/modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h
+++ b/modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h
@@ -67,10 +67,6 @@
#endif
//==============================================================================
-#if JucePlugin_Build_LV2 && ! defined (JucePlugin_LV2URI)
- #error "You need to define the JucePlugin_LV2URI value!"
-#endif
-
#if JucePlugin_Build_AAX && ! defined (JucePlugin_AAXIdentifier)
#error "You need to define the JucePlugin_AAXIdentifier value!"
#endif
diff --git a/modules/juce_audio_plugin_client/utility/juce_LinuxMessageThread.h b/modules/juce_audio_plugin_client/utility/juce_LinuxMessageThread.h
index 6818d52ca5..9292f5a498 100644
--- a/modules/juce_audio_plugin_client/utility/juce_LinuxMessageThread.h
+++ b/modules/juce_audio_plugin_client/utility/juce_LinuxMessageThread.h
@@ -92,6 +92,35 @@ private:
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MessageThread)
};
+//==============================================================================
+/** @internal */
+class HostDrivenEventLoop
+{
+public:
+ HostDrivenEventLoop()
+ {
+ messageThread->stop();
+ MessageManager::getInstance()->setCurrentThreadAsMessageThread();
+ }
+
+ void processPendingEvents()
+ {
+ MessageManager::getInstance()->setCurrentThreadAsMessageThread();
+
+ for (;;)
+ if (! dispatchNextMessageOnSystemQueue (true))
+ return;
+ }
+
+ ~HostDrivenEventLoop()
+ {
+ messageThread->start();
+ }
+
+private:
+ SharedResourcePointer messageThread;
+};
+
} // namespace juce
#endif