A comparison of features between pkgconf 1.0, 1.1 and pkg-config 0.29.1 and its latest development version. I have tried to be as objective as possible, but it should be disclosed that I am obviously the developer of pkgconf and not pkg-config, so I may be biased in what is compared.
Future directions could include additionally comparing against OpenBSD's implementation and other alternative implementations.
For completeness, a copy of pkg-config compiled without the --with-internal-glib flag is provided, but this is not a typical deployment of freedesktop.org's pkg-config as it creates a circular dependency.
| pkgconf 1.0.2 | pkgconf 1.1.0 | pkg-config 0.29.1 | pkg-configgit | pkg-configgit(system glib) | |
|---|---|---|---|---|---|
| License | ISC-like | GPLv2 | |||
| Complete binary set size (.text) | 42 kB | 58 kB | 564 kB | 568 kB | 39 kB |
| Dependencies | none | bundled glib-2.0 | glib-2.0 | ||
| Lines of code compiled | 4,597 | 6,210 | 192,111 | 193,178 | 3,642 |
| Dependency resolution algorithm | acyclic graph traversal (cycles broken at build time) | linear search | blind traversal with hashtable of visited nodes (for cycle breaking) | ||
| Fragment/flag merging algorithm | merge-front or merge-back depending on fragment type | multi-merge for some fragment types only | |||
--cflags options are stackable | yes, preserves fragment order | yes, fragments reordered arbitrarily | |||
--libs options are stackable | yes, preserves fragment order | yes, fragments reordered arbitrarily | |||
| CLI options effect fragment ordering | no | yes | |||
Intelligent PKG_CONFIG_SYSROOT_DIR handling | yes | blindly appends path to $(prefix) | |||
Loads .pc files in search directories | when needed | all files | when needed | ||
| Deduplicates search directories | no | by path name and dnode+inode | no | ||
| Resolver supports: | |||||
Conflicts rules | yes | ||||
Requires rules | yes | ||||
Requires.private rules | yes | ||||
Provides rules | partial | yes | partial | ||
CFLAGS.private entries | yes | no | |||
--static --pure mode | no | yes | no | ||