diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 3027fde58b..3d59811a63 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -42,7 +42,9 @@ function(_juce_add_pips) endif() if(NOT (TARGET juce_ara_sdk - AND (CMAKE_SYSTEM_NAME STREQUAL "Windows" OR CMAKE_SYSTEM_NAME STREQUAL "Darwin"))) + AND (CMAKE_SYSTEM_NAME STREQUAL "Windows" + OR CMAKE_SYSTEM_NAME STREQUAL "Darwin" + OR CMAKE_SYSTEM_NAME STREQUAL "Linux"))) list(REMOVE_ITEM headers "${CMAKE_CURRENT_SOURCE_DIR}/ARAPluginDemo.h") endif() diff --git a/extras/AudioPluginHost/Source/Plugins/ARAPlugin.cpp b/extras/AudioPluginHost/Source/Plugins/ARAPlugin.cpp index ef6cca4581..4141210d84 100644 --- a/extras/AudioPluginHost/Source/Plugins/ARAPlugin.cpp +++ b/extras/AudioPluginHost/Source/Plugins/ARAPlugin.cpp @@ -25,7 +25,7 @@ #include "ARAPlugin.h" -#if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS) +#if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) const Identifier ARAPluginInstanceWrapper::ARATestHost::Context::xmlRootTag { "ARATestHostContext" }; const Identifier ARAPluginInstanceWrapper::ARATestHost::Context::xmlAudioFileAttrib { "AudioFile" }; diff --git a/extras/AudioPluginHost/Source/Plugins/ARAPlugin.h b/extras/AudioPluginHost/Source/Plugins/ARAPlugin.h index be6353b9b5..33cb6e76b9 100644 --- a/extras/AudioPluginHost/Source/Plugins/ARAPlugin.h +++ b/extras/AudioPluginHost/Source/Plugins/ARAPlugin.h @@ -27,7 +27,7 @@ #include -#if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS) +#if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) #include @@ -179,7 +179,7 @@ class PlaybackRegion properties.transformationFlags = ARA::kARAPlaybackTransformationNoChanges; properties.startInModificationTime = 0.0; const auto& formatReader = audioSource.getFormatReader(); - properties.durationInModificationTime = formatReader.lengthInSamples / formatReader.sampleRate; + properties.durationInModificationTime = (double) formatReader.lengthInSamples / formatReader.sampleRate; properties.startInPlaybackTime = 0.0; properties.durationInPlaybackTime = properties.durationInModificationTime; properties.musicalContextRef = sequence.getMusicalContext().getPluginRef(); diff --git a/extras/AudioPluginHost/Source/Plugins/PluginGraph.cpp b/extras/AudioPluginHost/Source/Plugins/PluginGraph.cpp index 9645492d0e..0701dd82c1 100644 --- a/extras/AudioPluginHost/Source/Plugins/PluginGraph.cpp +++ b/extras/AudioPluginHost/Source/Plugins/PluginGraph.cpp @@ -106,7 +106,7 @@ void PluginGraph::addPluginCallback (std::unique_ptr instan } else { - #if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS) + #if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) if (useARA == PluginDescriptionAndPreference::UseARA::yes && instance->getPluginDescription().hasARAExtension) { @@ -410,7 +410,7 @@ void PluginGraph::createNodeFromXml (const XmlElement& xml) graph.getBlockSize(), errorMessage); - #if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS) + #if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) if (instance && description.useARA == PluginDescriptionAndPreference::UseARA::yes && description.pluginDescription.hasARAExtension) diff --git a/extras/AudioPluginHost/Source/UI/GraphEditorPanel.cpp b/extras/AudioPluginHost/Source/UI/GraphEditorPanel.cpp index e68e0c0910..195f47ae6c 100644 --- a/extras/AudioPluginHost/Source/UI/GraphEditorPanel.cpp +++ b/extras/AudioPluginHost/Source/UI/GraphEditorPanel.cpp @@ -427,7 +427,7 @@ struct GraphEditorPanel::PluginComponent : public Component, menu->addItem ("Show all parameters", [this] { showWindow (PluginWindow::Type::generic); }); menu->addItem ("Show debug log", [this] { showWindow (PluginWindow::Type::debug); }); - #if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS) + #if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) if (auto* instance = dynamic_cast (getProcessor())) if (instance->getPluginDescription().hasARAExtension && isNodeUsingARA()) menu->addItem ("Show ARA host controls", [this] { showWindow (PluginWindow::Type::araHost); }); diff --git a/extras/AudioPluginHost/Source/UI/MainHostWindow.cpp b/extras/AudioPluginHost/Source/UI/MainHostWindow.cpp index 2f5338f1c5..b911a6e8bd 100644 --- a/extras/AudioPluginHost/Source/UI/MainHostWindow.cpp +++ b/extras/AudioPluginHost/Source/UI/MainHostWindow.cpp @@ -662,7 +662,7 @@ static void addToMenu (const KnownPluginList::PluginTree& tree, addPlugin (PluginDescriptionAndPreference { plugin, PluginDescriptionAndPreference::UseARA::no }, name); - #if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS) + #if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) if (plugin.hasARAExtension) { name << " (ARA)"; diff --git a/extras/AudioPluginHost/Source/UI/PluginWindow.h b/extras/AudioPluginHost/Source/UI/PluginWindow.h index b53fb7be00..c84518ac8c 100644 --- a/extras/AudioPluginHost/Source/UI/PluginWindow.h +++ b/extras/AudioPluginHost/Source/UI/PluginWindow.h @@ -245,7 +245,7 @@ private: if (type == PluginWindow::Type::araHost) { - #if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS) + #if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) if (auto* araPluginInstanceWrapper = dynamic_cast (&processor)) if (auto* ui = araPluginInstanceWrapper->createARAHostEditor()) return ui; diff --git a/extras/Build/CMake/JUCEUtils.cmake b/extras/Build/CMake/JUCEUtils.cmake index f0c3d87b58..c82e63fadb 100644 --- a/extras/Build/CMake/JUCEUtils.cmake +++ b/extras/Build/CMake/JUCEUtils.cmake @@ -1910,7 +1910,8 @@ function(juce_add_pip header) juce_add_plugin(${JUCE_PIP_NAME} FORMATS AU VST3 - IS_ARA_EFFECT TRUE) + IS_ARA_EFFECT TRUE + ${extra_target_args}) else() set(source_main "${JUCE_CMAKE_UTILS_DIR}/PIPAudioProcessor.cpp.in") diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h index 2efff4150f..563f18bebc 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h @@ -499,6 +499,9 @@ public: { vstLegacyPathValueWrapper.init ({ settings, Ids::vstLegacyFolder, nullptr }, getAppSettings().getStoredPath (Ids::vstLegacyPath, TargetOS::linux), TargetOS::linux); + + araPathValueWrapper.init ({ settings, Ids::araFolder, nullptr }, + getAppSettings().getStoredPath (Ids::araPath, TargetOS::linux), TargetOS::linux); } //============================================================================== diff --git a/modules/juce_audio_processors/format_types/juce_ARACommon.cpp b/modules/juce_audio_processors/format_types/juce_ARACommon.cpp index 35454d5d86..67a6dfb960 100644 --- a/modules/juce_audio_processors/format_types/juce_ARACommon.cpp +++ b/modules/juce_audio_processors/format_types/juce_ARACommon.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#if (JUCE_PLUGINHOST_ARA && (JUCE_PLUGINHOST_VST3 || JUCE_PLUGINHOST_AU) && (JUCE_MAC || JUCE_WINDOWS)) +#if (JUCE_PLUGINHOST_ARA && (JUCE_PLUGINHOST_VST3 || JUCE_PLUGINHOST_AU) && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX)) #include diff --git a/modules/juce_audio_processors/format_types/juce_ARACommon.h b/modules/juce_audio_processors/format_types/juce_ARACommon.h index 4811733bf8..bbf55c5a70 100644 --- a/modules/juce_audio_processors/format_types/juce_ARACommon.h +++ b/modules/juce_audio_processors/format_types/juce_ARACommon.h @@ -75,6 +75,8 @@ struct ARAFactoryResult String errorMessage; }; +JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wmissing-field-initializers") + template constexpr Obj makeARASizedStruct (Member Obj::* member, Ts&&... ts) { @@ -82,4 +84,6 @@ constexpr Obj makeARASizedStruct (Member Obj::* member, Ts&&... ts) std::forward (ts)... }; } +JUCE_END_IGNORE_WARNINGS_GCC_LIKE + } // namespace juce diff --git a/modules/juce_audio_processors/format_types/juce_ARAHosting.cpp b/modules/juce_audio_processors/format_types/juce_ARAHosting.cpp index af7923a97d..a5c6c7fbc0 100644 --- a/modules/juce_audio_processors/format_types/juce_ARAHosting.cpp +++ b/modules/juce_audio_processors/format_types/juce_ARAHosting.cpp @@ -23,7 +23,7 @@ ============================================================================== */ -#if (JUCE_PLUGINHOST_ARA && (JUCE_PLUGINHOST_VST3 || JUCE_PLUGINHOST_AU) && (JUCE_MAC || JUCE_WINDOWS)) +#if (JUCE_PLUGINHOST_ARA && (JUCE_PLUGINHOST_VST3 || JUCE_PLUGINHOST_AU) && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX)) #include "juce_ARAHosting.h" #include diff --git a/modules/juce_audio_processors/format_types/juce_ARAHosting.h b/modules/juce_audio_processors/format_types/juce_ARAHosting.h index 632cb824bc..08862331a2 100644 --- a/modules/juce_audio_processors/format_types/juce_ARAHosting.h +++ b/modules/juce_audio_processors/format_types/juce_ARAHosting.h @@ -25,7 +25,7 @@ #pragma once -#if (JUCE_PLUGINHOST_ARA && (JUCE_PLUGINHOST_VST3 || JUCE_PLUGINHOST_AU) && (JUCE_MAC || JUCE_WINDOWS)) || DOXYGEN +#if (JUCE_PLUGINHOST_ARA && (JUCE_PLUGINHOST_VST3 || JUCE_PLUGINHOST_AU) && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX)) || DOXYGEN // Include ARA SDK headers JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wgnu-zero-variadic-macro-arguments") diff --git a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp index 0122c211b4..cfa7b3cf26 100644 --- a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp @@ -29,7 +29,7 @@ #include "juce_VST3Common.h" #include "juce_ARACommon.h" -#if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS) +#if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) #include namespace ARA @@ -840,7 +840,7 @@ struct DescriptionFactory // The match is determined by the two classes having the same name. std::unordered_set araMainFactoryClassNames; - #if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS) + #if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) for (Steinberg::int32 i = 0; i < numClasses; ++i) { PClassInfo info; @@ -1390,7 +1390,7 @@ static int compareWithString (Type (&charArray)[N], const String& str) template static void forEachARAFactory (IPluginFactory* pluginFactory, Callback&& cb) { - #if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS) + #if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) const auto numClasses = pluginFactory->countClasses(); for (Steinberg::int32 i = 0; i < numClasses; ++i) { @@ -1413,7 +1413,7 @@ static std::shared_ptr getARAFactory (Steinberg::IPluginF { std::shared_ptr factory; - #if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS) + #if JUCE_PLUGINHOST_ARA && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) forEachARAFactory (pluginFactory, [&pluginFactory, &pluginName, &factory] (const auto& pcClassInfo) { diff --git a/modules/juce_audio_processors/juce_audio_processors_ara.cpp b/modules/juce_audio_processors/juce_audio_processors_ara.cpp index d8e35ca4e1..71e11b54be 100644 --- a/modules/juce_audio_processors/juce_audio_processors_ara.cpp +++ b/modules/juce_audio_processors/juce_audio_processors_ara.cpp @@ -31,7 +31,7 @@ To prevent such problems it's easiest to have it in its own translation unit. */ -#if (JucePlugin_Enable_ARA || (JUCE_PLUGINHOST_ARA && (JUCE_PLUGINHOST_VST3 || JUCE_PLUGINHOST_AU))) && (JUCE_MAC || JUCE_WINDOWS) +#if (JucePlugin_Enable_ARA || (JUCE_PLUGINHOST_ARA && (JUCE_PLUGINHOST_VST3 || JUCE_PLUGINHOST_AU))) && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wgnu-zero-variadic-macro-arguments", "-Wmissing-prototypes") #include