<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/35daead508d4fefe99051581a002834b7db67fa6">https://github.com/macports/macports-base/commit/35daead508d4fefe99051581a002834b7db67fa6</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 35daead5 Allow passing a comparison operator to vercmp
</span>35daead5 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 35daead508d4fefe99051581a002834b7db67fa6
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Thu Aug 11 13:20:54 2022 +1000

<span style='display:block; white-space:pre;color:#404040;'>    Allow passing a comparison operator to vercmp
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Usage example: vercmp $vers >= 1.0
</span><span style='display:block; white-space:pre;color:#404040;'>    Returns a boolean result when used in this way. Behaviour when called
</span><span style='display:block; white-space:pre;color:#404040;'>    with 2 args is unchanged.
</span>---
 src/pextlib1.0/vercomp.c | 44 +++++++++++++++++++++++++++++++++++++-------
 1 file changed, 37 insertions(+), 7 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/pextlib1.0/vercomp.c b/src/pextlib1.0/vercomp.c
</span><span style='display:block; white-space:pre;color:#808080;'>index c7f7eba7..6b2ef129 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/pextlib1.0/vercomp.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/pextlib1.0/vercomp.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -154,23 +154,53 @@ static int vercmp (const char *versionA, const char *versionB) {
</span>           return -1;
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+static int vercmp_op(const char *versionA, const char *operator, const char *versionB)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int cmpres = vercmp(versionA, versionB);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if (strcmp(operator, "==") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return (cmpres == 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else if (strcmp(operator, "!=") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return (cmpres != 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else if (strcmp(operator, ">") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return (cmpres > 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else if (strcmp(operator, "<") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return (cmpres < 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else if (strcmp(operator, ">=") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return (cmpres >= 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else if (strcmp(operator, "<=") == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return (cmpres <= 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> int VercompCmd(ClientData clientData UNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
 {
        Tcl_Obj *tcl_result;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        const char *versionA, *versionB;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   const char *versionA, *versionB, *operator;
</span>   int rval;
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (objc != 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           Tcl_WrongNumArgs(interp, 1, objv, "versionA versionB");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (objc < 3 || objc > 4) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           Tcl_WrongNumArgs(interp, 1, objv, "versionA [operator] versionB");
</span>           return TCL_ERROR;
        }
 
        versionA = Tcl_GetString(objv[1]);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        versionB = Tcl_GetString(objv[2]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   rval = vercmp(versionA, versionB);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (objc == 3) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       versionB = Tcl_GetString(objv[2]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       rval = vercmp(versionA, versionB);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       tcl_result = Tcl_NewIntObj(rval);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       operator = Tcl_GetString(objv[2]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       versionB = Tcl_GetString(objv[3]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       rval = vercmp_op(versionA, operator, versionB);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       if (rval == -1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           Tcl_SetResult(interp, "invalid operator, must be one of == != > < >= <=", TCL_STATIC);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       tcl_result = Tcl_NewBooleanObj(rval);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        tcl_result = Tcl_NewIntObj(rval);
</span>   Tcl_SetObjResult(interp, tcl_result);
 
        return TCL_OK;
</pre><pre style='margin:0'>

</pre>