Documenting release type
In package.xml 1.0, there was one release type. package.xml 2.0 provides much finer
control over the kind of release in order to provide three new release types: extension
binary release, extension source release, and package bundle release.
All of the normal release tags (phprelease, extsrcrelease, extbinrelease) may contain
two optional sections, <installconditions> and <filelist>. The purpose of these
sections is to allow specification of different file install groups based on the target OS
for installation, or other common install conditions.
To be clear: in package.xml, there was 1 <release> tag. package.xml 2.0 allows
several adjacent release tags, each specifying a different install set. This actually
simplifies complex installation filesets by separating the contents listing of the tarball
from how the installer should manipulate this listing. Debugging installation file sets
should be much simpler with this change.
The <filelist> tag can contain only two possible tags, <install> and <ignore>.
install has two required attributes, "name" and "as". The install tag is used
in the same manner as package.xml's install-as attribute for the <file>, to specify a new
installation location for a file in the contents list. The ignore tag is used to completely
ignore a file.
The <installconditions> tag can contain 4 tags whose format can be found in the
<dependencies> section: <php>, <extension>, <os>, and <arch>.
Each tag can appear exactly once except for the extension tag, which can appear limitless times.
The php tag is used to specify a php version or range of versions that an install set should
be valid with.
The extension tag is used to specify extensions that must be present for an install set to
be valid.
The os tag is used to specify an OS that must be present for an install set to be valid. Note
that unix can be used to match all flavors, and linux can be used to match all linux-based OSes.
Darwin should be used for Mac OS X, and * can be used to match all operating systems.
The arch tag is used to specify a uname string or portion of a uname string that must match
in order for the install set to be valid.
<phprelease>
The phprelease release type is designed for PEAR-style PHP script package releases.
It causes a few specific validation changes. First of all,
the <contents> tag must
contain <file> and <dir> tags. The only valid roles for files are role="php",
role="data", role="doc", and role="test" plus any custom roles
that the user has installed for use in php releases.
<extsrcrelease>
The extsrcrelease release type is for PECL-style PHP extension releases that must be compiled
in order to be useable. It causes a few specific validation changes. First of all,
the <contents> tag must
contain <file> and <dir> tags. The only valid roles for files are role="src",
role="data", role="doc", and role="test" plus any custom roles
that the user has installed for use in extension source releases.
In addition, the <providesextension> tag must be present in order to document the name of
the extension this package provides must be in the package.xml as well.
<extbinrelease>
The extbinrelease release type is for PECL-style PHP Extension binary releases that are pre-compiled.
It causes a few specific validation changes. First of all,
the <contents> tag must
contain <file> and <dir> tags. The only valid roles for files are role="ext",
role="data", role="doc", and role="test" plus any custom roles
that the user has installed for use in extension binary releases.
In addition, the <srcpackage> or <srcuri> and the <providesextension> tags
must be present in order to document the package that provides extension source for this
binary release, and the name of the extension this package provides must be in the package.xml as
well.
<bundle>
The bundle release type is designed to allow packaging several other package releases into a
single bundle of packages that will all be installed at the same time. This can be used to
distribute a complete application as one tarball, or to distribute a library of packages in a
single tarball.
Unlike the other release types, a bundle release's
<contents> tag must contain
only the <bundledpackage> tag. The contents of the bundledpackage should be release names
like "Foo-1.2.3.tgz"
In addition, the <bundle/> tag must be empty.