ImageMagick für OS X kompilieren

Da die Binary-Distribution von ImageMagick leider keine Unterstützung für TIFF enthält, musste ich mir eine eigene Version von ImageMagick kompilieren. Nachdem ich es nach langem Suchen endlich hinbekommen habt, gibt es hier die Anleitung dazu.

Meine eigene Version sollte wie das Binary, dass auf der ImageMagick-Webbsite angeboten wird, nicht fest installiert werden. Daher wurden die benötigten Bibliotheken ebenfalls nur lokal installiert. Die nach dieser Anleitung kompilierte Version von ImageMagick unterstützt außerdem nur die Standardformate von ImageMagick und die Formate JPEG, PNG und TIFF.

ACHTUNG: In den Folgenden Zeilen muss das User-Verzeichnis (hier benutzername) entsprechend dem eigenen Benutzer angepasst werden! Alle folgenden Befehle können als gewöhnlicher Benutzer ausgeführt werden. Dennoch sollte bei der Wahl der Verzeichnisse darauf geachtet werden, dass nicht vorhandene Dateien überschrieben werden.

mkdir /Users/benutzername/sandbox
cd /Users/benutzername/sandbox
 
curl -O ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.2.18.tar.bz2
tar -xjf libpng-1.2.18.tar.bz2
cd libpng-1.2.18
./configure \
	CFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386" \
	CPPFLAGS="-I/Users/benutzername/sandbox/ImageMagick/include" \
	LDFLAGS="-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -L/Users/benutzername/sandbox/ImageMagick/lib" \
	--prefix=/Users/benutzername/sandbox/ImageMagick --enable-shared --disable-dependency-tracking
make
make install
cd ..
 
curl -O ftp://ftp.imagemagick.org/pub/ImageMagick/delegates/libjpeg-6b.tar.gz
tar -xzf libjpeg-6b.tar.gz
cd libjpeg-6b
./configure \
	CFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386" \
	CPPFLAGS="-I/Users/benutzername/sandbox/ImageMagick/include" \
	LDFLAGS="-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -L/Users/benutzername/sandbox/ImageMagick/lib" \
	--prefix=/Users/benutzername/sandbox/ImageMagick --enable-shared --disable-dependency-tracking
make
make install
cd ..

Versucht mal libtiff ganz normal als universal zu kompiliert, dann wird es nur auf der Intel-Plattform korrekt funktionieren. Das liegt daran, dass das configure-Skript die Byte-Order statisch erkennt und festlegt. Daher ist hier ein bisschen Handarbeit angesagt. Zu erst entpacken wir libtiff ganz normal und führen configure aus:

curl -O http://dl.maptools.org/dl/libtiff/tiff-3.8.2.tar.gz
tar -xzf tiff-3.8.2.tar.gz
cd tiff-3.8.2
autoconf
./configure \
	CFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386" \
	CPPFLAGS="-I/Users/benutzername/sandbox/ImageMagick/include" \
	LDFLAGS="-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -L/Users/benutzername/sandbox/ImageMagick/lib" \
	--prefix=/Users/benutzername/sandbox/ImageMagick --enable-shared --disable-dependency-tracking \
	--disable-cxx --without-x --with-apple-opengl-framework

Bevor wir das ganze kompilieren müssen noch folgende Änderungen an zwei Dateien vorgenommen werden:

In der libtiff/tif_config.h müssen alle Vorkommnisse von HOST_BIGENDIAN, HOST_FILLORDER und WORDS_BIGENDIAN auskommentiert werden. Dann fügen wir die folgenden Zeilen ein:

#ifdef __BIG_ENDIAN__
#define HOST_BIGENDIAN 1
#define HOST_FILLORDER FILLORDER_MSB2LSB
#define WORDS_BIGENDIAN 1
#else
#define HOST_BIGENDIAN 0
#define HOST_FILLORDER FILLORDER_LSB2MSB
#undef WORDS_BIGENDIAN
#endif

In der libtiff/tifconf.h müssen alle Vorkommnisse von HOST_BIGENDIAN, HOST_FILLORDER auskommentiert und durch folgenden Zeilen ersetzt werden:

#ifdef __BIG_ENDIAN__
#define HOST_BIGENDIAN 1
#define HOST_FILLORDER FILLORDER_MSB2LSB
#else
#define HOST_BIGENDIAN 0
#define HOST_FILLORDER FILLORDER_LSB2MSB
#endif

Anschließend können wir die Bibliothek normal kompilieren und installieren:

make
make install
cd ..

Der Rest lässt sich wieder ohne Probleme als universal kompilieren.

curl -O ftp://xmlsoft.org/libxml2/libxml2-2.6.28.tar.gz
tar -xzf libxml2-2.6.28.tar.gz
cd libxml2-2.6.28
./configure \
	CFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386" \
	CPPFLAGS="-I/Users/benutzername/sandbox/ImageMagick/include" \
	LDFLAGS="-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -L/Users/benutzername/sandbox/ImageMagick/lib" \
	--prefix=/Users/benutzername/sandbox/ImageMagick --enable-shared --disable-dependency-tracking \
	--without-python
make
make install
cd ..
 
curl -O ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz
tar -xzf ImageMagick.tar.gz
cd ImageMagick-6.3.4
./configure \
	CFLAGS="-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386" \
	CPPFLAGS="-I/Users/benutzername/sandbox/ImageMagick/include" \
	LDFLAGS="-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -L/Users/benutzername/sandbox/ImageMagick/lib" \
	--prefix=/Users/benutzername/sandbox/ImageMagick \
	--enable-shared --disable-dependency-tracking --disable-installed --without-magick-plus-plus --without-perl --without-x
make
make install

Das Verzeichnis ImageMagick lässt sich nun an eine beliebige Stelle kopieren und mit den Umgebungsvariablen MAGICK_HOME und DYLD_LIBRARY_PATH verwenden:

export MAGICK_HOME=/Users/benutzername/sandbox/ImageMagick/
export DYLD_LIBRARY_PATH=/Users/benutzername/sandbox/ImageMagick/lib/
 
/Users/benutzername/sandbox/ImageMagick/bin/convert
Version: ImageMagick 6.3.4 05/10/07 Q16 http://www.imagemagick.org
...

Diese Anleitung liefert leider nur eine sehr abgespeckte Version von ImageMagick, aber vielleicht sind trotzdem Teile davon nützlich. Bei Fragen könnt Ihr Euch auch gerne nochmal per Mail an mich wenden.

 
π