[17/17] gobject-introspection: replace prelink-rtld with objdump -p

Message ID 20220127102005.3050843-17-alex@linutronix.de
State Accepted, archived
Commit 767e0880d4d729e659e859dd99c1cdb084b8ba51
Headers show
Series [01/17] mesa: fold mesa-gl variant into the main recipe using mcextend class | expand

Commit Message

Alexander Kanavin Jan. 27, 2022, 10:20 a.m. UTC
g-i internally processes the output with regexes, and seems
happy with what objdump is printing. It only needs to resolve
the library name as passed to the linker to the library file name.
Also recursive resolution (that ldd is doing and objdump is not)
is not necessary.

Signed-off-by: Alexander Kanavin <alex@linutronix.de>
---
 meta/classes/gobject-introspection.bbclass    |  2 +-
 ...-error-return-codes-from-ldd-wrapper.patch | 28 -------------------
 .../gobject-introspection_1.70.0.bb           | 14 ++--------
 3 files changed, 3 insertions(+), 41 deletions(-)
 delete mode 100644 meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch

Comments

Khem Raj Jan. 27, 2022, 6:09 p.m. UTC | #1
On Thu, Jan 27, 2022 at 2:21 AM Alexander Kanavin
<alex.kanavin@gmail.com> wrote:
>
> g-i internally processes the output with regexes, and seems
> happy with what objdump is printing. It only needs to resolve
> the library name as passed to the linker to the library file name.
> Also recursive resolution (that ldd is doing and objdump is not)
> is not necessary.
>

thanks for doing this, it further unbolts prelink from core metaddata.
Objdump -p is good, does it use it from binutils-cross ?

> Signed-off-by: Alexander Kanavin <alex@linutronix.de>
> ---
>  meta/classes/gobject-introspection.bbclass    |  2 +-
>  ...-error-return-codes-from-ldd-wrapper.patch | 28 -------------------
>  .../gobject-introspection_1.70.0.bb           | 14 ++--------
>  3 files changed, 3 insertions(+), 41 deletions(-)
>  delete mode 100644 meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch
>
> diff --git a/meta/classes/gobject-introspection.bbclass b/meta/classes/gobject-introspection.bbclass
> index 4db1b362d9..7bf9feb0d6 100644
> --- a/meta/classes/gobject-introspection.bbclass
> +++ b/meta/classes/gobject-introspection.bbclass
> @@ -29,7 +29,7 @@ EXTRA_OEMESON:prepend:class-nativesdk = "${@['', '${GIRMESONBUILD}'][d.getVar('G
>
>  # Generating introspection data depends on a combination of native and target
>  # introspection tools, and qemu to run the target tools.
> -DEPENDS:append:class-target = " gobject-introspection gobject-introspection-native qemu-native prelink-native"
> +DEPENDS:append:class-target = " gobject-introspection gobject-introspection-native qemu-native"
>
>  # Even though introspection is disabled on -native, gobject-introspection package is still
>  # needed for m4 macros.
> diff --git a/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch b/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch
> deleted file mode 100644
> index b484b5e9e6..0000000000
> --- a/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -From f742da8b3913f4818d3f419117076afe62f4dbf4 Mon Sep 17 00:00:00 2001
> -From: Alexander Kanavin <alex.kanavin@gmail.com>
> -Date: Wed, 5 Sep 2018 16:46:52 +0200
> -Subject: [PATCH] giscanner: ignore error return codes from ldd-wrapper
> -
> -prelink-rtld, which we use instead of ldd returns 127 when it can't find a library.
> -It is not an error per se, but it breaks subprocess.check_output().
> -
> -Upstream-Status: Inappropriate [oe-core specific]
> -Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
> -
> ----
> - giscanner/shlibs.py | 2 +-
> - 1 file changed, 1 insertion(+), 1 deletion(-)
> -
> -diff --git a/giscanner/shlibs.py b/giscanner/shlibs.py
> -index d67df95..80352a6 100644
> ---- a/giscanner/shlibs.py
> -+++ b/giscanner/shlibs.py
> -@@ -102,7 +102,7 @@ def _resolve_non_libtool(options, binary, libraries):
> -             args.extend(['otool', '-L', binary.args[0]])
> -         else:
> -             args.extend(['ldd', binary.args[0]])
> --        output = subprocess.check_output(args)
> -+        output = subprocess.run(args, check=False, stdout=subprocess.PIPE).stdout
> -         if isinstance(output, bytes):
> -             output = output.decode("utf-8", "replace")
> -
> diff --git a/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.70.0.bb b/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.70.0.bb
> index d4ee03d33c..4f72a33bfa 100644
> --- a/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.70.0.bb
> +++ b/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.70.0.bb
> @@ -14,7 +14,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=c434e8128a68bedd59b80b2ac1eb1c4a \
>                      "
>
>  SRC_URI = "${GNOME_MIRROR}/${BPN}/${@oe.utils.trim_version("${PV}", 2)}/${BPN}-${PV}.tar.xz \
> -           file://0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch \
>             file://0001-build-Avoid-the-doctemplates-hack.patch \
>             "
>
> @@ -33,9 +32,7 @@ DEPENDS += " libffi zlib glib-2.0 python3 flex-native bison-native autoconf-arch
>  # target build needs qemu to run temporary introspection binaries created
>  # on the fly by g-ir-scanner and a native version of itself to run
>  # native versions of its own tools during build.
> -# Also prelink-rtld is used to find out library dependencies of introspection binaries
> -# (standard ldd doesn't work when cross-compiling).
> -DEPENDS:append:class-target = " gobject-introspection-native qemu-native prelink-native"
> +DEPENDS:append:class-target = " gobject-introspection-native qemu-native"
>
>  # needed for writing out the qemu wrapper script
>  export STAGING_DIR_HOST
> @@ -55,13 +52,6 @@ EXTRA_OEMESON:class-target = " \
>      ${@'-Dgir_dir_prefix=${libdir}' if d.getVar('MULTILIBS') else ''} \
>  "
>
> -# Need to ensure ld.so.conf exists so prelink-native works
> -# both before we build and if we install from sstate
> -do_configure[prefuncs] += "gobject_introspection_preconfigure"
> -python gobject_introspection_preconfigure () {
> -    oe.utils.write_ld_so_conf(d)
> -}
> -
>  do_configure:prepend:class-native() {
>          # Tweak the native python scripts so that they don't refer to the
>          # full path of native python binary (the solution is taken from glib-2.0 recipe)
> @@ -113,7 +103,7 @@ EOF
>          # for a different architecture
>          cat > ${B}/g-ir-scanner-lddwrapper << EOF
>  #!/bin/sh
> -prelink-rtld --root=$STAGING_DIR_HOST "\$@"
> +$OBJDUMP -p "\$@"
>  EOF
>          chmod +x ${B}/g-ir-scanner-lddwrapper
>
> --
> 2.20.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#161039): https://lists.openembedded.org/g/openembedded-core/message/161039
> Mute This Topic: https://lists.openembedded.org/mt/88718372/1997914
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Alexander Kanavin Jan. 27, 2022, 7:26 p.m. UTC | #2
On Thu, 27 Jan 2022 at 19:09, Khem Raj <raj.khem@gmail.com> wrote:

> On Thu, Jan 27, 2022 at 2:21 AM Alexander Kanavin
> <alex.kanavin@gmail.com> wrote:
> >
> > g-i internally processes the output with regexes, and seems
> > happy with what objdump is printing. It only needs to resolve
> > the library name as passed to the linker to the library file name.
> > Also recursive resolution (that ldd is doing and objdump is not)
> > is not necessary.
> >
>
> thanks for doing this, it further unbolts prelink from core metaddata.
> Objdump -p is good, does it use it from binutils-cross ?
>

$OBJDUMP is set to the executable from there, yes.

Alex



>
> > Signed-off-by: Alexander Kanavin <alex@linutronix.de>
> > ---
> >  meta/classes/gobject-introspection.bbclass    |  2 +-
> >  ...-error-return-codes-from-ldd-wrapper.patch | 28 -------------------
> >  .../gobject-introspection_1.70.0.bb           | 14 ++--------
> >  3 files changed, 3 insertions(+), 41 deletions(-)
> >  delete mode 100644
> meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch
> >
> > diff --git a/meta/classes/gobject-introspection.bbclass
> b/meta/classes/gobject-introspection.bbclass
> > index 4db1b362d9..7bf9feb0d6 100644
> > --- a/meta/classes/gobject-introspection.bbclass
> > +++ b/meta/classes/gobject-introspection.bbclass
> > @@ -29,7 +29,7 @@ EXTRA_OEMESON:prepend:class-nativesdk = "${@['',
> '${GIRMESONBUILD}'][d.getVar('G
> >
> >  # Generating introspection data depends on a combination of native and
> target
> >  # introspection tools, and qemu to run the target tools.
> > -DEPENDS:append:class-target = " gobject-introspection
> gobject-introspection-native qemu-native prelink-native"
> > +DEPENDS:append:class-target = " gobject-introspection
> gobject-introspection-native qemu-native"
> >
> >  # Even though introspection is disabled on -native,
> gobject-introspection package is still
> >  # needed for m4 macros.
> > diff --git
> a/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch
> b/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch
> > deleted file mode 100644
> > index b484b5e9e6..0000000000
> > ---
> a/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch
> > +++ /dev/null
> > @@ -1,28 +0,0 @@
> > -From f742da8b3913f4818d3f419117076afe62f4dbf4 Mon Sep 17 00:00:00 2001
> > -From: Alexander Kanavin <alex.kanavin@gmail.com>
> > -Date: Wed, 5 Sep 2018 16:46:52 +0200
> > -Subject: [PATCH] giscanner: ignore error return codes from ldd-wrapper
> > -
> > -prelink-rtld, which we use instead of ldd returns 127 when it can't
> find a library.
> > -It is not an error per se, but it breaks subprocess.check_output().
> > -
> > -Upstream-Status: Inappropriate [oe-core specific]
> > -Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
> > -
> > ----
> > - giscanner/shlibs.py | 2 +-
> > - 1 file changed, 1 insertion(+), 1 deletion(-)
> > -
> > -diff --git a/giscanner/shlibs.py b/giscanner/shlibs.py
> > -index d67df95..80352a6 100644
> > ---- a/giscanner/shlibs.py
> > -+++ b/giscanner/shlibs.py
> > -@@ -102,7 +102,7 @@ def _resolve_non_libtool(options, binary,
> libraries):
> > -             args.extend(['otool', '-L', binary.args[0]])
> > -         else:
> > -             args.extend(['ldd', binary.args[0]])
> > --        output = subprocess.check_output(args)
> > -+        output = subprocess.run(args, check=False,
> stdout=subprocess.PIPE).stdout
> > -         if isinstance(output, bytes):
> > -             output = output.decode("utf-8", "replace")
> > -
> > diff --git a/meta/recipes-gnome/gobject-introspection/
> gobject-introspection_1.70.0.bb
> b/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.70.0.bb
> > index d4ee03d33c..4f72a33bfa 100644
> > --- a/meta/recipes-gnome/gobject-introspection/
> gobject-introspection_1.70.0.bb
> > +++ b/meta/recipes-gnome/gobject-introspection/
> gobject-introspection_1.70.0.bb
> > @@ -14,7 +14,6 @@ LIC_FILES_CHKSUM =
> "file://COPYING;md5=c434e8128a68bedd59b80b2ac1eb1c4a \
> >                      "
> >
> >  SRC_URI = "${GNOME_MIRROR}/${BPN}/${@oe.utils.trim_version("${PV}",
> 2)}/${BPN}-${PV}.tar.xz \
> > -
>  file://0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch \
> >             file://0001-build-Avoid-the-doctemplates-hack.patch \
> >             "
> >
> > @@ -33,9 +32,7 @@ DEPENDS += " libffi zlib glib-2.0 python3 flex-native
> bison-native autoconf-arch
> >  # target build needs qemu to run temporary introspection binaries
> created
> >  # on the fly by g-ir-scanner and a native version of itself to run
> >  # native versions of its own tools during build.
> > -# Also prelink-rtld is used to find out library dependencies of
> introspection binaries
> > -# (standard ldd doesn't work when cross-compiling).
> > -DEPENDS:append:class-target = " gobject-introspection-native
> qemu-native prelink-native"
> > +DEPENDS:append:class-target = " gobject-introspection-native
> qemu-native"
> >
> >  # needed for writing out the qemu wrapper script
> >  export STAGING_DIR_HOST
> > @@ -55,13 +52,6 @@ EXTRA_OEMESON:class-target = " \
> >      ${@'-Dgir_dir_prefix=${libdir}' if d.getVar('MULTILIBS') else ''} \
> >  "
> >
> > -# Need to ensure ld.so.conf exists so prelink-native works
> > -# both before we build and if we install from sstate
> > -do_configure[prefuncs] += "gobject_introspection_preconfigure"
> > -python gobject_introspection_preconfigure () {
> > -    oe.utils.write_ld_so_conf(d)
> > -}
> > -
> >  do_configure:prepend:class-native() {
> >          # Tweak the native python scripts so that they don't refer to
> the
> >          # full path of native python binary (the solution is taken from
> glib-2.0 recipe)
> > @@ -113,7 +103,7 @@ EOF
> >          # for a different architecture
> >          cat > ${B}/g-ir-scanner-lddwrapper << EOF
> >  #!/bin/sh
> > -prelink-rtld --root=$STAGING_DIR_HOST "\$@"
> > +$OBJDUMP -p "\$@"
> >  EOF
> >          chmod +x ${B}/g-ir-scanner-lddwrapper
> >
> > --
> > 2.20.1
> >
> >
> > -=-=-=-=-=-=-=-=-=-=-=-
> > Links: You receive all messages sent to this group.
> > View/Reply Online (#161039):
> https://lists.openembedded.org/g/openembedded-core/message/161039
> > Mute This Topic: https://lists.openembedded.org/mt/88718372/1997914
> > Group Owner: openembedded-core+owner@lists.openembedded.org
> > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [
> raj.khem@gmail.com]
> > -=-=-=-=-=-=-=-=-=-=-=-
> >
>

Patch

diff --git a/meta/classes/gobject-introspection.bbclass b/meta/classes/gobject-introspection.bbclass
index 4db1b362d9..7bf9feb0d6 100644
--- a/meta/classes/gobject-introspection.bbclass
+++ b/meta/classes/gobject-introspection.bbclass
@@ -29,7 +29,7 @@  EXTRA_OEMESON:prepend:class-nativesdk = "${@['', '${GIRMESONBUILD}'][d.getVar('G
 
 # Generating introspection data depends on a combination of native and target
 # introspection tools, and qemu to run the target tools.
-DEPENDS:append:class-target = " gobject-introspection gobject-introspection-native qemu-native prelink-native"
+DEPENDS:append:class-target = " gobject-introspection gobject-introspection-native qemu-native"
 
 # Even though introspection is disabled on -native, gobject-introspection package is still
 # needed for m4 macros.
diff --git a/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch b/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch
deleted file mode 100644
index b484b5e9e6..0000000000
--- a/meta/recipes-gnome/gobject-introspection/gobject-introspection/0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch
+++ /dev/null
@@ -1,28 +0,0 @@ 
-From f742da8b3913f4818d3f419117076afe62f4dbf4 Mon Sep 17 00:00:00 2001
-From: Alexander Kanavin <alex.kanavin@gmail.com>
-Date: Wed, 5 Sep 2018 16:46:52 +0200
-Subject: [PATCH] giscanner: ignore error return codes from ldd-wrapper
-
-prelink-rtld, which we use instead of ldd returns 127 when it can't find a library.
-It is not an error per se, but it breaks subprocess.check_output().
-
-Upstream-Status: Inappropriate [oe-core specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-
----
- giscanner/shlibs.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/giscanner/shlibs.py b/giscanner/shlibs.py
-index d67df95..80352a6 100644
---- a/giscanner/shlibs.py
-+++ b/giscanner/shlibs.py
-@@ -102,7 +102,7 @@ def _resolve_non_libtool(options, binary, libraries):
-             args.extend(['otool', '-L', binary.args[0]])
-         else:
-             args.extend(['ldd', binary.args[0]])
--        output = subprocess.check_output(args)
-+        output = subprocess.run(args, check=False, stdout=subprocess.PIPE).stdout
-         if isinstance(output, bytes):
-             output = output.decode("utf-8", "replace")
- 
diff --git a/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.70.0.bb b/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.70.0.bb
index d4ee03d33c..4f72a33bfa 100644
--- a/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.70.0.bb
+++ b/meta/recipes-gnome/gobject-introspection/gobject-introspection_1.70.0.bb
@@ -14,7 +14,6 @@  LIC_FILES_CHKSUM = "file://COPYING;md5=c434e8128a68bedd59b80b2ac1eb1c4a \
                     "
 
 SRC_URI = "${GNOME_MIRROR}/${BPN}/${@oe.utils.trim_version("${PV}", 2)}/${BPN}-${PV}.tar.xz \
-           file://0001-giscanner-ignore-error-return-codes-from-ldd-wrapper.patch \
            file://0001-build-Avoid-the-doctemplates-hack.patch \
            "
 
@@ -33,9 +32,7 @@  DEPENDS += " libffi zlib glib-2.0 python3 flex-native bison-native autoconf-arch
 # target build needs qemu to run temporary introspection binaries created
 # on the fly by g-ir-scanner and a native version of itself to run
 # native versions of its own tools during build.
-# Also prelink-rtld is used to find out library dependencies of introspection binaries
-# (standard ldd doesn't work when cross-compiling).
-DEPENDS:append:class-target = " gobject-introspection-native qemu-native prelink-native"
+DEPENDS:append:class-target = " gobject-introspection-native qemu-native"
 
 # needed for writing out the qemu wrapper script
 export STAGING_DIR_HOST
@@ -55,13 +52,6 @@  EXTRA_OEMESON:class-target = " \
     ${@'-Dgir_dir_prefix=${libdir}' if d.getVar('MULTILIBS') else ''} \
 "
 
-# Need to ensure ld.so.conf exists so prelink-native works
-# both before we build and if we install from sstate
-do_configure[prefuncs] += "gobject_introspection_preconfigure"
-python gobject_introspection_preconfigure () {
-    oe.utils.write_ld_so_conf(d)
-}
-
 do_configure:prepend:class-native() {
         # Tweak the native python scripts so that they don't refer to the
         # full path of native python binary (the solution is taken from glib-2.0 recipe)
@@ -113,7 +103,7 @@  EOF
         # for a different architecture
         cat > ${B}/g-ir-scanner-lddwrapper << EOF
 #!/bin/sh
-prelink-rtld --root=$STAGING_DIR_HOST "\$@"
+$OBJDUMP -p "\$@"
 EOF
         chmod +x ${B}/g-ir-scanner-lddwrapper