]> www.infradead.org Git - users/borneoa/openocd-next.git/commitdiff
startup.tcl: extend the file search in vendor folders
authorAntonio Borneo <borneo.antonio@gmail.com>
Wed, 21 May 2025 13:19:28 +0000 (15:19 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sat, 7 Jun 2025 08:49:20 +0000 (08:49 +0000)
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
src/helper/startup.tcl
tcl/file_renaming.cfg [new file with mode: 0644]

index e6e76e68fd30cba16028114b9253952000673277..e328cbe07f602c32e70b3af4cbbe3c183e9f3041 100644 (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"
 
diff --git a/tcl/file_renaming.cfg b/tcl/file_renaming.cfg
new file mode 100644 (file)
index 0000000..81e5482
--- /dev/null
@@ -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
+}