2
0
mirror of git://git.code.sf.net/p/openocd/code synced 2025-08-15 20:34:59 +10:00

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 <borneo.antonio@gmail.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/8929
Tested-by: jenkins
This commit is contained in:
Antonio Borneo 2025-05-21 15:19:28 +02:00
parent b1c1dd1ec4
commit b06212b5a2
2 changed files with 64 additions and 1 deletions

View File

@ -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 "<file>"
add_help_text find "print full path to file according to OpenOCD search rules"

19
tcl/file_renaming.cfg Normal file
View File

@ -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
}