From 09cb590847e5e26e5bb029c1a2693cfa7a1e99b6 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Sat, 9 Feb 2019 14:09:20 -0800 Subject: Improve upgradability of defconfig files - Switch to two-pass reading of the config file to track both (a) the option's value and (b) if the option has been explicitly called out in the .config being processed. - Split off per-version functions into separate files. - Add a README with some guidelines on writing new upgrade scripts. Signed-off-by: Alexey Neyman diff --git a/scripts/upgrade/README b/scripts/upgrade/README new file mode 100644 index 0000000..51760ea --- /dev/null +++ b/scripts/upgrade/README @@ -0,0 +1,23 @@ +Upgrade scripts for specific versions of the config file. +Each script must define a function `upgrade` that can +assume `${opt}` and `${val}` variables set on input. On +output, if `${opt}` is unset - so will be the corresponding +option. + +One thing to keep in mind is that this script may be invoked +on full config - or on a defconfig. Do not assume that all +options will be present! If an option is not specified, use +the value it had as a default for the fallback; to check if +it has been specified, use `$selected_opts` associative +array to check if it has been present in the config file +(otherwise, you an option not being set after sourcing the +previous version of the config is ambiguous - it could be +that the option is called out as `# CT_FOO is not set` (i.e. +selected as false) or not present at all (i.e. selected as +default). + +If it is not possible to determine the settings of an option +because a different controlling option is not set, either +err out (see CT_LIBC_UCLIBC_CUSTOM in v0 for an example) +or select a sane default and issue a warning (see CT_GDB_CUSTOM +in v0 for an example). diff --git a/scripts/upgrade/v0 b/scripts/upgrade/v0 new file mode 100644 index 0000000..68dfca0 --- /dev/null +++ b/scripts/upgrade/v0 @@ -0,0 +1,351 @@ +# vim: set filetype=sh : + +# 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 +} + +# 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() +{ + 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 + replace ${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 is_set; then + if [ "${selected_opts[CT_LIBC_UCLIBC_CUSTOM_UCLIBC]+set}" != "set" ]; then + error "This option requires full config file, not defconfig" + elif [ "${CT_LIBC_UCLIBC_CUSTOM_UCLIBC}" = "y" ]; then + replace CT_UCLIBC_USE_UCLIBC_ORG + else + replace CT_UCLIBC_USE_UCLIBC_NG_ORG + fi + 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_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_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) + if is_set; then + echo "CT_UCLIBC_USE_UCLIBC_NG_ORG=y" + fi + replace CT_UCLIBC_NG_V_1_0_25 + ;; + CT_LIBC_UCLIBC_V_0_9_33_2) + if is_set; then + echo "CT_UCLIBC_USE_UCLIBC_ORG=y" + fi + 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 +} diff --git a/scripts/upgrade/v1 b/scripts/upgrade/v1 new file mode 100644 index 0000000..0794722 --- /dev/null +++ b/scripts/upgrade/v1 @@ -0,0 +1,114 @@ +# vim: set filetype=sh : + +# Upgrade v1 -> v2: several packages had their config options renamed +# to leave only the relevant part - so that further upgrades of, say, +# GCC 6.5.0 to 6.6.0 do not result in config changes. +upgrade() +{ + case "${opt}" in + CT_ANDROID_NDK_V_R10E|CT_ANDROID_NDK_V_R11C|CT_ANDROID_NDK_V_R12B|\ + CT_ANDROID_NDK_V_R13B|CT_ANDROID_NDK_V_R14B|CT_ANDROID_NDK_V_R15C|\ + CT_ANDROID_NDK_V_R16B|CT_ANDROID_NDK_V_R17C) + replace "${opt%[A-Z]}" + ;; + CT_AUTOMAKE_V_1_11_6|CT_AUTOMAKE_V_1_14_1|\ + CT_AUTOMAKE_V_1_15_1|CT_AUTOMAKE_V_1_16_1) + replace "${opt%_[0-9]}" + ;; + CT_BINUTILS_LINARO_V_2_23_2_2013_10_4|CT_BINUTILS_LINARO_V_2_24_0_2014_11_2|\ + CT_BINUTILS_LINARO_V_2_25_0_2015_01_2) + replace "${opt%_[0-9]_201[345]*}" + ;; + CT_BINUTILS_V_2_23_2|CT_BINUTILS_V_2_25_1|CT_BINUTILS_V_2_26_1|\ + CT_BINUTILS_V_2_28_1|CT_BINUTILS_V_2_29_1|CT_BINUTILS_V_2_31_1) + replace "${opt%_[0-9]}" + ;; + CT_DTC_V_1_4_7) + replace CT_DTC_V_1_4 + ;; + CT_EXPAT_V_2_1_1|CT_EXPAT_V_2_2_6) + replace "${opt%_[0-9]}" + ;; + CT_GCC_LINARO_V_4_8_2015_06|CT_GCC_LINARO_V_4_9_2017_01) + replace "${opt%_201[57]*}" + ;; + CT_GCC_LINARO_V_5_5_2017_10|CT_GCC_LINARO_V_6_4_2018_05|\ + CT_GCC_LINARO_V_7_3_2018_05) + replace "${opt%_[0-9]_201[78]*}" + ;; + CT_GCC_V_4_8_5|CT_GCC_V_4_9_4) + replace "${opt%_[0-9]}" + ;; + CT_GCC_V_5_5_0|CT_GCC_V_6_5_0|CT_GCC_V_7_4_0|CT_GCC_V_8_2_0) + replace "${opt%_[0-9]_[0-9]}" + ;; + CT_GDB_LINARO_V_7_3_2011_12|CT_GDB_LINARO_V_7_4_2012_06|CT_GDB_LINARO_V_7_5_2012_12|\ + CT_GDB_LINARO_V_7_7_2014_05|CT_GDB_LINARO_V_7_8_2014_09) + replace "${opt%_201[57]*}" + ;; + CT_GDB_LINARO_V_7_6_1_2013_10|CT_GDB_LINARO_V_7_7_1_2014_06_1) + replace "${opt%_[0-9]_201[345]*}" + ;; + + CT_GDB_V_6_8A|CT_GDB_V_7_1A|CT_GDB_V_7_2A) + replace "${opt%A}" + ;; + CT_GDB_V_7_0_1A) + replace CT_GDB_V_7_0 + ;; + CT_GDB_V_7_3_1|CT_GDB_V_7_4_1|CT_GDB_V_7_5_1|CT_GDB_V_7_6_1|CT_GDB_V_7_7_1|\ + CT_GDB_V_7_8_2|CT_GDB_V_7_9_1|CT_GDB_V_7_10_1|CT_GDB_V_7_11_1|CT_GDB_V_7_12_1|\ + CT_GDB_V_8_0_1|CT_GDB_V_8_1_1) + replace "${opt%_[0-9]}" + ;; + CT_GLIBC_LINARO_V_2_20_2014_11) + replace CT_GLIBC_LINARO_V_2_20 + ;; + CT_GMP_V_4_3_2|CT_GMP_V_5_0_5|CT_GMP_V_5_1_3|CT_GMP_V_6_0_0A|CT_GMP_V_6_1_2) + replace "${opt%_[0-9]*}" + ;; + CT_ISL_V_0_11_2|CT_ISL_V_0_12_2|CT_ISL_V_0_14_1|CT_ISL_V_0_16_1|CT_ISL_V_0_17_1) + replace "${opt%_[0-9]}" + ;; + CT_LIBELF_V_0_8_13) + replace CT_LIBELF_V_0_8 + ;; + CT_LIBTOOL_V_2_4_6) + replace CT_LIBTOOL_V_2_4 + ;; + CT_M4_V_1_4_18) + replace CT_M4_V_1_4 + ;; + CT_MAKE_V_4_2_1) + replace CT_MAKE_V_4_2 + ;; + CT_MINGW_W64_V_V2_0_10|CT_MINGW_W64_V_V3_0_0|CT_MINGW_W64_V_V3_1_0|CT_MINGW_W64_V_V3_2_0|\ + CT_MINGW_W64_V_V3_3_0|CT_MINGW_W64_V_V4_0_6|CT_MINGW_W64_V_V5_0_3|CT_MINGW_W64_V_V6_0_0) + replace "${opt%_[0-9]}" + ;; + CT_MPC_V_0_8_2|CT_MPC_V_1_0_3|CT_MPC_V_1_1_0) + replace "${opt%_[0-9]}" + ;; + CT_MPFR_V_2_4_2|CT_MPFR_V_3_0_1|CT_MPFR_V_3_1_6|CT_MPFR_V_4_0_1) + replace "${opt%_[0-9]}" + ;; + CT_NEWLIB_LINARO_V_2_1_0_2014|CT_NEWLIB_LINARO_V_2_2_0_2015) + replace "${opt%_[0-9]_201[345]*}" + ;; + CT_NEWLIB_V_1_17_0|CT_NEWLIB_V_1_18_0|CT_NEWLIB_V_1_19_0|CT_NEWLIB_V_1_20_0|CT_NEWLIB_V_2_0_0|\ + CT_NEWLIB_V_2_1_0|CT_NEWLIB_V_2_2_0|CT_NEWLIB_V_2_3_0|CT_NEWLIB_V_2_4_0|CT_NEWLIB_V_2_5_0|\ + CT_NEWLIB_V_3_0_0) + replace "${opt%_[0-9]}" + ;; + + CT_CLOOG_HAS_WITH_GMP_ISL_OSL|CT_CLOOG_0_18_or_later|CT_CLOOG_0_18_or_older|\ + CT_CLOOG_REQUIRE_0_18_or_later|CT_CLOOG_REQUIRE_0_18_or_older|\ + CT_CLOOG_REQUIRE_later_than_0_18|CT_CLOOG_REQUIRE_older_than_0_18|\ + CT_CLOOG_later_than_0_18|CT_CLOOG_older_than_0_18|CT_GCC_REQUIRE_4_9_2_or_later|\ + CT_GCC_REQUIRE_4_9_2_or_older|CT_GCC_REQUIRE_later_than_4_9_2|\ + CT_GCC_REQUIRE_older_than_4_9_2|CT_GCC_4_9_2_or_later|CT_GCC_4_9_2_or_older|\ + CT_GCC_BUG_61144|CT_GCC_later_than_4_9_2|CT_GCC_older_than_4_9_2) + unset opt # No longer used auto-selectors + ;; + esac +} diff --git a/scripts/version-check.sh b/scripts/version-check.sh index ccadfe7..f49b1d8 100644 --- a/scripts/version-check.sh +++ b/scripts/version-check.sh @@ -39,6 +39,12 @@ EOF fi fi +# From now on, we're running actual upgrade, not just a check. Preserve the CT_xxx +# variables that we need using a different prefix so that we can unset the stale +# values at each iteration. +MY_LIB_DIR="${CT_LIB_DIR}" +MY_CONFIG_VERSION_CURRENT="${CT_CONFIG_VERSION_CURRENT}" + is_set() { if [ "x${val+set}" = "xset" ]; then @@ -60,6 +66,13 @@ warning() echo "WARN ${opt:+:: ${opt} }:: $1" >&2 } +error() +{ + # $opt comes from the caller + echo " ERR ${opt:+:: ${opt} }:: $1" >&2 + exit 1 +} + warning_if_set() { if is_set; then @@ -97,509 +110,85 @@ replacement_for() 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. -### FIXME: perhaps, split these functions into per-version files in scripts/upgrade/{0,1,...} - -# 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() +# Helper: takes ${ln} in the caller's environment and sets ${opt} and ${val} +# accordingly. Returns 0 if this line was an option, 1 otherwise. +set_opt_and_val() { - 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 - replace ${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 is_set; then - if [ "${CT_LIBC_UCLIBC_CUSTOM_UCLIBC}" = "y" ]; then - replace CT_UCLIBC_USE_UCLIBC_ORG - else - replace CT_UCLIBC_USE_UCLIBC_NG_ORG - fi - 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_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_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) - if is_set; then - echo "CT_UCLIBC_USE_UCLIBC_NG_ORG=y" - fi - replace CT_UCLIBC_NG_V_1_0_25 - ;; - CT_LIBC_UCLIBC_V_0_9_33_2) - if is_set; then - echo "CT_UCLIBC_USE_UCLIBC_ORG=y" - fi - 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 - ;; + case "${ln}" in + CT_*=*) + opt=${ln%%=*} + val=${ln#*=} + case "${val}" in + \"*\") + val="${val%\"}" + val="${val#\"}" + q=\" + ;; + esac + return 0 + ;; + "# CT_"*" is not set") + opt=${ln#* } + opt=${opt%% *} + return 0 + ;; + *) + ;; esac + return 1 } -# Upgrade v1 -> v2: several packages had their config options renamed -# to leave only the relevant part - so that further upgrades of, say, -# GCC 6.5.0 to 6.6.0 do not result in config changes. -upgrade_v1() -{ - case "${opt}" in - CT_ANDROID_NDK_V_R10E|CT_ANDROID_NDK_V_R11C|CT_ANDROID_NDK_V_R12B|\ - CT_ANDROID_NDK_V_R13B|CT_ANDROID_NDK_V_R14B|CT_ANDROID_NDK_V_R15C|\ - CT_ANDROID_NDK_V_R16B|CT_ANDROID_NDK_V_R17C) - replace "${opt%[A-Z]}" - ;; - CT_AUTOMAKE_V_1_11_6|CT_AUTOMAKE_V_1_14_1|\ - CT_AUTOMAKE_V_1_15_1|CT_AUTOMAKE_V_1_16_1) - replace "${opt%_[0-9]}" - ;; - CT_BINUTILS_LINARO_V_2_23_2_2013_10_4|CT_BINUTILS_LINARO_V_2_24_0_2014_11_2|\ - CT_BINUTILS_LINARO_V_2_25_0_2015_01_2) - replace "${opt%_[0-9]_201[345]*}" - ;; - CT_BINUTILS_V_2_23_2|CT_BINUTILS_V_2_25_1|CT_BINUTILS_V_2_26_1|\ - CT_BINUTILS_V_2_28_1|CT_BINUTILS_V_2_29_1|CT_BINUTILS_V_2_31_1) - replace "${opt%_[0-9]}" - ;; - CT_DTC_V_1_4_7) - replace CT_DTC_V_1_4 - ;; - CT_EXPAT_V_2_1_1|CT_EXPAT_V_2_2_6) - replace "${opt%_[0-9]}" - ;; - CT_GCC_LINARO_V_4_8_2015_06|CT_GCC_LINARO_V_4_9_2017_01) - replace "${opt%_201[57]*}" - ;; - CT_GCC_LINARO_V_5_5_2017_10|CT_GCC_LINARO_V_6_4_2018_05|\ - CT_GCC_LINARO_V_7_3_2018_05) - replace "${opt%_[0-9]_201[78]*}" - ;; - CT_GCC_V_4_8_5|CT_GCC_V_4_9_4) - replace "${opt%_[0-9]}" - ;; - CT_GCC_V_5_5_0|CT_GCC_V_6_5_0|CT_GCC_V_7_4_0|CT_GCC_V_8_2_0) - replace "${opt%_[0-9]_[0-9]}" - ;; - CT_GDB_LINARO_V_7_3_2011_12|CT_GDB_LINARO_V_7_4_2012_06|CT_GDB_LINARO_V_7_5_2012_12|\ - CT_GDB_LINARO_V_7_7_2014_05|CT_GDB_LINARO_V_7_8_2014_09) - replace "${opt%_201[57]*}" - ;; - CT_GDB_LINARO_V_7_6_1_2013_10|CT_GDB_LINARO_V_7_7_1_2014_06_1) - replace "${opt%_[0-9]_201[345]*}" - ;; - - CT_GDB_V_6_8A|CT_GDB_V_7_1A|CT_GDB_V_7_2A) - replace "${opt%A}" - ;; - CT_GDB_V_7_0_1A) - replace CT_GDB_V_7_0 - ;; - CT_GDB_V_7_3_1|CT_GDB_V_7_4_1|CT_GDB_V_7_5_1|CT_GDB_V_7_6_1|CT_GDB_V_7_7_1|\ - CT_GDB_V_7_8_2|CT_GDB_V_7_9_1|CT_GDB_V_7_10_1|CT_GDB_V_7_11_1|CT_GDB_V_7_12_1|\ - CT_GDB_V_8_0_1|CT_GDB_V_8_1_1) - replace "${opt%_[0-9]}" - ;; - CT_GLIBC_LINARO_V_2_20_2014_11) - replace CT_GLIBC_LINARO_V_2_20 - ;; - CT_GMP_V_4_3_2|CT_GMP_V_5_0_5|CT_GMP_V_5_1_3|CT_GMP_V_6_0_0A|CT_GMP_V_6_1_2) - replace "${opt%_[0-9]*}" - ;; - CT_ISL_V_0_11_2|CT_ISL_V_0_12_2|CT_ISL_V_0_14_1|CT_ISL_V_0_16_1|CT_ISL_V_0_17_1) - replace "${opt%_[0-9]}" - ;; - CT_LIBELF_V_0_8_13) - replace CT_LIBELF_V_0_8 - ;; - CT_LIBTOOL_V_2_4_6) - replace CT_LIBTOOL_V_2_4 - ;; - CT_M4_V_1_4_18) - replace CT_M4_V_1_4 - ;; - CT_MAKE_V_4_2_1) - replace CT_MAKE_V_4_2 - ;; - CT_MINGW_W64_V_V2_0_10|CT_MINGW_W64_V_V3_0_0|CT_MINGW_W64_V_V3_1_0|CT_MINGW_W64_V_V3_2_0|\ - CT_MINGW_W64_V_V3_3_0|CT_MINGW_W64_V_V4_0_6|CT_MINGW_W64_V_V5_0_3|CT_MINGW_W64_V_V6_0_0) - replace "${opt%_[0-9]}" - ;; - CT_MPC_V_0_8_2|CT_MPC_V_1_0_3|CT_MPC_V_1_1_0) - replace "${opt%_[0-9]}" - ;; - CT_MPFR_V_2_4_2|CT_MPFR_V_3_0_1|CT_MPFR_V_3_1_6|CT_MPFR_V_4_0_1) - replace "${opt%_[0-9]}" - ;; - CT_NEWLIB_LINARO_V_2_1_0_2014|CT_NEWLIB_LINARO_V_2_2_0_2015) - replace "${opt%_[0-9]_201[345]*}" - ;; - CT_NEWLIB_V_1_17_0|CT_NEWLIB_V_1_18_0|CT_NEWLIB_V_1_19_0|CT_NEWLIB_V_1_20_0|CT_NEWLIB_V_2_0_0|\ - CT_NEWLIB_V_2_1_0|CT_NEWLIB_V_2_2_0|CT_NEWLIB_V_2_3_0|CT_NEWLIB_V_2_4_0|CT_NEWLIB_V_2_5_0|\ - CT_NEWLIB_V_3_0_0) - replace "${opt%_[0-9]}" - ;; - - CT_CLOOG_HAS_WITH_GMP_ISL_OSL|CT_CLOOG_0_18_or_later|CT_CLOOG_0_18_or_older|\ - CT_CLOOG_REQUIRE_0_18_or_later|CT_CLOOG_REQUIRE_0_18_or_older|\ - CT_CLOOG_REQUIRE_later_than_0_18|CT_CLOOG_REQUIRE_older_than_0_18|\ - CT_CLOOG_later_than_0_18|CT_CLOOG_older_than_0_18|CT_GCC_REQUIRE_4_9_2_or_later|\ - CT_GCC_REQUIRE_4_9_2_or_older|CT_GCC_REQUIRE_later_than_4_9_2|\ - CT_GCC_REQUIRE_older_than_4_9_2|CT_GCC_4_9_2_or_later|CT_GCC_4_9_2_or_older|\ - CT_GCC_BUG_61144|CT_GCC_later_than_4_9_2|CT_GCC_older_than_4_9_2) - unset opt # No longer used auto-selectors - ;; - 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 +while :; do + # Purge any possibly stale values + unset "${!CT_@}" + # Reload the next input so that the upgrade function can rely on other CT_xxx variables, + # not just the currently processed variable. + . "${input}" + v=${CT_CONFIG_VERSION:-0} + if [ "${v}" -ge "${MY_CONFIG_VERSION_CURRENT}" ]; then + break + fi + vn=$[ v + 1 ] info "Upgrading v${v} to v${vn}" + if [ ! -r "${MY_LIB_DIR}/scripts/upgrade/v${v}" ]; then + error "Missing upgrade script for v${v} of the config file" + fi + unset upgrade + . "${MY_LIB_DIR}/scripts/upgrade/v${v}" + # First pass: read in the whole file and mark the options mentioned; + # it may not be possible to upgrade a defconfig if some non-trivial + # option dependencies need to be resolved. We are not interested in + # values yet. + unset selected_opts + declare -A selected_opts + while read ln; do + if set_opt_and_val; then + selected_opts[${opt}]=1 + fi + done < "${input}" + + # Second pass: actually upgrade the options. { while read ln; do + unset opt 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=\" + if set_opt_and_val; then + case "${opt}" in + CT_CONFIG_VERSION_CURRENT=*|CT_CONFIG_VERSION=*) + continue ;; - esac - ;; - "# CT_"*" is not set") - opt=${ln#* } - opt=${opt%% *} - ;; - *) - echo "${ln}" - continue - ;; - esac - upgrade_v${v} + esac + else + echo "${ln}" + fi + upgrade # Emit the option(s) if [ x${opt+set} = x ]; then continue @@ -616,10 +205,6 @@ while [ "${v}" -lt "${CT_CONFIG_VERSION_CURRENT}" ]; do 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 @@ -627,7 +212,7 @@ while [ "${v}" -lt "${CT_CONFIG_VERSION_CURRENT}" ]; do # 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}" +mv "${CFGFILE}.${MY_CONFIG_VERSION_CURRENT}" "${CFGFILE}" cp "${CFGFILE}" "${CFGFILE}.before-olddefconfig" cat >&2 <