I recently was trying to install Hadley Wickham’s new svglite R package on my Mac OS X Yosemite:

devtools::install_github("hadley/svglite")


Only to be meant with the following errors:

** package ‘gdtools’ successfully unpacked and MD5 sums checked
Found pkg-config cflags and libs!
Using PKG_CFLAGS=
Using PKG_LIBS=-L/usr/local/Cellar/cairo/1.14.2_1/lib -lcairo
------------------------- ANTICONF ERROR ---------------------------
* deb: libcairo-dev (Debian, Ubuntu)
* rpm: cairo-devel (Fedora, CentOS, RHEL)
* csw: libcairo_dev (Solaris)
* brew: cairo (OSX)
If cairo is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a cairo.pc file. If pkg-config
is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:
R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'
--------------------------------------------------------------------
ERROR: configuration failed for package ‘gdtools’
* removing ‘/usr/local/lib/R/3.2/site-library/gdtools’


The error message complained about not having cairo installed, even though I had already installed it through homebrew:

brew install cairo

To install this version, first brew unlink cairo


I noticed that I hadn’t set the PKG_CONFIG_PATH environment variable so I thought that maybe the pkg-config command wasn’t able to find the cairo.pc file (located in the folder /usr/local/lib/pkgconfig). So I set this:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig


And tried to run the install command again, but yet it complained again. I finally found this post which describes how to install Cairo. Specifically it states that if we install Cairo through homebrew, then we need to set the PKG_CONFIG_PATH like this:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/opt/X11/lib/pkgconfig


The /opt/X11/lib/pkgconfig contains other .pc files including another cairo.pc. After doing this, I was able to install the svglite R package!

It’s not clear to me why this works exactly (i.e. why it didn’t recognize the cairo.pc in /usr/local/lib/pkgconfig), but hopefully this helps someone if they encounter this issue. If you know why this works, please do drop a comment!