Skip to content
Snippets Groups Projects
  • Simon McVittie's avatar
    c3a06cce
    Build -system-info and -check-locale with relative DT_RPATH · c3a06cce
    Simon McVittie authored
    
    This ensures that they can find the non-ubiquitous json-glib library,
    and the steam-runtime-tools library, even if relocated into a
    non-standard prefix like the LD_LIBRARY_PATH Steam Runtime.
    
    We can't just use a relative version of the standard library directory
    as our RPATH, because if we did that, we would load glibc from the
    same place. This causes crashes in pressure-vessel, where ld.so and
    the rest of glibc are often taken from the host system via
    /overrides/lib, and the glibc in /lib and /usr/lib is incompatible
    with ld.so. Instead, use a private library directory and populate it
    with relative symlinks to our non-glibc dependencies; we assume the
    host version of glibc is new enough that this is OK.
    
    Using DT_RPATH in preference to DT_RUNPATH means we take all our direct
    and indirect dependencies from the same place. This is important when
    libjson-glib (which won't ordinarily have a RUNPATH or RPATH) pulls in
    GIO as an indirect dependency of check-locale, which doesn't directly
    depend on GIO. The GIO library we get must match the versions of GLib
    and GObject we're using.
    
    This also bypasses LD_LIBRARY_PATH.
    
    Signed-off-by: default avatarSimon McVittie <smcv@collabora.com>
    c3a06cce
    History
    Build -system-info and -check-locale with relative DT_RPATH
    Simon McVittie authored
    
    This ensures that they can find the non-ubiquitous json-glib library,
    and the steam-runtime-tools library, even if relocated into a
    non-standard prefix like the LD_LIBRARY_PATH Steam Runtime.
    
    We can't just use a relative version of the standard library directory
    as our RPATH, because if we did that, we would load glibc from the
    same place. This causes crashes in pressure-vessel, where ld.so and
    the rest of glibc are often taken from the host system via
    /overrides/lib, and the glibc in /lib and /usr/lib is incompatible
    with ld.so. Instead, use a private library directory and populate it
    with relative symlinks to our non-glibc dependencies; we assume the
    host version of glibc is new enough that this is OK.
    
    Using DT_RPATH in preference to DT_RUNPATH means we take all our direct
    and indirect dependencies from the same place. This is important when
    libjson-glib (which won't ordinarily have a RUNPATH or RPATH) pulls in
    GIO as an indirect dependency of check-locale, which doesn't directly
    depend on GIO. The GIO library we get must match the versions of GLib
    and GObject we're using.
    
    This also bypasses LD_LIBRARY_PATH.
    
    Signed-off-by: default avatarSimon McVittie <smcv@collabora.com>