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