Hi, you may have seen me pushing changes specifying specifying PRIVATE_CODE for CMake functions that generate code from wayland protocols xml sources. I failed to explain why that's recommended and why you should do so as well. This serves both as an explanation and a heads up: If you look at wayland-scanner usage notes it states:
> wayland-scanner --help usage: wayland-scanner [OPTION] [client-header| server-header|private-code|public-code] [input_file output_file] > Converts XML protocol descriptions supplied on stdin or input file to client headers, server headers, or protocol marshalling code. > Use "public-code" only if the marshalling code will be public - aka DSO will export it while other components will be using it. > Using "private-code" is strongly recommended In practice if public-code is used the wl_interface defintions are exported from the shared. This is problematic if another shared library or plugin also exports these symbols but of a different protocol version: The one that the linker ends up choosing is out of our control. If the definition of an older protocol version wins the program will be terminated sooner or later if it encounters something from the newer version which it didn't expect. This is not only a theoretical concern, we hit this problem on some distros around 6.0 release, Kwin was affected on Debian last month, and QtWaylandCompositor also hit this last week. Which prompted us to add the possibility to specify private-code everywhere and do so: - qt_generate_wayland_protocol_client_sources and qt_generate_wayland_protocol_server_sources accept a PRIVATE_CODE option starting with Qt 6.8 (and PUBLIC_CODE for symmetry, which is the default) - ecm_add_wayland_client_protocol accepts PRIVATE_CODE since 6.5 - ecm_add_wayland_server_protocol, ecm_add_qtwayland_client_protocol and ecm_add_qtwayland_server_protocol will accept PRIVATE_CODE starting with 6.6 Why not make PRIVATE_CODE the default? To preserve backwards compatibility. In the past wayland-scanner only had a 'code' option which was deprecated but also exported the interface definitions. So public-code was chosen in ECM and Qt to preserve backwards compatibility. David