I’ve had reports of plugins not being able to read the version number of Waveform and it turns out they were trying to read the PRODUCTVERSION not the FILEVERSION.
Would it make sense to write both as the same value in the Windows Rc file generation?
Some background:
modules/juce/extras/Build/juce_build_tools/utils/juce_ResourceRc.cpp:63-64
The VS_VERSION_INFO VERSIONINFO block writes:
FILEVERSION 14,0,8,0
But it never writes a PRODUCTVERSION line. In a proper Windows RC file, it should be:
VS_VERSION_INFO VERSIONINFO
FILEVERSION 14,0,8,0
PRODUCTVERSION 14,0,8,0 ← this line is missing
BEGIN
How the version flows:
- waveform/waveform14/VERSION contains 14.0.8
- waveform/waveform14/CMakeLists.txt reads it into PROJECT_VERSION
- waveform/common/cmake/build.cmake:145 calls juce_add_gui_app() (without an explicit VERSION arg)
- JUCE falls back to PROJECT_VERSION → sets JUCE_VERSION = 14.0.8
- This gets written to an Info.txt file, parsed by juceaide, and passed to ResourceRcOptions::write()
- write() outputs FILEVERSION 14,0,8,0 (line 64) but omits PRODUCTVERSION
The Windows VERSIONINFO structure has two binary version fields:
- FILEVERSION → populates dwFileVersionMS/LS → correctly 14.0.0.0
- PRODUCTVERSION → populates dwProductVersionMS/LS → defaults to 0.0.0.0 when omitted
Note that the string values “FileVersion” and “ProductVersion” are both correctly written (lines 81-83),
but those are just display strings in the Details tab — VS_FIXEDFILEINFO.dwProductVersionMS/LS comes exclusively from the binary PRODUCTVERSION statement.
The fix would be adding one line after line 64 in juce_ResourceRc.cpp:
<< "PRODUCTVERSION " << getCommaSeparatedVersionNumber (version) << newLine
