brummer10 / GxPlugins.lv2

A set of extra lv2 plugins from the guitarix project.
GNU General Public License v3.0
168 stars 17 forks source link

0.9: lv2lint fails on plugins #36

Open dvzrv opened 3 years ago

dvzrv commented 3 years ago

Hi! When packaging 0.9 for Arch Linux I also (finally) ran lv2lint against all plugins.

  make
  local _name
  declare -A _urls=(
    ["GxVoodoFuzz.lv2"]="gx_voodoo_#_voodoo_"
    ["GxVmk2.lv2"]="gx_vmk2d_#_vmk2d_"
    ["GxVintageFuzzMaster.lv2"]="gx_vfm_#_vfm_"
    ["GxValveCaster.lv2"]="gx_valvecaster_#_valvecaster_"
    ["GxVBassPreAmp.lv2"]="gx_voxbass_#_voxbass_"
    ["GxUltraCab.lv2"]="gx_ultracab_#_ultracab_"
    ["GxUVox720k.lv2"]="gx_uvox_#_uvox_"
    ["GxTubeDistortion.lv2"]="gx_TubeDistortion_#_TubeDistortion_"
    ["GxToneMachine.lv2"]="gx_tonemachine_#_tonemachine_"
    ["GxTimRay.lv2"]="gx_timray_#_timray_"
    ["GxSuppaToneBender.lv2"]="gx_vstb_#_vstb_"
    ["GxSupersonic.lv2"]="gx_supersonic_#_supersonic_"
    ["GxSuperFuzz.lv2"]="gx_sfp_#_sfp_"
    ["GxSunFace.lv2"]="gx_SunFace_#_SunFace_"
    ["GxSlowGear.lv2"]="gx_slowgear_#_slowgear_"
    ["GxSloopyBlue.lv2"]="gx_sloopyblue_#_sloopyblue_"
    ["GxShakaTube.lv2"]="gx_shakatube_#_shakatube_"
    ["GxSaturator.lv2"]="gx_saturate_#_saturate_"
    ["GxSVT.lv2"]="gx_ampegsvt_#_ampegsvt_"
    ["GxSD2Lead.lv2"]="gx_sd2lead_#_sd2lead_"
    ["GxSD1.lv2"]="gx_sd1sim_#_sd1sim_"
    ["GxQuack.lv2"]="gx_quack_#_quack_"
    ["GxPlexi.lv2"]="gx_plexi_#_plexi_"
    ["GxMicroAmp.lv2"]="gx_MicroAmp_#_MicroAmp_"
    ["GxLuna.lv2"]="gx_luna_#_luna_"
    ["GxLiquidDrive.lv2"]="gx_liquiddrive_#_liquiddrive_"
    ["GxKnightFuzz.lv2"]="gx_KnightFuzz_#_KnightFuzz_"
    ["GxHyperion.lv2"]="gx_hyperion_#_hyperion_"
    ["GxHotBox.lv2"]="gx_hotbox_#_hotbox_"
    ["GxHeathkit.lv2"]="gx_Heathkit_#_Heathkit_"
    ["GxGuvnor.lv2"]="gx_guvnor_#_guvnor_"
    ["GxFz1s.lv2"]="gx_maestro_fz1s_#_maestro_fz1s_"
    ["GxFz1b.lv2"]="gx_maestro_fz1b_#_maestro_fz1b_"
    ["GxEternity.lv2"]="gx_eternity_#_eternity_"
    ["GxEpic.lv2"]="gx_epic_#_epic_"
    ["GxDOP250.lv2"]="gx_DOP250_#_DOP250_"
    ["GxCreamMachine.lv2"]="gx_CreamMachine_#_CreamMachine_"
    ["GxClubDrive.lv2"]="gx_clubdrive_#_clubdrive_"
    ["GxBottleRocket.lv2"]="gx_bottlerocket_#_bottlerocket_"
    ["GxBoobTube.lv2"]="gx_boobtube_#_boobtube_"
    ["GxBlueAmp.lv2"]="gx_blueamp_#_blueamp_"
    ["GxBaJaTubeDriver.lv2"]="gx_bajatubedriver_#_bajatubedriver_"
    ["GxAxisFace.lv2"]="gx_AxisFace_#_AxisFace_"
  )
  declare -A _names=(
    ["GxVoodoFuzz.lv2"]="gx_voodoo.lv2"
    ["GxVmk2.lv2"]="gx_vmk2d.lv2"
    ["GxVintageFuzzMaster.lv2"]="gx_vfm.lv2"
    ["GxValveCaster.lv2"]="gx_valvecaster.lv2"
    ["GxVBassPreAmp.lv2"]="gx_voxbass.lv2"
    ["GxUltraCab.lv2"]="gx_ultracab.lv2"
    ["GxUVox720k.lv2"]="gx_uvox.lv2"
    ["GxTubeDistortion.lv2"]="gx_TubeDistortion.lv2"
    ["GxToneMachine.lv2"]="gx_tonemachine.lv2"
    ["GxTimRay.lv2"]="gx_timray.lv2"
    ["GxSuppaToneBender.lv2"]="gx_vstb.lv2"
    ["GxSupersonic.lv2"]="gx_supersonic.lv2"
    ["GxSuperFuzz.lv2"]="gx_sfp.lv2"
    ["GxSunFace.lv2"]="gx_SunFace.lv2"
    ["GxSlowGear.lv2"]="gx_slowgear.lv2"
    ["GxSloopyBlue.lv2"]="gx_sloopyblue.lv2"
    ["GxShakaTube.lv2"]="gx_shakatube.lv2"
    ["GxSaturator.lv2"]="gx_saturate.lv2"
    ["GxSVT.lv2"]="gx_ampegsvt.lv2"
    ["GxSD2Lead.lv2"]="gx_sd2lead.lv2"
    ["GxSD1.lv2"]="gx_sd1sim.lv2"
    ["GxQuack.lv2"]="gx_quack.lv2"
    ["GxPlexi.lv2"]="gx_plexi.lv2"
    ["GxMicroAmp.lv2"]="gx_MicroAmp.lv2"
    ["GxLuna.lv2"]="gx_luna.lv2"
    ["GxLiquidDrive.lv2"]="gx_liquiddrive.lv2"
    ["GxKnightFuzz.lv2"]="gx_KnightFuzz.lv2"
    ["GxHyperion.lv2"]="gx_hyperion.lv2"
    ["GxHotBox.lv2"]="gx_hotbox.lv2"
    ["GxHeathkit.lv2"]="gx_Heathkit.lv2"
    ["GxGuvnor.lv2"]="gx_guvnor.lv2"
    ["GxFz1s.lv2"]="gx_maestro_fz1s.lv2"
    ["GxFz1b.lv2"]="gx_maestro_fz1b.lv2"
    ["GxEternity.lv2"]="gx_eternity.lv2"
    ["GxEpic.lv2"]="gx_epic.lv2"
    ["GxDOP250.lv2"]="gx_DOP250.lv2"
    ["GxCreamMachine.lv2"]="gx_CreamMachine.lv2"
    ["GxClubDrive.lv2"]="gx_clubdrive.lv2"
    ["GxBottleRocket.lv2"]="gx_bottlerocket.lv2"
    ["GxBoobTube.lv2"]="gx_boobtube.lv2"
    ["GxBlueAmp.lv2"]="gx_blueamp.lv2"
    ["GxBaJaTubeDriver.lv2"]="gx_bajatubedriver.lv2"
    ["GxAxisFace.lv2"]="gx_AxisFace.lv2"
  )
  for _name in "${!_names[@]}"; do
    lv2lint -Mpack -I "${_name}/${_names[${_name}]}/" "http://guitarix.sourceforge.net/plugins/${_urls[${_name}]}" || echo "Known to fail"
  done

Unfortunately they all fail on various things, as you can see in this short excerpt:

lv2lint 0.12.0
Copyright (c) 2016-2021 Hanspeter Portner (dev@open-music-kontrollers.ch)
Released under Artistic License 2.0 by Open Music Kontrollers
<http://guitarix.sourceforge.net/plugins/gx_bottlerocket_#_bottlerocket_>
    [FAIL]  Plugin Symbols
              binary exports superfluous globally visible symbols:
                * _ZN12bottlerocket16Gx_bottlerocket_D2Ev
                * _ZN12bottlerocket3Dsp7connectEjPv
                * _ZN12bottlerocket3DspC2Ev
                * _ZN12bottlerocket3Dsp14compute_staticEiPfS1_P9PluginLV2
                * _ZN12bottlerocket16Gx_bottlerocket_7cleanupEPv
                * _ZN12bottlerocket3DspD1Ev
                * _ZN12bottlerocket3Dsp11init_staticEjP9PluginLV2
                * _ZN12bottlerocket7tubetabE
                * _ZN12bottlerocket16Gx_bottlerocket_C1Ev
                * _ZN12bottlerocket16Gx_bottlerocket_12connect_portEPvjS1_
                * ... there is more, but the rest is being truncated
              seeAlso: <http://lv2plug.in/ns/lv2core#binary>
    [WARN]  Plugin Author Homepage
              foaf:homepage not found
              seeAlso: <http://lv2plug.in/ns/lv2core#project>
  <http://guitarix.sourceforge.net/plugins/gx_bottlerocket_gui#_bottlerocket_>
    [FAIL]  UI Symbols
              binary exports superfluous globally visible symbols:
                * _binary_pedal_png_start
                * get_active_controller
                * _binary_pswitch_off_png_size
                * _binary_pedal_png_size
                * _binary_frame_png_size
                * _binary_pswitch_on_png_end
                * cairo_image_surface_create_from_stream
                * _binary_frame_png_start
                * _binary_pedal_png_end
                * _binary_pswitch_on_png_start
                * ... there is more, but the rest is being truncated
              seeAlso: <http://lv2plug.in/ns/lv2core#binary>
    [FAIL]  UI Idle Interface
              lv2:feature ui:idleInterface missing
              seeAlso: <http://lv2plug.in/ns/extensions/ui#idleInterface>
    [FAIL]  UI Resize Interface
              lv2:extensionData ui:resize missing
              seeAlso: <http://lv2plug.in/ns/extensions/ui#resize>

The full check log can be found here: gxplugins.lv2-0.9-1-x86_64-check.log

I believe they are all fixable issues though! :)

brummer10 commented 3 years ago

While that is true, non of this issues ever lead to a issue in real world. So, it's about pedantic. Hence, the priority for me to fix that is very low, sorry.

dvzrv commented 1 year ago

This is still the case for 1.0, e.g.:

lv2lint 0.16.2
Copyright (c) 2016-2021 Hanspeter Portner (dev@open-music-kontrollers.ch)
Released under Artistic License 2.0 by Open Music Kontrollers
<http://guitarix.sourceforge.net/plugins/gx_tonemachine_#_tonemachine_>
    [FAIL]  Plugin Symbols
              binary exports superfluous globally visible symbols:
                * _ZN15foxxtonemachine3DspD2Ev
                * _ZN18foxxtonemachine_on3Dsp14connect_staticEjPvP9PluginLV2
                * _ZN15foxxtonemachine3Dsp7connectEjPv
                * _ZN19foxxtonemachine_off3Dsp14connect_staticEjPvP9PluginLV2
                * _ZN18foxxtonemachine_on3Dsp20clear_state_f_staticEP9PluginLV2
                * _ZN15foxxtonemachine19Gx_foxxtonemachine_12connect_portEPvjS1_
                * _ZN15foxxtonemachine19Gx_foxxtonemachine_C1Ev
                * _ZN19foxxtonemachine_off3Dsp14compute_staticEiPfS1_P9PluginLV2
                * _ZN15foxxtonemachine3Dsp12del_instanceEP9PluginLV2
                * _ZN15foxxtonemachine19Gx_foxxtonemachine_3runEPvj
                * ... there is more, but the rest is being truncated
              seeAlso: <http://lv2plug.in/ns/lv2core#binary>
    [WARN]  Plugin Author Homepage
              foaf:homepage not found
              seeAlso: <http://lv2plug.in/ns/lv2core#project>
  <http://guitarix.sourceforge.net/plugins/gx_tonemachine_gui#_tonemachine_>
    [FAIL]  UI Symbols
              binary exports superfluous globally visible symbols:
                * scroll_event
                * _binary_pedal_png_start
                * gx_gui_destroy_main_window
                * gx_gui_send_controller_event
                * _binary_pedal_png_size
                * resize_event
                * motion_event
                * cairo_image_surface_create_from_stream
                * gx_gui_resize_surface
                * gx_gui_create_window_and_surface
                * ... there is more, but the rest is being truncated
              seeAlso: <http://lv2plug.in/ns/lv2core#binary>

gxplugins.lv2-1.0-1-x86_64-check.log

So, it's about pedantic.

I don't really like your insinuation here. Someone spent quite some time ensuring that LV2 plugins do not crash any hosts and implemented checks for that. I believe that can hardly count as being "pedantic". Globally visible symbols in UI may clash with the host (I guess), but I'm also not an expert. In theory all that is required is to build those libs with -fvisibility=hidden (AFAIK).

brummer10 commented 1 year ago

Hi David Well, I've just forgotten about that issue. You could add the needed flags on command-line like so: CXXFLAGS=-fvisibility=hidden make

regards hermann