tech-pkg archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: multi-variant packages and bulk builds



 >> 1) category/package/Makefile:
 >>    ...
 >>    PKGNAME=general-package-name${OPTIONS_SUFX}-version
 >>    ...
 >>
 >> 2) somewhere in pkgsrc .mk files
 >>    .if defined(GENERATE_ALL_OPTIONS_PKGS) && defined(PKG_SUPPORTED_OPTIONS)
 >>        VARIANTS+= ...
 >>        # VARIANTS should look like OPTIONS.name1=0,1 OPTIONS.name2=0,1 ...
 >>        # 0 means "feature is disabled", 1 - "enabled"
 >>    .endif
 >>
 >> 3) .for opt in ${PKG_SUPPORTED_OPTIONS}
 >>       .if ${OPTIONS.${opt}} = 1
 >>           OPTIONS_SUFX += -${f} # string concatenation here, not +=
 >>       .endif
 >>    .endfor
 >>

> How do you plan to organize the resulting binary packages for all
> possible combinations of options?

When you say "to organize" you mean dependancies between
packages having options?

First of all, all options should be splitted into two categories.

Category 1: options with GLOBALLY THE SAME SEMANTICS,
   that is option with the same semantics for ALL packages.

   For example, disabling -x11 option should ALWAYS mean
   "no X support at all", and disabling -ssl option should ALWAYS
   mean "no ssl support at all" for ALL packages.

Category 2: options meaning different things for different packages.
   Solutions:
    a) avoid options of this category at all. That is, all package-specific
       options MUST have a uniq name.
    b) mark such options somehow and use this marker.

After this, I presume dependancies can be set relatively easily.
If, say, package A depends on package B and both they have option, e.g. x11,
then binary package A-version%x11.tgz depends on  B-version%x11.tgz
and package A-version%nox11.tgz depends on B-version%nox11.tgz.
In this example I assume that option x11 is of "category 1".
Here % is a char-separator between "old plain PKGNAME" and options part.

-- 
Best regards, Aleksey Cheusov.


Home | Main Index | Thread Index | Old Index