I was originally looking at something like this and I have thought a lot 
about it, one of the main reasons to use xml for a new format was the 
necessary complexity.

On Friday, January 18, 2002, at 02:48 , Max Horn wrote:

> So, regardless which format we choose, we want to support package 
> variants. The question is, how to do it best.
>
> There are multiple ways to go at it:
>
> 1) Have variants like we have now, with explicit names:
>  * a "default" variant

I would suggest something like:

<package name="foo" version="1.0.1" revision="1">
        <depends/>
        <compilescript/>
        ...
        <variant name="ssl">
                <depends/>
                <compilescript type="replace">
                </compilescript>
                ...
        </variant>
        <variant name="x">
                <depends/>
                <compilescript type="diff">
                </compilescript>
                ...
        </variant>
</package>

>  * a "ssl" variant
>  * a "nox" variant
>  * a "ssl-nox" variant
>

Instead use variant x, and have the default no x, no ssl, etc.

> 2) Allow "options" that can be combined at will:
>  * the base settings, no options
>  * "ssl" - will enable ssl support
>  * "nox" - will build without X11
>  * "nognome" - will build without
>

Like above, I recommend that we ask the user what they want, then 
specifically enable features, like variants of x, gnome, ssl.

>
> 1) obviously has the drawback that if you have 4 options to toggle, you 
> have to list 16 varianst - ouch
>
> 2) is far more flexible, but what if we have options that contradict 
> each other somehow? We'd need a way to specify that a certain option 
> can't go with another one.

<require type="conflicts" package="" variant="x"> for a variant in the 
same package
<require type="conflicts" package="bar" variant="x"> for a variant in a 
different package

>
> Also, for 2), I don#t like to much the "nox" and "nognome" thingy, 
> that's sort of double negation - no I do not want no X-Window support, 
> ouch. So for 2, I'd imagine that we also provide a default set of 
> options, so that could be a list like "DefaultOptions: x, gnome" or so.
>

Not me neither! ;-)

>
> In either case, I also imagine the whole thing to use, to speak in OOP 
> terms, inheritance. What do I mean with this? Let's look at this 
> example (in pseudo code):
>
> Package: foo
> Version: 1.0
> Revision: 1
> ConfigureParams: --with-gargle-blaster
> Depends: bar
> DefaultOption: x11
> Option: ssl
>   ConfigureParams: --with-ssl
>   Depends: openssl
> Option: x11
>   ConfigureParams: --with-x
>   Depends: x11
>
>
> So, in all cases, the "bar" package is a dependency, and the 
> "--with-gargle-blaster" is passsed to configure.
> Now, there is a fundamental problem with this: what if a variant needs 
> to *remove* something from the default set? Ohm, not good. So, why not 
> use an if-else-approcah: Each variant doesn't just specify things for 
> when it is specified, but also a list of things to do when it is not 
> given. Look at this:
>
>
> Package: foo
> Version: 1.0
> Revision: 1
> ConfigureParams: --with-gargle-blaster
> Depends: bar
> DefaultOption: x11
>
> Option: ssl
>   Depends: openssl
> NotOption: ssl
>   ConfigureParams: --without-ssl
>
> Option: x11
>   Depends: x11
> NotOption: x11
>   ConfigureParams: --without-x
>
> Option: gnome
>   ImpliesOption: x11
>   ConfigureParams: --with-panel
>   Depends: gnome
> NotOption: gnome
>   ConfigureParams: --without-gnome

How about instead of ImpliesOption,

<depends>
        <require type="depend" variation="x11"/>
</depends>

>
> NotOption: japanese
>   ConfigureParams: --without-japanese
>
>
> Get what I mean? Note that the option "gnome" implies the option "x11". 
> I am not sure how much sense I make, and there are probably holes in my 
> thoguhts, so feel free to point them out :)
>
>
> Now the next step. How does a user specify options?
> Mabye like configure does:
>   fink install foo --with-gnome --with-japanese
> Or like the current way:
>   fink install foo-gnome-japanese
> Or maybe completly different
>   fink install foo (gnome, japanese)
>

How about this?

fink install foo
Use x11? [y/N] y               # Chose the default based on if 
dependancies are filled.
This will require installation of one of the following
        1) xfree86                         # this is if we decide to merge 
the packages
        2) xfree86-system
        3) xfree86-itools
Which one? (Enter 0 to choose not to install) [1] 1

Use gnome? [y/N] n
Use ssl? [Y/n] y

Installing xfree86...
[snip]

Though for many options, this could get tedious

>
> And how do we map all this to dpkg names? One way would be to take the 
> list of options, sort them alphabetically, and add concat them with the 
> package name using "-".
> So the above examples would result in the .deb for 
> foo-gnome-japanese-x11

I agree, that would work, but the binary dist should only include the 
default variety, although if others were requested a lot, they might be 
added.

>
> What do you guys think? Am I crazy? :)

Not really :-)

However, whatever we do, the variety featureset is going to need a lot 
of new code.

And I AM volunteering to do some of the coding, as long as I don't get 
too deep in over my head.  I'm familiar with advanced OOP, but I'm not 
done figuring out the full Perl syntax yet, so I hope I can help!

>
>
> Max
> -- -----------------------------------------------
> Max Horn
> Software Developer
>
> email: <mailto:[EMAIL PROTECTED]>
> phone: (+49) 6151-494890
>
> _______________________________________________
> Fink-devel mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/fink-devel


_______________________________________________
Fink-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/fink-devel

Reply via email to