[GTK] Replace deprecated gdk_pixbuf_new_from_inline()
[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 >= 2.12.0 gnutls < 3],
582       [ have_license_compatible_gnutls="yes" ] , [ echo "GnuTLS >= 2.12.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 # 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 # Check for GResource support
1790 PKG_CHECK_MODULES([GRESOURCE], [gio-2.0 >= 2.32 gdk-pixbuf-2.0 >= 2.26], [have_gresource=yes], [have_gresource=no])
1791 AM_CONDITIONAL(HAVE_GRESOURCE, test "x$have_gresource" = "xyes")
1792 if test "x$have_gresource" = "xyes"; then
1793         AC_DEFINE(HAVE_GRESOURCE, 1, [Defined if GLib GResource is supported])
1794 fi
1795
1796 use_glib_cflags="true"
1797 if test "$have_gtk" = "yes" -a "$have_qt" = "yes" ; then
1798         # We have both GTK and Qt and thus will be building both wireshark
1799         # and wireshark-gtk.
1800
1801         wireshark_bin="wireshark\$(EXEEXT) wireshark-gtk\$(EXEEXT)"
1802         wireshark_man="wireshark.1"
1803         wireshark_SUBDIRS="codecs ui/qt ui/gtk"
1804 fi
1805 if test "$have_gtk" = "no" -a "$have_qt" = "yes" ; then
1806         # We don't have GTK+ but we have Qt.
1807
1808         wireshark_bin="wireshark\$(EXEEXT)"
1809         wireshark_man="wireshark.1"
1810         wireshark_SUBDIRS="codecs ui/qt"
1811 fi
1812 if test "$have_gtk" = "yes" -a "$have_qt" = "no" ; then
1813         # We have GTK+ but not Qt.
1814
1815         wireshark_bin="wireshark-gtk\$(EXEEXT)"
1816         wireshark_man="wireshark.1"
1817         wireshark_SUBDIRS="codecs ui/gtk"
1818         use_glib_cflags="false"
1819         OSX_APP_FLAGS="$OSX_APP_FLAGS -gtk"
1820         OSX_DMG_FLAGS="-gtk"
1821 fi
1822 if test "$have_gtk" = "no" -a "$have_qt" = "no" ; then
1823         # We have neither GTK+ nor Qt.
1824         #
1825         # If they didn't explicitly say "--disable-wireshark",
1826         # fail (so that, unless they explicitly indicated that
1827         # they don't want Wireshark, we stop so they know they
1828         # won't be getting Wireshark unless they fix the GTK+/Qt
1829         # problem).
1830         #
1831         if test "x$enable_wireshark" = "xyes"; then
1832                 if test "x$with_gtk3" = "xyes"; then
1833                         AC_MSG_ERROR([Neither Qt nor GTK+ $GTK3_MIN_VERSION or later are available, so Wireshark can't be compiled])
1834                 else
1835                         AC_MSG_ERROR([Neither Qt nor GTK+ $GTK2_MIN_VERSION or later are available, so Wireshark can't be compiled])
1836                 fi
1837         fi
1838         wireshark_bin=""
1839         wireshark_man=""
1840 fi
1841
1842 if test "$have_gtk" = "yes" ; then
1843         # If we have GTK then add flags for it.
1844
1845         CPPFLAGS="-DGDK_DISABLE_DEPRECATED $CPPFLAGS"
1846         if test \( $gtk_config_major_version -eq 3 -a $gtk_config_minor_version -ge 10 \) ; then
1847                 ## Allow use of deprecated & disable deprecated warnings if Gtk >= 3.10;
1848                 ##  The deprecations in Gtk 3.10 will not be fixed ...
1849                 CPPFLAGS="-DGDK_DISABLE_DEPRECATION_WARNINGS $CPPFLAGS"
1850         else
1851                 CPPFLAGS="-DGTK_DISABLE_DEPRECATED $CPPFLAGS"
1852         fi
1853         CPPFLAGS="-DGTK_DISABLE_SINGLE_INCLUDES $CPPFLAGS"
1854         if test ! \( $gtk_config_major_version -eq 2 -a $gtk_config_minor_version -lt 20 \) ; then
1855                 # Enable GSEAL when building with GTK > 2.20
1856                 # (Versions prior to 2.22 lacked some necessary accessors.)
1857                 CPPFLAGS="-DGSEAL_ENABLE $CPPFLAGS"
1858         fi
1859 fi
1860
1861 # XXX - Is this really necessary?  When we build with both Gtk+ and Qt it works...
1862 if test "$use_glib_cflags" = "true"; then
1863         # Use GLIB_CFLAGS
1864         AM_PATH_GLIB_2_0($GLIB_MIN_VERSION,
1865         [
1866                 CFLAGS="$CFLAGS $GLIB_CFLAGS"
1867                 CXXFLAGS="$CXXFLAGS $GLIB_CFLAGS"
1868         ], AC_MSG_ERROR(GLib $GLIB_MIN_VERSION or later distribution not found.), gthread gmodule)
1869 else
1870         # Don't use GLIB_CFLAGS
1871         AM_PATH_GLIB_2_0($GLIB_MIN_VERSION, , AC_MSG_ERROR(GLib $GLIB_MIN_VERSION or later distribution not found.), gthread gmodule)
1872 fi
1873
1874 # Error out if a glib header other than a "top level" header
1875 #  (glib.h, glib-object.h, gio.h) or certain other headers( e.g.,gmodule.h)
1876 #  is used.
1877 CPPFLAGS="-DG_DISABLE_SINGLE_INCLUDES $CPPFLAGS"
1878
1879 # Error out on the usage of deprecated glib functions
1880 CPPFLAGS="-DG_DISABLE_DEPRECATED $CPPFLAGS"
1881
1882 #
1883 # Check whether GLib modules are supported, to determine whether we
1884 # can support plugins.
1885 #
1886 AC_MSG_CHECKING(whether GLib supports loadable modules)
1887 ac_save_CFLAGS="$CFLAGS"
1888 ac_save_LIBS="$LIBS"
1889 CFLAGS="$CFLAGS $GLIB_CFLAGS"
1890 LIBS="$GLIB_LIBS $LIBS"
1891 AC_TRY_RUN([
1892 #include <glib.h>
1893 #include <gmodule.h>
1894 #include <stdio.h>
1895 #include <stdlib.h>
1896
1897 int
1898 main ()
1899 {
1900   if (g_module_supported())
1901     return 0;   /* success */
1902   else
1903     return 1;   /* failure */
1904 }
1905 ], ac_cv_glib_supports_modules=yes, ac_cv_glib_supports_modules=no,
1906    [echo $ac_n "cross compiling; assumed OK... $ac_c"
1907     ac_cv_glib_supports_modules=yes])
1908 CFLAGS="$ac_save_CFLAGS"
1909 LIBS="$ac_save_LIBS"
1910 if test "$ac_cv_glib_supports_modules" = yes ; then
1911   AC_MSG_RESULT(yes)
1912   have_plugins=yes
1913   plugins_dir="plugins"
1914 else
1915   AC_MSG_RESULT(no)
1916   have_plugins=no
1917   plugins_dir=""
1918 fi
1919 AC_SUBST(plugins_dir)
1920
1921 #
1922 # If we have <dlfcn.h>, check whether we have dladdr.
1923 #
1924 if test "$ac_cv_header_dlfcn_h" = "yes"
1925 then
1926         #
1927         # Use GLib compiler flags and linker flags; GLib's gmodule
1928         # stuff uses the dl APIs if available, so it might know
1929         # what flags are needed.
1930         #
1931         ac_save_CFLAGS="$CFLAGS"
1932         ac_save_LIBS="$LIBS"
1933         CFLAGS="$CFLAGS $GLIB_CFLAGS"
1934         LIBS="$GLIB_LIBS $LIBS"
1935         AC_CHECK_FUNCS(dladdr)
1936         if test x$ac_cv_func_dladdr = xno
1937         then
1938                 #
1939                 # OK, try it with -ldl, in case you need that to get
1940                 # dladdr().  For some reason, on Linux, that's not
1941                 # part of the GLib flags; perhaps GLib itself is
1942                 # linked with libdl, so that you can link with
1943                 # Glib and it'll pull libdl in itself.
1944                 #
1945                 LIBS="$LIBS -ldl"
1946                 AC_CHECK_FUNCS(dladdr)
1947         fi
1948         CFLAGS="$ac_save_CFLAGS"
1949         LIBS="$ac_save_LIBS"
1950 fi
1951
1952 #
1953 # Check whether GLib's printf supports thousands grouping. (This might
1954 # be different from the system's printf since GLib can optionally use
1955 # its own printf implementation.)
1956 #
1957 AC_MSG_CHECKING(whether GLib supports POSIX/XSI thousands grouping)
1958 ac_save_CFLAGS="$CFLAGS"
1959 ac_save_LIBS="$LIBS"
1960 CFLAGS="$CFLAGS $GLIB_CFLAGS"
1961 LIBS="$GLIB_LIBS $LIBS"
1962 AC_TRY_RUN([
1963 #include <glib.h>
1964 #include <locale.h>
1965 #include <stdio.h>
1966 #include <string.h>
1967
1968 int
1969 main ()
1970 {
1971   gchar *str;
1972   setlocale(LC_ALL, "en_US.UTF-8");
1973   str = g_strdup_printf("%'u", 123456);
1974   return (strcmp (str, "123,456") != 0);
1975 }
1976 ], ac_cv_glib_supports_printf_grouping=yes, ac_cv_glib_supports_printf_grouping=no,
1977    [echo $ac_n "cross compiling; playing it safe... $ac_c"
1978     ac_cv_glib_supports_printf_grouping=no])
1979 CFLAGS="$ac_save_CFLAGS"
1980 LIBS="$ac_save_LIBS"
1981 if test "$ac_cv_glib_supports_printf_grouping" = yes ; then
1982   AC_MSG_RESULT(yes)
1983   AC_DEFINE(HAVE_GLIB_PRINTF_GROUPING, 1, [Define if GLib's printf functions support thousands grouping.])
1984 else
1985   AC_MSG_RESULT(no)
1986 fi
1987
1988 if test "x$have_gtk" = "xyes"
1989 then
1990     #
1991     # We have GTK+; do we want the OS X integration functions and,
1992     # if so, do we have them and, if so, which versions do we have,
1993     # the old Carbon-based ones or the new Cocoa-based ones?
1994     #
1995     AC_MSG_CHECKING(whether to use OS X integration functions)
1996
1997     AC_ARG_WITH(osx-integration,
1998       AC_HELP_STRING( [--with-osx-integration],
1999                       [use OS X integration functions @<:@default=yes, if available@:>@]),
2000     [
2001         if test $withval = no
2002         then
2003             want_osx_integration=no
2004         else
2005             want_osx_integration=yes
2006         fi
2007     ],[
2008         want_osx_integration=yes
2009     ])
2010     if test "x$want_osx_integration" = "xno"; then
2011         AC_MSG_RESULT(no)
2012     else
2013         AC_MSG_RESULT(yes)
2014         AC_WIRESHARK_OSX_INTEGRATION_CHECK
2015     fi
2016 fi
2017
2018 AC_SUBST(wireshark_bin)
2019 AC_SUBST(wireshark_man)
2020 AM_CONDITIONAL(HAVE_Qt, test "$have_qt" = "yes")
2021 AM_CONDITIONAL(HAVE_GTK, test "$have_gtk" = "yes")
2022 AC_SUBST(OSX_APP_FLAGS)
2023 AC_SUBST(OSX_DMG_FLAGS)
2024
2025 # Enable/disable tshark
2026 AC_ARG_ENABLE(tshark,
2027   AC_HELP_STRING( [--enable-tshark],
2028                   [build tshark @<:@default=yes@:>@]),
2029     tshark=$enableval,enable_tshark=yes)
2030
2031 if test "x$enable_tshark" = "xyes" ; then
2032         tshark_bin="tshark\$(EXEEXT)"
2033         tshark_man="tshark.1"
2034         wiresharkfilter_man="wireshark-filter.4"
2035 else
2036         tshark_bin=""
2037         tshark_man=""
2038 fi
2039 AC_SUBST(tshark_bin)
2040 AC_SUBST(tshark_man)
2041
2042 # Enable/disable editcap
2043
2044 AC_ARG_ENABLE(editcap,
2045   AC_HELP_STRING( [--enable-editcap],
2046                   [build editcap @<:@default=yes@:>@]),
2047     enable_editcap=$enableval,enable_editcap=yes)
2048
2049 if test "x$enable_editcap" = "xyes" ; then
2050         editcap_bin="editcap\$(EXEEXT)"
2051         editcap_man="editcap.1"
2052 else
2053         editcap_bin=""
2054         editcap_man=""
2055 fi
2056 AC_SUBST(editcap_bin)
2057 AC_SUBST(editcap_man)
2058
2059
2060 # Enabling/disabling of dumpcap is done later (after we know if we have PCAP
2061 # or not)
2062
2063 # Enable/disable capinfos
2064
2065 AC_ARG_ENABLE(capinfos,
2066   AC_HELP_STRING( [--enable-capinfos],
2067                   [build capinfos @<:@default=yes@:>@]),
2068     enable_capinfos=$enableval,enable_capinfos=yes)
2069
2070 if test "x$enable_capinfos" = "xyes" ; then
2071         capinfos_bin="capinfos\$(EXEEXT)"
2072         capinfos_man="capinfos.1"
2073 else
2074         capinfos_bin=""
2075         capinfos_man=""
2076 fi
2077 AC_SUBST(capinfos_bin)
2078 AC_SUBST(capinfos_man)
2079
2080 # Enable/disable captype
2081
2082 AC_ARG_ENABLE(captype,
2083   AC_HELP_STRING( [--enable-captype],
2084                   [build captype @<:@default=yes@:>@]),
2085     enable_captype=$enableval,enable_captype=yes)
2086
2087 if test "x$enable_captype" = "xyes" ; then
2088         captype_bin="captype\$(EXEEXT)"
2089         captype_man="captype.1"
2090 else
2091         captype_bin=""
2092         captype_man=""
2093 fi
2094 AC_SUBST(captype_bin)
2095 AC_SUBST(captype_man)
2096
2097 # Enable/disable mergecap
2098
2099 AC_ARG_ENABLE(mergecap,
2100   AC_HELP_STRING( [--enable-mergecap],
2101                   [build mergecap @<:@default=yes@:>@]),
2102     enable_mergecap=$enableval,enable_mergecap=yes)
2103
2104 if test "x$enable_mergecap" = "xyes" ; then
2105         mergecap_bin="mergecap\$(EXEEXT)"
2106         mergecap_man="mergecap.1"
2107 else
2108         mergecap_bin=""
2109         mergecap_man=""
2110 fi
2111 AC_SUBST(mergecap_bin)
2112 AC_SUBST(mergecap_man)
2113
2114 # Enable/disable reordercap
2115
2116 AC_ARG_ENABLE(reordercap,
2117   AC_HELP_STRING( [--enable-reordercap],
2118                   [build reordercap @<:@default=yes@:>@]),
2119     enable_reordercap=$enableval,enable_reordercap=yes)
2120
2121 if test "x$enable_reordercap" = "xyes" ; then
2122         reordercap_bin="reordercap\$(EXEEXT)"
2123         reordercap_man="reordercap.1"
2124 else
2125         reordercap_bin=""
2126         reordercap_man=""
2127 fi
2128 AC_SUBST(reordercap_bin)
2129 AC_SUBST(reordercap_man)
2130
2131 # Enable/disable text2pcap
2132
2133 AC_ARG_ENABLE(text2pcap,
2134   AC_HELP_STRING( [--enable-text2pcap],
2135                   [build text2pcap @<:@default=yes@:>@]),
2136     text2pcap=$enableval,enable_text2pcap=yes)
2137
2138 if test "x$enable_text2pcap" = "xyes" ; then
2139         text2pcap_bin="text2pcap\$(EXEEXT)"
2140         text2pcap_man="text2pcap.1"
2141 else
2142         text2pcap_bin=""
2143         text2pcap_man=""
2144 fi
2145 AC_SUBST(text2pcap_bin)
2146 AC_SUBST(text2pcap_man)
2147
2148 # Enable/disable dftest
2149
2150 AC_ARG_ENABLE(dftest,
2151   AC_HELP_STRING( [--enable-dftest],
2152                   [build dftest @<:@default=yes@:>@]),
2153     enable_dftest=$enableval,enable_dftest=yes)
2154
2155 if test "x$enable_dftest" = "xyes" ; then
2156         dftest_bin="dftest\$(EXEEXT)"
2157         dftest_man="dftest.1"
2158 else
2159         dftest_bin=""
2160         dftest_man=""
2161 fi
2162 AC_SUBST(dftest_bin)
2163 AC_SUBST(dftest_man)
2164
2165 # Enable/disable randpkt
2166
2167 AC_ARG_ENABLE(randpkt,
2168   AC_HELP_STRING( [--enable-randpkt],
2169                   [build randpkt @<:@default=yes@:>@]),
2170     enable_randpkt=$enableval,enable_randpkt=yes)
2171
2172 if test "x$enable_randpkt" = "xyes" ; then
2173         randpkt_bin="randpkt\$(EXEEXT)"
2174         randpkt_man="randpkt.1"
2175 else
2176         randpkt_bin=""
2177         randpkt_man=""
2178 fi
2179 AC_SUBST(randpkt_bin)
2180 AC_SUBST(randpkt_man)
2181
2182 AC_SUBST(wiresharkfilter_man)
2183
2184 dnl Checks for "connect()", used as a proxy for "socket()" - and
2185 dnl "-lsocket", if we need it to get "connect()".
2186 AC_WIRESHARK_SOCKET_LIB_CHECK
2187
2188 dnl pcap check
2189 AC_MSG_CHECKING(whether to use libpcap for packet capture)
2190
2191 AC_ARG_WITH(pcap,
2192   AC_HELP_STRING( [--with-pcap@<:@=DIR@:>@],
2193                   [use libpcap for packet capturing @<:@default=yes@:>@]),
2194 [
2195         if test $withval = no
2196         then
2197                 want_pcap=no
2198         elif test $withval = yes
2199         then
2200                 want_pcap=yes
2201         else
2202                 want_pcap=yes
2203                 pcap_dir=$withval
2204         fi
2205 ],[
2206         want_pcap=yes
2207         pcap_dir=
2208 ])
2209 if test "x$want_pcap" = "xno" ; then
2210         AC_MSG_RESULT(no)
2211 else
2212         AC_MSG_RESULT(yes)
2213         AC_WIRESHARK_PCAP_CHECK
2214 fi
2215
2216
2217 dnl Check for airpcap
2218 dnl We might want to remove this entirely unless we want to support
2219 dnl AutoTools on Windows.
2220 AC_MSG_CHECKING(whether to include airpcap support)
2221 AC_ARG_ENABLE(airpcap,
2222   AC_HELP_STRING( [--enable-airpcap],
2223                   [use AirPcap in Wireshark @<:@default=no@:>@]),
2224   enable_airpcap=$enableval, enable_airpcap=no)
2225
2226 if test x$enable_airpcap = xyes; then
2227         if test "x$want_pcap" = "xno" ; then
2228                 enable_airpcap=no
2229                 AC_MSG_RESULT(pcap not available - disabling airpcap)
2230         else
2231                 AC_MSG_RESULT(yes)
2232                 AC_DEFINE(HAVE_AIRPCAP, 1, [Enable AirPcap])
2233         fi
2234 else
2235         AC_MSG_RESULT(no)
2236 fi
2237
2238
2239 dnl dumpcap check
2240 AC_MSG_CHECKING(whether to build dumpcap)
2241
2242 AC_ARG_ENABLE(dumpcap,
2243   AC_HELP_STRING( [--enable-dumpcap],
2244                   [build dumpcap @<:@default=yes@:>@]),
2245     enable_dumpcap=$enableval,enable_dumpcap=yes)
2246
2247 if test "x$enable_dumpcap" = "xyes" ; then
2248         if test "x$want_pcap" = "xno" ; then
2249                 enable_dumpcap=no
2250                 AC_MSG_RESULT(pcap not available - disabling dumpcap)
2251         else
2252                 AC_MSG_RESULT(yes)
2253         fi
2254 else
2255         AC_MSG_RESULT(no)
2256 fi
2257
2258 if test "x$enable_dumpcap" = "xyes" ; then
2259         dumpcap_bin="dumpcap\$(EXEEXT)"
2260         dumpcap_man="dumpcap.1"
2261 else
2262         dumpcap_bin=""
2263         dumpcap_man=""
2264 fi
2265 AC_SUBST(dumpcap_bin)
2266 AC_SUBST(dumpcap_man)
2267
2268 # Enable/disable rawshark
2269
2270 dnl rawshark check
2271 AC_MSG_CHECKING(whether to build rawshark)
2272
2273 AC_ARG_ENABLE(rawshark,
2274   AC_HELP_STRING( [--enable-rawshark],
2275                   [build rawshark @<:@default=yes@:>@]),
2276     rawshark=$enableval,enable_rawshark=yes)
2277
2278 if test "x$enable_rawshark" = "xyes" ; then
2279         if test "x$want_pcap" = "xno" ; then
2280                 enable_rawshark=no
2281                 AC_MSG_RESULT(pcap not available - disabling rawshark)
2282         else
2283                 AC_MSG_RESULT(yes)
2284         fi
2285 else
2286         AC_MSG_RESULT(no)
2287 fi
2288
2289 if test "x$enable_rawshark" = "xyes" ; then
2290         rawshark_bin="rawshark\$(EXEEXT)"
2291         rawshark_man="rawshark.1"
2292 else
2293         rawshark_bin=""
2294         rawshark_man=""
2295 fi
2296 AC_SUBST(rawshark_bin)
2297 AC_SUBST(rawshark_man)
2298
2299 dnl androiddump check
2300 AC_MSG_CHECKING(whether to build androiddump)
2301
2302 AC_ARG_ENABLE(androiddump,
2303   AC_HELP_STRING( [--enable-androiddump],
2304                   [build androiddump @<:@default=yes@:>@]),
2305     androiddump=$enableval,enable_androiddump=yes)
2306
2307 if test "x$enable_androiddump" = "xyes" ; then
2308         AC_MSG_RESULT(yes)
2309 else
2310         AC_MSG_RESULT(no)
2311 fi
2312
2313 AC_ARG_ENABLE(androiddump_use_libpcap,
2314   AC_HELP_STRING( [--enable-androiddump-use-libpcap],
2315                   [build androiddump using libpcap @<:@default=no@:>@]),
2316     androiddump_use_libpcap=$enableval,enable_androiddump_use_libpcap=no)
2317
2318 if test "x$enable_androiddump_use_libpcap" = "xyes" ; then
2319         AC_DEFINE(ANDROIDDUMP_USE_LIBPCAP, 1, [Androiddump will use Libpcap])
2320 fi
2321
2322 if test "x$enable_androiddump" = "xyes" ; then
2323         androiddump_bin="androiddump\$(EXEEXT)"
2324         androiddump_man=""
2325 else
2326         androiddump_bin=""
2327         androiddump_man=""
2328 fi
2329 AC_SUBST(androiddump_bin)
2330 AC_SUBST(androiddump_man)
2331
2332 # Enable/disable echld
2333 AC_ARG_ENABLE(echld,
2334   AC_HELP_STRING( [--enable-echld],
2335                   [support echld (Experimental) @<:@default=no@:>@]),
2336     have_echld=$enableval,have_echld=no)
2337
2338 AM_CONDITIONAL(HAVE_ECHLD, test "x$have_echld" = "xyes")
2339 if test "x$have_echld" = "xyes"
2340 then
2341   AC_DEFINE(HAVE_ECHLD, 1, [Define if echld is enabled])
2342   echld_test_bin="echld_test\$(EXEEXT)"
2343   echld_dir="echld"
2344 else
2345   have_echld="no"
2346   echld_test_bin=""
2347   echld_dir=""
2348 fi
2349 AC_SUBST(echld_test_bin)
2350 AC_SUBST(echld_dir)
2351
2352 # Enable/disable tfshark
2353 AC_ARG_ENABLE(tfshark,
2354   AC_HELP_STRING( [--enable-tfshark],
2355                   [build tfshark (Experimental) @<:@default=no@:>@]),
2356     tfshark=$enableval,enable_tfshark=no)
2357
2358 if test "x$enable_tfshark" = "xyes" ; then
2359         tfshark_bin="tfshark\$(EXEEXT)"
2360         tfshark_man="tfshark.1"
2361         wiresharkfilter_man="wireshark-filter.4"
2362 else
2363         tfshark_bin=""
2364         tfshark_man=""
2365 fi
2366 AC_SUBST(tfshark_bin)
2367 AC_SUBST(tfshark_man)
2368
2369
2370 dnl Use pcap-ng by default
2371 AC_ARG_ENABLE(pcap-ng-default,
2372   AC_HELP_STRING( [--enable-pcap-ng-default],
2373                   [use the pcap-ng file format by default instead of pcap @<:@default=yes@:>@]),
2374     enable_pcap_ng_default=$enableval,enable_pcap_ng_default=yes)
2375 if test x$enable_pcap_ng_default = xyes; then
2376         AC_DEFINE(PCAP_NG_DEFAULT, 1, [Support for pcap-ng])
2377 fi
2378
2379 dnl pcap remote check
2380 AC_MSG_CHECKING(whether to use libpcap remote capturing feature)
2381
2382 AC_ARG_WITH(pcap-remote,
2383     AC_HELP_STRING([--with-pcap-remote],
2384                    [use libpcap remote capturing (requires libpcap)]),
2385 [
2386     if test $withval = no
2387     then
2388         want_pcap_remote=no
2389     else
2390         want_pcap_remote=yes
2391     fi
2392 ],[
2393     want_pcap_remote=no
2394 ])
2395 if test "x$want_pcap_remote" = "xno" -o "x$want_pcap" = "xno" ; then
2396     AC_MSG_RESULT(no)
2397 else
2398     AC_MSG_RESULT(yes)
2399     AC_WIRESHARK_PCAP_REMOTE_CHECK
2400 fi
2401
2402 dnl zlib check
2403 AC_MSG_CHECKING(whether to use zlib for gzip compression and decompression)
2404
2405 AC_ARG_WITH(zlib,
2406   AC_HELP_STRING([--with-zlib@<:@=DIR@:>@],
2407                  [use zlib (located in directory DIR, if supplied) for gzip compression and decompression @<:@default=yes, if available@:>@]),
2408 [
2409         if test "x$withval" = "xno"
2410         then
2411                 want_zlib=no
2412         elif test "x$withval" = "xyes"
2413         then
2414                 want_zlib=yes
2415         else
2416                 want_zlib=yes
2417                 zlib_dir="$withval"
2418         fi
2419 ],[
2420         #
2421         # Use zlib if it's present, otherwise don't.
2422         #
2423         want_zlib=ifavailable
2424         zlib_dir=
2425 ])
2426 if test "x$want_zlib" = "xno" ; then
2427         AC_MSG_RESULT(no)
2428 else
2429         AC_MSG_RESULT(yes)
2430         AC_WIRESHARK_ZLIB_CHECK
2431         if test "x$want_zlib" = "xno" ; then
2432                 AC_MSG_RESULT(zlib not found - disabling gzip compression and decompression)
2433         else
2434                 if test "x$ac_cv_func_inflatePrime" = "xno" ; then
2435                         AC_MSG_RESULT(inflatePrime not found in zlib - disabling gzipped capture file support)
2436                 fi
2437         fi
2438 fi
2439
2440 dnl Lua check
2441 AC_ARG_WITH(lua,
2442   AC_HELP_STRING( [--with-lua@<:@=DIR@:>@],
2443                   [use liblua (located in directory DIR, if supplied) for the Lua scripting plugin @<:@default=yes, if available@:>@]),
2444 [
2445         if test $withval = no
2446         then
2447                 want_lua=no
2448         elif test $withval = yes
2449         then
2450                 want_lua=yes
2451         else
2452                 want_lua=yes
2453                 want_lua_dir=$withval
2454         fi
2455 ],[
2456         # By default use Lua if we can find it
2457         want_lua=ifavailable
2458         lua_dir=
2459 ])
2460 if test "x$want_lua" != "xno" ; then
2461         AC_WIRESHARK_LIBLUA_CHECK
2462
2463         if test "x$want_lua" = "xyes" -a "x$have_lua" = "xno"
2464         then
2465                 AC_MSG_ERROR([Lua support was requested, but is not available])
2466         fi
2467 fi
2468 if test "x$have_lua" = "xyes"
2469 then
2470         AC_DEFINE(HAVE_LUA, 1, [Define to use Lua])
2471 fi
2472 AM_CONDITIONAL(HAVE_LIBLUA, test x$have_lua = xyes)
2473 AC_SUBST(LUA_LIBS)
2474 AC_SUBST(LUA_CFLAGS)
2475
2476
2477 dnl portaudio check
2478 AC_MSG_CHECKING(whether to use libportaudio for the GTK+ RTP player)
2479
2480 AC_ARG_WITH(portaudio,
2481   AC_HELP_STRING( [--with-portaudio@<:@=DIR@:>@],
2482                   [use libportaudio (located in directory DIR, if supplied) for the GTK+ RTP player @<:@default=yes, if available@:>@]),
2483 [
2484         if test $withval = no
2485         then
2486                 want_portaudio=no
2487         elif test $withval = yes
2488         then
2489                 want_portaudio=yes
2490         else
2491                 want_portaudio=yes
2492                 portaudio_dir=$withval
2493         fi
2494 ],[
2495         #
2496         # Use libportaudio by default
2497         #
2498         want_portaudio=ifavailable
2499         portaudio_dir=
2500 ])
2501 if test "x$want_portaudio" = "xno" ; then
2502         AC_MSG_RESULT(no)
2503 else
2504         AC_MSG_RESULT(yes)
2505         AC_WIRESHARK_LIBPORTAUDIO_CHECK
2506         if test "x$want_portaudio" = "xno" ; then
2507                 AC_MSG_RESULT(libportaudio not found - disabling support for the GTK+ RTP player)
2508         fi
2509 fi
2510 AM_CONDITIONAL(HAVE_LIBPORTAUDIO, test x$want_portaudio = xyes)
2511
2512
2513 dnl ipv6 check
2514 AC_ARG_ENABLE(ipv6,
2515   AC_HELP_STRING( [--enable-ipv6],
2516                   [use IPv6 name resolution, if available @<:@default=yes@:>@]),
2517     enable_ipv6=$enableval,enable_ipv6=yes)
2518
2519 AC_MSG_CHECKING(whether to enable ipv6 name resolution if available)
2520 if test "x$enable_ipv6" = "xno" ; then
2521         AC_MSG_RESULT(no)
2522 else
2523         AC_MSG_RESULT(yes)
2524         AC_WIRESHARK_IPV6_STACK
2525 fi
2526
2527
2528 dnl Check if dumpcap should be installed with filesystem capabilities
2529 AC_PATH_PROG(SETCAP, setcap)
2530 AC_ARG_ENABLE(setcap-install,
2531   AC_HELP_STRING( [--enable-setcap-install],
2532                   [install dumpcap with cap_net_admin and cap_net_raw @<:@default=no@:>@]),
2533     enable_setcap_install=$enableval,enable_setcap_install=no)
2534
2535 AC_MSG_CHECKING(whether to install dumpcap with cap_net_admin and cap_net_raw capabilities)
2536 if test "x$enable_setcap_install" = "xno" ; then
2537         AC_MSG_RESULT(no)
2538 else
2539         if test "x$SETCAP" = "x" ; then
2540                 AC_MSG_RESULT(setcap not found)
2541                 AC_MSG_ERROR([Setcap install was requested, but setcap was not found])
2542         elif test "x$enable_dumpcap" = "xno" ; then
2543                 AC_MSG_RESULT(dumpcap disabled)
2544                 AC_MSG_ERROR([Setcap install works only with dumpcap, but dumpcap is disabled])
2545         else
2546                 AC_MSG_RESULT(yes)
2547         fi
2548 fi
2549
2550 AM_CONDITIONAL(SETCAP_INSTALL, test x$enable_setcap_install = xyes)
2551
2552 dnl Check if dumpcap should be installed setuid
2553 AC_ARG_ENABLE(setuid-install,
2554   AC_HELP_STRING( [--enable-setuid-install],
2555                   [install dumpcap as setuid @<:@default=no@:>@]),
2556     enable_setuid_install=$enableval,enable_setuid_install=no)
2557
2558 AC_MSG_CHECKING(whether to install dumpcap setuid)
2559 if test "x$enable_setuid_install" = "xno" ; then
2560         AC_MSG_RESULT(no)
2561 else
2562         if test "x$enable_setcap_install" = "xyes" ; then
2563                 enable_setuid_install=no
2564                 AC_MSG_RESULT(setcap and setuid both selected)
2565                 AC_MSG_ERROR(You must choose one of setcap install and setuid install)
2566         elif test "x$enable_dumpcap" = "xno" ; then
2567                 AC_MSG_RESULT(dumpcap disabled)
2568                 AC_MSG_ERROR([Setuid install works only with dumpcap, but dumpcap is disabled])
2569         else
2570                 AC_MSG_RESULT(yes)
2571         fi
2572 fi
2573
2574 AM_CONDITIONAL(SETUID_INSTALL, test x$enable_setuid_install = xyes)
2575 AC_CHECK_FUNCS(setresuid setresgid)
2576
2577 dnl ...but our Network Operations group is named "no"!
2578 DUMPCAP_GROUP=''
2579 AC_ARG_WITH(dumpcap-group,
2580   AC_HELP_STRING( [--with-dumpcap-group=GROUP],
2581                   [restrict dumpcap to GROUP]),
2582 [
2583   if test "x$withval" = "xyes"; then
2584       AC_MSG_ERROR([No dumpcap group specified.])
2585   elif test "x$withval" != "xno"; then
2586       if test "x$enable_dumpcap" = "xno" ; then
2587           AC_MSG_ERROR(dumpcap group install works only with dumpcap but dumpcap is disabled)
2588       fi
2589       AC_MSG_RESULT($withval)
2590       DUMPCAP_GROUP="$withval"
2591   fi
2592 ])
2593 AC_SUBST(DUMPCAP_GROUP)
2594 AM_CONDITIONAL(HAVE_DUMPCAP_GROUP, test x$DUMPCAP_GROUP != x)
2595
2596 dnl libcap (not libpcap) check
2597 LIBCAP_LIBS=''
2598 AC_MSG_CHECKING(whether to use the libcap capabilities library)
2599
2600 AC_ARG_WITH(libcap,
2601   AC_HELP_STRING( [--with-libcap@<:@=DIR@:>@],
2602                   [use libcap (located in directory DIR, if supplied) for POSIX.1e capabilities management @<:@default=yes, if present@:>@]),
2603 [
2604 if   test "x$withval" = "xno";  then
2605         want_libcap=no
2606 elif test "x$withval" = "xyes"; then
2607         want_libcap=yes
2608 elif test -d "$withval"; then
2609         want_libcap=yes
2610         AC_WIRESHARK_ADD_DASH_L(LDFLAGS, ${withval}/lib)
2611 fi
2612 ])
2613 if test "x$with_libcap" = "xno" ; then
2614         AC_MSG_RESULT(no)
2615 else
2616         AC_MSG_RESULT(yes)
2617         AC_WIRESHARK_LIBCAP_CHECK
2618 fi
2619 AC_SUBST(LIBCAP_LIBS)
2620
2621 dnl Checks for header files.
2622 dnl Some of these may not be needed: http://hacks.owlfolio.org/header-survey/
2623 dnl Note, however, that, whilst this script is generally run only on UN*Xes:
2624 dnl
2625 dnl     1) we also support building on and for Windows and not all of those
2626 dnl        headers are present on Windows, so the code has to check a
2627 dnl        #define *anyway* to determine whether to include the header
2628 dnl        file
2629 dnl
2630 dnl and
2631 dnl
2632 dnl     2) this might also be run on Windows with a sufficiently UNIXy
2633 dnl        environment such as Cygwin (although Wireshark should be built
2634 dnl        natively rather than using Cygwin).
2635 dnl
2636 AC_CHECK_HEADERS(fcntl.h getopt.h grp.h inttypes.h netdb.h pwd.h unistd.h)
2637 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)
2638 AC_CHECK_HEADERS(netinet/in.h)
2639 AC_CHECK_HEADERS(arpa/inet.h arpa/nameser.h)
2640
2641 #
2642 # On Linux, check for some additional headers, which we need as a
2643 # workaround for a bonding driver bug and for libpcap's current lack
2644 # of its own workaround for that bug.
2645 #
2646 case "$host_os" in
2647 linux*)
2648         AC_CHECK_HEADERS(linux/sockios.h linux/if_bonding.h,,,[#include <sys/socket.h>])
2649         ;;
2650 esac
2651
2652 dnl SSL Check
2653 SSL_LIBS=''
2654 AC_MSG_CHECKING(whether to use SSL library)
2655
2656 AC_ARG_WITH(ssl,
2657   AC_HELP_STRING( [--with-ssl@<:@=DIR@:>@],
2658                   [use SSL crypto library (located in directory DIR, if supplied) @<:@default=no@:>@]),
2659 [
2660 if test "x$withval" = "xno";  then
2661         want_ssl=no
2662 elif test "x$withval" = "xyes"; then
2663         want_ssl=yes
2664 elif test -d "$withval"; then
2665         want_ssl=yes
2666         AC_WIRESHARK_ADD_DASH_L(LDFLAGS, ${withval}/lib)
2667 fi
2668 ],[
2669         want_ssl=no
2670 ])
2671 if test "x$want_ssl" = "xyes"; then
2672         AC_MSG_RESULT(yes)
2673         AC_CHECK_LIB(crypto,EVP_md5,
2674             [
2675                 SSL_LIBS=-lcrypto
2676             ],
2677             [
2678                 AC_MSG_ERROR([SSL crypto library was requested, but is not available])
2679             ])
2680 else
2681         AC_MSG_RESULT(no)
2682 fi
2683 AC_SUBST(SSL_LIBS)
2684
2685 dnl kerberos check
2686 AC_MSG_CHECKING(whether to use Kerberos library)
2687
2688 AC_ARG_WITH(krb5,
2689   AC_HELP_STRING( [--with-krb5@<:@=DIR@:>@],
2690                   [use Kerberos library (located in directory DIR, if supplied) to use in Kerberos dissection @<:@default=yes@:>@]),
2691 [
2692         if test $withval = no
2693         then
2694                 want_krb5=no
2695         elif test $withval = yes
2696         then
2697                 want_krb5=yes
2698         else
2699                 want_krb5=yes
2700                 krb5_dir=$withval
2701         fi
2702 ],[
2703         #
2704         # Use Kerberos library if available, otherwise don't.
2705         #
2706         want_krb5=ifavailable
2707         krb5_dir=
2708 ])
2709 if test "x$want_krb5" = "xno" ; then
2710         AC_MSG_RESULT(no)
2711 else
2712         AC_MSG_RESULT(yes)
2713         AC_WIRESHARK_KRB5_CHECK
2714 fi
2715
2716
2717 dnl c-ares Check
2718 C_ARES_LIBS=''
2719 AC_MSG_CHECKING(whether to use the c-ares library if available)
2720
2721 AC_ARG_WITH(c-ares,
2722   AC_HELP_STRING( [--with-c-ares@<:@=DIR@:>@],
2723                   [use c-ares (located in directory DIR, if supplied) - supersedes --with-adns @<:@default=yes, if present@:>@]),
2724 [
2725 if   test "x$withval" = "xno";  then
2726         want_c_ares=no
2727 elif test "x$withval" = "xyes"; then
2728         want_c_ares=yes
2729 elif test -d "$withval"; then
2730         want_c_ares=yes
2731         AC_WIRESHARK_ADD_DASH_L(LDFLAGS, ${withval}/lib)
2732 fi
2733 ])
2734 if test "x$want_c_ares" = "xno" ; then
2735         AC_MSG_RESULT(no)
2736 else
2737         AC_MSG_RESULT(yes)
2738         AC_WIRESHARK_C_ARES_CHECK
2739 fi
2740 AC_SUBST(C_ARES_LIBS)
2741
2742 dnl ADNS Check
2743 ADNS_LIBS=''
2744 AC_MSG_CHECKING(whether to use the GNU ADNS library if available)
2745
2746 AC_ARG_WITH(adns,
2747   AC_HELP_STRING( [--with-adns@<:@=DIR@:>@],
2748                   [use GNU ADNS (located in directory DIR, if supplied) @<:@default=yes, if present@:>@]),
2749 [
2750 if   test "x$withval" = "xno";  then
2751         want_adns=no
2752 elif test "x$withval" = "xyes"; then
2753         want_adns=yes
2754 elif test -d "$withval"; then
2755         want_adns=yes
2756         AC_WIRESHARK_ADD_DASH_L(LDFLAGS, ${withval}/lib)
2757 fi
2758 ])
2759 if test "x$want_adns" = "xno" -o "x$have_good_c_ares" = "xyes" ; then
2760         AC_MSG_RESULT(no)
2761 else
2762         AC_MSG_RESULT(yes)
2763         AC_WIRESHARK_ADNS_CHECK
2764 fi
2765 AC_SUBST(ADNS_LIBS)
2766
2767 if test "x$have_good_c_ares" != "xyes" -a "x$have_good_adns" != "xyes"; then
2768         # We don't have an asynchronous name resolver, look for a synchronous one
2769
2770         dnl Checks for "getaddrinfo()" - and "-lnsl", if we need it to get
2771         dnl "getaddrinfo()".
2772         AC_WIRESHARK_GETADDRINFO_LIB_CHECK
2773
2774         if test "x$ac_cv_func_getaddrinfo" != "xyes" ; then
2775                 # We don't have the modern name resolver, try older stuff
2776
2777                 dnl Checks for "gethostbyname()" - and "-lnsl", if we need it to get
2778                 dnl "gethostbyname()".
2779                 AC_WIRESHARK_GETHOSTBY_LIB_CHECK
2780
2781                 if test "x$ac_cv_func_gethostbyname" != "xyes" ; then
2782                         # Hopefully this never actually happens.
2783                         # The code works even without name resolvers but we
2784                         # alert the user to this unusual condition.
2785                         AC_MSG_ERROR(Couldn't find any name resolvers!)
2786                 fi
2787
2788                 AC_CHECK_FUNCS(gethostbyname2)
2789         fi
2790 fi
2791
2792 dnl GEOIP Check
2793 GEOIP_LIBS=''
2794 AC_MSG_CHECKING(whether to use the GeoIP IP address mapping library if available)
2795
2796 AC_ARG_WITH(geoip,
2797   AC_HELP_STRING( [--with-geoip@<:@=DIR@:>@],
2798                   [use GeoIP (located in directory DIR, if supplied) @<:@default=yes, if present@:>@]),
2799 [
2800 if   test "x$withval" = "xno";  then
2801         want_geoip=no
2802 elif test "x$withval" = "xyes"; then
2803         want_geoip=yes
2804 elif test -d "$withval"; then
2805         want_geoip=yes
2806         AC_WIRESHARK_ADD_DASH_L(LDFLAGS, ${withval}/lib)
2807 fi
2808 ])
2809 if test "x$want_geoip" = "xno"; then
2810         AC_MSG_RESULT(no)
2811 else
2812         AC_MSG_RESULT(yes)
2813         AC_WIRESHARK_GEOIP_CHECK
2814 fi
2815 AC_SUBST(GEOIP_LIBS)
2816
2817 #
2818 # Define WS_MSVC_NORETURN appropriately for declarations of routines that
2819 # never return (just like Charlie on the MTA).
2820 #
2821 # Note that MSVC++ expects __declspec(noreturn) to precede the function
2822 # name and GCC, as far as I know, expects __attribute__((noreturn)) to
2823 # follow the function name, so we need two different flavors of
2824 # noreturn tag.
2825 #
2826 AC_DEFINE(WS_MSVC_NORETURN,, [Define as the string to precede declarations of routines that never return])
2827
2828 dnl Checks for typedefs, structures, and compiler characteristics.
2829 # AC_C_CONST
2830
2831 # Check how we can get the time zone abbreviation
2832 AC_WIRESHARK_TIMEZONE_ABBREV
2833
2834 # We need to know whether "struct stat" has an "st_flags" member
2835 # for file_user_immutable().
2836
2837 AC_WIRESHARK_STRUCT_ST_FLAGS
2838
2839 # We need to know whether "struct sockaddr" has an "sa_len" member
2840 # for get_interface_list().
2841
2842 AC_WIRESHARK_STRUCT_SA_LEN
2843
2844 # We must know our byte order
2845 AC_C_BIGENDIAN
2846
2847 # Checks whether "-traditional" is needed when using "ioctl".
2848 # XXX - do we need this?
2849 AC_PROG_GCC_TRADITIONAL
2850
2851 AC_CHECK_FUNC(getopt_long,
2852   [
2853     GETOPT_LO=""
2854     AC_DEFINE(HAVE_GETOPT_LONG, 1, [Define to 1 if you have the getopt_long function.])
2855
2856     #
2857     # Do we have optreset?
2858     #
2859     AC_MSG_CHECKING(whether optreset is defined)
2860     AC_TRY_LINK([],
2861       [
2862         extern int optreset;
2863
2864         return optreset;
2865       ],
2866       ac_cv_pcap_debug_defined=yes,
2867       ac_cv_pcap_debug_defined=no)
2868     if test "$ac_cv_pcap_debug_defined" = yes ; then
2869       AC_MSG_RESULT(yes)
2870       AC_DEFINE(HAVE_OPTRESET, 1, [Define to 1 if you have the optreset variable])
2871     else
2872       AC_MSG_RESULT(no)
2873     fi
2874   ],
2875   GETOPT_LO="wsgetopt.lo")
2876 AC_SUBST(GETOPT_LO)
2877
2878 AC_CHECK_FUNCS(mkstemp mkdtemp)
2879
2880 AC_SEARCH_LIBS(inet_aton, [socket nsl],
2881   [
2882     INET_ATON_LO=""
2883     AC_DEFINE(HAVE_INET_ATON, 0, [Define to 1 if you have the inet_aton function.])
2884   ],
2885   INET_ATON_LO="inet_aton.lo")
2886 AC_SUBST(INET_ATON_LO)
2887
2888 AC_SEARCH_LIBS(inet_pton, [socket nsl], [
2889   dnl check for pre-BIND82 inet_pton() bug.
2890   AC_MSG_CHECKING(for broken inet_pton)
2891   AC_TRY_RUN([#include <sys/types.h>
2892 #include <sys/socket.h>
2893 #include <netinet/in.h>
2894 #include <arpa/inet.h>
2895 int main()
2896 {
2897 #ifdef AF_INET6
2898   char buf[16];
2899   /* this should return 0 (error) */
2900   return inet_pton(AF_INET6, "0:1:2:3:4:5:6:7:", buf);
2901 #else
2902   return 1;
2903 #endif
2904 }], [AC_MSG_RESULT(ok);
2905 have_inet_pton=yes], [AC_MSG_RESULT(broken);
2906 have_inet_pton=no], [AC_MSG_RESULT(cross compiling, assume it is broken);
2907 have_inet_pton=no])],
2908 have_inet_pton=no)
2909 if test "$have_inet_pton" = no; then
2910   INET_PTON_LO="inet_pton.lo"
2911 else
2912   INET_PTON_LO=""
2913 fi
2914 AM_CONDITIONAL(NEED_INET_PTON_LO, test "x$have_inet_pton" = "xno")
2915 AC_SUBST(INET_PTON_LO)
2916
2917 AC_SEARCH_LIBS(inet_ntop, [socket nsl], [
2918   AC_MSG_CHECKING([for inet_ntop prototype])
2919   AC_TRY_COMPILE([#include <stdio.h>
2920 #include <sys/types.h>
2921 #include <sys/socket.h>
2922 #include <netinet/in.h>
2923 #include <arpa/inet.h>
2924
2925 extern const char *inet_ntop(int, const void *, char *, size_t);],, [
2926     AC_MSG_RESULT(yes)
2927     AC_DEFINE(HAVE_INET_NTOP_PROTO, 1,
2928     [Define if inet_ntop() prototype exists])], [
2929     AC_TRY_COMPILE([#include <stdio.h>
2930 #include <sys/types.h>
2931 #include <sys/socket.h>
2932 #include <netinet/in.h>
2933 #include <arpa/inet.h>
2934
2935 extern const char *inet_ntop(int, const void *, char *, socklen_t);],, [
2936       AC_MSG_RESULT(yes)
2937       AC_DEFINE(HAVE_INET_NTOP_PROTO, 1,
2938       [Define if inet_ntop() prototype exists])], [
2939       AC_MSG_RESULT(no)])])
2940   INET_NTOP_LO=""], [
2941   INET_NTOP_LO="inet_ntop.lo"
2942   AC_DEFINE(NEED_INET_V6DEFS_H, 1,
2943   [Define if inet/v6defs.h needs to be included])])
2944 AM_CONDITIONAL(NEED_INET_NTOP_LO, test "x$INET_NTOP_LO" != "x")
2945 AC_SUBST(INET_NTOP_LO)
2946
2947 AC_CHECK_FUNC(strptime,
2948   [
2949     STRPTIME_LO=""
2950     AC_DEFINE(HAVE_STRPTIME, 1, [Define if you have the strptime function.])
2951   ],
2952   STRPTIME_LO="strptime.lo")
2953 AC_SUBST(STRPTIME_LO)
2954
2955 AC_CHECK_FUNC(popcount,
2956   [
2957     POPCOUNT_LO=""
2958     AC_DEFINE(HAVE_POPCOUNT, 1, [Define if you have the popcount function.])
2959   ],
2960   POPCOUNT_LO="popcount.lo")
2961 AC_SUBST(POPCOUNT_LO)
2962
2963 AC_CHECK_FUNCS(getprotobynumber)
2964 AC_CHECK_FUNCS(issetugid)
2965 AC_CHECK_FUNCS(sysconf)
2966
2967 dnl blank for now, but will be used in future
2968 AC_SUBST(wireshark_SUBDIRS)
2969
2970 # Check Bluetooth SBC codec for RTP Player
2971 # git://git.kernel.org/pub/scm/bluetooth/sbc.git
2972 AC_ARG_WITH([sbc],
2973   AC_HELP_STRING( [--with-sbc=@<:@yes/no@:>@],
2974                   [use SBC codec to play Bluetooth A2DP stream @<:@default=yes, if available@:>@]),
2975   with_sbc="$withval"; want_sbc="yes", with_sbc="yes")
2976
2977 PKG_CHECK_MODULES(SBC, sbc >= 1.0, [have_sbc=yes], [have_sbc=no])
2978 if test "x$with_sbc" != "xno"; then
2979     if (test "${have_sbc}" = "yes"); then
2980         AC_DEFINE(HAVE_SBC, 1, [Define to support playing SBC by standalone BlueZ SBC library])
2981     elif test "x$want_sbc" = "xyes"; then
2982         # Error out if the user explicitly requested the sbc library
2983         AC_MSG_ERROR([SBC codec library was requested, but is not available])
2984     fi
2985 else
2986     have_sbc=no
2987 fi
2988
2989 dnl
2990 dnl check whether plugins should be enabled and, if they should be,
2991 dnl check for plugins directory - stolen from Amanda's configure.ac
2992 dnl
2993 dnl we don't wish to expand ${libdir} yet
2994 plugindir='${libdir}/wireshark/plugins/${VERSION}'
2995 AC_ARG_WITH(plugins,
2996   AC_HELP_STRING( [--with-plugins@<:@=DIR@:>@],
2997                   [support plugins (installed in DIR, if supplied) @<:@default=yes, if possible@:>@]),
2998 [
2999   if test "x$withval" = "xno"; then
3000     have_plugins=no
3001   elif test "x$have_plugins" = "xno"; then
3002       AC_MSG_ERROR([GLib on this platform doesn't support loadable modules, so you can't enable plugins.])
3003   elif test "x$withval" != "xyes"; then
3004       plugindir="$withval"
3005   fi
3006 ])
3007 AM_CONDITIONAL(HAVE_PLUGINS, test "x$have_plugins" = "xyes")
3008 if test x$have_plugins = xyes
3009 then
3010   AC_DEFINE(HAVE_PLUGINS, 1, [Define if plugins are enabled])
3011 fi
3012 AC_SUBST(plugindir)
3013 CPPFLAGS="$CPPFLAGS '-DPLUGIN_INSTALL_DIR=\"\$(plugindir)\"'"
3014
3015 #
3016 # The plugin dissectors reside in ./plugins/PROTO/
3017 #
3018 PLUGIN_LIBS=""
3019 AC_SUBST(PLUGIN_LIBS)
3020
3021
3022 dnl Use extcap by default
3023 extcapdir='${datadir}/wireshark/extcap/'
3024 AC_ARG_WITH(extcap,
3025   AC_HELP_STRING( [--with-extcap@<:@=DIR@:>@],
3026                   [use extcap for external capture sources (installed in DIR, if supplied) @<:@default=yes, if possible@:>@]),
3027 [
3028   if test "x$withval" = "xno"; then
3029       have_extcap=no
3030   elif test "x$withval" = "xyes"; then
3031       have_extcap=yes
3032   elif test "x$withval" != "xyes"; then
3033       have_extcap=yes
3034       extcapdir ="$withval"
3035   fi
3036 ],[
3037     have_extcap=yes
3038 ])
3039 AM_CONDITIONAL(HAVE_EXTCAP, test "x$have_extcap" = "xyes")
3040 if test "x$have_extcap" = "xyes"
3041 then
3042   AC_DEFINE(HAVE_EXTCAP, 1, [Define if external capture sources should be enabled])
3043   AC_DEFINE_UNQUOTED(EXTCAP_DIR,"$extcapdir", [Directory for extcap plugins])
3044 fi
3045 AC_SUBST(extcapdir)
3046
3047 dnl libtool defs
3048 #
3049 # Yes, AM_PROG_LIBTOOL is redundant with newer version(s) of some tool(s)
3050 # (autoconf?  automake?  libtool?) - with the newer version(s), it's
3051 # just an alias for AC_PROG_LIBTOOL, which is called earlier.
3052 #
3053 # With older version(s) of those tool(s), however, it's not just an
3054 # alias, and the configure scripts don't work without it.
3055 #
3056 AM_PROG_LIBTOOL
3057 AC_SUBST(LIBTOOL_DEPS)
3058
3059 AM_CONDITIONAL(ENABLE_STATIC, test x$enable_static = xyes)
3060 if test x$enable_static = xyes -a x$have_plugins = xyes
3061 then
3062   AC_DEFINE(ENABLE_STATIC, 1, [Link plugins statically into Wireshark])
3063 fi
3064 AC_SUBST(ENABLE_STATIC)
3065
3066 # Gather which GUI we're building for rpmbuild
3067 if test "x$have_gtk" = "xyes"; then
3068         if test "x$with_gtk3" = "xyes"; then
3069                 RPMBUILD_WITH_ARGS="--with gtk3 --without gtk2"
3070         else
3071                 RPMBUILD_WITH_ARGS="--without gtk3 --with gtk2"
3072         fi
3073 else
3074         RPMBUILD_WITH_ARGS="--without gtk2 --without gtk3"
3075 fi
3076 if test "x$have_qt" = "xyes" ; then
3077         if test "$qt_version" -eq "5"; then
3078                 RPMBUILD_WITH_ARGS="$RPMBUILD_WITH_ARGS --with qt5"
3079         else
3080                 RPMBUILD_WITH_ARGS="$RPMBUILD_WITH_ARGS --with qt"
3081         fi
3082 else
3083         RPMBUILD_WITH_ARGS="$RPMBUILD_WITH_ARGS --without qt --without qt5"
3084 fi
3085 if test "x$have_lua" = "xyes" ; then
3086         RPMBUILD_WITH_ARGS="$RPMBUILD_WITH_ARGS --with lua"
3087 else
3088         RPMBUILD_WITH_ARGS="$RPMBUILD_WITH_ARGS --without lua"
3089 fi
3090 AC_SUBST(RPMBUILD_WITH_ARGS)
3091
3092 dnl Save the cacheable configure results to config.cache before recursing
3093 AC_CACHE_SAVE
3094
3095 sinclude(plugins/Custom.m4) dnl
3096 ifdef(_CUSTOM_AC_OUTPUT_,, define(_CUSTOM_AC_OUTPUT_, )) dnl
3097
3098 sinclude(asn1/Custom.m4) dnl
3099 ifdef(_CUSTOM_ASN1_AC_OUTPUT_,, define(_CUSTOM_ASN1_AC_OUTPUT_, )) dnl
3100
3101 AC_CONFIG_HEADERS(config.h)
3102 AC_OUTPUT(
3103   Makefile
3104   doxygen.cfg
3105   asn1/Makefile
3106   _CUSTOM_ASN1_AC_OUTPUT_
3107   asn1/acp133/Makefile
3108   asn1/acse/Makefile
3109   asn1/ansi_map/Makefile
3110   asn1/ansi_tcap/Makefile
3111   asn1/atn-cm/Makefile
3112   asn1/atn-cpdlc/Makefile
3113   asn1/atn-ulcs/Makefile
3114   asn1/c1222/Makefile
3115   asn1/camel/Makefile
3116   asn1/cdt/Makefile
3117   asn1/charging_ase/Makefile
3118   asn1/cmip/Makefile
3119   asn1/cmp/Makefile
3120   asn1/crmf/Makefile
3121   asn1/cms/Makefile
3122   asn1/credssp/Makefile
3123   asn1/dap/Makefile
3124   asn1/disp/Makefile
3125   asn1/dop/Makefile
3126   asn1/dsp/Makefile
3127   asn1/ess/Makefile
3128   asn1/ftam/Makefile
3129   asn1/goose/Makefile
3130   asn1/gprscdr/Makefile
3131   asn1/gsm_map/Makefile
3132   asn1/h225/Makefile
3133   asn1/h235/Makefile
3134   asn1/h245/Makefile
3135   asn1/h248/Makefile
3136   asn1/h282/Makefile
3137   asn1/h283/Makefile
3138   asn1/h323/Makefile
3139   asn1/h450/Makefile
3140   asn1/h450-ros/Makefile
3141   asn1/h460/Makefile
3142   asn1/h501/Makefile
3143   asn1/HI2Operations/Makefile
3144   asn1/hnbap/Makefile
3145   asn1/idmp/Makefile
3146   asn1/ilp/Makefile
3147   asn1/inap/Makefile
3148   asn1/isdn-sup/Makefile
3149   asn1/kerberos/Makefile
3150   asn1/lcsap/Makefile
3151   asn1/ldap/Makefile
3152   asn1/logotypecertextn/Makefile
3153   asn1/lpp/Makefile
3154   asn1/lppa/Makefile
3155   asn1/lppe/Makefile
3156   asn1/lte-rrc/Makefile
3157   asn1/m3ap/Makefile
3158   asn1/mms/Makefile
3159   asn1/mpeg-audio/Makefile
3160   asn1/mpeg-pes/Makefile
3161   asn1/nbap/Makefile
3162   asn1/ns_cert_exts/Makefile
3163   asn1/novell_pkis/Makefile
3164   asn1/ocsp/Makefile
3165   asn1/p1/Makefile
3166   asn1/p22/Makefile
3167   asn1/p7/Makefile
3168   asn1/p772/Makefile
3169   asn1/pcap/Makefile
3170   asn1/pkcs1/Makefile
3171   asn1/pkcs12/Makefile
3172   asn1/pkinit/Makefile
3173   asn1/pkixac/Makefile
3174   asn1/pkix1explicit/Makefile
3175   asn1/pkix1implicit/Makefile
3176   asn1/pkixproxy/Makefile
3177   asn1/pkixqualified/Makefile
3178   asn1/pkixtsp/Makefile
3179   asn1/pres/Makefile
3180   asn1/q932/Makefile
3181   asn1/q932-ros/Makefile
3182   asn1/qsig/Makefile
3183   asn1/ranap/Makefile
3184   asn1/rnsap/Makefile
3185   asn1/ros/Makefile
3186   asn1/rrc/Makefile
3187   asn1/rrlp/Makefile
3188   asn1/rtse/Makefile
3189   asn1/rua/Makefile
3190   asn1/s1ap/Makefile
3191   asn1/sabp/Makefile
3192   asn1/sbc-ap/Makefile
3193   asn1/smrse/Makefile
3194   asn1/snmp/Makefile
3195   asn1/spnego/Makefile
3196   asn1/sv/Makefile
3197   asn1/t124/Makefile
3198   asn1/t125/Makefile
3199   asn1/t38/Makefile
3200   asn1/tcap/Makefile
3201   asn1/tetra/Makefile
3202   asn1/ulp/Makefile
3203   asn1/wlancertextn/Makefile
3204   asn1/x2ap/Makefile
3205   asn1/x509af/Makefile
3206   asn1/x509ce/Makefile
3207   asn1/x509if/Makefile
3208   asn1/x509sat/Makefile
3209   asn1/x721/Makefile
3210   capchild/Makefile
3211   capchild/doxygen.cfg
3212   caputils/Makefile
3213   caputils/doxygen.cfg
3214   doc/Makefile
3215   docbook/Makefile
3216   epan/Makefile
3217   epan/compress/Makefile
3218   epan/crypt/Makefile
3219   epan/doxygen.cfg
3220   epan/dfilter/Makefile
3221   epan/dissectors/Makefile
3222   epan/dissectors/dcerpc/Makefile
3223   epan/dissectors/pidl/Makefile
3224   epan/ftypes/Makefile
3225   epan/nghttp2/Makefile
3226   epan/wmem/Makefile
3227   epan/wslua/Makefile
3228   codecs/Makefile
3229   ui/Makefile
3230   ui/doxygen.cfg
3231   ui/gtk/Makefile
3232   ui/gtk/doxygen.cfg
3233   ui/cli/Makefile
3234   ui/qt/Makefile
3235   ui/qt/doxygen.cfg
3236   help/Makefile
3237   packaging/Makefile
3238   packaging/macosx/Info.plist
3239   packaging/macosx/Makefile
3240   packaging/macosx/osx-dmg.sh
3241   packaging/macosx/Wireshark_package.pmdoc/index.xml
3242   packaging/nsis/Makefile
3243   packaging/rpm/Makefile
3244   packaging/rpm/SPECS/Makefile
3245   packaging/rpm/SPECS/wireshark.spec
3246   packaging/svr4/Makefile
3247   packaging/svr4/checkinstall
3248   packaging/svr4/pkginfo
3249   plugins/Makefile
3250   plugins/docsis/Makefile
3251   plugins/easy_codec/Makefile
3252   plugins/ethercat/Makefile
3253   plugins/gryphon/Makefile
3254   plugins/irda/Makefile
3255   plugins/m2m/Makefile
3256   plugins/mate/Makefile
3257   plugins/opcua/Makefile
3258   plugins/profinet/Makefile
3259   plugins/stats_tree/Makefile
3260   plugins/unistim/Makefile
3261   plugins/wimax/Makefile
3262   plugins/wimaxasncp/Makefile
3263   plugins/wimaxmacphy/Makefile
3264   tools/Makefile
3265   tools/lemon/Makefile
3266   wiretap/Makefile
3267   wsutil/Makefile
3268   echld/Makefile
3269   _CUSTOM_AC_OUTPUT_
3270   ,)
3271 dnl AC_CONFIG_FILES([tools/setuid-root.pl], [chmod +x tools/setuid-root.pl])
3272
3273
3274 # Pretty messages
3275
3276 if test "x$have_gtk" = "xyes"; then
3277         if test "x$with_gtk3" = "xyes"; then
3278                 gtk_lib_message=" (with GTK+ 3"
3279         else
3280                 gtk_lib_message=" (with GTK+ 2"
3281         fi
3282         if test "x$have_ige_mac" = "xyes"; then
3283                 gtk_lib_message="$gtk_lib_message and OS X integration)"
3284         else
3285                 gtk_lib_message="$gtk_lib_message)"
3286         fi
3287 fi
3288
3289 if test "x$have_qt" = "xyes" ; then
3290         enable_wireshark_qt="yes"
3291         qt_lib_message=" (with Qt $qt_version)"
3292 else
3293         enable_wireshark_qt="no"
3294 fi
3295
3296 if test "x$enable_setcap_install" = "xyes" ; then
3297         setcap_message="yes"
3298 else
3299         setcap_message="no"
3300 fi
3301
3302 if test "x$enable_setuid_install" = "xyes" ; then
3303         setuid_message="yes"
3304 else
3305         setuid_message="no"
3306 fi
3307
3308 if test "x$DUMPCAP_GROUP" = "x" ; then
3309         dumpcap_group_message="(none)"
3310 else
3311         dumpcap_group_message="$DUMPCAP_GROUP"
3312 fi
3313
3314 if test "x$want_zlib" = "xno" ; then
3315         zlib_message="no"
3316 else
3317         zlib_message="yes"
3318 fi
3319
3320 if test "x$have_lua" = "xyes" ; then
3321         lua_message="yes"
3322 else
3323         lua_message="no"
3324 fi
3325
3326 if test "x$have_qt_multimedia_lib" = "xyes" ; then
3327         qt_multimedia_message="yes"
3328 else
3329         qt_multimedia_message="no"
3330 fi
3331
3332 if test "x$want_portaudio" = "xyes" ; then
3333         portaudio_message="yes"
3334 else
3335         portaudio_message="no"
3336 fi
3337
3338 if test "x$want_ssl" = "xno" ; then
3339         ssl_message="no"
3340 else
3341         ssl_message="yes"
3342 fi
3343
3344 if test "x$want_krb5" = "xno" ; then
3345         krb5_message="no"
3346 else
3347         krb5_message="yes ($ac_krb5_version)"
3348 fi
3349
3350 if test "x$have_good_c_ares" = "xyes" ; then
3351         c_ares_message="yes"
3352 else
3353         c_ares_message="no"
3354 fi
3355
3356 if test "x$have_good_adns" = "xyes" ; then
3357         adns_message="yes"
3358 else
3359         if test "x$have_good_c_ares" = "xyes" ; then
3360                 adns_message="no (using c-ares instead)"
3361         else
3362                 adns_message="no"
3363         fi
3364 fi
3365
3366 if test "x$have_good_libcap" = "xyes" ; then
3367         libcap_message="yes"
3368 else
3369         libcap_message="no"
3370 fi
3371
3372 if test "x$have_good_geoip" = "xyes" ; then
3373         geoip_message="yes"
3374 else
3375         geoip_message="no"
3376 fi
3377
3378 echo ""
3379 echo "The Wireshark package has been configured with the following options."
3380 echo "                    Build wireshark : $enable_wireshark_qt$qt_lib_message"
3381 echo "                Build wireshark-gtk : $have_gtk""$gtk_lib_message"
3382 echo "                       Build tshark : $enable_tshark"
3383 echo "                      Build tfshark : $enable_tfshark"
3384 echo "                     Build capinfos : $enable_capinfos"
3385 echo "                      Build captype : $enable_captype"
3386 echo "                      Build editcap : $enable_editcap"
3387 echo "                      Build dumpcap : $enable_dumpcap"
3388 echo "                     Build mergecap : $enable_mergecap"
3389 echo "                   Build reordercap : $enable_reordercap"
3390 echo "                    Build text2pcap : $enable_text2pcap"
3391 echo "                      Build randpkt : $enable_randpkt"
3392 echo "                       Build dftest : $enable_dftest"
3393 echo "                     Build rawshark : $enable_rawshark"
3394 echo "                  Build androiddump : $enable_androiddump"
3395 echo "                        Build echld : $have_echld"
3396 echo ""
3397 echo "   Save files as pcap-ng by default : $enable_pcap_ng_default"
3398 echo "  Install dumpcap with capabilities : $setcap_message"
3399 echo "             Install dumpcap setuid : $setuid_message"
3400 echo "                  Use dumpcap group : $dumpcap_group_message"
3401 echo "                        Use plugins : $have_plugins"
3402 echo "       Use external capture sources : $have_extcap"
3403 echo "                    Use Lua library : $lua_message"
3404 echo "                Build Qt RTP player : $qt_multimedia_message"
3405 echo "              Build GTK+ RTP player : $portaudio_message"
3406 echo "             Build profile binaries : $enable_profile_build"
3407 echo "                   Use pcap library : $want_pcap"
3408 echo "                   Use zlib library : $zlib_message"
3409 echo "               Use kerberos library : $krb5_message"
3410 echo "                 Use c-ares library : $c_ares_message"
3411 echo "               Use GNU ADNS library : $adns_message"
3412 echo "                Use SMI MIB library : $libsmi_message"
3413 echo "             Use GNU crypto library : $gcrypt_message"
3414 echo "             Use SSL crypto library : $ssl_message"
3415 echo "           Use IPv6 name resolution : $enable_ipv6"
3416 echo "                 Use gnutls library : $tls_message"
3417 echo "     Use POSIX capabilities library : $libcap_message"
3418 echo "                  Use GeoIP library : $geoip_message"
3419 echo "                     Use nl library : $libnl_message"
3420 echo "              Use SBC codec library : $have_sbc"
3421 #echo "                      Use GResource : $have_gresource"