#
# Config.in.legacy - support for backward compatibility
#
# When an existing Config.in symbol is removed, it should be added again in
# this file, and take appropriate action to approximate backward compatibility.
# This will make the transition for the user more convenient.
#
# When adding legacy symbols to this file, add them to the front. The oldest
# symbols will be removed again after about two years.
#
# The symbol should be copied as-is from the place where it was previously
# defined, but the help text should be removed or replaced with something that
# explains how to fix it.
#
# For bool options, the old symbol should select BR2_LEGACY, so that the user
# is informed at build-time about selected legacy options.
# If there is an equivalent (set of) new symbols, these should be select'ed by
# the old symbol for backwards compatibility.
# It is not possible to select an option that is part of a choice. In that
# case, the new option should use the old symbol as default. This requires a
# change outside of Config.in.legacy, and this should be clearly marked as such
# in a comment, so that removal of legacy options also include the removal of
# these external references.
#
# [Example: renaming a bool option that is part of a choice from FOO to BAR]
# original choice:
# 	choice
# 		prompt "Choose foobar"
# 	config BR2_FOO_1
#		bool "foobar 1"
# 	config BR2_FOO_2
# 		bool "foobar 2"
# 	endchoice
#
# becomes:
#   choice
#   	prompt "Choose foobar"
#   	default BR2_BAR_1 if BR2_FOO_1 # legacy
#   	default BR2_BAR_2 if BR2_FOO_2 # legacy
#   config BR2_BAR_1
#		bool "foobar 1"
#   config BR2_BAR_2
#   	bool "foobar 2"
#   endchoice
#
# and in Config.in.legacy:
#   config BR2_FOO_1
#   	bool "foobar 1 has been renamed"
#   	help
#   	  <suitable help text>
#   # Note: BR2_FOO_1 is still referenced from package/foo/Config.in
#   config BR2_FOO_2
#   	bool "foobar 2 has been renamed"
#   	help
#   	  <suitable help text>
#   # Note: BR2_FOO_2 is still referenced from package/foo/Config.in
#
# [End of example]
#
# For string options, it is not possible to directly select another symbol. In
# this case, a hidden wrap bool option has to be added, that defaults to y if
# the old string is not set at its default value. The wrap symbol should select
# BR2_LEGACY.
# If the original symbol has been renamed, the new symbol should use the value
# of the old symbol as default. Like for choice options, a comment should be
# added to flag that the symbol is still used in another file.
#
# [Example: renaming a string option from FOO to BAR]
# original symbol:
#   config BR2_FOO_STRING
#   	string "Some foo string"
#
# becomes:
#   config BR2_BAR_STRING
#   	string "Some bar string"
#   	default BR2_FOO_STRING if BR2_FOO_STRING != ""  # legacy
#
# and in Config.in.legacy:
#   config BR2_FOO_STRING
#   	string "The foo string has been renamed"
#   	help
#   	  <suitable help text>
#
#   config BR2_FOO_STRING_WRAP
#   	bool
#   	default y if BR2_FOO_STRING != ""
#   	select BR2_LEGACY
#
#   # Note: BR2_FOO_STRING is still referenced from package/foo/Config.in
#
# [End of example]

config BR2_SKIP_LEGACY
	bool
	option env="SKIP_LEGACY"

if !BR2_SKIP_LEGACY

config BR2_LEGACY
	bool
	help
	  This option is selected automatically when your old .config uses an
	  option that no longer exists in current buildroot. In that case, the
	  build will fail. Look for config options which are selected in the
	  menu below: they no longer exist and should be replaced by something
	  else.

# This comment fits exactly in a 80-column display
comment "Legacy detected: check the content of the menu below"
	depends on BR2_LEGACY

menu "Legacy config options"

if BR2_LEGACY
comment "----------------------------------------------------"
comment "Your old configuration uses legacy options that no  "
comment "longer exist in buildroot, as indicated in the menu "
comment "below. As long as these options stay selected, or in"
comment "case of string options are non-empty, the build     "
comment "will fail.                                          "
comment "*                                                   "
comment "Where possible, an automatic conversion from old to "
comment "new symbols has been performed. Before making any   "
comment "change in this legacy menu, make sure to exit the   "
comment "configuration editor a first time and save the      "
comment "configuration. Otherwise, the automatic conversion  "
comment "of symbols will be lost.                            "
comment "*                                                   "
comment "After this initial save, reopen the configuration   "
comment "editor, inspect the options selected below, read    "
comment "their help texts, and verify/update the new         "
comment "configuration in the corresponding configuration    "
comment "menus. When everything is ok, you can disable the   "
comment "legacy options in the menu below. Once you have     "
comment "disabled all legacy options, this text will         "
comment "disappear and you will be able to start the build.  "
comment "*                                                   "
comment "Note: legacy options older than 5 years have been   "
comment "removed, and configuration files that still have    "
comment "those options set, will fail to build, or run in    "
comment "unpredictable ways.                                 "
comment "----------------------------------------------------"
endif

###############################################################################
comment "Legacy options removed in 2018.02"

config BR2_KERNEL_HEADERS_3_4
	bool "kernel headers version 3.4.x are no longer supported"
	select BR2_KERNEL_HEADERS_4_1
	select BR2_LEGACY
	help
	  Version 3.4.x of the Linux kernel headers are no longer
	  maintained upstream and are now removed. As an alternative,
	  version 4.1.x of the headers have been automatically
	  selected in your configuration.

config BR2_KERNEL_HEADERS_3_10
	bool "kernel headers version 3.10.x are no longer supported"
	select BR2_KERNEL_HEADERS_4_1
	select BR2_LEGACY
	help
	  Version 3.10.x of the Linux kernel headers are no longer
	  maintained upstream and are now removed. As an alternative,
	  version 4.1.x of the headers have been automatically
	  selected in your configuration.

config BR2_KERNEL_HEADERS_3_12
	bool "kernel headers version 3.12.x are no longer supported"
	select BR2_KERNEL_HEADERS_4_1
	select BR2_LEGACY
	help
	  Version 3.12.x of the Linux kernel headers are no longer
	  maintained upstream and are now removed. As an alternative,
	  version 4.1.x of the headers have been automatically
	  selected in your configuration.

config BR2_BINUTILS_VERSION_2_27_X
	bool "binutils version 2.27 support removed"
	select BR2_LEGACY
	help
	  Support for binutils version 2.27 has been removed. The
	  current default version (2.29 or later) has been selected
	  instead.

config BR2_PACKAGE_EEPROG
	bool "eeprog package removed"
	select BR2_LEGACY
	select BR2_PACKAGE_I2C_TOOLS
	select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
	help
	  The eeprog program is now provided by the i2c-tools package.

config BR2_PACKAGE_GNUPG2_GPGV2
	bool "gnupg2 gpgv2 option removed"
	select BR2_LEGACY
	select BR2_PACKAGE_GNUPG2_GPGV
	help
	  The gpgv2 executable is now named gpgv. The config option
	  has been renamed accordingly.

config BR2_PACKAGE_IMX_GPU_VIV_APITRACE
	bool "Vivante apitrace tool option removed"
	select BR2_LEGACY
	help
	  The apitrace tool for Vivante is not provided by the
	  imx-gpu-viv package any longer.

config BR2_PACKAGE_IMX_GPU_VIV_G2D
	bool "Vivante G2D libraries from imx-gpu-viv removed"
	select BR2_LEGACY
	select BR2_PACKAGE_IMX_GPU_G2D
	help
	  The G2D libraries are now provided by the imx-gpu-g2d package.

###############################################################################
comment "Legacy options removed in 2017.11"

config BR2_PACKAGE_RFKILL
	bool "rfkill package removed"
	select BR2_LEGACY
	select BR2_PACKAGE_UTIL_LINUX
	select BR2_PACKAGE_UTIL_LINUX_RFKILL
	help
	  The rfkill program is now provided by the util-linux package.

config BR2_PACKAGE_UTIL_LINUX_RESET
	bool "util-linux reset option removed"
	select BR2_LEGACY
	help
	  The util-linux package no longer offers a "reset" command. Use
	  either the reset command provided by BusyBox or select ncurses
	  programs, which will install a symlink from "tset" to reset.

config BR2_PACKAGE_POLICYCOREUTILS_AUDIT2ALLOW
	bool "policycoreutils audit2allow option removed"
	select BR2_LEGACY
	select BR2_PACKAGE_SELINUX_PYTHON
	select BR2_PACKAGE_SELINUX_PYTHON_AUDIT2ALLOW
	help
	  The policycoreutils package no longer offers audit2allow
	  as a option. This package has been moved into the
	  selinux-python package by the SELinux maintainers.

config BR2_PACKAGE_POLICYCOREUTILS_RESTORECOND
	bool "policycoreutils restorecond option removed"
	select BR2_LEGACY
	select BR2_PACKAGE_RESTORECOND
	help
	  The policycoreutils package no longer offers restorecond
	  as a option.  This package has been moved into a seperate
	  package maintained by the SELinux maintainers.

config BR2_PACKAGE_SEPOLGEN
	bool "sepolgen package has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_SELINUX_PYTHON
	select BR2_PACKAGE_SELINUX_PYTHON_SEPOLGEN
	help
	  Sepolgen is no longer a individual package, but instead has
	  been moved into the selinux-python package by the SELinux
	  maintainers.

config BR2_PACKAGE_OPENOBEX_BLUEZ
	bool "openobex bluez option removed"
	select BR2_LEGACY
	select BR2_PACKAGE_BLUEZ_UTILS
	help
	  The OpenOBEX package no longer offers an option to enable or
	  disable BlueZ support. Instead, BlueZ support is always
	  included when the bluez5_utils or bluez_utils package is
	  selected.

config BR2_PACKAGE_OPENOBEX_LIBUSB
	bool "openobex libusb option removed"
	select BR2_LEGACY
	select BR2_PACKAGE_LIBUSB
	help
	  The OpenOBEX package no longer offers an option to enable or
	  disable libusb support. Instead, USB support is always
	  included when the libusb package is selected.

config BR2_PACKAGE_OPENOBEX_APPS
	bool "openobex apps option removed"
	select BR2_LEGACY
	help
	  The OpenOBEX package no longer offers an option to enable or
	  disable apps support.

config BR2_PACKAGE_OPENOBEX_SYSLOG
	bool "openobex syslog option removed"
	select BR2_LEGACY
	help
	  The OpenOBEX package no longer offers an option to enable or
	  disable syslog support.

config BR2_PACKAGE_OPENOBEX_DUMP
	bool "openobex dump option removed"
	select BR2_LEGACY
	help
	  The OpenOBEX package no longer offers an option to enable or
	  disable dump support.

config BR2_PACKAGE_AICCU
	bool "aiccu utility removed"
	select BR2_LEGACY
	help
	  As the SixXS project has ceased its operation on 2017-06-06,
	  the AICCU utility has no use anymore and has been removed.

	  https://www.sixxs.net/sunset/

config BR2_PACKAGE_UTIL_LINUX_LOGIN_UTILS
	bool "util-linux login utilities option removed"
	select BR2_LEGACY
	select BR2_PACKAGE_UTIL_LINUX_LAST
	select BR2_PACKAGE_UTIL_LINUX_LOGIN
	select BR2_PACKAGE_UTIL_LINUX_RUNUSER
	select BR2_PACKAGE_UTIL_LINUX_SU
	select BR2_PACKAGE_UTIL_LINUX_SULOGIN
	help
	  Login utilities (last, login, runuser, su, sulogin) now have
	  their own configuration options in the util-linux menu.

###############################################################################
comment "Legacy options removed in 2017.08"

config BR2_TARGET_GRUB
	bool "grub (aka grub-legacy) has been removed"
	select BR2_LEGACY
	help
	  grub-legacy is no longer maintained, and no longer builds with
	  recent binutils versions.

	  Use grub2 or syslinux instead.

config BR2_PACKAGE_SIMICSFS
	bool "simicsfs support removed"
	select BR2_LEGACY
	help
	  Support for simicsfs kernel driver that provides access to a
	  host computer's local filesystem when the target is
	  executing within a SIMICS simulation has been removed.

	  Simics is now moving away from the simicsfs kernel module,
	  as the kernel module has required too much maintenance
	  work. Users should move to the user mode Simics agent
	  instead.

config BR2_BINUTILS_VERSION_2_26_X
	bool "binutils version 2.26 support removed"
	select BR2_LEGACY
	help
	  Support for binutils version 2.26 has been removed. The
	  current default version (2.28 or later) has been selected
	  instead.

config BR2_XTENSA_OVERLAY_DIR
	string "The BR2_XTENSA_OVERLAY_DIR option has been removed"
	help
	  The BR2_XTENSA_OVERLAY_DIR has been removed in favour of
	  BR2_XTENSA_OVERLAY_FILE. You must now pass the complete
	  path to the overlay file, not to the directory containing
	  it.

config BR2_XTENSA_OVERLAY_DIR_WRAP
	bool
	default y if BR2_XTENSA_OVERLAY_DIR != ""
	select BR2_LEGACY

config BR2_XTENSA_CUSTOM_NAME
	string "The BR2_XTENSA_CUSTOM_NAME option has been removed"
	help
	  The BR2_XTENSA_CUSTOM_NAME option has been removed.

config BR2_XTENSA_CUSTOM_NAME_WRAP
	bool
	default y if BR2_XTENSA_CUSTOM_NAME != ""
	select BR2_LEGACY

config BR2_PACKAGE_HOST_MKE2IMG
	bool "host mke2img has been removed"
	select BR2_LEGACY
	help
	  We now call mkfs directly to generate ext2/3/4 filesystem
	  image, so mke2img is no longer necessary.

config BR2_TARGET_ROOTFS_EXT2_BLOCKS
	int "exact size in blocks has been removed"
	default 0
	help
	  This option has been removed in favor of
	  BR2_TARGET_ROOTFS_EXT2_SIZE. It has been set automatically
	  to the value you had before. Set to 0 here to remove the
	  warning.

config BR2_TARGET_ROOTFS_EXT2_BLOCKS_WRAP
	bool
	default y if BR2_TARGET_ROOTFS_EXT2_BLOCKS != 0 && \
		BR2_TARGET_ROOTFS_EXT2_BLOCKS != 61440 # deprecated default value
	select BR2_LEGACY

# Note: BR2_TARGET_ROOTFS_EXT2_BLOCKS_WRAP still referenced in fs/ext2/Config.in

config BR2_TARGET_ROOTFS_EXT2_EXTRA_INODES
	int "ext2 extra inodes has been removed" if BR2_TARGET_ROOTFS_EXT2_INODES = 0
	default 0
	help
	  Buildroot now uses mkfs.ext2/3/4 to generate ext2/3/4
	  images. It now automatically selects the number of inodes
	  based on the image size. The extra number of inodes can no
	  longer be provided; instead, provide the total number of
	  inodes needed in BR2_TARGET_ROOTFS_EXT2_INODES.

config BR2_TARGET_ROOTFS_EXT2_EXTRA_INODES_WRAP
	bool
	default y if BR2_TARGET_ROOTFS_EXT2_EXTRA_INODES != 0
	select BR2_LEGACY

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_CDXAPARSE
	bool "cdxaparse removed"
	select BR2_LEGACY

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DATAURISRC
	bool "dataurisrc moved to gstreamer1"
	select BR2_LEGACY
	help
	  Dataurisrc has moved to gstreamer core and is always built.

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_DCCP
	bool "dccp removed"
	select BR2_LEGACY

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_HDVPARSE
	bool "hdvparse removed"
	select BR2_LEGACY

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MVE
	bool "mve removed"
	select BR2_LEGACY

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_NUVDEMUX
	bool "nuvdemux removed"
	select BR2_LEGACY

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_PATCHDETECT
	bool "patchdetect removed"
	select BR2_LEGACY

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SDI
	bool "sdi removed"
	select BR2_LEGACY

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_TTA
	bool "tta removed"
	select BR2_LEGACY

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_VIDEOMEASURE
	bool "videomeasure removed"
	select BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_IQA
	select BR2_LEGACY
	help
	  videomeasure plugin has been removed and has been replaced by
	  iqa, which has automatically been enabled.

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_APEXSINK
	bool "apexsink removed"
	select BR2_LEGACY

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_SDL
	bool "sdl removed"
	select BR2_LEGACY

config BR2_PACKAGE_GST1_PLUGINS_UGLY_PLUGIN_MAD
	bool "mad (*.mp3 audio) removed"
	select BR2_LEGACY

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_WEBRTC
	bool "gst1-plugins-bad webrtc renamed to webrtcdsp"
	select BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_WEBRTCDSP
	select BR2_LEGACY
	help
	  The WebRTC plugin in GStreamer 1.x has always been named
	  webrtcdsp, but was wrongly introduced in Buildroot under the
	  name webrtc. Therefore, we have renamed the option to match
	  the actual name of the GStreamer plugin.

config BR2_STRIP_none
	bool "Strip command 'none' has been removed"
	select BR2_LEGACY
	help
	  The strip command choice has been changed into a single
	  boolean option. Please check that the new setting is
	  correct (in the "Build options" sub-menu)

config BR2_PACKAGE_BEECRYPT_CPP
	bool "C++ support removed in beecrypt"
	select BR2_LEGACY
	help
	  Support for C++ depends on icu. The beecrypt package is
	  incompatible with icu 59+.

config BR2_PACKAGE_SPICE_CLIENT
	bool "spice client support removed"
	select BR2_LEGACY
	help
	  Spice client support has been removed upstream. The
	  functionality now lives in the spice-gtk widget and
	  virt-viewer.

config BR2_PACKAGE_SPICE_GUI
	bool "spice gui support removed"
	select BR2_LEGACY
	help
	  Spice gui support has been removed upstream. The
	  functionality now lives in the spice-gtk widget and
	  virt-viewer.

config BR2_PACKAGE_SPICE_TUNNEL
	bool "spice network redirection removed"
	select BR2_LEGACY
	help
	  Spice network redirection, aka tunnelling has been removed
	  upstream.

config BR2_PACKAGE_INPUT_TOOLS
	bool "input-tools removed"
	select BR2_LEGACY
	select BR2_PACKAGE_LINUXCONSOLETOOLS
	help
	  input-tools has been removed, it is replaced by
	  linuxconsoletools, which has automatically been enabled.

config BR2_PACKAGE_INPUT_TOOLS_INPUTATTACH
	bool "inputattach moved to linuxconsoletools"
	select BR2_LEGACY
	select BR2_PACKAGE_LINUXCONSOLETOOLS
	select BR2_PACKAGE_LINUXCONSOLETOOLS_INPUTATTACH
	help
	  input-tools has been removed, inputattach is now part
	  of linuxconsoletools, which has automatically been
	  enabled.

config BR2_PACKAGE_INPUT_TOOLS_JSCAL
	bool "jscal moved to linuxconsoletools"
	select BR2_LEGACY
	select BR2_PACKAGE_LINUXCONSOLETOOLS
	select BR2_PACKAGE_LINUXCONSOLETOOLS_JOYSTICK
	help
	  input-tools has been removed, jscal is now part
	  of linuxconsoletools, which has automatically been
	  enabled.

config BR2_PACKAGE_INPUT_TOOLS_JSTEST
	bool "jstest moved to linuxconsoletools"
	select BR2_LEGACY
	select BR2_PACKAGE_LINUXCONSOLETOOLS
	select BR2_PACKAGE_LINUXCONSOLETOOLS_JOYSTICK
	help
	  input-tools has been removed, jstest is now part
	  of linuxconsoletools, which has automatically been
	  enabled.

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_SH
	bool "SH Sourcery toolchain has been removed"
	select BR2_LEGACY
	help
	  The Sourcery CodeBench toolchain for the sh architecture has
	  been removed, since it uses glibc older than 2.17 that requires
	  -lrt to link executables using clock_* system calls. This makes
	  this toolchain difficult to maintain over time.

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_X86
	bool "x86 Sourcery toolchain has been removed"
	select BR2_LEGACY
	help
	  The Sourcery CodeBench toolchain for the x86 architecture has
	  been removed, since it uses glibc older than 2.17 that requires
	  -lrt to link executables using clock_* system calls. This makes
	  this toolchain difficult to maintain over time.

config BR2_GCC_VERSION_4_8_X
	bool "gcc 4.8.x support removed"
	select BR2_LEGACY
	help
	  Support for gcc version 4.8.x has been removed. The current
	  default version (5.x or later) has been selected instead.

###############################################################################
comment "Legacy options removed in 2017.05"

config BR2_PACKAGE_SUNXI_MALI_R2P4
	bool "sunxi-mali r2p4 removed"
	select BR2_LEGACY
	help
	  sunxi-mali libMali for r2p4 Mali kernel module has been
	  removed since the libump package only provides libUMP.so.3.
	  libMali for r2p4 Mali kernel module requires libUMP.so.2.

config BR2_PACKAGE_NODEJS_MODULES_COFFEESCRIPT
	bool "CoffeeScript option has been removed"
	select BR2_LEGACY
	help
	  The option to enable NodeJS CoffeeScript has been removed.
	  To continue using it, add "coffee-script" to
	  BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL.

config BR2_PACKAGE_NODEJS_MODULES_EXPRESS
	bool "Express web application framework option has been removed"
	select BR2_LEGACY
	help
	  The option to enable the NodeJS Express web application
	  framework has been removed. To continue using it, add
	  "express" to BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL.

config BR2_PACKAGE_BLUEZ5_UTILS_GATTTOOL
	bool "bluez5_utils gatttool install option removed"
	select BR2_PACKAGE_BLUEZ5_UTILS_DEPRECATED
	help
	  The option to install gatttool specifically has been removed.
	  Since version 5.44 gatttool is in the list of deprecated
	  tools. The option to build and install deprecated tools has
	  been automatically enabled.

config BR2_PACKAGE_OPENOCD_FT2XXX
	bool "openocd ft2232 support has been removed"
	select BR2_PACKAGE_OPENOCD_FTDI
	select BR2_LEGACY
	help
	  FT2232 support in OpenOCD has been removed, it's replaced by
	  FDTI support, which has automatically been enabled.

config BR2_PACKAGE_KODI_RTMPDUMP
	bool "kodi rtmp has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_INPUTSTREAM_RTMP
	help
	  Internal rtmp support was removed from Kodi.

config BR2_PACKAGE_KODI_VISUALISATION_FOUNTAIN
	bool "kodi-visualisation-fountain has been removed"
	select BR2_LEGACY
	help
	  According to upstream 'the visualization is not currently
	  in a working shape.'

config BR2_PACKAGE_PORTMAP
	bool "portmap has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_RPCBIND
	help
	  The portmap upstream tarball is removed, no releases since
	  ten years and latest change in upstream git in 2014.
	  You should better use rpcbind as a RPC portmapper.

config BR2_BINUTILS_VERSION_2_25_X
	bool "binutils version 2.25 support removed"
	select BR2_LEGACY
	help
	  Support for binutils version 2.25 has been removed. The
	  current default version (2.27 or later) has been selected
	  instead.

config BR2_TOOLCHAIN_BUILDROOT_INET_RPC
	bool "uclibc RPC support has been removed"
	select BR2_LEGACY
	help
	  uClibc-ng removed internal RPC implementation in 1.0.23. You
	  should use libtirpc instead.

config BR2_TARGET_ROOTFS_EXT2_EXTRA_BLOCKS
	int "extra size in blocks has been removed"
	default 0
	help
	  Since the support for auto calculation of the filesystem size has been
	  removed, this option is now useless and must be 0.
	  You may want to check that BR2_TARGET_ROOTFS_EXT2_BLOCKS matchs
	  your needs.

config BR2_TARGET_ROOTFS_EXT2_EXTRA_BLOCKS_WRAP
	bool
	default y if BR2_TARGET_ROOTFS_EXT2_EXTRA_BLOCKS != 0
	select BR2_LEGACY

config BR2_PACKAGE_SYSTEMD_KDBUS
	bool "systemd-kdbus has been removed"
	select BR2_LEGACY
	help
	  --enable/disable-kdbus configure option has been removed since
	  systemd-231.

config BR2_PACKAGE_POLARSSL
	bool "polarssl has been removed"
	select BR2_LEGACY
	help
	  The polarssl crypto library has been removed since the 1.2.x
	  release branch is no longer maintained. Newer upstream
	  branches/releases (mbedtls) have API changes so they're not
	  drop-in replacements.

config BR2_NBD_CLIENT
	bool "nbd client option was renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_NBD_CLIENT
	help
	  The nbd client option has been renamed to BR2_PACKAGE_NBD_CLIENT.

config BR2_NBD_SERVER
	bool "nbd server option was renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_NBD_SERVER
	help
	  The nbd server option has been renamed to BR2_PACKAGE_NBD_SERVER.

config BR2_PACKAGE_GMOCK
	bool "gmock merged into gtest package"
	select BR2_LEGACY
	select BR2_PACKAGE_GTEST
	select BR2_PACKAGE_GTEST_GMOCK
	help
	  GMock is now a suboption of the GTest package.

config BR2_KERNEL_HEADERS_4_8
	bool "kernel headers version 4.8.x are no longer supported"
	select BR2_KERNEL_HEADERS_4_4
	select BR2_LEGACY
	help
	  Version 4.8.x of the Linux kernel headers are no longer
	  maintained upstream and are now removed. As an alternative,
	  version 4.4.x of the headers have been automatically
	  selected in your configuration.

config BR2_KERNEL_HEADERS_3_18
	bool "kernel headers version 3.18.x are no longer supported"
	select BR2_KERNEL_HEADERS_3_12
	select BR2_LEGACY
	help
	  Version 3.18.x of the Linux kernel headers are no longer
	  maintained upstream and are now removed. As an alternative,
	  version 3.12.x of the headers have been automatically
	  selected in your configuration.

config BR2_GLIBC_VERSION_2_22
	bool "glibc 2.22 removed"
	select BR2_LEGACY
	help
	  Support for glibc version 2.22 has been removed. The current
	  default version has been selected instead.

###############################################################################
comment "Legacy options removed in 2017.02"

config BR2_PACKAGE_PERL_DB_FILE
	bool "perl-db-file removed"
	select BR2_LEGACY
	select BR2_PACKAGE_BERKELEYDB
	select BR2_PACKAGE_PERL
	help
	  DB_File can be built as a core Perl module, so the separate
	  perl-db-file package has been removed.

config BR2_KERNEL_HEADERS_4_7
	bool "kernel headers version 4.7.x are no longer supported"
	select BR2_KERNEL_HEADERS_4_4
	select BR2_LEGACY
	help
	  Version 4.7.x of the Linux kernel headers are no longer
	  maintained upstream and are now removed. As an alternative,
	  version 4.4.x of the headers have been automatically
	  selected in your configuration.

config BR2_KERNEL_HEADERS_4_6
	bool "kernel headers version 4.6.x are no longer supported"
	select BR2_KERNEL_HEADERS_4_4
	select BR2_LEGACY
	help
	  Version 4.6.x of the Linux kernel headers are no longer
	  maintained upstream and are now removed. As an alternative,
	  version 4.4.x of the headers have been automatically
	  selected in your configuration.

config BR2_KERNEL_HEADERS_4_5
	bool "kernel headers version 4.5.x are no longer supported"
	select BR2_KERNEL_HEADERS_4_4
	select BR2_LEGACY
	help
	  Version 4.5.x of the Linux kernel headers are no longer
	   maintained upstream and are now removed. As an alternative,
	   version 4.4.x of the headers have been automatically
	   selected in your configuration.

config BR2_KERNEL_HEADERS_3_14
	bool "kernel headers version 3.14.x are no longer supported"
	select BR2_KERNEL_HEADERS_3_12
	select BR2_LEGACY
	  help
	  Version 3.14.x of the Linux kernel headers are no longer
	  maintained upstream and are now removed. As an alternative,
	  version 3.12.x of the headers have been automatically
	  selected in your configuration.

config BR2_TOOLCHAIN_EXTERNAL_MUSL_CROSS
	bool "musl-cross 1.1.12 toolchain removed"
	select BR2_LEGACY
	help
	  The support for the prebuilt toolchain based on the Musl C
	  library provided by the musl-cross project has been removed.
	  Upstream doesn't provide any prebuilt toolchain anymore, use the
	  Buildroot toolchain instead.

config BR2_UCLIBC_INSTALL_TEST_SUITE
	bool "uClibc tests now in uclibc-ng-test"
	select BR2_LEGACY
	select BR2_PACKAGE_UCLIBC_NG_TEST
	help
	  The test suite of the uClibc C library has been moved into a
	  separate package, uclibc-ng-test.

config BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX
	bool "Blackfin.uclinux.org 2014R1 toolchain removed"
	select BR2_LEGACY
	help
	  The ADI Blackfin toolchain has many bugs which are fixed in
	  more recent gcc and uClibc-ng releases. Use the Buildroot
	  toolchain instead.

config BR2_PACKAGE_MAKEDEVS
	bool "makedevs removed"
	select BR2_LEGACY
	help
	  The makedevs tool is part of busybox. The Buildroot fork
	  should not be used outside of the Buildroot infrastructure.

config BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV7A
	bool "Arago ARMv7 2011.09 removed"
	select BR2_LEGACY
	help
	  The Arago toolchains are every old and not updated anymore.

config BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV5TE
	bool "Arago ARMv5 2011.09 removed"
	select BR2_LEGACY
	help
	  The Arago toolchains are every old and not updated anymore.

config BR2_PACKAGE_SNOWBALL_HDMISERVICE
	bool "snowball-hdmiservice removed"
	select BR2_LEGACY
	help
	  We no longer have support for the Snowball platform in
	  Buildroot, so this package was no longer useful.

config BR2_PACKAGE_SNOWBALL_INIT
	bool "snowball-init removed"
	select BR2_LEGACY
	help
	  We no longer have support for the Snowball platform in
	  Buildroot, so this package was no longer useful.

config BR2_GDB_VERSION_7_9
	bool "gdb 7.9 has been removed"
	select BR2_LEGACY
	help
	  The 7.9 version of gdb has been removed. Use a newer version
	  instead.

###############################################################################
comment "Legacy options removed in 2016.11"

config BR2_PACKAGE_PHP_SAPI_CLI_CGI
	bool "PHP CGI and CLI options are now seperate"
	select BR2_PACKAGE_PHP_SAPI_CLI
	select BR2_PACKAGE_PHP_SAPI_CGI
	select BR2_LEGACY
	help
	  The PHP Interface options have been split up into a
	  separate option for each interface.

config BR2_PACKAGE_PHP_SAPI_CLI_FPM
	bool "PHP CLI and FPM options are now separate"
	select BR2_PACKAGE_PHP_SAPI_CLI
	select BR2_PACKAGE_PHP_SAPI_FPM
	select BR2_LEGACY
	help
	  The PHP Interface options have been split up into a
	  separate option for each interface.

config BR2_PACKAGE_WVSTREAMS
	bool "wvstreams removed"
	select BR2_LEGACY
	help
	  wvstreams is not maintained anymore since about 2009. It also
	  doesn't build anymore with recent compilers (GCC 5+).

config BR2_PACKAGE_WVDIAL
	bool "wvdial removed"
	select BR2_LEGACY
	help
	  wvdial is not maintained anymore since about 2009. It also
	  doesn't build anymore with recent compilers (GCC 5+).

config BR2_PACKAGE_WEBKITGTK24
	bool "webkitgtk 2.4.x removed"
	select BR2_LEGACY
	help
	  This legacy package only existed because some other packages
	  depended on that specific version of webkitgtk. However, the
	  other packages have been fixed. webkitgtk 2.4 is full of
	  security issues so it needs to be removed.

config BR2_PACKAGE_TORSMO
	bool "torsmo removed"
	select BR2_LEGACY
	help
	  torsmo has been unmaintained for a long time, and nobody
	  seems to be interested in it.

config BR2_PACKAGE_SSTRIP
	bool "sstrip removed"
	select BR2_LEGACY
	help
	  sstrip is unmaintained and potentially harmful. It doesn't
	  save so much compared to normal binutils strip, and there is
	  a big risk of binaries that don't work. Use normal strip
	  instead.

config BR2_KERNEL_HEADERS_4_3
	bool "kernel headers version 4.3.x are no longer supported"
	select BR2_KERNEL_HEADERS_4_1
	select BR2_LEGACY
	help
	  Version 4.3.x of the Linux kernel headers are no longer
	  maintained upstream and are now removed. As an alternative,
	  version 4.1.x of the headers have been automatically
	  selected in your configuration.

config BR2_KERNEL_HEADERS_4_2
	bool "kernel headers version 4.2.x are no longer supported"
	select BR2_KERNEL_HEADERS_4_1
	select BR2_LEGACY
	help
	  Version 4.2.x of the Linux kernel headers are no longer
	  maintained upstream and are now removed. As an alternative,
	  version 4.1.x of the headers have been automatically
	  selected in your configuration.

config BR2_PACKAGE_KODI_ADDON_XVDR
	bool "kodi-addon-xvdr removed"
	select BR2_LEGACY
	help
	  According to the github project page:
	  https://github.com/pipelka/xbmc-addon-xvdr
	  this package is discontinued.

config BR2_PACKAGE_IPKG
	bool "ipkg removed"
	select BR2_LEGACY
	help
	  ipkg dates back to the early 2000s when Compaq started the
	  handhelds.org project and it hasn't seen development since 2006.
	  Use opkg as a replacement.

config BR2_GCC_VERSION_4_7_X
	bool "gcc 4.7.x support removed"
	select BR2_LEGACY
	help
	  Support for gcc version 4.7.x has been removed. The current
	  default version (4.9.x or later) has been selected instead.

config BR2_BINUTILS_VERSION_2_24_X
	bool "binutils version 2.24 support removed"
	select BR2_LEGACY
	help
	  Support for binutils version 2.24 has been removed. The
	  current default version (2.26 or later) has been selected
	  instead.

config BR2_PACKAGE_WESTON_RPI
	bool "Weston propietary RPI support is gone"
	select BR2_LEGACY
	help
	  Upstream decided the propietary (rpi-userland) weston composer
	  support wasn't worth the effort so it was removed. Switch to
	  the open VC4 support.

config BR2_LINUX_KERNEL_TOOL_CPUPOWER
	bool "linux-tool cpupower"
	depends on BR2_LINUX_KERNEL
	select BR2_LEGACY
	select BR2_PACKAGE_LINUX_TOOLS_CPUPOWER
	help
	  Linux tool cpupower option was renamed.

config BR2_LINUX_KERNEL_TOOL_PERF
	bool "linux-tool perf"
	depends on BR2_LINUX_KERNEL
	select BR2_LEGACY
	select BR2_PACKAGE_LINUX_TOOLS_PERF
	help
	  Linux tool perf option was renamed.

config BR2_LINUX_KERNEL_TOOL_SELFTESTS
	bool "linux-tool selftests"
	depends on BR2_LINUX_KERNEL
	select BR2_LEGACY
	select BR2_PACKAGE_LINUX_TOOLS_SELFTESTS
	help
	  Linux tool selftests option was renamed.

config BR2_GCC_VERSION_4_8_ARC
	bool "gcc arc option renamed"
	select BR2_LEGACY
	select BR2_GCC_VERSION_ARC
	help
	  The option that selects the gcc version for the ARC
	  architecture has been renamed to BR2_GCC_VERSION_ARC.

config BR2_KERNEL_HEADERS_4_0
	bool "kernel headers version 4.0.x are no longer supported"
	select BR2_KERNEL_HEADERS_3_12
	select BR2_LEGACY
	help
	  Version 4.0.x of the Linux kernel headers have been deprecated
	  for more than four buildroot releases and are now removed.
	  As an alternative, version 3.12.x of the headers have been
	  automatically selected in your configuration.

config BR2_KERNEL_HEADERS_3_19
	bool "kernel headers version 3.19.x are no longer supported"
	select BR2_KERNEL_HEADERS_3_12
	select BR2_LEGACY
	help
	  Version 3.19.x of the Linux kernel headers have been deprecated
	  for more than four buildroot releases and are now removed.
	  As an alternative, version 3.12.x of the headers have been
	  automatically selected in your configuration.

config BR2_PACKAGE_LIBEVAS_GENERIC_LOADERS
	bool "libevas-generic-loaders package removed"
	select BR2_LEGACY
	select BR2_PACKAGE_EFL
	help
	  With EFL 1.18, libevas-generic-loaders is now provided by the efl
	  package.

config BR2_PACKAGE_ELEMENTARY
	bool "elementary package removed"
	select BR2_LEGACY
	select BR2_PACKAGE_EFL
	help
	  With EFL 1.18, elementary is now provided by the efl package.

config BR2_LINUX_KERNEL_CUSTOM_LOCAL
	bool "Linux kernel local directory option removed"
	help
	  The option to select a local directory as the source of the Linux
	  kernel has been removed. It hurts reproducibility of builds.

	  In case you were using this option during development of your
	  Linux kernel, use the override mechanism instead.

###############################################################################
comment "Legacy options removed in 2016.08"

config BR2_PACKAGE_EFL_JP2K
	bool "libevas jp2k loader has been removed"
	select BR2_LEGACY
	help
	  JP2K support in EFL requires openjpeg 1.x (libopenjpeg1.pc)
	  while Buildroot only packages openjpeg 2.x. Therefore, the
	  JP2K loader has been removed from EFL.

config BR2_PACKAGE_SYSTEMD_COMPAT
	bool "systemd compatibility libraries have been removed"
	select BR2_LEGACY
	help
	  The systemd option to enable the compatibility libraries has
	  been removed. Theses libraries have been useless since a few
	  version, and have been fully dropped from the source since
	  v230.

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_LIVEADDER
	bool "gst1-plugins-bad liveadder plugin removed"
	select BR2_LEGACY
	select BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_AUDIOMIXER
	help
	  The functionality of the liveadder plugin of the
	  gst1-plugins-bad package has been merged into audiomixer.

config BR2_PACKAGE_LIBFSLVPUWRAP
	bool "libfslvpuwrap has been renamed to imx-vpuwrap"
	select BR2_LEGACY
	select BR2_PACKAGE_IMX_VPUWRAP
	help
	  The libfslvpuwrap has been renamed to match the renamed package.

config BR2_PACKAGE_LIBFSLPARSER
	bool "libfslparser has been renamed to imx-parser"
	select BR2_LEGACY
	select BR2_PACKAGE_IMX_PARSER
	help
	  The libfslparser has been renamed to match the renamed package.

config BR2_PACKAGE_LIBFSLCODEC
	bool "libfslcodec has been renamed to imx-codec"
	select BR2_LEGACY
	select BR2_PACKAGE_IMX_CODEC
	help
	  The libfslcodec has been renamed to match the renamed package.

config BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE_FIT_SIGNATURE_SUPPORT
	bool "FIT support in uboot-tools has been refactored"
	select BR2_LEGACY
	select BR2_PACKAGE_DTC
	select BR2_PACKAGE_DTC_PROGRAMS
	select BR2_PACKAGE_UBOOT_TOOLS_FIT_SUPPORT
	select BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT
	select BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE
	help
	  This option has been removed in favor of a more fine-grained
	  configuration, which is recommended. Selecting this option
	  enables FIT and FIT signature support for the target packages.
	  It will also select the dtc and openssl packages.

config BR2_PTHREADS_OLD
	bool "linuxthreads (stable/old)"
	select BR2_LEGACY
	help
	  Linuxthreads have been reworked, BR2_PTHREADS_OLD is now
	  BR2_PTHREADS and the old BR2_PTHREADS - LT.new got removed.

config BR2_BINUTILS_VERSION_2_23_X
	bool "binutils 2.23 removed"
	select BR2_LEGACY
	help
	  Binutils 2.23 has been removed, using a newer version is
	  recommended.

config BR2_TOOLCHAIN_BUILDROOT_EGLIBC
	bool "eglibc support has been removed"
	select BR2_LEGACY
	help
	  The eglibc project no longer exists, as it has been merged
	  back into the glibc project. Therefore, support for eglibc
	  has been removed, and glibc should be used instead.

config BR2_GDB_VERSION_7_8
	bool "gdb 7.8 has been removed"
	select BR2_LEGACY
	help
	  The 7.8 version of gdb has been removed. Use a newer version
	  instead.

###############################################################################
comment "Legacy options removed in 2016.05"

config BR2_PACKAGE_OPENVPN_CRYPTO_POLARSSL
	bool "openvpn polarssl crypto backend removed"
	select BR2_LEGACY
	help
	  The OpenVPN polarssl crypto backend option has been removed.
	  Version from 2.3.10 onwards need polarssl >= 1.3.8 but aren't
	  compatible with mbedtls (polarssl) series 2.x which is the
	  version provided in buildroot. And both can't coexist.
	  It now uses OpenSSL as the only option.


config BR2_PACKAGE_NGINX_HTTP_SPDY_MODULE
	bool "nginx http spdy module removed"
	select BR2_LEGACY
	select BR2_PACKAGE_NGINX_HTTP_V2_MODULE
	help
	  The ngx_http_spdy_module has been superseded by the
	  ngx_http_v2_module since nginx v1.9.5.  The
	  ngx_http_v2_module modules has been automatically selected
	  in your configuration.

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_RTP
	bool "gst1-plugins-bad rtp plugin moved to good"
	select BR2_LEGACY
	help
	  The rtp plugin has been moved from gst1-plugins-base to
	  gst1-plugins-good.

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_MPG123
	bool "gst1-plugins-bad mpg123 plugin moved to ugly"
	select BR2_LEGACY
	help
	  The mpg123 plugin has been moved from gst1-plugins-bad to
	  gst1-plugins-ugly.

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC
	bool "PowerPC Sourcery toolchain has been removed"
	select BR2_LEGACY
	help
	  The Sourcery CodeBench toolchain for the PowerPC
	  architecture has been removed, as it was very old, not
	  maintained, and causing numerous build failures with modern
	  userspace packages.

config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_POWERPC_E500V2
	bool "PowerPC Sourcery E500v2 toolchain has been removed"
	select BR2_LEGACY
	help
	  The Sourcery CodeBench toolchain for the PowerPC E500v2
	  architecture has been removed, as it was very old, not
	  maintained, and causing numerous build failures with modern
	  userspace packages.

config BR2_x86_i386
	bool "x86 i386 support removed"
	select BR2_LEGACY
	help
	  The support for the i386 processors of the x86 architecture
	  has been removed.

config BR2_PACKAGE_QT5QUICK1
	bool "qt5quick1 package removed"
	select BR2_LEGACY
	help
	  The qt5quick1 package has been removed, since it was removed
	  from upstream starting from Qt 5.6.

config BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR
	string "uboot custom patch dir has been removed"
	help
	  The uboot custom patch directory option has been removed. Use
	  the improved BR2_TARGET_UBOOT_PATCH option instead.

config BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR_WRAP
	bool
	default y if BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR != ""
	select BR2_LEGACY

# Note: BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR is still referenced from
# boot/uboot/Config.in

config BR2_PACKAGE_XDRIVER_XF86_INPUT_VOID
	bool "xf86-input-void removed"
	select BR2_LEGACY
	help
	  The xf86-input-void package has been removed, there's no need
	  for it in any modern (post-2007) xorg server.

config BR2_KERNEL_HEADERS_3_17
	bool "kernel headers version 3.17.x are no longer supported"
	select BR2_KERNEL_HEADERS_3_12
	select BR2_LEGACY
	help
	  Version 3.17.x of the Linux kernel headers have been deprecated
	  for more than four buildroot releases and are now removed.
	  As an alternative, version 3.12.x of the headers have been
	  automatically selected in your configuration.

config BR2_GDB_VERSION_7_7
	bool "gdb 7.7 has been removed"
	select BR2_LEGACY
	help
	  The 7.7 version of gdb has been removed. Use a newer version
	  instead.

config BR2_PACKAGE_FOOMATIC_FILTERS
	bool "foomatic-filters"
	select BR2_LEGACY
	help
	  The foomatic-filters package was removed.

config BR2_PACKAGE_SAMBA
	bool "samba"
	select BR2_LEGACY
	help
	  The samba package was removed in favour of samba4 since the
	  3.x series isn't supported by upstream any longer.

config BR2_PACKAGE_KODI_WAVPACK
	bool "wavpack"
	select BR2_LEGACY
	help
	  wavpack support was removed in favour of ffmpeg:
	  https://github.com/xbmc/xbmc/commit/7916902c9e6f7a523265594f3ad7f921f93f1cd4

config BR2_PACKAGE_KODI_RSXS
	bool "rsxs support in Kodi was moved to an addon"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_SCREENSAVER_RSXS
	help
	  rsxs support in Kodi was moved to an addon

config BR2_PACKAGE_KODI_GOOM
	bool "Goom support in Kodi was moved to an addon"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_VISUALISATION_GOOM
	help
	  Goom support in Kodi was moved to an addon

config BR2_PACKAGE_SYSTEMD_ALL_EXTRAS
	bool "systemd all extras option has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_XZ
	select BR2_PACKAGE_LIBGCRYPT
	help
	  The systemd option to enable "all extras" has been
	  removed. To get the same features, the libgcrypt and xz
	  package should now be enabled.

config BR2_GCC_VERSION_4_5_X
	bool "gcc 4.5.x has been removed"
	select BR2_LEGACY
	help
	  The 4.5.x version of gcc has been removed. Use a newer
	  version instead.

config BR2_PACKAGE_SQLITE_READLINE
	bool "sqlite command-line editing support was updated"
	select BR2_PACKAGE_NCURSES
	select BR2_PACKAGE_READLINE
	select BR2_LEGACY
	help
	  This option was removed in favour of the sqlite package
	  deciding itself depending on the enabled packages whether
	  command-line editing should be enabled, it also also takes
	  libedit into account.

###############################################################################
comment "Legacy options removed in 2016.02"

config BR2_PACKAGE_DOVECOT_BZIP2
	bool "bzip2 support option has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_BZIP2
	help
	  Bzip2 support is built if the bzip2 package is selected.

config BR2_PACKAGE_DOVECOT_ZLIB
	bool "zlib support option has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_ZLIB
	help
	  Zlib support is built if the zlib package is selected.

config BR2_PACKAGE_E2FSPROGS_FINDFS
	bool "e2fsprogs findfs option has been removed"
	select BR2_LEGACY
	help
	  This option attempted to enable findfs capabilities from
	  e2fsprogs but has not worked since July 2015 (due to
	  packaging changes). One can use BusyBox's findfs support or
	  enable the BR2_PACKAGE_UTIL_LINUX_BINARIES option.

config BR2_PACKAGE_OPENPOWERLINK_DEBUG_LEVEL
	bool "openpowerlink debug option has been removed"
	select BR2_LEGACY
	help
	  This option depends on BR2_ENABLE_DEBUG which should not be used
	  by packages anymore.

config BR2_PACKAGE_OPENPOWERLINK_KERNEL_MODULE
	bool "openpowerlink package has been updated"
	select BR2_LEGACY
	select BR2_PACKAGE_OPENPOWERLINK_STACK_KERNEL_STACK_LIB
	help
	  openpowerlink kernel modules are built if the
	  kernel stack library is selected.

config BR2_PACKAGE_OPENPOWERLINK_LIBPCAP
	bool "openpowerlink package has been updated"
	select BR2_LEGACY
	select BR2_PACKAGE_OPENPOWERLINK_STACK_USERSPACE_DAEMON_LIB
	help
	  The user space support has been split in two part:
	  - a monolitic user space library
	  - a user spae deamon driver

config BR2_LINUX_KERNEL_SAME_AS_HEADERS
	bool "using the linux headers version for the kernel has been removed"
	select BR2_LEGACY
	help
	  The option to use the version of the kernel headers for the
	  kernel to build has been removed.

	  There is now the converse, better-suited and more versatile
	  option to use the kernel version for the linux headers.

config BR2_PACKAGE_CUPS_PDFTOPS
	bool "Pdftops support has been removed from Cups"
	select BR2_PACKAGE_CUPS_FILTERS
	select BR2_LEGACY
	help
	  Pdftops support has been removed from the cups package
	  It is now part of the cups-filters package.

config BR2_KERNEL_HEADERS_3_16
	bool "kernel headers version 3.16.x are no longer supported"
	select BR2_KERNEL_HEADERS_3_12
	select BR2_LEGACY
	help
	Version 3.16.x of the Linux kernel headers have been deprecated
	for more than four buildroot releases and are now removed.
	As an alternative, version 3.12.x of the headers have been
	automatically selected in your configuration.

config BR2_PACKAGE_PYTHON_PYXML
	bool "python-pyxml package has been removed"
	select BR2_LEGACY
	help
	  PyXML is obsolete and its functionality is covered either via
	  native Python XML support or python-lxml package.

# BR2_ENABLE_SSP is still referenced in Config.in (default in choice)
config BR2_ENABLE_SSP
	bool "Stack Smashing protection now has different levels"
	help
	  The protection offered by SSP can now be selected from different
	  protection levels. Be sure to review the SSP level in the build
	  options menu.

config BR2_PACKAGE_DIRECTFB_CLE266
	bool "cle266 driver for directfb removed"
	select BR2_LEGACY
	help
	  The cle266 directfb driver support has been removed.
	  It doesn't build in the latest version and it's unlikely
	  anyone has any use for it.

config BR2_PACKAGE_DIRECTFB_UNICHROME
	bool "unichrome driver for directfb removed"
	select BR2_LEGACY
	help
	  The unichrome directfb driver support has been removed.
	  It doesn't build in the latest version and it's unlikely
	  anyone has any use for it.

config BR2_PACKAGE_LIBELEMENTARY
	bool "libelementary has been renamed to elementary"
	select BR2_LEGACY
	select BR2_PACKAGE_ELEMENTARY
	help
	  The libelementary package has been renamed to match the upstream
	  name.

config BR2_PACKAGE_LIBEINA
	bool "libeina package has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_EFL
	help
	  With EFL 1.15, libeina is now provided by the efl package.

config BR2_PACKAGE_LIBEET
	bool "libeet package has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_EFL
	help
	  With EFL 1.15, libeet is now provided by the efl package.

config BR2_PACKAGE_LIBEVAS
	bool "libevas package has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_EFL
	help
	  With EFL 1.15, libevas is now provided by the efl package.

config BR2_PACKAGE_LIBECORE
	bool "libecore package has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_EFL
	help
	  With EFL 1.15, libecore is now provided by the efl package.

config BR2_PACKAGE_LIBEDBUS
	bool "libedbus package has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_EFL
	help
	  With EFL 1.15, libedbus is now provided by the efl package.

config BR2_PACKAGE_LIBEFREET
	bool "libefreet package has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_EFL
	help
	  With EFL 1.15, libefreet is now provided by the efl package.

config BR2_PACKAGE_LIBEIO
	bool "libeio package has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_EFL
	help
	  With EFL 1.15, libeio is now provided by the efl package.

config BR2_PACKAGE_LIBEMBRYO
	bool "libembryo package has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_EFL
	help
	  With EFL 1.15, libembryo is now provided by the efl package.

config BR2_PACKAGE_LIBEDJE
	bool "libedje package has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_EFL
	help
	  With EFL 1.15, libedje is now provided by the efl package.

config BR2_PACKAGE_LIBETHUMB
	bool "libethumb package has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_EFL
	help
	  With EFL 1.15, libethumb is now provided by the efl package.

config BR2_PACKAGE_INFOZIP
	bool "infozip option has been renamed to zip"
	select BR2_LEGACY
	select BR2_PACKAGE_ZIP
	help
	  Info-Zip's Zip package has been renamed from infozip to zip,
	  to avoid ambiguities with Info-Zip's UnZip which has been added
	  in the unzip package.

config BR2_BR2_PACKAGE_NODEJS_0_10_X
	bool "nodejs 0.10.x option removed"
	select BR2_LEGACY
	select BR2_PACKAGE_NODEJS
	help
	  nodejs 0.10.x option has been removed.  0.10.x is now
	  automatically chosen for ARMv5 architectures only and the latest
	  nodejs for all other supported architectures. The correct nodejs
	  version has been automatically selected in your configuration.

config BR2_BR2_PACKAGE_NODEJS_0_12_X
	bool "nodejs version 0.12.x has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_NODEJS
	help
	  nodejs version 0.12.x has been removed.  As an alternative,
	  the latest nodejs version has been automatically selected in
	  your configuration.

config BR2_BR2_PACKAGE_NODEJS_4_X
	bool "nodejs version 4.x has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_NODEJS
	help
	  nodejs version 4.x has been removed.  As an alternative,
	  the latest nodejs version has been automatically selected in
	  your configuration.

###############################################################################
comment "Legacy options removed in 2015.11"

config BR2_PACKAGE_GST1_PLUGINS_BAD_PLUGIN_REAL
	bool "gst1-plugins-bad real plugin has been removed"
	select BR2_LEGACY
	help
	  The real plugin from GStreamer 1 bad plugins has been
	  removed.

config BR2_PACKAGE_MEDIA_CTL
	bool "media-ctl package has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_LIBV4L
	select BR2_PACKAGE_LIBV4L_UTILS
	help
	  media-ctl source and developement have been moved to
	  v4l-utils since June 2014. For an up-to-date media-ctl
	  version select BR2_PACKAGE_LIBV4L and BR2_PACKAGE_LIBV4L_UTILS.

config BR2_PACKAGE_SCHIFRA
	bool "schifra package has been removed"
	select BR2_LEGACY
	help
	  Schifra package has been maked broken since 2014.11 release and
	  haven't been fixed since then.

config BR2_PACKAGE_ZXING
	bool "zxing option has been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_ZXING_CPP
	help
	  ZXing no longer provides the cpp bindings, it has been renamed to
	  BR2_PACKAGE_ZXING_CPP which uses a new upstream.

# Since FreeRDP has new dependencies, protect this legacy to avoid the
# infamous "unmet direct dependencies" kconfig error.
config BR2_PACKAGE_FREERDP_CLIENT
	bool "freerdp client option renamed"
	depends on BR2_PACKAGE_FREERDP
	select BR2_LEGACY
	select BR2_PACKAGE_FREERDP_CLIENT_X11

config BR2_PACKAGE_BLACKBOX
	bool "blackbox package has been removed"
	select BR2_LEGACY
	help
	  Upstream is dead and the package has been deprecated for
	  some time. There are other alternative maintained WMs.

config BR2_KERNEL_HEADERS_3_0
	bool "kernel headers version 3.0.x are no longer supported"
	select BR2_KERNEL_HEADERS_3_2
	select BR2_LEGACY
	help
	  Version 3.0.x of the Linux kernel headers have been deprecated
	  for more than four buildroot releases and are now removed.
	  As an alternative, version 3.2.x of the headers have been
	  automatically selected in your configuration.

config BR2_KERNEL_HEADERS_3_11
	bool "kernel headers version 3.11.x are no longer supported"
	select BR2_KERNEL_HEADERS_3_10
	select BR2_LEGACY
	help
	  Version 3.11.x of the Linux kernel headers have been deprecated
	  for more than four buildroot releases and are now removed.
	  As an alternative, version 3.10.x of the headers have been
	  automatically selected in your configuration.

config BR2_KERNEL_HEADERS_3_13
	bool "kernel headers version 3.13.x are no longer supported"
	select BR2_KERNEL_HEADERS_3_12
	select BR2_LEGACY
	help
	  Version 3.13.x of the Linux kernel headers have been deprecated
	  for more than four buildroot releases and are now removed.
	  As an alternative, version 3.12.x of the headers have been
	  automatically selected in your configuration.

config BR2_KERNEL_HEADERS_3_15
	bool "kernel headers version 3.15.x are no longer supported"
	select BR2_KERNEL_HEADERS_3_12
	select BR2_LEGACY
	help
	  Version 3.15.x of the Linux kernel headers have been deprecated
	  for more than four buildroot releases and are now removed.
	  As an alternative, version 3.12.x of the headers have been
	  automatically selected in your configuration.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_ANDI
	bool "DirectFB example df_andi has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_BLTLOAD
	bool "DirectFB example df_bltload has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_CPULOAD
	bool "DirectFB example df_cpuload has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_DATABUFFER
	bool "DirectFB example df_databuffer has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_DIOLOAD
	bool "DirectFB example df_dioload has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_DOK
	bool "DirectFB example df_dok has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_DRIVERTEST
	bool "DirectFB example df_drivertest has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_FIRE
	bool "DirectFB example df_fire has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_FLIP
	bool "DirectFB example df_flip has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_FONTS
	bool "DirectFB example df_fonts has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_INPUT
	bool "DirectFB example df_input has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_JOYSTICK
	bool "DirectFB example df_joystick has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_KNUCKLES
	bool "DirectFB example df_knuckles has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_LAYER
	bool "DirectFB example df_layer has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_MATRIX
	bool "DirectFB example df_matrix has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_MATRIX_WATER
	bool "DirectFB example df_matrix_water has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_NEO
	bool "DirectFB example df_neo has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_NETLOAD
	bool "DirectFB example df_netload has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_PALETTE
	bool "DirectFB example df_palette has been removed"
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_PARTICLE
	bool "DirectFB example df_particle has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_PORTER
	bool "DirectFB example df_porter has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_STRESS
	bool "DirectFB example df_stress has been removed"
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_TEXTURE
	bool "DirectFB example df_texture has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_VIDEO
	bool "DirectFB example df_video has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_VIDEO_PARTICLE
	bool "DirectFB example df_video_particle has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_DIRECTFB_EXAMPLES_WINDOW
	bool "DirectFB example df_window has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_EXAMPLES
	help
	  The per-DirectFB example options have been removed. The
	  BR2_PACKAGE_DIRECTFB_EXAMPLES option now installs all
	  examples.

config BR2_PACKAGE_KOBS_NG
	bool "kobs-ng was replaced by imx-kobs"
	select BR2_LEGACY
	select BR2_PACKAGE_IMX_KOBS
	help
	  The outdated kobs-ng has been replaced by the Freescale-
	  maintained imx-kobs package.

config BR2_PACKAGE_SAWMAN
	bool "sawman package removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_SAWMAN
	help
	  This option has been removed because the sawman package no
	  longer exists: it was merged inside DirectFB itself. This
	  feature can now be enabled using the
	  BR2_PACKAGE_DIRECTFB_SAWMAN option.

config BR2_PACKAGE_DIVINE
	bool "divine package removed"
	select BR2_LEGACY
	select BR2_PACKAGE_DIRECTFB_DIVINE
	help
	  This option has been removed because the divine package no
	  longer exists: it was merged inside DirectFB itself. This
	  feature can now be enabled using the
	  BR2_PACKAGE_DIRECTFB_DIVINE option.

###############################################################################
comment "Legacy options removed in 2015.08"

config BR2_PACKAGE_KODI_PVR_ADDONS
	bool "Kodi PVR addon was split"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_PVR_ARGUSTV
	select BR2_PACKAGE_KODI_PVR_DVBLINK
	select BR2_PACKAGE_KODI_PVR_DVBVIEWER
	select BR2_PACKAGE_KODI_PVR_FILMON
	select BR2_PACKAGE_KODI_PVR_HTS
	select BR2_PACKAGE_KODI_PVR_IPTVSIMPLE
	select BR2_PACKAGE_KODI_PVR_MEDIAPORTAL_TVSERVER
	select BR2_PACKAGE_KODI_PVR_MYTHTV
	select BR2_PACKAGE_KODI_PVR_NEXTPVR
	select BR2_PACKAGE_KODI_PVR_NJOY
	select BR2_PACKAGE_KODI_PVR_PCTV
	select BR2_PACKAGE_KODI_PVR_STALKER
	select BR2_PACKAGE_KODI_PVR_VBOX
	select BR2_PACKAGE_KODI_PVR_VDR_VNSI
	select BR2_PACKAGE_KODI_PVR_VUPLUS
	select BR2_PACKAGE_KODI_PVR_WMC
	help
	  Kodi PVR addon was split into seperate modules

config BR2_BINUTILS_VERSION_2_23_2
	bool "binutils 2.23 option renamed"
	select BR2_LEGACY
	help
	  Binutils 2.23.2 has been removed, using a newer version is
	  recommended.

config BR2_BINUTILS_VERSION_2_24
	bool "binutils 2.24 option renamed"
	select BR2_LEGACY
	select BR2_BINUTILS_VERSION_2_24_X
	help
	  The binutils version option has been renamed to match the
	  same patchlevel logic used by gcc. The new option is now
	  BR2_BINUTILS_VERSION_2_24_X.

config BR2_BINUTILS_VERSION_2_25
	bool "binutils 2.25 option renamed"
	select BR2_LEGACY
	select BR2_BINUTILS_VERSION_2_25_X
	help
	  The binutils version option has been renamed to match the
	  same patchlevel logic used by gcc. The new option is now
	  BR2_BINUTILS_VERSION_2_25_X.

config BR2_PACKAGE_PERF
	bool "perf option has been renamed"
	select BR2_LEGACY
	select BR2_LINUX_KERNEL_TOOL_PERF
	help
	  The perf package has been moved as a Linux tools package,
	  and the option to enable it is now
	  BR2_LINUX_KERNEL_TOOL_PERF.

config BR2_BINUTILS_VERSION_2_22
	bool "binutils 2.22 removed"
	select BR2_LEGACY
	help
	  Binutils 2.22 has been removed, using a newer version is
	  recommended.

config BR2_PACKAGE_GPU_VIV_BIN_MX6Q
	bool "gpu-viv-bin-mx6q"
	select BR2_LEGACY
	select BR2_PACKAGE_IMX_GPU_VIV
	help
	  Vivante graphics libraries have been renamed to
	  BR2_PACKAGE_IMX_GPU_VIV to be aligned with upstream package
	  name.

config BR2_PACKAGE_LIBSEMANAGE_PYTHON_BINDINGS
	depends on BR2_PACKAGE_PYTHON
	bool "libsemanage python bindings removed"
	select BR2_LEGACY
	help
	  This option has been removed, since the libsemanage Python
	  bindings on the target were not useful.

config BR2_TARGET_UBOOT_NETWORK
	bool "U-Boot custom network settings removed"
	select BR2_LEGACY
	help
	  U-Boot's custom network settings options have been removed.

###############################################################################
comment "Legacy options removed in 2015.05"

config BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_512_16K
	bool "jffs2 16kB erasesize NAND flash option renamed"
	select BR2_LEGACY
	select BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_16K
	help
	  The JFFS2 NAND flash options now longer include the page
	  size.

config BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_2K_128K
	bool "jffs2 128kB erasesize NAND flash option renamed"
	select BR2_LEGACY
	select BR2_TARGET_ROOTFS_JFFS2_NANDFLASH_128K
	help
	  The JFFS2 NAND flash options now longer include the page
	  size.

config BR2_PACKAGE_MONO_20
	bool "2.0/3.5 .Net Runtime"
	select BR2_LEGACY
	help
	  This option no longer exists, all versions of the .Net
	  runtime are now installed.

config BR2_PACKAGE_MONO_40
	bool "4.0 .Net Runtime"
	select BR2_LEGACY
	help
	  This option no longer exists, all versions of the .Net
	  runtime are now installed.

config BR2_PACKAGE_MONO_45
	bool "4.5 .Net Runtime"
	select BR2_LEGACY
	help
	  This option no longer exists, all versions of the .Net
	  runtime are now installed.

config BR2_CIVETWEB_WITH_LUA
	bool "civetweb lua option renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_CIVETWEB_WITH_LUA
	help
	  civetweb's lua option has been renamed to
	  BR2_PACKAGE_CIVETWEB_WITH_LUA to be aligned with how other
	  packages name options.

config BR2_PACKAGE_TIFF_TIFF2PDF
	bool "tiff utility-specific option removed"
	select BR2_LEGACY
	select BR2_PACKAGE_TIFF_UTILITIES
	help
	  utility-specific options have been removed in favour of
	  the new option BR2_PACKAGE_TIFF_UTILITIES.

config BR2_PACKAGE_TIFF_TIFFCP
	bool "tiff utility-specific option removed"
	select BR2_LEGACY
	select BR2_PACKAGE_TIFF_UTILITIES
	help
	  utility-specific options have been removed in favour of
	  the new option BR2_PACKAGE_TIFF_UTILITIES.

config BR2_LINUX_KERNEL_EXT_RTAI_PATCH
	bool "RTAI patch file path has been removed"
	select BR2_LEGACY
	help
	  This option has never worked, so it has been removed.

config BR2_TARGET_GENERIC_PASSWD_DES
	bool "Encoding passwords with DES has been removed"
	select BR2_LEGACY
	help
	  Paswords can now only be encoded with either of md5, sha256 or sha512.
	  The default is md5, which is stronger that DES (but still pretty weak).

config BR2_PACKAGE_GTK2_THEME_HICOLOR
	bool "hicolor (default theme) is a duplicate"
	select BR2_LEGACY
	select BR2_PACKAGE_HICOLOR_ICON_THEME
	help
	  The option was just a duplicate of hicolor icon theme.

config BR2_PACKAGE_VALGRIND_PTRCHECK
	bool "valgrind's PTRCheck was renamed to SGCheck"
	select BR2_LEGACY
	select BR2_PACKAGE_VALGRIND_SGCHECK
	help
	  PTRCheck was renamed to SGCheck in valgrind

###############################################################################
comment "Legacy options removed in 2015.02"

config BR2_PACKAGE_LIBGC
	bool "libgc package removed"
	select BR2_LEGACY
	select BR2_PACKAGE_BDWGC
	help
	  libgc has been removed because we have the same package under a
	  different name, bdwgc.

config BR2_PACKAGE_WDCTL
	bool "util-linux' wdctl option has been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_UTIL_LINUX_WDCTL
	help
	  util-linux' wdctl option has been renamed to BR2_PACKAGE_UTIL_LINUX_WDCTL
	  to be aligned with how the other options are named.

config BR2_PACKAGE_UTIL_LINUX_ARCH
	bool "util-linux' arch option has been removed"
	select BR2_LEGACY
	help
	  util-linux' arch was dropped in util-linux 2.23, in favor of
	  the coreutils version.

config BR2_PACKAGE_UTIL_LINUX_DDATE
	bool "util-linux' ddate option has been removed"
	select BR2_LEGACY
	help
	  util-linux' ddate was dropped in util-linux 2.23.

config BR2_PACKAGE_RPM_BZIP2_PAYLOADS
	bool "rpm's bzip2 payloads option has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_BZIP2
	help
	  The bzip2 payloads option rely entirely on the dependant package bzip2.
	  So, you need to select it to enable this feature.

config BR2_PACKAGE_RPM_XZ_PAYLOADS
	bool "rpm's xz payloads option has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_XZ
	help
	  The xz payloads option rely entirely on the dependant package xz.
	  So, you need to select it to enable this feature.

config BR2_PACKAGE_M4
	bool "m4 target package removed"
	select BR2_LEGACY
	help
	  The m4 target package has been removed, it's been
	  deprecated for some time now.

config BR2_PACKAGE_FLEX_BINARY
	bool "flex binary in target option removed"
	select BR2_LEGACY
	help
	  The flex binary in the target option has been removed.
	  It's been deprecated for some time now and is essentially a
	  development tool which isn't very useful in the target.

config BR2_PACKAGE_BISON
	bool "bison target package removed"
	select BR2_LEGACY
	help
	  The bison target package has been removed, it's been
	  deprecated for some time now and is essentially a development
	  tool which isn't very useful in the target.

config BR2_PACKAGE_GOB2
	bool "gob2 target package removed"
	select BR2_LEGACY
	help
	  The gob2 target package has been removed, it's been
	  deprecated for some time now and was essentially useless
	  without a target toolchain.

config BR2_PACKAGE_DISTCC
	bool "distcc target package removed"
	select BR2_LEGACY
	help
	  The distcc target package has been removed, it's been
	  deprecated for some time now and was essentially useless
	  without a target toolchain.

config BR2_PACKAGE_HASERL_VERSION_0_8_X
	bool "haserl 0.8.x version removed"
	select BR2_LEGACY
	help
	  The 0.8.x version option for haserl has been removed since it
	  has been deprecated for some time now.
	  You should be able to use the 0.9.x version without issues.

config BR2_PACKAGE_STRONGSWAN_TOOLS
	bool "strongswan option has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_STRONGSWAN_PKI
	select BR2_PACKAGE_STRONGSWAN_SCEP
	help
	  The tools option has been removed upstream and the different tools
	  have been split between the pki and scep options, with others
	  deprecated.

config BR2_PACKAGE_XBMC_ADDON_XVDR
	bool "xbmc-addon-xvdr removed"
	select BR2_LEGACY
	help
	  According to the github project page:
	  https://github.com/pipelka/xbmc-addon-xvdr
	  this package is discontinued.

config BR2_PACKAGE_XBMC_PVR_ADDONS
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_PVR_ADDONS
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC_ALSA_LIB
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_ALSA_LIB
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC_AVAHI
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_AVAHI
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC_DBUS
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_DBUS
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC_LIBBLURAY
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_LIBBLURAY
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC_GOOM
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_GOOM
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC_RSXS
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_RSXS
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC_LIBCEC
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_LIBCEC
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC_LIBMICROHTTPD
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_LIBMICROHTTPD
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC_LIBNFS
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_LIBNFS
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC_RTMPDUMP
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_RTMPDUMP
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC_LIBSHAIRPLAY
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_LIBSHAIRPLAY
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC_LIBSMBCLIENT
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_LIBSMBCLIENT
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC_LIBTHEORA
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_LIBTHEORA
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC_LIBUSB
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_LIBUSB
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC_LIBVA
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_LIBVA
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PACKAGE_XBMC_WAVPACK
	bool "xbmc options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_WAVPACK
	help
	  The XBMC media center project was renamed to Kodi entertainment center

config BR2_PREFER_STATIC_LIB
	bool "static library option renamed"
	select BR2_LEGACY
	help
	  The BR2_PREFER_STATIC_LIB was renamed to BR2_STATIC_LIBS. It
	  highlights the fact that the option no longer "prefers"
	  static libraries, but "enforces" static libraries (i.e
	  shared libraries are completely unused).

	  Take care of updating the type of libraries you want under the
	  "Build options" menu.

###############################################################################
comment "Legacy options removed in 2014.11"

config BR2_x86_generic
	bool "x86 generic variant has been removed"
	select BR2_LEGACY
	help
	  The generic x86 CPU variant has been removed. Use another
	  CPU variant instead.

config BR2_GCC_VERSION_4_4_X
	bool "gcc 4.4.x has been removed"
	select BR2_LEGACY
	help
	  The 4.4.x version of gcc has been removed. Use a newer
	  version instead.

config BR2_sparc_sparchfleon
	bool "sparchfleon CPU has been removed"
	select BR2_LEGACY
	help
	  The sparchfleon CPU was only supported in a patched gcc 4.4
	  version. Its support has been removed in favor of the leon3
	  CPU starting from gcc 4.8.x.

config BR2_sparc_sparchfleonv8
	bool "sparchfleonv8 CPU has been removed"
	select BR2_LEGACY
	help
	  The sparchfleonv8 CPU was only supported in a patched gcc
	  4.4 version. Its support has been removed in favor of the
	  leon3 CPU starting from gcc 4.8.x.

config BR2_sparc_sparcsfleon
	bool "sparcsfleon CPU has been removed"
	select BR2_LEGACY
	help
	  The sparcsfleon CPU was only supported in a patched gcc 4.4
	  version. Its support has been removed in favor of the leon3
	  CPU starting from gcc 4.8.x.

config BR2_sparc_sparcsfleonv8
	bool "sparcsfleonv8 CPU has been removed"
	select BR2_LEGACY
	help
	  The sparcsfleonv8 CPU was only supported in a patched gcc
	  4.4 version. Its support has been removed in favor of the
	  leon3 CPU starting from gcc 4.8.x.

config BR2_PACKAGE_XLIB_LIBPCIACCESS
	bool "xlib-libpciaccess option has been renamed"
	depends on BR2_PACKAGE_XORG7
	select BR2_LEGACY
	select BR2_PACKAGE_LIBPCIACCESS
	help
	  libpciaccess neither depends on X11 nor Xlib. Thus the
	  package has been renamed BR2_PACKAGE_LIBPCIACCESS

config BR2_PACKAGE_LINUX_FIRMWARE_XC5000
	bool "Xceive xc5000 option has been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_LINUX_FIRMWARE_XCx000
	help
	  The Xceive xc5000 option now also handles older firmwares from
	  Xceive (the xc4000 series), as well as new firmwares (the xc5000c)
	  from Cresta, who bought Xceive.

config BR2_PACKAGE_LINUX_FIRMWARE_CXGB4
	bool "Chelsio T4 option has been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_LINUX_FIRMWARE_CXGB4_T4
	help
	  The Chelsio T4 option BR2_PACKAGE_LINUX_FIRMWARE_CXGB4
	  has been renamed to BR2_PACKAGE_LINUX_FIRMWARE_CXGB4_T4
	  to better account for the fact that a T5 variant exists.

config BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7
	bool "BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 has been renamed"
	select BR2_LEGACY
	help
	  The option BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_7 was
	  renamed to BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_REV_7. You must
	  select it in:
	      Target packages -> Hardware handling ->
	      Firmware -> linux-firmware -> WiFi firmware ->
	      iwlwifi 3160/726x revision to use (revision 7)

config BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8
	bool "BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 has been renamed"
	select BR2_LEGACY
	help
	  The option BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160_7260_8 was
	  renamed to BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_REV_8. You must
	  select it in:
	      Target packages -> Hardware handling ->
	      Firmware -> linux-firmware -> WiFi firmware ->
	      iwlwifi 3160/726x revision to use (revision 8)

###############################################################################
comment "Legacy options removed in 2014.08"

config BR2_PACKAGE_LIBELF
	bool "libelf has been removed"
	select BR2_PACKAGE_ELFUTILS
	select BR2_LEGACY
	help
	  The libelf package provided an old version of the libelf library
	  and is deprecated. The libelf library is now provided by the
	  elfutils package.

config BR2_KERNEL_HEADERS_3_8
	bool "kernel headers version 3.8.x are no longer supported"
	select BR2_KERNEL_HEADERS_3_4
	select BR2_LEGACY
	help
	  Version 3.8.x of the Linux kernel headers have been deprecated
	  for more than four buildroot releases and are now removed.
	  As an alternative, version 3.4.x of the headers have been
	  automatically selected in your configuration.

config BR2_PACKAGE_GETTEXT_TOOLS
	bool "support for gettext-tools on target has been removed"
	select BR2_LEGACY
	help
	  The option to install the gettext utilities on the target
	  has been removed. This is not necessary as Buildroot is not
	  designed to provide a full development environment on the
	  target. gettext tools should be used on the build machine
	  instead.

config BR2_PACKAGE_PROCPS
	bool "procps has been replaced by procps-ng"
	select BR2_PACKAGE_PROCPS_NG
	select BR2_LEGACY
	help
	  The procps package has been replaced by the equivalent procps-ng.

config BR2_BINUTILS_VERSION_2_20_1
	bool "binutils 2.20.1 has been removed"
	select BR2_LEGACY
	help
	  The 2.20.1 version of binutils has been removed. Use a newer
	  version instead.

config BR2_BINUTILS_VERSION_2_21
	bool "binutils 2.21 has been removed"
	select BR2_LEGACY
	help
	  The 2.21 version of binutils has been removed. Use a newer
	  version instead.

config BR2_BINUTILS_VERSION_2_23_1
	bool "binutils 2.23.1 has been removed"
	select BR2_LEGACY
	help
	  The 2.23.1 version of binutils has been removed. Use a newer
	  version instead.

config BR2_UCLIBC_VERSION_0_9_32
	bool "uclibc 0.9.32 has been removed"
	select BR2_LEGACY
	help
	  The 0.9.32 version of uClibc has been removed. Use a newer
	  version instead.

config BR2_GCC_VERSION_4_3_X
	bool "gcc 4.3.x has been removed"
	select BR2_LEGACY
	help
	  The 4.3.x version of gcc has been removed. Use a newer
	  version instead.

config BR2_GCC_VERSION_4_6_X
	bool "gcc 4.6.x has been removed"
	select BR2_LEGACY
	help
	  The 4.6.x version of gcc has been removed. Use a newer
	  version instead.

config BR2_GDB_VERSION_7_4
	bool "gdb 7.4 has been removed"
	select BR2_LEGACY
	help
	  The 7.4 version of gdb has been removed. Use a newer version
	  instead.

config BR2_GDB_VERSION_7_5
	bool "gdb 7.5 has been removed"
	select BR2_LEGACY
	help
	  The 7.5 version of gdb has been removed. Use a newer version
	  instead.

config BR2_BUSYBOX_VERSION_1_19_X
	bool "busybox version selection has been removed"
	select BR2_LEGACY
	help
	  The possibility of selecting the Busybox version has been
	  removed. Use the latest version provided by the Busybox
	  package instead.

config BR2_BUSYBOX_VERSION_1_20_X
	bool "busybox version selection has been removed"
	select BR2_LEGACY
	help
	  The possibility of selecting the Busybox version has been
	  removed. Use the latest version provided by the Busybox
	  package instead.

config BR2_BUSYBOX_VERSION_1_21_X
	bool "busybox version selection has been removed"
	select BR2_LEGACY
	help
	  The possibility of selecting the Busybox version has been
	  removed. Use the latest version provided by the Busybox
	  package instead.

config BR2_PACKAGE_LIBV4L_DECODE_TM6000
	bool "decode_tm6000"
	select BR2_PACKAGE_LIBV4L_UTILS
	select BR2_LEGACY
	help
	  This libv4l option has been deprecated and replaced by a single
	  option to build all the libv4l utilities.

config BR2_PACKAGE_LIBV4L_IR_KEYTABLE
	bool "ir-keytable"
	select BR2_PACKAGE_LIBV4L_UTILS
	select BR2_LEGACY
	help
	  This libv4l option has been deprecated and replaced by a single
	  option to build all the libv4l utilities.

config BR2_PACKAGE_LIBV4L_V4L2_COMPLIANCE
	bool "v4l2-compliance"
	select BR2_PACKAGE_LIBV4L_UTILS
	select BR2_LEGACY
	help
	  This libv4l option has been deprecated and replaced by a single
	  option to build all the libv4l utilities.

config BR2_PACKAGE_LIBV4L_V4L2_CTL
	bool "v4l2-ctl"
	select BR2_PACKAGE_LIBV4L_UTILS
	select BR2_LEGACY
	help
	  This libv4l option has been deprecated and replaced by a single
	  option to build all the libv4l utilities.

config BR2_PACKAGE_LIBV4L_V4L2_DBG
	bool "v4l2-dbg"
	select BR2_PACKAGE_LIBV4L_UTILS
	select BR2_LEGACY
	help
	  This libv4l option has been deprecated and replaced by a single
	  option to build all the libv4l utilities.

###############################################################################
comment "Legacy options removed in 2014.05"

config BR2_PACKAGE_EVTEST_CAPTURE
	bool "evtest-capture support removed (dropped since evtest 1.31)"
	select BR2_LEGACY
	help
	  Support for evtest-capture has been removed (dropped from
	  evtest package since version 1.31), use evemu package
	  instead.

config BR2_KERNEL_HEADERS_3_6
	bool "kernel headers version 3.6.x are no longer supported"
	select BR2_KERNEL_HEADERS_3_4
	select BR2_LEGACY
	help
	  Version 3.6.x of the Linux kernel headers have been deprecated
	  for more than four buildroot releases and are now removed.
	  As an alternative, version 3.4.x of the headers have been
	  automatically selected in your configuration.

config BR2_KERNEL_HEADERS_3_7
	bool "kernel headers version 3.7.x are no longer supported"
	select BR2_KERNEL_HEADERS_3_4
	select BR2_LEGACY
	help
	  Version 3.7.x of the Linux kernel headers have been deprecated
	  for more than four buildroot releases and are now removed.
	  As an alternative, version 3.4.x of the headers have been
	  automatically selected in your configuration.

config BR2_PACKAGE_VALA
	bool "vala target package has been removed"
	select BR2_LEGACY
	help
	  The 'vala' target package has been removed since it has been
	  deprecated for more than four buildroot releases.
	  Note: the host vala package still exists.

config BR2_TARGET_TZ_ZONELIST
	default BR2_PACKAGE_TZDATA_ZONELIST if BR2_PACKAGE_TZDATA_ZONELIST != ""

config BR2_PACKAGE_TZDATA_ZONELIST
	string "tzdata: the timezone list option has been renamed"
	help
	  The option BR2_PACKAGE_TZDATA_ZONELIST has been renamed to
	  BR2_TARGET_TZ_ZONELIST, and moved to the "System configuration"
	  menu. You'll need to select BR2_TARGET_TZ_INFO.

config BR2_PACKAGE_TZDATA_ZONELIST_WRAP
	bool
	default y if BR2_PACKAGE_TZDATA_ZONELIST != ""
	select BR2_LEGACY

config BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE
	bool "Lua command-line editing none has been renamed"
	select BR2_LEGACY
	help
	  The BR2_PACKAGE_LUA_INTERPRETER_EDITING_NONE option has been
	  renamed to BR2_PACKAGE_LUA_EDITING_NONE. You will have to select
	  it in the corresponding choice.

config BR2_PACKAGE_LUA_INTERPRETER_READLINE
	bool "Lua command-line editing using readline has been renamed"
	select BR2_LEGACY
	help
	  The BR2_PACKAGE_LUA_INTERPRETER_READLINE option has been
	  renamed to BR2_PACKAGE_LUA_READLINE. You will have to select
	  it in the corresponding choice.

config BR2_PACKAGE_LUA_INTERPRETER_LINENOISE
	bool "Lua command-line editing using linenoise has been renamed"
	select BR2_LEGACY
	help
	  The BR2_PACKAGE_LUA_INTERPRETER_LINENOISE option has been
	  renamed to BR2_PACKAGE_LUA_LINENOISE. You will have to select
	  it in the corresponding choice.

config BR2_PACKAGE_DVB_APPS_UTILS
	bool "dvb-apps utilities now built by default"
	select BR2_LEGACY
	help
	  The dvb-apps utilities are now always built when the dvb-apps
	  package is selected.

config BR2_KERNEL_HEADERS_SNAP
	bool "Local Linux snapshot support removed"
	select BR2_LEGACY
	help
	  Support for using a custom snapshot to install the Linux
	  kernel headers has been removed.

config BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_UDEV
	bool "/dev management by udev removed"
	select BR2_LEGACY
	help
	  The 'udev' package has been converted to a virtual package.
	  The providers for this feature are: 'eudev', 'systemd'.

	  Therefore, if you are not using 'systemd' as init system, you
	  must choose 'Dynamic using eudev' in the '/dev management'
	  menu to get the same behaviour as in your old configuration.

	  If you are using 'systemd', its internal implementation of
	  'udev' will be used automatically.

	  You must also check the packages depending on 'udev' are still
	  selected.

config BR2_PACKAGE_UDEV
	bool "udev is now a virtual package"
	select BR2_LEGACY
	select BR2_PACKAGE_HAS_UDEV
	help
	  The 'udev' package has been converted to a virtual package.
	  The providers for this feature are: 'eudev', 'systemd'.

	  Your old configuration refers to packages depending on 'udev',
	  either for build or at runtime.

	  Check that a 'udev' provider is selected. If you are not using
	  'systemd' as init system, 'eudev' should be selected, which is
	  the case if '/dev management' is set to 'Dynamic using eudev'.

	  If you are using 'systemd', its internal implementation of 'udev'
	  is used.

config BR2_PACKAGE_UDEV_RULES_GEN
	bool "udev rules generation handled by provider"
	select BR2_LEGACY
	select BR2_PACKAGE_EUDEV if !BR2_INIT_SYSTEMD
	select BR2_PACKAGE_EUDEV_RULES_GEN if !BR2_INIT_SYSTEMD
	help
	  The 'udev' package has been converted to a virtual package.
	  The providers for this feature are: 'eudev', 'systemd'.

	  If you are not using 'systemd' as init system, udev rules
	  generation will be handled by 'eudev'. Check that
	  '/dev management' is set to 'Dynamic using eudev' to get
	  the same behaviour as in your old configuration.

	  If you are using 'systemd', it internal implementation of 'udev'
	  will generate the rules.

config BR2_PACKAGE_UDEV_ALL_EXTRAS
	bool "udev extras removed"
	select BR2_LEGACY
	help
	  The 'udev' package has been converted to a virtual package.
	  The providers for this feature are: 'eudev', 'systemd'.

	  The option to enable the extra features of 'udev' (gudev, ...)
	  has been removed. These features are automatically enabled in
	  the 'udev' providers if the dependencies are selected. For
	  example, selecting 'libglib2' will trigger the build of gudev.

config BR2_PACKAGE_XLIB_LIBPTHREAD_STUBS
	bool "xlib-libpthread-stubs option has been renamed"
	depends on BR2_PACKAGE_XORG7
	select BR2_LEGACY
	select BR2_PACKAGE_LIBPTHREAD_STUBS
	help
	  The pthread stubs neither depend on X11 nor Xlib. Thus the
	  package has been renamed BR2_PACKAGE_LIBPTHREAD_STUBS

###############################################################################
comment "Legacy options removed in 2014.02"

config BR2_sh2
	bool "sh2 support removed"
	select BR2_LEGACY
	help
	  Due to an inexistent user base and generally poor Linux
	  support, the support for the SH2 architecture was removed.

config BR2_sh3
	bool "sh3 support removed"
	select BR2_LEGACY
	help
	  Due to an inexistent user base and generally poor Linux
	  support, the support for the SH3 architecture was removed.

config BR2_sh3eb
	bool "sh3eb support removed"
	select BR2_LEGACY
	help
	  Due to an inexistent user base and generally poor Linux
	  support, the support for the SH3eb architecture was removed.

config BR2_KERNEL_HEADERS_3_1
	bool "kernel headers version 3.1.x are no longer supported"
	select BR2_KERNEL_HEADERS_3_2
	select BR2_LEGACY
	help
	  Version 3.1.x of the Linux kernel headers have been deprecated
	  for more than four buildroot releases and are now removed.
	  As an alternative, version 3.2.x of the headers have been
	  automatically selected in your configuration.

config BR2_KERNEL_HEADERS_3_3
	bool "kernel headers version 3.3.x are no longer supported"
	select BR2_KERNEL_HEADERS_3_2
	select BR2_LEGACY
	help
	  Version 3.3.x of the Linux kernel headers have been deprecated
	  for more than four buildroot releases and are now removed.
	  As an alternative, version 3.2.x of the headers have been
	  automatically selected in your configuration.

config BR2_KERNEL_HEADERS_3_5
	bool "kernel headers version 3.5.x are no longer supported"
	select BR2_KERNEL_HEADERS_3_4
	select BR2_LEGACY
	help
	  Version 3.5.x of the Linux kernel headers have been deprecated
	  for more than four buildroot releases and are now removed.
	  As an alternative, version 3.4.x of the headers have been
	  automatically selected in your configuration.

config BR2_GDB_VERSION_7_2
	bool "gdb 7.2.x is no longer supported"
	select BR2_GDB_VERSION_7_6
	select BR2_LEGACY
	help
	  Version 7.2.x of gdb has been deprecated for more than four
	  buildroot releases and is now removed. As an alternative, gdb
	  7.5.x has been automatically selected in your configuration.

config BR2_GDB_VERSION_7_3
	bool "gdb 7.3.x is no longer supported"
	select BR2_GDB_VERSION_7_6
	select BR2_LEGACY
	help
	  Version 7.3.x of gdb has been deprecated for more than four
	  buildroot releases and is now removed. As an alternative, gdb
	  7.5.x has been automatically selected in your configuration.

config BR2_PACKAGE_CCACHE
	bool "ccache target package has been removed"
	select BR2_LEGACY
	help
	  The 'ccache' target package has been removed since it has been
	  deprecated for more than four buildroot releases.
	  Note: using ccache for speeding up builds is still supported.

config BR2_HAVE_DOCUMENTATION
	bool "support for documentation on target has been removed"
	select BR2_LEGACY
	help
	  Support for documentation on target has been removed since it has
	  been deprecated for more than four buildroot releases.

config BR2_PACKAGE_AUTOMAKE
	bool "automake target package has been removed"
	select BR2_LEGACY
	help
	  The 'automake' target package has been removed since it has been
	  deprecated for more than four buildroot releases.
	  Note: the host automake still exists.

config BR2_PACKAGE_AUTOCONF
	bool "autoconf target package has been removed"
	select BR2_LEGACY
	help
	  The 'autoconf' target package has been removed since it has been
	  deprecated for more than four buildroot releases.
	  Note: the host autoconf still exists.

config BR2_PACKAGE_XSTROKE
	bool "xstroke has been removed"
	select BR2_LEGACY
	help
	  The 'xstroke' package has been removed since it has been
	  deprecated for more than four buildroot releases.

config BR2_PACKAGE_LZMA
	bool "lzma target package has been removed"
	select BR2_LEGACY
	help
	  The 'lzma' target package has been removed since it has been
	  deprecated for more than four buildroot releases.
	  Note: generating lzma-compressed rootfs images is still supported.

config BR2_PACKAGE_TTCP
	bool "ttcp has been removed"
	select BR2_LEGACY
	help
	  The 'ttcp' package has been removed since it has been
	  deprecated for more than four buildroot releases.

config BR2_PACKAGE_LIBNFC_LLCP
	bool "libnfc-llcp has been replaced by libllcp"
	select BR2_LEGACY
	select BR2_PACKAGE_LIBLLCP
	help
	  The 'libnfc-llcp' package has been removed since upstream renamed
	  to 'libllcp'. We have added a new package for 'libllcp' and bumped
	  the version at the same time.

config BR2_PACKAGE_MYSQL_CLIENT
	bool "MySQL client renamed to MySQL"
	select BR2_LEGACY
	select BR2_PACKAGE_MYSQL
	help
	  The option has been renamed BR2_PACKAGE_MYSQL

config BR2_PACKAGE_SQUASHFS3
	bool "squashfs3 has been removed"
	select BR2_LEGACY
	select BR2_PACKAGE_SQUASHFS
	help
	  The 'squashfs3' package has been removed since it has been
	  deprecated for more than four buildroot releases. Package
	  'squashfs' (4) has been selected automatically as replacement.

config BR2_TARGET_ROOTFS_SQUASHFS3
	bool "squashfs3 rootfs support has been removed"
	select BR2_LEGACY
	help
	  Together with the removal of the squashfs3 package, support
	  for squashfs3 root filesystems has been removed too. Squashfs
	  root filesystems will automatically use squashfs4 now.

config BR2_PACKAGE_NETKITBASE
	bool "netkitbase has been removed"
	select BR2_LEGACY
	help
	  The 'netkitbase' package has been removed since it has been
	  deprecated since 2012.11. This package provided 'inetd'
	  which is replaced by 'xinet' and 'ping' which is replaced by
	  'busybox' or 'fping'.

config BR2_PACKAGE_NETKITTELNET
	bool "netkittelnet has been removed"
	select BR2_LEGACY
	help
	  The 'netkittelnet' package has been removed since it has
	  been deprecated since 2012.11. 'busybox' provides a telnet
	  client and should be used instead.

config BR2_PACKAGE_LUASQL
	bool "luasql has been replaced by luasql-sqlite3"
	select BR2_PACKAGE_LUASQL_SQLITE3
	select BR2_LEGACY
	help
	  The option has been renamed BR2_PACKAGE_LUASQL_SQLITE3.

config BR2_PACKAGE_LUACJSON
	bool "luacjson has been replaced by lua-cjson"
	select BR2_PACKAGE_LUA_CJSON
	select BR2_LEGACY
	help
	  The option has been renamed BR2_PACKAGE_LUA_CJSON.

###############################################################################
comment "Legacy options removed in 2013.11"

config BR2_PACKAGE_LVM2_DMSETUP_ONLY
	bool "lvm2's 'dmsetup only' option removed"
	select BR2_LEGACY
	help
	  The BR2_PACKAGE_LVM2_DMSETUP_ONLY was a negative option, which
	  led to problems with other packages that need the full lvm2
	  suite. Therefore, the option has been replaced with the positive
	  BR2_PACKAGE_LVM2_STANDARD_INSTALL option.

# Note: BR2_PACKAGE_LVM2_DMSETUP_ONLY is still referenced in package/lvm2/Config.in
# in order to automatically propagate old configs

config BR2_PACKAGE_QT_JAVASCRIPTCORE
	bool "qt javascriptcore option removed"
	select BR2_LEGACY
	help
	  The BR2_PACKAGE_QT_JAVASCRIPTCORE option was available to
	  force the activation or disabling of the JIT compiler in the
	  Qt Javascript interpreter. However, the JIT compiler is not
	  available for all architectures, so forcing its activation
	  does not always work. Moreover, Qt knows by itself for which
	  architectures JIT support is possible, and will
	  automatically enable it if possible.

	  Therefore, this option was in fact useless, and causing
	  build problems when enabled on architectures for which the
	  JIT support was not available. It has been removed, and
	  there is no replacement: Qt will enable JIT at compile time
	  when possible.

config BR2_PACKAGE_MODULE_INIT_TOOLS
	bool "module-init-tools replaced by kmod"
	select BR2_PACKAGE_KMOD
	select BR2_PACKAGE_KMOD_TOOLS
	select BR2_LEGACY
	help
	  The 'module-init-tools' package has been removed, since it
	  has been depracated upstream and replaced by 'kmod'.

config BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL
	string "u-boot: the git repository URL option has been renamed"
	help
	  The option BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL has
	  been renamed to BR2_TARGET_UBOOT_CUSTOM_REPO_URL.

config BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL_WRAP
	bool
	default y if BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL != ""
	select BR2_LEGACY

# Note: BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL is still referenced from
# boot/uboot/Config.in

config BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION
	string "u-boot: the git repository version option has been renamed"
	help
	  The option BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION has
	  been renamed to BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION.

config BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION_WRAP
	bool
	default y if BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION != ""
	select BR2_LEGACY

# Note: BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION is still referenced from
# boot/uboot/Config.in

config BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL
	string "linux: the git repository URL option has been renamed"
	help
	  The option BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL has
	  been renamed to
	  BR2_LINUX_KERNEL_CUSTOM_REPO_URL.

config BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL_WRAP
	bool
	default y if BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL != ""
	select BR2_LEGACY

# Note: BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL is still referenced from
# linux/Config.in

config BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION
	string "linux: the git repository version option has been renamed"
	help
	  The option BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION has
	  been renamed to
	  BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION.

config BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION_WRAP
	bool
	default y if BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION != ""
	select BR2_LEGACY

# Note: BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION is still referenced from
# linux/Config.in

###############################################################################
comment "Legacy options removed in 2013.08"

config BR2_ARM_OABI
	bool "ARM OABI support has been removed"
	select BR2_LEGACY
	help
	  The support for the ARM OABI was deprecated since a while,
	  and has been removed completely from Buildroot. It is also
	  deprecated in upstream gcc, since gcc 4.7. People should
	  switch to EABI instead, which should not be a problem as
	  long as you don't have pre-built OABI binaries in your
	  system that you can't recompile.

config BR2_PACKAGE_DOSFSTOOLS_DOSFSCK
	bool "dosfstools dosfsck renamed to fsck.fat"
	select BR2_LEGACY
	select BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT
	help
	  dosfsck was renamed upstream to fsck.fat for consistency.

config BR2_PACKAGE_DOSFSTOOLS_DOSFSLABEL
	bool "dosfstools dosfslabel renamed to fatlabel"
	select BR2_LEGACY
	select BR2_PACKAGE_DOSFSTOOLS_FATLABEL
	help
	  doslabel was renamed upstream to fatlabel for consistency.

config BR2_PACKAGE_DOSFSTOOLS_MKDOSFS
	bool "dosfstools mkdosfs renamed to mkfs.fat"
	select BR2_LEGACY
	select BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT
	help
	  mkdosfs was renamed upstream to mkfs.fat for consistency.

config BR2_ELF2FLT
	bool "the elf2flt option has been renamed"
	select BR2_LEGACY
	help
	  The BR2_ELF2FLT option has been renamed to
	  BR2_PACKAGE_HOST_ELF2FLT due to the conversion of elf2flt to
	  the package infrastructure.

config BR2_VFP_FLOAT
	bool "the ARM VFP floating point option has been renamed"
	select BR2_LEGACY
	help
	  Due to a major refactoring of the floating-point handling of
	  the ARM architecture support, the BR2_VFP_FLOAT option has
	  been replaced with a choice of options that allows to select
	  between various VFP versions/capabilities.

config BR2_PACKAGE_GCC_TARGET
	bool "gcc on the target filesystem has been removed"
	select BR2_LEGACY
	help
	  The support for gcc in the target filesystem was deprecated
	  since a while, and has been removed completely from Buildroot.
	  See Buildroot's documentation for more explanations.

config BR2_HAVE_DEVFILES
	bool "development files in target filesystem has been removed"
	select BR2_LEGACY
	help
	  The installation of the development files in the target
	  filesystem was deprecated since a while, and has been removed
	  completely from Buildroot.
	  See Buildroot's documentation for more explanations.

###############################################################################
comment "Legacy options removed in 2013.05"

config BR2_PACKAGE_LINUX_FIRMWARE_RTL_8192
	bool "Realtek 8192 replaced by Realtek 81xx"
	select BR2_LEGACY
	select BR2_PACKAGE_LINUX_FIRMWARE_RTL_81XX
	help
	  Now covers the whole Realtek 81xx familly: 8188/8192.

config BR2_PACKAGE_LINUX_FIRMWARE_RTL_8712
	bool "Realtek 8712 replaced by Realtek 87xx"
	select BR2_LEGACY
	select BR2_PACKAGE_LINUX_FIRMWARE_RTL_87XX
	help
	  Now covers the whole Realtek 87xx familly: 8712/8723.

endmenu

endif # !SKIP_LEGACY
