Re: [PATCH 05/12] ltmain.in: Don't encode RATHS which match default linker paths
On 25 Oct 2021 15:33, Richard Purdie wrote: > We don't want to add RPATHS which match default linker search paths, they're > a waste of space. This patch filters libtools list of paths to encoode and > removes the ones we don't need. > > Libtool may be passed link paths of the form "/usr/lib/../lib" so normalize > the paths before comparision. add a bit more detail to the commit message, add the changelog, and fix the typo in the subject line ("RATHS"). > --- a/build-aux/ltmain.in > +++ b/build-aux/ltmain.in > @@ -7672,8 +7672,16 @@ EOF > esac > fi > else > - eval flag=\"$hardcode_libdir_flag_spec\" > - func_append dep_rpath " $flag" > +# We only want to hardcode in an rpath if it isn't in the > +# default dlsearch path. > +func_normal_abspath "$libdir" > +libdir_norm=$func_normal_abspath_result > + case " $sys_lib_dlsearch_path " in > + *" $libdir_norm "*) ;; > + *) eval flag=\"$hardcode_libdir_flag_spec\" > + func_append dep_rpath " $flag" > + ;; > + esac this is a non-trivial amount of boiler plate that you're pasting in here. can we introduce a func to make this more readable ? something like this untested code. # func_is_in_list [separator] # blah blah blah func_is_in_list () { case "${3:- }$2${3:- }" in *"${3:- }$1${3:- }"*) return 0;; esac return 1 } then you could write: func_normal_abspath "$libdir" if ! func_is_in_list "$func_normal_abspath_result" "$sys_lib_dlsearch_path"; then eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi and there's 2 other places where $sys_lib_dlsearch_path is checked that could be converted over to this helper. -mike signature.asc Description: PGP signature
Re: [PATCH 05/12] ltmain.in: Don't encode RATHS which match default linker paths
Hi All Information below is not enough to understand details. Richard Purdie wrote: On Mon, 2024-01-15 at 20:10 -0500, Mike Frysinger wrote: On 25 Oct 2021 15:33, Richard Purdie wrote: We don't want to add RPATHS which match default linker search paths, they're a waste of space. This patch filters libtools list of paths to encoode and removes the ones we don't need. Libtool try to avoid search path used by run-time loader. Note FSF version! Debian patched is know to be broken since decades. There is a way to adapt old releases on Unix/Linux like build systems. This is autoconf cache variable . I cannot remember exact name by is like lt_cv..dlsearch...path... (1) If I remember well libtool release 2.4.7 adds configuration variable that allows default search path (2) to be set. In my cross-builds scripts I use model (1) to exclude not only path passed to libtool with --with-sysroot argument but additional path. how are you defining "linker" ? are you talking about the runtime linker (i.e. ld.so) or the build time linker (i.e. `ld`) ? I meant the runtime linker/loader ld.so. the commit message also doesn't really explain in concrete details the scenario you're running into. We were seeing binaries with RPATHS like /usr/lib in them which basically doesn't do anything useful since it is a default for ld.so. We were therefore trying to remove those to improve the efficiency of the binaries slightly. Cheers, Richard Regards, Roumen Petrov
Re: [PATCH 05/12] ltmain.in: Don't encode RATHS which match default linker paths
On Mon, 2024-01-15 at 20:10 -0500, Mike Frysinger wrote: > On 25 Oct 2021 15:33, Richard Purdie wrote: > > We don't want to add RPATHS which match default linker search paths, they're > > a waste of space. This patch filters libtools list of paths to encoode and > > removes the ones we don't need. > > how are you defining "linker" ? are you talking about the runtime linker > (i.e. ld.so) or the build time linker (i.e. `ld`) ? I meant the runtime linker/loader ld.so. > the commit message also doesn't really explain in concrete details the > scenario you're running into. We were seeing binaries with RPATHS like /usr/lib in them which basically doesn't do anything useful since it is a default for ld.so. We were therefore trying to remove those to improve the efficiency of the binaries slightly. Cheers, Richard
Re: [PATCH 05/12] ltmain.in: Don't encode RATHS which match default linker paths
On 25 Oct 2021 15:33, Richard Purdie wrote: > We don't want to add RPATHS which match default linker search paths, they're > a waste of space. This patch filters libtools list of paths to encoode and > removes the ones we don't need. how are you defining "linker" ? are you talking about the runtime linker (i.e. ld.so) or the build time linker (i.e. `ld`) ? the commit message also doesn't really explain in concrete details the scenario you're running into. -mike signature.asc Description: PGP signature
[PATCH 05/12] ltmain.in: Don't encode RATHS which match default linker paths
We don't want to add RPATHS which match default linker search paths, they're a waste of space. This patch filters libtools list of paths to encoode and removes the ones we don't need. Libtool may be passed link paths of the form "/usr/lib/../lib" so normalize the paths before comparision. Signed-off-by: Richard Purdie --- build-aux/ltmain.in | 34 -- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in index 96238350..6fb58ed2 100644 --- a/build-aux/ltmain.in +++ b/build-aux/ltmain.in @@ -7672,8 +7672,16 @@ EOF esac fi else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append dep_rpath " $flag" +# We only want to hardcode in an rpath if it isn't in the +# default dlsearch path. +func_normal_abspath "$libdir" +libdir_norm=$func_normal_abspath_result + case " $sys_lib_dlsearch_path " in + *" $libdir_norm "*) ;; + *) eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + ;; + esac fi elif test -n "$runpath_var"; then case "$perm_rpath " in @@ -8406,8 +8414,16 @@ EOF esac fi else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" +# We only want to hardcode in an rpath if it isn't in the +# default dlsearch path. +func_normal_abspath "$libdir" +libdir_norm=$func_normal_abspath_result + case " $sys_lib_dlsearch_path " in + *" $libdir_norm "*) ;; + *) eval flag=\"$hardcode_libdir_flag_spec\" + rpath+=" $flag" + ;; + esac fi elif test -n "$runpath_var"; then case "$perm_rpath " in @@ -8461,8 +8477,14 @@ EOF esac fi else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" +# We only want to hardcode in an rpath if it isn't in the +# default dlsearch path. + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + ;; + esac fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in -- 2.25.1