#
# 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.
#
# 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. This requires a change outside of
# Config.in.legacy, and this should be clearly marked as such below, so that
# removal of legacy options also include the removal of these external
# references.
#
# [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_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: at some point in the future, the oldest legacy"
comment "options will be removed, and configuration files    "
comment "that still have those options set, will fail to     "
comment "build, or run, in unpredictable ways.               "
comment "----------------------------------------------------"
endif

###############################################################################

comment "Legacy options removed in 2015.02"

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_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 options have been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_KODI_ADDON_XVDR
	help
	  The XBMC media center project was renamed to Kodi entertainment center

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_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_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"
	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"
	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_9
	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.9.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_9
	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.8.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_9
	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.8.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"
	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"
	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"
	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_4
	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.4.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_9
	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.8.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.

###############################################################################
comment "Legacy options removed in 2013.02"

config BR2_sa110
	bool "sa110 ARM target switched to strongarm"
	select BR2_LEGACY
	select BR2_strongarm
	help
	  The SA110 is the same as a generic StrongARM, it just differs
	  in speed, peripherals and cache.

config BR2_sa1100
	bool "sa1100 ARM target switched to strongarm"
	select BR2_LEGACY
	select BR2_strongarm
	help
	  The SA1100 is the same as a generic StrongARM, it just differs
	  in speed, peripherals and cache.

config BR2_PACKAGE_GDISK
	bool "gdisk has been replaced by gptfdisk"
	select BR2_LEGACY
	select BR2_PACKAGE_GPTFDISK
	help
	  The option has been renamed BR2_PACKAGE_GPTFDISK.

config BR2_PACKAGE_GDISK_GDISK
	bool "gdisk tool from gdisk has been replaced by gdisk in gptfdisk"
	select BR2_LEGACY
	select BR2_PACKAGE_GPTFDISK
	select BR2_PACKAGE_GPTFDISK_GDISK
	help
	  The option has been renamed BR2_PACKAGE_GPTFDISK_GDISK.

config BR2_PACKAGE_GDISK_SGDISK
	bool "sgdisk tool from gdisk has been replaced by sgdisk in gptfdisk"
	select BR2_LEGACY
	select BR2_PACKAGE_GPTFDISK
	select BR2_PACKAGE_GPTFDISK_SGDISK
	help
	  The option has been renamed BR2_PACKAGE_GPTFDISK_SGDISK.

config BR2_PACKAGE_GDB_HOST
	bool "gdb for the host option has been renamed"
	select BR2_PACKAGE_HOST_GDB
	select BR2_LEGACY
	help
	  Due to the conversion of gdb to the package infrastructure,
	  the BR2_PACKAGE_GDB_HOST option has been renamed
	  BR2_PACKAGE_HOST_GDB.

config BR2_PACKAGE_DIRECTB_DITHER_RGB16
	bool "DirectFB RGB16 dithering option has been renamed"
	select BR2_PACKAGE_DIRECTFB_DITHER_RGB16
	select BR2_LEGACY
	help
	  The option has been renamed
	  BR2_PACKAGE_DIRECTFB_DITHER_RGB16.

config BR2_PACKAGE_DIRECTB_TESTS
	bool "DirectFB Tests option has been renamed"
	select BR2_PACKAGE_DIRECTFB_TESTS
	select BR2_LEGACY
	help
	  The option has been renamed
	  BR2_PACKAGE_DIRECTFB_TESTS.

###############################################################################
comment "Legacy options removed in 2012.11"

config BR2_PACKAGE_CUSTOMIZE
	bool "customize package has been removed"
	select BR2_LEGACY
	help
	  The 'customize' special package has been removed. Instead,
	  we recommend to create either your own packages, or use a
	  post-build script to customize your root filesystem. See
	  Buildroot's documentation for more details.

config BR2_PACKAGE_XSERVER_xorg
	bool "X.org modular server"
	select BR2_LEGACY
	select BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR
	help
	  The option has been renamed
	  BR2_PACKAGE_XSERVER_XORG_SERVER_MODULAR.

config BR2_PACKAGE_XSERVER_tinyx
	bool "KDrive / TinyX server"
	select BR2_LEGACY
	select BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE
	help
	  The option has been renamed
	  BR2_PACKAGE_XSERVER_XORG_SERVER_KDRIVE.

config BR2_PACKAGE_PTHREAD_STUBS
	bool "pthread-stubs option has been renamed"
	select BR2_LEGACY
	select BR2_PACKAGE_LIBPTHREAD_STUBS
	help
	  For consistency reason, the pthread-stubs package has been
	  renamed to libpthread-stubs.

###############################################################################
comment "Legacy options removed in 2012.08"

config BR2_PACKAGE_GETTEXT_STATIC
	bool "libgettext.a is now selected by BR2_PREFER_STATIC_LIB"
	select BR2_LEGACY
	help
	  To build a static gettext library, select BR2_PREFER_STATIC_LIB.


config BR2_PACKAGE_LIBINTL
	bool "libintl"
	select BR2_LEGACY
	select BR2_PACKAGE_GETTEXT
	help
	  libintl is now installed by selecting BR2_PACKAGE_GETTEXT. This now
	  only installs the library, not the executables.

config BR2_PACKAGE_INPUT_TOOLS_EVTEST
	bool "input-tools evtest is now a separate package evtest"
	select BR2_LEGACY
	select BR2_PACKAGE_EVTEST
	help
	  The evtest program from input-tools is now a separate package.

config BR2_BFIN_FDPIC
	bool "BR2_BFIN_FDPIC is now BR2_BINFMT_FDPIC"
	select BR2_BINFMT_FDPIC
	select BR2_LEGACY

config BR2_BFIN_FLAT
	bool "BR2_BFIN_FLAT is now BR2_BINFMT_FLAT"
	select BR2_BINFMT_FLAT
	select BR2_LEGACY

endmenu
