Hello,
first of all thanks for all your effort going into the development of JUCE. I use that framework for about six years now for open-source multi-platform audio plugins and have been quite satisfied with the results.
As I am a more traditional developer and IT architect, I have built my own CMake based build system without actively incorporating Projucer. After significant release changes in JUCE I just use Projucer on the example files to find out what include paths, configuration variables and source code include files are needed now and then update my CMake files accordingly.
This has worked out well enough in the last years, but now I am struggling. In the transition from 8.0.10 to 8.0.11 there have been several “breaking” changes for me, which are still there in 8.0.14.
-
I have a static library with my own specialized classes for
AudioProcessor,AudioProcessorEditorandAudioProcessorEditorWidget(as a Component within an editor) factoring out the commonalities for all my plugins into some parent classes. The technical wrapper (VST, AU) is then later given for each plugin by adding the correspondingjuce_audio_client_XXX.cpporjuce_audio_client_XXX.mmto its list of files for the build. This works fine for VST3 on Windows, Linux and MacOS and AU on MacOS.Beginning with 8.0.11 this does not seem possible any longer. The
juce::AudioProcessorclass compiled for the static library has no idea for what wrapper kind it will be responsible later (since e.g. the configuration variableJucePlugin_Build_VST3is not yet set). It then seems to reference code for AAX, LV2, VST3 etc. But you cannot just include those additional files into the static library, because then you have to provide theJucePlugin_PluginCode. Unfortunately that code is only available for each plugin at a later build stage and it is counterintuitive to produce a static library intended to have common code for all plugins and then have a required individual setting to compile the code fragments. -
Required audio processor includes like
pluginterfaces/base/fplatform.hseem to have migrated in 8.0.11 fromjuce_audio_processorstojuce_audio_processors_headless.I can see the reason for the change from an architecture perspective, but it breaks several include paths. And even if those are corrected accordingly, the first problem above will be triggered: so both changes are obviously interconnected and that makes an incremental transition of client code impossible.
We are talking about a version change on the build number level, which is - in common understanding - much less than a minor or even a major version change and should be either cosmetic or bug-fixing. Granted, I have great sympathy for an architectural development of a system, but those kinds of changes are severe in my opinion and are not just tiny revisions, so this is at least a minor version change. And the first one does not even occur in the BREAKING_CHANGES.md or in the CHANGE_LIST.txt file.
On can argue that the use of Projucer is mandatory for JUCE and that I should just annotate my files accordingly and use it. But I do not want to do it, because I think that even a framework should be accessible in a more technical way from scripts outside of that ecosystem similarly as you would do for a library.
Can anybody help here?
Best regards,
DrTT
