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
  * a "ssl" variant
  * a "nox" variant
  * a "ssl-nox" variant


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 wihtout


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.

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.


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

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)


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


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


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

Reply via email to