Acceptance of pkg-config and .pc files

C. Thomas Stover cts at thomasstover.com
Tue Feb 25 09:12:02 PST 2014


On Sun, 23 Feb 2014 14:57:13 +0100, Дилян Палаузов wrote:

> Hello,
> 
> the subject might be misleading, but I did not come to a better idea.
> 
> I know it is up to every distribution to distribute or not the .pc
> files, but compiling the software yourself, you have to rely on some
> mechanism to figure out the information pkg-config delivers.  If
> pkg-config is not installed on every modern system, then one has to
> maintain workarounds for finding how to link.
> 
> When does it make sense to have workarounds for missing .pc files, and
> when are these workarounds pointless, as .pc files and pkg-config are
> always provided?
> 
> Let's take an example: gnutls and opendkim.  The latter checks at
> ./configure time if gnutls' pkg-config is installed and if it cannot
> find it, then it tries other ways.  What is the chance, that
> gnutls(-devel) is installed, but gnutls.pc is not found (provided that
> ./configure insists that pkg-config must be installed)?  Do you have any
> experience, or even a link, where this information is presented?
> 
> Thanks in advance for your reply.
> 
> Kind regards
>    Dilyan Palauzov


I see two issues in your question: 

What to do when pkg-config is not installed?

	I would say the answer is to get pkg-config installed. Seriously. 
You need to get either the main line pkg-config, one of the other 
implementations, or one of the forks to work natively or in a cross tool 
chain for what ever you are doing. After all, if you have a situation 
where pkg-config is not available, you are not likely to have other 
configure style facilities as well. For example, on windows I require 
either a cross compile from *nix or cygwin for the build environment. 
Most other niche / hobby environments can be cross targeted from *nix. If 
you can't get a build environment for a target with some kind of pkg-
config

What to do when .pc files are not installed?

	I've thought about this one a good bit. Presently, I feel like 
the time and effort one could spend making fall back configuration 
mechanisms would be better spent .pc generation mechanisms. The common 
case first step would be to provide example .pc files for dependency X, 
where X may likely not have a .pc in an environment, and ask the user 
(package maintainer, developer, or other person building the source) to 
hand modify it as needed. This is no more strange than having to spell 
out long CFLAGS, LDFLAGS, and related vars to ./configure. An improvement 
to this would be side script(s) that generated .pc based on detection 
logic. 

	This way, all the external dependency logic is done the same way. 
If you use .pc internally, then you really are at a point that pkg-config 
is a replacement for a large set of features from autoconf and libtool. 
This is one of the core ideas behind my slow moving build system project: 
github.com/ctstover/Build-Configuration-Adjust 

 



More information about the pkg-config mailing list