#
# 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_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: 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.05"

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"
	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_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

endif # !SKIP_LEGACY
