[Pkg-rust-maintainers] Auto-detecting -dev package dependences from pkg-config

Josh Triplett josh at joshtriplett.org
Mon Dec 12 05:48:17 UTC 2016


[Please CC me on replies.]

dpkg-shlibdeps automatically generates Depends on library packages
corresponding to any libraries pulled in by the linker for the binaries
in a package.  However, library -dev packages still have to manually
specify Depends on -dev packages that they require.  In many cases, we
could infer this information from pkg-config dependencies: if a library
-dev package ships a pkg-config file, and that file includes Requires
pointing to other pkg-config files, we could infer Depends on the
packages shipping those other pkg-config files.

I'd like to build some tools (possibly including a dh_pkgconfig) to do
this automatically; those tools could generate a pkgconfig:Depends
substvar for use in debian/control.  Before starting on those tools, I'd
like to get some feedback on this idea.

For me, this problem came up while working on Debian packaging for Rust
libraries.  I needed a solution to handle Rust libraries that provide
FFI wrappers for C libraries, and need Depends on the corresponding -dev
packages.  I can currently autogenerate all the packaging for Rust
packages, and I'd like to handle this case automatically as well.

Most Rust libraries use pkg-config to find the C libraries they depend
on.  I have some work in progress to make those pkg-config dependencies
programmatically parseable.  In the course of doing so, I realized that
the same work could simplify the Depends of C library -dev packages as
well.

Assume we can parse a list of pkg-config (name, minimum version) pairs
from a package.  This would ideally come from declarative metadata,
though I can also think of multiple ways to obtain it from more
programmatic sources.

Given such a list, dh_pkgconfig could find all the corresponding
pkg-config files, and add a substvar containing the corresponding
Depends.  For each version requirement, dh_pkgconfig would turn that
into a versioned Depends on the corresponding -dev package.  (Insert
some handwaving here about how to generate a Debian version from a
pkg-config version.  In 99% of cases ">= version" will work; in the
other 1% of cases, -dev packages could provide some kind of mapping
expression.)

Does this seem like a reasonable approach?

- Josh Triplett



More information about the Pkg-rust-maintainers mailing list