[MacPorts] #38091: alpine @2.00_4: update to 2.11
MacPorts
noreply at macports.org
Tue Feb 24 12:07:05 PST 2015
#38091: alpine @2.00_4: update to 2.11
-----------------------+----------------------
Reporter: larryv@… | Owner: john@…
Type: update | Status: closed
Priority: Normal | Milestone:
Component: ports | Version:
Resolution: fixed | Keywords: haspatch
Port: alpine |
-----------------------+----------------------
Comment (by larryv@…):
Replying to [comment:37 jerryyhom@…]:
> Re: [133173], considering I am new to MP, and I mean no disrespect,
> could you explain why transposing negative variants into positive ones
> is helpful here?
See the final paragraph of PortfileRecipes#default_variants. We want the
act of //enabling// variants to //enable// features, not //disable// them.
An implementation bug was the only reason negative variants were ever
necessary. The vast majority of ports no longer have negative variants;
`alpine` was just neglected until now. Today, the correct way to enable
optional features by default is with the `default_variants` portfile
option.
> From a maintainer's perspective, feels like the changes introduce
> byzantine rules. At first, I thought it was simply double negatives
> to positive, but after hours of scratching my head, it seems more like
> triple negatives to keep the same build behavior? I am losing count,
> is it quadruple negatives? Overall, seems unnecessary and
> obfuscating.
It’s only the transitional code that’s confusing. The logic of positive
variants is actually much //less// confusing than that of negative
variants.
- Since the `without_tcl` variant is deprecated, it should no longer be a
default variant.
{{{
#!diff
--- a/dports/mail/alpine/Portfile
+++ b/dports/mail/alpine/Portfile
@@ -34,5 +34,3 @@
reinplace "s|__PREFIX__|${prefix}|" ${worksrcpath}/imap/Makefile
}
-default_variants +without_tcl
-
}}}
- Without any variants selected, the port should have the minimal possible
set of dependencies.
{{{
#!diff
--- a/dports/mail/alpine/Portfile
+++ b/dports/mail/alpine/Portfile
@@ -39,6 +37,3 @@
-depends_lib port:openssl \
+depends_lib port:gettext \
port:libiconv \
- port:gettext \
- port:openldap \
- port:ncurses \
- port:cyrus-sasl2
+ port:ncurses
}}}
- Some build systems automatically enable optional features if they detect
that the necessary dependencies are present. This is not acceptable to us,
as it makes the builds irreproducible. The port needs to //explicitly
disable// optional features if the variants that enable those optional
features are //not// selected.
{{{
#!diff
--- a/dports/mail/alpine/Portfile
+++ b/dports/mail/alpine/Portfile
@@ -53,11 +48,16 @@ configure.args -with-lib-dir=${prefix}/lib \
--with-ssl-include-dir=${prefix}/include/openssl \
--with-ssl-lib-dir=${prefix}/lib \
--with-local-password-cache-method \
- --with-debug-level=0
+ --with-debug-level=0 \
+ --without-krb5 \
+ --without-ldap \
+ --without-ssl \
+ --without-tcl
variant universal {}
use_parallel_build no
+build.env SSLTYPE=none
build.args CC=${configure.cc} \
EXTRACFLAGS="[get_canonical_archflags cc]" \
EXTRALDFLAGS="[get_canonical_archflags ld]" \
}}}
- We turn the negative variants into dummy variants but keep them around
for migration purposes. We usually give users about a year to upgrade
their ports and switch over; then we remove the old stuff.
{{{
#!diff
--- a/dports/mail/alpine/Portfile
+++ b/dports/mail/alpine/Portfile
@@ -65,21 +65,8 @@
-variant without_krb5 description {Disable Kerberos5 support} {
- depends_lib-delete port:cyrus-sasl2
- configure.args-append --without-krb5
-}
-
-variant without_ldap description {Disable LDAP support} {
- depends_lib-delete port:openldap
- configure.args-append --without-ldap
-}
-
-variant without_ssl description {Disable SSL support} {
- depends_lib-delete port:openssl
- configure.args-append --without-ssl
- build.env-append SSLTYPE=none
-}
-
-variant without_tcl description {Disable TCL support (disables Alpine
Web)} {
- configure.args-append --without-tcl
-}
+# TODO: Remove legacy variants after 2016-02-20.
+
+variant without_krb5 conflicts kerberos description {Legacy variant} {}
+variant without_ldap conflicts ldap description {Legacy variant} {}
+variant without_ssl conflicts ssl description {Legacy variant} {}
+variant without_tcl conflicts tcl description {Legacy variant} {}
}}}
- Users who already have `alpine` installed need to be migrated to the new
variants in a sane way. Ideally, we’d just set `default_variants +kerberos
+ldap +ssl` and be done with it, but that would cause variant conflicts
for users who have `alpine` installed with `+without_krb5`,
`+without_ldap`, or `+without_ssl`. So we only set new default variants if
the user doesn’t already have one of the old ones selected.
{{{
#!div class=""
I know this is confusing. Think about the first conditional. If a user has
`alpine +without_krb5` installed, we don’t want to set `+kerberos` as a
default for them because they’ve already explicitly chosen to forego
Kerberos support. So we only make `+kerberos` a default if they have
//not// set the `without_krb5` variant. The same goes for the rest. (We
have to treat `without_tcl` / `tcl` a little differently because
`+without_tcl` was the previous default.)
The logical contortions one has to endure to reason about negative
variants (“`if {![variant_isset without_ldap]}`”? what?) are actually a
very good argument //against// their use. In any case, you need not worry
about it, as it’s only transitional.
}}}
{{{
#!diff
--- a/dports/mail/alpine/Portfile
+++ b/dports/mail/alpine/Portfile
@@ -86,4 +73,23 @@
+# TODO: Replace this morass after 2016-02-20.
+#default_variants +kerberos +ldap +ssl
+
+if {![variant_isset without_krb5]} {
+ default_variants +kerberos
+}
+if {![variant_isset without_ldap]} {
+ default_variants +ldap
+}
+if {![variant_isset without_ssl]} {
+ default_variants +ssl
+}
+if {![variant_isset tcl]} {
+ default_variants +without_tcl
+}
+if {![variant_isset without_tcl]} {
+ default_variants +tcl
+}
+
variant passfile description {Enable password files support} {
configure.args-delete --with-local-password-cache-method
configure.args-append --with-passfile=".pine.pwd"
}
}}}
- Finally, the positive variants modify the default port configuration to
//enable// the features they control. Unfortunately, Alpine’s build system
disables features using negative options, so we end up having to delete
them to enable the features.
{{{
#!diff
--- a/dports/mail/alpine/Portfile
+++ b/dports/mail/alpine/Portfile
@@ -86,4 +92,25 @@
variant passfile description {Enable password files support} {
configure.args-delete --with-local-password-cache-method
configure.args-append --with-passfile=".pine.pwd"
}
+
+variant kerberos description {Kerberos support} {
+ depends_lib-append port:cyrus-sasl2
+ configure.args-delete --without-krb5
+}
+
+variant ldap description {LDAP support} {
+ depends_lib-append port:openldap
+ configure.args-delete --without-ldap
+}
+
+variant ssl description {OpenSSL support} {
+ depends_lib-append port:openssl
+ configure.args-delete --without-ssl
+ build.env-delete SSLTYPE=none
+}
+
+variant tcl description {Tcl support (required by Alpine Web} {
+ # Should we force MacPorts' Tcl?
+ configure.args-delete --without-tcl
+}
}}}
--
Ticket URL: <https://trac.macports.org/ticket/38091#comment:38>
MacPorts <https://www.macports.org/>
Ports system for OS X
More information about the macports-tickets
mailing list