2 # Setup development environment on Mac OS X (tested with 10.6.8 and Xcode 3.2.6)
6 # Trying to follow "Building Wireshark on SnowLeopard"
7 # given by Michael Tuexen at
8 # http://nplab.fh-muenster.de/groups/wiki/wiki/fb7a4/Building_Wireshark_on_SnowLeopard.html
11 MACOSX_VERSION=`uname -r | sed 's/\([0-9]*\).*/\1/'`
13 # To set up a GTK3 environment
18 # Versions to download and install.
20 # The following libraries are required.
22 GETTEXT_VERSION=0.18.1.1
25 # pkg-config 0.26 appears to have broken the "we have our own GLib"
26 # stuff, even if you explicitly set GLIB_CFLAGS and GLIB_LIBS.
28 PKG_CONFIG_VERSION=0.26
34 GDK_PIXBUF_VERSION=2.26.1
35 if [ -z "$GTK3" ]; then
42 # Some package need xz to unpack their current source.
43 # xz is not available on OSX (Snow Leopard).
47 # In case we want to build with cmake
51 # The following libraries are optional.
52 # Comment them out if you don't want them, but note that some of
53 # the optional libraries are required by other optional libraries.
57 # libgpg-error is required for libgcrypt.
59 LIBGPG_ERROR_VERSION=1.10
61 # libgcrypt is required for GnuTLS.
62 # XXX - the link for "Libgcrypt source code" at
63 # http://www.gnupg.org/download/#libgcrypt is for 1.5.0, and is a bzip2
64 # file, but http://directory.fsf.org/project/libgcrypt/ lists only
67 LIBGCRYPT_VERSION=1.5.0
68 GNUTLS_VERSION=2.12.19
69 # Stay with Lua 5.1 when updating until the code has been changed
72 PORTAUDIO_VERSION=pa_stable_v19_20111121
74 # XXX - they appear to have an unversioned gzipped tarball for the
75 # current version; should we just download that, with some other
76 # way of specifying whether to download the GeoIP API?
81 # You need Xcode installed to get the compilers.
83 if [ ! -x /usr/bin/xcodebuild ]; then
84 echo "Please install Xcode first (should be available on DVD or from http://developer.apple.com/xcode/index.php)."
89 # You also need the X11 SDK; with at least some versions of OS X and
90 # Xcode, that is, I think, an optional install. (Or it might be
91 # installed with X11, but I think *that* is an optional install on
92 # at least some versions of OS X.)
94 if [ ! -d /usr/X11/include ]; then
95 echo "Please install X11 and the X11 SDK first."
100 # Do we have permission to write in /usr/local?
102 # If so, assume we have permission to write in its subdirectories.
103 # (If that's not the case, this test needs to check the subdirectories
106 # If not, do "make install" with sudo.
110 DO_MAKE_INSTALL="make install"
112 DO_MAKE_INSTALL="sudo make install"
115 export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/X11/lib/pkgconfig
118 # Do all the downloads and untarring in a subdirectory, so all that
119 # stuff can be removed once we've installed the support libraries.
121 if [ ! -d macosx-support-libs ]
123 mkdir macosx-support-libs || exit 1
125 cd macosx-support-libs
127 # Start with xz: It is the sole download format of glib later than 2.31.2
129 echo "Downloading, building, and installing xz:"
130 curl -O http://tukaani.org/xz/xz-$XZ_VERSION.tar.bz2 || exit 1
131 tar xf xz-$XZ_VERSION.tar.bz2 || exit 1
133 CFLAGS="-D_FORTIFY_SOURCE=0" ./configure || exit 1
135 $DO_MAKE_INSTALL || exit 1
138 if [ -n "$CMAKE" ]; then
139 echo "Downloading, building, and installing CMAKE:"
140 cmake_dir=`expr $CMAKE_VERSION : '\([0-9][0-9]*\.[0-9][0-9]*\).*'`
141 curl -O http://www.cmake.org/files/v$cmake_dir/cmake-$CMAKE_VERSION.tar.gz || exit 1
142 gzcat cmake-$CMAKE_VERSION.tar.gz | tar xf - || exit 1
143 cd cmake-$CMAKE_VERSION
144 ./bootstrap || exit 1
146 $DO_MAKE_INSTALL || exit 1
151 # Start with GNU gettext; GLib requires it, and OS X doesn't have it
152 # or a BSD-licensed replacement.
154 # At least on Lion with Xcode 4, _FORTIFY_SOURCE gets defined as 2
155 # by default, which causes, for example, stpncpy to be defined as
156 # a hairy macro that collides with the GNU gettext configure script's
157 # attempts to workaround AIX's lack of a declaration for stpncpy,
158 # with the result being a huge train wreck. Define _FORTIFY_SOURCE
159 # as 0 in an attempt to keep the trains on separate tracks.
161 echo "Downloading, building, and installing GNU gettext:"
162 curl -O http://ftp.gnu.org/pub/gnu/gettext/gettext-$GETTEXT_VERSION.tar.gz || exit 1
163 tar xf gettext-$GETTEXT_VERSION.tar.gz || exit 1
164 cd gettext-$GETTEXT_VERSION
165 CFLAGS="-D_FORTIFY_SOURCE=0" ./configure || exit 1
167 $DO_MAKE_INSTALL || exit 1
170 echo "Downloading, building, and installing GLib:"
171 glib_dir=`expr $GLIB_VERSION : '\([0-9][0-9]*\.[0-9][0-9]*\).*'`
172 curl -L -O http://ftp.gnome.org/pub/gnome/sources/glib/$glib_dir/glib-$GLIB_VERSION.tar.xz || exit 1
173 xzcat glib-$GLIB_VERSION.tar.xz | tar xf - || exit 1
174 cd glib-$GLIB_VERSION
176 # OS X ships with libffi, but doesn't provide its pkg-config file;
177 # explicitly specify LIBFFI_CFLAGS and LIBFFI_LIBS, so the configure
178 # script doesn't try to use pkg-config to get the appropriate
181 # And, what's worse, at least with the version of Xcode that comes
182 # with Leopard, /usr/include/ffi/fficonfig.h doesn't define MACOSX,
183 # which causes the build of GLib to fail. If we don't find
184 # "#define.*MACOSX" in /usr/include/ffi/fficonfig.h, explictly
187 if grep -qs '#define.*MACOSX' /usr/include/ffi/fficonfig.h
189 # It's defined, nothing to do
190 LIBFFI_CFLAGS="-I/usr/include/ffi" LIBFFI_LIBS="-lffi" ./configure || exit 1
192 CFLAGS="-DMACOSX" LIBFFI_CFLAGS="-I/usr/include/ffi" LIBFFI_LIBS="-lffi" ./configure || exit 1
195 # Apply patch: we depend on libffi, but pkg-config doesn't get told.
196 patch -p0 <../../macosx-support-lib-patches/glib-pkgconfig.patch || exit 1
197 $DO_MAKE_INSTALL || exit 1
200 echo "Downloading, building, and installing pkg-config:"
201 curl -O http://pkgconfig.freedesktop.org/releases/pkg-config-$PKG_CONFIG_VERSION.tar.gz || exit 1
202 tar xf pkg-config-$PKG_CONFIG_VERSION.tar.gz || exit 1
203 cd pkg-config-$PKG_CONFIG_VERSION
204 # Avoid another pkgconfig call
205 GLIB_CFLAGS="-I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include" GLIB_LIBS="-L/usr/local/lib -lglib-2.0 -lintl" ./configure || exit 1
206 # ./configure || exit 1
208 $DO_MAKE_INSTALL || exit 1
212 # Now we have reached a point where we can build everything but
213 # the GUI (Wireshark).
215 # Cairo is part of Mac OS X 10.6 and 10.7.
216 # The *headers* are supplied by 10.5, but the *libraries* aren't, so
217 # we have to build it on 10.5.
218 # GTK+ 3 requires a newer Cairo build than the one that comes with
219 # 10.6, so we build Cairo if we are using GTK+ 3.
220 # In 10.6 and 10.7, it's an X11 library; if we build with "native" GTK+
221 # rather than X11 GTK+, we might have to build and install Cairo.
223 if [[ -n "$GTK3" || $MACOSX_VERSION = "9" ]]; then
225 # Requirements for Cairo first
227 echo "Downloading, building, and installing libpng:"
228 curl -O ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-$PNG_VERSION.tar.xz
229 xzcat libpng-$PNG_VERSION.tar.xz | tar xf - || exit 1
230 cd libpng-$PNG_VERSION
231 ./configure || exit 1
233 $DO_MAKE_INSTALL || exit 1
236 echo "Downloading, building, and installing pixman:"
237 curl -O http://www.cairographics.org/releases/pixman-$PIXMAN_VERSION.tar.gz
238 gzcat pixman-$PIXMAN_VERSION.tar.gz | tar xf - || exit 1
239 cd pixman-$PIXMAN_VERSION
240 ./configure || exit 1
242 $DO_MAKE_INSTALL || exit 1
246 # And now Cairo itself.
248 echo "Downloading, building, and installing Cairo:"
249 curl -O http://cairographics.org/releases/cairo-$CAIRO_VERSION.tar.xz || exit 1
250 xzcat cairo-$CAIRO_VERSION.tar.xz | tar xf - || exit 1
251 cd cairo-$CAIRO_VERSION
252 #./configure --enable-quartz=no || exit 1
253 # Maybe follow http://cairographics.org/end_to_end_build_for_mac_os_x/
254 ./configure --enable-quartz=yes || exit 1
256 $DO_MAKE_INSTALL || exit 1
260 echo "Downloading, building, and installing ATK:"
261 atk_dir=`expr $ATK_VERSION : '\([0-9][0-9]*\.[0-9][0-9]*\).*'`
262 curl -O http://ftp.gnome.org/pub/gnome/sources/atk/$atk_dir/atk-$ATK_VERSION.tar.xz || exit 1
263 xzcat atk-$ATK_VERSION.tar.xz | tar xf - || exit 1
265 ./configure || exit 1
267 $DO_MAKE_INSTALL || exit 1
270 echo "Downloading, building, and installing Pango:"
271 pango_dir=`expr $PANGO_VERSION : '\([0-9][0-9]*\.[0-9][0-9]*\).*'`
272 curl -L -O http://ftp.gnome.org/pub/gnome/sources/pango/$pango_dir/pango-$PANGO_VERSION.tar.xz
273 xzcat pango-$PANGO_VERSION.tar.xz | tar xf - || exit 1
274 cd pango-$PANGO_VERSION
275 ./configure || exit 1
277 $DO_MAKE_INSTALL || exit 1
280 echo "Downloading, building, and installing gdk-pixbuf:"
281 gdk_pixbuf_dir=`expr $GDK_PIXBUF_VERSION : '\([0-9][0-9]*\.[0-9][0-9]*\).*'`
282 curl -L -O http://ftp.gnome.org/pub/gnome/sources/gdk-pixbuf/$gdk_pixbuf_dir/gdk-pixbuf-$GDK_PIXBUF_VERSION.tar.xz || exit 1
283 xzcat gdk-pixbuf-$GDK_PIXBUF_VERSION.tar.xz | tar xf - || exit 1
284 cd gdk-pixbuf-$GDK_PIXBUF_VERSION
285 ./configure --without-libtiff --without-libjpeg || exit 1
287 $DO_MAKE_INSTALL || exit 1
290 echo "Downloading, building, and installing GTK+:"
291 gtk_dir=`expr $GTK_VERSION : '\([0-9][0-9]*\.[0-9][0-9]*\).*'`
292 curl -L -O http://ftp.gnome.org/pub/gnome/sources/gtk+/$gtk_dir/gtk+-$GTK_VERSION.tar.xz
293 xzcat gtk+-$GTK_VERSION.tar.xz | tar xf - || exit 1
296 # GTK+ 2.24.10, at least, doesn't build on Mountain Lion with the CUPS
297 # printing backend - either the CUPS API changed incompatibly or the
298 # backend was depending on non-API implementation details.
300 # Configure it out for now.
302 if [ $MACOSX_VERSION -ge "12" ]
304 ./configure --disable-cups || exit 1
306 ./configure || exit 1
309 $DO_MAKE_INSTALL || exit 1
313 # Now we have reached a point where we can build everything including
314 # the GUI (Wireshark), but not with any optional features such as
315 # SNMP OID resolution, some forms of decryption, Lua scripting, playback
316 # of audio, or GeoIP mapping of IP addresses.
318 # We now conditionally download optional libraries to support them;
319 # the default is to download them all.
322 if [ ! -z $LIBSMI_VERSION ]
324 echo "Downloading, building, and installing libsmi:"
325 curl -L -O ftp://ftp.ibr.cs.tu-bs.de/pub/local/libsmi/libsmi-$LIBSMI_VERSION.tar.gz || exit 1
326 tar xf libsmi-$LIBSMI_VERSION.tar.gz || exit 1
327 cd libsmi-$LIBSMI_VERSION
328 ./configure || exit 1
330 $DO_MAKE_INSTALL || exit 1
334 if [ ! -z $LIBGPG_ERROR_VERSION ]
336 echo "Downloading, building, and installing libgpg-error:"
337 curl -L -O ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-$LIBGPG_ERROR_VERSION.tar.bz2 || exit 1
338 bzcat libgpg-error-$LIBGPG_ERROR_VERSION.tar.bz2 | tar xf - || exit 1
339 cd libgpg-error-$LIBGPG_ERROR_VERSION
340 ./configure || exit 1
342 $DO_MAKE_INSTALL || exit 1
346 if [ ! -z $LIBGCRYPT_VERSION ]
349 # libgpg-error is required for libgcrypt.
351 if [ -z $LIBGPG_ERROR_VERSION ]
353 echo "libgcrypt requires libgpg-error, but you didn't install libgpg-error." 1>&2
357 echo "Downloading, building, and installing libgcrypt:"
358 curl -L -O ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-$LIBGCRYPT_VERSION.tar.gz || exit 1
359 tar xf libgcrypt-$LIBGCRYPT_VERSION.tar.gz || exit 1
360 cd libgcrypt-$LIBGCRYPT_VERSION
362 # The assembler language code is not compatible with the OS X
363 # x86 assembler (or is it an x86-64 vs. x86-32 issue?).
365 ./configure --disable-asm || exit 1
367 $DO_MAKE_INSTALL || exit 1
371 if [ ! -z $GNUTLS_VERSION ]
374 # GnuTLS requires libgcrypt (or nettle, in newer versions).
376 if [ -z $LIBGCRYPT_VERSION ]
378 echo "GnuTLS requires libgcrypt, but you didn't install libgcrypt" 1>&2
382 echo "Downloading, building, and installing GnuTLS:"
383 curl -L -O http://ftp.gnu.org/gnu/gnutls/gnutls-$GNUTLS_VERSION.tar.bz2 || exit 1
384 bzcat gnutls-$GNUTLS_VERSION.tar.bz2 | tar xf - || exit 1
385 cd gnutls-$GNUTLS_VERSION
387 # Use libgcrypt, not nettle.
388 # XXX - is there some reason to prefer nettle? Or does
389 # Wireshark directly use libgcrypt routines?
391 ./configure --with-libgcrypt --without-p11-kit || exit 1
394 # The pkgconfig file for GnuTLS says "requires zlib", but OS X,
395 # while it supplies zlib, doesn't supply a pkgconfig file for
398 # Patch the GnuTLS pkgconfig file not to require zlib.
399 # (If the capabilities of GnuTLS that Wireshark uses don't
400 # depend on building GnuTLS with zlib, an alternative would be
401 # to configure it not to use zlib.)
403 patch -p0 lib/gnutls.pc.in <../../macosx-support-lib-patches/gnutls-pkgconfig.patch || exit 1
404 $DO_MAKE_INSTALL || exit 1
408 if [ ! -z $LUA_VERSION ]
410 echo "Downloading, building, and installing Lua:"
411 curl -L -O http://www.lua.org/ftp/lua-$LUA_VERSION.tar.gz || exit 1
412 tar xf lua-$LUA_VERSION.tar.gz || exit 1
414 make -j 3 macosx || exit 1
415 $DO_MAKE_INSTALL || exit 1
419 if [ ! -z $PORTAUDIO_VERSION ]
421 echo "Downloading, building, and installing PortAudio:"
422 curl -L -O http://www.portaudio.com/archives/$PORTAUDIO_VERSION.tgz || exit 1
423 tar xf $PORTAUDIO_VERSION.tgz || exit 1
426 # Un-comment an include that's required on Lion.
428 patch -p0 include/pa_mac_core.h <../../macosx-support-lib-patches/portaudio-pa_mac_core.h.patch
430 # Disable fat builds - the configure script doesn't work right
431 # with Xcode 4 if you leave them enabled, and we don't build
432 # any other libraries fat (GLib, for example, would be very
433 # hard to build fat), so there's no advantage to having PortAudio
436 # Set the minimum OS X version to 10.4, to suppress some
437 # deprecation warnings.
439 CFLAGS="-mmacosx-version-min=10.4" ./configure --disable-mac-universal || exit 1
441 $DO_MAKE_INSTALL || exit 1
445 if [ ! -z $GEOIP_VERSION ]
447 echo "Downloading, building, and installing GeoIP API:"
448 curl -L -O http://geolite.maxmind.com/download/geoip/api/c/GeoIP-$GEOIP_VERSION.tar.gz || exit 1
449 tar xf GeoIP-$GEOIP_VERSION.tar.gz || exit 1
450 cd GeoIP-$GEOIP_VERSION
451 ./configure || exit 1
453 # Grr. Their man pages "helpfully" have an ISO 8859-1
454 # copyright symbol in the copyright notice, but OS X's
455 # default character encoding is UTF-8. sed on Mountain
456 # Lion barfs at the "illegal character sequence" represented
457 # by an ISO 8859-1 copyright symbol, as it's not a valid
460 # iconv the relevant man pages into UTF-8.
462 for i in geoipupdate.1.in geoiplookup6.1.in geoiplookup.1.in
464 iconv -f iso8859-1 -t utf-8 man/"$i" >man/"$i".tmp &&
465 mv man/"$i".tmp man/"$i"
468 $DO_MAKE_INSTALL || exit 1
474 echo "You are now prepared to build Wireshark. To do so do:"
475 echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/X11/lib/pkgconfig"
477 if [ -n "$CMAKE" ]; then
478 echo "mkdir build; cd build"
485 echo "mkdir build; cd build"
493 echo "Make sure you are allowed capture access to the network devices"
494 echo "See: http://wiki.wireshark.org/CaptureSetup/CapturePrivileges"