diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
index 5b9e964543..58164f49c7 100644
--- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
+++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt
@@ -954,6 +954,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"
"../../../../../modules/juce_core/containers/juce_SingleThreadedAbstractFifo.h"
"../../../../../modules/juce_core/containers/juce_SortedSet.h"
+ "../../../../../modules/juce_core/containers/juce_Span.h"
"../../../../../modules/juce_core/containers/juce_SparseSet.cpp"
"../../../../../modules/juce_core/containers/juce_SparseSet.h"
"../../../../../modules/juce_core/containers/juce_Variant.cpp"
@@ -2936,6 +2937,7 @@ set_source_files_properties(
"../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"
"../../../../../modules/juce_core/containers/juce_SingleThreadedAbstractFifo.h"
"../../../../../modules/juce_core/containers/juce_SortedSet.h"
+ "../../../../../modules/juce_core/containers/juce_Span.h"
"../../../../../modules/juce_core/containers/juce_SparseSet.cpp"
"../../../../../modules/juce_core/containers/juce_SparseSet.h"
"../../../../../modules/juce_core/containers/juce_Variant.cpp"
diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
index 187c40f266..282330dbb5 100644
--- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
@@ -3203,6 +3203,7 @@
+
diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters
index 57a30d71d1..a903cacb0b 100644
--- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters
+++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters
@@ -4965,6 +4965,9 @@
JUCE Modules\juce_core\containers
+
+ JUCE Modules\juce_core\containers
+
JUCE Modules\juce_core\containers
diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
index 08a4d4c8a0..3eea056723 100644
--- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
@@ -3203,6 +3203,7 @@
+
diff --git a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
index c91a76b8c8..e51dab45fb 100644
--- a/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
+++ b/examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
@@ -4965,6 +4965,9 @@
JUCE Modules\juce_core\containers
+
+ JUCE Modules\juce_core\containers
+
JUCE Modules\juce_core\containers
diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
index 678c53488c..8b546eed2f 100644
--- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
+++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
@@ -3203,6 +3203,7 @@
+
diff --git a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
index c430519c95..c9cf69611a 100644
--- a/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
+++ b/examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
@@ -4965,6 +4965,9 @@
JUCE Modules\juce_core\containers
+
+ JUCE Modules\juce_core\containers
+
JUCE Modules\juce_core\containers
diff --git a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
index be3f6cd76d..6830b5e5eb 100644
--- a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
+++ b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
@@ -830,6 +830,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"
"../../../../../modules/juce_core/containers/juce_SingleThreadedAbstractFifo.h"
"../../../../../modules/juce_core/containers/juce_SortedSet.h"
+ "../../../../../modules/juce_core/containers/juce_Span.h"
"../../../../../modules/juce_core/containers/juce_SparseSet.cpp"
"../../../../../modules/juce_core/containers/juce_SparseSet.h"
"../../../../../modules/juce_core/containers/juce_Variant.cpp"
@@ -2510,6 +2511,7 @@ set_source_files_properties(
"../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"
"../../../../../modules/juce_core/containers/juce_SingleThreadedAbstractFifo.h"
"../../../../../modules/juce_core/containers/juce_SortedSet.h"
+ "../../../../../modules/juce_core/containers/juce_Span.h"
"../../../../../modules/juce_core/containers/juce_SparseSet.cpp"
"../../../../../modules/juce_core/containers/juce_SparseSet.h"
"../../../../../modules/juce_core/containers/juce_Variant.cpp"
diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
index 5ef37cc67b..e8fb5d4d0f 100644
--- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
+++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
@@ -2756,6 +2756,7 @@
+
diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
index 81bc0c6d38..f6eef51c9a 100644
--- a/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
+++ b/extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
@@ -4242,6 +4242,9 @@
JUCE Modules\juce_core\containers
+
+ JUCE Modules\juce_core\containers
+
JUCE Modules\juce_core\containers
diff --git a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
index 4e41480c5e..297c823b1c 100644
--- a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
+++ b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
@@ -863,6 +863,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"
"../../../../../modules/juce_core/containers/juce_SingleThreadedAbstractFifo.h"
"../../../../../modules/juce_core/containers/juce_SortedSet.h"
+ "../../../../../modules/juce_core/containers/juce_Span.h"
"../../../../../modules/juce_core/containers/juce_SparseSet.cpp"
"../../../../../modules/juce_core/containers/juce_SparseSet.h"
"../../../../../modules/juce_core/containers/juce_Variant.cpp"
@@ -2698,6 +2699,7 @@ set_source_files_properties(
"../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"
"../../../../../modules/juce_core/containers/juce_SingleThreadedAbstractFifo.h"
"../../../../../modules/juce_core/containers/juce_SortedSet.h"
+ "../../../../../modules/juce_core/containers/juce_Span.h"
"../../../../../modules/juce_core/containers/juce_SparseSet.cpp"
"../../../../../modules/juce_core/containers/juce_SparseSet.h"
"../../../../../modules/juce_core/containers/juce_Variant.cpp"
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
index dd2de8a967..df9d4d3708 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
@@ -2939,6 +2939,7 @@
+
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters
index 644f19ed72..ef8871efbd 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters
+++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters
@@ -4521,6 +4521,9 @@
JUCE Modules\juce_core\containers
+
+ JUCE Modules\juce_core\containers
+
JUCE Modules\juce_core\containers
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
index 6e7a859c57..17a9a1b318 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
@@ -2939,6 +2939,7 @@
+
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
index 4cc5b50e3a..9e19f2420c 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
+++ b/extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
@@ -4521,6 +4521,9 @@
JUCE Modules\juce_core\containers
+
+ JUCE Modules\juce_core\containers
+
JUCE Modules\juce_core\containers
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
index 75283ced33..e48bc3dbea 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
+++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
@@ -2939,6 +2939,7 @@
+
diff --git a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
index 1e37071622..f03714a51a 100644
--- a/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
+++ b/extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
@@ -4521,6 +4521,9 @@
JUCE Modules\juce_core\containers
+
+ JUCE Modules\juce_core\containers
+
JUCE Modules\juce_core\containers
diff --git a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj
index c8eed50323..95ca24991c 100644
--- a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj
+++ b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj
@@ -486,6 +486,7 @@
+
diff --git a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters
index b821c96bfe..700b5c4776 100644
--- a/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters
+++ b/extras/BinaryBuilder/Builds/VisualStudio2022/BinaryBuilder_ConsoleApp.vcxproj.filters
@@ -477,6 +477,9 @@
JUCE Modules\juce_core\containers
+
+ JUCE Modules\juce_core\containers
+
JUCE Modules\juce_core\containers
diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
index 1635dd7f4e..69aaf46c9d 100644
--- a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
+++ b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
@@ -834,6 +834,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"
"../../../../../modules/juce_core/containers/juce_SingleThreadedAbstractFifo.h"
"../../../../../modules/juce_core/containers/juce_SortedSet.h"
+ "../../../../../modules/juce_core/containers/juce_Span.h"
"../../../../../modules/juce_core/containers/juce_SparseSet.cpp"
"../../../../../modules/juce_core/containers/juce_SparseSet.h"
"../../../../../modules/juce_core/containers/juce_Variant.cpp"
@@ -2594,6 +2595,7 @@ set_source_files_properties(
"../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"
"../../../../../modules/juce_core/containers/juce_SingleThreadedAbstractFifo.h"
"../../../../../modules/juce_core/containers/juce_SortedSet.h"
+ "../../../../../modules/juce_core/containers/juce_Span.h"
"../../../../../modules/juce_core/containers/juce_SparseSet.cpp"
"../../../../../modules/juce_core/containers/juce_SparseSet.h"
"../../../../../modules/juce_core/containers/juce_Variant.cpp"
diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
index d4df0a265b..3efed10535 100644
--- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
+++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
@@ -2847,6 +2847,7 @@
+
diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
index 0dc2f237dc..7e184d362d 100644
--- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
+++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
@@ -4383,6 +4383,9 @@
JUCE Modules\juce_core\containers
+
+ JUCE Modules\juce_core\containers
+
JUCE Modules\juce_core\containers
diff --git a/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj b/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj
index fe6398e49f..8dd560c757 100644
--- a/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj
+++ b/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj
@@ -149,6 +149,7 @@
35CFCC15CBA46F4513940A2A /* jucer_TextButtonHandler.h */ /* jucer_TextButtonHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_TextButtonHandler.h; path = ../../Source/ComponentEditor/Components/jucer_TextButtonHandler.h; sourceTree = SOURCE_ROOT; };
364D1A9B113320407A7E57B9 /* JuceHeader.h */ /* JuceHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = SOURCE_ROOT; };
36E5FBF64A89D5F2A266A5A7 /* jucer_PaintElementUndoableAction.h */ /* jucer_PaintElementUndoableAction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_PaintElementUndoableAction.h; path = ../../Source/ComponentEditor/PaintElements/jucer_PaintElementUndoableAction.h; sourceTree = SOURCE_ROOT; };
+ 37C52FDE069922DFD4A938C8 /* juce_LinuxSubprocessHelper.cpp */ /* juce_LinuxSubprocessHelper.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_LinuxSubprocessHelper.cpp; path = ../../../Build/CMake/juce_LinuxSubprocessHelper.cpp; sourceTree = SOURCE_ROOT; };
39597BD78897CB711AFA945A /* jucer_EditingPanelBase.h */ /* jucer_EditingPanelBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_EditingPanelBase.h; path = ../../Source/ComponentEditor/UI/jucer_EditingPanelBase.h; sourceTree = SOURCE_ROOT; };
3D36F0CEB84B27BD02FC461A /* jucer_LabelPropertyComponent.h */ /* jucer_LabelPropertyComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_LabelPropertyComponent.h; path = ../../Source/Utility/UI/PropertyComponents/jucer_LabelPropertyComponent.h; sourceTree = SOURCE_ROOT; };
3D6FD9C0065BF16568EC0AB7 /* jucer_SlidingPanelComponent.h */ /* jucer_SlidingPanelComponent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_SlidingPanelComponent.h; path = ../../Source/Utility/UI/jucer_SlidingPanelComponent.h; sourceTree = SOURCE_ROOT; };
@@ -376,6 +377,7 @@
FA790C59A304579F660F112F /* jucer_ProjectExport_CodeBlocks.h */ /* jucer_ProjectExport_CodeBlocks.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjectExport_CodeBlocks.h; path = ../../Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h; sourceTree = SOURCE_ROOT; };
FB80347407261BF6CCEFDE91 /* jucer_ComponentTemplate.cpp */ /* jucer_ComponentTemplate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = jucer_ComponentTemplate.cpp; path = ../../Source/BinaryData/Templates/jucer_ComponentTemplate.cpp; sourceTree = SOURCE_ROOT; };
FCEBE24EA79A13713D7CBF26 /* jucer_ComponentColourProperty.h */ /* jucer_ComponentColourProperty.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ComponentColourProperty.h; path = ../../Source/ComponentEditor/Properties/jucer_ComponentColourProperty.h; sourceTree = SOURCE_ROOT; };
+ FD6A6FA8BDBDDD441BCD33F9 /* juce_SimpleBinaryBuilder.cpp */ /* juce_SimpleBinaryBuilder.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = juce_SimpleBinaryBuilder.cpp; path = ../../Source/BinaryData/juce_SimpleBinaryBuilder.cpp; sourceTree = SOURCE_ROOT; };
FD7885911A317D73E98D49B3 /* jucer_NewProjectWizard.h */ /* jucer_NewProjectWizard.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_NewProjectWizard.h; path = ../../Source/Application/StartPage/jucer_NewProjectWizard.h; sourceTree = SOURCE_ROOT; };
FDABEE6B64546586368A4729 /* jucer_AvailableModulesList.h */ /* jucer_AvailableModulesList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_AvailableModulesList.h; path = ../../Source/Project/Modules/jucer_AvailableModulesList.h; sourceTree = SOURCE_ROOT; };
FE20FE5805A02A4843048200 /* jucer_ProjucerLookAndFeel.h */ /* jucer_ProjucerLookAndFeel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jucer_ProjucerLookAndFeel.h; path = ../../Source/Utility/UI/jucer_ProjucerLookAndFeel.h; sourceTree = SOURCE_ROOT; };
@@ -866,6 +868,8 @@
41105E536155E394E54BDD35,
5F6584B675E30761521A9F42,
C5A1549AD0C20CF42C1FE630,
+ 37C52FDE069922DFD4A938C8,
+ FD6A6FA8BDBDDD441BCD33F9,
);
name = BinaryData;
sourceTree = "";
diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj
index eaab8066a7..ac0637309c 100644
--- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj
@@ -196,6 +196,12 @@
true
+
+ true
+
+
+ true
+
@@ -1728,6 +1734,7 @@
+
diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters
index c01b770924..730a63f9b6 100644
--- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters
@@ -388,6 +388,12 @@
Projucer\BinaryData
+
+ Projucer\BinaryData
+
+
+ Projucer\BinaryData
+
Projucer\CodeEditor
@@ -2487,6 +2493,9 @@
JUCE Modules\juce_core\containers
+
+ JUCE Modules\juce_core\containers
+
JUCE Modules\juce_core\containers
diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
index 5563032f1c..7dd8436525 100644
--- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
@@ -196,6 +196,12 @@
true
+
+ true
+
+
+ true
+
@@ -1728,6 +1734,7 @@
+
diff --git a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
index bf82efb3dc..82904a1b34 100644
--- a/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
@@ -388,6 +388,12 @@
Projucer\BinaryData
+
+ Projucer\BinaryData
+
+
+ Projucer\BinaryData
+
Projucer\CodeEditor
@@ -2487,6 +2493,9 @@
JUCE Modules\juce_core\containers
+
+ JUCE Modules\juce_core\containers
+
JUCE Modules\juce_core\containers
diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
index a6b64ae192..59eea54a1f 100644
--- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
+++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
@@ -196,6 +196,12 @@
true
+
+ true
+
+
+ true
+
@@ -1728,6 +1734,7 @@
+
diff --git a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
index 3e3eb44572..8d124814f1 100644
--- a/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
+++ b/extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
@@ -388,6 +388,12 @@
Projucer\BinaryData
+
+ Projucer\BinaryData
+
+
+ Projucer\BinaryData
+
Projucer\CodeEditor
@@ -2487,6 +2493,9 @@
JUCE Modules\juce_core\containers
+
+ JUCE Modules\juce_core\containers
+
JUCE Modules\juce_core\containers
diff --git a/extras/Projucer/JuceLibraryCode/BinaryData.cpp b/extras/Projucer/JuceLibraryCode/BinaryData.cpp
index 17e72df1ee..76feaf88ac 100644
--- a/extras/Projucer/JuceLibraryCode/BinaryData.cpp
+++ b/extras/Projucer/JuceLibraryCode/BinaryData.cpp
@@ -8513,6 +8513,271 @@ static const unsigned char temp_binary_data_65[] =
const char* juce_runtime_arch_detection_cpp = (const char*) temp_binary_data_65;
+//================== juce_LinuxSubprocessHelper.cpp ==================
+static const unsigned char temp_binary_data_66[] =
+"/*\r\n"
+" ==============================================================================\r\n"
+"\r\n"
+" This file is part of the JUCE library.\r\n"
+" Copyright (c) 2022 - Raw Material Software Limited\r\n"
+"\r\n"
+" JUCE is an open source library subject to commercial or open-source\r\n"
+" licensing.\r\n"
+"\r\n"
+" By using JUCE, you agree to the terms of both the JUCE 7 End-User License\r\n"
+" Agreement and JUCE Privacy Policy.\r\n"
+"\r\n"
+" End User License Agreement: www.juce.com/juce-7-licence\r\n"
+" Privacy Policy: www.juce.com/juce-privacy-policy\r\n"
+"\r\n"
+" Or: You may also use this code under the terms of the GPL v3 (see\r\n"
+" www.gnu.org/licenses).\r\n"
+"\r\n"
+" JUCE IS PROVIDED \"AS IS\" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER\r\n"
+" EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE\r\n"
+" DISCLAIMED.\r\n"
+"\r\n"
+" ==============================================================================\r\n"
+"*/\r\n"
+"\r\n"
+"#include \r\n"
+"\r\n"
+"int main (int argc, const char** argv)\r\n"
+"{\r\n"
+" if (argc >= 3)\r\n"
+" if (auto* handle = dlopen (argv[1], RTLD_LAZY))\r\n"
+" if (auto* function = reinterpret_cast (dlsym (handle, argv[2])))\r\n"
+" return function (argc - 3, argv + 3);\r\n"
+"\r\n"
+" return 1;\r\n"
+"}\r\n";
+
+const char* juce_LinuxSubprocessHelper_cpp = (const char*) temp_binary_data_66;
+
+//================== juce_SimpleBinaryBuilder.cpp ==================
+static const unsigned char temp_binary_data_67[] =
+"/*\r\n"
+" ==============================================================================\r\n"
+"\r\n"
+" This file is part of the JUCE library.\r\n"
+" Copyright (c) 2022 - Raw Material Software Limited\r\n"
+"\r\n"
+" JUCE is an open source library subject to commercial or open-source\r\n"
+" licensing.\r\n"
+"\r\n"
+" By using JUCE, you agree to the terms of both the JUCE 7 End-User License\r\n"
+" Agreement and JUCE Privacy Policy.\r\n"
+"\r\n"
+" End User License Agreement: www.juce.com/juce-7-licence\r\n"
+" Privacy Policy: www.juce.com/juce-privacy-policy\r\n"
+"\r\n"
+" Or: You may also use this code under the terms of the GPL v3 (see\r\n"
+" www.gnu.org/licenses).\r\n"
+"\r\n"
+" JUCE IS PROVIDED \"AS IS\" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER\r\n"
+" EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE\r\n"
+" DISCLAIMED.\r\n"
+"\r\n"
+" ==============================================================================\r\n"
+"*/\r\n"
+"\r\n"
+"#include \r\n"
+"#include \r\n"
+"#include \r\n"
+"#include \r\n"
+"#include \r\n"
+"#include \r\n"
+"\r\n"
+"namespace fs = std::filesystem;\r\n"
+"\r\n"
+"//==============================================================================\r\n"
+"namespace StringHelpers\r\n"
+"{\r\n"
+"\r\n"
+"static bool isQuoteCharacter (char c)\r\n"
+"{\r\n"
+" return c == '\"' || c == '\\'';\r\n"
+"}\r\n"
+"\r\n"
+"static std::string unquoted (const std::string& str)\r\n"
+"{\r\n"
+" if (str.length() == 0 || (! isQuoteCharacter (str[0])))\r\n"
+" return str;\r\n"
+"\r\n"
+" return str.substr (1, str.length() - (isQuoteCharacter (str[str.length() - 1]) ? 1 : 0));\r\n"
+"}\r\n"
+"\r\n"
+"static void ltrim (std::string& s)\r\n"
+"{\r\n"
+" s.erase (s.begin(), std::find_if (s.begin(), s.end(), [] (int c) { return ! std::isspace (c); }));\r\n"
+"}\r\n"
+"\r\n"
+"static void rtrim (std::string& s)\r\n"
+"{\r\n"
+" s.erase (std::find_if (s.rbegin(), s.rend(), [] (int c) { return ! std::isspace (c); }).base(), s.end());\r\n"
+"}\r\n"
+"\r\n"
+"static std::string trimmed (const std::string& str)\r\n"
+"{\r\n"
+" auto result = str;\r\n"
+" ltrim (result);\r\n"
+" rtrim (result);\r\n"
+" return result;\r\n"
+"}\r\n"
+"\r\n"
+"static std::string replaced (const std::string& str, char charToReplace, char replaceWith)\r\n"
+"{\r\n"
+" auto result = str;\r\n"
+" std::replace( result.begin(), result.end(), charToReplace, replaceWith);\r\n"
+" return result;\r\n"
+"}\r\n"
+"\r\n"
+"}\r\n"
+"\r\n"
+"//==============================================================================\r\n"
+"static bool addFile (const fs::path& filePath,\r\n"
+" const std::string& binaryNamespace,\r\n"
+" std::ofstream& headerStream,\r\n"
+" std::ofstream& cppStream)\r\n"
+"{\r\n"
+" std::ifstream fileStream (filePath, std::ios::in | std::ios::binary | std::ios::ate);\r\n"
+"\r\n"
+" if (! fileStream.is_open())\r\n"
+" {\r\n"
+" std::cerr << \"Failed to open input file \" << filePath << std::endl;\r\n"
+" return false;\r\n"
+" }\r\n"
+"\r\n"
+" std::vector buffer ((size_t) fileStream.tellg());\r\n"
+" fileStream.seekg (0);\r\n"
+" fileStream.read (buffer.data(), static_cast (buffer.size()));\r\n"
+"\r\n"
+" const auto variableName = StringHelpers::replaced (StringHelpers::replaced (filePath.filename().string(),\r\n"
+" ' ',\r\n"
+" '_'),\r\n"
+" '.',\r\n"
+" '_');\r\n"
+"\r\n"
+" std::cout << \"Adding \" << variableName << \": \"\r\n"
+" << buffer.size() << \" bytes\" << std::endl;\r\n"
+"\r\n"
+" headerStream << \" extern const char* \" << variableName << \";\\r\\n\"\r\n"
+" \" const int \" << variableName << \"Size = \"\r\n"
+" << buffer.size() << \";\" << std::endl;\r\n"
+"\r\n"
+" cppStream << \"static const unsigned char temp0[] = {\";\r\n"
+"\r\n"
+" auto* data = (const uint8_t*) buffer.data();\r\n"
+"\r\n"
+" for (size_t i = 0; i < buffer.size() - 1; ++i)\r\n"
+" {\r\n"
+" if ((i % 40) != 39)\r\n"
+" cppStream << (int) data[i] << \",\";\r\n"
+" else\r\n"
+" cppStream << (int) data[i] << \",\" << std::endl << \" \";\r\n"
+" }\r\n"
+"\r\n"
+" cppStream << (int) data[buffer.size() - 1] << \",0,0};\" << std::endl;\r\n"
+" cppStream << \"const char* \" << binaryNamespace << \"::\" << variableName\r\n"
+" << \" = (const char*) temp0\" << \";\" << std::endl << std::endl;\r\n"
+"\r\n"
+" return true;\r\n"
+"}\r\n"
+"\r\n"
+"//==============================================================================\r\n"
+"int main (int argc, char* argv[])\r\n"
+"{\r\n"
+" if (argc != 5)\r\n"
+" {\r\n"
+" std::cout << \" Usage: SimpleBinaryBuilder sourcefile targetdirectory targetfilename namespace\\n\\n\"\r\n"
+" \" SimpleBinaryBuilder will encode the provided source file into\\n\"\r\n"
+" \" two files called (targetfilename).cpp and (targetfilename).h,\\n\"\r\n"
+" \" which it will write into the specified target directory.\\n\"\r\n"
+" \" The target directory will be automatically created if necessary. The binary\"\r\n"
+" \" resource will be available in the given namespace.\\n\\n\";\r\n"
+"\r\n"
+" return 0;\r\n"
+" }\r\n"
+"\r\n"
+" const auto sourceFile = fs::current_path() / StringHelpers::unquoted (std::string (argv[1]));\r\n"
+"\r\n"
+" if (! fs::exists (sourceFile))\r\n"
+" {\r\n"
+" std::cerr << \"Source file doesn't exist: \"\r\n"
+" << sourceFile\r\n"
+" << std::endl << std::endl;\r\n"
+"\r\n"
+" return 1;\r\n"
+" }\r\n"
+"\r\n"
+" const auto targetDirectory = fs::current_path() / StringHelpers::unquoted (std::string (argv[2]));\r\n"
+"\r\n"
+" if (! fs::exists (targetDirectory))\r\n"
+" {\r\n"
+" try\r\n"
+" {\r\n"
+" fs::create_directories (targetDirectory);\r\n"
+" }\r\n"
+" catch (const fs::filesystem_error&)\r\n"
+" {\r\n"
+" std::cerr << \"Failed to create target directory: \"\r\n"
+" << targetDirectory\r\n"
+" << std::endl << std::endl;\r\n"
+"\r\n"
+" return 1;\r\n"
+" }\r\n"
+" }\r\n"
+"\r\n"
+" const auto className = StringHelpers::trimmed (argv[3]);\r\n"
+" const auto binaryNamespace = StringHelpers::trimmed (argv[4]);\r\n"
+"\r\n"
+" const auto headerFilePath = targetDirectory / (className + \".h\");\r\n"
+" const auto cppFilePath = targetDirectory / (className + \".cpp\");\r\n"
+"\r\n"
+" std::cout << \"Creating \" << headerFilePath\r\n"
+" << \" and \" << cppFilePath\r\n"
+" << \" from file \" << sourceFile\r\n"
+" << \"...\" << std::endl << std::endl;\r\n"
+"\r\n"
+" fs::remove (headerFilePath);\r\n"
+" fs::remove (cppFilePath);\r\n"
+"\r\n"
+" std::ofstream header (headerFilePath);\r\n"
+"\r\n"
+" if (! header.is_open())\r\n"
+" {\r\n"
+" std::cerr << \"Failed to open \" << headerFilePath << std::endl;\r\n"
+"\r\n"
+" return 1;\r\n"
+" }\r\n"
+"\r\n"
+" std::ofstream cpp (cppFilePath);\r\n"
+"\r\n"
+" if (! cpp.is_open())\r\n"
+" {\r\n"
+" std::cerr << \"Failed to open \" << headerFilePath << std::endl;\r\n"
+"\r\n"
+" return 1;\r\n"
+" }\r\n"
+"\r\n"
+" header << \"/* (Auto-generated binary data file). */\" << std::endl << std::endl\r\n"
+" << \"#pragma once\" << std::endl << std::endl\r\n"
+" << \"namespace \" << binaryNamespace << std::endl\r\n"
+" << \"{\" << std::endl;\r\n"
+"\r\n"
+" cpp << \"/* (Auto-generated binary data file). */\" << std::endl << std::endl\r\n"
+" << \"#include \" << std::quoted (className + \".h\") << std::endl << std::endl;\r\n"
+"\r\n"
+" if (! addFile (sourceFile, binaryNamespace, header, cpp))\r\n"
+" return 1;\r\n"
+"\r\n"
+" header << \"}\" << std::endl << std::endl;\r\n"
+"\r\n"
+" return 0;\r\n"
+"}\r\n";
+
+const char* juce_SimpleBinaryBuilder_cpp = (const char*) temp_binary_data_67;
+
const char* getNamedResource (const char* resourceNameUTF8, int& numBytes);
const char* getNamedResource (const char* resourceNameUTF8, int& numBytes)
@@ -8591,6 +8856,8 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes)
case 0x763d39dc: numBytes = 1050; return colourscheme_dark_xml;
case 0xe8b08520: numBytes = 1050; return colourscheme_light_xml;
case 0x7c03d519: numBytes = 3005; return juce_runtime_arch_detection_cpp;
+ case 0x295b6f43: numBytes = 1200; return juce_LinuxSubprocessHelper_cpp;
+ case 0xef269d3a: numBytes = 7162; return juce_SimpleBinaryBuilder_cpp;
default: break;
}
@@ -8665,7 +8932,9 @@ const char* namedResourceList[] =
"jucer_PIPTemplate_h",
"colourscheme_dark_xml",
"colourscheme_light_xml",
- "juce_runtime_arch_detection_cpp"
+ "juce_runtime_arch_detection_cpp",
+ "juce_LinuxSubprocessHelper_cpp",
+ "juce_SimpleBinaryBuilder_cpp"
};
const char* originalFilenames[] =
@@ -8735,7 +9004,9 @@ const char* originalFilenames[] =
"jucer_PIPTemplate.h",
"colourscheme_dark.xml",
"colourscheme_light.xml",
- "juce_runtime_arch_detection.cpp"
+ "juce_runtime_arch_detection.cpp",
+ "juce_LinuxSubprocessHelper.cpp",
+ "juce_SimpleBinaryBuilder.cpp"
};
const char* getNamedResourceOriginalFilename (const char* resourceNameUTF8);
diff --git a/extras/Projucer/JuceLibraryCode/BinaryData.h b/extras/Projucer/JuceLibraryCode/BinaryData.h
index a76767f238..b7fd0edf58 100644
--- a/extras/Projucer/JuceLibraryCode/BinaryData.h
+++ b/extras/Projucer/JuceLibraryCode/BinaryData.h
@@ -206,8 +206,14 @@ namespace BinaryData
extern const char* juce_runtime_arch_detection_cpp;
const int juce_runtime_arch_detection_cppSize = 3005;
+ extern const char* juce_LinuxSubprocessHelper_cpp;
+ const int juce_LinuxSubprocessHelper_cppSize = 1200;
+
+ extern const char* juce_SimpleBinaryBuilder_cpp;
+ const int juce_SimpleBinaryBuilder_cppSize = 7162;
+
// Number of elements in the namedResourceList and originalFileNames arrays.
- const int namedResourceListSize = 66;
+ const int namedResourceListSize = 68;
// Points to the start of a list of resource names.
extern const char* namedResourceList[];
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
index beb5b01d27..7e6a3c2d23 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
@@ -3005,6 +3005,7 @@
+
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters
index e0a95f8886..517e5b7fcf 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters
+++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters
@@ -4611,6 +4611,9 @@
JUCE Modules\juce_core\containers
+
+ JUCE Modules\juce_core\containers
+
JUCE Modules\juce_core\containers
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
index 3f268eba69..cdbda5e7ac 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
@@ -3005,6 +3005,7 @@
+
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
index 2d93b6b183..a203a010b7 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
+++ b/extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
@@ -4611,6 +4611,9 @@
JUCE Modules\juce_core\containers
+
+ JUCE Modules\juce_core\containers
+
JUCE Modules\juce_core\containers
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
index 5cde0f75a1..11d62f8c3e 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
+++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
@@ -3005,6 +3005,7 @@
+
diff --git a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
index d785e613fb..d01be6ad30 100644
--- a/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
+++ b/extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
@@ -4611,6 +4611,9 @@
JUCE Modules\juce_core\containers
+
+ JUCE Modules\juce_core\containers
+
JUCE Modules\juce_core\containers
diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
index b08545b456..885b80d122 100644
--- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
+++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
@@ -2823,6 +2823,7 @@
+
diff --git a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters
index 33d4edb9ef..2f90234f67 100644
--- a/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters
+++ b/extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters
@@ -4350,6 +4350,9 @@
JUCE Modules\juce_core\containers
+
+ JUCE Modules\juce_core\containers
+
JUCE Modules\juce_core\containers