pkgconfig for human beings

Today, I had to scratch an itch that concerned calling pkg-config from within Python. Imagine that you write an extension module that depends on some external development libraries. First you want to make sure that you build against a version that provides the features you expect and second you have to provide pre-processor directives, compiler flags and library options to build your module. The pkg-config command line tool can be used to query this meta information from its database, at least that’s how it’s done in the manual Makefile and Autotools world. To gather that information in an arbitrary Python script, I wrote a small helper module called pkgconfig.

To fill this empty post with more blurb, I will restate the README here: pkgconfig can be used to check if a package exists

>>> import pkgconfig
>>> pkgconfig.exists('glib-2.0')

check if a package meets certain version requirements

>>> pkgconfig.installed('glib-2.0', '< 2.26')
>>> pkgconfig.installed('glib-2.0', '>=2.26')

and also query the CFLAGS and LDFLAGS for building a dependent module

>>> pkgconfig.cflags('glib-2.0')
'-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include'

>>> pkgconfig.libs('glib-2.0')

The module is licensed under the MIT license, so if you want to use it in your private projects, just dump it there. Suggestions and bug reports should be addressed in the GitHub repo.

PS: I know, it’s the worst project tag line in the history of project tag lines.


This post might also have some comments at Google+.