2015-09-06 14:44:06 +00:00
|
|
|
# pkgconf [![Build Status](https://travis-ci.org/pkgconf/pkgconf.svg?branch=master)](https://travis-ci.org/pkgconf/pkgconf)
|
2011-07-25 07:02:08 +00:00
|
|
|
|
2012-04-30 05:32:49 +00:00
|
|
|
pkgconf provides compiler and linker configuration for development frameworks.
|
|
|
|
|
|
|
|
## general summary
|
2011-07-25 07:02:08 +00:00
|
|
|
|
|
|
|
pkgconf is a program which helps to configure compiler and linker flags for
|
2014-07-09 07:25:01 +00:00
|
|
|
development frameworks.
|
|
|
|
|
|
|
|
It is similar to pkg-config, but was written from scratch in the summer of 2011
|
|
|
|
to replace pkg-config, which for a while needed itself to build itself (they have
|
|
|
|
since included a 'stripped down copy of glib 2.0') Since then we have worked on
|
|
|
|
improving pkg-config for embedded use.
|
|
|
|
|
2015-06-25 13:13:24 +00:00
|
|
|
If you're wondering what pkg-config is useful for, you might find the tutorial/guide
|
|
|
|
docs for [legacy pkg-config][pcdocs] useful.
|
|
|
|
|
|
|
|
[pcdocs]: http://people.freedesktop.org/~dbn/pkg-config-guide.html
|
|
|
|
|
2014-07-09 07:25:01 +00:00
|
|
|
## usage
|
2011-07-25 07:02:08 +00:00
|
|
|
|
2012-08-31 16:35:26 +00:00
|
|
|
Implementations of pkg-config, such as pkgconf, are typically used with the
|
2014-07-09 07:25:01 +00:00
|
|
|
PKG_CHECK_MODULES autoconf macro. As far as we know, pkgconf is
|
2012-07-27 05:03:49 +00:00
|
|
|
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
|
2012-08-31 16:35:26 +00:00
|
|
|
to set program options such that its behaviour is similar.
|
2011-07-25 07:02:08 +00:00
|
|
|
|
|
|
|
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
|
2014-07-09 07:25:01 +00:00
|
|
|
pkg-config binary. Some other build systems may also respect the PKG_CONFIG
|
|
|
|
environment variable.
|
|
|
|
|
|
|
|
To set the enviornment variable on the bourne shell and clones (i.e. bash), you
|
|
|
|
can run:
|
|
|
|
|
|
|
|
$ export PKG_CONFIG=/usr/bin/pkgconf
|
2011-07-25 07:02:08 +00:00
|
|
|
|
2012-05-12 20:47:20 +00:00
|
|
|
## technical design (why pkgconf is better for distros)
|
2011-07-25 07:02:08 +00:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
2012-05-12 20:47:20 +00:00
|
|
|
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.
|
2011-07-25 07:02:08 +00:00
|
|
|
|
2015-07-19 21:26:28 +00:00
|
|
|
## other differences verses pkg-config
|
|
|
|
|
|
|
|
As previously mentioned, pkgconf makes optimizations to the linker flags in both the
|
|
|
|
case of static and shared linking in order to avoid overlinking binaries and also
|
|
|
|
simplifies the `CFLAGS` and `LIBS` output of the pkgconf tool for improved readability.
|
|
|
|
|
|
|
|
This functionality depends on the pkg-config module properly declaring it's dependency
|
|
|
|
tree instead of using `Libs` and `Cflags` fields to directly link against other modules
|
|
|
|
which have pkg-config metadata files installed.
|
|
|
|
|
|
|
|
Doing so is discouraged by the [freedesktop tutorial][fd-tut] anyway.
|
|
|
|
|
|
|
|
[fd-tut]: http://people.freedesktop.org/~dbn/pkg-config-guide.html
|
|
|
|
|
|
|
|
Beyond that, we do not provide bug-level compatibility with pkg-config. What that means
|
|
|
|
is, if you feel that there is a legitimate regression verses pkg-config, do let us know,
|
|
|
|
but also make sure that the .pc files are valid and follow the rules of the
|
|
|
|
[pkg-config tutortial][fd-tut], as most likely fixing them to follow the specified
|
|
|
|
rules will solve the problem.
|
|
|
|
|
2012-04-30 05:32:49 +00:00
|
|
|
## compiling
|
2011-07-25 07:02:08 +00:00
|
|
|
|
2012-04-30 05:32:49 +00:00
|
|
|
pkgconf is basically compiled the same way any other autotools-based project is
|
|
|
|
compiled:
|
2011-07-25 07:02:08 +00:00
|
|
|
|
2012-04-30 05:32:49 +00:00
|
|
|
$ ./configure
|
|
|
|
$ make
|
|
|
|
$ sudo make install
|
2011-07-25 07:02:08 +00:00
|
|
|
|
2013-10-06 12:34:09 +00:00
|
|
|
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 \
|
|
|
|
--with-system-includedir=/usr/include
|
|
|
|
$ 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
|
|
|
|
|
2012-06-06 21:25:29 +00:00
|
|
|
## release tarballs
|
|
|
|
|
2015-05-22 04:41:22 +00:00
|
|
|
Release tarballs are available at <http://rabbit.dereferenced.org/~nenolod/distfiles/>.
|
2012-06-06 21:25:29 +00:00
|
|
|
|
2012-04-30 05:32:49 +00:00
|
|
|
## reporting bugs
|
2011-07-25 07:02:08 +00:00
|
|
|
|
2012-07-27 05:03:49 +00:00
|
|
|
See <https://github.com/pkgconf/pkgconf/issues>.
|
2015-04-20 14:44:41 +00:00
|
|
|
|
|
|
|
Also you can contact us at `#pkgconf` at `irc.freenode.net`.
|