On 05/29/14 23:21, Ian Stakenvicius wrote:
Sorry for the possible HTML email, this is from my phone..


On May 29, 2014, at 10:20 PM, Duncan <1i5t5.dun...@cox.net> wrote:

Anthony G. Basile posted on Thu, 29 May 2014 13:42:01 -0400 as excerpted:

With the number of ssl providers growing, like libressl, and with issues
like bug #510974, I think its time we consider making this a uniform way
of dealing with ssl providers in gentoo.  We would proceed something
like this:

1. Introduce a new USE_EXPAND called SSL which mirrors CURL_SSL ---
becuase CURL_SSL is too provincial a name.

2. migrate curl and all its dependencies to the SSL use expand.

3. Migrate over all consumers of ssl to the new SSL use expand system.

What do  people think?
What about an ssl.eclass to handle it?

Obviously Peter's concern about packages that only support some of the
options would need to be taken into account, with some sort of variable,
say SSL_SUPPORTED, that would be set before eclass inheritance.  Then the
eclass could formalize the general dependency logic and expose variables
of its own that could in turn be used to set package specific options.

Or is package handling too individualized for an eclass to work well,
even with a mechanism to tell the eclass which ssl providers were
supported and further mechanisms to allow package specific logic where
required?
USE_EXPAND generally works or is meant to work when all participating ebuilds 
are ok with working from the exact same set of flags.

Not at all. There are a several counter examples but one particularly close to what I'm proposing is LINGUAS. Look at how it is used in postgresql-base:

LINGUAS="af cs de en es fa fr hr hu it ko nb pl pt_BR ro ru sk sl sv tr zh_CN zh_TW"

for lingua in ${LINGUAS} ; do
    IUSE+=" linguas_${lingua}"
done

Only a few of the 251 linguas listed in profiles/desc/linguas.desc are used.

Other uses of USE_EXPAND span the spectrum and do not fit neatly into "all participating ebuilds are ok with working from the exact same set of flags." Take a look at ELIBC where most ebuilds that invoke any elibc_* just make use of one or another elibc_* for some exceptional sitatuation, usually related to elibc_FreeBSD or elibc_uclibc. Most of these package would not even build under, for example, elibc_Winnt. Yet other USE_EXPANDS are localized in the tree like XTABLES_ADDONS which is only used in net-firewall/xtables-addons and little possibility of generalization to other packages.

I don't know what you mean by "working" in "working from the exact same set of flags" but there are lots of examples where ebuild simply ignore a portion of all the possible use flags in the USE_EXPAND set because they can't/don't use them. The idea I have of a USE_EXPAND is a namespace of use flags which, like any plain global use flag, can be shared between several ebuilds. Not that all of the use flags in that namespace need to be useable by every participating ebuild, but the namespace is meaningful to every participating ebuild. All ebuilds that provide an ssl layer can participate in the SSL use_expand even though a package might only build against some subset of the ssl providers listed in the USE_EXPAND.

The only case I can think of otherwise right now is PYTHON_TARGETS, and even 
then it is generally considered that all packages can support at least a small 
subset of the flags.  Even then, we have a second var (PYTHON_SINGLE_TARGET) 
for special case packages.

If that is the case here, we should be ok with a similar concept as that 
brought by python-r1.eclass.  However I fear that packages are still going to 
need to have fallback logic or preference-based flag ordering if we are going 
to avoid the need for a bunch of package.use entries on end user systems.

Fallback logic would have to be on a per ebuild basis. It makes no sense otherwise. Eg. There is no preferred ssl provider for curl and USE=ssl there simply means "curl will have an ssl layer" without prejudice as to the backend that will provide that ssl layer.


Or is the plan to essentially do that anyways, ie, expect the SSL use_expand to 
only set one global default, and any deviations from that would be taken care 
of via package.use entries?

No.  What's wrong with

REQUIRED_USE="
    ssl? (
        ^^ (
            curl_ssl_axtls
            curl_ssl_cyassl
            curl_ssl_gnutls
            curl_ssl_openssl
            curl_ssl_nss
            curl_ssl_polarssl
            curl_ssl_winssl
        )
    )"


I don't suppose PMS allows the order of the list of flags in a var to be relied 
upon?  That could make this easier:

SSL="polarssl openssl"

... would use polarssl first and foremost but use OpenSSL iff polarssl isn't 
supported by the package (assuming OpenSSL is); the eclass would handle the 
preference logic that would make the secondary flags be ignored in favour of 
the primary one.

Thoughts?


--
Duncan - List replies preferred.   No HTML msgs.
"Every nonfree program has a lord, a master --
and if you use the program, he is your master."  Richard Stallman




--
Anthony G. Basile, Ph.D.
Gentoo Linux Developer [Hardened]
E-Mail    : bluen...@gentoo.org
GnuPG FP  : 1FED FAD9 D82C 52A5 3BAB  DC79 9384 FA6E F52D 4BBA
GnuPG ID  : F52D4BBA


Reply via email to