From b06212b5a2fc5b9bff72327bc7d5a7ec1c7ef613 Mon Sep 17 00:00:00 2001 From: Antonio Borneo Date: Wed, 21 May 2025 15:19:28 +0200 Subject: [PATCH] startup.tcl: extend the file search in vendor folders The TCL configuration files are going to be dispatched in vendor specific folders. Old user configuration files will fail to find the new files to include, so a set of fallback files reporting the deprecation should replace the renamed files. To prevent such enormous proliferation of fallback files, extend the search of files in the vendor folders too. For non-trivial renames, a dedicated table is added in the file tcl/file_renaming.cfg to track old --> new file names. The deprecated message is then part of the extended search. E.g.: old file names: - path/to/a/certain/vendor_config_file - path/to/a/certain/vendor-config_file trigger search of: - path/to/a/certain/vendor/config_file and - path/to/a/certain/config_file trigger search of: - path/to/a/certain/${vendor}/config_file among a possible vendors list. This is a temporarily feature that should be removed as soon as possible to prevent clashing on files with the same name. The names in tcl/file_renaming.cfg are for demonstration purpose only and should be dropped when the first real entries are added. Change-Id: If4793fef27dc570d5df4ff4d77a5e36004f394f6 Signed-off-by: Antonio Borneo Reviewed-on: https://review.openocd.org/c/openocd/+/8929 Tested-by: jenkins --- src/helper/startup.tcl | 46 +++++++++++++++++++++++++++++++++++++++++- tcl/file_renaming.cfg | 19 +++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 tcl/file_renaming.cfg diff --git a/src/helper/startup.tcl b/src/helper/startup.tcl index e6e76e68f..e328cbe07 100644 --- a/src/helper/startup.tcl +++ b/src/helper/startup.tcl @@ -7,7 +7,8 @@ # Try flipping / and \ to find file if the filename does not # match the precise spelling -proc find {filename} { +# lappend _telnet_autocomplete_skip _find_internal +proc _find_internal {filename} { if {[catch {ocd_find $filename} t]==0} { return $t } @@ -20,6 +21,49 @@ proc find {filename} { # make sure error message matches original input string return -code error "Can't find $filename" } + +proc find {filename} { + if {[catch {_find_internal $filename} t]==0} { + return $t + } + + # Check in vendor specific folder: + + # - path/to/a/certain/vendor_config_file + # - path/to/a/certain/vendor-config_file + # replaced with + # - path/to/a/certain/vendor/config_file + regsub {([/\\])([^/\\_-]*)[_-]([^/\\]*$)} $filename "\\1\\2\\1\\3" f + if {[catch {_find_internal $f} t]==0} { + echo "WARNING: '$filename' is deprecated, use '$f' instead" + return $t + } + + foreach vendor {nordic ti st} { + # - path/to/a/certain/config_file + # replaced with + # - path/to/a/certain/${vendor}/config_file + regsub {([/\\])([^/\\]*$)} $filename "\\1$vendor\\1\\2" f + if {[catch {_find_internal $f} t]==0} { + echo "WARNING: '$filename' is deprecated, use '$f' instead" + return $t + } + } + + # at last, check for explicit renaming + if {[catch { + source [_find_internal file_renaming.cfg] + set unixname [string map {\\ /} $filename] + regsub {^(.*/|)((board|chip|cpld|cpu|fpga|interface|target|test|tools)/.*.cfg$)} $unixname {{\1} {\2}} split + set newname [lindex $split 0][dict get $_file_renaming [lindex $split 1]] + _find_internal $newname + } t]==0} { + echo "WARNING: '$filename' is deprecated, use '$newname' instead" + return $t + } + + return -code error "Can't find $filename" +} add_usage_text find "" add_help_text find "print full path to file according to OpenOCD search rules" diff --git a/tcl/file_renaming.cfg b/tcl/file_renaming.cfg new file mode 100644 index 000000000..81e54823f --- /dev/null +++ b/tcl/file_renaming.cfg @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +# This file is used to remap configuration files that has been +# renamed, except simple renames that are taken care automatically +# like: +# .../file.cfg ==> .../${vendor}/file.cfg +# .../vendor-file.cfg ==> .../vendor/file.cfg +# .../vendor_file.cfg ==> .../vendor/file.cfg +# +# The formatting below is a TCL dict, so pairs of key-value +# in a simple TCL list, using for each line +# old_name new_name +# including in each name one of the prefix folder between +# board, chip, cpld, cpu, fpga, interface, target, test, tools + +set _file_renaming { + board/hello.cfg board/st/nucleo-u083rc.cfg + board/my-funny-pcb.cfg board/st_nucleo_f0.cfg +} -- 2.50.1