|(require xiden/package)||package: xiden|
description : string? tags : (listof non-empty-string?) url : url-string? provider : non-empty-string? name : non-empty-string? edition : non-empty-string? revision-number : revision-number? revision-names : (listof non-empty-string?) os-support : (listof symbol?) racket-versions : (listof (list/c non-empty-string?)) metadata : (hash/c symbol? string?) inputs : (listof input-info?) output-names : (listof non-empty-string?) build : (-> non-empty-string? (logged/c void?))
description is a human-readable summary of the package’s purpose.
tags is a list of human-readable topics used for discovery.
url is the primary, or canonical URL used to guide a user towards more information (as opposed to secondary URLs that may appear in metadata).
provider is the name of the allegedly responsible distributor.
name is the name of the package.
os-support is a list of possible values from (system-type 'os). If (system-type 'os) is not an element of os-support, then either calls to build will fail, or the software created with build will not function.
racket-versions is a list of Racket version ranges that should be interpreted as a set of supported Racket versions. If (version) is not an element of any version interval, then assume that the software created with build will not function with the running version of Racket.
metadata is a hash table of user-defined metadata. In the event entries of this table appear redundant with other structure fields, prefer the values in the structure fields.
inputs is a list of package inputs.
output-names is a list of defined package outputs.
build procedures created using xiden/pkgdef are always surjective, but might not be injective.
Xiden will not verify if build procedures are bijective. If build is not bijective, then build’s relationship with the host system varies slightly. If build is not injective, then it may create redundant data on disk because Xiden assumes that different output names imply different file distributions. If build is not surjective, then a logged procedure might be inaccessible. This can happen if a package instance is manually created with faulty data. Bijective build procedures do not have these problems.
If link-path is #f, then the name of the symbolic link will match the name of the package.
The logged procedure is not atomic, so failure may result in a broken intermediate state on disk. This procedure should be used in the context of a transaction to avoid this problem.
(struct $package:log $package (query output-name messages) #:prefab) query : package-query? output-name : string? messages : messy-log/c
(struct $package:unsupported-racket-version $package (versions) #:prefab) versions : racket-version-ranges/c
(struct $package:unavailable-output $package (available) #:prefab) available : (listof string?)