New feature : boolean variables and expressions

Stéphane Peter megastep at megastep.org
Wed Mar 29 19:20:49 EST 2006


I have just committed a big patch I have been working on for the past  
couple of days. This new features allows the creation of user-defined  
boolean variables from within installer files, which can be  
referenced with a simple evaluation language to create complex  
conditional expressions.

Basically this allows for very fine-grained control over what files  
get installed. My main motivation for this at first was to have an  
easy way to automatically install GTK 1.x or 2.x binaries. This  
system is advanced enough to make the previous "arch", glibc, etc.  
filters obsolete.

I'll just post here the relevant entry from README.xml :

The BOOL element :

This element allows the user to create some complex expressions to  
guide the
installer. This element allows the user to define boolean conditions,  
the values of
which are defined by arbritrary scripts. These booleans can then be  
used as part
of expressions used by other elements, like FILE or BINARY below, to  
define conditions.

This element must be a direct child of the root INSTALL element.  
Booleans are global
to a particular instance of the installer. Additionally, the  
installer itself defines
a set of standard booleans, as described below.

Booleans are intended to replace the previous filtering mechanisms,  
using "arch", "libc"
and so on attributes, while providing additional flexibility.

Booleans are case sensitive.

The BOOL element takes one mandatory attribute :

   name      The symbolic name for the boolean (variable name). May  
be up to 30 characters
             long, and must start with an alphanumerical character.  
May not contain blank
             spaces.

Additionally, one of the following attributes must be used :

   script    The command to be run to determine the value of the  
boolean. In the UNIX
             tradition, it should return 0 for a TRUE value.

   envvar    The name of an environment variable to query for the  
value of the boolean.
             The value must be a non-zero number to map to be TRUE.  
If the variable is not
             set in the environment, the boolean will likewise be set  
to FALSE.

It also recognizes two optional attributes :

   later     If set to "yes", the script will be executed at the time  
that the condition
             referencing it is evaluated. The default is to run the  
script once immediately
             upon initialization to gather the static value.

   if        Additionally make this boolean dependent on another  
boolean expression. This
             expression can reference any previously defined boolean.  
See below for more details
             about the syntax. If this expression evaluates to FALSE,  
then the script won't be
             run, or the environment queried, and the value will also  
be set to FALSE.

Standard booleans defined by the installer :
- Standard 'true' and 'false' booleans.
- 'is-root' is TRUE if the installer is running as root.
- 'reinstalling' is TRUE if the product is already installed.
- 'bzip2' is TRUE if Bzip2 decompression is available in the installer.
- One boolean corresponding to the selected user interface: gtk1,  
gtk2, carbon, dialog, console
- One boolean for the CPU architecture: x86, ppc, sparc, alpha, etc
- One boolean for the detected libc version: libc5, glibc-2.1, etc.
- One boolean for the distribution / OS name : redhat, suse, aix,  
sco, etc.
- A boolean for the OS name as returned by uname.
- Two booleans representing the detection distribution version (not  
always meaningful) :
    distro-major-<number> and distro-minor-<number>.
= Booleans for the detected locale setting and its encoding, e.g.  
en_US, ISO-8859-1, etc.
- On Linux, 'selinux' indicates whether SELinux is available and  
enabled.
- If RPM support was compiled in, 'rpm-support' is set. If RPM 3.x,  
then 'rpm3-support' is
   also set to TRUE.

For example, on a Redhat Linux 7.3 sytem, the following bools would  
be defined to TRUE :
Linux, x86, redhat, distro-major-7, distro-minor-3

About Boolean Expressions :

Many elements support the 'if' or 'condition' attribute to reference  
complex expressions
using the Setup boolean variables. The expressions have to follow the  
following syntax:

expression := [!]<operator>(<expression1>,<expression2>) |
               [!]<boolean name>

Supported operators are : + (logical "and"), | (logical "or"), and ^  
(logical "exclusive or").
Any expression can be negated by a ! prefix.
An undefined boolean is the same as a false boolean.

Some examples :

Match Fedora on PowerPC system:
    +(fedora,ppc)
Match one of SuSE, Redhat 9 or Fedora, on all but Intel:
   +(^(suse,+(redhat,distro-major-9),fedora),!x86)


--
Stéphane Peter
megastep at megastep.org

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://icculus.org/pipermail/lokisetup/attachments/20060329/fcabaf2d/attachment.htm>


More information about the Lokisetup mailing list