Skip to content

Meta

The Meta record carries information about the stone itself or other binary packages, hence the name “meta”. It is composed of a 8 bytes long header-like section, plus a value of variable length. The information it carries is strongly typed.

Some of its fields can only be found in Repository stones, since they are information about packages to download.

FieldTypeSize (bytes)Description
lengthuint4Length, in bytes, of the value that follows the header-like section.
taguint2What information this record carries about the stone.
kinduint1The base type of the information, for proper encoding and decoding.
paddingblob1Unused.
valuebloblengthValue of the information. The encoding depends on the value of kind.

tag is an enum.

ValueNameDescription
1NameName of the stone, which is typically the name of a package to install or remove.
2ArchitectureTarget hardware architecture of the package.
3VersionVersion of the package.
4SummarySuccinct description of a package.
5DescriptionFull length description of the package.
6HomepageWeb homepage of the project being packaged.
7SourceIDID of the source package, used for grouping.
8DependsOne dependency of the package.
9ProvidesOne capability, or the name, of the package. See further paragraphs for details.
10ConflictsOne capability, or name of another package, that conflicts with this package.
11ReleaseRelease number of the package. It differs from Version in that Version identifies a state of the upstream project. Release is an increasing number that relates to the package.
12LicenseOne license under which the upstream project is released, in SPDX format.
13BuildReleaseUniquely identifies a rebuild of a stone. It is an increasing number.
14PackageURIURL relative to the base repository URL, where to download a package from. It is specific to a Repository stone.
15PackageHashSHA-256 hash of a whole package stone. It is specific to a Repository stone.
16PackageSizeSize, in bytes, of a package when installed on disk (assumed when the CAS is empty, thus without de-duplication). It is specific to a Repository stone.
17BuildDependsBuild-time dependency of a package.
18SourceURIUpstream URL for the source archive of a package.
19SourcePathRelative path for the source within the upstream URL.
20SourceRefGit commit or ref of the upstream source.

kind is an enum.

ValueNameDescription
1Int8int, 1 byte long.
2Uint8uint, 1 byte long.
3Int16int, 2 bytes long.
4Uint16uint, 2 bytes long.
5Int32int, 4 bytes long.
6Uint32uint, 4 bytes long.
7Int64int, 8 bytes long.
8Uint64uint, 8 bytes long.
9StringString.
10DependencyPackageReference structure.
11ProviderPackageReference structure.

As explained before, the encoding format of value is explicated by the kind enum. Most of the kinds are a characterization of a base format, but there is one outstanding kind: PackageReference. Below is the format of PackageReference.

FieldTypeSize (bytes)Description
kinduint1Kind of package one depends on, or provides.
namestrlength - 1Value of the reference.

PackageReference’s kind field is an enum.

ValueNameDescription
0PackageNameA package depends on, or provides, a package name.
1SharedLibraryA package depends on, or provides, a shared library (*.so file).
2PkgConfigA package depends on, or provides, a pkg-config target.
3InterpreterA package depends on, or provides, a program interpreter (i.e. an ELF binary with PT_INTERP set).
4CMakeA package depends on, or provides, a CMake target.
5PythonA package depends on, or provides, a Python module.
6BinaryDepA package depends on, or provides, a binary file in /usr/bin.
7SystemBinaryA package depends on, or provides, a binary file in /usr/sbin.
8PkgConfig32Like PkgConfig, but emul32-compatible.