Skip to content

fix(linux): utv* tools staged without launcher wrappers after rv→utv rename #66

Description

@mcoliver

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

  • Rename the wrapper files to the utv* target names, or have rv_stage map the names.
  • Derive the binary name from $0 instead of hard-coding it.
  • Rewrite the wrappers in POSIX sh (drop the tcsh dependency).
  • Decide how Linux builds locate Qt and the other non-bundled deps. Options: a relative RPATH ($ORIGIN/../lib) plus a documented deps prefix, or have the wrapper add the linuxbrew/system prefix.
  • Once fixed, remove the LD_LIBRARY_PATH workaround from the Linux ctest CI 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions