git: f685268e17b6 - main - Mk/bsd.port.mk: Allow category_port_VARS= in make.conf for arbitrary per-port overrides.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 11 Jul 2023 22:08:32 UTC
The branch main has been updated by fuz:
URL: https://cgit.FreeBSD.org/ports/commit/?id=f685268e17b60e84024b0c7378b459c82ea1ee57
commit f685268e17b60e84024b0c7378b459c82ea1ee57
Author: Andrew Gierth <andrew@tao11.riddles.org.uk>
AuthorDate: 2023-07-11 07:44:53 +0000
Commit: Robert Clausecker <fuz@FreeBSD.org>
CommitDate: 2023-07-11 22:04:07 +0000
Mk/bsd.port.mk: Allow category_port_VARS= in make.conf for arbitrary per-port overrides.
Currently the only way to specify make.conf variables (other than port
options which have their own mechanism) in a per-port fashion is to use
conditionals on .CURDIR, which is fragile since it tends to involve
assumptions about where the ports tree is mounted.
Instead, allow category_portname_VARS= to be set in make.conf to provide
arbitrary assignments when building a specified port. For example one
might use
devel_llvm10_VARS= MAKE_JOBS_NUMBER=2
or
converters_lua-iconv_VARS= TRYBROKEN=yes
This is intended to be consistent with the existing
category_portname_SET= variables for port options, and uses the same
syntax for values as option_VARS= in port makefiles, but without the
case-folding behavior since that makes it impossible to handle
mixed-case or lowercase variable names.
Reviewed by: koobs, mat, adamw, mandree, 0mp
Approved by: portmgr (bapt)
Differential Revision: https://reviews.freebsd.org/D24324
VAR+=val can be used to append to a variable, and VAR@ to unset one entirely.
---
Mk/bsd.port.mk | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/Mk/bsd.port.mk b/Mk/bsd.port.mk
index 703a8541e383..e35313491bcb 100644
--- a/Mk/bsd.port.mk
+++ b/Mk/bsd.port.mk
@@ -1283,6 +1283,23 @@ _PORTDIRNAME= ${.CURDIR:T}
PORTDIRNAME?= ${_PORTDIRNAME}
PKGORIGIN?= ${PKGCATEGORY}/${PORTDIRNAME}
+# Now that PKGORIGIN is set, look for origin-specific variables.
+# These are typically set in a make.conf, in the form:
+#
+# category_portname_VARS= varname=value othervar+=value novar@
+#
+# e.g. devel_llvm10_VARS= MAKE_JOBS_NUMBER=2
+
+. for var in ${${PKGORIGIN:S/\//_/}_VARS:C/=.*//:O:u}
+. if ${var:M*@}
+. undef ${var:C/.$//}
+. elif ${var:M*+}
+${var:C/.$//}+= ${${PKGORIGIN:S/\//_/}_VARS:M${var}=*:C/[^+]*\+=//:C/^"(.*)"$$/\1/}
+. else
+${var}= ${${PKGORIGIN:S/\//_/}_VARS:M${var}=*:C/[^=]*=//:C/^"(.*)"$$/\1/}
+. endif
+. endfor
+
# where 'make config' records user configuration options
PORT_DBDIR?= /var/db/ports