config BR2_PACKAGE_SWUPDATE
	bool "swupdate"
	depends on !BR2_STATIC_LIBS
	depends on BR2_TOOLCHAIN_HAS_THREADS
	depends on BR2_USE_MMU # fork()
	# swupdate requires a parser and uses libconfig as default
	select BR2_PACKAGE_LIBCONFIG if !BR2_PACKAGE_JSON_C && \
		!BR2_PACKAGE_HAS_LUAINTERPRETER
	help
	  swupdate provides a reliable way to update the software on
	  an embedded system.

	  swupdate is highly configurable to fit the targets
	  requirements and to minimize the footprint. The provided
	  default configuration file BR2_PACKAGE_SWUPDATE_CONFIG will
	  enable swupdate with an embedded webserver, a parser and a
	  handler for raw NAND or NOR flash.

	  The default configuration file builds a reasonable firmware
	  update system with minimal external dependencies in mind.
	  If you like to use your own modified configuration,
	  you have to select the necessary packages manually:

	  * Select BR2_PACKAGE_LUA or BR2_PACKAGE_LUAJIT if you want
	    want to have Lua support.
	  * Select BR2_PACKAGE_LIBCURL if you want to use the download
	    feature.
	  * Select BR2_PACKAGE_OPENSSL or BR2_PACKAGE_MBEDTLS if you
	    want to add encryption support.
	  * Select BR2_PACKAGE_MTD if you want to use swupdate with
	    UBI partitions.
	  * Select BR2_PACKAGE_ZLIB if you want to deal with gzip
	    compressed archives.
	  * Select BR2_PACKAGE_ZSTD if you want to deal with zstd
	    compressed archives.
	  * Select BR2_PACKAGE_ZEROMQ to add support for using a
	    remote handler.
	  * Select BR2_PACKAGE_LIBRSYNC to add support for using
	    rdiff handler.
	  * Select BR2_PACKAGE_LIBUBOOTENV to add support for setting
	    the U-Boot environment.
	  * Select BR2_PACKAGE_LIBGPIOD to add support for
	    microcontroller firmware update.
	  * Select BR2_PACKAGE_EFIBOOTMGR to add support for EFI Boot
	    Guard.
	  * Select BR2_PACKAGE_LIBCURL, BR2_PACKAGE_JSON_C,
	    BR2_PACKAGE_LIBWEBSOCKETS, and BR2_PACKAGE_LIBURIPARSER
	    to add support for the SWU forwarder.

	  https://sbabic.github.io/swupdate

if BR2_PACKAGE_SWUPDATE

config BR2_PACKAGE_SWUPDATE_CONFIG
	string "swupdate configuration file"
	default "package/swupdate/swupdate.config"
	help
	  Path to the swupdate configuration file.

	  I you wish to use your own modified swupdate configuration
	  file specify the config file location with this option.

config BR2_PACKAGE_SWUPDATE_USB
	bool "swupdate usb"
	depends on BR2_PACKAGE_SYSTEMD
	help
	  Enable update from USB disk.

comment "swupdate usb needs systemd"
	depends on !BR2_PACKAGE_SYSTEMD

config BR2_PACKAGE_SWUPDATE_WEBSERVER
	bool "swupdate webserver"
	default y
	help
	  Enable update from remote using a web server on the target.

config BR2_PACKAGE_SWUPDATE_INSTALL_WEBSITE
	bool "install default website"
	default y
	depends on BR2_PACKAGE_SWUPDATE_WEBSERVER
	help
	  Install the provided website to /var/www/swupdate.

	  This is necessary if you want to run swupdate with the
	  embedded webserver and do not provide an own website to be
	  installed to /var/www/swupdate.
endif

comment "swupdate needs a toolchain w/ dynamic library, threads"
	depends on BR2_USE_MMU
	depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HAS_THREADS
