summaryrefslogtreecommitdiff
path: root/Mk
diff options
context:
space:
mode:
authorMathieu Arnold <mat@FreeBSD.org>2024-04-12 09:49:01 +0200
committerMathieu Arnold <mat@FreeBSD.org>2024-04-12 09:53:27 +0200
commit06601897e5cd4afcc31f3b508b2cbb2bc7d4a677 (patch)
tree3259d87f8917ed6425fc748d14a105d574367983 /Mk
parentlang/yap: fix build with clang 18 (diff)
framework: reintroduce the feature enabling code
For each feature (see in Mk/Features) users can now set these variables in their make.conf. Using LTO as an example. To enable globally: WITH_LTO= yes To disable globally (for example ssp is enabled by default): WITHOUT_LTO= yes To enable for a specific list of ports: WITH_LTO_PORTS= lang/perl5.36 To disable for a specific list of ports: WITHOUT_LTO_PORTS= lang/perl5.36 Differential Revision: https://reviews.freebsd.org/D44750
Diffstat (limited to 'Mk')
-rw-r--r--Mk/Uses/cargo.mk4
-rw-r--r--Mk/bsd.port.mk42
2 files changed, 35 insertions, 11 deletions
diff --git a/Mk/Uses/cargo.mk b/Mk/Uses/cargo.mk
index e3b733d35821..8710374e3584 100644
--- a/Mk/Uses/cargo.mk
+++ b/Mk/Uses/cargo.mk
@@ -139,10 +139,8 @@ CARGO_ENV+= \
CARGO_ENV+= RUST_BACKTRACE=1
. endif
-. if !defined(_WITHOUT_LTO) && (!defined(WITHOUT_LTO_PORTS) || ${WITHOUT_LTO_PORTS:N${PKGORIGIN}})
+. if defined(WITH_LTO)
_CARGO_MSG= "===> Additional optimization to port applied"
-_WITH_LTO= yes
-.undef _WITHOUT_LTO
. endif
# Adjust -C target-cpu if -march/-mcpu is set by bsd.cpu.mk
diff --git a/Mk/bsd.port.mk b/Mk/bsd.port.mk
index a0cde979317e..f396d4ee4eec 100644
--- a/Mk/bsd.port.mk
+++ b/Mk/bsd.port.mk
@@ -1324,19 +1324,45 @@ LDCONFIG32_DIR= libdata/ldconfig32
TMPDIR?= /tmp
. endif # defined(PACKAGE_BUILDING)
+# If user specified WITH_FEATURE=yes for a feature that is disabled by default
+# treat it as enabled by default
+. for feature in ${_LIST_OF_WITH_FEATURES}
+. if ${_DEFAULT_WITH_FEATURES:N${feature}} && defined(WITH_${feature:tu})
+_DEFAULT_WITH_FEATURES+= ${feature}
+. endif
+. endfor
+
+. for feature in ${_LIST_OF_WITH_FEATURES}
+# Create _{WITH,WITHOUT}_FEATURE vars based on user-provided {WITH,WITHOUT}_FEATURE
+# Test WITHOUT_* first to make sure a port can disable the feature
+. if defined(WITHOUT_${feature:tu})
+_WITHOUT_${feature:tu}= ${WITHOUT_${feature:tu}}
+. elif defined(WITH_${feature:tu})
+_WITH_${feature:tu}= ${WITH_${feature:tu}}
+. endif
# For each Feature we support, process the
# WITH_FEATURE_PORTS and WITHOUT_FEATURE_PORTS variables
-. for feature in ${_LIST_OF_WITH_FEATURES}
. if ${_DEFAULT_WITH_FEATURES:M${feature}}
-_WITH_OR_WITHOUT= WITHOUT
+. if defined(WITHOUT_${feature:tu}_PORTS) && ${WITHOUT_${feature:tu}_PORTS:M${PKGORIGIN}}
+_WITHOUT_${feature:tu}= yes
+.undef _WITH_${feature:tu}
+. endif
. else
-_WITH_OR_WITHOUT= WITH
+. if defined(WITH_${feature:tu}_PORTS) && ${WITH_${feature:tu}_PORTS:M${PKGORIGIN}}
+_WITH_${feature:tu}= yes
+.undef _WITHOUT_${feature:tu}
+. endif
. endif
+. endfor
-. if defined(${_WITH_OR_WITHOUT}_${feature:tu}_PORTS)
-. if ${${_WITH_OR_WITHOUT}_${feature:tu}_PORTS:M${PKGORIGIN}}
-${_WITH_OR_WITHOUT}_${feature:tu}= yes
-. endif
+# Now we made sure the features are either on or off, let's put them back in
+# the WITH_* variable. From now on, we only need to test defined(WITH_*) or
+# !defined(WITH_*)
+. for feature in ${_LIST_OF_WITH_FEATURES}
+. if defined(_WITH_${feature:tu})
+WITH_${feature:tu}= _WITH_${feature:tu}
+. else
+.undef WITH_${feature:tu}
. endif
. endfor
@@ -1800,7 +1826,7 @@ CFLAGS:= ${CFLAGS:C/${_CPUCFLAGS}//}
. endif
. for f in ${_LIST_OF_WITH_FEATURES}
-. if defined(WITH_${f:tu}) || ( ${_DEFAULT_WITH_FEATURES:M${f}} && !defined(WITHOUT_${f:tu}) )
+. if defined(WITH_${f:tu})
.include "${PORTSDIR}/Mk/Features/$f.mk"
. endif
. endfor