A library and command line interface for the parsing, linting and writing of SRCINFO files used in Arch Linux Package Management (ALPM).
SRCINFO files describe a PKGBUILD file in a way that doesn't require an interactive shell to evaluate it.
- 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
The following command takes a .SRCINFO file and outputs the merged and compiled details of all (split-)packages for a specific architecture as structured data.
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"The following command takes a PKGBUILD file and outputs a .SRCINFO from the extracted metadata.
alpm-srcinfo create "$PKGBUILD_IN" > "$SRCINFO_OUT"use alpm_srcinfo::{SourceInfoV1, MergedPackage};
use alpm_types::{SystemArchitecture, 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
"#;
// Parse the file. This errors if the file cannot be parsed, is missing data or contains invalid data.
let source_info = SourceInfoV1::from_string(source_info_data)?;
// Get all merged package representations for the x86_64 architecture.
let mut packages: Vec<MergedPackage> = source_info.packages_for_architecture(SystemArchitecture::X86_64).collect();
let package = packages.remove(0);
assert_eq!(package.name, Name::new("example")?);
assert_eq!(package.architecture, SystemArchitecture::X86_64.into());
assert_eq!(package.dependencies, vec![
PackageRelation::new(Name::new("glibc")?, None),
PackageRelation::new(Name::new("gcc-libs")?, None)
]);
# Ok(())
# }cliadds dependencies required for thealpm-srcinfocommand line interface._winnow-debugenables thewinnow/debugfeature, which shows the exact parsing process of winnow.
Please refer to the contribution guidelines to learn how to contribute to this project.
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.