Check for an OS X deployment target early, so that as many
[metze/wireshark/wip.git] / configure.ac
1 # $Id$
2 #
3
4 m4_define([version_major], [1])
5 m4_define([version_minor], [11])
6 m4_define([version_micro], [0])
7 m4_define([version_micro_extra], version_micro)
8 m4_append([version_micro_extra], [])
9
10 AC_INIT(wireshark, [version_major.version_minor.version_micro_extra], http://bugs.wireshark.org/, , http://www.wireshark.org/)
11
12 # Minimum autoconf version we require.
13 AC_PREREQ(2.60)
14 # Variable expansion doesn't work in AC_PREREQ()
15 AC_MIN_VERSION=2.60
16 AC_SUBST(AC_MIN_VERSION)
17
18 dnl Check for CPU / vendor / OS
19 dnl The user is encouraged to use either `AC_CANONICAL_BUILD', or
20 dnl `AC_CANONICAL_HOST', or `AC_CANONICAL_TARGET', depending on the
21 dnl needs.  Using `AC_CANONICAL_TARGET' is enough to run the two other
22 dnl macros.
23 dnl
24 dnl As nothing in the Wireshark is itself a build tool (we are not,
25 dnl for example, a compiler that generates machine code), we probably
26 dnl don't need AC_CANONICAL_TARGET, so, in theory, we should be able
27 dnl to use AC_CANONICAL_BUILD and AC_CANONICAL_HOST - or perhaps just
28 dnl AC_CANONICAL_HOST - instead.  Note that we do have tools, such as
29 dnl lemon, that need to be built for the build machine, not for the
30 dnl host machine, so we might need both.
31 dnl
32 dnl This has to be done *after* AC_INIT, otherwise autogen.sh fails.
33
34 dnl AC_CANONICAL_BUILD
35 dnl AC_CANONICAL_HOST
36 AC_CANONICAL_TARGET
37
38 AM_INIT_AUTOMAKE([1.9 tar-ustar dist-bzip2 no-dist-gzip])
39
40 # Make Wireshark's version available in config.h
41 AC_DEFINE(VERSION_MAJOR, version_major, [Wireshark's major version])
42 AC_DEFINE(VERSION_MINOR, version_minor, [Wireshark's minor version])
43 AC_DEFINE(VERSION_MICRO, version_micro, [Wireshark's micro version])
44
45 AM_DISABLE_STATIC
46
47 #
48 # Checks for programs used in the main build process.
49 #
50 AC_PROG_CC
51 AM_PROG_CC_C_O
52 AC_PROG_CXX
53 AC_PROG_CPP
54 dnl Work around libtool bug (fixed in the version 1.5a?)
55 AC_DEFUN([AC_PROVIDE_AC_LIBTOOL_DLOPEN], )
56 AC_LIBTOOL_DLOPEN
57 AC_PROG_LIBTOOL
58 if test ! -z "$CXX"; then
59         #
60         # OK, we found something AC_LANG_CXX thinks is a C++ compiler,
61         # but is it one?
62         #
63         # Some UN*Xes have, by default, a case-insensitive file
64         # system, and AC_PROG_CXX looks for, among other things,
65         # "CC" as a C++ compiler, and, if you have a case-insensitive
66         # file system and a C compiler named "cc" (both true, by
67         # default, on OS X), AC_PROG_CXX may end up thinking it's
68         # the C++ compiler.
69         #
70         # So we check by feeding the purported C++ compiler a
71         # program using C++ features (iostream).
72         #
73         # We do this after AC_PROG_LIBTOOL; if we did so before, and
74         # cleared CXX if what we had isn't a C++ compiler, that'd
75         # get undone by AC_PROG_LIBTOOL for some reason.
76         #
77         AC_MSG_CHECKING(whether $CXX is a C++ compiler)
78         AC_LANG_PUSH([C++])
79         AC_LINK_IFELSE([AC_LANG_PROGRAM(
80         [
81 #include <iostream>
82         ],
83         [
84         std::cout << "Hello World! ";
85         return 0;
86         ])],
87                 [AC_MSG_RESULT(yes)],
88                 [
89                         AC_MSG_RESULT(no)
90                         CXX=""
91                 ])
92         AC_LANG_POP([C++])
93 fi
94 AC_PATH_PROG(PERL, perl)
95
96 # Check for Python.
97 AC_PATH_PROG(PYTHON, python)
98 if test ! -z "$PYTHON"; then
99         #
100         # OK, we found Python; is it Python 2.x?
101         # Note: we don't use named components for sys.version_info to get
102         # the major version number, as named components for version_info
103         # were apparently introduced in Python 2.7.
104         #
105         AC_MSG_CHECKING([whether $PYTHON is Python 2])
106         python_major_version=`$PYTHON -c 'import sys; print sys.version_info[[0]]'`
107         if test "$python_major_version" = 2; then
108                 AC_MSG_RESULT([yes])
109         else
110                 #
111                 # It's not 2.x.
112                 #
113                 AC_MSG_RESULT([no])
114
115                 #
116                 # Try looking for python2; if we find it, we assume it's
117                 # Python 2
118                 #
119                 AC_PATH_PROG(PYTHON, python2)
120         fi
121 fi
122
123 #
124 # XXX - should autogen.sh check for YACC/Bison and Flex?  A user building
125 # from a distribution tarball shouldn't have to have YACC/Bison or Flex,
126 # as the tarball should contain the results of running YACC/Bison on .y
127 # files and running Flex on .l files, but a user building from SVN
128 # will have to run YACC/Bison and Flex to process those files.
129 #
130 # On the other hand, what about users who use a distribution tarball to
131 # do development?  They *shouldn't* - that's what the SVN repository is
132 # for - but they might.  They'd get errors if they modify a .y or .l
133 # file and try to do a build - but the error should tell them that they
134 # need to get YACC/Bison and/or Flex.
135 #
136 # Then again, getting them shouldn't be too big of a burden.
137 #
138 # XXX - is the same true of pod2man and pod2html, or are they needed
139 # even when building from a distribution tarball?
140 #
141 #
142 AC_PROG_YACC
143 AC_PATH_PROG(YACCDUMMY, $YACC)
144 if test "x$YACCDUMMY" = x
145 then
146         AC_MSG_ERROR(I couldn't find yacc (or bison or ...); make sure it's installed and in your path)
147 fi
148 AM_PROG_LEX
149 AC_PATH_PROG(LEX, flex)
150 if test "x$LEX" = x
151 then
152         AC_MSG_ERROR(I couldn't find flex; make sure it's installed and in your path)
153 fi
154 AC_PATH_PROG(POD2MAN, pod2man)
155 if test "x$POD2MAN" = x
156 then
157         #
158         # The alternative is not to build the man pages....
159         #
160         AC_MSG_ERROR(I couldn't find pod2man; make sure it's installed and in your path)
161 fi
162 AC_PATH_PROG(POD2HTML, pod2html)
163 if test "x$POD2HTML" = x
164 then
165         #
166         # The alternative is not to build the HTML man pages....
167         #
168         AC_MSG_ERROR(I couldn't find pod2html; make sure it's installed and in your path)
169 fi
170
171 #
172 # Checks for programs used by Wireshark/TShark/etc.
173 #
174
175 #
176 # XXX - this looks for various HTML viewers on the host, not the target;
177 # we really want to know what's available on the target, for cross-builds.
178 # That would probably require us to, at run time, look for xdg-open and,
179 # if we don't find it, look for mozilla, htmlview, etc.
180 #
181 AC_PATH_PROG(HTML_VIEWER, xdg-open)
182 if test "x$HTML_VIEWER" != x
183 then
184         #
185         # XXX - the HTML_VIEWER shell variable is the full path of xdg-open.
186         # Define some variable to be that, so we just run that?
187         #
188         AC_DEFINE(HAVE_XDG_OPEN, 1, [Define if we have xdg-open])
189
190         #
191         # XXX - we have to define HTML_VIEWER for the prefs.c code that
192         # sets the default value of the Web browser preference, even
193         # though that preference won't be offered.
194         #
195         AC_DEFINE_UNQUOTED(HTML_VIEWER, "xdg-open", [HTML viewer, e.g. mozilla])
196 else
197         AC_PATH_PROG(HTML_VIEWER, htmlview)
198         if test "x$HTML_VIEWER" = x
199         then
200                 AC_DEFINE_UNQUOTED(HTML_VIEWER, "mozilla", [HTML viewer, e.g. mozilla])
201         else
202                 AC_DEFINE_UNQUOTED(HTML_VIEWER, "htmlview", [HTML viewer, e.g. mozilla])
203         fi
204 fi
205
206 #
207 # Set "ac_supports_gcc_flags" if the compiler is known to support GCC-style
208 # flags such as -pedantic, -W warning flags and -f feature flags.  Currently,
209 # we assume GCC and clang do; other compilers should be added here.
210 #
211 # This is done to avoid getting tripped up by compilers that support
212 # those flags but give them a different meaning.
213 #
214 if test "x$GCC" = "xyes" -o "x$CC" = "xclang" ; then
215         ac_supports_gcc_flags=yes
216 fi
217
218 #
219 # Set "ac_supports_W_linker_passthrough" if the compiler is known to
220 # support "-Wl,{options}" to pass options through to the linker.
221 # Currently, we assume GCC, xlc, and clang do; other compilers should
222 # be added here.
223 #
224 if test "x$GCC" = "xyes" -o "x$CC" = "xxlc" -o "x$CC" = "xclang" ; then
225         ac_supports_W_linker_passthrough=yes
226 fi
227
228 #
229 # Set "ac_supports_attribute_unused" if the compiler is known to
230 # support "__attribute__(unused)".
231 # Currently, we assume GCC and clang do; other compilers should
232 # be added here.
233 #
234 # XXX - do this with a compiler test?
235 #
236 if test "x$GCC" = "xyes" -o "x$CC" = "xclang" ; then
237         ac_supports_W_linker_passthrough=yes
238 fi
239
240 if test "x$CC_FOR_BUILD" = x
241 then
242        CC_FOR_BUILD=$CC
243 fi
244 AC_SUBST(CC_FOR_BUILD)
245 AC_SUBST(CFLAGS_FOR_BUILD)
246
247 # Check for doxygen
248 AC_PATH_PROG(DOXYGEN, doxygen)
249 AC_CHECK_PROG(HAVE_DOXYGEN, doxygen, "yes", "no")
250 AM_CONDITIONAL(HAVE_DOXYGEN, test x$HAVE_DOXYGEN = xyes)
251
252 #
253 # Check for pkg-config and set PKG_CONFIG accordingly.
254 #
255 # This is referenced via AC_REQUIRE([PKG_PROG_PKG_CONFIG] in some macros
256 # like PKG_CHECK_MODULES. If the first call to such a macro is under an
257 # "if" statement, it's safer to call PKG_PROG_PKG_CONFIG directly, see
258 # the comments in acolocal.m4
259 #
260 PKG_PROG_PKG_CONFIG
261
262 #
263 # Check for an OS X deployment target early, so that as many
264 # tests using the compiler are done using the flags that
265 # we'll be using when building.
266 #
267 case "$host_os" in
268 darwin*)
269         #
270         # Get the OS X major version number.
271         # (We quote the command so that we can use autoconf's M4
272         # quoting characters, [ and ], in the sed expression.)
273         #
274         [os_version=`sw_vers -productVersion | sed 's/\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.[0-9]*/\1.\2/'`]
275
276         AC_ARG_ENABLE(osx-deploy-target,
277           AC_HELP_STRING( [--enable-osx-deploy-target],
278             [choose an OS X deployment target @<:@default=none@:>@]),
279         [
280                 if test $enableval = no
281                 then
282                         deploy_target=
283                 elif test $enableval = yes
284                 then
285                         deploy_target=$os_version
286                 else
287                         deploy_target="$enableval"
288                 fi
289         ],[
290                 deploy_target=
291         ])
292         AC_MSG_CHECKING([what deployment target to use])
293         if test -z "$deploy_target"
294         then
295                 AC_MSG_RESULT(none)
296                 OSX_DEPLOY_TARGET=
297         else
298                 AC_MSG_RESULT($deploy_target)
299
300                 case $deploy_target in
301
302                 10.0|10.1|10.2)
303                         #
304                         # I'm not sure this would even work.
305                         #
306                         AC_ERROR([$deploy_target not supported as a deployment target])
307                         ;;
308
309                 10.3)
310                         #
311                         # XXX - never tested.
312                         #
313                         SDKPATH="/Developer/SDKs/MacOSX10.3.9.sdk"
314                         ;;
315
316                 *)
317                         #
318                         # XXX - for 10.4, do we need 10.4u?  We're
319                         # not currently doing fat builds (we'd need
320                         # fat versions of the support libraries for
321                         # that to be useful), but, if we do, we'd
322                         # need to use 10.4u.
323                         #
324                         for i in /Developer/SDKs \
325                             /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs \
326                             /Library/Developer/CommandLineTools/SDKs
327                         do
328                                 if test -d "$i"/"MacOSX$deploy_target.sdk"
329                                 then
330                                         SDKPATH="$i"/"MacOSX$deploy_target.sdk"
331                                         break
332                                 fi
333                         done
334                         if test -z "$SDKPATH"
335                         then
336                                 AC_MSG_ERROR([couldn't find the SDK for OS X $deploy_target])
337                         fi
338                         ;;
339                 esac
340
341                 #
342                 # Add a -mmacosx-version-min flag to force tests that
343                 # use the compiler, as well as the build itself, not to,
344                 # for example, use compiler or linker features not supported
345                 # by the minimum targeted version of the OS.
346                 #
347                 # Add an -isysroot flag to use the SDK.
348                 #
349                 CFLAGS="-mmacosx-version-min=$deploy_target -isysroot $SDKPATH $CFLAGS"
350                 CPPFLAGS="-mmacosx-version-min=$deploy_target -isysroot $SDKPATH $CPPFLAGS"
351                 LDFLAGS="-mmacosx-version-min=$deploy_target -isysroot $SDKPATH $LDFLAGS"
352
353                 #
354                 # Add a -sdkroot flag to use with osx-app.sh.
355                 #
356                 OSX_APP_FLAGS="-sdkroot $SDKPATH"
357
358                 #
359                 # XXX - do we need this to build the Wireshark wrapper?
360                 # XXX - is this still necessary with the -mmacosx-version-min
361                 # flag being set?
362                 #
363                 OSX_DEPLOY_TARGET="MACOSX_DEPLOYMENT_TARGET=$deploy_target"
364         fi
365 esac
366
367 #
368 # Try to arrange for large file support.
369 #
370 AC_SYS_LARGEFILE
371
372 #
373 # GUI toolkit options
374 #
375 AC_ARG_WITH([qt],
376   AC_HELP_STRING( [--with-qt=@<:@yes/no@:>@],
377                   [use Qt @<:@default=no@:>@]),
378   with_qt="$withval", with_qt="no")
379
380 AC_ARG_WITH([gtk2],
381   AC_HELP_STRING( [--with-gtk2=@<:@yes/no@:>@],
382                   [use GTK+ 2.0 @<:@default=yes@:>@]),
383   with_gtk2="$withval", with_gtk2="yes")
384
385 AC_ARG_WITH([gtk3],
386   AC_HELP_STRING( [--with-gtk3=@<:@yes/no@:>@],
387                   [use GTK+ 3.0 instead of 2.0 @<:@default=no@:>@]),
388   with_gtk3="$withval", with_gtk3="no")
389
390 # GnuTLS
391 # Version 3.0 switched from LGPLv2.1+ to LGPLv3+, then switched back to
392 # LGPLv2.1+ in version 3.1.10
393 tls_message="no"
394 AC_ARG_WITH([gnutls],
395   AC_HELP_STRING( [--with-gnutls=@<:@yes/no@:>@],
396                   [use GnuTLS library @<:@default=yes@:>@]),
397   with_gnutls="$withval", with_gnutls="yes")
398 if test "x$with_gnutls" = "xyes"; then
399   have_license_compatible_gnutls="no"
400   PKG_CHECK_MODULES([LIBGNUTLS], [gnutls >= 3.1.10 ],
401     [ have_license_compatible_gnutls="yes" ], [ echo "GnuTLS >= 3.1.10 not found " ]
402   )
403
404   if test "x$have_license_compatible_gnutls" != "xyes"; then
405     PKG_CHECK_MODULES([LIBGNUTLS], [gnutls >= 1.2.0 gnutls < 3],
406       [ have_license_compatible_gnutls="yes" ] , [ echo "GnuTLS >= 1.2.0, < 3.0 not found " ]
407     )
408   fi
409
410   if test "x$have_license_compatible_gnutls" = "xyes"; then
411     echo "GnuTLS found, enabling SSL decryption"
412     AC_DEFINE(HAVE_LIBGNUTLS, 1, [Define to use GnuTLS library])
413     tls_message="yes"
414   else
415     echo "GnuTLS with compatible license not found, disabling SSL decryption"
416     tls_message="no"
417   fi
418 fi
419
420 # libgrypt
421 gcrypt_message="no"
422 AC_ARG_WITH([gcrypt],
423   AC_HELP_STRING( [--with-gcrypt=@<:@yes/no@:>@],
424                   [use gcrypt library @<:@default=yes@:>@]),
425   with_gcrypt="$withval", with_gcrypt="yes")
426 if test "x$with_gcrypt" = "xyes"; then
427   AM_PATH_LIBGCRYPT(1.1.92,
428         [
429                 echo "libgcrypt found, enabling ipsec decryption"
430                 AC_DEFINE(HAVE_LIBGCRYPT, 1, [Define to use libgcrypt])
431                 gcrypt_message="yes"
432         ]
433         , [
434                 if test x$libgcrypt_config_prefix != x ; then
435                         AC_MSG_ERROR([[libgcrypt not found; install libgcrypt-devel package for your system]])
436                 else
437                         echo "libgcrypt not found, disabling ipsec decryption"
438                         gcrypt_message="no"
439                 fi
440         ]
441   )
442 fi
443
444 AC_ARG_WITH(libnl,
445   AC_HELP_STRING([--with-libnl@<:@=VERSION@:>@],
446                  [use libnl (force version VERSION, if supplied) @<:@default: yes, if available@:>@]),
447 [
448         if test "x$withval" = "xno"
449         then
450                 want_libnl=no
451         elif test "x$withval" = "xyes"
452         then
453                 want_libnl=yes
454                 libnl_version=any
455         elif test "x$withval" = "x1"
456         then
457                 want_libnl=yes
458                 libnl_version=1
459         elif test "x$withval" = "x2"
460         then
461                 want_libnl=yes
462                 libnl_version=2
463         elif test "x$withval" = "x3"
464         then
465                 want_libnl=yes
466                 libnl_version=3
467         else
468                 AC_MSG_ERROR(["$withval" is not a valid argument to --with-libnl])
469         fi
470 ],[
471         #
472         # Use libnl if it's present, otherwise don't.
473         #
474         want_libnl=ifavailable
475         libnl_version=any
476 ])
477 #
478 # Libnl is Linux-specific.
479 #
480 libnl_message="no"
481 case "$host_os" in
482 linux*)
483         AC_MSG_CHECKING(whether to use libnl for various network interface purposes)
484
485         if test x$want_libnl = "xno"; then
486                 AC_MSG_RESULT(no)
487         else
488                 AC_MSG_RESULT(yes)
489                 #
490                 # Test for specific libnl versions only if no version
491                 # was specified by the user or if the version in question
492                 # was requested by the user.
493                 #
494                 if test x$libnl_version = "xany" -o x$libnl_version = "x3"; then
495                         PKG_CHECK_MODULES(LIBNL3, [libnl-route-3.0 >= 3.0 libnl-genl-3.0] >= 3.0, [have_libnl3=yes], [have_libnl3=no])
496                 fi
497                 if test x$libnl_version = "xany" -o x$libnl_version = "x2"; then
498                         PKG_CHECK_MODULES(LIBNL2, libnl-2.0 >= 2.0, [have_libnl2=yes], [have_libnl2=no])
499                 fi
500                 if test x$libnl_version = "xany" -o x$libnl_version = "x1"; then
501                         PKG_CHECK_MODULES(LIBNL1, libnl-1 >= 1.0, [have_libnl1=yes], [have_libnl1=no])
502                 fi
503                 if (test "${have_libnl3}" = "yes"); then
504                         CFLAGS="$CFLAGS $LIBNL3_CFLAGS"
505                         LIBS="$LIBS $LIBNL3_LIBS"
506                         AC_DEFINE(HAVE_LIBNL, 1, [Enable libnl support])
507                         AC_DEFINE(HAVE_LIBNL3, 1, [libnl version 3])
508                         libnl_message="yes (v3)"
509                         enable_airpcap=no
510                 elif (test "${have_libnl2}" = "yes"); then
511                         CFLAGS="$CFLAGS $LIBNL2_CFLAGS"
512                         LIBS="$LIBS $LIBNL2_LIBS"
513                         AC_DEFINE(HAVE_LIBNL, 1, [Enable libnl support])
514                         AC_DEFINE(HAVE_LIBNL2, 1, [libnl version 2])
515                         libnl_message="yes (v2)"
516                         enable_airpcap=no
517                 elif (test "${have_libnl1}" = "yes"); then
518                         CFLAGS="$CFLAGS $LIBNL1_CFLAGS"
519                         LIBS="$LIBS $LIBNL1_LIBS"
520                         AC_DEFINE(HAVE_LIBNL, 1, [Enable libnl support])
521                         AC_DEFINE(HAVE_LIBNL1, 1, [libnl version 1])
522                         libnl_message="yes (v1)"
523                         enable_airpcap=no
524                 else
525                         if test x$want_libnl = "xyes"; then
526                                 case "$libnl_version" in
527
528                                 any)
529                                         AC_MSG_ERROR("I couldn't find libnl even though you manually enabled it.")
530                                         ;;
531
532                                 *)
533                                         AC_MSG_ERROR("I couldn't find libnl version $libnl_version even though you manually enabled it.")
534                                         ;;
535                                 esac
536                         fi
537                 fi
538         fi
539
540         AC_MSG_CHECKING([if nl80211.h is new enough])
541           AC_TRY_COMPILE([#include <linux/nl80211.h>],
542             [int x = NL80211_FREQUENCY_ATTR_MAX_TX_POWER;
543                 x = NL80211_ATTR_SUPPORTED_IFTYPES;
544                 x = NL80211_ATTR_SUPPORTED_COMMANDS;
545                 x = NL80211_ATTR_WIPHY_FREQ;
546                 x = NL80211_CHAN_NO_HT;],
547             [AC_MSG_RESULT(yes) AC_DEFINE(HAVE_NL80211, 1, [nl80211.h is new enough])],
548             [AC_MSG_RESULT(no)])
549
550         AC_MSG_CHECKING([for NL80211_SET_CHANNEL])
551           AC_TRY_COMPILE([#include <linux/nl80211.h>],
552             [enum nl80211_commands x = NL80211_CMD_SET_CHANNEL;],
553             [AC_MSG_RESULT(yes) AC_DEFINE(HAVE_NL80211_CMD_SET_CHANNEL, 1, [SET_CHANNEL is supported])],
554             [AC_MSG_RESULT(no)])
555         ;;
556
557 *)
558         if test x$want_libnl != "xno" -a x$want_libnl != "xifavailable"; then
559                 AC_MSG_WARN([libnl is Linux-specific, ignoring --with-libnl])
560         fi
561 esac
562
563 # libsmi
564 # FIXME: currently the path argument to with-libsmi is being ignored
565 AX_LIBSMI
566
567 #
568 # Check for programs used when building DocBook documentation.
569 #
570
571 # Check for a2x (convert asciidoc to another format)
572 AC_PATH_PROG(A2X, a2x)
573 AC_CHECK_PROG(HAVE_A2X, a2x, "yes", "no")
574 AM_CONDITIONAL(HAVE_A2X, test x$HAVE_A2X = xyes)
575
576 # Want to control a tape drive? Use mt. Want to convert HTML to text?
577 # Uhhhhh... elinks? lynx? w3m? pandoc? html2text?
578 AC_PATH_PROG(ELINKS, elinks)
579 AC_CHECK_PROG(HAVE_ELINKS, elinks, "yes", "no")
580 AM_CONDITIONAL(HAVE_ELINKS, test x$HAVE_ELINKS = xyes)
581
582 # Check for fop (translate .fo to e.g. pdf)
583 AC_PATH_PROG(FOP, fop)
584 AC_CHECK_PROG(HAVE_FOP, fop, "yes", "no")
585 AM_CONDITIONAL(HAVE_FOP, test x$HAVE_FOP = xyes)
586
587 # Check for lynx (html -> text)
588 AC_PATH_PROG(LYNX, lynx)
589 AC_CHECK_PROG(HAVE_LYNX, lynx, "yes", "no")
590 AM_CONDITIONAL(HAVE_LYNX, test x$HAVE_LYNX = xyes)
591
592 # Check for w3m (html -> text)
593 AC_PATH_PROG(W3M, w3m)
594 AC_CHECK_PROG(HAVE_W3M, w3m, "yes", "no")
595 AM_CONDITIONAL(HAVE_W3M, test x$HAVE_W3M = xyes)
596
597 # Check for xmllint
598 AC_PATH_PROG(XMLLINT, xmllint)
599 AC_CHECK_PROG(HAVE_XMLLINT, xmllint, "yes", "no")
600 AM_CONDITIONAL(HAVE_XMLLINT, test x$HAVE_XMLLINT = xyes)
601
602 # Check for xsltproc
603 AC_PATH_PROG(XSLTPROC, xsltproc)
604 AC_CHECK_PROG(HAVE_XSLTPROC, xsltproc, "yes", "no")
605 AM_CONDITIONAL(HAVE_XSLTPROC, test x$HAVE_XSLTPROC = xyes)
606
607
608 # Check for packaging utilities
609 # For now, we check to see if the various packaging utilites are in our
610 # path.  I'm too lazy to write code to go hunt for them.  -  Gerald
611
612 #
613 # Source packages.
614 # (Lets you install the desktop files.)
615 #
616 AC_PATH_PROG(DESKTOP_FILE_INSTALL, desktop-file-install)
617
618 # SVR4/Solaris
619 AC_CHECK_PROG(HAVE_PKGPROTO, pkgproto, "yes", "no")
620 AC_CHECK_PROG(HAVE_PKGMK, pkgmk, "yes", "no")
621 AC_CHECK_PROG(HAVE_PKGTRANS, pkgtrans, "yes", "no")
622
623 if test x$HAVE_PKGPROTO = xyes -a x$HAVE_PKGMK = xyes \
624      -a x$HAVE_PKGTRANS = xyes ; then
625   HAVE_SVR4_PACKAGING=yes
626 else
627   HAVE_SVR4_PACKAGING=no
628 fi
629 AC_SUBST(HAVE_SVR4_PACKAGING)
630
631 # RPM
632 AC_WIRESHARK_RPM_CHECK
633 AC_SUBST(HAVE_RPM)
634
635 # Debian
636 AC_CHECK_PROG(HAVE_DPKG_BUILDPACKAGE, dpkg-buildpackage, "yes", "no")
637
638 # Mac OS X
639 AC_CHECK_PROG(HAVE_XCODEBUILD, xcodebuild, "yes", "no")
640 AC_CHECK_PROG(HAVE_HDIUTIL, hdiutil, "yes", "no")
641 AC_CHECK_PROG(HAVE_BLESS, bless, "yes", "no")
642
643 if test x$HAVE_XCODEBUILD = xyes -a x$HAVE_HDIUTIL = xyes \
644      -a x$HAVE_BLESS = xyes ; then
645   HAVE_OSX_PACKAGING=yes
646 else
647   HAVE_OSX_PACKAGING=no
648 fi
649 AC_SUBST(HAVE_OSX_PACKAGING)
650
651 #
652 # Some compilers have to be told to fail on unknown warning errors;
653 # make sure we do that.
654 #
655 AC_WIRESHARK_CHECK_UNKNOWN_WARNING_OPTION_ERROR
656
657 #
658 # Try to add some additional gcc checks to CFLAGS
659 #
660 AC_ARG_ENABLE(extra-gcc-checks,
661   AC_HELP_STRING( [--enable-extra-gcc-checks],
662                   [do additional -W checks in GCC @<:@default=no@:>@]),
663 [
664         wireshark_extra_gcc_flags=$enableval
665         if test $enableval != no
666         then
667                 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-pedantic)
668                 #
669                 # Various code blocks this one.
670                 #
671                 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Woverflow)
672                 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-fstrict-overflow -Wstrict-overflow=4)
673                 #
674                 # Some memset() calls to clear out structures
675                 # on the stack are getting flagged as "will never
676                 # be executed" by this, at least by Apple's
677                 # i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on
678                 # Apple Inc. build 5658) (LLVM build 2336.11.00), for
679                 # some unknown reason.
680                 #
681                 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wunreachable-code)
682                 #
683                 # Due to various places where APIs we don't control
684                 # require us to cast away constness, we can probably
685                 # never enable these ones with -Werror.
686                 #
687                 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wcast-qual)
688                 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wbad-function-cast, C)
689                 #
690                 # Some generated ASN.1 dissectors block this one;
691                 # multiple function declarations for the same
692                 # function are being generated.
693                 #
694                 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wredundant-decls)
695                 #
696                 # Some loops are safe, but it's hard to convince the
697                 # compiler of that.
698                 #
699                 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wunsafe-loop-optimizations)
700                 #
701                 # All the registration functions block these for now.
702                 #
703                 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wmissing-prototypes)
704                 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wmissing-declarations)
705                 #
706                 # A bunch of "that might not work on SPARC" code blocks
707                 # this one for now.
708                 #
709                 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wcast-align)
710         fi
711 ],)
712 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wall -W) # -W is now known as -Wextra
713 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wextra) # -W is now known as -Wextra
714 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wdeclaration-after-statement, C)
715 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wendif-labels)
716 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wpointer-arith)
717 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wno-pointer-sign, C)
718 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Warray-bounds)
719 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wformat-security)
720 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wold-style-definition, C)
721 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wshorten-64-to-32)
722 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wstrict-prototypes, C)
723 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wjump-misses-init, C)
724 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wvla)
725 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Waddress)
726 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Warray-bounds)
727 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wattributes)
728 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wdiv-by-zero)
729 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wignored-qualifiers)
730 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wpragmas)
731 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wno-overlength-strings)
732 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wwrite-strings)
733 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wno-long-long)
734 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wc++-compat, C)
735
736 #
737 # XXX - OK for C++?
738 #
739 # Make sure -Wshadow doesn't complain about variables in function and
740 # function pointer declarations shadowing other variables; if not, don't
741 # turn it on, as some versions of GCC (including the one in at least
742 # some Xcode versions that came with Mac OS X 10.5) complain about
743 # that.
744 #
745 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wshadow, C,
746   [
747 extern int bar(int a);
748 extern int foo(int);
749
750 int
751 foo(int a)
752 {
753         int (*fptr)(int a) = bar;
754
755         return fptr(a) * 2;
756 }
757   ],
758   [warns about variables in function declarations shadowing other variables])
759
760 # Unfortunately some versions of gcc generate logical-op warnings when strchr()
761 # is given a constant string.
762 # gcc versions 4.3.2 and 4.4.5 are known to have the problem.
763 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wlogical-op, C,
764   [
765 #include <string.h>
766
767 int foo(const char *, int);
768 int bar(void);
769
770 int
771 foo(const char *sep, int c)
772 {
773         if (strchr (sep, c) != NULL)
774                 return 1;
775         else
776                 return 0;
777 }
778
779 int
780 bar(void)
781 {
782         return foo("<", 'a');
783 }
784   ],
785   [generates warnings from strchr()])
786
787
788 #
789 # On OS X, suppress warnings about deprecated declarations, because
790 # they apparently think everything on OS X is Shiny Happy Apple-
791 # Framework-Based Apps and are deprecating some perfectly OK
792 # multi-platform open-source libraries that we use in our multi-platform
793 # open-source application in favor of various frameworks that are
794 # OS X-only.
795 #
796 # Also, let the user to specify an OS X release to use as a deplayment
797 # target; if they specify that we should have a deployment target but
798 # don't specify the deployment target, pick the OS version on which
799 # the build is being done.  This also causes the build to be done
800 # against an SDK rather than against the headers and libraries in
801 # /usr/include and /usr/lib.
802 #
803 case "$host_os" in
804 darwin*)
805         AC_WIRESHARK_COMPILER_FLAGS_CHECK(-Wno-deprecated-declarations)
806         ;;
807 esac
808
809 #
810 # Use the faster pre gcc 4.5 floating point precision if available.
811 #
812 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-fexcess-precision=fast)
813
814 CFLAGS_before_fvhidden=$CFLAGS
815 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-fvisibility=hidden)
816 if test "x$CLFAGS" = "x$CFLAGS_before_fvhidden"
817 then
818         # TODO add other ways of hiding symbols
819         AC_MSG_WARN(Compiler will export all symbols from shared libraries)
820 fi
821
822 AC_WIRESHARK_LDFLAGS_CHECK([-Wl,--as-needed])
823 ###AC_WIRESHARK_LDFLAGS_CHECK([-Wl,-M])
824 ###AC_WIRESHARK_LDFLAGS_CHECK([-Wl,--cref])
825 # AC_WIRESHARK_LDFLAGS_CHECK([-flto])
826 # AC_WIRESHARK_LDFLAGS_CHECK([-fwhopr])
827 # AC_WIRESHARK_LDFLAGS_CHECK([-fwhole-program])
828
829 #
830 # Put -fPIE in PIE_CFLAGS and -pie in PIE_LDFLAGS if we can use them,
831 # so that we can build dumpcap PIE - it may run with elevated
832 # privileges, and using PIE means the OS can run it at random locations
833 # in the address space to make attacks more difficult.
834 #
835 CFLAGS_before_pie=$CFLAGS
836 AC_WIRESHARK_COMPILER_FLAGS_CHECK(-fPIE, C)
837 if test "x$CLFAGS" != "x$CFLAGS_before_pie"
838 then
839         # Restore CFLAGS
840         CFLAGS=$CFLAGS_before_pie
841
842         LDFLAGS_before_pie=$LDFLAGS
843         AC_WIRESHARK_LDFLAGS_CHECK([-fPIE -pie])
844         if test "x$LDFLAGS" != "x$LDFLAGS_before_pie"
845         then
846                 # We can use PIE
847                 PIE_CFLAGS="-fPIE"
848                 PIE_LDFLAGS="-pie"
849
850                 # Restore LDFLAGS
851                 LDFLAGS=$LDFLAGS_before_pie
852         fi
853
854 fi
855 AC_SUBST(PIE_CFLAGS)
856 AC_SUBST(PIE_LDFLAGS)
857
858 #
859 # If we're running GCC or clang define _U_ to be "__attribute__((unused))"
860 # so we can use _U_ to flag unused function parameters and not get warnings
861 # about them. Otherwise, define _U_ to be an empty string so that _U_ used
862 # to flag an unused function parameters will compile with other compilers.
863 #
864 # XXX - similar hints for other compilers?
865 #
866 if test "x$GCC" = "xyes" -o "x$CC" = "xclang" ; then
867   AC_DEFINE(_U_, __attribute__((unused)), [Hint to the compiler that a function parameters is not used])
868 else
869   AC_DEFINE(_U_, , [Hint to the compiler that a function parameters is not used])
870 fi
871
872 # If we're running GCC or CLang, use FORTIFY_SOURCE=2
873 #  (only if the GCC 'optimization level' > 0).
874 #
875 # See: http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html
876 # See: http://sourceware.org/bugzilla/show_bug.cgi?id=13979
877 #
878 # Note: FORTIFY_SOURCE is only effective for gcc optimization level > 0 (-O1, etc)
879 AC_WIRESHARK_GCC_FORTIFY_SOURCE_CHECK
880
881 #
882 # If the compiler supports GCC-style flags, enable a barrier "stop on
883 # warning".
884 # This barrier is set for a very large part of the code. However, it is
885 # typically not set for "generated" code  (flex, ans2wrs, idl2wrs, ...)
886 #
887 warnings_as_errors_default="yes"
888 AC_MSG_CHECKING(whether we should treat compiler warnings as errors)
889 AC_ARG_ENABLE(warnings-as-errors,
890   AC_HELP_STRING( [--enable-warnings-as-errors],
891                   [treat warnings as errors (only for GCC or clang) @<:@default=yes, unless extra warnings are enabled@:>@]),
892 [
893   if test "x$ac_supports_gcc_flags" = "xyes" -a "x$enableval" = "xyes"; then
894     with_warnings_as_errors="yes"
895     AC_MSG_RESULT(yes)
896   else
897     with_warnings_as_errors="no"
898     AC_MSG_RESULT(no)
899   fi
900 ],
901 [
902   if test "x$ac_supports_gcc_flags" = "xyes" -a "x$wireshark_extra_gcc_flags" = "x" -a "x$warnings_as_errors_default" = "xyes"; then
903     with_warnings_as_errors="yes"
904     AC_MSG_RESULT(yes)
905   else
906     with_warnings_as_errors="no"
907     AC_MSG_RESULT(no)
908   fi
909 ]
910 )
911 AM_CONDITIONAL(HAVE_WARNINGS_AS_ERRORS, test "x$with_warnings_as_errors" = "xyes")
912
913 #
914 # Add any platform-specific compiler flags needed.
915 #
916 AC_MSG_CHECKING(for platform-specific compiler flags)
917 if test "x$GCC" = "xyes" ; then
918         #
919         # GCC - do any platform-specific tweaking necessary.
920         #
921         case "$host_os" in
922         solaris*)
923                 # the X11 headers don't automatically include prototype info
924                 # and a lot don't include the return type
925                 CPPFLAGS="$CPPFLAGS -DFUNCPROTO=15"
926                 CFLAGS="$CFLAGS -Wno-return-type"
927                 CXXFLAGS="$CXXFLAGS -Wno-return-type"
928                 AC_MSG_RESULT(GCC on Solaris - added -Wno-return-type -DFUNCPROTO=15)
929                 ;;
930         *)
931                 AC_MSG_RESULT(none needed)
932                 ;;
933         esac
934 else
935         #
936         # Not GCC - assume it's the vendor's compiler.
937         #
938         case "$host_os" in
939         hpux*)
940                 #
941                 # HP's ANSI C compiler; flags suggested by Jost Martin.
942                 # "-Ae" for ANSI C plus extensions such as "long long".
943                 # "+O2", for optimization.  XXX - works with "-g"?
944                 #
945                 # HP's ANSI C++ compiler doesn't support "-Ae", but
946                 # does support "+O2", at least according to the
947                 # documentation I can find online.
948                 #
949                 CFLAGS="-Ae +O2 $CFLAGS"
950                 CFLAGS_FOR_BUILD="-Ae +O2 $CFLAGS"
951                 CXXFLAGS="+O2 $CFLAGS"
952                 AC_MSG_RESULT(HP ANSI C compiler - added -Ae +O2)
953                 ;;
954         *)
955                 AC_MSG_RESULT(none needed)
956                 ;;
957         esac
958 fi
959
960 #
961 # Add any platform-specific linker flags needed.
962 #
963 AC_MSG_CHECKING(for platform-specific linker flags)
964 case "$host_os" in
965 darwin*)
966         #
967         # Add -Wl,-single_module to the LDFLAGS used with shared
968         # libraries, to fix some error that show up in some cases;
969         # some Apple documentation recommends it for most shared
970         # libraries.
971         #
972         LDFLAGS_SHAREDLIB="-Wl,-single_module"
973         #
974         # Add -Wl,-search_paths_first to make sure that if we search
975         # directories A and B, in that order, for a given library, a
976         # non-shared version in directory A, rather than a shared
977         # version in directory B, is chosen (so we can use
978         # --with-pcap=/usr/local to force all programs to be linked
979         # with a static version installed in /usr/local/lib rather than
980         # the system version in /usr/lib).
981         #
982         LDFLAGS="-Wl,-search_paths_first $LDFLAGS"
983         AC_MSG_RESULT([Apple linker - added -Wl,-single_module and -Wl,-search_paths_first])
984         ;;
985 cygwin*)
986         #
987         # Shared libraries in cygwin/Win32 must never contain
988         # undefined symbols.
989         #
990         LDFLAGS="$LDFLAGS -no-undefined"
991         AC_MSG_RESULT(CygWin GNU ld - added -no-undefined)
992         ;;
993 *)
994         AC_MSG_RESULT(none needed)
995         ;;
996 esac
997 AC_SUBST(LDFLAGS_SHAREDLIB)
998
999 # Enable silent builds by default
1000 # Verbose builds can be enabled with "./configure
1001 # --enable-silent-rules ..." or "make V=1 ..."
1002 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])],
1003   [AC_SUBST([AM_DEFAULT_VERBOSITY], [1])])
1004
1005 #
1006 # On "Darwin", which we assume to mean "OS X" rather than "iOS" or
1007 # "just Darwin" (as we don't currently support iOS, and as I don't
1008 # think you can build and run "just Darwin" as an OS for PCs), we
1009 # arrange to build some programs with Application Services so they
1010 # can launch Web browsers and Finder windows, arrange to build some
1011 # programs with System Configuration so they can get "friendly names"
1012 # and other information about interfaces, and build any programs that
1013 # use either of those frameworks or that report version information
1014 # with Core Foundation as the frameworks in question use it and as we
1015 # get version information from plists and thus need Core Foundation
1016 # to process those plists.
1017 #
1018 case "$host_os" in
1019
1020 darwin*)
1021         AC_DEFINE(HAVE_OS_X_FRAMEWORKS, 1, [Define to 1 if you have OS X frameworks])
1022         APPLICATIONSERVICES_FRAMEWORKS="-framework ApplicationServices"
1023         SYSTEMCONFIGURATION_FRAMEWORKS="-framework SystemConfiguration"
1024         COREFOUNDATION_FRAMEWORKS="-framework CoreFoundation"
1025
1026         #
1027         # OK, so we have the OS X frameworks; do they include
1028         # CFPropertyListCreateWithStream, or do we have
1029         # to fall back on CFPropertyListCreateFromStream?
1030         # (They only differ in the error return, which we
1031         # don't care about.  And, no, we shouldn't just
1032         # use CFPropertyListCreateFromStream, because it's
1033         # deprecated in newer releases.)
1034         #
1035         ac_save_LIBS="$LIBS"
1036         LIBS="$LIBS $COREFOUNDATION_FRAMEWORKS"
1037         AC_CHECK_FUNCS(CFPropertyListCreateWithStream)
1038         LIBS="$ac_save_LIBS"
1039         ;;
1040 esac
1041 AC_SUBST(APPLICATIONSERVICES_FRAMEWORKS)
1042 AC_SUBST(SYSTEMCONFIGURATION_FRAMEWORKS)
1043 AC_SUBST(COREFOUNDATION_FRAMEWORKS)
1044 AC_SUBST(OSX_APP_FLAGS)
1045
1046 dnl Look in /usr/local for header files and libraries ?
1047 dnl XXX FIXME don't include /usr/local if it is already in the system
1048 dnl search path as this causes gcc 3.2 on Linux to complain about a change
1049 dnl of the system search order for includes
1050 AC_ARG_ENABLE(usr-local,
1051   AC_HELP_STRING( [--enable-usr-local],
1052                   [look for headers and libs in /usr/local tree @<:@default=yes@:>@]),
1053     ac_cv_enable_usr_local=$enableval,ac_cv_enable_usr_local=yes)
1054
1055 AC_MSG_CHECKING(whether to use /usr/local for headers and libraries)
1056 if test "x$ac_cv_enable_usr_local" = "xyes" ; then
1057         if test -d "/usr/local"; then
1058                 AC_MSG_RESULT(yes)
1059                 #
1060                 # Arrange that we search for header files in the source directory
1061                 # and in its "wiretap" subdirectory, as well as in "/usr/local/include",
1062                 # as various packages we use ("libpcap", "zlib", "adns")
1063                 # may have been installed under "/usr/local/include".
1064                 #
1065                 CPPFLAGS="$CPPFLAGS -I/usr/local/include"
1066
1067                 #
1068                 # Arrange that we search for libraries in "/usr/local/lib".
1069                 #
1070                 AC_WIRESHARK_ADD_DASH_L(LDFLAGS, /usr/local/lib)
1071         else
1072                 AC_MSG_RESULT(no)
1073         fi
1074 else
1075         AC_MSG_RESULT(no)
1076 fi
1077
1078 #
1079 # If we're running Solaris, and LD_LIBRARY_PATH is defined, add it as a
1080 # link directory.
1081 #
1082 case "$host_os" in
1083   solaris*)
1084     AC_MSG_CHECKING(for LD_LIBRARY_PATH, since you appear to be running Solaris)
1085     if test x$LD_LIBRARY_PATH != x ; then
1086       LIBS="$LIBS -R$LD_LIBRARY_PATH"
1087       AC_MSG_RESULT(yes -- added LD_LIBRARY_PATH to run-time linker path)
1088     else
1089       AC_MSG_RESULT(no -- this may be a problem in a few seconds)
1090     fi
1091   ;;
1092 esac
1093
1094 #
1095 # Check for versions of "sed" inadequate to handle, in libtool, a list
1096 # of object files as large as the list in Wireshark.
1097 #
1098 # On Solaris, we check for "/bin/sed", "/usr/bin/sed", and "/usr/ucb/sed",
1099 # as both "/usr/bin/sed" (which is also "/bin/sed", as "/bin" is just a
1100 # symlink to "/usr/bin", but people may have "/bin" before "/usr/bin" in
1101 # their search path) and "/usr/ucb/sed" are inadequate; "/usr/xpg4/bin/sed"
1102 # is the only "sed" that comes with Solaris that can handle Wireshark.
1103 #
1104 # Add any checks here that are necessary for other OSes.
1105 #
1106 AC_WIRESHARK_GNU_SED_CHECK
1107 if test "$HAVE_GNU_SED" = no ; then
1108         case "$host_os" in
1109         solaris*)
1110                 AC_MSG_CHECKING(whether one of /usr/bin/sed or /bin/sed or /usr/ucb/sed will be used)
1111                 case `which sed` in
1112                         /bin/sed|/usr/bin/sed|/usr/ucb/sed)
1113                         AC_MSG_RESULT(yes)
1114                         AC_MSG_ERROR([change your path to search /usr/xpg4/bin or directory containing GNU sed before /usr/bin (and /bin and /usr/ucb)])
1115                         ;;
1116
1117                         *)
1118                         AC_MSG_RESULT(no)
1119                         ;;
1120                 esac
1121                 ;;
1122
1123         *)
1124                 :
1125                 ;;
1126         esac
1127 fi
1128
1129 # Enable/disable wireshark
1130 AC_ARG_ENABLE(wireshark,
1131   AC_HELP_STRING( [--enable-wireshark],
1132                   [build the Wireshark GUI (with Gtk+, Qt, or both) @<:@default=yes@:>@]),
1133     enable_wireshark=$enableval,enable_wireshark=yes)
1134
1135 AC_ARG_ENABLE(packet-editor,
1136   AC_HELP_STRING( [--enable-packet-editor],
1137                   [add support for packet editor in Wireshark @<:@default=no@:>@]),
1138     enable_packet_editor=$enableval,enable_packet_editor=no)
1139 if test x$enable_packet_editor = xyes; then
1140         AC_DEFINE(WANT_PACKET_EDITOR, 1, [Support for packet editor])
1141 fi
1142
1143 AC_ARG_ENABLE(profile-build,
1144   AC_HELP_STRING( [--enable-profile-build],
1145                   [build profile-ready binaries @<:@default=no@:>@]),
1146     enable_profile_build=$enableval,enable_profile_build=no)
1147 AM_CONDITIONAL(USE_PROFILE_BUILD, test x$enable_profile_build = xyes)
1148 AC_MSG_CHECKING(if profile builds must be generated)
1149 if test "x$enable_profile_build" = "xyes" ; then
1150         if test "x$GCC" = "xyes" -o "x$CLANG" = "xyes" ; then
1151                 AC_MSG_RESULT(yes)
1152                 CFLAGS=" -pg $CFLAGS"
1153                 CXXFLAGS=" -pg $CXXFLAGS"
1154         else
1155                 AC_MSG_RESULT(no)
1156                 echo "Building profile binaries currently only supported for GCC and clang."
1157         fi
1158 else
1159         AC_MSG_RESULT(no)
1160 fi
1161
1162 # Create DATAFILE_DIR #define for config.h
1163 datafiledir=$datadir/wireshark
1164 datafiledir=`(
1165     test "x$prefix" = xNONE && prefix=$ac_default_prefix
1166     test "x$exec_prefix" = xNONE && exec_prefix=${prefix}
1167     # Ugly hack, but I don't see how this problem can be solved
1168     # properly that DATAFILE_DIR had a value starting with
1169     # "${prefix}/" instead of e.g. "/usr/local/"
1170     eval eval echo "$datafiledir"
1171 )`
1172 AC_DEFINE_UNQUOTED(DATAFILE_DIR,"$datafiledir", [Directory for data])
1173
1174 # Create DOC_DIR #define for config.h
1175 docdir=`(
1176     test "x$prefix" = xNONE && prefix=$ac_default_prefix
1177     test "x$exec_prefix" = xNONE && exec_prefix=${prefix}
1178     # Ugly hack, but I don't see how this problem can be solved
1179     # properly that DOC_DIR had a value starting with
1180     # "${prefix}/" instead of e.g. "/usr/local/"
1181     eval eval echo "$docdir"
1182 )`
1183 AC_DEFINE_UNQUOTED(DOC_DIR, "$docdir", [Directory for docs])
1184
1185 GTK2_MIN_VERSION=2.12.0
1186 AC_SUBST(GTK2_MIN_VERSION)
1187 GTK3_MIN_VERSION=3.0.0
1188 AC_SUBST(GTK3_MIN_VERSION)
1189 QT_MIN_VERSION=4.6.0
1190 AC_SUBST(QT_MIN_VERSION)
1191 # GTK+ and Qt checks; we require GTK+ $GTK2_MIN_VERSION or later or
1192 # GTK3_MIN_VERSION or later or Qt $QT_MIN_VERSION or later.
1193 #
1194 # We only do those if we're going to be building Wireshark;
1195 # otherwise, we don't have any GUI to build, so we don't use
1196 # GTK+ or Qt.
1197 #
1198 # We don't add $GTK_LIBS or $Qt_LIBS to LIBS, because we don't want to
1199 # force all programs to be built with GTK+ or Qt.
1200 #
1201 # Release dates for GTK+ versions:
1202 # 2.12.0: 14 Sep 2007
1203 # 2.14.0: 04 Sep 2008
1204 # 2.16.0: 13 Mar 2009
1205 # 2.18.0: 23 Sep 2009
1206 # 2.20.0: 23 Mar 2010
1207 # 2.22.0: 23 Sep 2010
1208 # 2.24.0: 30 Jan 2011
1209 # 3.0.0:  10 Feb 2011
1210 # 3.2.0:  25 Sep 2011
1211 # 3.4.0:  26 Mar 2012
1212 # 3.6.0:  24 Sep 2012
1213 # 3.8.0:  25 Mar 2013
1214
1215 have_qt=no
1216 have_gtk=no
1217 if test "x$enable_wireshark" = "xyes"; then
1218         if test "x$with_qt" = "xyes"; then
1219                 #
1220                 # Make sure we have a C++ compiler.
1221                 #
1222                 if test -z "$CXX"; then
1223                         AC_MSG_ERROR(Need a working C++ compiler to build Wireshark with Qt)
1224                 fi
1225
1226                 AM_PATH_QT($QT_MIN_VERSION,
1227                 [
1228                         CFLAGS="$CFLAGS $Qt_CFLAGS"
1229                         CXXFLAGS="$CXXFLAGS $Qt_CFLAGS"
1230                         have_qt=yes
1231                 ]
1232                 , [AC_MSG_ERROR([Qt is not available])])
1233
1234                 #
1235                 # XXX - greasy hack to make ui/gtk/recent.c
1236                 # compile.
1237                 #
1238                 CPPFLAGS="-DQT_GUI_LIB"
1239         fi
1240
1241         if test "x$with_gtk3" = "xyes" -a "x$with_gtk2" = "xyes" ; then
1242                 # If the user gave us --with-gtk3, use gtk3 rather than gtk2
1243                 with_gtk2="no"
1244         fi
1245
1246         if test "x$with_gtk3" = "xyes"; then
1247                 AM_PATH_GTK_3_0(3.0.0,
1248                 [
1249                         CFLAGS="$CFLAGS $GTK_CFLAGS"
1250                         CXXFLAGS="$CXXFLAGS $GTK_CFLAGS"
1251                         have_gtk=yes
1252                 ], have_gtk=no)
1253         fi
1254
1255         if test "x$with_gtk2" = "xyes"; then
1256                 AM_PATH_GTK_2_0($GTK2_MIN_VERSION,
1257                 [
1258                         CFLAGS="$CFLAGS $GTK_CFLAGS"
1259                         CXXFLAGS="$CXXFLAGS $GTK_CFLAGS"
1260                         have_gtk=yes
1261                 ], have_gtk=no)
1262         fi
1263 fi
1264
1265 GLIB_MIN_VERSION=2.16.0
1266 AC_SUBST(GLIB_MIN_VERSION)
1267 # GLib checks; we require GLib $GLIB_MIN_VERSION or later, and require gmodule
1268 # support, as we need that for dynamically loading plugins.
1269 # If we found GTK+, this doesn't add GLIB_CFLAGS to CFLAGS, because
1270 # AM_PATH_GTK will add GTK_CFLAGS to CFLAGS, and GTK_CFLAGS is a
1271 # superset of GLIB_CFLAGS.  If we didn't find GTK+, it does add
1272 # GLIB_CFLAGS to CFLAGS.
1273 # However, this means that both @GLIB_LIBS@ and @GTK_LIBS@ will be
1274 # set when generating the Makefile, so we can make programs that require
1275 # only GLib link with @GLIB_LIBS@ and make programs that require GTK+
1276 # link with @GTK_LIBS@ (which includes @GLIB_LIBS@).
1277 # We don't add $GLIB_LIBS to LIBS, because we don't want to force all
1278 # programs to be built with GLib.
1279 #
1280 # Release dates for GLib versions:
1281 # 2.14.0: 03 Aug 2007
1282 # 2.16.0: 10 Mar 2008
1283 # 2.18.0: 02 Sep 2008
1284 # 2.20.0: 13 Mar 2009
1285 # 2.22.0: 22 Sep 2009
1286 # 2.24.0: 28 Mar 2010
1287 # 2.26.0: 27 Sep 2010
1288 # 2.28.0: 08 Feb 2011
1289 # 2.30.0: 27 Sep 2011
1290 # 2.32.0: 24 Mar 2012
1291 # 2.34.0: 24 Sep 2012
1292 # 2.36.0: 25 Mar 2013
1293
1294 use_glib_cflags="true"
1295 if test "$have_gtk" = "yes" -a "$have_qt" = "yes" ; then
1296         # We have both GTK and Qt and thus will be building both wireshark
1297         # and wireshark-qt.
1298
1299         wireshark_bin="wireshark\$(EXEEXT) wireshark-qt\$(EXEEXT)"
1300         wireshark_man="wireshark.1"
1301         wireshark_SUBDIRS="codecs ui/qt ui/gtk"
1302 fi
1303 if test "$have_gtk" = "no" -a "$have_qt" = "yes" ; then
1304         # We don't have GTK+ but we have Qt.
1305
1306         wireshark_bin="wireshark-qt\$(EXEEXT)"
1307         wireshark_man="wireshark.1"
1308         wireshark_SUBDIRS="codecs ui/qt"
1309 fi
1310 if test "$have_gtk" = "yes" -a "$have_qt" = "no" ; then
1311         # We have GTK+ but not Qt.
1312
1313         wireshark_bin="wireshark\$(EXEEXT)"
1314         wireshark_man="wireshark.1"
1315         wireshark_SUBDIRS="codecs ui/gtk"
1316         use_glib_cflags="false"
1317 fi
1318 if test "$have_gtk" = "no" -a "$have_qt" = "no" ; then
1319         # We have neither GTK+ nor Qt.
1320         #
1321         # If they didn't explicitly say "--disable-wireshark",
1322         # fail (so that, unless they explicitly indicated that
1323         # they don't want Wireshark, we stop so they know they
1324         # won't be getting Wireshark unless they fix the GTK+/Qt
1325         # problem).
1326         #
1327         if test "x$enable_wireshark" = "xyes"; then
1328                 if test "x$with_gtk3" = "xyes"; then
1329                         AC_MSG_ERROR([Neither Qt nor GTK+ $GTK3_MIN_VERSION or later are available, so Wireshark can't be compiled])
1330                 else
1331                         AC_MSG_ERROR([Neither Qt nor GTK+ $GTK2_MIN_VERSION or later are available, so Wireshark can't be compiled])
1332                 fi
1333         fi
1334         wireshark_bin=""
1335         wireshark_man=""
1336 fi
1337
1338 if test "$have_gtk" = "yes" ; then
1339         # If we have GTK then add flags for it.
1340
1341         CPPFLAGS="-DGDK_PIXBUF_DISABLE_DEPRECATED $CPPFLAGS"
1342         CPPFLAGS="-DGDK_DISABLE_DEPRECATED $CPPFLAGS"
1343         CPPFLAGS="-DGTK_DISABLE_DEPRECATED $CPPFLAGS"
1344         CPPFLAGS="-DGTK_DISABLE_SINGLE_INCLUDES $CPPFLAGS"
1345         if test ! \( $gtk_config_major_version -eq 2 -a $gtk_config_minor_version -lt 20 \) ; then
1346                 # Enable GSEAL when building with GTK > 2.20
1347                 # (Versions prior to 2.22 lacked some necessary accessors.)
1348                 CPPFLAGS="-DGSEAL_ENABLE $CPPFLAGS"
1349         fi
1350 fi
1351
1352 # XXX - Is this really necessary?  When we build with both Gtk+ and Qt it works...
1353 if test "$use_glib_cflags" = "true"; then
1354         # Use GLIB_CFLAGS
1355         AM_PATH_GLIB_2_0($GLIB_MIN_VERSION,
1356         [
1357                 CFLAGS="$CFLAGS $GLIB_CFLAGS"
1358                 CXXFLAGS="$CXXFLAGS $GLIB_CFLAGS"
1359         ], AC_MSG_ERROR(GLib $GLIB_MIN_VERSION or later distribution not found.), gthread gmodule)
1360 else
1361         # Don't use GLIB_CFLAGS
1362         AM_PATH_GLIB_2_0($GLIB_MIN_VERSION, , AC_MSG_ERROR(GLib $GLIB_MIN_VERSION or later distribution not found.), gthread gmodule)
1363 fi
1364
1365 #
1366 # "make dist" requires that we have the Qt build tools.
1367 #
1368 # Annoyingly, at least on Fedora 16, uic and moc are named XXX-qt4
1369 # rather than just XXX, perhaps to allow Qt 3 and Qt 4 tools to be
1370 # installed; if they're still doing that in current Fedora releases,
1371 # perhaps there will also be XXX-qt5 when they pick up Qt 5.
1372 #
1373 AC_PATH_PROG(UIC, uic-qt4)
1374 if test "x$UIC" = x
1375 then
1376         AC_PATH_PROG(UIC, uic)
1377         if test "x$UIC" = x
1378         then
1379                 if test "x$with_qt" = "xyes"; then
1380                         #
1381                         # If you want to build with Qt, you'd better
1382                         # have uic.
1383                         #
1384                         AC_MSG_ERROR(I couldn't find uic or uic-qt4; make sure it's installed and in your path)
1385                 else
1386                         #
1387                         # We shouldn't fail here, as the user's not
1388                         # building with Qt, and we shouldn't force them
1389                         # to have Qt installed if they're not doing so.
1390                         # "make dist" will fail if they do that, but
1391                         # we don't know whether they'll be doing that,
1392                         # so this is the best we can do.
1393                         #
1394                         UIC=uic
1395                 fi
1396         fi
1397 fi
1398 AC_SUBST(UIC)
1399 AC_PATH_PROG(MOC, moc-qt4)
1400 if test "x$MOC" = x
1401 then
1402         AC_PATH_PROG(MOC, moc)
1403         if test "x$MOC" = x
1404         then
1405                 if test "x$with_qt" = "xyes"; then
1406                         #
1407                         # If you want to build with Qt, you'd better
1408                         # have moc.
1409                         #
1410                         AC_MSG_ERROR(I couldn't find moc or moc-qt4; make sure it's installed and in your path)
1411                 else
1412                         #
1413                         # We shouldn't fail here, as the user's not
1414                         # building with Qt, and we shouldn't force them
1415                         # to have Qt installed if they're not doing so.
1416                         # "make dist" will fail if they do that, but
1417                         # we don't know whether they'll be doing that,
1418                         # so this is the best we can do.
1419                         #
1420                         MIC=moc
1421                 fi
1422         fi
1423 fi
1424 AC_SUBST(MOC)
1425
1426 # Error out if a glib header other than a "top level" header
1427 #  (glib.h, glib-object.h, gio.h) or certain other headers( e.g.,gmodule.h)
1428 #  is used.
1429 CPPFLAGS="-DG_DISABLE_SINGLE_INCLUDES $CPPFLAGS"
1430
1431 # Error out on the usage of deprecated glib functions
1432 CPPFLAGS="-DG_DISABLE_DEPRECATED $CPPFLAGS"
1433
1434 #
1435 # Check whether GLib modules are supported, to determine whether we
1436 # can support plugins.
1437 #
1438 AC_MSG_CHECKING(whether GLib supports loadable modules)
1439 ac_save_CFLAGS="$CFLAGS"
1440 ac_save_LIBS="$LIBS"
1441 CFLAGS="$CFLAGS $GLIB_CFLAGS"
1442 LIBS="$GLIB_LIBS $LIBS"
1443 AC_TRY_RUN([
1444 #include <glib.h>
1445 #include <gmodule.h>
1446 #include <stdio.h>
1447 #include <stdlib.h>
1448
1449 int
1450 main ()
1451 {
1452   if (g_module_supported())
1453     return 0;   /* success */
1454   else
1455     return 1;   /* failure */
1456 }
1457 ], ac_cv_glib_supports_modules=yes, ac_cv_glib_supports_modules=no,
1458    [echo $ac_n "cross compiling; assumed OK... $ac_c"
1459     ac_cv_glib_supports_modules=yes])
1460 CFLAGS="$ac_save_CFLAGS"
1461 LIBS="$ac_save_LIBS"
1462 if test "$ac_cv_glib_supports_modules" = yes ; then
1463   AC_MSG_RESULT(yes)
1464   have_plugins=yes
1465 else
1466   AC_MSG_RESULT(no)
1467   have_plugins=no
1468 fi
1469
1470 #
1471 # If we have <dlfcn.h>, check whether we can use dladdr to find a
1472 # filename (hopefully, a full pathname, but no guarantees) for
1473 # the executable.
1474 #
1475 if test "$ac_cv_header_dlfcn_h" = "yes"
1476 then
1477         AC_MSG_CHECKING(whether dladdr can be used to find the pathname of an executable)
1478         ac_save_CFLAGS="$CFLAGS"
1479         ac_save_LIBS="$LIBS"
1480         CFLAGS="$CFLAGS $GLIB_CFLAGS"
1481         LIBS="$GLIB_LIBS $LIBS"
1482         AC_TRY_RUN([
1483 #define _GNU_SOURCE     /* required on Linux, sigh */
1484 #include <dlfcn.h>
1485
1486 int
1487 main(void)
1488 {
1489         Dl_info info;
1490
1491         if (!dladdr((void *)main, &info))
1492                 return 1;       /* failure */
1493         return 0;               /* assume success */
1494 }
1495 ], ac_cv_dladdr_finds_executable_path=yes, ac_cv_dladdr_finds_executable_path=no,
1496    [echo $ac_n "cross compiling; assumed OK... $ac_c"
1497     ac_cv_dladdr_finds_executable_path=yes])
1498         CFLAGS="$ac_save_CFLAGS"
1499         LIBS="$ac_save_LIBS"
1500         if test x$ac_cv_dladdr_finds_executable_path = xyes
1501         then
1502                 AC_DEFINE(DLADDR_FINDS_EXECUTABLE_PATH, 1, [Define if dladdr can be used to find the path of the executable])
1503         fi
1504         AC_MSG_RESULT($ac_cv_dladdr_finds_executable_path)
1505 fi
1506
1507 #
1508 # Check whether GLib's printf supports thousands grouping. (This might
1509 # be different from the system's printf since GLib can optionally use
1510 # its own printf implementation.)
1511 #
1512 AC_MSG_CHECKING(whether GLib supports POSIX/XSI thousands grouping)
1513 ac_save_CFLAGS="$CFLAGS"
1514 ac_save_LIBS="$LIBS"
1515 CFLAGS="$CFLAGS $GLIB_CFLAGS"
1516 LIBS="$GLIB_LIBS $LIBS"
1517 AC_TRY_RUN([
1518 #include <glib.h>
1519 #include <locale.h>
1520 #include <stdio.h>
1521 #include <string.h>
1522
1523 int
1524 main ()
1525 {
1526   gchar *str;
1527   setlocale(LC_ALL, "en_US.UTF-8");
1528   str = g_strdup_printf("%'u", 123456);
1529   return (strcmp (str, "123,456") != 0);
1530 }
1531 ], ac_cv_glib_supports_printf_grouping=yes, ac_cv_glib_supports_printf_grouping=no,
1532    [echo $ac_n "cross compiling; playing it safe... $ac_c"
1533     ac_cv_glib_supports_printf_grouping=no])
1534 CFLAGS="$ac_save_CFLAGS"
1535 LIBS="$ac_save_LIBS"
1536 if test "$ac_cv_glib_supports_printf_grouping" = yes ; then
1537   AC_MSG_RESULT(yes)
1538   AC_DEFINE(HAVE_GLIB_PRINTF_GROUPING, 1, [Define if your printf() function supports thousands grouping.])
1539 else
1540   AC_MSG_RESULT(no)
1541 fi
1542
1543 if test "x$have_gtk" = "xyes"
1544 then
1545     #
1546     # We have GTK+; do we want the OS X integration functions and,
1547     # if so, do we have them and, if so, which versions do we have,
1548     # the old Carbon-based ones or the new Cocoa-based ones?
1549     #
1550     AC_MSG_CHECKING(whether to use OS X integration functions)
1551
1552     AC_ARG_WITH(osx-integration,
1553       AC_HELP_STRING( [--with-osx-integration],
1554                       [use OS X integration functions @<:@default=yes, if available@:>@]),
1555     [
1556         if test $withval = no
1557         then
1558             want_osx_integration=no
1559         else
1560             want_osx_integration=yes
1561         fi
1562     ],[
1563         want_osx_integration=yes
1564     ])
1565     if test "x$want_osx_integration" = "xno"; then
1566         AC_MSG_RESULT(no)
1567     else
1568         AC_MSG_RESULT(yes)
1569         AC_WIRESHARK_OSX_INTEGRATION_CHECK
1570     fi
1571 fi
1572
1573 AC_SUBST(wireshark_bin)
1574 AC_SUBST(wireshark_man)
1575 AM_CONDITIONAL(HAVE_Qt, test "$have_qt" = "yes")
1576 AM_CONDITIONAL(HAVE_GTK, test "$have_gtk" = "yes")
1577
1578
1579 # Enable/disable tshark
1580
1581 AC_ARG_ENABLE(tshark,
1582   AC_HELP_STRING( [--enable-tshark],
1583                   [build TShark @<:@default=yes@:>@]),
1584     tshark=$enableval,enable_tshark=yes)
1585
1586 if test "x$enable_tshark" = "xyes" ; then
1587         tshark_bin="tshark\$(EXEEXT)"
1588         tshark_man="tshark.1"
1589         wiresharkfilter_man="wireshark-filter.4"
1590 else
1591         tshark_bin=""
1592         tshark_man=""
1593 fi
1594 AC_SUBST(tshark_bin)
1595 AC_SUBST(tshark_man)
1596 AC_SUBST(wiresharkfilter_man)
1597
1598
1599
1600 # Enable/disable editcap
1601
1602 AC_ARG_ENABLE(editcap,
1603   AC_HELP_STRING( [--enable-editcap],
1604                   [build editcap @<:@default=yes@:>@]),
1605     enable_editcap=$enableval,enable_editcap=yes)
1606
1607 if test "x$enable_editcap" = "xyes" ; then
1608         editcap_bin="editcap\$(EXEEXT)"
1609         editcap_man="editcap.1"
1610 else
1611         editcap_bin=""
1612         editcap_man=""
1613 fi
1614 AC_SUBST(editcap_bin)
1615 AC_SUBST(editcap_man)
1616
1617
1618
1619 # Enable/disable echld
1620
1621 AC_ARG_ENABLE(echld,
1622   AC_HELP_STRING( [--enable-echld],
1623                   [support echld]),
1624     have_echld=$enableval,have_echld=no)
1625
1626 AM_CONDITIONAL(HAVE_ECHLD, test "x$have_echld" = "xyes")
1627 if test "x$have_echld" = "xyes"
1628 then
1629   AC_DEFINE(HAVE_ECHLD, 1, [Define if echld is enabled])
1630   echld_test_bin="echld_test\$(EXEEXT)"
1631   echld_dir="echld"
1632 else
1633   have_echld="no"
1634   echld_test_bin=""
1635   echld_dir=""
1636 fi
1637 AC_SUBST(echld_test_bin)
1638 AC_SUBST(echld_dir)
1639
1640
1641 # Enabling/disabling of dumpcap is done later (after we know if we have PCAP
1642 # or not)
1643
1644 # Enable/disable capinfos
1645
1646 AC_ARG_ENABLE(capinfos,
1647   AC_HELP_STRING( [--enable-capinfos],
1648                   [build capinfos @<:@default=yes@:>@]),
1649     enable_capinfos=$enableval,enable_capinfos=yes)
1650
1651 if test "x$enable_capinfos" = "xyes" ; then
1652         capinfos_bin="capinfos\$(EXEEXT)"
1653         capinfos_man="capinfos.1"
1654 else
1655         capinfos_bin=""
1656         capinfos_man=""
1657 fi
1658 AC_SUBST(capinfos_bin)
1659 AC_SUBST(capinfos_man)
1660
1661
1662 # Enable/disable mergecap
1663
1664 AC_ARG_ENABLE(mergecap,
1665   AC_HELP_STRING( [--enable-mergecap],
1666                   [build mergecap @<:@default=yes@:>@]),
1667     enable_mergecap=$enableval,enable_mergecap=yes)
1668
1669 if test "x$enable_mergecap" = "xyes" ; then
1670         mergecap_bin="mergecap\$(EXEEXT)"
1671         mergecap_man="mergecap.1"
1672 else
1673         mergecap_bin=""
1674         mergecap_man=""
1675 fi
1676 AC_SUBST(mergecap_bin)
1677 AC_SUBST(mergecap_man)
1678
1679
1680 # Enable/disable reordercap
1681
1682 AC_ARG_ENABLE(reordercap,
1683   AC_HELP_STRING( [--enable-reordercap],
1684                   [build reordercap @<:@default=yes@:>@]),
1685     enable_reordercap=$enableval,enable_reordercap=yes)
1686
1687 if test "x$enable_reordercap" = "xyes" ; then
1688         reordercap_bin="reordercap\$(EXEEXT)"
1689         reordercap_man="reordercap.1"
1690 else
1691         reordercap_bin=""
1692         reordercap_man=""
1693 fi
1694 AC_SUBST(reordercap_bin)
1695 AC_SUBST(reordercap_man)
1696
1697
1698 # Enable/disable text2pcap
1699
1700 AC_ARG_ENABLE(text2pcap,
1701   AC_HELP_STRING( [--enable-text2pcap],
1702                   [build text2pcap @<:@default=yes@:>@]),
1703     text2pcap=$enableval,enable_text2pcap=yes)
1704
1705 if test "x$enable_text2pcap" = "xyes" ; then
1706         text2pcap_bin="text2pcap\$(EXEEXT)"
1707         text2pcap_man="text2pcap.1"
1708 else
1709         text2pcap_bin=""
1710         text2pcap_man=""
1711 fi
1712 AC_SUBST(text2pcap_bin)
1713 AC_SUBST(text2pcap_man)
1714
1715
1716 # Enable/disable dftest
1717
1718 AC_ARG_ENABLE(dftest,
1719   AC_HELP_STRING( [--enable-dftest],
1720                   [build dftest @<:@default=yes@:>@]),
1721     enable_dftest=$enableval,enable_dftest=yes)
1722
1723 if test "x$enable_dftest" = "xyes" ; then
1724         dftest_bin="dftest\$(EXEEXT)"
1725         dftest_man="dftest.1"
1726 else
1727         dftest_bin=""
1728         dftest_man=""
1729 fi
1730 AC_SUBST(dftest_bin)
1731 AC_SUBST(dftest_man)
1732
1733
1734 # Enable/disable randpkt
1735
1736 AC_ARG_ENABLE(randpkt,
1737   AC_HELP_STRING( [--enable-randpkt],
1738                   [build randpkt @<:@default=yes@:>@]),
1739     enable_randpkt=$enableval,enable_randpkt=yes)
1740
1741 if test "x$enable_randpkt" = "xyes" ; then
1742         randpkt_bin="randpkt\$(EXEEXT)"
1743         randpkt_man="randpkt.1"
1744 else
1745         randpkt_bin=""
1746         randpkt_man=""
1747 fi
1748 AC_SUBST(randpkt_bin)
1749 AC_SUBST(randpkt_man)
1750
1751
1752
1753 dnl Checks for "gethostbyname()" - and "-lnsl", if we need it to get
1754 dnl "gethostbyname()".
1755 AC_WIRESHARK_GETHOSTBY_LIB_CHECK
1756
1757 dnl Checks for "connect()", used as a proxy for "socket()" - and
1758 dnl "-lsocket", if we need it to get "connect()".
1759 AC_WIRESHARK_SOCKET_LIB_CHECK
1760
1761 dnl pcap check
1762 AC_MSG_CHECKING(whether to use libpcap for packet capture)
1763
1764 AC_ARG_WITH(pcap,
1765   AC_HELP_STRING( [--with-pcap@<:@=DIR@:>@],
1766                   [use libpcap for packet capturing @<:@default=yes@:>@]),
1767 [
1768         if test $withval = no
1769         then
1770                 want_pcap=no
1771         elif test $withval = yes
1772         then
1773                 want_pcap=yes
1774         else
1775                 want_pcap=yes
1776                 pcap_dir=$withval
1777         fi
1778 ],[
1779         want_pcap=yes
1780         pcap_dir=
1781 ])
1782 if test "x$want_pcap" = "xno" ; then
1783         AC_MSG_RESULT(no)
1784 else
1785         AC_MSG_RESULT(yes)
1786         AC_WIRESHARK_PCAP_CHECK
1787 fi
1788
1789
1790 dnl Check for airpcap
1791 AC_MSG_CHECKING(whether to include airpcap support)
1792 AC_ARG_ENABLE(airpcap,
1793   AC_HELP_STRING( [--enable-airpcap],
1794                   [use AirPcap in Wireshark @<:@default=yes@:>@]),
1795   enable_airpcap=$enableval, enable_airpcap=yes)
1796
1797 if test x$enable_airpcap = xyes; then
1798         if test "x$want_pcap" = "xno" ; then
1799                 enable_airpcap=no
1800                 AC_MSG_RESULT(pcap not available - disabling airpcap)
1801         else
1802                 AC_MSG_RESULT(yes)
1803                 AC_DEFINE(HAVE_AIRPCAP, 1, [Enable AirPcap])
1804         fi
1805 else
1806         AC_MSG_RESULT(no)
1807 fi
1808
1809
1810 dnl dumpcap check
1811 AC_MSG_CHECKING(whether to build dumpcap)
1812
1813 AC_ARG_ENABLE(dumpcap,
1814   AC_HELP_STRING( [--enable-dumpcap],
1815                   [build dumpcap @<:@default=yes@:>@]),
1816     enable_dumpcap=$enableval,enable_dumpcap=yes)
1817
1818 if test "x$enable_dumpcap" = "xyes" ; then
1819         if test "x$want_pcap" = "xno" ; then
1820                 enable_dumpcap=no
1821                 AC_MSG_RESULT(pcap not available - disabling dumpcap)
1822         else
1823                 AC_MSG_RESULT(yes)
1824         fi
1825 else
1826         AC_MSG_RESULT(no)
1827 fi
1828
1829 if test "x$enable_dumpcap" = "xyes" ; then
1830         dumpcap_bin="dumpcap\$(EXEEXT)"
1831         dumpcap_man="dumpcap.1"
1832 else
1833         dumpcap_bin=""
1834         dumpcap_man=""
1835 fi
1836 AC_SUBST(dumpcap_bin)
1837 AC_SUBST(dumpcap_man)
1838
1839 # Enable/disable rawshark
1840
1841 dnl rawshark check
1842 AC_MSG_CHECKING(whether to build rawshark)
1843
1844 AC_ARG_ENABLE(rawshark,
1845   AC_HELP_STRING( [--enable-rawshark],
1846                   [build rawshark @<:@default=yes@:>@]),
1847     rawshark=$enableval,enable_rawshark=yes)
1848
1849 if test "x$enable_rawshark" = "xyes" ; then
1850         if test "x$want_pcap" = "xno" ; then
1851                 enable_rawshark=no
1852                 AC_MSG_RESULT(pcap not available - disabling rawshark)
1853         else
1854                 AC_MSG_RESULT(yes)
1855         fi
1856 else
1857         AC_MSG_RESULT(no)
1858 fi
1859
1860 if test "x$enable_rawshark" = "xyes" ; then
1861         rawshark_bin="rawshark\$(EXEEXT)"
1862         rawshark_man="rawshark.1"
1863 else
1864         rawshark_bin=""
1865         rawshark_man=""
1866 fi
1867 AC_SUBST(rawshark_bin)
1868 AC_SUBST(rawshark_man)
1869
1870 dnl Use pcap-ng by default
1871 AC_ARG_ENABLE(pcap-ng-default,
1872   AC_HELP_STRING( [--enable-pcap-ng-default],
1873                   [use the pcap-ng file format by default instead of pcap @<:@default=yes@:>@]),
1874     enable_pcap_ng_default=$enableval,enable_pcap_ng_default=yes)
1875 if test x$enable_pcap_ng_default = xyes; then
1876         AC_DEFINE(PCAP_NG_DEFAULT, 1, [Support for pcap-ng])
1877 fi
1878
1879 dnl pcap remote check
1880 AC_MSG_CHECKING(whether to use libpcap remote capturing feature)
1881
1882 AC_ARG_WITH(pcap-remote,
1883     AC_HELP_STRING([--with-pcap-remote],
1884                    [use libpcap remote capturing (requires libpcap)]),
1885 [
1886     if test $withval = no
1887     then
1888         want_pcap_remote=no
1889     else
1890         want_pcap_remote=yes
1891     fi
1892 ],[
1893     want_pcap_remote=no
1894 ])
1895 if test "x$want_pcap_remote" = "xno" -o "x$want_pcap" = "xno" ; then
1896     AC_MSG_RESULT(no)
1897 else
1898     AC_MSG_RESULT(yes)
1899     AC_WIRESHARK_PCAP_REMOTE_CHECK
1900 fi
1901
1902 dnl zlib check
1903 AC_MSG_CHECKING(whether to use zlib for gzip compression and decompression)
1904
1905 AC_ARG_WITH(zlib,
1906   AC_HELP_STRING([--with-zlib@<:@=DIR@:>@],
1907                  [use zlib (located in directory DIR, if supplied) for gzip compression and decompression @<:@default=yes, if available@:>@]),
1908 [
1909         if test "x$withval" = "xno"
1910         then
1911                 want_zlib=no
1912         elif test "x$withval" = "xyes"
1913         then
1914                 want_zlib=yes
1915         else
1916                 want_zlib=yes
1917                 zlib_dir="$withval"
1918         fi
1919 ],[
1920         #
1921         # Use zlib if it's present, otherwise don't.
1922         #
1923         want_zlib=ifavailable
1924         zlib_dir=
1925 ])
1926 if test "x$want_zlib" = "xno" ; then
1927         AC_MSG_RESULT(no)
1928 else
1929         AC_MSG_RESULT(yes)
1930         AC_WIRESHARK_ZLIB_CHECK
1931         if test "x$want_zlib" = "xno" ; then
1932                 AC_MSG_RESULT(zlib not found - disabling gzip compression and decompression)
1933         else
1934                 if test "x$ac_cv_func_inflatePrime" = "xno" ; then
1935                         AC_MSG_RESULT(inflatePrime not found in zlib - disabling gzipped capture file support)
1936                 fi
1937         fi
1938 fi
1939
1940 dnl Lua check
1941 AC_MSG_CHECKING(whether to use liblua for the Lua scripting plugin)
1942
1943 AC_ARG_WITH(lua,
1944   AC_HELP_STRING( [--with-lua@<:@=DIR@:>@],
1945                   [use liblua (located in directory DIR, if supplied) for the Lua scripting plugin @<:@default=yes, if available@:>@]),
1946 [
1947         if test $withval = no
1948         then
1949                 want_lua=no
1950         elif test $withval = yes
1951         then
1952                 want_lua=yes
1953         else
1954                 want_lua=yes
1955                 lua_dir=$withval
1956         fi
1957 ],[
1958         #
1959         # Use liblua by default
1960         #
1961         want_lua=ifavailable
1962         lua_dir=
1963 ])
1964 if test "x$want_lua" = "xno" ; then
1965         AC_MSG_RESULT(no)
1966 else
1967         AC_MSG_RESULT(yes)
1968         AC_WIRESHARK_LIBLUA_CHECK
1969         if test "x$want_lua" = "xno" ; then
1970                 AC_MSG_RESULT(liblua not found - disabling support for the lua scripting plugin)
1971         fi
1972 fi
1973 AM_CONDITIONAL(HAVE_LIBLUA, test x$want_lua = xyes)
1974
1975
1976 dnl portaudio check
1977 AC_MSG_CHECKING(whether to use libportaudio for the rtp_player)
1978
1979 AC_ARG_WITH(portaudio,
1980   AC_HELP_STRING( [--with-portaudio@<:@=DIR@:>@],
1981                   [use libportaudio (located in directory DIR, if supplied) for the rtp_player @<:@default=yes, if available@:>@]),
1982 [
1983         if test $withval = no
1984         then
1985                 want_portaudio=no
1986         elif test $withval = yes
1987         then
1988                 want_portaudio=yes
1989         else
1990                 want_portaudio=yes
1991                 portaudio_dir=$withval
1992         fi
1993 ],[
1994         #
1995         # Use libportaudio by default
1996         #
1997         want_portaudio=ifavailable
1998         portaudio_dir=
1999 ])
2000 if test "x$want_portaudio" = "xno" ; then
2001         AC_MSG_RESULT(no)
2002 else
2003         AC_MSG_RESULT(yes)
2004         AC_WIRESHARK_LIBPORTAUDIO_CHECK
2005         if test "x$want_portaudio" = "xno" ; then
2006                 AC_MSG_RESULT(libportaudio not found - disabling support for the rtp_player)
2007         fi
2008 fi
2009 AM_CONDITIONAL(HAVE_LIBPORTAUDIO, test x$want_portaudio = xyes)
2010
2011
2012 dnl ipv6 check
2013 AC_ARG_ENABLE(ipv6,
2014   AC_HELP_STRING( [--enable-ipv6],
2015                   [use IPv6 name resolution, if available @<:@default=yes@:>@]),
2016     enable_ipv6=$enableval,enable_ipv6=yes)
2017
2018 AC_MSG_CHECKING(whether to enable ipv6 name resolution if available)
2019 if test "x$enable_ipv6" = "xno" ; then
2020         AC_MSG_RESULT(no)
2021 else
2022         AC_MSG_RESULT(yes)
2023         AC_WIRESHARK_IPV6_STACK
2024 fi
2025
2026
2027 dnl Check if dumpcap should be installed with filesystem capabilities
2028 AC_PATH_PROG(SETCAP, setcap)
2029 AC_ARG_ENABLE(setcap-install,
2030   AC_HELP_STRING( [--enable-setcap-install],
2031                   [install dumpcap with cap_net_admin and cap_net_raw @<:@default=no@:>@]),
2032     enable_setcap_install=$enableval,enable_setcap_install=no)
2033
2034 AC_MSG_CHECKING(whether to install dumpcap with cap_net_admin and cap_net_raw capabilities)
2035 if test "x$enable_setcap_install" = "xno" ; then
2036         AC_MSG_RESULT(no)
2037 else
2038         if test "x$SETCAP" = "x" ; then
2039                 AC_MSG_RESULT(no. Setcap not found)
2040         elif test "x$enable_dumpcap" = "xno" ; then
2041                 AC_MSG_ERROR(Setcap install works only with dumpcap but dumpcap is disabled)
2042         else
2043                 AC_MSG_RESULT(yes)
2044         fi
2045 fi
2046
2047 AM_CONDITIONAL(SETCAP_INSTALL, test x$enable_setcap_install = xyes)
2048
2049 dnl Check if dumpcap should be installed setuid
2050 AC_ARG_ENABLE(setuid-install,
2051   AC_HELP_STRING( [--enable-setuid-install],
2052                   [install dumpcap as setuid @<:@default=no@:>@]),
2053     enable_setuid_install=$enableval,enable_setuid_install=no)
2054
2055 AC_MSG_CHECKING(whether to install dumpcap setuid)
2056 if test "x$enable_setuid_install" = "xno" ; then
2057         AC_MSG_RESULT(no)
2058 else
2059         if test "x$enable_setcap_install" = "xyes" ; then
2060                 enable_setuid_install=no
2061                 AC_MSG_RESULT(no; using setcap instead)
2062         elif test "x$enable_dumpcap" = "xno" ; then
2063                 AC_MSG_ERROR(Setuid install works only with dumpcap but dumpcap is disabled)
2064         else
2065                 AC_MSG_RESULT(yes)
2066         fi
2067 fi
2068
2069 AM_CONDITIONAL(SETUID_INSTALL, test x$enable_setuid_install = xyes)
2070 AC_CHECK_FUNCS(setresuid setresgid)
2071
2072 dnl ...but our Network Operations group is named "no"!
2073 DUMPCAP_GROUP=''
2074 AC_ARG_WITH(dumpcap-group,
2075   AC_HELP_STRING( [--with-dumpcap-group=GROUP],
2076                   [restrict dumpcap to GROUP]),
2077 [
2078   if test "x$withval" = "xyes"; then
2079       AC_MSG_ERROR([No dumpcap group specified.])
2080   elif test "x$withval" != "xno"; then
2081       if test "x$enable_dumpcap" = "xno" ; then
2082           AC_MSG_ERROR(dumpcap group install works only with dumpcap but dumpcap is disabled)
2083       fi
2084       AC_MSG_RESULT($withval)
2085       DUMPCAP_GROUP="$withval"
2086   fi
2087 ])
2088 AC_SUBST(DUMPCAP_GROUP)
2089 AM_CONDITIONAL(HAVE_DUMPCAP_GROUP, test x$DUMPCAP_GROUP != x)
2090
2091 dnl libcap (not libpcap) check
2092 LIBCAP_LIBS=''
2093 AC_MSG_CHECKING(whether to use the libcap capabilities library)
2094
2095 AC_ARG_WITH(libcap,
2096   AC_HELP_STRING( [--with-libcap@<:@=DIR@:>@],
2097                   [use libcap (located in directory DIR, if supplied) for POSIX.1e capabilities management @<:@default=yes, if present@:>@]),
2098 [
2099 if   test "x$withval" = "xno";  then
2100         want_libcap=no
2101 elif test "x$withval" = "xyes"; then
2102         want_libcap=yes
2103 elif test -d "$withval"; then
2104         want_libcap=yes
2105         AC_WIRESHARK_ADD_DASH_L(LDFLAGS, ${withval}/lib)
2106 fi
2107 ])
2108 if test "x$with_libcap" = "xno" ; then
2109         AC_MSG_RESULT(no)
2110 else
2111         AC_MSG_RESULT(yes)
2112         AC_WIRESHARK_LIBCAP_CHECK
2113 fi
2114 AC_SUBST(LIBCAP_LIBS)
2115
2116 dnl Checks for header files.
2117 dnl Some of these may not be needed: http://hacks.owlfolio.org/header-survey/
2118 AC_CHECK_HEADERS(direct.h dirent.h fcntl.h grp.h inttypes.h netdb.h pwd.h stdarg.h stddef.h unistd.h)
2119 AC_CHECK_HEADERS(sys/ioctl.h sys/param.h sys/socket.h sys/sockio.h sys/stat.h sys/time.h sys/types.h sys/utsname.h sys/wait.h)
2120 AC_CHECK_HEADERS(netinet/in.h)
2121 AC_CHECK_HEADERS(arpa/inet.h arpa/nameser.h)
2122
2123 dnl SSL Check
2124 SSL_LIBS=''
2125 AC_MSG_CHECKING(whether to use SSL library)
2126
2127 AC_ARG_WITH(ssl,
2128   AC_HELP_STRING( [--with-ssl@<:@=DIR@:>@],
2129                   [use SSL crypto library (located in directory DIR, if supplied) @<:@default=no@:>@]),
2130 [
2131 if test "x$withval" = "xno";  then
2132         want_ssl=no
2133 elif test "x$withval" = "xyes"; then
2134         want_ssl=yes
2135 elif test -d "$withval"; then
2136         want_ssl=yes
2137         AC_WIRESHARK_ADD_DASH_L(LDFLAGS, ${withval}/lib)
2138 fi
2139 ],[
2140         want_ssl=no
2141 ])
2142 if test "x$want_ssl" = "xyes"; then
2143         AC_MSG_RESULT(yes)
2144         AC_CHECK_LIB(crypto,EVP_md5,
2145             [
2146                 SSL_LIBS=-lcrypto
2147             ],
2148             [
2149                 AC_MSG_ERROR([SSL crypto library was requested, but is not available])
2150             ])
2151 else
2152         AC_MSG_RESULT(no)
2153 fi
2154 AC_SUBST(SSL_LIBS)
2155
2156 dnl kerberos check
2157 AC_MSG_CHECKING(whether to use Kerberos library)
2158
2159 AC_ARG_WITH(krb5,
2160   AC_HELP_STRING( [--with-krb5@<:@=DIR@:>@],
2161                   [use Kerberos library (located in directory DIR, if supplied) to use in Kerberos dissection @<:@default=yes@:>@]),
2162 [
2163         if test $withval = no
2164         then
2165                 want_krb5=no
2166         elif test $withval = yes
2167         then
2168                 want_krb5=yes
2169         else
2170                 want_krb5=yes
2171                 krb5_dir=$withval
2172         fi
2173 ],[
2174         #
2175         # Use Kerberos library if available, otherwise don't.
2176         #
2177         want_krb5=ifavailable
2178         krb5_dir=
2179 ])
2180 if test "x$want_krb5" = "xno" ; then
2181         AC_MSG_RESULT(no)
2182 else
2183         AC_MSG_RESULT(yes)
2184         AC_WIRESHARK_KRB5_CHECK
2185 fi
2186
2187
2188 dnl c-ares Check
2189 C_ARES_LIBS=''
2190 AC_MSG_CHECKING(whether to use the c-ares library if available)
2191
2192 AC_ARG_WITH(c-ares,
2193   AC_HELP_STRING( [--with-c-ares@<:@=DIR@:>@],
2194                   [use c-ares (located in directory DIR, if supplied) - supersedes --with-adns @<:@default=yes, if present@:>@]),
2195 [
2196 if   test "x$withval" = "xno";  then
2197         want_c_ares=no
2198 elif test "x$withval" = "xyes"; then
2199         want_c_ares=yes
2200 elif test -d "$withval"; then
2201         want_c_ares=yes
2202         AC_WIRESHARK_ADD_DASH_L(LDFLAGS, ${withval}/lib)
2203 fi
2204 ])
2205 if test "x$want_c_ares" = "xno" ; then
2206         AC_MSG_RESULT(no)
2207 else
2208         AC_MSG_RESULT(yes)
2209         AC_WIRESHARK_C_ARES_CHECK
2210 fi
2211 AC_SUBST(C_ARES_LIBS)
2212
2213 dnl ADNS Check
2214 ADNS_LIBS=''
2215 AC_MSG_CHECKING(whether to use the GNU ADNS library if available)
2216
2217 AC_ARG_WITH(adns,
2218   AC_HELP_STRING( [--with-adns@<:@=DIR@:>@],
2219                   [use GNU ADNS (located in directory DIR, if supplied) @<:@default=yes, if present@:>@]),
2220 [
2221 if   test "x$withval" = "xno";  then
2222         want_adns=no
2223 elif test "x$withval" = "xyes"; then
2224         want_adns=yes
2225 elif test -d "$withval"; then
2226         want_adns=yes
2227         AC_WIRESHARK_ADD_DASH_L(LDFLAGS, ${withval}/lib)
2228 fi
2229 ])
2230 if test "x$want_adns" = "xno" -o "x$have_good_c_ares" = "xyes" ; then
2231         AC_MSG_RESULT(no)
2232 else
2233         AC_MSG_RESULT(yes)
2234         AC_WIRESHARK_ADNS_CHECK
2235 fi
2236 AC_SUBST(ADNS_LIBS)
2237
2238 dnl GEOIP Check
2239 GEOIP_LIBS=''
2240 AC_MSG_CHECKING(whether to use the GeoIP IP address mapping library if available)
2241
2242 AC_ARG_WITH(geoip,
2243   AC_HELP_STRING( [--with-geoip@<:@=DIR@:>@],
2244                   [use GeoIP (located in directory DIR, if supplied) @<:@default=yes, if present@:>@]),
2245 [
2246 if   test "x$withval" = "xno";  then
2247         want_geoip=no
2248 elif test "x$withval" = "xyes"; then
2249         want_geoip=yes
2250 elif test -d "$withval"; then
2251         want_geoip=yes
2252         AC_WIRESHARK_ADD_DASH_L(LDFLAGS, ${withval}/lib)
2253 fi
2254 ])
2255 if test "x$want_geoip" = "xno"; then
2256         AC_MSG_RESULT(no)
2257 else
2258         AC_MSG_RESULT(yes)
2259         AC_WIRESHARK_GEOIP_CHECK
2260 fi
2261 AC_SUBST(GEOIP_LIBS)
2262
2263 # Warning: this Python scripting appears to be broken (does not work at all).
2264 # Running it also causes Valgrind to complain about all sorts of memory errors.
2265 # Suggestion: do not enable it unless you are working on fixing it.
2266 #
2267 # An alternative might be https://code.google.com/p/pyreshark/
2268 #
2269 dnl Python devel Check
2270 AC_MSG_CHECKING(whether to use the Python interpreter for scripting)
2271
2272 AC_ARG_WITH(broken-python,
2273     AC_HELP_STRING( [--with-broken-python@<:@=DIR@:>@],
2274                     [use the (BROKEN) Python interpreter (installed in DIR, if supplied) @<:@default=no@:>@]),
2275 [
2276         pythondir='${libdir}/wireshark/python/${VERSION}'
2277         if test "x$withval" = "xno"
2278         then
2279                 want_python=no
2280         elif test "x$withval" = "xyes"
2281         then
2282                 want_python=yes
2283         else
2284                 want_python=yes
2285                 pythondir="$withval"
2286         fi
2287 ],[
2288         # By default (user didn't explicitly enable Python), don't enable
2289         # Python support.
2290         #
2291         want_python=no
2292         #pythondir='${libdir}/wireshark/python/${VERSION}'
2293 ])
2294 if test "x$want_python" = "xno" ; then
2295         AC_MSG_RESULT(no)
2296 else
2297         AC_MSG_RESULT(yes)
2298         AC_WIRESHARK_PYTHON_CHECK
2299 fi
2300 AM_CONDITIONAL(HAVE_LIBPY, test x$want_python != xno)
2301 AC_SUBST(pythondir)
2302
2303 #
2304 # Define WS_MSVC_NORETURN appropriately for declarations of routines that
2305 # never return (just like Charlie on the MTA).
2306 #
2307 # Note that MSVC++ expects __declspec(noreturn) to precede the function
2308 # name and GCC, as far as I know, expects __attribute__((noreturn)) to
2309 # follow the function name, so we need two different flavors of
2310 # noreturn tag.
2311 #
2312 AC_DEFINE(WS_MSVC_NORETURN,, [Define as the string to precede declarations of routines that never return])
2313
2314 dnl Checks for typedefs, structures, and compiler characteristics.
2315 # AC_C_CONST
2316
2317 # Check how we can get the time zone abbreviation
2318 AC_WIRESHARK_TIMEZONE_ABBREV
2319
2320 # We need to know whether "struct stat" has an "st_flags" member
2321 # for file_user_immutable().
2322
2323 AC_WIRESHARK_STRUCT_ST_FLAGS
2324
2325 # We need to know whether "struct sockaddr" has an "sa_len" member
2326 # for get_interface_list().
2327
2328 AC_WIRESHARK_STRUCT_SA_LEN
2329
2330 # We must know our byte order
2331 AC_C_BIGENDIAN
2332
2333 # Checks whether "-traditional" is needed when using "ioctl".
2334 # XXX - do we need this?
2335 AC_PROG_GCC_TRADITIONAL
2336
2337 GETOPT_LO=""
2338 AC_CHECK_FUNC(getopt,
2339   [GETOPT_LO=""
2340    AC_DEFINE(HAVE_GETOPT, 1, [Define to 1 if you have the getopt function.])
2341   ],
2342   GETOPT_LO="wsgetopt.lo"
2343 )
2344 if test "$ac_cv_func_getopt" = no ; then
2345   GETOPT_LO="wsgetopt.lo"
2346 fi
2347 AM_CONDITIONAL(NEED_GETOPT_LO, test "x$ac_cv_func_getopt" = "xno")
2348 AC_SUBST(GETOPT_LO)
2349
2350 AC_CHECK_FUNC(strncasecmp, STRNCASECMP_LO="",
2351   STRNCASECMP_LO="strncasecmp.lo")
2352 if test "$ac_cv_func_strncasecmp" = no ; then
2353   STRNCASECMP_LO="strncasecmp.lo"
2354 fi
2355 AM_CONDITIONAL(NEED_STRNCASECMP_LO, test "x$ac_cv_func_strncasecmp" = "xno")
2356 AC_SUBST(STRNCASECMP_LO)
2357
2358 AC_CHECK_FUNCS(mkstemp mkdtemp)
2359
2360 AC_SEARCH_LIBS(inet_aton, [socket nsl], have_inet_aton=yes,
2361     have_inet_aton=no)
2362 if test "$have_inet_aton" = no; then
2363   INET_ATON_LO="inet_aton.lo"
2364   AC_DEFINE(NEED_INET_ATON_H, 1, [Define if inet/aton.h needs to be included])
2365 else
2366   INET_ATON_LO=""
2367 fi
2368 AM_CONDITIONAL(NEED_INET_ATON_LO, test "x$have_inet_aton" = "xno")
2369 AC_SUBST(INET_ATON_LO)
2370
2371 AC_SEARCH_LIBS(inet_pton, [socket nsl], [
2372   dnl check for pre-BIND82 inet_pton() bug.
2373   AC_MSG_CHECKING(for broken inet_pton)
2374   AC_TRY_RUN([#include <sys/types.h>
2375 #include <sys/socket.h>
2376 #include <netinet/in.h>
2377 #include <arpa/inet.h>
2378 int main()
2379 {
2380 #ifdef AF_INET6
2381   char buf[16];
2382   /* this should return 0 (error) */
2383   return inet_pton(AF_INET6, "0:1:2:3:4:5:6:7:", buf);
2384 #else
2385   return 1;
2386 #endif
2387 }], [AC_MSG_RESULT(ok);
2388 have_inet_pton=yes], [AC_MSG_RESULT(broken);
2389 have_inet_pton=no], [AC_MSG_RESULT(cross compiling, assume it is broken);
2390 have_inet_pton=no])],
2391 have_inet_pton=no)
2392 if test "$have_inet_pton" = no; then
2393   INET_PTON_LO="inet_pton.lo"
2394 else
2395   INET_PTON_LO=""
2396 fi
2397 AM_CONDITIONAL(NEED_INET_PTON_LO, test "x$have_inet_pton" = "xno")
2398 AC_SUBST(INET_PTON_LO)
2399
2400 AC_SEARCH_LIBS(inet_ntop, [socket nsl], [
2401   AC_MSG_CHECKING([for inet_ntop prototype])
2402   AC_TRY_COMPILE([#include <stdio.h>
2403 #include <sys/types.h>
2404 #include <sys/socket.h>
2405 #include <netinet/in.h>
2406 #include <arpa/inet.h>
2407
2408 extern const char *inet_ntop(int, const void *, char *, size_t);],, [
2409     AC_MSG_RESULT(yes)
2410     AC_DEFINE(HAVE_INET_NTOP_PROTO, 1,
2411     [Define if inet_ntop() prototype exists])], [
2412     AC_TRY_COMPILE([#include <stdio.h>
2413 #include <sys/types.h>
2414 #include <sys/socket.h>
2415 #include <netinet/in.h>
2416 #include <arpa/inet.h>
2417
2418 extern const char *inet_ntop(int, const void *, char *, socklen_t);],, [
2419       AC_MSG_RESULT(yes)
2420       AC_DEFINE(HAVE_INET_NTOP_PROTO, 1,
2421       [Define if inet_ntop() prototype exists])], [
2422       AC_MSG_RESULT(no)])])
2423   INET_NTOP_LO=""], [
2424   INET_NTOP_LO="inet_ntop.lo"
2425   AC_DEFINE(NEED_INET_V6DEFS_H, 1,
2426   [Define if inet/v6defs.h needs to be included])])
2427 AM_CONDITIONAL(NEED_INET_NTOP_LO, test "x$INET_NTOP_LO" != "x")
2428 AC_SUBST(INET_NTOP_LO)
2429
2430 AC_CHECK_FUNC(strptime, STRPTIME_LO="",
2431   [STRPTIME_LO="strptime.lo"
2432    AC_DEFINE(NEED_STRPTIME_H, 1, [Define if strptime.h needs to be included])
2433 ])
2434 if test "$ac_cv_func_strptime" = no ; then
2435   STRPTIME_LO="strptime.lo"
2436 fi
2437 AC_SUBST(STRPTIME_C)
2438 AM_CONDITIONAL(NEED_STRPTIME_LO, test "x$ac_cv_func_strptime" = "no")
2439 AC_SUBST(STRPTIME_LO)
2440
2441 AC_CHECK_FUNCS(getprotobynumber gethostbyname2)
2442 AC_CHECK_FUNCS(issetugid)
2443 AC_CHECK_FUNCS(mmap mprotect sysconf)
2444 AC_CHECK_FUNCS(strtoll)
2445
2446 dnl blank for now, but will be used in future
2447 AC_SUBST(wireshark_SUBDIRS)
2448
2449 dnl
2450 dnl check whether plugins should be enabled and, if they should be,
2451 dnl check for plugins directory - stolen from Amanda's configure.ac
2452 dnl
2453 dnl we don't wish to expand ${libdir} yet
2454 plugindir='${libdir}/wireshark/plugins/${VERSION}'
2455 AC_ARG_WITH(plugins,
2456   AC_HELP_STRING( [--with-plugins@<:@=DIR@:>@],
2457                   [support plugins (installed in DIR, if supplied) @<:@default=yes, if possible@:>@]),
2458 [
2459   if test "x$withval" = "xno"; then
2460     have_plugins=no
2461   elif test "x$have_plugins" = "xno"; then
2462       AC_MSG_ERROR([GLib on this platform doesn't support loadable modules, so you can't enable plugins.])
2463   elif test "x$withval" != "xyes"; then
2464       plugindir="$withval"
2465   fi
2466 ])
2467 AM_CONDITIONAL(HAVE_PLUGINS, test "x$have_plugins" = "xyes")
2468 if test x$have_plugins = xyes
2469 then
2470   AC_DEFINE(HAVE_PLUGINS, 1, [Define if plugins are enabled])
2471 fi
2472 AC_SUBST(plugindir)
2473 CPPFLAGS="$CPPFLAGS '-DPLUGIN_DIR=\"\$(plugindir)\"'"
2474
2475 #
2476 # The plugin dissectors reside in ./plugins/PROTO/
2477 #
2478 PLUGIN_LIBS=""
2479 AC_SUBST(PLUGIN_LIBS)
2480
2481 #
2482 # Check if (emem) memory allocations must be 8-byte aligned.
2483 # I haven't been able to write C code that reliably makes that determination
2484 # (different versions of GCC with or without optimization give different
2485 # results) so just assume everything except (32-bit) x86 needs 8-byte
2486 # alignment (64-bit platforms either require 8-byte alignment for pointers
2487 # and 64-bit integral data types or may get better performance from that;
2488 # 64-bit x86 will get 8-byte alignment from G_MEM_ALIGN anyway.  32-bit
2489 # platforms would only require it, or get better performance from it,
2490 # for 64-bit floating-point values.).
2491 #
2492 AC_MSG_CHECKING(whether we need memory allocations to be 8-byte aligned)
2493 case $host_cpu in
2494         i386|i486|i586|i686)
2495                 AC_MSG_RESULT(no)
2496                 ;;
2497         *)
2498                 AC_MSG_RESULT(yes)
2499                 AC_DEFINE(NEED_8_BYTE_ALIGNMENT, 1, [Define if we need memory allocations to be 8-byte aligned])
2500                 ;;
2501 esac
2502
2503 dnl libtool defs
2504 #
2505 # Yes, AM_PROG_LIBTOOL is redundant with newer version(s) of some tool(s)
2506 # (autoconf?  automake?  libtool?) - with the newer version(s), it's
2507 # just an alias for AC_PROG_LIBTOOL, which is called earlier.
2508 #
2509 # With older version(s) of those tool(s), however, it's not just an
2510 # alias, and the configure scripts don't work without it.
2511 #
2512 AM_PROG_LIBTOOL
2513 AC_SUBST(LIBTOOL_DEPS)
2514
2515 AM_CONDITIONAL(ENABLE_STATIC, test x$enable_static = xyes)
2516 if test x$enable_static = xyes -a x$have_plugins = xyes
2517 then
2518   AC_DEFINE(ENABLE_STATIC, 1, [Link plugins statically into Wireshark])
2519 fi
2520 AC_SUBST(ENABLE_STATIC)
2521
2522 dnl Save the cacheable configure results to config.cache before recursing
2523 AC_CACHE_SAVE
2524
2525 sinclude(plugins/Custom.m4) dnl
2526 ifdef(_CUSTOM_AC_OUTPUT_,, define(_CUSTOM_AC_OUTPUT_, )) dnl
2527
2528 sinclude(asn1/Custom.m4) dnl
2529 ifdef(_CUSTOM_ASN1_AC_OUTPUT_,, define(_CUSTOM_ASN1_AC_OUTPUT_, )) dnl
2530
2531 AC_CONFIG_HEADERS(config.h)
2532 AC_OUTPUT(
2533   Makefile
2534   doxygen.cfg
2535   asn1/Makefile
2536   _CUSTOM_ASN1_AC_OUTPUT_
2537   asn1/acp133/Makefile
2538   asn1/acse/Makefile
2539   asn1/ansi_map/Makefile
2540   asn1/ansi_tcap/Makefile
2541   asn1/c1222/Makefile
2542   asn1/camel/Makefile
2543   asn1/cdt/Makefile
2544   asn1/charging_ase/Makefile
2545   asn1/cmip/Makefile
2546   asn1/cmp/Makefile
2547   asn1/crmf/Makefile
2548   asn1/cms/Makefile
2549   asn1/credssp/Makefile
2550   asn1/dap/Makefile
2551   asn1/disp/Makefile
2552   asn1/dop/Makefile
2553   asn1/dsp/Makefile
2554   asn1/ess/Makefile
2555   asn1/ftam/Makefile
2556   asn1/gnm/Makefile
2557   asn1/goose/Makefile
2558   asn1/gprscdr/Makefile
2559   asn1/gsm_map/Makefile
2560   asn1/h225/Makefile
2561   asn1/h235/Makefile
2562   asn1/h245/Makefile
2563   asn1/h248/Makefile
2564   asn1/h282/Makefile
2565   asn1/h283/Makefile
2566   asn1/h323/Makefile
2567   asn1/h450/Makefile
2568   asn1/h450-ros/Makefile
2569   asn1/h460/Makefile
2570   asn1/h501/Makefile
2571   asn1/HI2Operations/Makefile
2572   asn1/hnbap/Makefile
2573   asn1/idmp/Makefile
2574   asn1/inap/Makefile
2575   asn1/isdn-sup/Makefile
2576   asn1/kerberos/Makefile
2577   asn1/lcsap/Makefile
2578   asn1/ldap/Makefile
2579   asn1/logotypecertextn/Makefile
2580   asn1/lpp/Makefile
2581   asn1/lppa/Makefile
2582   asn1/lppe/Makefile
2583   asn1/lte-rrc/Makefile
2584   asn1/m3ap/Makefile
2585   asn1/mms/Makefile
2586   asn1/mpeg-audio/Makefile
2587   asn1/mpeg-pes/Makefile
2588   asn1/nbap/Makefile
2589   asn1/ns_cert_exts/Makefile
2590   asn1/ocsp/Makefile
2591   asn1/p1/Makefile
2592   asn1/p22/Makefile
2593   asn1/p7/Makefile
2594   asn1/p772/Makefile
2595   asn1/pcap/Makefile
2596   asn1/pkcs1/Makefile
2597   asn1/pkcs12/Makefile
2598   asn1/pkinit/Makefile
2599   asn1/pkixac/Makefile
2600   asn1/pkix1explicit/Makefile
2601   asn1/pkix1implicit/Makefile
2602   asn1/pkixproxy/Makefile
2603   asn1/pkixqualified/Makefile
2604   asn1/pkixtsp/Makefile
2605   asn1/pres/Makefile
2606   asn1/q932/Makefile
2607   asn1/q932-ros/Makefile
2608   asn1/qsig/Makefile
2609   asn1/ranap/Makefile
2610   asn1/rnsap/Makefile
2611   asn1/ros/Makefile
2612   asn1/rrc/Makefile
2613   asn1/rrlp/Makefile
2614   asn1/rtse/Makefile
2615   asn1/rua/Makefile
2616   asn1/s1ap/Makefile
2617   asn1/sabp/Makefile
2618   asn1/sbc-ap/Makefile
2619   asn1/smrse/Makefile
2620   asn1/snmp/Makefile
2621   asn1/spnego/Makefile
2622   asn1/sv/Makefile
2623   asn1/t124/Makefile
2624   asn1/t125/Makefile
2625   asn1/t38/Makefile
2626   asn1/tcap/Makefile
2627   asn1/tetra/Makefile
2628   asn1/ulp/Makefile
2629   asn1/wlancertextn/Makefile
2630   asn1/x2ap/Makefile
2631   asn1/x509af/Makefile
2632   asn1/x509ce/Makefile
2633   asn1/x509if/Makefile
2634   asn1/x509sat/Makefile
2635   asn1/x721/Makefile
2636   doc/Makefile
2637   docbook/Makefile
2638   epan/Makefile
2639   epan/crypt/Makefile
2640   epan/doxygen.cfg
2641   epan/dfilter/Makefile
2642   epan/dissectors/Makefile
2643   epan/dissectors/dcerpc/Makefile
2644   epan/dissectors/pidl/Makefile
2645   epan/ftypes/Makefile
2646   epan/wmem/Makefile
2647   epan/wslua/Makefile
2648   epan/wspython/Makefile
2649   codecs/Makefile
2650   ui/Makefile
2651   ui/doxygen.cfg
2652   ui/gtk/Makefile
2653   ui/gtk/doxygen.cfg
2654   ui/cli/Makefile
2655   ui/qt/Makefile
2656   ui/qt/doxygen.cfg
2657   help/Makefile
2658   packaging/Makefile
2659   packaging/macosx/Info.plist
2660   packaging/macosx/Makefile
2661   packaging/macosx/osx-dmg.sh
2662   packaging/nsis/Makefile
2663   packaging/rpm/Makefile
2664   packaging/rpm/SPECS/Makefile
2665   packaging/rpm/SPECS/wireshark.spec
2666   packaging/svr4/Makefile
2667   packaging/svr4/checkinstall
2668   packaging/svr4/pkginfo
2669   plugins/Makefile
2670   plugins/asn1/Makefile
2671   plugins/docsis/Makefile
2672   plugins/ethercat/Makefile
2673   plugins/gryphon/Makefile
2674   plugins/irda/Makefile
2675   plugins/m2m/Makefile
2676   plugins/mate/Makefile
2677   plugins/opcua/Makefile
2678   plugins/profinet/Makefile
2679   plugins/stats_tree/Makefile
2680   plugins/unistim/Makefile
2681   plugins/wimax/Makefile
2682   plugins/wimaxasncp/Makefile
2683   plugins/wimaxmacphy/Makefile
2684   tools/Makefile
2685   tools/lemon/Makefile
2686   wiretap/Makefile
2687   wsutil/Makefile
2688   echld/Makefile
2689   _CUSTOM_AC_OUTPUT_
2690   ,)
2691 dnl AC_CONFIG_FILES([tools/setuid-root.pl], [chmod +x tools/setuid-root.pl])
2692
2693
2694 # Pretty messages
2695
2696 if test "x$have_gtk" = "xyes"; then
2697         if test "x$with_gtk3" = "xyes"; then
2698                 gtk_lib_message=" (with GTK+ 3"
2699         else
2700                 gtk_lib_message=" (with GTK+ 2"
2701         fi
2702         if test "x$have_ige_mac" = "xyes"; then
2703                 gtk_lib_message="$gtk_lib_message and Mac OS X integration)"
2704         else
2705                 gtk_lib_message="$gtk_lib_message)"
2706         fi
2707 fi
2708
2709 if test "x$have_qt" = "xyes" ; then
2710         enable_qtshark="yes"
2711 else
2712         enable_qtshark="no"
2713 fi
2714
2715 if test "x$enable_setcap_install" = "xyes" ; then
2716         setcap_message="yes"
2717 else
2718         setcap_message="no"
2719 fi
2720
2721 if test "x$enable_setuid_install" = "xyes" ; then
2722         setuid_message="yes"
2723 else
2724         setuid_message="no"
2725 fi
2726
2727 if test "x$DUMPCAP_GROUP" = "x" ; then
2728         dumpcap_group_message="(none)"
2729 else
2730         dumpcap_group_message="$DUMPCAP_GROUP"
2731 fi
2732
2733 if test "x$want_zlib" = "xno" ; then
2734         zlib_message="no"
2735 else
2736         zlib_message="yes"
2737 fi
2738
2739 if test "x$want_lua" = "xyes" ; then
2740         lua_message="yes"
2741 else
2742         lua_message="no"
2743 fi
2744
2745 if test "x$want_python" = "xno"; then
2746         python_message="no"
2747 else
2748         python_message="yes"
2749 fi
2750
2751 if test "x$want_portaudio" = "xyes" ; then
2752         portaudio_message="yes"
2753 else
2754         portaudio_message="no"
2755 fi
2756
2757 if test "x$want_ssl" = "xno" ; then
2758         ssl_message="no"
2759 else
2760         ssl_message="yes"
2761 fi
2762
2763 if test "x$want_krb5" = "xno" ; then
2764         krb5_message="no"
2765 else
2766         krb5_message="yes ($ac_krb5_version)"
2767 fi
2768
2769 if test "x$have_good_c_ares" = "xyes" ; then
2770         c_ares_message="yes"
2771 else
2772         c_ares_message="no"
2773 fi
2774
2775 if test "x$have_good_adns" = "xyes" ; then
2776         adns_message="yes"
2777 else
2778         if test "x$have_good_c_ares" = "xyes" ; then
2779                 adns_message="no (using c-ares instead)"
2780         else
2781                 adns_message="no"
2782         fi
2783 fi
2784
2785 if test "x$have_good_libcap" = "xyes" ; then
2786         libcap_message="yes"
2787 else
2788         libcap_message="no"
2789 fi
2790
2791 if test "x$have_good_geoip" = "xyes" ; then
2792         geoip_message="yes"
2793 else
2794         geoip_message="no"
2795 fi
2796
2797 echo ""
2798 echo "The Wireshark package has been configured with the following options."
2799 echo "             Build wireshark (Gtk+) : $have_gtk""$gtk_lib_message"
2800 echo "                 Build wireshark-qt : $enable_qtshark"
2801 echo "                       Build tshark : $enable_tshark"
2802 echo "                     Build capinfos : $enable_capinfos"
2803 echo "                      Build editcap : $enable_editcap"
2804 echo "                      Build dumpcap : $enable_dumpcap"
2805 echo "                     Build mergecap : $enable_mergecap"
2806 echo "                   Build reordercap : $enable_reordercap"
2807 echo "                    Build text2pcap : $enable_text2pcap"
2808 echo "                      Build randpkt : $enable_randpkt"
2809 echo "                       Build dftest : $enable_dftest"
2810 echo "                     Build rawshark : $enable_rawshark"
2811 echo "                        Build echld : $have_echld"
2812 echo ""
2813 echo "   Save files as pcap-ng by default : $enable_pcap_ng_default"
2814 echo "  Install dumpcap with capabilities : $setcap_message"
2815 echo "             Install dumpcap setuid : $setuid_message"
2816 echo "                  Use dumpcap group : $dumpcap_group_message"
2817 echo "                        Use plugins : $have_plugins"
2818 echo "                    Use Lua library : $lua_message"
2819 echo "                 Use Python binding : $python_message"
2820 echo "                   Build rtp_player : $portaudio_message"
2821 echo "             Build profile binaries : $enable_profile_build"
2822 echo "                   Use pcap library : $want_pcap"
2823 echo "                   Use zlib library : $zlib_message"
2824 echo "               Use kerberos library : $krb5_message"
2825 echo "                 Use c-ares library : $c_ares_message"
2826 echo "               Use GNU ADNS library : $adns_message"
2827 echo "                Use SMI MIB library : $libsmi_message"
2828 echo "             Use GNU crypto library : $gcrypt_message"
2829 echo "             Use SSL crypto library : $ssl_message"
2830 echo "           Use IPv6 name resolution : $enable_ipv6"
2831 echo "                 Use gnutls library : $tls_message"
2832 echo "     Use POSIX capabilities library : $libcap_message"
2833 echo "                  Use GeoIP library : $geoip_message"
2834 echo "                     Use nl library : $libnl_message"