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