Hello, I noticed tracktion_engine pulls the development version of the JUCE framework.
This is currently breaking compilation of tracktion_engine because of changes in JUCE.
tracktion_engine\modules\tracktion_engine\audio_files/formats/tracktion_FloatAudioFileFormat.h(40): error C3668: ‘tracktion::engine::FloatAudioFormat::createWriterFor’: method with override specifier ‘override’ did not override any base class methods tracktion_engine\modules\tracktion_engine/plugins/tracktion_PluginScanHelpers.h(181): error C2280: ‘void juce::AudioPluginFormatManager::addDefaultFormats(void)’: attempting to reference a deleted function tracktion_engine\modules\juce\modules\juce_audio_processors_headless/format/juce_AudioPluginFormatManager.h(57): note: see declaration of ‘juce::AudioPluginFormatManager::addDefaultFormats’ tracktion_engine\modules\juce\modules\juce_audio_processors_headless/format/juce_AudioPluginFormatManager.h(57): note: ‘void juce::AudioPluginFormatManager::addDefaultFormats(void)’: function was explicitly deleted
//==============================================================================
/** This function has been removed. To add default formats to the manager,
use one of the new functions addDefaultFormatsToManager() or
addHeadlessDefaultFormatsToManager();
*/
void addDefaultFormats() = delete;
There is probably a reason why JUCE development is pulled, but I would strongly recommend pinning the pulled JUCE framework to a specific tag or stable commit.
The fact that this is done and that any breaking changes in JUCE (even the ones that compile) would directly affect tracktion_engine makes me feel somewhat uneasy.
What were I to do if I released a commercial product that crashes because of this? Just pull the latest JUCE development and hope for the best?
Edit: I just looked at the tracktion_engine git repo and I do see that the JUCE directory should be pointing to a specific commit. This did not copy to my fork of tracktion_engine. Reading .gitmodules file seems to have put me on the wrong track!
The issue lies with my copy/fork of the repo, where the modules/juce directory is missing. Apologies for the confusion, feel free to remove this thread.
Just to add to this, .gitmodules just stores meta-data. If you want the specific commit a submodule points to, you can do a git ls-tree HEAD I think.
However we do have a specific CI job that pulls the tip of juce/develop via CPM to give us an early warning if juce changes something an we’re incompatible.
In practice, we had to stay very near the tip for a few reasons:
Waveform runs on TE. Between those projects, we use pretty much all of juce so if there’s a bug fix, compatibility or performance improvement in juce, we need to adopt it pretty quickly so our users can see the benefit of it
Because of the above, we work pretty closely with the juce team (mostly via the public forum) to report juce issues and present features so if it gets fixed in juce, we need to upstream to benefit from that. The alternative is maintaining our own fork which is a maintenance nightmare. (We do have a fork but the changes are extremely minimal at this point)
Finally, we have lots of users of TE. They mostly build juce apps so have their own dependency. In some cases they can stick to the specific TE juce commit but that’s hard to enforce if they need a change/fix in juce. Living at head is the only thing that scales really.
This only really applies to the TE develop branch (which is what we build Waveform on). TE release gets updated far less frequently so has to be tied to a specific juce commit really.