Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 15 Dec 2025 13:43:51 +0000
From:      Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav <des@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: b318a7cadc57 - main - Uses/go.mk: Add support for requesting a minimum version
Message-ID:  <69401097.3113f.27b7f14a@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by des:

URL: https://cgit.FreeBSD.org/ports/commit/?id=b318a7cadc57d35a4dfdc1db90048b5e7b194501

commit b318a7cadc57d35a4dfdc1db90048b5e7b194501
Author:     Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2025-12-15 13:42:57 +0000
Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2025-12-15 13:43:24 +0000

    Uses/go.mk: Add support for requesting a minimum version
    
    This adds support for requesting a minimum Go version instead of an
    exact one.  If USES contains something like go:X.Y+, we walk the list
    of valid Go versions backward and pick the first element that matches
    either the requested version or the default version.  Assuming the
    list of valid versions is sorted semantically, this means we will
    pick the requested version if it is newer than the default version,
    and the default version otherwise.
    
    This is somewhat imprecise, but it's hard to do better without a
    comparison operator that understands semantic versioning, which bmake
    lacks.  Simply comparing versions lexicographically or numerically
    would produce incorrect results, since e.g. 1.3 precedes 1.29 but is
    both lexicographically and numerically larger.
    
    Note that specifying a version that does not yet exist in the ports tree
    will have the same effect as specifying a version that has been retired:
    silently fall back to the default version.
    
    This also drops support for pinning to -devel.  This is currently unused
    and doesn't work as implemented; furthermore, the current -devel port is
    wildly out of date and is expected to be removed rather than updated.
    
    MFH:            2025Q4
    Reviewed by:    fuz, adamw
    Differential Revision:  https://reviews.freebsd.org/D54104
---
 Mk/Uses/go.mk | 28 ++++++++++++++++++++--------
 1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/Mk/Uses/go.mk b/Mk/Uses/go.mk
index 872546e6fd01..3d34f15508cd 100644
--- a/Mk/Uses/go.mk
+++ b/Mk/Uses/go.mk
@@ -3,10 +3,11 @@
 #
 # Feature:	go
 # Usage:	USES=go
-# Valid ARGS:	(none), N.NN, N.NN-devel, modules, no_targets, run
+# Valid ARGS:	(none), N.NN+, N.NN, modules, no_targets, run
 #
 # (none)	Setup GOPATH and build in GOPATH mode using default Go version.
-# N.NN		Specify Go version
+# N.NN+		Specify minimum Go version
+# N.NN		Specify exact Go version (should be avoided)
 # modules	If the upstream uses Go modules, this can be set to build
 #		in modules-aware mode.
 # no_targets	Indicates that Go is needed at build time as a part of
@@ -83,19 +84,30 @@ _INCLUDE_USES_GO_MK=	yes
 
 # When adding a version, please keep the comment in
 # Mk/bsd.default-versions.mk in sync.
-GO_VALID_VERSIONS=	1.20 1.21 1.22 1.23 1.24 1.25 1.26-devel
+GO_VALID_VERSIONS=	1.20 1.21 1.22 1.23 1.24 1.25
 
 # Check arguments sanity
-.  if !empty(go_ARGS:N[1-9].[0-9][0-9]:N*-devel:Nmodules:Nno_targets:Nrun)
-IGNORE=	USES=go has invalid arguments: ${go_ARGS:N[1-9].[0-9][0-9]:N*-devel:Nmodules:Nno_targets:Nrun}
+.  if !empty(go_ARGS:N[1-9].[0-9][0-9]+:N[1-9].[0-9][0-9]:Nmodules:Nno_targets:Nrun)
+IGNORE=	USES=go has invalid arguments: ${go_ARGS:N[1-9].[0-9][0-9]+:N[1-9].[0-9][0-9]:Nmodules:Nno_targets:Nrun}
 .  endif
 
 # Parse Go version
-GO_VERSION=	${go_ARGS:Nmodules:Nno_targets:Nrun:C/^$/${GO_DEFAULT}/}
-.  if empty(GO_VALID_VERSIONS:M${GO_VERSION})
+.  if !empty(go_ARGS:M*+)
+GO_MIN_VERSION=	${go_ARGS:M*+:S/+//}
+.    for version in ${GO_VALID_VERSIONS:[-1..1]}
+.      if empty(GO_VERSION)
+.        if ${version} == ${GO_DEFAULT} || ${version} == ${GO_MIN_VERSION}
+GO_VERSION:=	${version}
+.        endif
+.      endif
+.    endfor
+.  else
+GO_VERSION:=	${go_ARGS:Nmodules:Nno_targets:Nrun:C/^$/${GO_DEFAULT}/}
+.    if empty(GO_VALID_VERSIONS:M${GO_VERSION})
 IGNORE?= USES=go has invalid version number: ${GO_VERSION}
+.    endif
 .  endif
-GO_SUFFIX=	${GO_VERSION:S/.//:C/.*-devel/-devel/}
+GO_SUFFIX=	${GO_VERSION:S/.//}
 GO_PORT=	lang/go${GO_SUFFIX}
 
 # Settable variables


help

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69401097.3113f.27b7f14a>