I haven't checked the dev list, but I'm sure this topic must have been 
discussed before.  So, apologies ... but, maybe it's time to re-discuss anyway?

The variant +universal seems to have a special status among variants: If 
+universal is specified for building then 'port' will check all dependencies to 
make sure they are already installed as +universal (or cannot be) and if not 
try to upgrade them to be so; 'port' will print an error message if it cannot 
accomplish this task.  This check / upgrade works quite well for this specific 
variant, and so I'm wondering if it can also be applied to other variants such 
as +debug, +x11, +quartz, and so forth.

For example: If I have nothing already installed (except 'port') and do "sudo 
port install gtk2 +quartz" then 'port' will go off and try to apply the +quartz 
variant to all dependencies -- those that can use it will do so; those that 
cannot will ignore it.  But after all of the dependencies are installed, if I 
do "sudo port install gtk2 +x11" then 'port' does not go back and try to 
reinstall the dependencies with the +x11 variant.  Instead it either (1) 
requires the Portfile to manually check to make sure the installed variant is 
correct & if not then tell the user; and/or (2) tries to build the port and 
will in general eventually generate an error since the correct dependency 
variant isn't installed.  Portfiles that come to mind that do this to some 
degree include libglade2, gtk2, pango, and cairo.

For Qt4, in the PortGroup I put in a manual check for the +debug variant, which 
covers just Qt4 itself.  So, for example, amarok would want to not just check 
Qt4 (which it does automatically via the qt4 PortGroup), but ideally it would 
also check kdelibs4, phonon, and a bunch of others.  One could come up with a 
PortGroup for doing such checking (for example: create a list of variants to 
check for, with each one containing a list of {the dependency port name and a 
file specific to this port and variant} to check) -- but that's what 
"depends_FOO" provides info for to a first order & hence it seems silly to 
duplicate the information that's already there (IIUC sort of like what 
"archcheck" did, but then deprecated because it was incorporated into 
"universal").

It seems to me that changing all variants to use the same behavior as is done 
by +universal makes sense (there could also be an opt-out keyword for ports 
that just want a unique variant that does not propagate to other ports), even 
if it would require "standardizing" what a variant means.  I'm wondering if 
this behavior is desirable to other developers ... - MLD
_______________________________________________
macports-dev mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macports-dev

Reply via email to