Skip to content
This repository

an API-driven pkg-config replacement

Merge pull request #62 from vbraun/master

Do not hardcode "install"
latest commit 1f1feb0022
William Pitcock kaniini authored March 23, 2014
Octocat-spinner-32 scripts Add makerelease. July 25, 2011
Octocat-spinner-32 tests tests: add test for variable case-sensitivity (ref #60) February 10, 2014
Octocat-spinner-32 .gitattributes Add .gitattributes file to force dos-lineendings.pc to match CRLF sty… May 04, 2012
Octocat-spinner-32 .gitignore buildsys: add support for building a profiled executable March 01, 2013
Octocat-spinner-32 AUTHORS Update AUTHORS based on git history. July 25, 2012
Octocat-spinner-32 COPYING Extend copyright on recently modified files to 2014. December 27, 2013
Octocat-spinner-32 Do not hardcode the non-posix install program February 28, 2014
Octocat-spinner-32 README: document --with-system-includedir and --with-system-libdir (c… October 06, 2013
Octocat-spinner-32 argvsplit.c Keep the backslash when parsing arguments (fixes #35) August 14, 2012
Octocat-spinner-32 buildsys: remove old vestiges of old build system August 10, 2012
Octocat-spinner-32 bsdstubs.c everything: more friendly warranty disclaimer July 20, 2012
Octocat-spinner-32 bsdstubs.h everything: more friendly warranty disclaimer July 20, 2012
Octocat-spinner-32 cache.c cache: handle pkg being NULL on pkg_cache_add()/pkg_cache_remove() March 15, 2013
Octocat-spinner-32 config.guess Add config.sub and config.guess. July 24, 2011
Octocat-spinner-32 config.sub Add config.sub and config.guess. July 24, 2011
Octocat-spinner-32 pkgconf 0.9.5. February 11, 2014
Octocat-spinner-32 dependency.c dependency: reset parser state on new package atom March 15, 2013
Octocat-spinner-32 fileio.c do not keep the quote information when set once August 14, 2012
Octocat-spinner-32 fragment.c Extend copyright on recently modified files to 2014. December 27, 2013
Octocat-spinner-32 getopt_long.c getopt: document what is different about our getopt verses normal net… July 22, 2013
Octocat-spinner-32 getopt_long.h getopt_long: more fixing July 20, 2012
Octocat-spinner-32 install-sh make install-sh executable February 28, 2014
Octocat-spinner-32 iter.h queue: refactor to use pkg_list_t framework March 01, 2013
Octocat-spinner-32 main.c fix keep-system-* arg parsing and test with default prefix August 24, 2013
Octocat-spinner-32 pkg.c pkg: make fields other than CFLAGS and LIBS case-sensitive (closes #60) February 10, 2014
Octocat-spinner-32 pkg.h fragment: use forward-merge for static linking (closes #51) August 23, 2013
Octocat-spinner-32 pkg.m4 Include PKG_CHECK_VAR macro for reading variables in .pc files February 24, 2013
Octocat-spinner-32 pkgconf.1 Add pkgconf(1) manual page. (closes #55) December 27, 2013
Octocat-spinner-32 queue.c dependency: refactor to use pkg_list_t framework March 01, 2013
Octocat-spinner-32 stdinc.h Nuke use of basename/dirname where a simple strrchr can do the trick August 14, 2012
Octocat-spinner-32 tuple.c tuple: make variable lookup case sensitive (ref #60) February 10, 2014


pkgconf provides compiler and linker configuration for development frameworks.

general summary

pkgconf is a program which helps to configure compiler and linker flags for development frameworks. It is similar to pkg-config, but was written from scratch in the summer of 2011 to replace pkg-config, which now needs itself to build itself (or you can set a bunch of environment variables, both are pretty ugly).

Implementations of pkg-config, such as pkgconf, are typically used with the PKG_CHECK_MODULES autoconf macro. As far as I (nenolod) know, pkgconf is compatible with all known variations of this macro. pkgconf detects at runtime whether or not it was started as 'pkg-config', and if so, attempts to set program options such that its behaviour is similar.

In terms of the autoconf macro, it is possible to specify the PKG_CONFIG environment variable, so that you can test pkgconf without overwriting your pkg-config binary. (hint: export PKG_CONFIG=/usr/bin/pkgconf) However, if you do this, it will be running in native mode, so you may have some very strange results as the dependency graph is compiled differently in native mode.

technical design (why pkgconf is better for distros)

pkgconf builds an acyclic directed dependency graph. This allows for the user to more conservatively link their binaries -- which may be helpful in some environments, such as when prelink(1) is being used. As a result of building a directed dependency graph designed for the specific problem domain provided by the user, more accurate dependencies can be determined. pkg-config, on the other hand builds a database of all known pkg-config files on the system before attempting to resolve dependencies, which is a considerably slower and less efficient design.

pkgconf also does not bundle any third-party libraries or depend on any third-party libraries, making it a great tool for embedded systems and distributions with security concerns.


pkgconf is basically compiled the same way any other autotools-based project is compiled:

$ ./configure
$ make
$ sudo make install

If you are installing pkgconf into a custom prefix, such as /opt/pkgconf, you will likely want to define the default system includedir and libdir for your toolchain. To do this, use the --with-system-includedir and --with-system-libdir configure flags like so:

$ ./configure \
     --prefix=/opt/pkgconf \
     --with-system-libdir=/lib:/usr/lib \
$ make
$ sudo make install

If you want pkgconf to be used when you invoke pkg-config, you should install a symlink for this. We do not do this for you, as we believe it is better for vendors to make this determination themselves.

$ ln -sf /usr/bin/pkgconf /usr/bin/pkg-config

release tarballs

Release tarballs are available at

reporting bugs


Something went wrong with that request. Please try again.