# This script checks the version of the configuration file and either # alerts the user about the need to run the upgrade, or attempts to # perform such an upgrade. CFGFILE="${1}" . "${CT_LIB_DIR}/scripts/functions" . "${CFGFILE}" # If an old config does not define a version, assume it is 0. This is used # if we run this script on an old full .config file, not restored from a # defconfig. CT_CONFIG_VERSION="${CT_CONFIG_VERSION:-0}" if [ "${CT_CONFIG_VERSION_CURRENT}" == "${CT_CONFIG_VERSION}" ]; then # Nothing to do exit 0 fi if [ -z "${CT_UPGRADECONFIG}" ]; then if [ "${CT_CONFIG_VERSION}" != "0" ]; then oldversion="is version ${CT_CONFIG_VERSION}" else oldversion="has no version" fi cat 2>&1 <&2 } warning() { # $opt comes from the caller echo "WARN ${opt:+:: ${opt} }:: $1" >&2 } warning_if_set() { if is_set; then warning "$@" fi } # When a symbol is replaced with a newer version. If it is a choice and # the replacement existed in the old version as well, add a replacement_for # handler for the other symbol to avoid kconfig warnings. replace() { local newopt="${1}" if is_set; then info "No longer supported; replacing with '${newopt}'". opt="${newopt}" else # Wasn't set; just drop it silently unset opt fi } # Avoid multiple definitions for a symbol when multiple old symbols are folded into one # in a new version. If any of the variable names passed as arguments are set, skip # emitting this variable (which, presumably, is "not set"). replacement_for() { while [ -n "${1}" ]; do if [ -n "${!1}" ]; then unset opt return fi shift done } # Upgrade from v0: select Linaro as the vendor if a Linaro version was selected # (in v0, both GNU and Linaro versions were combined in a single list). GNU is # the default, leave it to olddefconfig to select it if we don't see a Linaro version. # We don't depend on CT_xxx_SHOW_LINARO symbols: they just enabled showing Linaro # versions in that list, but it may have been GNU version that was actually selected. select_linaro() { if is_set; then echo "# CT_${1}_USE_GNU is not set" echo "CT_${1}_USE_LINARO=y" fi } ### Per-version upgrade drivers. Called with ${opt} and ${val} set, ### may modify these variables # Upgrade from version 0 (which is 1.23, as released) to version 1 # (current state of master as of 2019/01/20). Upgrades in the interim # versions may be broken. upgrade_v0() { case "${opt}" in CT_ARCH_alpha|CT_ARCH_arm|CT_ARCH_avr|CT_ARCH_m68k|CT_ARCH_microblaze|\ CT_ARCH_mips|CT_ARCH_nios2|CT_ARCH_powerpc|CT_ARCH_s390|CT_ARCH_sh|\ CT_ARCH_sparc|CT_ARCH_x86|CT_ARCH_xtensa|\ CT_BINUTILS_binutils|\ CT_CC_gcc|\ CT_COMP_TOOLS_autoconf|CT_COMP_TOOLS_automake|CT_COMP_TOOLS_libtool|\ CT_COMP_TOOLS_m4|CT_COMP_TOOLS_make|\ CT_DEBUG_duma|CT_DEBUG_gdb|CT_DEBUG_ltrace|CT_DEBUG_strace|\ CT_KERNEL_bare_metal|CT_KERNEL_linux|CT_KERNEL_windows|\ CT_LIBC_avr_libc|CT_LIBC_glibc|CT_LIBC_musl|CT_LIBC_newlib|CT_LIBC_none|\ CT_LIBC_uClibc) # Renamed to upper-case opt=${opt^^} ;; CT_ARCH_XTENSA_CUSTOM_NAME) replace CT_OVERLAY_NAME ;; CT_ARCH_XTENSA_CUSTOM_OVERLAY_LOCATION) replace CT_OVERLAY_LOCATION ;; CT_LIBC_mingw) # Renamed to MINGW_W64 opt=CT_LIBC_MINGW_W64 ;; CT_ARCH_*_AVAILABLE|CT_KERNEL_*_AVAILABLE|CT_LIBC_*_AVAILABLE) # Previously used "backend selectors". Autogenerated, no warning unset opt ;; CT_CONFIGURE_has_*) # Configure-detected build machine options. Drop, will use current. unset opt ;; CT_*_or_later) # Automatically selected version constraints. Drop, will auto-select current ones. unset opt ;; CT_BACKEND_ARCH|CT_BACKEND_KERNEL|CT_BACKEND_LIBC|CT_IS_A_BACKEND) warning "Option ${opt} is no longer supported, dropping" unset opt ;; CT_*_SHOW_LINARO) # Used to just include Linaro versions into the list. We'll infer whether Linaro is # actually used from the actual version selected, below. unset opt ;; CT_CC_GCC_4_8|CT_CC_GCC_4_9|CT_CC_GCC_5|CT_CC_GCC_6|\ CT_LIBC_NEWLIB_2_0|CT_LIBC_NEWLIB_2_1|CT_LIBC_NEWLIB_2_2|CT_LIBC_NEWLIB_2_3|CT_LIBC_NEWLIB_2_4|CT_LIBC_NEWLIB_2_5) # In 1.23.0, each package had its own ad-hoc version constraints. Drop, new ones # will be autoselected. unset opt ;; # Custom location: translate to the new framework. No generic way to interpret the version # string user may have configured; just warn him to select it manually. CT_BINUTILS_CUSTOM) warning_if_set "Assuming custom location contains GNU sources; edit the configuration if it was Linaro version" replace CT_BINUTILS_SRC_CUSTOM ;; CT_CC_GCC_CUSTOM) warning_if_set "Assuming custom location contains GNU sources; edit the configuration if it was Linaro version" replace CT_GCC_SRC_CUSTOM ;; CT_CC_GCC_CUSTOM_LOCATION) replace CT_GCC_CUSTOM_LOCATION ;; CT_ELF2FLT_CUSTOM) replace CT_ELF2FLT_SRC_CUSTOM ;; CT_ELF2FLT_GIT) if is_set; then echo "CT_ELF2FLT_SRC_DEVEL=y" fi replace CT_ELF2FLT_DEVEL_VCS_git ;; CT_ELF2FLT_GIT_CSET) replace CT_ELF2FLT_DEVEL_REVISION ;; CT_GDB_CUSTOM) warning_if_set "Assuming custom location contains GNU sources; edit the configuration if it was Linaro version" replace CT_GDB_SRC_CUSTOM ;; CT_KERNEL_LINUX_CUSTOM) replace CT_LINUX_SRC_CUSTOM ;; CT_KERNEL_LINUX_CUSTOM_LOCATION) replace CT_LINUX_CUSTOM_LOCATION ;; CT_LIBC_AVR_LIBC_CUSTOM) replace CT_AVR_LIBC_SRC_CUSTOM ;; CT_LIBC_AVR_LIBC_CUSTOM_LOCATION) replace CT_AVR_LIBC_CUSTOM_LOCATION ;; CT_LIBC_GLIBC_CUSTOM) warning_if_set "Assuming custom location contains GNU sources; edit the configuration if it was Linaro version" replace CT_GLIBC_SRC_CUSTOM ;; CT_LIBC_GLIBC_CUSTOM_LOCATION) replace CT_GLIBC_CUSTOM_LOCATION ;; CT_LIBC_MUSL_CUSTOM) replace CT_MUSL_SRC_CUSTOM ;; CT_LIBC_MUSL_CUSTOM_LOCATION) replace CT_MUSL_CUSTOM_LOCATION ;; CT_LIBC_NEWLIB_CUSTOM) warning_if_set "Assuming custom location contains GNU sources; edit the configuration if it was Linaro version" replace CT_NEWLIB_SRC_CUSTOM ;; CT_LIBC_NEWLIB_CUSTOM_LOCATION) replace CT_NEWLIB_CUSTOM_LOCATION ;; CT_LIBC_UCLIBC_CUSTOM) if [ "${CT_LIBC_UCLIBC_CUSTOM_UCLIBC}" = "y" ]; then replace CT_UCLIBC_SRC_CUSTOM else replace CT_UCLIBC_NG_SRC_CUSTOM fi ;; CT_LIBC_UCLIBC_CUSTOM_UCLIBC) replace CT_UCLIBC_SRC_CUSTOM ;; CT_LIBC_UCLIBC_CUSTOM_UCLIBC_NG) replace CT_UCLIBC_NG_SRC_CUSTOM ;; CT_LIBC_UCLIBC_CUSTOM_UCLIBC_NG_OLD) warning_if_set "uClibc-NG versions before 1.0.15 no longer supported" replace CT_UCLIBC_NG_SRC_CUSTOM ;; CT_LIBC_UCLIBC_CUSTOM_LOCATION) if [ "${CT_LIBC_UCLIBC_CUSTOM_UCLIBC}" = "y" ]; then replace CT_UCLIBC_CUSTOM_LOCATION else replace CT_UCLIBC_NG_CUSTOM_LOCATION fi ;; CT_WINAPI_V_DEVEL) replace CT_MINGW_W64_SRC_DEVEL ;; CT_WINAPI_V_select) # Internal selector unset opt ;; CT_BINUTILS_CUSTOM_VERSION|CT_CC_GCC_CUSTOM_VERSION|CT_ELF2FLT_CUSTOM_VERSION|CT_KERNEL_LINUX_CUSTOM_VERSION|\ CT_LIBC_AVR_LIBC_CUSTOM_VERSION|CT_LIBC_GLIBC_CUSTOM_VERSION|CT_LIBC_MUSL_CUSTOM_VERSION|\ CT_LIBC_NEWLIB_CUSTOM_VERSION|CT_LIBC_UCLIBC_CUSTOM_VERSION|CT_GDB_CUSTOM_VERSION) warning_if_set "Cannot automatically convert custom version; edit configuration to select it" unset opt ;; CT_CC_GCC_VERSION|CT_CC_VERSION|CT_KERNEL_VERSION|CT_WINAPI_VERSION|CT_LIBC_VERSION) # Auto-selected; the symbol was just renamed unset opt ;; CT_LIBC_glibc_family) # Internal selector, not user-visible unset opt ;; CT_LIBC_ADDONS_LIST) warning_if_set "Support for custom add-ons has been removed. If using libidn add-on, edit the configuration." ;; CT_LIBC_DISABLE_VERSIONING) replace CT_GLIBC_DISABLE_VERSIONING ;; CT_LIBC_ENABLE_FORTIFIED_BUILD) replace CT_GLIBC_ENABLE_FORTIFIED_BUILD ;; CT_LIBC_GLIBC_CONFIGPARMS|CT_LIBC_GLIBC_EXTRA_CFLAGS|CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY|\ CT_LIBC_GLIBC_FORCE_UNWIND|CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS|CT_LIBC_GLIBC_KERNEL_VERSION_CHOSEN|\ CT_LIBC_GLIBC_KERNEL_VERSION_NONE|CT_LIBC_GLIBC_MIN_KERNEL|CT_LIBC_GLIBC_MIN_KERNEL_VERSION) replace CT_GLIBC_${opt#CT_LIBC_GLIBC_} ;; CT_LIBC_LOCALES) replace CT_GLIBC_LOCALES ;; CT_LIBC_OLDEST_ABI) replace CT_GLIBC_OLDEST_ABI ;; CT_LIBC_GLIBC_NEEDS_PORTS|CT_LIBC_GLIBC_PORTS_EXTERNAL|CT_LIBC_GLIBC_USE_PORTS) # Auto-selected unset opt ;; CT_LIBC_UCLIBC_LOCALES_PREGEN_DATA) warning_if_set "Support for pregenerated locales in uClibc has been removed" unset opt ;; # Trivial version replacements CT_AUTOMAKE_V_1_11_1) replace CT_AUTOMAKE_V_1_11_6;; CT_AUTOMAKE_V_1_11_6) replacement_for CT_AUTOMAKE_V_1_11_1;; CT_AUTOMAKE_V_1_14) replace CT_AUTOMAKE_V_1_14_1;; CT_AUTOMAKE_V_1_15) replace CT_AUTOMAKE_V_1_15_1;; CT_BINUTILS_V_2_26) replace CT_BINUTILS_V_2_26_1;; CT_BINUTILS_V_2_28) replace CT_BINUTILS_V_2_28_1;; CT_BINUTILS_LINARO_V_2_23_2) select_linaro BINUTILS; replace CT_BINUTILS_LINARO_V_2_23_2_2013_10_4;; CT_BINUTILS_LINARO_V_2_24) select_linaro BINUTILS; replace CT_BINUTILS_LINARO_V_2_24_0_2014_11_2;; CT_BINUTILS_LINARO_V_2_25) select_linaro BINUTILS; replace CT_BINUTILS_LINARO_V_2_25_0_2015_01_2;; CT_CC_GCC_V_4_8_5) replace CT_GCC_V_4_8_5;; CT_CC_GCC_V_4_9_4) replace CT_GCC_V_4_9_4;; CT_CC_GCC_V_5_4_0) replace CT_GCC_V_5_5_0;; CT_CC_GCC_V_6_3_0) replace CT_GCC_V_6_5_0;; CT_CC_GCC_V_linaro_4_8) select_linaro GCC; replace CT_GCC_LINARO_V_4_8_2015_06;; CT_CC_GCC_V_linaro_4_9) select_linaro GCC; replace CT_GCC_LINARO_V_4_9_2017_01;; CT_CC_GCC_V_linaro_5_4) select_linaro GCC; replace CT_GCC_LINARO_V_5_5_2017_10;; CT_CC_GCC_V_linaro_6_3) select_linaro GCC; replace CT_GCC_LINARO_V_6_4_2018_05;; CT_CLOOG_V_0_18_0) replace CT_CLOOG_V_0_18_1;; CT_CLOOG_V_0_18_1) replacement_for CT_CLOOG_V_0_18_0;; CT_EXPAT_V_2_2_0) replace CT_EXPAT_V_2_2_6;; # 2.2.6 was not available in ct-ng 1.23.0 - no replacement_for CT_GDB_V_6_8a) replace CT_GDB_V_6_8A;; CT_GDB_V_7_0a) replace CT_GDB_V_7_0_1A;; CT_GDB_V_7_0_1a) replace CT_GDB_V_7_0_1A;; CT_GDB_V_7_1a) replace CT_GDB_V_7_1A;; CT_GDB_V_7_2a) replace CT_GDB_V_7_2A;; CT_GDB_V_7_3a) replace CT_GDB_V_7_3A;; CT_GDB_V_7_4) replace CT_GDB_V_7_4_1;; CT_GDB_V_7_7) replace CT_GDB_V_7_7_1;; CT_GDB_V_7_8|CT_GDB_V_7_8_1) replace CT_GDB_V_7_8_2;; CT_GDB_V_7_8_2) replacement_for CT_GDB_V_7_8 CT_GDB_V_7_8_1;; CT_GDB_V_7_9) replace CT_GDB_V_7_9_1;; CT_GDB_V_7_10) replace CT_CT_GDB_V_7_10_1;; CT_GDB_V_linaro_7_3) select_linaro GDB; replace CT_GDB_LINARO_V_7_3_2011_12;; CT_GDB_V_linaro_7_4) select_linaro GDB; replace CT_GDB_LINARO_V_7_4_2012_06;; CT_GDB_V_linaro_7_5) select_linaro GDB; replace CT_GDB_LINARO_V_7_5_2012_12;; CT_GDB_V_linaro_7_6) select_linaro GDB; replace CT_GDB_LINARO_V_7_6_1_2013_10;; CT_GDB_V_linaro_7_7) select_linaro GDB; replace CT_GDB_LINARO_V_7_7_1_2014_06_1;; CT_GDB_V_linaro_7_7_1) select_linaro GDB; replace CT_GDB_LINARO_V_7_7_1_2014_06_1;; CT_GDB_V_linaro_7_8) select_linaro GDB; replace CT_GDB_LINARO_V_7_8_2014_09;; CT_GMP_V_4_3_0|CT_GMP_V_4_3_1) replace CT_GMP_V_4_3_2;; CT_GMP_V_4_3_2) replacement_for CT_GMP_V_4_3_0 CT_GMP_V_4_3_1;; CT_GMP_V_5_0_1|CT_GMP_V_5_0_2) replace CT_GMP_V_5_0_5;; # 5.0.5 not in ct-ng 1.23.0 CT_GMP_V_5_1_1) replace CT_GMP_V_5_1_3;; CT_GMP_V_5_1_3) replacement_for CT_GMP_V_5_1_1;; CT_GMP_V_6_0_0) replace CT_GMP_V_6_0_0A;; # 6.0.0a not in ct-ng 1.23.0 CT_GMP_V_6_1_0) replace CT_GMP_V_6_1_2;; CT_GMP_V_6_1_2) replacement_for CT_GMP_V_6_1_0;; CT_ISL_V_0_11_1) replace CT_ISL_V_0_11_2;; CT_ISL_V_0_14) replace CT_ISL_V_0_14_1;; CT_KERNEL_V_2_6_32|CT_KERNEL_V_2_6_33|CT_KERNEL_V_2_6_34|CT_KERNEL_V_2_6_35|\ CT_KERNEL_V_2_6_36|CT_KERNEL_V_2_6_37|CT_KERNEL_V_2_6_38|CT_KERNEL_V_2_6_39|\ CT_KERNEL_V_3_0|CT_KERNEL_V_3_1|CT_KERNEL_V_3_2|CT_KERNEL_V_3_3|CT_KERNEL_V_3_4|CT_KERNEL_V_3_5|\ CT_KERNEL_V_3_6|CT_KERNEL_V_3_7|CT_KERNEL_V_3_8|CT_KERNEL_V_3_9|CT_KERNEL_V_3_10|CT_KERNEL_V_3_11|\ CT_KERNEL_V_3_12|CT_KERNEL_V_3_13|CT_KERNEL_V_3_14|CT_KERNEL_V_3_15|CT_KERNEL_V_3_16|\ CT_KERNEL_V_3_17|CT_KERNEL_V_3_18|CT_KERNEL_V_3_19|\ CT_KERNEL_V_4_0|CT_KERNEL_V_4_1|CT_KERNEL_V_4_2|CT_KERNEL_V_4_3|CT_KERNEL_V_4_4|\ CT_KERNEL_V_4_5|CT_KERNEL_V_4_6|CT_KERNEL_V_4_7|CT_KERNEL_V_4_8|CT_KERNEL_V_4_9|CT_KERNEL_V_4_10) replace CT_LINUX_${opt#CT_KERNEL_};; CT_LIBC_AVR_LIBC_V_1_8_0) replace CT_AVR_LIBC_V_1_8_1;; CT_LIBC_AVR_LIBC_V_1_8_1) replace CT_AVR_LIBC_V_1_8_1;; CT_LIBC_AVR_LIBC_V_2_0_0) replace CT_AVR_LIBC_V_2_0_0;; CT_LIBC_GLIBC_V_2_12_1|CT_LIBC_GLIBC_V_2_12_2|CT_LIBC_GLIBC_V_2_13|CT_LIBC_GLIBC_V_2_14|\ CT_LIBC_GLIBC_V_2_14_1|CT_LIBC_GLIBC_V_2_15|CT_LIBC_GLIBC_V_2_16_0|CT_LIBC_GLIBC_V_2_17|\ CT_LIBC_GLIBC_V_2_18|CT_LIBC_GLIBC_V_2_19|CT_LIBC_GLIBC_V_2_20|CT_LIBC_GLIBC_V_2_21|\ CT_LIBC_GLIBC_V_2_22|CT_LIBC_GLIBC_V_2_23|CT_LIBC_GLIBC_V_2_24|CT_LIBC_GLIBC_V_2_25) replace CT_GLIBC_${opt#CT_LIBC_GLIBC_};; CT_LIBC_GLIBC_LINARO_V_2_20) replace CT_GLIBC_LINARO_V_2_20_2014_11;; CT_LIBC_MUSL_V_1_1_15|CT_LIBC_MUSL_V_1_1_16) replace CT_MUSL_${opt#CT_LIBC_MUSL_};; CT_LIBC_NEWLIB_V_1_17_0|CT_LIBC_NEWLIB_V_1_18_0|CT_LIBC_NEWLIB_V_1_19_0|CT_LIBC_NEWLIB_V_1_20_0|\ CT_LIBC_NEWLIB_V_2_0_0|CT_LIBC_NEWLIB_V_2_1_0|CT_LIBC_NEWLIB_V_2_2_0|CT_LIBC_NEWLIB_V_2_3_0|\ CT_LIBC_NEWLIB_V_2_4_0|CT_LIBC_NEWLIB_V_2_5_0) replace CT_NEWLIB_${opt#CT_LIBC_NEWLIB_};; CT_LIBC_NEWLIB_LINARO_V_2_1_0) select_linaro NEWLIB; replace CT_NEWLIB_LINARO_V_2_1_0_2014;; CT_LIBC_NEWLIB_LINARO_V_2_2_0) select_linaro NEWLIB; replace CT_NEWLIB_LINARO_V_2_2_0_2015;; CT_LIBELF_V_0_8_12) replace CT_LIBELF_V_0_8_13;; CT_LIBELF_V_0_8_13) replacement_for CT_LIBELF_V_0_8_12;; CT_M4_V_1_4_13|CT_M4_V_1_4_17) replace CT_CT_M4_V_1_4_18;; CT_M4_V_1_4_18) replacement_for CT_M4_V_1_4_13 CT_M4_V_1_4_17;; CT_MPC_V_0_8_1) replace CT_MPC_V_0_8_2;; CT_MPC_V_0_8_2) replacement_for CT_MPC_V_0_8_1;; CT_MPC_V_1_0|CT_MPC_V_1_0_1|CT_MPC_V_1_0_2) replace CT_MPC_V_1_0_3;; CT_MPC_V_1_0_3) replacement_for CT_MPC_V_1_0 CT_MPC_V_1_0_1 CT_MPC_V_1_0_2;; CT_MPFR_V_2_4_0|CT_MPFR_V_2_4_1) replace CT_MPFR_V_2_4_2;; CT_MPFR_V_2_4_2) replacement_for CT_MPFR_V_2_4_0 CT_MPFR_V_2_4_1;; CT_MPFR_V_3_0_0) replace CT_MPFR_V_3_0_1;; CT_MPFR_V_3_0_1) replacement_for CT_MPFR_V_3_0_0;; CT_MPFR_V_3_1_0|CT_MPFR_V_3_1_2|CT_MPFR_V_3_1_3|CT_MPFR_V_3_1_5) replace CT_MPFR_V_3_1_6;; CT_MPFR_V_3_1_6) replacement_for CT_MPFR_V_3_1_0 CT_MPFR_V_3_1_2 CT_MPFR_V_3_1_3 CT_MPFR_V_3_1_5;; CT_STRACE_V_4_5_18|CT_STRACE_V_4_5_19) replace CT_STRACE_V_4_5_20;; CT_STRACE_V_4_5_20) replacement_for CT_STRACE_V_4_5_18 CT_STRACE_V_4_5_19;; CT_LIBC_UCLIBC_NG_V_1_0_20|CT_LIBC_UCLIBC_NG_V_1_0_21|CT_LIBC_UCLIBC_NG_V_1_0_22) is_set && echo "CT_UCLIBC_USE_UCLIBC_NG_ORG=y" replace CT_UCLIBC_NG_V_1_0_25 ;; CT_LIBC_UCLIBC_V_0_9_33_2) is_set && echo "CT_UCLIBC_USE_UCLIBC_ORG=y" replace CT_UCLIBC_V_0_9_33_2 ;; CT_WINAPI_V_2_0_7|CT_WINAPI_V_2_0_7|CT_WINAPI_V_2_0_9) replace CT_MINGW_W64_V_V2_0_10;; CT_WINAPI_V_3_0_0) replace CT_MINGW_W64_V_V3_0_0;; CT_WINAPI_V_3_1_0) replace CT_MINGW_W64_V_V3_1_0;; CT_WINAPI_V_3_2_0) replace CT_MINGW_W64_V_V3_2_0;; CT_WINAPI_V_3_3_0) replace CT_MINGW_W64_V_V3_3_0;; CT_WINAPI_V_4_0_0|CT_WINAPI_V_4_0_1|CT_WINAPI_V_4_0_2|CT_WINAPI_V_4_0_3|\ CT_WINAPI_V_4_0_4|CT_WINAPI_V_4_0_5|CT_WINAPI_V_4_0_6) replace CT_MINGW_W64_V_V4_0_6;; CT_WINAPI_V_5_0_0|CT_WINAPI_V_5_0_1) replace CT_MINGW_W64_V_V5_0_3;; # Misc CT_CLOOG_NEEDS_AUTORECONF) # Was unused in 1.23, just drop unset opt ;; CT_PATCH_SINGLE) # Internal selector in 1.23 unset opt ;; CT_PATCH_BUNDLED_FALLBACK_LOCAL|CT_PATCH_LOCAL_FALLBACK_BUNDLED) warning_if_set "Fallback patch order has been removed" ;; CT_CC_GCC_TARGET_FINAL) warning_if_set "Option removed" ;; CT_COMPLIBS|CT_COMPLIBS_NEEDED|CT_CC_GCC_latest) # Internal selectors unset opt ;; esac } # Main upgrade driver. One version at a time, read line by line, interpret # the options and replace anything that needs replacing. cp "${CFGFILE}" "${CFGFILE}.before-upgrade" v=${CT_CONFIG_VERSION} input="${CFGFILE}" while [ "${v}" -lt "${CT_CONFIG_VERSION_CURRENT}" ]; do vn=$[ v + 1 ] info "Upgrading v${v} to v${vn}" { while read ln; do unset val q= case "${ln}" in CT_CONFIG_VERSION_CURRENT=*|CT_CONFIG_VERSION=*) continue ;; CT_*=*) opt=${ln%%=*} val=${ln#*=} case "${val}" in \"*\") val="${val%\"}" val="${val#\"}" q=\" ;; esac ;; "# CT_"*" is not set") opt=${ln#* } opt=${opt%% *} ;; *) echo "${ln}" continue ;; esac upgrade_v${v} # Emit the option(s) if [ x${opt+set} = x ]; then continue elif [ x${val+set} = x ]; then echo "# ${opt} is not set" else echo "${opt}=${q}${val}${q}" fi done echo "CT_CONFIG_VERSION=\"${vn}\"" echo "CT_CONFIG_VERSION_CURRENT=\"${CT_CONFIG_VERSION_CURRENT}\"" } < "${input}" > "${CFGFILE}.${vn}" v=${vn} rm -f "${input}" input="${CFGFILE}.${vn}" # Reload the next input so that the upgrade function can rely on other CT_xxx variables, # not just the currently processed variable. # TBD clean the environment first to avoid any stale values . "${input}" # Ideally, we'd do 'ct-ng olddefconfig' after each step with the appropriate # Kconfig so that the next step would be able to use auto-set values from the # previous step. However, that would require us to keep archived config/ trees # from every config file version, which is not practical. So, I decided to defer # this until it is actually needed. Even then, it is probably sufficient to only # keep the versions where there is such a dependency. done mv "${CFGFILE}.${CT_CONFIG_VERSION_CURRENT}" "${CFGFILE}" cp "${CFGFILE}" "${CFGFILE}.before-olddefconfig" cat >&2 <