config BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS
	bool
	default y
	depends on BR2_PACKAGE_HOST_QEMU_ARCH_SUPPORTS

config BR2_PACKAGE_GOBJECT_INTROSPECTION
	bool "gobject-introspection"
	depends on BR2_USE_MMU # python3, libglib2
	depends on BR2_PACKAGE_GOBJECT_INTROSPECTION_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_HOST_GCC_AT_LEAST_8 # host-qemu
	depends on BR2_TOOLCHAIN_USES_GLIBC
	# gobject-introspection does not require python3 to run on the
	# target; however, because the tools run in a qemu wrapper, a
	# cross-compiled python3 must be installed to staging. As there
	# is no current mechanism to tell Buildroot only to install
	# python to staging, then python must also be installed
	# unconditionally to the target when building
	# gobject-introspection.
	depends on BR2_PACKAGE_PYTHON3
	select BR2_PACKAGE_HOST_QEMU
	select BR2_PACKAGE_HOST_QEMU_LINUX_USER_MODE
	select BR2_PACKAGE_LIBFFI
	select BR2_PACKAGE_LIBGLIB2
	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 python3"
	depends on !BR2_PACKAGE_PYTHON3
	depends on BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS

comment "gobject-introspection needs a glibc toolchain, gcc >= 4.9, host gcc >= 8"
	depends on BR2_USE_MMU
	depends on BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS
	depends on !BR2_TOOLCHAIN_USES_GLIBC || \
		!BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \
		!BR2_HOST_GCC_AT_LEAST_8
