From charlesreid1

How To Install This Stupid Crap

To install PyCairo on Mac OS X Lion, you have to deal with yet another non-standard, pain-in-the-ass build tool. This one is called WAF.

1. download/unpack py2cairo

2. edit file build_directory/c4che/_cache.py to remove non-64 bit architectures (since these screw up the build process)

3. modify the PKG_CONFIG_PATH environmental variable to include the path to your X11 pkg-config, not just the default pkg-config, using this command:

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

4. cd /temp/py2cairo && python waf configure

5. python waf build

6. python waf install

7. Because WAF is too stupid and inflexible to enable you to specify basically any information without hacking everything horribly to death, and because WAF idiotically picks up conflicting information about which Python version to use and where to put libraries for that Python version, you have to hard code links from the Homebrew Python site-packages folder (which is where WAF installs everything) to the site-packages for your own Python (wherever that happens to be. Since I'm using my system Python, its in /Library/Python/2.7/site-packages.

The command I used was:

ln -fs /usr/local/lib/python2.7/site-packages/cairo/ /Library/Python/2.7/site-packages/cairo

What Final Successful Output Looks Like

charlesreid @ mach - 28
(Mon Jun 23 14:31:06) /temp/py2cairo $ ./waf configure
  ./options()
Setting top to                           : /temp/py2cairo
Setting out to                           : /temp/py2cairo/build_directory
  ./configure()
Checking for 'gcc' (c compiler)          : ok
Checking for program python              : /usr/bin/python
Checking for python version              : (2, 7, 5, 'final', 0)
Checking for library python2.7           : yes
Checking for program python2.7-config    : /usr/bin/python2.7-config
Checking for header Python.h             : yes
Checking for program pkg-config          : /usr/local/bin/pkg-config
Checking for 'cairo' >= 1.10.2           : yes
Checking for 'xpyb' >= 1.3               : yes
Configuration:
PREFIX                                   : /usr/local
LIBDIR                                   : /usr/local/lib
'configure' finished successfully (0.847s)

charlesreid @ mach - 29
(Mon Jun 23 14:31:09) /temp/py2cairo $ ./waf build
  ./options()
Waf: Entering directory `/temp/py2cairo/build_directory'
  ./build()
  src/build()
[1/9] c: src/cairomodule.c -> build_directory/src/cairomodule.c.1.o
[2/9] c: src/context.c -> build_directory/src/context.c.1.o
[3/9] c: src/font.c -> build_directory/src/font.c.1.o
[4/9] c: src/path.c -> build_directory/src/path.c.1.o
clang: warning: argument unused during compilation: '-compatibility_version 1'
clang: warning: argument unused during compilation: '-current_version 1'
clang: warning: argument unused during compilation: '-mno-fused-madd'
clang: warning: argument unused during compilation: '-compatibility_version 1'
clang: warning: argument unused during compilation: '-current_version 1'
clang: warning: argument unused during compilation: '-mno-fused-madd'
[5/9] c: src/pattern.c -> build_directory/src/pattern.c.1.o
[6/9] c: src/matrix.c -> build_directory/src/matrix.c.1.o
[7/9] c: src/surface.c -> build_directory/src/surface.c.1.o
clang: warning: argument unused during compilation: '-compatibility_version 1'
clang: warning: argument unused during compilation: '-current_version 1'
clang: warning: argument unused during compilation: '-mno-fused-madd'
clang: warning: argument unused during compilation: '-compatibility_version 1'
clang: warning: argument unused during compilation: '-current_version 1'
clang: warning: argument unused during compilation: '-mno-fused-madd'
clang: warning: argument unused during compilation: '-compatibility_version 1'
clang: warning: argument unused during compilation: '-current_version 1'
clang: warning: argument unused during compilation: '-mno-fused-madd'
clang: warning: argument unused during compilation: '-compatibility_version 1'
clang: warning: argument unused during compilation: '-current_version 1'
clang: warning: argument unused during compilation: '-mno-fused-madd'
clang: warning: argument unused during compilation: '-compatibility_version 1'
clang: warning: argument unused during compilation: '-current_version 1'
clang: warning: argument unused during compilation: '-mno-fused-madd'
[8/9] cshlib: build_directory/src/cairomodule.c.1.o build_directory/src/context.c.1.o build_directory/src/font.c.1.o build_directory/src/path.c.1.o build_directory/src/pattern.c.1.o build_directory/src/matrix.c.1.o build_directory/src/surface.c.1.o -> build_directory/src/_cairo.so
Waf: Leaving directory `/temp/py2cairo/build_directory'
'build' finished successfully (0.462s)

charlesreid @ mach - 30
(Mon Jun 23 14:31:13) /temp/py2cairo $ ./waf install
  ./options()
Waf: Entering directory `/temp/py2cairo/build_directory'
  ./build()
  src/build()
+ install /usr/local/lib/pkgconfig/pycairo.pc (from build_directory/pycairo.pc)
+ install /usr/local/include/pycairo/pycairo.h (from src/pycairo.h)
+ install /usr/local/lib/python2.7/site-packages/cairo/_cairo.so (from build_directory/src/_cairo.so)
Waf: Leaving directory `/temp/py2cairo/build_directory'
+ install /usr/local/lib/python2.7/site-packages/cairo/__init__.py (from src/__init__.py)
+ byte compiling '/usr/local/lib/python2.7/site-packages/cairo/__init__.py'
'install' finished successfully (0.445s)