Attributes are like SHELL environments attached to each package. Any string can be set to any value. One example here is an ATTRIBUTE used by VIM which can be build with or without X. A record:


would mean that this version of VIM was build without X support.

Other packages can depend on vim being compiled with or without X now. Lets say we have a VIM-ADDON package that needs vim in X mode. It would have the following dependency:


This means that VIM-ADDON needs VIM to be build with X support in order to function. uPM can evaluate the situation and can rebuild VIM now with the right attributes so that VIM-ADDON will work properly.

Default values for Attributes can be set in /etc/upm/defaults. A setting of X=NO in there could have caused the building of VIM without X support.

The version number is simply another attribute of a package and it can be checked the same way. Lets say a package depends on version 7 or greater of VIM and on VIM having X support

iR DEPEND VIM version>7 & X=YES


Attributes can be marked for inheritance. This means that the package being build and having a dependency on this package will get an A setting generated. This can be used to track which tools werre used to build which package. Lets say GCC has the following record:


which will cause a record


to be included in VIM when it is build using GCC 3.2. This can be used to track all packages build with special tools and require an upgrade of all packages build by certain tools. uPM can insure that all binaries on the system were build with the current installed set of tools.

Compiler Settings

Settings for GCC and G++ are specialy handled throught the following attributes generated upon building of a package:
Gcc -O option value.
Gcc -mcpu option value.
Gcc -march option value.
Gcc -mmx YES/NO value
Other Gcc option
uPM can force the rebuilding of all packages compiled with different options than currently set in /etc/upm/defaults. Attributes can also be preset to override settings for a certain package. Compiler attributes can also be specified as part of a dependency. Then those restrictions might force the rebuilding of a package with those specifications.