
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_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_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_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_BONNIE
	select BR2_PACKAGE_SAMBA
	select BR2_PACKAGE_SAMBA_NMBLOOKUP
	select BR2_PACKAGE_SDPARM
	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_BOOST
	select BR2_PACKAGE_AVAHI
	select BR2_PACKAGE_AVAHI_DAEMON
	select BR2_PACKAGE_AVAHI_COMPAT_LIBDNS_SD
	select BR2_PACKAGE_PROTOBUF
