[Haskell-cafe] Cabal, xmonad-contrib, X11-xft, pkg-config ... questioning my sanity

Jacek Generowicz jacek.generowicz at cern.ch
Mon Dec 6 15:39:26 CET 2010

Problem solved: 2 solutions described below.

On 2010 Dec 6, at 14:15, Duncan Coutts wrote:

> On 6 December 2010 11:02, Jacek Generowicz  
> <jacek.generowicz at cern.ch> wrote:
>> It a appears that a program which does not exist on my computer  
>> seems to
>> insist on a package version which does not exist in my universe, I'm
>> starting to wonder whether I have lost my marbles. Could some kind  
>> soul
>> please point me in some sensible direction?
>> cabal install xmonad-contrib
>> Resolving dependencies...
>> Configuring X11-xft-0.3...
>> cabal: pkg-config version >=0.9.0 is required but it could not be  
>> found.
>> X11-xft version 0.9.0 doesn't even exist, as far a I can tell
> In the development version of cabal we have changed that error message
> to try and make it clear that it is looking for a program called
> pkg-config, not a Haskell package or a C lib.
> cabal: The program pkg-config version >=0.9.0 is required but it  
> could not be
> found.
> Do you think that message would have helped avoid your confusion?

Oooh, that's a difficult question to answer, as I had read your  
earlier paragraph before coming to this question. After your  
explanation explained the error message (to the extent that I now  
wonder how on earth I ever took it to mean that it's looking for X11- 
xft version >=0.9.0, when it quite clearly states "pkg-config version  
 >=0.9.0 is required but could not be found"), I have no idea whether  
the new message would have been better.

> Is there an alternative message that would have been better?

Well, if I try to understand how I could have misunderstood the  
original message, I suspect that it is because of the common style of  
error message where the program generating the message precedes the  
actual message on the same line, just like "cabal: ..." precedes the  
message in this case. So I guess that I parsed it something like "...  
pkg-config: version >=0.9.0 is required ..." and inferred that  
'version' refers to the package mentioned in an earlier message.

In which case, maybe something like

     cabal: version >=0.9.0 of pkg-config is required ...

would have prevented me from making this particular mistake in this  
particular case.

> pkg-config [1] is a tool used by C libraries to describe things like
> dependencies on other C libs and what C compiler flags are needed to
> use the packages.
> The Haskell package X11-xft is a binding to the C library xft. On most
> modern unix systems xft C library provides meta-data that pkg-config
> can use. For example, on my system I can run:
> $ pkg-config --cflags xft
> -I/usr/include/freetype2
> $ pkg-config --libs xft
> -lXft -lXrender -lfontconfig -lfreetype -lX11
> Cabal does exactly the same thing, to work out what flags are needed
> to use the xft C library.
> The problem on your system is that the pkg-config program is not
> installed. Perhaps on OSX it comes with Xcode, I'm not sure. It may
> well also be the case that you don't have the development files for
> X11 or xft installed either (e.g. C header files). Hopefully some OSX
> person can advise you on what you need to install to do X11
> development on OSX.

Solution 1 (more complicated version):

Although I never use XCode itself, I thought that I had it installed  
along with all the developer tools in order to get at GCC etc.  
Apparently not.

Anyway, pkg-config seems to be available through darwinports, but I  
don't use darwinports (as, many years ago, I concluded that it's more  
trouble than it's worth, because of the strange places where it puts  
the stuff it manages).

However, a plain manual compilation Just Works (for me):

     curl http://pkgconfig.freedesktop.org/releases/pkg-config-0.25.tar.gz 
  -o pkgconfig.tgz
     tar zxf pkgconfig.tgz
     cd pkgconfig.tgz
     sudo make install

and I now have pkg-config

If I try

     pkg-config --cflags xft

it complains about the package not being found, and mentions the  
relevant environment variable.

I *do* have /usr/X11/lib/pkgconfig/xft.pc, and popping its directiory  
into PKG_CONFIG_PATH makes the above pkg-config call now work.

In this state,

     cabal install xmonad-contrib

also works.


Solution 2 (simpler):

I did manage to get xmonad-contrib to cabal install (without pkg- 
config) by asking for it not to use xft

     cabal install xmonad-contrib --flags="-use_xft"

Presumably cabal uses pkg-config for only a subset of the things it  
manages, and xft is the only one of those on which xmonad-contrib  

Thank you Duncan for your concise, clear and complete answer: it was  
just what I needed to unblock me.

More information about the Haskell-Cafe mailing list