[Buildroot] [PATCH v17 5/5] package/gobject-introspection: new package
Yegor Yefremov
yegorslists at googlemail.com
Wed Feb 12 20:09:16 UTC 2020
Hi Adam, all,
On Tue, Feb 11, 2020 at 5:34 PM <aduskett at gmail.com> wrote:
>
> From: Adam Duskett <Aduskett at gmail.com>
>
> GObject introspection is a middleware layer between C
> libraries (using GObject) and language bindings. The C library
> can be scanned at compile time and generate a metadata file,
> in addition to the actual native C library. Then at runtime,
> language bindings can read this metadata and automatically
> provide bindings to call into the C library.
>
> There's an XML format called GIR used by GObject-Introspection.
> The purpose of it is to provide a standard structure to access the complete
> available API that a library or other unit of code exports. It's
> language-agnostic using namespaces to separate core, language, or
> library-specific functionality.
>
> Cross-compiling gobject-introspection is not an easy task. The main issue is
> that in the process of creating the XML files, gobject-introspection must first
> run and scan the binary, which, if the binary is cross-compiled, would not
> typically be possible from the host system.
>
> Because of this limitation, we use several wrappers to call instead first out
> qemu, which runs the native scanner to create the binaries.
>
> There are seven total patches and four different wrapper files needed to
> successfully cross-compile and run this package, many of them are from
> open-embedded, but one of them is of my own doing.
>
> 1) Revert a previous, incomplete attempt at adding cross-compiling support.
>
> 2) Add support for cross-compiling with meson.
>
> 3) Disable tests.
>
> 4) Add an option to use a binary wrapper; this patch will force giscanner to
> use a wrapper executable to run binaries it's producing, instead of
> attempting to run them from the host.
>
> 5) Add an option to use an LDD wrapper, again, useful for cross-compiled
> environments.
>
> 6) Add a --lib-dirs-envar option to pass to giscanner. (See patch for details.)
>
> 7) Add rpath-links to ccompiler: when passing the PACKAGE_GIR_EXTRA_LIBS_PATH
> to the ccompiler.py script, ccompiler.py needs to add -Wl,-rpath-link to the
> environment for the package to correctly link against the passed on paths.
>
> 8) Ignore error return codes from ldd-wrapper because prelink-rtld returns 127
> when it can't find a library, which breaks subprocess.check_output().
>
> Signed-off-by: Adam Duskett <Aduskett at gmail.com>
Tested-by: Yegor Yefremov <yegorslists at googlemail.com>
Tested with a locally bumped python-gobject to 3.34.0.
Yegor
> ---
> Changes v16 -> v17:
> - Fix Config.in to be logical or for toolchain dependencies.
> - Modify the gobject-introspection-1.0.pc file to fix autotools build
> failures.
> - Write some better comments in the gobject-introspection.mk file.
> - Revert installing the wrappers to the host directory. This caused issues
> with autotools and with per-package directory building.
> - Update the error message in g-ir-scanner-qemuwrapper to apply better to
> Buildroot.
>
> Changes v15 -> v16:
> - Re-added missing Config.in entry.
> - Removed a set -x in g-ir-scanner-wrapper
> - Fixed paths in g-ir-compiler.in
> - Removed GOBJECT_INTROSPECTION_PC_FILE_FIXUP in gobject-introspection.mk
> because the toolsdir entry no longer exists in the .pc file.
> - Cleaned up the grammar in the commit message.
>
> Changes v14 -> v15:
> - Fixed number of patches in commit message. (Arnout)
> - Fixed license information (Adam)
> - Sorted dependencies (Arnout)
> - Removed redundant comment (Arnout)
> - Reordered host and target macros (Arnout)
> - Moved wrappers and wrapper installation logic to the host dir. (Arnout)
> - Combined the find functions in the target_finalize_hooks. (Arnout)
>
>
> Changes v13 -> v14:
> - Bump to version 1.62.0
>
> Changes v10 -> v11:
> - reorder config.in entries: arch deps first, then toolchain deps
> and order packages deps alphabetically (Yann)
> - drop dependency on threads, wchar, and !static: it's implicit from
> glibc (Yann)
> - Bump to version 1.60.2
> - Switched to a meson build system as autotools is no longer supported with
> gobject-introspection 1.60.x.
> - Removed the following patches that are no longer needed:
> - 0002-configure.ac-add-host-gi-gi-cross-wrapper-gi-ldd-wra.patch
> - 0005-user-PYTHON_CONFIG-to-find-includes.patch
> - 0008-fix-gobject-pc.file.patch
> - Add the following patches:
> - 0002-add-cross-compilation-support-to-meson.patch
> - 0003-meson.build-disable-tests-when-cross-compiling.patch
> - 0008-ignore-error-return-codes-from-ldd-wrapper.patch
>
> Changes v9 -> v10:
> - Makefile cleanup
> - Fix license syntax (Thomas)
> - Add libffi as a mandatory dependency (Thomas)
> - remove --disalbe-static (Thomas)
> - add --with-cairo if the cairo package is selected (Thomas)
> - Change PYTHON_INCLUDES to PYTHON_CONFIG in gobject-introspection.mk
> (Thomas)
> - Use | for all sed functions (Thomas)
> - Remove GOBJECT_INTROSPECTION_WRAPPERS (Thomas)
> - Add GOBJECT_INTROSPECTION_REMOVE_DEVELOPMENT_FILES target finalize
> hook. (Thomas)
> - Use $(dirname $0) in wrappers instead of $STAGING_DIR (Thomas)
> - Remove _GIR_EXTRA_LIBS_PATH in pkg-autotools.mk in favor of a
> seperate patch. (Thomas)
>
> Changes v8 -> v9:
> - Create the $(STAGING_DIR)/usr/lib/gio/modules-dummy directory in the
> GOBJECT_INTROSPECTION_POST_PATCH_HOOKS to prevent qemu from
> segfaulting when g-ir-scanner-qemuwrapper is ran.
> - Remove the $(STAGING_DIR) prefix from gobject-introspection-1.0.pc
> to prevent pkg-config from appending a second staging_dir to the path
> of the g-ir-compiler. This prevents packages such a gstreamer1 from
> trying to call $(STAGING_DIR)/$(STAGING_DIR)/usr/bin/g-ir-compiler,
> which will break the build.
>
> Changes v7 -> v8:
> - Add "select BR2_PACKAGE_HOST_PRELINK_CROSS" to Config.in
>
> Changes v6 -> v7:
> - Remove the cross-ldd script in favor of the prelink-cross package.
> - Install the ldd and qemu wrappers in a post patch hook seperate of
> the other wrappers.
> - Set --enable-introspection-data in the configure options.
>
> Changes v5 -> v6:
> - Update gobject-introspection to 1.56.1
> - Remove upstreamed 0008-add-Float128.patch
>
> Changes v4 -> v5:
> - Added a more detailed commit message (Yann)
> - Removed $HOST_DIR/bin/qemu- at HOST_QEMU_ARCH@ @HOST_QEMU_CPU_TUNE@
> in favor of @QEMU_USER@ (Thanks Yann)
>
> Changes v3 -> v4:
> - Removed RFC tag.
> - Added 0007-Add-rpath-links-to-ccompiler.patch
> - Removed config-paths-with-PKG_CONFIG_SYSROOT_DIR-.patch as it is not
> Yocto specific.
> - Added the _GIR_EXTRA_LIBS_PATH to pkg-autotools.mk. This allows
> package specific Gir libraries to be passed on to
> g-ir-scanner-qemuwrapper.
> - Fixed a typo in g-ir-scanner-qemuwrapper.in.
> - Remove BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS_TARGET in
> favor of BR2_PACKAGE_HOST_QEMU_ARCH_SUPPORTS
>
> Changes v2 -> v3:
> - Removed Linux kernel dependency (baruch)
> - Changed $(LINUX_VERSION) to $(BR2_TOOLCHAIN_HEADERS_AT_LEAST)
> (baruch)
> - Changed @LINUX_VERSION@ in g-ir-scanner-qemuwrapper.in to
> @TOOLCHAIN_HEADERS_VERSION@ to match the above variable change.
> - Added BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS_TARGET in
> Config.in with only BR2_arm selected for now.
> - Removed BR2_PACKAGE_HOST_QEMU_ARCH_SUPPORTS in favor of the above
> change.
> - Added two new lines in the base Makefile which removes any remaining
> .gir or .rnc files from the target filing system, as these are not
> needed or runtime, only compile time.
>
> Changes v1 -> v2:
> - Fixed wrappers
> - Added 0007-giscanner-add-a-lib-dirs-envvar-option.patch
> - Added 0008-add-Float128.patch
>
> DEVELOPERS | 1 +
> package/Config.in | 1 +
> ...lete-upstream-attempt-at-cross-compi.patch | 33 ++++
> ...d-cross-compilation-support-to-meson.patch | 163 ++++++++++++++++++
> .../0003-disable-tests.patch | 29 ++++
> ...canner-add-use-binary-wrapper-option.patch | 52 ++++++
> ...scanner-add-a-use-ldd-wrapper-option.patch | 48 ++++++
> ...scanner-add-a-lib-dirs-envvar-option.patch | 73 ++++++++
> .../0007-Add-rpath-links-to-ccompiler.patch | 29 ++++
> ...-error-return-codes-from-ldd-wrapper.patch | 28 +++
> package/gobject-introspection/Config.in | 33 ++++
> .../gobject-introspection/g-ir-compiler.in | 3 +
> .../g-ir-scanner-lddwrapper.in | 3 +
> .../g-ir-scanner-qemuwrapper.in | 17 ++
> package/gobject-introspection/g-ir-scanner.in | 8 +
> .../gobject-introspection.hash | 4 +
> .../gobject-introspection.mk | 133 ++++++++++++++
> 17 files changed, 658 insertions(+)
> create mode 100644 package/gobject-introspection/0001-Revert-an-incomplete-upstream-attempt-at-cross-compi.patch
> create mode 100644 package/gobject-introspection/0002-add-cross-compilation-support-to-meson.patch
> create mode 100644 package/gobject-introspection/0003-disable-tests.patch
> create mode 100644 package/gobject-introspection/0004-giscanner-add-use-binary-wrapper-option.patch
> create mode 100644 package/gobject-introspection/0005-giscanner-add-a-use-ldd-wrapper-option.patch
> create mode 100644 package/gobject-introspection/0006-giscanner-add-a-lib-dirs-envvar-option.patch
> create mode 100644 package/gobject-introspection/0007-Add-rpath-links-to-ccompiler.patch
> create mode 100644 package/gobject-introspection/0008-ignore-error-return-codes-from-ldd-wrapper.patch
> create mode 100644 package/gobject-introspection/Config.in
> create mode 100644 package/gobject-introspection/g-ir-compiler.in
> create mode 100644 package/gobject-introspection/g-ir-scanner-lddwrapper.in
> create mode 100644 package/gobject-introspection/g-ir-scanner-qemuwrapper.in
> create mode 100644 package/gobject-introspection/g-ir-scanner.in
> create mode 100644 package/gobject-introspection/gobject-introspection.hash
> create mode 100644 package/gobject-introspection/gobject-introspection.mk
>
> diff --git a/DEVELOPERS b/DEVELOPERS
> index 9fd2673243..481eec1a67 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -31,6 +31,7 @@ F: package/audit/
> F: package/busybox/
> F: package/checkpolicy/
> F: package/cppdb/
> +F: package/gobject-introspection/
> F: package/gstreamer1/gstreamer1/
> F: package/gstreamer1/gstreamer1-mm/
> F: package/gstreamer1/gst1-plugins-bad/
> diff --git a/package/Config.in b/package/Config.in
> index dfa3f34b9d..6201c5d2c7 100644
> --- a/package/Config.in
> +++ b/package/Config.in
> @@ -1772,6 +1772,7 @@ menu "Other"
> source "package/glibmm/Config.in"
> source "package/glm/Config.in"
> source "package/gmp/Config.in"
> + source "package/gobject-introspection/Config.in"
> source "package/gsl/Config.in"
> source "package/gtest/Config.in"
> source "package/jemalloc/Config.in"
> diff --git a/package/gobject-introspection/0001-Revert-an-incomplete-upstream-attempt-at-cross-compi.patch b/package/gobject-introspection/0001-Revert-an-incomplete-upstream-attempt-at-cross-compi.patch
> new file mode 100644
> index 0000000000..1e8bd3518a
> --- /dev/null
> +++ b/package/gobject-introspection/0001-Revert-an-incomplete-upstream-attempt-at-cross-compi.patch
> @@ -0,0 +1,33 @@
> +From 3a9d1e5ee0aae56fafec0beba2014c19e4ff310c Mon Sep 17 00:00:00 2001
> +From: Alexander Kanavin <alex.kanavin at gmail.com>
> +Date: Wed, 23 Mar 2016 17:07:28 +0200
> +Subject: [PATCH] Revert an incomplete upstream attempt at cross-compile support
> +
> +Upstream-Status: Pending
> +Signed-off-by: Alexander Kanavin <alex.kanavin at gmail.com>
> +Signed-off-by: Adam Duskett <aduskett at gmail.com>
> +---
> + common.mk | 4 ----
> + giscanner/gdumpparser.py | 6 ------
> + 2 files changed, 10 deletions(-)
> +
> +diff --git a/giscanner/gdumpparser.py b/giscanner/gdumpparser.py
> +index 1134f33..9bdc2bc 100644
> +--- a/giscanner/gdumpparser.py
> ++++ b/giscanner/gdumpparser.py
> +@@ -156,12 +156,6 @@ blob containing data gleaned from GObject's primitive introspection."""
> + out_path = os.path.join(self._binary.tmpdir, 'dump.xml')
> +
> + args = []
> +-
> +- # Prepend the launcher command and arguments, if defined
> +- launcher = os.environ.get('GI_CROSS_LAUNCHER')
> +- if launcher:
> +- args.extend(launcher.split())
> +-
> + args.extend(self._binary.args)
> + args.append('--introspect-dump=%s,%s' % (in_path, out_path))
> +
> +--
> +2.7.0
> +
> diff --git a/package/gobject-introspection/0002-add-cross-compilation-support-to-meson.patch b/package/gobject-introspection/0002-add-cross-compilation-support-to-meson.patch
> new file mode 100644
> index 0000000000..5e3ac59dd9
> --- /dev/null
> +++ b/package/gobject-introspection/0002-add-cross-compilation-support-to-meson.patch
> @@ -0,0 +1,163 @@
> +From 2b3bce1526b538dc2c7fa223eaf9808858aa1b06 Mon Sep 17 00:00:00 2001
> +From: Alexander Kanavin <alex.kanavin at gmail.com>
> +Date: Thu, 15 Nov 2018 15:10:05 +0100
> +Subject: [PATCH] add cross-compilation support to meson
> +
> +Upstream-Status: Pending
> +Signed-off-by: Alexander Kanavin <alex.kanavin at gmail.com>
> +Signed-off-by: Adam Duskett <aduskett at gmail.com>
> +---
> + gir/meson.build | 62 ++++++++++++++++++++++++++++++++++-------------
> + meson.build | 4 ++-
> + meson_options.txt | 20 +++++++++++++++
> + 3 files changed, 68 insertions(+), 18 deletions(-)
> +
> +diff --git a/gir/meson.build b/gir/meson.build
> +index 85ae575..327c134 100644
> +--- a/gir/meson.build
> ++++ b/gir/meson.build
> +@@ -36,16 +36,29 @@ gir_files = [
> + typelibdir = join_paths(get_option('libdir'), 'girepository-1.0')
> + install_data(gir_files, install_dir: girdir)
> +
> +-scanner_command = [
> +- python,
> +- girscanner,
> +- '--output=@OUTPUT@',
> +- '--no-libtool',
> +- '--quiet',
> +- '--reparse-validate',
> +- '--add-include-path', join_paths(meson.current_build_dir()),
> +- '--add-include-path', join_paths(meson.current_source_dir()),
> +-]
> ++if get_option('enable-host-gi')
> ++ scanner_command = [
> ++ 'g-ir-scanner',
> ++ '--output=@OUTPUT@',
> ++ '--no-libtool',
> ++ '--quiet',
> ++ '--reparse-validate',
> ++ '--add-include-path', join_paths(meson.current_build_dir()),
> ++ '--add-include-path', join_paths(meson.current_source_dir()),
> ++ ]
> ++else
> ++ scanner_command = [
> ++ python,
> ++ girscanner,
> ++ '--output=@OUTPUT@',
> ++ '--no-libtool',
> ++ '--quiet',
> ++ '--reparse-validate',
> ++ '--add-include-path', join_paths(meson.current_build_dir()),
> ++ '--add-include-path', join_paths(meson.current_source_dir()),
> ++ ]
> ++endif
> ++
> +
> + dep_type = glib_dep.type_name()
> + if dep_type == 'internal'
> +@@ -58,6 +71,12 @@ if dep_type == 'internal'
> + '--extra-library=glib-2.0', '--extra-library=gobject-2.0']
> + endif
> +
> ++if get_option('enable-gi-cross-wrapper') != ''
> ++ scanner_command += ['--use-binary-wrapper=' + get_option('enable-gi-cross-wrapper')]
> ++endif
> ++if get_option('enable-gi-ldd-wrapper') != ''
> ++ scanner_command += ['--use-ldd-wrapper=' + get_option('enable-gi-ldd-wrapper')]
> ++endif
> + # Take a glob and print to newlines
> + globber = '''
> + from glob import glob
> +@@ -84,8 +103,8 @@ glib_command = scanner_command + [
> +
> + if dep_type == 'pkgconfig'
> + glib_command += ['--external-library', '--pkg=glib-2.0']
> +- glib_libdir = glib_dep.get_pkgconfig_variable('libdir')
> +- glib_incdir = join_paths(glib_dep.get_pkgconfig_variable('includedir'), 'glib-2.0')
> ++ glib_libdir = get_option('pkgconfig-sysroot-path') + glib_dep.get_pkgconfig_variable('libdir')
> ++ glib_incdir = get_option('pkgconfig-sysroot-path') + join_paths(glib_dep.get_pkgconfig_variable('includedir'), 'glib-2.0')
> + glib_libincdir = join_paths(glib_libdir, 'glib-2.0', 'include')
> + glib_files += join_paths(glib_incdir, 'gobject', 'glib-types.h')
> + glib_files += join_paths(glib_libincdir, 'glibconfig.h')
> +@@ -339,7 +358,7 @@ endforeach
> + if giounix_dep.found()
> + if dep_type == 'pkgconfig'
> + gio_command += ['--pkg=gio-unix-2.0']
> +- giounix_includedir = join_paths(giounix_dep.get_pkgconfig_variable('includedir'), 'gio-unix-2.0')
> ++ giounix_includedir = get_option('pkgconfig-sysroot-path') + join_paths(giounix_dep.get_pkgconfig_variable('includedir'), 'gio-unix-2.0')
> + # Get the installed gio-unix header list
> + ret = run_command(python, '-c', globber.format(join_paths(giounix_includedir, 'gio', '*.h')))
> + if ret.returncode() != 0
> +@@ -422,15 +441,24 @@ gir_files += custom_target('gir-girepository',
> + )
> +
> + typelibs = []
> ++if get_option('enable-gi-cross-wrapper') != ''
> ++ gircompiler_command = [get_option('enable-gi-cross-wrapper'), gircompiler.full_path(), '-o', '@OUTPUT@', '@INPUT@',
> ++ '--includedir', meson.current_build_dir(),
> ++ '--includedir', meson.current_source_dir(),
> ++ ]
> ++else
> ++ gircompiler_command = [gircompiler, '-o', '@OUTPUT@', '@INPUT@',
> ++ '--includedir', meson.current_build_dir(),
> ++ '--includedir', meson.current_source_dir(),
> ++ ]
> ++endif
> ++
> + foreach gir : gir_files
> + typelibs += custom_target('generate-typelib- at 0@'.format(gir).underscorify(),
> + input: gir,
> + output: '@BASENAME at .typelib',
> + depends: [gobject_gir, ],
> +- command: [gircompiler, '-o', '@OUTPUT@', '@INPUT@',
> +- '--includedir', meson.current_build_dir(),
> +- '--includedir', meson.current_source_dir(),
> +- ],
> ++ command: gircompiler_command,
> + install: true,
> + install_dir: typelibdir,
> + )
> +diff --git a/meson.build b/meson.build
> +index 95bbd2b..f7baefd 100644
> +--- a/meson.build
> ++++ b/meson.build
> +@@ -163,7 +163,9 @@ endif
> + subdir('girepository')
> + subdir('tools')
> + subdir('giscanner')
> +-subdir('gir')
> ++if get_option('enable-introspection-data') == true
> ++ subdir('gir')
> ++endif
> + subdir('examples')
> + subdir('docs')
> + subdir('tests')
> +diff --git a/meson_options.txt b/meson_options.txt
> +index 445a68a..a325511 100644
> +--- a/meson_options.txt
> ++++ b/meson_options.txt
> +@@ -25,3 +25,23 @@ option('python', type: 'string', value: 'python3',
> + option('gir_dir_prefix', type: 'string',
> + description: 'Intermediate prefix for gir installation under ${prefix}'
> + )
> ++
> ++option('enable-host-gi', type: 'boolean', value : false,
> ++ description: 'Use gobject introspection tools installed in the host system (useful when cross-compiling)'
> ++)
> ++
> ++option('enable-gi-cross-wrapper', type: 'string',
> ++ description: 'Use a wrapper to run gicompiler and binaries produced by giscanner (useful when cross-compiling)'
> ++)
> ++
> ++option('enable-gi-ldd-wrapper', type: 'string',
> ++ description: 'Use a ldd wrapper instead of system ldd command in giscanner (useful when cross-compiling)'
> ++)
> ++
> ++option('enable-introspection-data', type: 'boolean', value : true,
> ++ description: 'Build introspection data (.gir and .typelib files) in addition to library and tools'
> ++)
> ++
> ++option('pkgconfig-sysroot-path', type: 'string',
> ++ description: 'Specify a sysroot path to prepend to pkgconfig output (useful when cross-compiling)'
> ++)
> diff --git a/package/gobject-introspection/0003-disable-tests.patch b/package/gobject-introspection/0003-disable-tests.patch
> new file mode 100644
> index 0000000000..fcc5a794f3
> --- /dev/null
> +++ b/package/gobject-introspection/0003-disable-tests.patch
> @@ -0,0 +1,29 @@
> +From 473b4288d8f4e891d0d21f7b60ef8053c5cd7af9 Mon Sep 17 00:00:00 2001
> +From: Adam Duskett <aduskett at gmail.com>
> +Date: Mon, 3 Feb 2020 10:07:15 -0800
> +Subject: [PATCH] disable tests
> +
> +If introspection data on the host is not built, meson throws the error:
> +"Unknown variable "typelibs". Because tests are not required, removing
> +the subdir tests alltogether fixes this issue.
> +
> +Signed-off-by: Adam Duskett <aduskett at gmail.com>
> +---
> + meson.build | 1 -
> + 1 file changed, 1 deletion(-)
> +
> +diff --git a/meson.build b/meson.build
> +index a5e825f..981e936 100644
> +--- a/meson.build
> ++++ b/meson.build
> +@@ -171,7 +171,6 @@ subdir('giscanner')
> + subdir('gir')
> + subdir('examples')
> + subdir('docs')
> +-subdir('tests')
> +
> + install_data('Makefile.introspection', install_dir: join_paths(get_option('datadir'), 'gobject-introspection-1.0'))
> + install_data('m4/introspection.m4', install_dir: join_paths(get_option('datadir'), 'aclocal'))
> +--
> +2.24.1
> +
> diff --git a/package/gobject-introspection/0004-giscanner-add-use-binary-wrapper-option.patch b/package/gobject-introspection/0004-giscanner-add-use-binary-wrapper-option.patch
> new file mode 100644
> index 0000000000..cffc2d954d
> --- /dev/null
> +++ b/package/gobject-introspection/0004-giscanner-add-use-binary-wrapper-option.patch
> @@ -0,0 +1,52 @@
> +From 704b888d0abfb01067352c40156f49f655691c7c Mon Sep 17 00:00:00 2001
> +From: Alexander Kanavin <alex.kanavin at gmail.com>
> +Date: Mon, 19 Oct 2015 18:26:40 +0300
> +Subject: [PATCH] giscanner: add --use-binary-wrapper option
> +
> +With this option, giscanner will use a wrapper executable to run
> +binaries it's producing, instead of running them directly. This
> +is useful when binaries are cross-compiled and cannot be run directly,
> +but they can be run using for example QEMU emulation.
> +
> +Upstream-Status: Pending [review on oe-core list]
> +Signed-off-by: Alexander Kanavin <alex.kanavin at gmail.com>
> +Signed-off-by: Adam Duskett <aduskett at gmail.com>
> +---
> + giscanner/scannermain.py | 14 ++++++++++++++
> + 1 file changed, 14 insertions(+)
> +
> +diff --git a/giscanner/scannermain.py b/giscanner/scannermain.py
> +index 633496f..d684cd0 100755
> +--- a/giscanner/scannermain.py
> ++++ b/giscanner/scannermain.py
> +@@ -120,6 +120,9 @@ def _get_option_parser():
> + parser.add_option("", "--program",
> + action="store", dest="program", default=None,
> + help="program to execute")
> ++ parser.add_option("", "--use-binary-wrapper",
> ++ action="store", dest="wrapper", default=None,
> ++ help="wrapper to use for running programs (useful when cross-compiling)")
> + parser.add_option("", "--program-arg",
> + action="append", dest="program_args", default=[],
> + help="extra arguments to program")
> +@@ -417,6 +420,17 @@ def create_binary(transformer, options, args):
> + gdump_parser.get_error_quark_functions())
> +
> + shlibs = resolve_shlibs(options, binary, options.libraries)
> ++ if options.wrapper:
> ++ # The wrapper needs the binary itself, not the libtool wrapper script,
> ++ # so we check if libtool has sneaked the binary into .libs subdirectory
> ++ # and adjust the path accordingly
> ++ import os.path
> ++ dir_name, binary_name = os.path.split(binary.args[0])
> ++ libtool_binary = os.path.join(dir_name, '.libs', binary_name)
> ++ if os.path.exists(libtool_binary):
> ++ binary.args[0] = libtool_binary
> ++ # Then prepend the wrapper to the command line to execute
> ++ binary.args = [options.wrapper] + binary.args
> + gdump_parser.set_introspection_binary(binary)
> + gdump_parser.parse()
> + return shlibs
> +--
> +2.7.0
> +
> diff --git a/package/gobject-introspection/0005-giscanner-add-a-use-ldd-wrapper-option.patch b/package/gobject-introspection/0005-giscanner-add-a-use-ldd-wrapper-option.patch
> new file mode 100644
> index 0000000000..386c1c34b0
> --- /dev/null
> +++ b/package/gobject-introspection/0005-giscanner-add-a-use-ldd-wrapper-option.patch
> @@ -0,0 +1,48 @@
> +From d4ad57fd4a32c4f0d2f0522a3090ef940746431b Mon Sep 17 00:00:00 2001
> +From: Alexander Kanavin <alex.kanavin at gmail.com>
> +Date: Fri, 30 Oct 2015 16:28:46 +0200
> +Subject: [PATCH] giscanner: add a --use-ldd-wrapper option
> +
> +This is useful in cross-compile environments where system's ldd
> +command does not work on binaries built for a different architecture
> +
> +Upstream-Status: Pending [review in oe-core]
> +Signed-off-by: Alexander Kanavin <alex.kanavin at gmail.com>
> +Signed-off-by: Adam Duskett <aduskett at gmail.com>
> +---
> + giscanner/scannermain.py | 3 +++
> + giscanner/shlibs.py | 4 +++-
> + 2 files changed, 6 insertions(+), 1 deletion(-)
> +
> +diff --git a/giscanner/scannermain.py b/giscanner/scannermain.py
> +index d684cd0..1b3b369 100755
> +--- a/giscanner/scannermain.py
> ++++ b/giscanner/scannermain.py
> +@@ -123,6 +123,9 @@ def _get_option_parser():
> + parser.add_option("", "--use-binary-wrapper",
> + action="store", dest="wrapper", default=None,
> + help="wrapper to use for running programs (useful when cross-compiling)")
> ++ parser.add_option("", "--use-ldd-wrapper",
> ++ action="store", dest="ldd_wrapper", default=None,
> ++ help="wrapper to use instead of ldd (useful when cross-compiling)")
> + parser.add_option("", "--program-arg",
> + action="append", dest="program_args", default=[],
> + help="extra arguments to program")
> +diff --git a/giscanner/shlibs.py b/giscanner/shlibs.py
> +index c93d20c..c5b5942 100644
> +--- a/giscanner/shlibs.py
> ++++ b/giscanner/shlibs.py
> +@@ -97,7 +97,9 @@ def _resolve_non_libtool(options, binary, libraries):
> + args.extend(libtool)
> + args.append('--mode=execute')
> + platform_system = platform.system()
> +- if platform_system == 'Darwin':
> ++ if options.ldd_wrapper:
> ++ args.extend([options.ldd_wrapper, binary.args[0]])
> ++ elif platform_system == 'Darwin':
> + args.extend(['otool', '-L', binary.args[0]])
> + else:
> + args.extend(['ldd', binary.args[0]])
> +--
> +2.7.0
> +
> diff --git a/package/gobject-introspection/0006-giscanner-add-a-lib-dirs-envvar-option.patch b/package/gobject-introspection/0006-giscanner-add-a-lib-dirs-envvar-option.patch
> new file mode 100644
> index 0000000000..06f5635610
> --- /dev/null
> +++ b/package/gobject-introspection/0006-giscanner-add-a-lib-dirs-envvar-option.patch
> @@ -0,0 +1,73 @@
> +From 3a9b3d8179b7eb9d2cc93da31578945bc03a45c3 Mon Sep 17 00:00:00 2001
> +From: Alexander Kanavin <alex.kanavin at gmail.com>
> +Date: Fri, 27 Apr 2018 12:56:15 -0400
> +Subject: [PATCH] giscanner: add a --lib-dirs-envvar option
> +
> +By default LD_LIBRARY_PATH is set to the list of target library paths;
> +this breaks down in cross-compilation environment, as we need to run a
> +native emulation wrapper rather than the target binary itself. This patch
> +allows exporting those paths to a different environment variable
> +which can be picked up and used by the wrapper.
> +
> +Upstream-Status: Pending
> +Signed-off-by: Alexander Kanavin <alex.kanavin at gmail.com>
> +Signed-off-by: Adam Duskett <aduskett at gmail.com>
> +---
> + giscanner/ccompiler.py | 4 ++--
> + giscanner/dumper.py | 3 ++-
> + giscanner/scannermain.py | 3 +++
> + 3 files changed, 7 insertions(+), 3 deletions(-)
> +
> +diff --git a/giscanner/ccompiler.py b/giscanner/ccompiler.py
> +index d10327c..6cf25d5 100644
> +--- a/giscanner/ccompiler.py
> ++++ b/giscanner/ccompiler.py
> +@@ -174,7 +174,7 @@ class CCompiler(object):
> +
> + self._cflags_no_deprecation_warnings = "-Wno-deprecated-declarations"
> +
> +- def get_internal_link_flags(self, args, libtool, libraries, extra_libraries, libpaths):
> ++ def get_internal_link_flags(self, args, libtool, libraries, extra_libraries, libpaths, lib_dirs_envvar):
> + # An "internal" link is where the library to be introspected
> + # is being built in the current directory.
> +
> +@@ -184,7 +184,7 @@ class CCompiler(object):
> + if os.name == 'nt':
> + runtime_path_envvar = ['LIB', 'PATH']
> + else:
> +- runtime_path_envvar = ['LD_LIBRARY_PATH', 'DYLD_FALLBACK_LIBRARY_PATH']
> ++ runtime_path_envvar = ['LD_LIBRARY_PATH', 'DYLD_FALLBACK_LIBRARY_PATH'] if not lib_dirs_envvar else [lib_dirs_envvar]
> + # Search the current directory first
> + # (This flag is not supported nor needed for Visual C++)
> + args.append('-L.')
> +diff --git a/giscanner/dumper.py b/giscanner/dumper.py
> +index 3c7220b..0abd565 100644
> +--- a/giscanner/dumper.py
> ++++ b/giscanner/dumper.py
> +@@ -244,7 +244,8 @@ class DumpCompiler(object):
> + libtool,
> + self._options.libraries,
> + self._options.extra_libraries,
> +- self._options.library_paths)
> ++ self._options.library_paths,
> ++ self._options.lib_dirs_envvar)
> + args.extend(pkg_config_libs)
> +
> + else:
> +diff --git a/giscanner/scannermain.py b/giscanner/scannermain.py
> +index d262785..51c9570 100755
> +--- a/giscanner/scannermain.py
> ++++ b/giscanner/scannermain.py
> +@@ -126,6 +126,9 @@ def _get_option_parser():
> + parser.add_option("", "--use-ldd-wrapper",
> + action="store", dest="ldd_wrapper", default=None,
> + help="wrapper to use instead of ldd (useful when cross-compiling)")
> ++ parser.add_option("", "--lib-dirs-envvar",
> ++ action="store", dest="lib_dirs_envvar", default=None,
> ++ help="environment variable to write a list of library directories to (for running the transient binary), instead of standard LD_LIBRARY_PATH")
> + parser.add_option("", "--program-arg",
> + action="append", dest="program_args", default=[],
> + help="extra arguments to program")
> +--
> +2.14.3
> +
> diff --git a/package/gobject-introspection/0007-Add-rpath-links-to-ccompiler.patch b/package/gobject-introspection/0007-Add-rpath-links-to-ccompiler.patch
> new file mode 100644
> index 0000000000..08835d3ecc
> --- /dev/null
> +++ b/package/gobject-introspection/0007-Add-rpath-links-to-ccompiler.patch
> @@ -0,0 +1,29 @@
> +From 72a427bc50daee8f1ded0e9221e53dbbf2a80f08 Mon Sep 17 00:00:00 2001
> +From: Adam Duskett <aduskett at gmail.com>
> +Date: Wed, 14 Mar 2018 12:07:10 -0400
> +Subject: [PATCH] Add rpath links to ccompiler
> +
> +This patch allows gobject-introspection to process extra paths passed to the
> +compiler via the GIR_EXTRA_LIBS_PATH variable.
> +
> +Signed-off-by: Adam Duskett <aduskett at gmail.com>
> +---
> + giscanner/ccompiler.py | 2 ++
> + 1 file changed, 2 insertions(+)
> +
> +diff --git a/giscanner/ccompiler.py b/giscanner/ccompiler.py
> +index a8bd5b1..51bb9bc 100644
> +--- a/giscanner/ccompiler.py
> ++++ b/giscanner/ccompiler.py
> +@@ -229,6 +229,8 @@ class CCompiler(object):
> +
> + for envvar in runtime_path_envvar:
> + if envvar in os.environ:
> ++ for envvar_path in os.environ[envvar].split(':'):
> ++ args.append("-Wl,-rpath-link," + envvar_path)
> + os.environ[envvar] = \
> + os.pathsep.join(runtime_paths + [os.environ[envvar]])
> + else:
> +--
> +2.14.3
> +
> diff --git a/package/gobject-introspection/0008-ignore-error-return-codes-from-ldd-wrapper.patch b/package/gobject-introspection/0008-ignore-error-return-codes-from-ldd-wrapper.patch
> new file mode 100644
> index 0000000000..568758d332
> --- /dev/null
> +++ b/package/gobject-introspection/0008-ignore-error-return-codes-from-ldd-wrapper.patch
> @@ -0,0 +1,28 @@
> +From f742da8b3913f4818d3f419117076afe62f4dbf4 Mon Sep 17 00:00:00 2001
> +From: Alexander Kanavin <alex.kanavin at 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 at gmail.com>
> +Signed-off-by: Adam Duskett <aduskett at 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/package/gobject-introspection/Config.in b/package/gobject-introspection/Config.in
> new file mode 100644
> index 0000000000..f33d803f81
> --- /dev/null
> +++ b/package/gobject-introspection/Config.in
> @@ -0,0 +1,33 @@
> +config BR2_PACKAGE_GOBJECT_INTROSPECTION
> + bool "gobject-introspection"
> + # While gcc 4.8 might be compatible with gobject-introspection,
> + # The autobuilders use some toolchains from codesourcery which
> + # have gcc 4.8 and a very old version of glibc, which will cause
> + # compile errors with locale.c. As such, require 4.9 until this
> + # can be verified.
> + depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
> + depends on BR2_USE_MMU # python3, libglib2
> + depends on BR2_PACKAGE_HOST_QEMU_ARCH_SUPPORTS
> + depends on BR2_TOOLCHAIN_USES_GLIBC
> + select BR2_PACKAGE_HOST_PRELINK_CROSS
> + select BR2_PACKAGE_HOST_QEMU
> + select BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE
> + select BR2_PACKAGE_LIBFFI
> + select BR2_PACKAGE_LIBGLIB2
> + select BR2_PACKAGE_PYTHON3 if !BR2_PACKAGE_PYTHON
> + select BR2_PACKAGE_ZLIB
> + help
> + GObject introspection is a middleware layer between C
> + libraries (using GObject) and language bindings. The C library
> + can be scanned at compile time and generate a metadata file,
> + in addition to the actual native C library. Then at runtime,
> + language bindings can read this metadata and automatically
> + provide bindings to call into the C library.
> +
> + https://wiki.gnome.org/action/show/Projects/GObjectIntrospection
> +
> +comment "gobject-introspection needs a glibc toolchain, gcc >= 4.9"
> + depends on BR2_USE_MMU
> + depends on BR2_PACKAGE_HOST_QEMU_ARCH_SUPPORTS
> + depends on !BR2_TOOLCHAIN_USES_GLIBC || \
> + !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
> diff --git a/package/gobject-introspection/g-ir-compiler.in b/package/gobject-introspection/g-ir-compiler.in
> new file mode 100644
> index 0000000000..02d7c15c38
> --- /dev/null
> +++ b/package/gobject-introspection/g-ir-compiler.in
> @@ -0,0 +1,3 @@
> +#!/usr/bin/env bash
> +
> +$(dirname $0)/g-ir-scanner-qemuwrapper $(dirname $0)/g-ir-compiler.real "$@"
> \ No newline at end of file
> diff --git a/package/gobject-introspection/g-ir-scanner-lddwrapper.in b/package/gobject-introspection/g-ir-scanner-lddwrapper.in
> new file mode 100644
> index 0000000000..d7639c5c81
> --- /dev/null
> +++ b/package/gobject-introspection/g-ir-scanner-lddwrapper.in
> @@ -0,0 +1,3 @@
> +#!/usr/bin/env bash
> +
> +${HOST_DIR}/sbin/prelink-rtld --root=$(dirname $0)/../../ "$@"
> \ No newline at end of file
> diff --git a/package/gobject-introspection/g-ir-scanner-qemuwrapper.in b/package/gobject-introspection/g-ir-scanner-qemuwrapper.in
> new file mode 100644
> index 0000000000..6e433eb300
> --- /dev/null
> +++ b/package/gobject-introspection/g-ir-scanner-qemuwrapper.in
> @@ -0,0 +1,17 @@
> +#!/usr/bin/env bash
> +
> +# Pass -r to qemu-user as to trick glibc into not errorings out if the host kernel
> +# is older than the target kernel.
> +# Use a modules directory which does not exist so we don't load random things
> +# which may then get deleted (or their dependencies) and potentially segfault
> +GIO_MODULE_DIR=$(dirname $0)/../lib/gio/modules-dummy \
> + at QEMU_USER@ -r @TOOLCHAIN_HEADERS_VERSION@ \
> +-L $(dirname $0)/../../ \
> +-E LD_LIBRARY_PATH=${GIR_EXTRA_LIBS_PATH}:.libs:$(dirname $0)/../lib:$(dirname $0)/../../lib \
> +"$@"
> +
> +if [[ $? -ne 0 ]]; then
> + echo "If the above error message is about missing .so libraries, then setting up GIR_EXTRA_LIBS_PATH in the .mk file should help."
> + echo 'Typically like this: PKG_MAKE_ENV += GIR_EXTRA_LIBS_PATH="$(@D)/.libs"'
> + exit 1
> +fi
> \ No newline at end of file
> diff --git a/package/gobject-introspection/g-ir-scanner.in b/package/gobject-introspection/g-ir-scanner.in
> new file mode 100644
> index 0000000000..9f97497b7e
> --- /dev/null
> +++ b/package/gobject-introspection/g-ir-scanner.in
> @@ -0,0 +1,8 @@
> +#!/usr/bin/env bash
> +
> +export GI_SCANNER_DISABLE_CACHE=1
> +${HOST_DIR}/bin/g-ir-scanner \
> +--lib-dirs-envvar=GIR_EXTRA_LIBS_PATH \
> +--use-binary-wrapper=$(dirname $0)/g-ir-scanner-qemuwrapper \
> +--use-ldd-wrapper=$(dirname $0)/g-ir-scanner-lddwrapper \
> +--add-include-path=$(dirname $0)/../share/gir-1.0 "$@"
> diff --git a/package/gobject-introspection/gobject-introspection.hash b/package/gobject-introspection/gobject-introspection.hash
> new file mode 100644
> index 0000000000..0454c59565
> --- /dev/null
> +++ b/package/gobject-introspection/gobject-introspection.hash
> @@ -0,0 +1,4 @@
> +#From http://ftp.gnome.org/pub/GNOME/sources/gobject-introspection/1.62/gobject-introspection-1.62.0.sha256sum
> +sha256 b1ee7ed257fdbc008702bdff0ff3e78a660e7e602efa8f211dc89b9d1e7d90a2 gobject-introspection-1.62.0.tar.xz
> +sha256 d245807f90032872d1438d741ed21e2490e1175dc8aa3afa5ddb6c8e529b58e5 COPYING.LGPL
> +sha256 32b1062f7da84967e7019d01ab805935caa7ab7321a7ced0e30ebe75e5df1670 COPYING.GPL
> diff --git a/package/gobject-introspection/gobject-introspection.mk b/package/gobject-introspection/gobject-introspection.mk
> new file mode 100644
> index 0000000000..67e5e37dee
> --- /dev/null
> +++ b/package/gobject-introspection/gobject-introspection.mk
> @@ -0,0 +1,133 @@
> +################################################################################
> +#
> +# gobject-introspection
> +#
> +################################################################################
> +
> +GOBJECT_INTROSPECTION_VERSION_MAJOR = 1.62
> +GOBJECT_INTROSPECTION_VERSION = $(GOBJECT_INTROSPECTION_VERSION_MAJOR).0
> +GOBJECT_INTROSPECTION_SITE = http://ftp.gnome.org/pub/GNOME/sources/gobject-introspection/$(GOBJECT_INTROSPECTION_VERSION_MAJOR)
> +GOBJECT_INTROSPECTION_SOURCE = gobject-introspection-$(GOBJECT_INTROSPECTION_VERSION).tar.xz
> +GOBJECT_INTROSPECTION_INSTALL_STAGING = YES
> +GOBJECT_INTROSPECTION_AUTORECONF = YES
> +GOBJECT_INTROSPECTION_LICENSE = LGPL-2.0+, GPL-2.0+, BSD-2-Clause
> +GOBJECT_INTROSPECTION_LICENSE_FILES = COPYING.LGPL COPYING.GPL giscanner/scannerlexer.l
> +
> +GOBJECT_INTROSPECTION_DEPENDENCIES = \
> + host-autoconf-archive \
> + host-gobject-introspection \
> + host-prelink-cross \
> + host-qemu \
> + libffi \
> + libglib2 \
> + python3 \
> + zlib
> +
> +HOST_GOBJECT_INTROSPECTION_DEPENDENCIES = \
> + host-bison \
> + host-flex \
> + host-libglib2 \
> + host-python3
> +
> +# g-ir-scanner will default to /usr/bin/ld for linking if this is not set.
> +GOBJECT_INTROSPECTION_NINJA_ENV += \
> + CC="$(TARGET_CC)"
> +
> +# Disable introspection data on the host, as it is not needed and
> +# the package will attempt to use the systems libglib2 which will fail
> +# if the systems libglib2 version is older than 2.60.
> +HOST_GOBJECT_INTROSPECTION_CONF_OPTS = \
> + -Denable-introspection-data=false
> +
> +# Use the host gi-scanner to prevent the scanner from generating incorrect
> +# elf classes.
> +GOBJECT_INTROSPECTION_CONF_OPTS = \
> + -Denable-host-gi=true \
> + -Denable-gi-cross-wrapper="$(STAGING_DIR)/usr/bin/g-ir-scanner-qemuwrapper" \
> + -Denable-gi-ldd-wrapper="$(STAGING_DIR)/usr/bin/g-ir-scanner-lddwrapper" \
> + -Denable-introspection-data=true
> +
> +ifeq ($(BR2_PACKAGE_CAIRO),y)
> +GOBJECT_INTROSPECTION_DEPENDENCIES += cairo
> +GOBJECT_INTROSPECTION_CONF_OPTS += -Dcairo=true
> +endif
> +
> +# GI_SCANNER_DISABLE_CACHE=1 prevents g-ir-scanner from writing cache data to ${HOME}
> +GOBJECT_INTROSPECTION_CONF_ENV = \
> + GI_SCANNER_DISABLE_CACHE=1
> +
> +HOST_GOBJECT_INTROSPECTION_CONF_ENV = \
> + GI_SCANNER_DISABLE_CACHE=1
> +
> +# Make sure g-ir-tool-template uses the host python.
> +define GOBJECT_INTROSPECTION_FIX_TOOLTEMPLATE_PYTHON_PATH
> + $(SED) '1s%#!.*%#!$(HOST_DIR)/bin/python%' $(@D)/tools/g-ir-tool-template.in
> +endef
> +HOST_GOBJECT_INTROSPECTION_PRE_CONFIGURE_HOOKS += GOBJECT_INTROSPECTION_FIX_TOOLTEMPLATE_PYTHON_PATH
> +
> +# Perform the following:
> +# - Just as above, Ensure that g-ir-tool-template.in uses the host python.
> +# - Install all of the wrappers needed to build gobject-introspection.
> +# - Create a safe modules directory which does not exist so we don't load random things
> +# which may then get deleted (or their dependencies) and potentially segfault
> +define GOBJECT_INTROSPECTION_INSTALL_PRE_WRAPPERS
> + $(SED) '1s%#!.*%#!$(HOST_DIR)/bin/python%' $(@D)/tools/g-ir-tool-template.in
> +
> + $(INSTALL) -D -m 755 $(GOBJECT_INTROSPECTION_PKGDIR)/g-ir-scanner-lddwrapper.in \
> + $(STAGING_DIR)/usr/bin/g-ir-scanner-lddwrapper
> +
> + $(INSTALL) -D -m 755 $(GOBJECT_INTROSPECTION_PKGDIR)/g-ir-scanner-qemuwrapper.in \
> + $(STAGING_DIR)/usr/bin/g-ir-scanner-qemuwrapper
> + $(SED) "s%@QEMU_USER@%$(QEMU_USER)%g" \
> + $(STAGING_DIR)/usr/bin/g-ir-scanner-qemuwrapper
> + $(SED) "s%@TOOLCHAIN_HEADERS_VERSION@%$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)%g" \
> + $(STAGING_DIR)/usr/bin/g-ir-scanner-qemuwrapper
> +
> + # Use a modules directory which does not exist so we don't load random things
> + # which may then get deleted (or their dependencies) and potentially segfault
> + mkdir -p $(STAGING_DIR)/usr/lib/gio/modules-dummy
> +endef
> +GOBJECT_INTROSPECTION_PRE_CONFIGURE_HOOKS += GOBJECT_INTROSPECTION_INSTALL_PRE_WRAPPERS
> +
> +# Move the real compiler and scanner to .real, and replace them with the wrappers.
> +# Using .real has the following advantages:
> +# - There is no need to change the logic for other packages.
> +# - The wrappers call the .real files using qemu.
> +define GOBJECT_INTROSPECTION_INSTALL_WRAPPERS
> + # Move the real binaries to their names.real, then replace them with
> + # the wrappers.
> + $(foreach w,g-ir-compiler g-ir-scanner,
> + mv $(STAGING_DIR)/usr/bin/$(w) $(STAGING_DIR)/usr/bin/$(w).real
> + $(INSTALL) -D -m 755 \
> + $(GOBJECT_INTROSPECTION_PKGDIR)/$(w).in $(STAGING_DIR)/usr/bin/$(w)
> + )
> + # Gobject-introspection installs Makefile.introspection in
> + # $(STAGING_DIR)/usr/share which is needed for autotools-based programs to
> + # build .gir and .typelib files. Unfortuantly, gobject-introspection-1.0.pc
> + # uses $(prefix)/share as the directory, which
> + # causes the host /usr/share being used instead of $(STAGING_DIR)/usr/share.
> + # Change datarootdir to $(libdir)/../share which will prefix $(STAGING_DIR)
> + # to the correct location.
> + $(SED) "s%datarootdir=.*%datarootdir=\$${libdir}/../share%g" \
> + $(STAGING_DIR)/usr/lib/pkgconfig/gobject-introspection-1.0.pc
> +
> + # By default, girdir and typelibdir use datadir and libdir as their prefix,
> + # of which pkg-config appends the sysroot directory. This results in files
> + # being installed in $(STAGING_DIR)/$(STAGING_DIR)/path/to/files.
> + # Changing the prefix to exec_prefix prevents this error.
> + $(SED) "s%girdir=.*%girdir=\$${exec_prefix}/share/gir-1.0%g" \
> + $(STAGING_DIR)/usr/lib/pkgconfig/gobject-introspection-1.0.pc
> +
> + $(SED) "s%typelibdir=.*%typelibdir=\$${exec_prefix}/lib/girepository-1.0%g" \
> + $(STAGING_DIR)/usr/lib/pkgconfig/gobject-introspection-1.0.pc
> +endef
> +GOBJECT_INTROSPECTION_POST_INSTALL_STAGING_HOOKS += GOBJECT_INTROSPECTION_INSTALL_WRAPPERS
> +
> +# Only .typelib files are needed to run.
> +define GOBJECT_INTROSPECTION_REMOVE_DEVELOPMENT_FILES
> + find $(TARGET_DIR)/usr/share \( -iname "*.gir" -o -iname \*.rnc \) -delete
> +endef
> +GOBJECT_INTROSPECTION_TARGET_FINALIZE_HOOKS += GOBJECT_INTROSPECTION_REMOVE_DEVELOPMENT_FILES
> +
> +$(eval $(meson-package))
> +$(eval $(host-meson-package))
> --
> 2.21.1 (Apple Git-122.3)
>
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
More information about the buildroot
mailing list