# netsurf mixes up host and target CFLAGS, so it isn't compatible with
# architectures where we pass ABI specific compiler flags (TARGET_ABI)
config BR2_PACKAGE_NETSURF_ARCH_SUPPORTS
	bool
	default y if !((BR2_arc && BR2_ARC_ATOMIC_EXT) || \
		BR2_powerpc_8540 || BR2_powerpc_8548 || BR2_powerpc_e500mc || \
		BR2_xtensa)

comment "netsurf needs a toolchain w/ dynamic library"
	depends on BR2_STATIC_LIBS
	depends on BR2_PACKAGE_NETSURF_ARCH_SUPPORTS

config BR2_PACKAGE_NETSURF
	bool "netsurf"
	# static linking support is broken beyond repair
	depends on !BR2_STATIC_LIBS
	depends on BR2_PACKAGE_NETSURF_ARCH_SUPPORTS
	select BR2_PACKAGE_EXPAT
	select BR2_PACKAGE_JPEG
	select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE
	select BR2_PACKAGE_LIBPNG
	select BR2_PACKAGE_OPENSSL if BR2_PACKAGE_LIBCURL
	help
	  NetSurf is a compact graphical web browser which aims for
	  HTML5, CSS and JavaScript support.
	  Frontends: GTK (X11), SDL 1.2 (framebuffer)

	  http://www.netsurf-browser.org/

if BR2_PACKAGE_NETSURF

choice
	prompt "Netsurf frontend"
	default BR2_PACKAGE_NETSURF_SDL

config BR2_PACKAGE_NETSURF_SDL
	bool "sdl frontend"
	select BR2_PACKAGE_SDL
	help
	  Select SDL 1.2 frontend.

config BR2_PACKAGE_NETSURF_GTK
	bool "gtk2 frontend"
	depends on BR2_PACKAGE_LIBGTK2
	help
	  Select GTK+ 2 frontend.

config BR2_PACKAGE_NETSURF_GTK3
	bool "gtk3 frontend"
	depends on BR2_PACKAGE_LIBGTK3
	help
	  Select GTK+ 3 frontend.

endchoice

endif
