menuconfig BR2_PACKAGE_MPD
	bool "mpd"
	depends on BR2_INSTALL_LIBSTDCPP
	depends on BR2_USE_WCHAR # boost
	depends on BR2_TOOLCHAIN_HAS_THREADS
	depends on BR2_USE_MMU # fork
	depends on BR2_TOOLCHAIN_HAS_ATOMIC
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_8 # C++17
	depends on BR2_HOST_GCC_AT_LEAST_8 # C++17
	select BR2_PACKAGE_BOOST
	select BR2_PACKAGE_FMT
	select BR2_PACKAGE_LIBICONV if !BR2_ENABLE_LOCALE
	help
	  MPD is a flexible, powerful, server-side application
	  for playing music. Through plugins and libraries
	  it can play a variety of sound files while being
	  controlled by its network protocol.

	  https://www.musicpd.org

if BR2_PACKAGE_MPD

comment "Archive plugins"

config BR2_PACKAGE_MPD_BZIP2
	bool "bzip2"
	select BR2_PACKAGE_BZIP2
	help
	  Enable bzip2 archive support.

config BR2_PACKAGE_MPD_SQLITE
	bool "sqlite"
	select BR2_PACKAGE_SQLITE
	help
	  Enable sqlite database support.
	  If you don't use sqlite it will use an ASCII database.

config BR2_PACKAGE_MPD_ZZIP
	bool "zzip"
	select BR2_PACKAGE_ZZIPLIB
	help
	  Enable ZIP archive support.

comment "Commercial services"

config BR2_PACKAGE_MPD_QOBUZ
	bool "qobuz"
	depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS
	select BR2_PACKAGE_MPD_CURL
	select BR2_PACKAGE_LIBGCRYPT
	select BR2_PACKAGE_YAJL
	help
	  Play songs from the commercial streaming service Qobuz.

config BR2_PACKAGE_MPD_SOUNDCLOUD
	bool "soundcloud"
	select BR2_PACKAGE_MPD_CURL
	select BR2_PACKAGE_YAJL
	help
	  Enable soundcloud.com playlist support.

comment "Converter plugins"

config BR2_PACKAGE_MPD_LIBSAMPLERATE
	bool "libsamplerate"
	select BR2_PACKAGE_LIBSAMPLERATE
	help
	  Enable libsamplerate input support.
	  Select this for software sample rate conversion.

config BR2_PACKAGE_MPD_LIBSOXR
	bool "libsoxr"
	select BR2_PACKAGE_LIBSOXR
	help
	  Enable libsoxr resampler support.
	  The SoX Resampler library performs software sample-rate
	  conversion.

comment "Decoder plugins"

config BR2_PACKAGE_MPD_DSD
	bool "dsd"
	help
	  Enable Digital Speech Decoder (DSD) support to play audio
	  files encoded in a digital speech format.

config BR2_PACKAGE_MPD_FAAD2
	bool "faad2"
	select BR2_PACKAGE_FAAD2
	help
	  Enable faad2 input support.
	  Select this if you want to play back MP4/AAC files.

config BR2_PACKAGE_MPD_FFMPEG
	bool "ffmpeg"
	depends on BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS
	select BR2_PACKAGE_FFMPEG
	help
	  Enable ffmpeg input support.
	  Select this if you want to play back files supported by
	  ffmpeg.

config BR2_PACKAGE_MPD_FLAC
	bool "flac"
	select BR2_PACKAGE_FLAC
	help
	  Enable flac input/streaming support.
	  Select this if you want to play back FLAC files.

config BR2_PACKAGE_MPD_FLUIDSYNTH
	bool "fluidsynth"
	depends on !BR2_STATIC_LIBS
	select BR2_PACKAGE_FLUIDSYNTH
	help
	  Enable fluidsynth MIDI decoder support.

comment "fluidsynth support needs a toolchain w/ dynamic library"
	depends on BR2_STATIC_LIBS

config BR2_PACKAGE_MPD_LIBSNDFILE
	bool "libsndfile"
	select BR2_PACKAGE_LIBSNDFILE
	help
	  Enable libsndfile input/streaming support.
	  Select this if you want to play back WAV files.

config BR2_PACKAGE_MPD_MAD
	bool "mad"
	default y
	select BR2_PACKAGE_LIBID3TAG
	select BR2_PACKAGE_LIBMAD
	help
	  Enable mad input support.
	  Select this if you want to play back MP3 files.

config BR2_PACKAGE_MPD_MODPLUG
	bool "modplug"
	select BR2_PACKAGE_LIBMODPLUG
	help
	  Enable Modplug decoder support.

config BR2_PACKAGE_MPD_MPG123
	bool "mpg123"
	select BR2_PACKAGE_LIBID3TAG
	select BR2_PACKAGE_MPG123
	help
	  Enable mpg123 input support.
	  Select this if you want to play back MP3 files.

config BR2_PACKAGE_MPD_MUSEPACK
	bool "musepack"
	select BR2_PACKAGE_LIBCUEFILE
	select BR2_PACKAGE_LIBREPLAYGAIN
	select BR2_PACKAGE_MUSEPACK
	help
	  Enable musepack input support.
	  Select this if you want to play back MPC files.

config BR2_PACKAGE_MPD_OPUS
	bool "opus"
	select BR2_PACKAGE_OPUS
	select BR2_PACKAGE_LIBOGG
	help
	  Enable opus input support.
	  Select this if you want to play back OPUS encoded files.

config BR2_PACKAGE_MPD_SIDPLAY
	bool "sidplay"
	select BR2_PACKAGE_LIBSIDPLAY2
	help
	  Enable C64 SID support.

config BR2_PACKAGE_MPD_TREMOR
	bool "tremor"
	depends on !BR2_PACKAGE_MPD_VORBIS
	select BR2_PACKAGE_LIBOGG
	select BR2_PACKAGE_TREMOR
	help
	  Enable vorbis input support.
	  Select this if you want to play back OGG files on softfloat
	  targets.

config BR2_PACKAGE_MPD_VORBIS
	bool "vorbis"
	select BR2_PACKAGE_LIBOGG
	select BR2_PACKAGE_LIBVORBIS
	help
	  Enable vorbis input/streaming support.
	  Select this if you want to play back OGG files on hardfloat
	  targets.

config BR2_PACKAGE_MPD_WAVPACK
	bool "wavpack"
	select BR2_PACKAGE_WAVPACK
	help
	  Enable wavpack input support.
	  Select this if you want to play back WV files.

comment "Encoder plugins"

config BR2_PACKAGE_MPD_LAME
	bool "lame"
	select BR2_PACKAGE_LAME
	help
	  Enable lame (mp3) encoding support.

config BR2_PACKAGE_MPD_TWOLAME
	bool "twolame"
	select BR2_PACKAGE_TWOLAME
	help
	  Enable TwoLAME mp2 encoding.

comment "Input plugins"

config BR2_PACKAGE_MPD_CDIO_PARANOIA
	bool "cdio-paranoia"
	select BR2_PACKAGE_LIBCDIO_PARANOIA
	help
	  Enable cdio-paranoia support.

config BR2_PACKAGE_MPD_CURL
	bool "curl"
	select BR2_PACKAGE_LIBCURL
	help
	  Enable curl streaming (http) support.

config BR2_PACKAGE_MPD_LIBMMS
	bool "mms"
	select BR2_PACKAGE_LIBMMS
	help
	  Enable MMS support.

config BR2_PACKAGE_MPD_LIBNFS
	bool "nfs"
	# libnfs -> libtirpc
	depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC || BR2_TOOLCHAIN_HAS_THREADS
	select BR2_PACKAGE_LIBNFS
	help
	  Enable Network File System (NFS) support.

comment "nfs support needs a toolchain w/ threads support"
	depends on !(BR2_TOOLCHAIN_HAS_THREADS || BR2_TOOLCHAIN_HAS_NATIVE_RPC)

comment "samba support needs a glibc toolchain w/ dynamic library, RPC"
	depends on !BR2_nios2
	depends on !BR2_TOOLCHAIN_USES_GLIBC || BR2_STATIC_LIBS || \
		!BR2_TOOLCHAIN_HAS_NATIVE_RPC

config BR2_PACKAGE_MPD_LIBSMBCLIENT
	bool "samba"
	depends on !BR2_nios2 # samba
	depends on BR2_TOOLCHAIN_USES_GLIBC
	depends on !BR2_STATIC_LIBS
	depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	select BR2_PACKAGE_SAMBA4
	help
	  Enable Samba support.

comment "Output plugins"

config BR2_PACKAGE_MPD_ALSA
	bool "alsa"
	default y
	select BR2_PACKAGE_ALSA_LIB
	select BR2_PACKAGE_ALSA_LIB_PCM
	select BR2_PACKAGE_ALSA_LIB_MIXER
	help
	  Enable alsa output support.

config BR2_PACKAGE_MPD_AO
	bool "ao"
	select BR2_PACKAGE_LIBAO
	help
	  Enable libao output support.

config BR2_PACKAGE_MPD_HTTPD_OUTPUT
	bool "httpd output"
	help
	  Enable httpd output support.

config BR2_PACKAGE_MPD_JACK2
	bool "jack2"
	depends on !BR2_STATIC_LIBS # jack2
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	select BR2_PACKAGE_JACK2
	help
	  Enable jack output support.

comment "jack support needs a toolchain w/ dynamic library"
	depends on BR2_TOOLCHAIN_HAS_SYNC_4
	depends on BR2_STATIC_LIBS

config BR2_PACKAGE_MPD_OPENAL
	bool "openal"
	depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS
	depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL
	select BR2_PACKAGE_OPENAL
	help
	  Enable OpenAL output support.

comment "openal support needs a toolchain w/ NPTL"
	depends on BR2_PACKAGE_OPENAL_ARCH_SUPPORTS
	depends on !BR2_TOOLCHAIN_HAS_THREADS_NPTL

config BR2_PACKAGE_MPD_OSS
	bool "oss"
	help
	  Enable OSS (Open Sound System) output support.

config BR2_PACKAGE_MPD_PULSEAUDIO
	bool "pulseaudio"
	depends on BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC
	depends on BR2_USE_WCHAR
	depends on BR2_TOOLCHAIN_HAS_THREADS
	depends on !BR2_STATIC_LIBS
	depends on BR2_USE_MMU
	select BR2_PACKAGE_PULSEAUDIO
	help
	  Enable pulseaudio output support.

comment "pulseaudio support needs a toolchain w/ threads, wchar, dynamic library"
	depends on BR2_USE_MMU
	depends on BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC
	depends on !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS || !BR2_USE_WCHAR

config BR2_PACKAGE_MPD_SHOUTCAST
	bool "shoutcast"
	select BR2_PACKAGE_LIBSHOUT
	help
	  Enable shoutcast streaming output support.

comment "Miscellaneous plugins"

config BR2_PACKAGE_MPD_AVAHI_SUPPORT
	bool "avahi (zeroconf) support"
	depends on !BR2_STATIC_LIBS # avahi
	select BR2_PACKAGE_AVAHI
	select BR2_PACKAGE_AVAHI_DAEMON
	select BR2_PACKAGE_AVAHI_LIBDNSSD_COMPATIBILITY
	help
	  Enable Avahi (zeroconf) support.
	  Select this for multicast DNS/DNS-SD service discovery
	  support. This allows MPD to publish service information on a
	  local network.

comment "avahi support needs a toolchain w/ dynamic library"
	depends on BR2_STATIC_LIBS

config BR2_PACKAGE_MPD_LIBMPDCLIENT
	bool "libmpdclient"
	select BR2_PACKAGE_LIBMPDCLIENT
	help
	  Enable libmpdclient support.

config BR2_PACKAGE_MPD_NEIGHBOR_DISCOVERY_SUPPORT
	bool "neighbor discovery support"
	depends on BR2_PACKAGE_MPD_LIBSMBCLIENT || !BR2_PACKAGE_MPD_UPNP_DISABLED
	help
	  Enable support for neighbor discovery.
	  This option can be used in conjunction with the smbclient
	  plugin to provide a list of SMB/CIFS servers or with the
	  UPnP plugin to provide a list of UPnP servers on the local
	  network. The neighbor plugin needs configuration in
	  mpd.conf. For further information take a look at the MPD
	  documentation.

config BR2_PACKAGE_MPD_TCP
	bool "tcp sockets"
	default y
	help
	  Enable MPD to listen on tcp sockets.

	  You want this on if MPD and the client(s) work
	  on different machines (the usual scenario).

choice
	prompt "UPnP"
	default BR2_PACKAGE_MPD_UPNP_PUPNP if BR2_PACKAGE_MPD_UPNP # legacy
	default BR2_PACKAGE_MPD_UPNP_DISABLED
	help
	  Enable MPD to access a UPnP based media server.

	  For further information, see
	  https://www.lesbonscomptes.com/upmpdcli/pages/upmpdcli-or-mpdupnp.html

config BR2_PACKAGE_MPD_UPNP_PUPNP
	bool "pupnp"
	select BR2_PACKAGE_EXPAT
	select BR2_PACKAGE_LIBUPNP
	select BR2_PACKAGE_MPD_CURL
	help
	  Provides UPnP database access through libupnp
	  (the legacy Portable SDK for UPnP devices).

	  Introduces least additional dependencies.

config BR2_PACKAGE_MPD_UPNP_NPUPNP
	bool "npupnp"
	select BR2_PACKAGE_LIBNPUPNP
	select BR2_PACKAGE_MPD_CURL
	help
	  Provides UPnP database access through libnpupnp
	  (a C++ reimplementation of the Portable UPnP library).

	  This implementation is more modern, but also brings
	  additional features not needed in this context, thus
	  consuming more space.

config BR2_PACKAGE_MPD_UPNP_DISABLED
	bool "disabled"
	help
	  No UPnP client functionality.

endchoice

comment "Tag plugins"

config BR2_PACKAGE_MPD_ID3TAG
	bool "id3tag"
	select BR2_PACKAGE_LIBID3TAG
	help
	  Enable ID3 support.

endif

comment "mpd needs a toolchain w/ C++, threads, wchar, gcc >= 8, host gcc >= 8"
	depends on BR2_USE_MMU
	depends on BR2_TOOLCHAIN_HAS_ATOMIC
	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_USE_WCHAR || \
		!BR2_TOOLCHAIN_HAS_THREADS || \
		!BR2_TOOLCHAIN_GCC_AT_LEAST_8 || \
		!BR2_HOST_GCC_AT_LEAST_8
