Patchwork [6/9] libtool: Fix an issue where unnecessary rpaths were being injected

login
register
mail settings
Submitter Richard Purdie
Date Sept. 25, 2011, 3:56 p.m.
Message ID <002ad30dae74393120d2391602371116af1bb11d.1316963134.git.richard.purdie@linuxfoundation.org>
Download mbox | patch
Permalink /patch/12107/
State New, archived
Headers show

Comments

Richard Purdie - Sept. 25, 2011, 3:56 p.m.
libtool was being to aggressive in adding rpath to binaries. This
change stops it adding them if that path the default search path.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 meta/recipes-devtools/libtool/libtool-cross_2.4.bb |    2 +-
 .../recipes-devtools/libtool/libtool-native_2.4.bb |    2 +-
 .../libtool/libtool-nativesdk_2.4.bb               |    2 +-
 meta/recipes-devtools/libtool/libtool.inc          |    3 +-
 meta/recipes-devtools/libtool/libtool/1            |   55 +++++++++++++++++
 .../libtool/libtool/fix-rpath.patch                |   63 ++++++++++++++++++++
 meta/recipes-devtools/libtool/libtool_2.4.bb       |    2 +-
 7 files changed, 124 insertions(+), 5 deletions(-)
 create mode 100644 meta/recipes-devtools/libtool/libtool/1
 create mode 100644 meta/recipes-devtools/libtool/libtool/fix-rpath.patch
Koen Kooi - Sept. 25, 2011, 4:14 p.m.
Op 25 sep. 2011, om 17:56 heeft Richard Purdie het volgende geschreven:

> libtool was being to aggressive in adding rpath to binaries. This
> change stops it adding them if that path the default search path.
> 
> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
> ---
> meta/recipes-devtools/libtool/libtool-cross_2.4.bb |    2 +-
> .../recipes-devtools/libtool/libtool-native_2.4.bb |    2 +-
> .../libtool/libtool-nativesdk_2.4.bb               |    2 +-
> meta/recipes-devtools/libtool/libtool.inc          |    3 +-
> meta/recipes-devtools/libtool/libtool/1            |   55 +++++++++++++++++
> .../libtool/libtool/fix-rpath.patch                |   63 ++++++++++++++++++++
> meta/recipes-devtools/libtool/libtool_2.4.bb       |    2 +-
> 7 files changed, 124 insertions(+), 5 deletions(-)
> create mode 100644 meta/recipes-devtools/libtool/libtool/1
> create mode 100644 meta/recipes-devtools/libtool/libtool/fix-rpath.patch
> 
> diff --git a/meta/recipes-devtools/libtool/libtool-cross_2.4.bb b/meta/recipes-devtools/libtool/libtool-cross_2.4.bb
> index 25ac580..6d512b1 100644
> --- a/meta/recipes-devtools/libtool/libtool-cross_2.4.bb
> +++ b/meta/recipes-devtools/libtool/libtool-cross_2.4.bb
> @@ -1,6 +1,6 @@
> require libtool-${PV}.inc
> 
> -PR = "r2"
> +PR = "r4"
> PACKAGES = ""
> SRC_URI += "file://prefix.patch"
> 
> diff --git a/meta/recipes-devtools/libtool/libtool-native_2.4.bb b/meta/recipes-devtools/libtool/libtool-native_2.4.bb
> index 423622f..3d0998e 100644
> --- a/meta/recipes-devtools/libtool/libtool-native_2.4.bb
> +++ b/meta/recipes-devtools/libtool/libtool-native_2.4.bb
> @@ -2,7 +2,7 @@ require libtool-${PV}.inc
> 
> DEPENDS = ""
> 
> -PR = "r2"
> +PR = "r4"
> SRC_URI += "file://prefix.patch"
> 
> inherit native
> diff --git a/meta/recipes-devtools/libtool/libtool-nativesdk_2.4.bb b/meta/recipes-devtools/libtool/libtool-nativesdk_2.4.bb
> index 4f67fed..a96d1d1 100644
> --- a/meta/recipes-devtools/libtool/libtool-nativesdk_2.4.bb
> +++ b/meta/recipes-devtools/libtool/libtool-nativesdk_2.4.bb
> @@ -1,6 +1,6 @@
> require libtool-${PV}.inc
> 
> -PR = "r2"
> +PR = "r4"
> SRC_URI += "file://prefix.patch"
> 
> inherit nativesdk
> diff --git a/meta/recipes-devtools/libtool/libtool.inc b/meta/recipes-devtools/libtool/libtool.inc
> index d423e49..ef9095b 100644
> --- a/meta/recipes-devtools/libtool/libtool.inc
> +++ b/meta/recipes-devtools/libtool/libtool.inc
> @@ -15,7 +15,8 @@ SRC_URI = "${GNU_MIRROR}/libtool/libtool-${PV}.tar.gz \
>            file://resolve-sysroot.patch \
>            file://use-sysroot-in-libpath.patch \
>            file://fix-final-rpath.patch \
> -           file://avoid_absolute_paths_for_general_utils.patch "
> +           file://avoid_absolute_paths_for_general_utils.patch \
> +           file://fix-rpath.patch "
> 
> do_compile_prepend () {
> 	# Sometimes this file doesn't get rebuilt, force the issue
> diff --git a/meta/recipes-devtools/libtool/libtool/1 b/meta/recipes-devtools/libtool/libtool/1
> new file mode 100644
> index 0000000..b3ee955
> --- /dev/null
> +++ b/meta/recipes-devtools/libtool/libtool/1

stray file?
Richard Purdie - Sept. 26, 2011, 4:57 p.m.
On Sun, 2011-09-25 at 18:14 +0200, Koen Kooi wrote:
> Op 25 sep. 2011, om 17:56 heeft Richard Purdie het volgende geschreven:
> 
> > libtool was being to aggressive in adding rpath to binaries. This
> > change stops it adding them if that path the default search path.
> > 
> > Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
> > ---
> > meta/recipes-devtools/libtool/libtool-cross_2.4.bb |    2 +-
> > .../recipes-devtools/libtool/libtool-native_2.4.bb |    2 +-
> > .../libtool/libtool-nativesdk_2.4.bb               |    2 +-
> > meta/recipes-devtools/libtool/libtool.inc          |    3 +-
> > meta/recipes-devtools/libtool/libtool/1            |   55 +++++++++++++++++
> > .../libtool/libtool/fix-rpath.patch                |   63 ++++++++++++++++++++
> > meta/recipes-devtools/libtool/libtool_2.4.bb       |    2 +-
> > 7 files changed, 124 insertions(+), 5 deletions(-)
> > create mode 100644 meta/recipes-devtools/libtool/libtool/1
> > create mode 100644 meta/recipes-devtools/libtool/libtool/fix-rpath.patch
> > 
> > diff --git a/meta/recipes-devtools/libtool/libtool-cross_2.4.bb b/meta/recipes-devtools/libtool/libtool-cross_2.4.bb
> > index 25ac580..6d512b1 100644
> > --- a/meta/recipes-devtools/libtool/libtool-cross_2.4.bb
> > +++ b/meta/recipes-devtools/libtool/libtool-cross_2.4.bb
> > @@ -1,6 +1,6 @@
> > require libtool-${PV}.inc
> > 
> > -PR = "r2"
> > +PR = "r4"
> > PACKAGES = ""
> > SRC_URI += "file://prefix.patch"
> > 
> > diff --git a/meta/recipes-devtools/libtool/libtool-native_2.4.bb b/meta/recipes-devtools/libtool/libtool-native_2.4.bb
> > index 423622f..3d0998e 100644
> > --- a/meta/recipes-devtools/libtool/libtool-native_2.4.bb
> > +++ b/meta/recipes-devtools/libtool/libtool-native_2.4.bb
> > @@ -2,7 +2,7 @@ require libtool-${PV}.inc
> > 
> > DEPENDS = ""
> > 
> > -PR = "r2"
> > +PR = "r4"
> > SRC_URI += "file://prefix.patch"
> > 
> > inherit native
> > diff --git a/meta/recipes-devtools/libtool/libtool-nativesdk_2.4.bb b/meta/recipes-devtools/libtool/libtool-nativesdk_2.4.bb
> > index 4f67fed..a96d1d1 100644
> > --- a/meta/recipes-devtools/libtool/libtool-nativesdk_2.4.bb
> > +++ b/meta/recipes-devtools/libtool/libtool-nativesdk_2.4.bb
> > @@ -1,6 +1,6 @@
> > require libtool-${PV}.inc
> > 
> > -PR = "r2"
> > +PR = "r4"
> > SRC_URI += "file://prefix.patch"
> > 
> > inherit nativesdk
> > diff --git a/meta/recipes-devtools/libtool/libtool.inc b/meta/recipes-devtools/libtool/libtool.inc
> > index d423e49..ef9095b 100644
> > --- a/meta/recipes-devtools/libtool/libtool.inc
> > +++ b/meta/recipes-devtools/libtool/libtool.inc
> > @@ -15,7 +15,8 @@ SRC_URI = "${GNU_MIRROR}/libtool/libtool-${PV}.tar.gz \
> >            file://resolve-sysroot.patch \
> >            file://use-sysroot-in-libpath.patch \
> >            file://fix-final-rpath.patch \
> > -           file://avoid_absolute_paths_for_general_utils.patch "
> > +           file://avoid_absolute_paths_for_general_utils.patch \
> > +           file://fix-rpath.patch "
> > 
> > do_compile_prepend () {
> > 	# Sometimes this file doesn't get rebuilt, force the issue
> > diff --git a/meta/recipes-devtools/libtool/libtool/1 b/meta/recipes-devtools/libtool/libtool/1
> > new file mode 100644
> > index 0000000..b3ee955
> > --- /dev/null
> > +++ b/meta/recipes-devtools/libtool/libtool/1
> 
> stray file?

Good catch. I tested this a bit more, liked the results and merged it,
minus this file.

We should notice a lot of the RPATH warnings going away with this
change.

Cheers,

Richard

Patch

diff --git a/meta/recipes-devtools/libtool/libtool-cross_2.4.bb b/meta/recipes-devtools/libtool/libtool-cross_2.4.bb
index 25ac580..6d512b1 100644
--- a/meta/recipes-devtools/libtool/libtool-cross_2.4.bb
+++ b/meta/recipes-devtools/libtool/libtool-cross_2.4.bb
@@ -1,6 +1,6 @@ 
 require libtool-${PV}.inc
 
-PR = "r2"
+PR = "r4"
 PACKAGES = ""
 SRC_URI += "file://prefix.patch"
 
diff --git a/meta/recipes-devtools/libtool/libtool-native_2.4.bb b/meta/recipes-devtools/libtool/libtool-native_2.4.bb
index 423622f..3d0998e 100644
--- a/meta/recipes-devtools/libtool/libtool-native_2.4.bb
+++ b/meta/recipes-devtools/libtool/libtool-native_2.4.bb
@@ -2,7 +2,7 @@  require libtool-${PV}.inc
 
 DEPENDS = ""
 
-PR = "r2"
+PR = "r4"
 SRC_URI += "file://prefix.patch"
 
 inherit native
diff --git a/meta/recipes-devtools/libtool/libtool-nativesdk_2.4.bb b/meta/recipes-devtools/libtool/libtool-nativesdk_2.4.bb
index 4f67fed..a96d1d1 100644
--- a/meta/recipes-devtools/libtool/libtool-nativesdk_2.4.bb
+++ b/meta/recipes-devtools/libtool/libtool-nativesdk_2.4.bb
@@ -1,6 +1,6 @@ 
 require libtool-${PV}.inc
 
-PR = "r2"
+PR = "r4"
 SRC_URI += "file://prefix.patch"
 
 inherit nativesdk
diff --git a/meta/recipes-devtools/libtool/libtool.inc b/meta/recipes-devtools/libtool/libtool.inc
index d423e49..ef9095b 100644
--- a/meta/recipes-devtools/libtool/libtool.inc
+++ b/meta/recipes-devtools/libtool/libtool.inc
@@ -15,7 +15,8 @@  SRC_URI = "${GNU_MIRROR}/libtool/libtool-${PV}.tar.gz \
            file://resolve-sysroot.patch \
            file://use-sysroot-in-libpath.patch \
            file://fix-final-rpath.patch \
-           file://avoid_absolute_paths_for_general_utils.patch "
+           file://avoid_absolute_paths_for_general_utils.patch \
+           file://fix-rpath.patch "
 
 do_compile_prepend () {
 	# Sometimes this file doesn't get rebuilt, force the issue
diff --git a/meta/recipes-devtools/libtool/libtool/1 b/meta/recipes-devtools/libtool/libtool/1
new file mode 100644
index 0000000..b3ee955
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool/1
@@ -0,0 +1,55 @@ 
+Index: libtool-2.4/libltdl/config/ltmain.m4sh
+===================================================================
+--- libtool-2.4.orig/libltdl/config/ltmain.m4sh	2011-09-23 08:38:06.365043626 +0100
++++ libtool-2.4/libltdl/config/ltmain.m4sh	2011-09-23 09:57:05.235003068 +0100
+@@ -7264,8 +7264,14 @@
+ 		  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.
++	        case " $sys_lib_dlsearch_path " in
++	        *" $libdir "*) ;;
++	        *) eval flag=\"$hardcode_libdir_flag_spec\"
++                   func_append dep_rpath " $flag"
++                   ;;
++	        esac
+ 	      fi
+ 	    elif test -n "$runpath_var"; then
+ 	      case "$perm_rpath " in
+@@ -8001,8 +8007,14 @@
+ 	      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\"
++               rpath+=" $flag"
++               ;;
++	    esac
+ 	  fi
+ 	elif test -n "$runpath_var"; then
+ 	  case "$perm_rpath " in
+@@ -8052,8 +8064,14 @@
+ 	      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
diff --git a/meta/recipes-devtools/libtool/libtool/fix-rpath.patch b/meta/recipes-devtools/libtool/libtool/fix-rpath.patch
new file mode 100644
index 0000000..3cdeaec
--- /dev/null
+++ b/meta/recipes-devtools/libtool/libtool/fix-rpath.patch
@@ -0,0 +1,63 @@ 
+We don't want to add RPATHS which match default linker
+search paths, they're a waste of space. This patch
+filters libtools list and removes the ones we don't need.
+
+RP 23/9/2011
+
+Upstream-status: Pending
+
+Index: libtool-2.4/libltdl/config/ltmain.m4sh
+===================================================================
+--- libtool-2.4.orig/libltdl/config/ltmain.m4sh	2011-09-23 08:38:06.365043626 +0100
++++ libtool-2.4/libltdl/config/ltmain.m4sh	2011-09-23 09:57:05.235003068 +0100
+@@ -7264,8 +7264,14 @@
+ 		  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.
++	        case " $sys_lib_dlsearch_path " in
++	        *" $libdir "*) ;;
++	        *) eval flag=\"$hardcode_libdir_flag_spec\"
++                   func_append dep_rpath " $flag"
++                   ;;
++	        esac
+ 	      fi
+ 	    elif test -n "$runpath_var"; then
+ 	      case "$perm_rpath " in
+@@ -8001,8 +8007,14 @@
+ 	      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\"
++               rpath+=" $flag"
++               ;;
++	    esac
+ 	  fi
+ 	elif test -n "$runpath_var"; then
+ 	  case "$perm_rpath " in
+@@ -8052,8 +8064,14 @@
+ 	      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
diff --git a/meta/recipes-devtools/libtool/libtool_2.4.bb b/meta/recipes-devtools/libtool/libtool_2.4.bb
index e1a9a10..3002215 100644
--- a/meta/recipes-devtools/libtool/libtool_2.4.bb
+++ b/meta/recipes-devtools/libtool/libtool_2.4.bb
@@ -1,6 +1,6 @@ 
 require libtool-${PV}.inc
 
-PR = "r2"
+PR = "r4"
 
 #
 # We want the results of libtool-cross preserved - don't stage anything ourselves.