Summary
On Linux, the utv* command-line tools and the main app are staged without their launcher wrappers, so they can't find their shared libraries unless LD_LIBRARY_PATH is set by hand.
Found while wiring up ctest in CI (#64): every staged Linux binary failed to start with error while loading shared libraries: libgc.so / libTwkMovie.so / libQt6Core.so: cannot open shared object file.
Cause
- Linux builds use
CMAKE_SKIP_RPATH ON, so binaries rely on a wrapper script to set LD_LIBRARY_PATH.
rv_stage() (cmake/macros/rv_stage.cmake) only installs a wrapper when <target>.wrapper exists next to the target.
- After the rv → utv rename, the targets are
utvio, utvls, utvpkg, utvpush, utvshell, utvprof and utv_bin, but the wrapper files are still rvio.wrapper, rvls.wrapper, rvpkg.wrapper, rvpush.wrapper, rvshell.wrapper, rvprof.wrapper and rv.wrapper. None of them match, so no wrapper is installed.
- The wrappers themselves also:
- hard-code the old binary name (
set name = rvio → looks for rvio.bin),
- need
tcsh, which isn't installed by default on Ubuntu,
- only add
$RV_HOME/lib. Qt, OpenEXR and similar come from linuxbrew/system and aren't covered.
Wrappers that still match their targets (py-interp, mu-interp, gto*, makeFBIOformats, …) are unaffected.
Proposed fix
Operating System
Linux
Code of Conduct
Summary
On Linux, the
utv*command-line tools and the main app are staged without their launcher wrappers, so they can't find their shared libraries unlessLD_LIBRARY_PATHis set by hand.Found while wiring up
ctestin CI (#64): every staged Linux binary failed to start witherror while loading shared libraries: libgc.so / libTwkMovie.so / libQt6Core.so: cannot open shared object file.Cause
CMAKE_SKIP_RPATH ON, so binaries rely on a wrapper script to setLD_LIBRARY_PATH.rv_stage()(cmake/macros/rv_stage.cmake) only installs a wrapper when<target>.wrapperexists next to the target.utvio,utvls,utvpkg,utvpush,utvshell,utvprofandutv_bin, but the wrapper files are stillrvio.wrapper,rvls.wrapper,rvpkg.wrapper,rvpush.wrapper,rvshell.wrapper,rvprof.wrapperandrv.wrapper. None of them match, so no wrapper is installed.set name = rvio→ looks forrvio.bin),tcsh, which isn't installed by default on Ubuntu,$RV_HOME/lib. Qt, OpenEXR and similar come from linuxbrew/system and aren't covered.Wrappers that still match their targets (
py-interp,mu-interp,gto*,makeFBIOformats, …) are unaffected.Proposed fix
utv*target names, or haverv_stagemap the names.$0instead of hard-coding it.sh(drop thetcshdependency).RPATH($ORIGIN/../lib) plus a documented deps prefix, or have the wrapper add the linuxbrew/system prefix.LD_LIBRARY_PATHworkaround from the LinuxctestCI steps (test(ci): add CLI smoke and image format round-trip tests; run ctest in CI #64), so CI exercises the real launch path.Operating System
Linux
Code of Conduct