Crates.io | alpm-srcinfo |
lib.rs | alpm-srcinfo |
version | 0.3.0 |
created_at | 2025-02-28 18:35:55.789419+00 |
updated_at | 2025-07-24 15:13:25.488276+00 |
description | Library and command line tool for the specification and parsing of ALPM .SRCINFO files |
homepage | https://alpm.archlinux.page |
repository | https://gitlab.archlinux.org/archlinux/alpm/alpm |
max_upload_size | |
id | 1573060 |
size | 424,890 |
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.
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::{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
"#;
// Parse the file. This might already error if the file cannot be parsed.
let source_info_result = SourceInfoV1::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)
]);
# Ok(())
# }
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.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.