# Architecture dependency from the bundled bdwgc.
config BR2_PACKAGE_GAUCHE_ARCH_SUPPORTS
	bool
	default y if BR2_arm || BR2_armeb || BR2_i386 || BR2_m68k || \
		BR2_mips || BR2_mipsel || BR2_mips64 || \
		BR2_mips64el || BR2_powerpc || BR2_powerpc64 || \
		BR2_powerpc64le || BR2_sh || BR2_sh64 || BR2_sparc || \
		BR2_sparc64 || BR2_x86_64

config BR2_PACKAGE_GAUCHE
	bool "gauche"
	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
	depends on BR2_USE_MMU # fork()
	depends on BR2_ARCH_HAS_ATOMICS
	depends on BR2_PACKAGE_GAUCHE_ARCH_SUPPORTS
	depends on !BR2_STATIC_LIBS
	help
	  Gauche is an R7RS Scheme implementation developed to be a
	  handy script interpreter, which allows programmers and
	  system administrators to write small to large scripts for
	  their daily chores. Quick startup, built-in system
	  interface, native multilingual support are some of its
	  goals.

	  http://practical-scheme.net/gauche/

comment "gauche needs a toolchain w/ NPTL, dynamic library"
	depends on BR2_USE_MMU
	depends on BR2_ARCH_HAS_ATOMICS
	depends on BR2_PACKAGE_GAUCHE_ARCH_SUPPORTS
	depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL || BR2_STATIC_LIBS
