#
# 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. If
# there is an equivalent (set of) new symbols, these can just be select'ed by
# the old symbol. This makes sure that running 'make oldconfig' will make things
# "just work" when upgrading to a new buildroot version. If the change is too
# fundamental and cannot be fixed by a simple select, then the old symbol should
# select BR2_LEGACY.  If that symbol is set, the build will issue an error.
#
# 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.

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 "Your old configuration uses legacy options that no  "
comment "longer exist in buildroot.                          "
comment "Please look at the options which have been selected "
comment "and read their help text.                           "
comment "As long as these options stay selected, the build   "
comment "will fail.                                          "
endif

#
# Legacy options since 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.

#
# Legacy options since 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_XLIB_LIBPTHREAD_STUBS
	help
	  For consistency reason, the pthread-stubs package has been
	  renamed to xlib_libpthread-stubs.


#
# Legacy options since 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.

endmenu
