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/
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"
--- /dev/null
+From 3a9d1e5ee0aae56fafec0beba2014c19e4ff310c Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@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@gmail.com>
+Signed-off-by: Adam Duskett <aduskett@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
+
--- /dev/null
+From 2b3bce1526b538dc2c7fa223eaf9808858aa1b06 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@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@gmail.com>
+Signed-off-by: Adam Duskett <aduskett@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-@0@'.format(gir).underscorify(),
+ input: gir,
+ output: '@BASENAME@.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)'
++)
--- /dev/null
+From 473b4288d8f4e891d0d21f7b60ef8053c5cd7af9 Mon Sep 17 00:00:00 2001
+From: Adam Duskett <aduskett@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@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
+
--- /dev/null
+From 704b888d0abfb01067352c40156f49f655691c7c Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@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@gmail.com>
+Signed-off-by: Adam Duskett <aduskett@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
+
--- /dev/null
+From d4ad57fd4a32c4f0d2f0522a3090ef940746431b Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@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@gmail.com>
+Signed-off-by: Adam Duskett <aduskett@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
+
--- /dev/null
+From 3a9b3d8179b7eb9d2cc93da31578945bc03a45c3 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@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@gmail.com>
+Signed-off-by: Adam Duskett <aduskett@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
+
--- /dev/null
+From 72a427bc50daee8f1ded0e9221e53dbbf2a80f08 Mon Sep 17 00:00:00 2001
+From: Adam Duskett <aduskett@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@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
+
--- /dev/null
+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>
+Signed-off-by: Adam Duskett <aduskett@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")
+
--- /dev/null
+config BR2_PACKAGE_GOBJECT_INTROSPECTION
+ bool "gobject-introspection"
+ depends on BR2_USE_MMU # python3, libglib2
+ depends on BR2_PACKAGE_HOST_QEMU_ARCH_SUPPORTS
+ # 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_TOOLCHAIN_USES_GLIBC
+ 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
--- /dev/null
+#!/usr/bin/env bash
+
+$(dirname $0)/g-ir-scanner-qemuwrapper $(dirname $0)/g-ir-compiler.real "$@"
\ No newline at end of file
--- /dev/null
+#!/usr/bin/env bash
+
+${HOST_DIR}/sbin/prelink-rtld --root=$(dirname $0)/../../ "$@"
\ No newline at end of file
--- /dev/null
+#!/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 \
+@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
--- /dev/null
+#!/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 "$@"
--- /dev/null
+#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
--- /dev/null
+################################################################################
+#
+# 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))