Re: [PATCH v2 04/12] ltmain.in: Don't encode RATHS which match default linker paths
On Sat, 16 Apr 2022, Sam James wrote: From: Richard Purdie 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. While cross-compiling some software ("Curl") for a target which already had an older install present, libtool ended up defeating me. I wanted to produce my own libcurl and have the apps specifically linking with it, use the libcurl that I had built. I wanted to leave the libcurl that came with the system in place for the many other existing apps which needed it. Unfortunately, the add-on software was already configured to install and use libraries in "/usr/lib" and the popular/default "/usr/local/lib" was included in the default linker path so that would not have worked either. The libtool I was using (originating from Ubuntu Linux) stripped the rpath (which was provided like '-Wl,rpath=/usr/lib') so I was unable to embed an rpath in the libcurl I built so that applications linked with that libcurl would find it. The end result was that apps linked with the new libcurl tried to use an older libcurl on the system, and failed to run. I was unable to circumvent this issue caused by libtool. It is useful if user-provided options have priority over built-in optimizations in libtool. As a user, I strongly suggest that libtool honor user-supplied options to the configure script and provided to the libtool command line, even while it optimizes other unneeded options away. Bob -- Bob Friesenhahn bfrie...@simple.dallas.tx.us, http://www.simplesystems.org/users/bfriesen/ GraphicsMagick Maintainer,http://www.GraphicsMagick.org/ Public Key, http://www.simplesystems.org/users/bfriesen/public-key.txt
[PATCH v2 04/12] ltmain.in: Don't encode RATHS which match default linker paths
From: Richard Purdie 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 bc0a3950..a4175d99 100644 --- a/build-aux/ltmain.in +++ b/build-aux/ltmain.in @@ -7700,8 +7700,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 @@ -8434,8 +8442,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 @@ -8489,8 +8505,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.35.1