# 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
}
# 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"
--- /dev/null
+# 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
+}