Expand description
§alpm-srcinfo
A library and command line tool for the specification, parsing and linting of Arch Linux Package Management (ALPM) SRCINFO files.
SRCINFO
files describe a PKGBUILD
file in a way that doesn’t require an interactive shell to evaluate it.
§Documentation
- https://alpm.archlinux.page/alpm-srcinfo/ARCHITECTURE.html A high-level overview on how this project works.
- https://alpm.archlinux.page/rustdoc/alpm_srcinfo/ for development version of the crate
- https://docs.rs/alpm-srcinfo/latest/alpm_srcinfo/ for released versions of the crate
§Examples
§Commandline
cat > "$SRCINFO_TEMPFILE" << EOF
pkgbase = example
pkgver = 1.0.0
epoch = 1
pkgrel = 1
pkgdesc = A project that does something
url = https://example.org/
arch = x86_64
depends = glibc
optdepends = python: for special-python-script.py
makedepends = cmake
checkdepends = extra-test-tool
pkgname = example
depends = glibc
depends = gcc-libs
EOF
alpm-srcinfo format-packages "$SRCINFO_TEMPFILE" --architecture x86_64 --pretty > "$SRCINFO_OUTPUT"
§Library
use alpm_srcinfo::{SourceInfo, MergedPackage};
use alpm_types::{Architecture, PackageRelation, Name};
let source_info_data = r#"
pkgbase = example
pkgver = 1.0.0
epoch = 1
pkgrel = 1
pkgdesc = A project that does something
url = https://example.org/
arch = x86_64
depends = glibc
optdepends = python: for special-python-script.py
makedepends = cmake
checkdepends = extra-test-tool
pkgname = example
depends = glibc
depends = gcc-libs
"#;
// Parse the file. This might already error if the file cannot be parsed.
let source_info_result = SourceInfo::from_string(source_info_data)?;
// Make sure there're aren't unrecoverable logic errors, such as missing values.
// Recoverable errors would be lints and deprecation warnings.
let source_info = source_info_result.source_info()?;
// Get all merged package representations for the x86_64 architecture.
let mut packages: Vec<MergedPackage> = source_info.packages_for_architecture(Architecture::X86_64).collect();
let package = packages.remove(0);
assert_eq!(package.name, Name::new("example")?);
assert_eq!(package.architecture, Architecture::X86_64);
assert_eq!(package.dependencies, vec![
PackageRelation::new(Name::new("glibc")?, None),
PackageRelation::new(Name::new("gcc-libs")?, None)
]);
§Features
cli
adds the commandline handling needed for thealmp-srcinfo
binary (enabled by default).winnow-debug
enables thewinnow/debug
feature, which shows the exact parsing process of winnow.
§Contributing
Please refer to the contribution guidelines to learn how to contribute to this project.
§License
This project can be used under the terms of the Apache-2.0 or MIT. Contributions to this project, unless noted otherwise, are automatically licensed under the terms of both of those licenses.
Re-exports§
pub use error::Error;
pub use merged::MergedPackage;
pub use source_info::SourceInfo;
pub use source_info::SourceInfoResult;
pub use source_info::relation::RelationOrSoname;
Modules§
- Commandline argument handling.
- Functions called from the binary.
- All error types that are exposed by this crate.
- Provides fully resolved package metadata derived from SRCINFO data.
- The parser for SRCINFO data.
- Contains the second parsing and linting pass.