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
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::{SourceInfoV1, MergedPackage};
use alpm_types::{Architecture, PackageRelation, Name};
# fn main() -> Result<(), alpm_srcinfo::Error> {
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
"#;
let source_info_result = SourceInfoV1::from_string(source_info_data)?;
let source_info = source_info_result.source_info()?;
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)
]);
# Ok(())
# }
Features
cli adds the commandline handling needed for the alpm-srcinfo binary (enabled by default).
winnow-debug enables the winnow/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.