VST3 Validator not running properly during compilation on Fedora 38

On my system (Fedora 38), the Makefile generated by CMake fails to run the validator properly. Specifically, I get the validator --help text when linking, as shown below.

[ 88%] Linking CXX shared module VST3/ProjectName.vst3/Contents/x86_64-linux/ProjectName.so

VST 3.7.8 Plug-in Validator:
-help           | Print help
-version        | Print version
-l              | Use local instance per test
-suite          | [name] Only run a special test suite
-e              | Run extensive tests [may take a long time]
-q              | Only print errors
-cid            | Only test processor with specified class ID
-test-component | [path] Path to an additional component which includes custom tests
-list           | Show all installed Plug-Ins
-selftest       | Run a selftest
-snapshots      | List snapshots from all installed Plug-Ins

Usage: vstvalidator [options] vst3module

make[2]: *** [CMakeFiles/ProjectName.dir/build.make:158: VST3/ProjectName.vst3/Contents/x86_64-linux/ProjectName.so] Error 1

The makefile line that is failing is as follows:
cd /home/NAME/vstdev/VST_SDK/projects/proj_template/build/bin && /home/NAME/vstdev/VST_SDK/projects/proj_template/build/bin/validator

As far as I can tell, the validator is being compiled properly, and does show up in the listed folder. Deleting this line from the makefile allows it to fully compile, but I’m assuming this isn’t what I should be doing, as it bypasses the validator as a result.

Additionally, my current file structure is as such, where I am running cmake .. in build/, before running make in that folder.

|    vst3sdk/
|    projects/
|    |    proj_template/
|    |    |    CMakeLists.txt
|    |    |    build/

Is there anything I might have missed that stops the validator from running properly?


It looks like smtg_target_run_vst_validator target doesn’t get a valid PLUGIN_PACKAGE_PATH. (/vst3sdk/cmake/modules/SMTG_AddVST3Library.cmake:22)

Fixed it by doing the following:
set(PLUGIN_PACKAGE_PATH "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}../VST3/${target}.vst3") within the if(TARGET validator) statement, above the if(SMTG_WIN) statement.
Then in the add_custom_command block in the else() statement, I had to comment out all of the sections for config and working directory, replacing it with ${PLUGIN_PACKAGE_PATH}.

I just tried to reproduce that behaviour but I can’t. I don’t have Fedora but used Ubuntu (22.04.2 LTS). Can you please use smtg_target_dump_plugin_package_variables(target) in order to print all SMTG_* variables of your target.

The SMTG_PLUGIN_PACKAGE_PATH is constructed here: vst3_cmake/modules/SMTG_AddSMTGLibrary.cmake at 15d278403b47fdabbcb53311a85eef0ef3cb1afa · steinbergmedia/vst3_cmake · GitHub

Maybe you can print SMTG_PLUGIN_PACKAGE_PATH right after and verify that it is valid.

Here’s the target dump:

 Properties for TARGET TutorialProject:
   TutorialProject.SMTG_PLUGIN_PACKAGE_NAME = "TutorialProject.vst3"
   TutorialProject.SMTG_PLUGIN_BINARY_DIR = "/home/NAME/vstdev/VST_SDK/projects/proj_tutorial/build/VST3"
   TutorialProject.SMTG_PLUGIN_EXTENSION = "vst3"
   TutorialProject.LIBRARY_OUTPUT_DIRECTORY = "/home/NAME/vstdev/VST_SDK/projects/proj_tutorial/build/VST3/Debug/TutorialProject.vst3/Contents/x86_64-linux"
   TutorialProject.SMTG_PLUGIN_PACKAGE_PATH = "/home/NAME/vstdev/VST_SDK/projects/proj_tutorial/build/VST3/Debug/TutorialProject.vst3"
   TutorialProject.SMTG_PLUGIN_PACKAGE_CONTENTS = "Contents"
   TutorialProject.SMTG_PLUGIN_PACKAGE_RESOURCES = "Contents/Resources"
   TutorialProject.SMTG_PLUGIN_PACKAGE_SNAPSHOTS = "Snapshots"

When I print out SMTG_PLUGIN_PACKAGE_PATH below the line it is generated in, it is empty. (Note: I am using cmake .. -DCMAKE_BUILD_TYPE=Debug to generate my Makefile, but the same behavior occurs on the use of cmake .. -DCMAKE_BUILD_TYPE=Release.)

Edit: It does look like the variable is set properly when doing the SMTG dump, but not in a way that CMake seems to be able to read.

This is suspicious. Did you maybe forget to query the variable from the target first? Like this:


Yes, that’s fine. Same here!

Which cmake version do you have installed?

Oops, somehow this notification got stuck in my junk mail folder.

I’m querying properly, from what I can tell. I’m using cmake v3.26.4.

I am running out of ideas. :man_shrugging:

Is there any chance that you can provide me with a simple demo VST3 project which shows the described behaviour? Maybe push it to GitHub? I could afterwards check it here on my systems.

Here is a repo link that doesn’t compile without the aforementioned CMake file alterations on my system.

Builds and runs successfully on Ubuntu:

[ 92%] Linking CXX shared module VST3/Debug/ProjectName.vst3/Contents/x86_64-linux/ProjectName.so
* Loading module...


* Scanning classes...

  Factory Info:
	vendor = CORPNAME
	url = WEBSITE
	email = mailto:EMAIL

  Class Info 0:
	category = Audio Module Class
	subCategories = Fx
	version = 1.0.0
	sdkVersion = VST 3.7.8
	cid = 00000000000000000000000000000000

  Class Info 1:
	name = PLUGIN_NAMEController
	category = Component Controller Class
	subCategories = 
	version = 1.0.0
	sdkVersion = VST 3.7.8
	cid = 00000000000000000000000000000001

* Checking snapshots...

Info: No snapshots in Bundle.

* Creating tests...

* Running tests...


TestSuite : General Tests

[Scan Editor Classes]
Info:  ===Scan Editor Classes ====================================
Info:  This component has an edit controller class
Info:     Controller CID: {00000000-0000-0000-0000-000000000001}
Result: 47 tests passed, 0 tests failed
'/home/rene-dev/.vst3/ProjectName.vst3' -> '/home/rene-dev/Developer/github/bug/build/VST3/Debug/ProjectName.vst3'
[ 93%] Built target ProjectName

I don’t get it :thinking:

Yeah, I’m not sure why this happened on my machine either. It’s possible I just misconfigured something when setting up the SDK.