
config BR2_PACKAGE_GOOGLE_PLATFORM
	bool "Google platform tools"
	default n
	help
	  Include some tools designed for running on the Google Fiber
	  devices.

config BR2_PACKAGE_GOOGLE_PLATFORM_BASE
	bool "Google platform dependencies"
	default n
	select BR2_PACKAGE_FREEGREP
	select BR2_PACKAGE_PROCPS
	select BR2_PACKAGE_LOCKFILE_PROGS
	select BR2_PACKAGE_SYSVINIT
	select BR2_PACKAGE_S6_RC
	select BR2_PACKAGE_GOOGLE_SIGNING
	select BR2_PACKAGE_CURL
	select BR2_PACKAGE_SED
	select BR2_PACKAGE_TLSDATE
	select BR2_PACKAGE_CLOCKSPEED
	select BR2_PACKAGE_LIBCARES
	select BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS
	select BR2_PACKAGE_LIBJSONCPP
	select BR2_PACKAGE_GPERF
	select BR2_PACKAGE_PY_TORNADO
	help
	  This package is a placeholder that depends on other packages needed
	  to run the Google Fiber devices.

config BR2_PACKAGE_GOOGLE_PLATFORM_DVBUTILS
	bool "include dvb tools"
	default n
	help
	  DVB utility tools.

config BR2_PACKAGE_GOOGLE_PLATFORM_CRYPTDEV
	bool "include cryptdev"
	default n
	help
	  dm-crypt setup tool.

config BR2_PACKAGE_GOOGLE_PLATFORM_HNVRAM
	bool "include hnvram access tools"
	default n
	select BR2_PACKAGE_HUMAX_MISC
	help
	  NVRAM manipulation utility for Google platforms.

config BR2_PACKAGE_GOOGLE_PLATFORM_WAVEGUIDE
	bool "include waveguide tool"
	default n
	help
	  Waveguide tool for Wi-Fi.

config BR2_PACKAGE_GOOGLE_PLATFORM_BOUNCER
	bool "include advanced http_bouncer"
	default n
	help
	  HTTP Bouncer with support for guest networks.

config BR2_PACKAGE_GOOGLE_PLATFORM_CACHE_WARMING
        bool "include cache warming"
        default n
        help
          Periodically fetches top requested hosts.

config BR2_PACKAGE_GOOGLE_PLATFORM_LOGUPLOAD
	bool "include log upload tool"
	default n
	help
	  Log upload tool for Google platforms.

config BR2_PACKAGE_GOOGLE_PLATFORM_SYSMGR
	bool "include system manager"
	default n
	help
	  System manager.

config BR2_PACKAGE_GOOGLE_PLATFORM_JSONPOLL
	bool "include jsonpoll tool"
	help
	  Include the jsonpoll tool used by PTP devices to poll data
	  from the modem and radio to be exported via catawampus.

config BR2_PACKAGE_GOOGLE_PLATFORM_CRAFTUI
	bool "include craftui"
	select BR2_PACKAGE_CATAWAMPUS
	help
	  Include the craftui web server used by PTP devices for
	  site configuration.

config BR2_PACKAGE_GOOGLE_PLATFORM_PRESTERASTATS
	bool "include presterastats tool"
	help
	  Include the presterastats tool used by PTP devices to
	  extract data from the on-board prestera switch

config BR2_PACKAGE_GOOGLE_PLATFORM_LEDPATTERN
	bool "include ledpattern"
	help
	  Include the ledpattern tool.

config BR2_PACKAGE_GOOGLE_OPENBOX
	bool "Openbox Release"
	default n
	help
	  Build google openbox release, using the openbox (unlocked)
	  bootloader.

config BR2_PACKAGE_GOOGLE_PROD
	bool "Production Release"
	depends on !BR2_PACKAGE_GOOGLE_OPENBOX
	select BR2_PACKAGE_BCM_SIGNING if BR2_mipsel
	select BR2_PACKAGE_BCM_BOLT_SIGNING if BR2_PACKAGE_BCM_COMMON_PLATFORM = 97439
	help
	  Build google production release, using the signed/locked bootloader.

config BR2_PACKAGE_GOOGLE_UNSIGNED
	bool "Unsigned Release"
	default n
	help
	  Prevent signing workflows from being executed to allow post-build signing.

config BR2_PACKAGE_GOOGLE_KEY_SUFFIX
	string "Signing key suffix"
	help
	  Suffix to select a different set of signing keys.

config BR2_PACKAGE_GOOGLE_PLATFORM_CONNECTION_MANAGER
	bool "include connection manager"
	default n
	select BR2_PACKAGE_PY_INOTIFY
	select BR2_PACKAGE_PY_WPACTRL
	help
	  Connection manager for devices which can operate entirely over Wi-Fi.

config BR2_PACKAGE_GOOGLE_TEST
	bool "Include Test Packages"
	default n
	depends on !(BR2_PACKAGE_GOOGLE_PROD && BR2_PACKAGE_GOOGLE_SPACECAST)
	select BR2_PACKAGE_BONNIE
	select BR2_PACKAGE_CRASHME
	select BR2_PACKAGE_DHRYSTONE
	select BR2_PACKAGE_DROPBEAR
	select BR2_PACKAGE_DROPBEAR_SMALL
	select BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS
	select BR2_PACKAGE_LESS
	select BR2_PACKAGE_NANO
	select BR2_PACKAGE_ZSH
	select BR2_PACKAGE_ZSH_BINARIES_ONLY
	select BR2_PACKAGE_ETHTOOL
	select BR2_PACKAGE_FIO
	select BR2_PACKAGE_IPERF
	select BR2_PACKAGE_IPERF3
	select BR2_PACKAGE_LMBENCH
	select BR2_PACKAGE_MEMSTAT
	select BR2_PACKAGE_MEMTESTER
	select BR2_PACKAGE_NETPERF
	select BR2_PACKAGE_RSYNC
	select BR2_PACKAGE_SSHFS
	select BR2_PACKAGE_STRACE
	select BR2_PACKAGE_TCPDUMP
	select BR2_PACKAGE_TCPDUMP_SMB
	select BR2_PACKAGE_UTIL_LINUX_LOGIN_UTILS
	select BR2_PACKAGE_UTIL_LINUX_AGETTY
	select BR2_PACKAGE_WHETSTONE
	select BR2_PACKAGE_SDPARM
	select BR2_PACKAGE_SYSSTAT
	select BR2_PACKAGE_TESTUSB
	select BR2_PACKAGE_TRACEROUTE_NEW
	help
	  Enable packages for test.

config BR2_PACKAGE_GOOGLE_PLATFORM_ONLY
	bool "Disable all application-level code"
	default n
	help
	  This meta-package disables Fiber Jack, Network Box, Storage Box,
	  and TV Box functionality, leaving only the core operating system.
	  (It works because other packages depend on !GOOGLE_PLATFORM_ONLY.)

config BR2_PACKAGE_GOOGLE_FIBER_JACK
	bool "Device can act as Google Fiber Jack"
	default n
	depends on !BR2_PACKAGE_GOOGLE_PLATFORM_ONLY
	select BR2_PACKAGE_IFPLUGD
	select BR2_PACKAGE_PROTOBUF
	select BR2_PACKAGE_PROTOBUF_ONLY_LITE

config BR2_PACKAGE_GOOGLE_NETWORK_BOX
	bool "Device can act as Google Fiber Network Box"
	default n
	depends on !BR2_PACKAGE_GOOGLE_PLATFORM_ONLY
	select BR2_PACKAGE_IFPLUGD
	select BR2_PACKAGE_PROTOBUF
	select BR2_PACKAGE_INADYN
	select BR2_PACKAGE_LIBGLIB2
	select BR2_PACKAGE_GOOGLE_GCM if !BR2_arc

config BR2_PACKAGE_GOOGLE_SPACECAST
	bool "Device can act as Google SpaceCast Box"
	default n
	depends on !BR2_PACKAGE_GOOGLE_PLATFORM_ONLY
	select BR2_PACKAGE_PROTOBUF

config BR2_PACKAGE_GOOGLE_WINDCHARGER
	bool "Device can act as Google WindCharger Box"
	default n
	depends on !BR2_PACKAGE_GOOGLE_PLATFORM_ONLY
	select BR2_PACKAGE_IFPLUGD
	select BR2_PACKAGE_INADYN
	select BR2_PACKAGE_LIBGLIB2

config BR2_PACKAGE_GOOGLE_STORAGE_BOX
	bool "Device can act as Google Fiber Storage Box"
	default n
	depends on !BR2_PACKAGE_GOOGLE_PLATFORM_ONLY
	select BR2_PACKAGE_GOOGLE_CHANNEL_SRV
	select BR2_PACKAGE_GOOGLE_DVBCAPTURE
	select BR2_PACKAGE_GOOGLE_HDHOMERUN_PLUGIN
	select BR2_PACKAGE_GOOGLE_LIBGEP
	select BR2_PACKAGE_GOOGLE_MCASTCAPTURE
	select BR2_PACKAGE_GOOGLE_MEDIA
	select BR2_PACKAGE_GOOGLE_MPEGPARSER
	select BR2_PACKAGE_GOOGLE_OOKLA if BR2_mipsel
	select BR2_PACKAGE_GOOGLE_OREGANO if !BR2_x86_64
	select BR2_PACKAGE_GOOGLE_TS_CHECK
	select BR2_PACKAGE_GOOGLE_TVSTREAMPARSER
	select BR2_PACKAGE_AVAHI
	select BR2_PACKAGE_AVAHI_DAEMON
	select BR2_PACKAGE_SAMBA
	select BR2_PACKAGE_SAMBA_NMBLOOKUP
	select BR2_PACKAGE_AVAHI_COMPAT_LIBDNS_SD
	select BR2_PACKAGE_PROTOBUF
	select BR2_PACKAGE_GOOGLE_FROBNICAST

config BR2_PACKAGE_GOOGLE_TV_BOX
	bool "Device can act as Google Fiber TV Box"
	default n
	depends on !BR2_PACKAGE_GOOGLE_PLATFORM_ONLY
	select BR2_PACKAGE_GOOGLE_CAST
	select BR2_PACKAGE_GOOGLE_DASHPLAYER
	select BR2_PACKAGE_GOOGLE_DIAL
	select BR2_PACKAGE_GOOGLE_DVBCAPTURE
	select BR2_PACKAGE_GOOGLE_GFRM200
	select BR2_PACKAGE_GOOGLE_LIBGEP
	select BR2_PACKAGE_GOOGLE_LICENSES if BR2_mipsel
	select BR2_PACKAGE_GOOGLE_MEDIA
	select BR2_PACKAGE_GOOGLE_MINICLIENT
	select BR2_PACKAGE_GOOGLE_MPEGPARSER
	select BR2_PACKAGE_GOOGLE_OOKLA if BR2_mipsel
	select BR2_PACKAGE_GOOGLE_OREGANO
	select BR2_PACKAGE_GOOGLE_PULLREADER
	select BR2_PACKAGE_GOOGLE_TVSTREAMPARSER
	select BR2_PACKAGE_CHROMIUM
	select BR2_PACKAGE_LIBXSLT
	select BR2_PACKAGE_BCM_BSEAV
	select BR2_PACKAGE_BCM_NEXUS
	select BR2_PACKAGE_BCM_NETFLIX if BR2_mipsel
	select BR2_PACKAGE_BCM_VUDU if BR2_mipsel
	select BR2_PACKAGE_IFPLUGD
	select BR2_PACKAGE_JPEG
	select BR2_PACKAGE_LIBPNG
	select BR2_PACKAGE_LIBPROJECTM
	select BR2_PACKAGE_BOOST
	select BR2_PACKAGE_AVAHI
	select BR2_PACKAGE_AVAHI_DAEMON
	select BR2_PACKAGE_AVAHI_COMPAT_LIBDNS_SD
	select BR2_PACKAGE_PROTOBUF
