This is an automated email from Gerrit. "R. Diez <[email protected]>" just uploaded a new patch set to Gerrit, which you can find at https://review.openocd.org/c/openocd/+/9471
-- gerrit commit f69f79b3c2a2331fc2e7dce0d3413b2f8c35de19 Author: R. Diez <[email protected]> Date: Mon Feb 16 18:38:48 2026 +0100 Add command 'is_version_at_least' Without this command, the user must parse the output of 'version', which is not trivial. Change-Id: I73a3dbbce3e3d65ba1f9aeeb8411bc553a4b1092 Signed-off-by: R. Diez <[email protected]> diff --git a/configure.ac b/configure.ac index 39f5e074ed..12109d9167 100644 --- a/configure.ac +++ b/configure.ac @@ -1,8 +1,18 @@ # SPDX-License-Identifier: GPL-2.0-or-later AC_PREREQ([2.69]) -AC_INIT([openocd], [0.12.0+dev], + +m4_define([DEF_OPENOCD_VERSION_MAJOR],[0]) +m4_define([DEF_OPENOCD_VERSION_MINOR],[12]) +m4_define([DEF_OPENOCD_VERSION_REVISION],[0]) +m4_define([DEF_OPENOCD_VERSION], +m4_defn([DEF_OPENOCD_VERSION_MAJOR]).\ +m4_defn([DEF_OPENOCD_VERSION_MINOR]).\ +m4_defn([DEF_OPENOCD_VERSION_REVISION])) + +AC_INIT([openocd], m4_defn([DEF_OPENOCD_VERSION])[+dev], [OpenOCD Mailing List <[email protected]>]) + AC_CONFIG_SRCDIR([src/openocd.c]) AC_CONFIG_AUX_DIR([build-aux]) @@ -744,6 +754,16 @@ AS_IF([test "x${has_environ}" != "xyes" ], [ AC_DEFINE([_GNU_SOURCE],[1],[Use GNU C library extensions (e.g. stdndup).]) +AC_DEFINE([OPENOCD_VERSION_MAJOR], + m4_defn([DEF_OPENOCD_VERSION_MAJOR]), + [The major component of the OpenOCD version.]) +AC_DEFINE([OPENOCD_VERSION_MINOR], + m4_defn([DEF_OPENOCD_VERSION_MINOR]), + [The minor component of the OpenOCD version.]) +AC_DEFINE([OPENOCD_VERSION_REVISION], + m4_defn([DEF_OPENOCD_VERSION_REVISION]), + [The revision component of the OpenOCD version.]) + # set default gcc warnings GCC_WARNINGS="-Wall -Wstrict-prototypes -Wformat-security -Wshadow" AS_IF([test "x${gcc_wextra}" = "xyes"], [ diff --git a/src/openocd.c b/src/openocd.c index f3e1bee48e..42d0a4c69b 100644 --- a/src/openocd.c +++ b/src/openocd.c @@ -70,6 +70,37 @@ COMMAND_HANDLER(handler_version_command) return ERROR_OK; } +COMMAND_HANDLER(handle_is_version_at_least_command) +{ + if (CMD_ARGC != 3) + return ERROR_COMMAND_SYNTAX_ERROR; + + int version_major; + int version_minor; + int version_revision; + + COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], version_major); + COMMAND_PARSE_NUMBER(int, CMD_ARGV[1], version_minor); + COMMAND_PARSE_NUMBER(int, CMD_ARGV[2], version_revision); + + int return_value; + + if (version_major < OPENOCD_VERSION_MAJOR) + return_value = 1; + else if (version_major > OPENOCD_VERSION_MAJOR) + return_value = 0; + else if (version_minor < OPENOCD_VERSION_MINOR) + return_value = 1; + else if (version_minor > OPENOCD_VERSION_MINOR) + return_value = 0; + else + return_value = version_revision <= OPENOCD_VERSION_REVISION; + + command_print(CMD, "%d", return_value ? 1 : 0); + + return ERROR_OK; +} + static int log_target_callback_event_handler(struct target *target, enum target_event event, void *priv) @@ -199,6 +230,14 @@ static const struct command_registration openocd_command_handlers[] = { .help = "show program version", .usage = "[git]", }, + { + .name = "is_version_at_least", + .handler = handle_is_version_at_least_command, + .mode = COMMAND_ANY, + .help = "Returns a Tcl boolean (0/1) indicating whether the OpenOCD version " + "is at least the given major, minor and revision.", + .usage = "major minor revision", + }, { .name = "noinit", .handler = &handle_noinit_command, --
