checkhf: handle C++-style comments
[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 else
1509   have_plugins=no
1510 fi
1511
1512 #
1513 # If we have <dlfcn.h>, check whether we have dladdr.
1514 #
1515 if test "$ac_cv_header_dlfcn_h" = "yes"
1516 then
1517         #
1518         # Use GLib compiler flags and linker flags; GLib's gmodule
1519         # stuff uses the dl APIs if available, so it might know
1520         # what flags are needed.
1521         #
1522         ac_save_CFLAGS="$CFLAGS"
1523         ac_save_LIBS="$LIBS"
1524         CFLAGS="$WS_CFLAGS $GLIB_CFLAGS $CFLAGS"
1525         LIBS="$LIBS $GLIB_LIBS"
1526         AC_CHECK_FUNCS(dladdr)
1527         if test x$ac_cv_func_dladdr = xno
1528         then
1529                 #
1530                 # OK, try it with -ldl, in case you need that to get
1531                 # dladdr().  For some reason, on Linux, that's not
1532                 # part of the GLib flags; perhaps GLib itself is
1533                 # linked with libdl, so that you can link with
1534                 # Glib and it'll pull libdl in itself.
1535                 #
1536                 LIBS="$LIBS -ldl"
1537                 AC_CHECK_FUNCS(dladdr)
1538         fi
1539         CFLAGS="$ac_save_CFLAGS"
1540         LIBS="$ac_save_LIBS"
1541 fi
1542
1543 #
1544 # Check whether GLib's printf supports thousands grouping. (This might
1545 # be different from the system's printf since GLib can optionally use
1546 # its own printf implementation.)
1547 #
1548 AC_CACHE_CHECK([whether GLib supports POSIX/XSI thousands grouping],
1549                [ac_cv_glib_supports_printf_grouping], [
1550 ac_save_CFLAGS="$CFLAGS"
1551 ac_save_LIBS="$LIBS"
1552 CFLAGS="$WS_CFLAGS $GLIB_CFLAGS $CFLAGS"
1553 LIBS="$LIBS $GLIB_LIBS"
1554 AC_TRY_RUN([
1555 #include <glib.h>
1556 #include <locale.h>
1557 #include <stdio.h>
1558 #include <string.h>
1559
1560 int
1561 main ()
1562 {
1563   gchar *str;
1564   setlocale(LC_ALL, "en_US.UTF-8");
1565   str = g_strdup_printf("%'u", 123456);
1566   return (strcmp (str, "123,456") != 0);
1567 }
1568 ], ac_cv_glib_supports_printf_grouping=yes, ac_cv_glib_supports_printf_grouping=no,
1569    [echo $ac_n "cross compiling; playing it safe... $ac_c"
1570     ac_cv_glib_supports_printf_grouping=no])
1571 CFLAGS="$ac_save_CFLAGS"
1572 LIBS="$ac_save_LIBS"
1573 ])
1574 if test "$ac_cv_glib_supports_printf_grouping" = yes ; then
1575   AC_DEFINE(HAVE_GLIB_PRINTF_GROUPING, 1, [Define if GLib's printf functions support thousands grouping.])
1576 fi
1577
1578 if test "x$have_gtk" = "xyes"
1579 then
1580     #
1581     # We have GTK+; do we want the macOS integration functions and,
1582     # if so, do we have them and, if so, which versions do we have,
1583     # the old Carbon-based ones or the new Cocoa-based ones?
1584     #
1585     AC_MSG_CHECKING(whether to use macOS integration functions)
1586
1587     AC_ARG_WITH(osx-integration,
1588       AC_HELP_STRING( [--with-osx-integration],
1589                       [use macOS integration functions @<:@default=yes, if available@:>@]),
1590     [
1591         if test $withval = no
1592         then
1593             want_osx_integration=no
1594         else
1595             want_osx_integration=yes
1596         fi
1597     ],[
1598         want_osx_integration=yes
1599     ])
1600     if test "x$want_osx_integration" = "xno"; then
1601         AC_MSG_RESULT(no)
1602     else
1603         AC_MSG_RESULT(yes)
1604         AC_WIRESHARK_OSX_INTEGRATION_CHECK
1605     fi
1606 fi
1607
1608 AC_SUBST(wireshark_bin)
1609 AC_SUBST(wireshark_man)
1610 AC_SUBST(wireshark_SUBDIRS)
1611 AM_CONDITIONAL(HAVE_Qt, test "$have_qt" = "yes")
1612 AM_CONDITIONAL(HAVE_GTK, test "$have_gtk" = "yes")
1613 AC_SUBST(OSX_APP_FLAGS)
1614 AC_SUBST(OSX_DMG_FLAGS)
1615
1616 # Enable/disable tshark
1617 AC_ARG_ENABLE(tshark,
1618   AC_HELP_STRING( [--enable-tshark],
1619                   [build tshark @<:@default=yes@:>@]),
1620     tshark=$enableval,enable_tshark=yes)
1621
1622 if test "x$enable_tshark" = "xyes" ; then
1623         tshark_bin="tshark\$(EXEEXT)"
1624         tshark_man="tshark.1"
1625         wiresharkfilter_man="wireshark-filter.4"
1626 else
1627         tshark_bin=""
1628         tshark_man=""
1629 fi
1630 AC_SUBST(tshark_bin)
1631 AC_SUBST(tshark_man)
1632
1633 # Enable/disable editcap
1634
1635 AC_ARG_ENABLE(editcap,
1636   AC_HELP_STRING( [--enable-editcap],
1637                   [build editcap @<:@default=yes@:>@]),
1638     enable_editcap=$enableval,enable_editcap=yes)
1639
1640 if test "x$enable_editcap" = "xyes" ; then
1641         editcap_bin="editcap\$(EXEEXT)"
1642         editcap_man="editcap.1"
1643 else
1644         editcap_bin=""
1645         editcap_man=""
1646 fi
1647 AC_SUBST(editcap_bin)
1648 AC_SUBST(editcap_man)
1649
1650
1651 # Enabling/disabling of dumpcap is done later (after we know if we have PCAP
1652 # or not)
1653
1654 # Enable/disable capinfos
1655
1656 AC_ARG_ENABLE(capinfos,
1657   AC_HELP_STRING( [--enable-capinfos],
1658                   [build capinfos @<:@default=yes@:>@]),
1659     enable_capinfos=$enableval,enable_capinfos=yes)
1660
1661 if test "x$enable_capinfos" = "xyes" ; then
1662         capinfos_bin="capinfos\$(EXEEXT)"
1663         capinfos_man="capinfos.1"
1664 else
1665         capinfos_bin=""
1666         capinfos_man=""
1667 fi
1668 AC_SUBST(capinfos_bin)
1669 AC_SUBST(capinfos_man)
1670
1671 # Enable/disable captype
1672
1673 AC_ARG_ENABLE(captype,
1674   AC_HELP_STRING( [--enable-captype],
1675                   [build captype @<:@default=yes@:>@]),
1676     enable_captype=$enableval,enable_captype=yes)
1677
1678 if test "x$enable_captype" = "xyes" ; then
1679         captype_bin="captype\$(EXEEXT)"
1680         captype_man="captype.1"
1681 else
1682         captype_bin=""
1683         captype_man=""
1684 fi
1685 AC_SUBST(captype_bin)
1686 AC_SUBST(captype_man)
1687
1688 # Enable/disable mergecap
1689
1690 AC_ARG_ENABLE(mergecap,
1691   AC_HELP_STRING( [--enable-mergecap],
1692                   [build mergecap @<:@default=yes@:>@]),
1693     enable_mergecap=$enableval,enable_mergecap=yes)
1694
1695 if test "x$enable_mergecap" = "xyes" ; then
1696         mergecap_bin="mergecap\$(EXEEXT)"
1697         mergecap_man="mergecap.1"
1698 else
1699         mergecap_bin=""
1700         mergecap_man=""
1701 fi
1702 AC_SUBST(mergecap_bin)
1703 AC_SUBST(mergecap_man)
1704
1705 # Enable/disable reordercap
1706
1707 AC_ARG_ENABLE(reordercap,
1708   AC_HELP_STRING( [--enable-reordercap],
1709                   [build reordercap @<:@default=yes@:>@]),
1710     enable_reordercap=$enableval,enable_reordercap=yes)
1711
1712 if test "x$enable_reordercap" = "xyes" ; then
1713         reordercap_bin="reordercap\$(EXEEXT)"
1714         reordercap_man="reordercap.1"
1715 else
1716         reordercap_bin=""
1717         reordercap_man=""
1718 fi
1719 AC_SUBST(reordercap_bin)
1720 AC_SUBST(reordercap_man)
1721
1722 # Enable/disable text2pcap
1723
1724 AC_ARG_ENABLE(text2pcap,
1725   AC_HELP_STRING( [--enable-text2pcap],
1726                   [build text2pcap @<:@default=yes@:>@]),
1727     text2pcap=$enableval,enable_text2pcap=yes)
1728
1729 if test "x$enable_text2pcap" = "xyes" ; then
1730         text2pcap_bin="text2pcap\$(EXEEXT)"
1731         text2pcap_man="text2pcap.1"
1732 else
1733         text2pcap_bin=""
1734         text2pcap_man=""
1735 fi
1736 AC_SUBST(text2pcap_bin)
1737 AC_SUBST(text2pcap_man)
1738
1739 # Enable/disable dftest
1740
1741 AC_ARG_ENABLE(dftest,
1742   AC_HELP_STRING( [--enable-dftest],
1743                   [build dftest @<:@default=yes@:>@]),
1744     enable_dftest=$enableval,enable_dftest=yes)
1745
1746 if test "x$enable_dftest" = "xyes" ; then
1747         dftest_bin="dftest\$(EXEEXT)"
1748         dftest_man="dftest.1"
1749 else
1750         dftest_bin=""
1751         dftest_man=""
1752 fi
1753 AC_SUBST(dftest_bin)
1754 AC_SUBST(dftest_man)
1755
1756 # Enable/disable randpkt
1757
1758 AC_ARG_ENABLE(randpkt,
1759   AC_HELP_STRING( [--enable-randpkt],
1760                   [build randpkt @<:@default=yes@:>@]),
1761     enable_randpkt=$enableval,enable_randpkt=yes)
1762
1763 if test "x$enable_randpkt" = "xyes" ; then
1764         randpkt_bin="randpkt\$(EXEEXT)"
1765         randpkt_man="randpkt.1"
1766 else
1767         randpkt_bin=""
1768         randpkt_man=""
1769 fi
1770 AC_SUBST(randpkt_bin)
1771 AC_SUBST(randpkt_man)
1772
1773 AC_SUBST(wiresharkfilter_man)
1774
1775 dnl pcap check
1776 AC_MSG_CHECKING(whether to use libpcap for packet capture)
1777
1778 AC_ARG_WITH(pcap,
1779   AC_HELP_STRING( [--with-pcap@<:@=DIR@:>@],
1780                   [use libpcap for packet capturing @<:@default=yes@:>@]),
1781 [
1782         if test $withval = no
1783         then
1784                 want_pcap=no
1785         elif test $withval = yes
1786         then
1787                 want_pcap=yes
1788         else
1789                 want_pcap=yes
1790                 pcap_dir=$withval
1791         fi
1792 ],[
1793         want_pcap=yes
1794         pcap_dir=
1795 ])
1796 if test "x$want_pcap" = "xno" ; then
1797         AC_MSG_RESULT(no)
1798 else
1799         AC_MSG_RESULT(yes)
1800         AC_WIRESHARK_PCAP_CHECK
1801 fi
1802
1803 dnl dumpcap check
1804 AC_MSG_CHECKING(whether to build dumpcap)
1805
1806 AC_ARG_ENABLE(dumpcap,
1807   AC_HELP_STRING( [--enable-dumpcap],
1808                   [build dumpcap @<:@default=yes@:>@]),
1809     enable_dumpcap=$enableval,enable_dumpcap=yes)
1810
1811 if test "x$enable_dumpcap" = "xyes" ; then
1812         if test "x$want_pcap" = "xno" ; then
1813                 enable_dumpcap=no
1814                 AC_MSG_RESULT(pcap not available - disabling dumpcap)
1815         else
1816                 AC_MSG_RESULT(yes)
1817         fi
1818 else
1819         AC_MSG_RESULT(no)
1820 fi
1821
1822 if test "x$enable_dumpcap" = "xyes" ; then
1823         dumpcap_bin="dumpcap\$(EXEEXT)"
1824         dumpcap_man="dumpcap.1"
1825 else
1826         dumpcap_bin=""
1827         dumpcap_man=""
1828 fi
1829 AC_SUBST(dumpcap_bin)
1830 AC_SUBST(dumpcap_man)
1831
1832 # Enable/disable rawshark
1833
1834 dnl rawshark check
1835 AC_MSG_CHECKING(whether to build rawshark)
1836
1837 AC_ARG_ENABLE(rawshark,
1838   AC_HELP_STRING( [--enable-rawshark],
1839                   [build rawshark @<:@default=yes@:>@]),
1840     rawshark=$enableval,enable_rawshark=yes)
1841
1842 if test "x$enable_rawshark" = "xyes" ; then
1843         if test "x$want_pcap" = "xno" ; then
1844                 enable_rawshark=no
1845                 AC_MSG_RESULT(pcap not available - disabling rawshark)
1846         else
1847                 AC_MSG_RESULT(yes)
1848         fi
1849 else
1850         AC_MSG_RESULT(no)
1851 fi
1852
1853 if test "x$enable_rawshark" = "xyes" ; then
1854         rawshark_bin="rawshark\$(EXEEXT)"
1855         rawshark_man="rawshark.1"
1856 else
1857         rawshark_bin=""
1858         rawshark_man=""
1859 fi
1860 AC_SUBST(rawshark_bin)
1861 AC_SUBST(rawshark_man)
1862
1863 # Enable/disable sharkd
1864 AC_ARG_ENABLE(sharkd,
1865   AC_HELP_STRING( [--enable-sharkd],
1866                   [build sharkd @<:@default=yes@:>@]),
1867     sharkd=$enableval,enable_sharkd=yes)
1868
1869 if test "x$enable_sharkd" = "xyes" ; then
1870         sharkd_bin="sharkd\$(EXEEXT)"
1871 else
1872         sharkd_bin=""
1873 fi
1874 AC_SUBST(sharkd_bin)
1875
1876 # Enable/disable tfshark
1877 AC_ARG_ENABLE(tfshark,
1878   AC_HELP_STRING( [--enable-tfshark],
1879                   [build tfshark (Experimental) @<:@default=no@:>@]),
1880     tfshark=$enableval,enable_tfshark=no)
1881
1882 if test "x$enable_tfshark" = "xyes" ; then
1883         tfshark_bin="tfshark\$(EXEEXT)"
1884         tfshark_man="tfshark.1"
1885         wiresharkfilter_man="wireshark-filter.4"
1886 else
1887         tfshark_bin=""
1888         tfshark_man=""
1889 fi
1890 AC_SUBST(tfshark_bin)
1891 AC_SUBST(tfshark_man)
1892
1893
1894 dnl Use pcap-ng by default
1895 AC_ARG_ENABLE(pcap-ng-default,
1896   AC_HELP_STRING( [--enable-pcap-ng-default],
1897                   [use the pcap-ng file format by default instead of pcap @<:@default=yes@:>@]),
1898     enable_pcap_ng_default=$enableval,enable_pcap_ng_default=yes)
1899 if test x$enable_pcap_ng_default = xyes; then
1900         AC_DEFINE(PCAP_NG_DEFAULT, 1, [Support for pcap-ng])
1901 fi
1902
1903 dnl pcap remote check
1904 AC_MSG_CHECKING(whether to use libpcap remote capturing feature)
1905
1906 AC_ARG_WITH(pcap-remote,
1907     AC_HELP_STRING([--with-pcap-remote],
1908                    [use libpcap remote capturing (requires libpcap)]),
1909 [
1910     if test $withval = no
1911     then
1912         want_pcap_remote=no
1913     else
1914         want_pcap_remote=yes
1915     fi
1916 ],[
1917     want_pcap_remote=no
1918 ])
1919 if test "x$want_pcap_remote" = "xno" -o "x$want_pcap" = "xno" ; then
1920     AC_MSG_RESULT(no)
1921 else
1922     AC_MSG_RESULT(yes)
1923     AC_WIRESHARK_PCAP_REMOTE_CHECK
1924 fi
1925
1926 dnl zlib check
1927 AC_MSG_CHECKING(whether to use zlib for gzip compression and decompression)
1928
1929 AC_ARG_WITH(zlib,
1930   AC_HELP_STRING([--with-zlib@<:@=DIR@:>@],
1931                  [use zlib (located in directory DIR, if supplied) for gzip compression and decompression @<:@default=yes, if available@:>@]),
1932 [
1933         if test "x$withval" = "xno"
1934         then
1935                 want_zlib=no
1936         elif test "x$withval" = "xyes"
1937         then
1938                 want_zlib=yes
1939         else
1940                 want_zlib=yes
1941                 zlib_dir="$withval"
1942         fi
1943 ],[
1944         #
1945         # Use zlib if it's present, otherwise don't.
1946         #
1947         want_zlib=ifavailable
1948         zlib_dir=
1949 ])
1950 if test "x$want_zlib" = "xno" ; then
1951         AC_MSG_RESULT(no)
1952 else
1953         AC_MSG_RESULT(yes)
1954         AC_WIRESHARK_ZLIB_CHECK
1955         if test "x$want_zlib" = "xno" ; then
1956                 AC_MSG_RESULT(zlib not found - disabling gzip compression and decompression)
1957         else
1958                 if test "x$ac_cv_func_inflatePrime" = "xno" ; then
1959                         AC_MSG_RESULT(inflatePrime not found in zlib - disabling gzipped capture file support)
1960                 fi
1961         fi
1962 fi
1963
1964 dnl lz4 check
1965 LZ4_LIBS=''
1966 AC_MSG_CHECKING(whether to use lz4 compression and decompression)
1967
1968 AC_ARG_WITH(lz4,
1969   AC_HELP_STRING([--with-lz4@<:@=DIR@:>@],
1970                  [use lz4 (located in directory DIR, if supplied) for lz4 compression and decompression @<:@default=yes, if available@:>@]),
1971 [
1972         if test "x$withval" = "xno"
1973         then
1974                 want_lz4=no
1975         elif test "x$withval" = "xyes"
1976         then
1977                 want_lz4=yes
1978         else
1979                 want_lz4=yes
1980                 lz4_dir="$withval"
1981         fi
1982 ],[
1983         #
1984         # Use lz4 if it's present, otherwise don't.
1985         #
1986         want_lz4=ifavailable
1987         lz4_dir=
1988 ])
1989 have_lz4=no
1990 if test "x$want_lz4" = "xno" ; then
1991         AC_MSG_RESULT(no)
1992 else
1993         AC_MSG_RESULT(yes)
1994         AC_WIRESHARK_LZ4_CHECK
1995         if test "x$want_lz4" = "xno" ; then
1996                 AC_MSG_RESULT(lz4 not found - disabling lz4 compression and decompression)
1997         else
1998                 if test "x$ac_cv_func_LZ4_decompress_safe" = "xno" ; then
1999                         AC_MSG_RESULT(LZ4_decompress_safe not found in lz4 - disabling cql lz4 decompression)
2000                 else
2001                         have_lz4=yes
2002                 fi
2003         fi
2004 fi
2005 AC_SUBST(LZ4_LIBS)
2006
2007 dnl snappy check
2008 SNAPPY_LIBS=''
2009 AC_MSG_CHECKING(whether to use snappy compression and decompression)
2010
2011 AC_ARG_WITH(snappy,
2012   AC_HELP_STRING([--with-snappy@<:@=DIR@:>@],
2013                  [use snappy (located in directory DIR, if supplied) for snappy compression and decompression @<:@default=yes, if available@:>@]),
2014 [
2015         if test "x$withval" = "xno"
2016         then
2017                 want_snappy=no
2018         elif test "x$withval" = "xyes"
2019         then
2020                 want_snappy=yes
2021         else
2022                 want_snappy=yes
2023                 snappy_dir="$withval"
2024         fi
2025 ],[
2026         #
2027         # Use snappy if it's present, otherwise don't.
2028         #
2029         want_snappy=ifavailable
2030         snappy_dir=
2031 ])
2032 have_snappy=no
2033 if test "x$want_snappy" = "xno" ; then
2034         AC_MSG_RESULT(no)
2035 else
2036         AC_MSG_RESULT(yes)
2037         AC_WIRESHARK_SNAPPY_CHECK
2038         if test "x$want_snappy" = "xno" ; then
2039                 AC_MSG_RESULT(snappy not found - disabling snappy compression and decompression)
2040         else
2041                 if test "x$ac_cv_func_snappy_uncompress" = "xno" ; then
2042                         AC_MSG_RESULT(snappy_uncompress not found in snappy - disabling cql snappy decompression)
2043                 else
2044                         have_snappy=yes
2045                 fi
2046         fi
2047 fi
2048 AC_SUBST(SNAPPY_LIBS)
2049
2050 dnl Lua check
2051 AC_ARG_WITH(lua,
2052   AC_HELP_STRING( [--with-lua@<:@=DIR@:>@],
2053                   [use liblua (located in directory DIR, if supplied) for the Lua scripting plugin @<:@default=yes, if available@:>@]),
2054 [
2055         if test $withval = no
2056         then
2057                 want_lua=no
2058         elif test $withval = yes
2059         then
2060                 want_lua=yes
2061         else
2062                 want_lua=yes
2063                 want_lua_dir=$withval
2064         fi
2065 ],[
2066         # By default use Lua if we can find it
2067         want_lua=ifavailable
2068         lua_dir=
2069 ])
2070 if test "x$want_lua" != "xno" ; then
2071         AC_WIRESHARK_LIBLUA_CHECK
2072
2073         if test "x$want_lua" = "xyes" -a "x$have_lua" = "xno"
2074         then
2075                 AC_MSG_ERROR([Lua support was requested, but is not available])
2076         fi
2077 fi
2078 if test "x$have_lua" = "xyes"
2079 then
2080         AC_DEFINE(HAVE_LUA, 1, [Define to use Lua])
2081 fi
2082 AM_CONDITIONAL(HAVE_LIBLUA, test x$have_lua = xyes)
2083 AC_SUBST(LUA_LIBS)
2084 AC_SUBST(LUA_CFLAGS)
2085
2086
2087 dnl portaudio check
2088 AC_MSG_CHECKING(whether to use libportaudio for the GTK+ RTP player)
2089
2090 AC_ARG_WITH(portaudio,
2091   AC_HELP_STRING( [--with-portaudio@<:@=DIR@:>@],
2092                   [use libportaudio (located in directory DIR, if supplied) for the GTK+ RTP player @<:@default=yes, if available@:>@]),
2093 [
2094         if test $withval = no
2095         then
2096                 want_portaudio=no
2097         elif test $withval = yes
2098         then
2099                 want_portaudio=yes
2100         else
2101                 want_portaudio=yes
2102                 portaudio_dir=$withval
2103         fi
2104 ],[
2105         #
2106         # Use libportaudio by default
2107         #
2108         want_portaudio=ifavailable
2109         portaudio_dir=
2110 ])
2111 if test "x$want_portaudio" = "xno" ; then
2112         AC_MSG_RESULT(no)
2113 else
2114         AC_MSG_RESULT(yes)
2115         AC_WIRESHARK_LIBPORTAUDIO_CHECK
2116         if test "x$want_portaudio" = "xno" ; then
2117                 AC_MSG_RESULT(libportaudio not found - disabling support for the GTK+ RTP player)
2118         fi
2119 fi
2120 AM_CONDITIONAL(HAVE_LIBPORTAUDIO, test x$want_portaudio = xyes)
2121
2122
2123 dnl Check if dumpcap should be installed with filesystem capabilities
2124 AC_PATH_PROG(SETCAP, setcap)
2125 AC_ARG_ENABLE(setcap-install,
2126   AC_HELP_STRING( [--enable-setcap-install],
2127                   [install dumpcap with cap_net_admin and cap_net_raw @<:@default=no@:>@]),
2128     enable_setcap_install=$enableval,enable_setcap_install=no)
2129
2130 AC_MSG_CHECKING(whether to install dumpcap with cap_net_admin and cap_net_raw capabilities)
2131 if test "x$enable_setcap_install" = "xno" ; then
2132         AC_MSG_RESULT(no)
2133 else
2134         if test "x$SETCAP" = "x" ; then
2135                 AC_MSG_RESULT(setcap not found)
2136                 AC_MSG_ERROR([Setcap install was requested, but setcap was not found])
2137         elif test "x$enable_dumpcap" = "xno" ; then
2138                 AC_MSG_RESULT(dumpcap disabled)
2139                 AC_MSG_ERROR([Setcap install works only with dumpcap, but dumpcap is disabled])
2140         else
2141                 AC_MSG_RESULT(yes)
2142         fi
2143 fi
2144
2145 AM_CONDITIONAL(SETCAP_INSTALL, test x$enable_setcap_install = xyes)
2146
2147 dnl Check if dumpcap should be installed setuid
2148 AC_ARG_ENABLE(setuid-install,
2149   AC_HELP_STRING( [--enable-setuid-install],
2150                   [install dumpcap as setuid @<:@default=no@:>@]),
2151     enable_setuid_install=$enableval,enable_setuid_install=no)
2152
2153 AC_MSG_CHECKING(whether to install dumpcap setuid)
2154 if test "x$enable_setuid_install" = "xno" ; then
2155         AC_MSG_RESULT(no)
2156 else
2157         if test "x$enable_setcap_install" = "xyes" ; then
2158                 enable_setuid_install=no
2159                 AC_MSG_RESULT(setcap and setuid both selected)
2160                 AC_MSG_ERROR(You must choose one of setcap install and setuid install)
2161         elif test "x$enable_dumpcap" = "xno" ; then
2162                 AC_MSG_RESULT(dumpcap disabled)
2163                 AC_MSG_ERROR([Setuid install works only with dumpcap, but dumpcap is disabled])
2164         else
2165                 AC_MSG_RESULT(yes)
2166         fi
2167 fi
2168
2169 AM_CONDITIONAL(SETUID_INSTALL, test x$enable_setuid_install = xyes)
2170 AC_CHECK_FUNCS(setresuid setresgid)
2171
2172 dnl ...but our Network Operations group is named "no"!
2173 DUMPCAP_GROUP=''
2174 AC_ARG_WITH(dumpcap-group,
2175   AC_HELP_STRING( [--with-dumpcap-group=GROUP],
2176                   [restrict dumpcap to GROUP]),
2177 [
2178   if test "x$withval" = "xyes"; then
2179       AC_MSG_ERROR([No dumpcap group specified.])
2180   elif test "x$withval" != "xno"; then
2181       if test "x$enable_dumpcap" = "xno" ; then
2182           AC_MSG_ERROR(dumpcap group install works only with dumpcap but dumpcap is disabled)
2183       fi
2184       AC_MSG_RESULT($withval)
2185       DUMPCAP_GROUP="$withval"
2186   fi
2187 ])
2188 AC_SUBST(DUMPCAP_GROUP)
2189 AM_CONDITIONAL(HAVE_DUMPCAP_GROUP, test x$DUMPCAP_GROUP != x)
2190
2191 dnl libcap (not libpcap) check
2192 LIBCAP_LIBS=''
2193 AC_MSG_CHECKING(whether to use the libcap capabilities library)
2194
2195 AC_ARG_WITH(libcap,
2196   AC_HELP_STRING( [--with-libcap@<:@=DIR@:>@],
2197                   [use libcap (located in directory DIR, if supplied) for POSIX.1e capabilities management @<:@default=yes, if present@:>@]),
2198 [
2199 if   test "x$withval" = "xno";  then
2200         want_libcap=no
2201 elif test "x$withval" = "xyes"; then
2202         want_libcap=yes
2203 elif test -d "$withval"; then
2204         want_libcap=yes
2205         AC_WIRESHARK_ADD_DASH_L(WS_LDFLAGS, ${withval}/lib)
2206 fi
2207 ])
2208 if test "x$with_libcap" = "xno" ; then
2209         AC_MSG_RESULT(no)
2210 else
2211         AC_MSG_RESULT(yes)
2212         AC_WIRESHARK_LIBCAP_CHECK
2213 fi
2214 AC_SUBST(LIBCAP_LIBS)
2215
2216 dnl Checks for header files.
2217 dnl Some of these may not be needed: http://hacks.owlfolio.org/header-survey/
2218 dnl Note, however, that, whilst this script is generally run only on UN*Xes:
2219 dnl
2220 dnl     1) we also support building on and for Windows and not all of those
2221 dnl        headers are present on Windows, so the code has to check a
2222 dnl        #define *anyway* to determine whether to include the header
2223 dnl        file
2224 dnl
2225 dnl and
2226 dnl
2227 dnl     2) this might also be run on Windows with a sufficiently UNIXy
2228 dnl        environment such as Cygwin (although Wireshark should be built
2229 dnl        natively rather than using Cygwin).
2230 dnl
2231 AC_CHECK_HEADERS(fcntl.h getopt.h grp.h inttypes.h netdb.h pwd.h unistd.h)
2232 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)
2233 AC_CHECK_HEADERS(netinet/in.h)
2234 AC_CHECK_HEADERS(arpa/inet.h arpa/nameser.h)
2235 AC_CHECK_HEADERS(ifaddrs.h)
2236
2237 #
2238 # On Linux, check for some additional headers, which we need as a
2239 # workaround for a bonding driver bug and for libpcap's current lack
2240 # of its own workaround for that bug.
2241 #
2242 case "$host_os" in
2243 linux*)
2244         AC_CHECK_HEADERS(linux/sockios.h linux/if_bonding.h,,,[#include <sys/socket.h>])
2245         ;;
2246 esac
2247
2248 dnl SSL Check
2249 SSL_LIBS=''
2250 AC_MSG_CHECKING(whether to use SSL library)
2251
2252 AC_ARG_WITH(ssl,
2253   AC_HELP_STRING( [--with-ssl@<:@=DIR@:>@],
2254                   [use SSL crypto library (located in directory DIR, if supplied) @<:@default=no@:>@]),
2255 [
2256 if test "x$withval" = "xno";  then
2257         want_ssl=no
2258 elif test "x$withval" = "xyes"; then
2259         want_ssl=yes
2260 elif test -d "$withval"; then
2261         want_ssl=yes
2262         AC_WIRESHARK_ADD_DASH_L(WS_LDFLAGS, ${withval}/lib)
2263 fi
2264 ],[
2265         want_ssl=no
2266 ])
2267 if test "x$want_ssl" = "xyes"; then
2268         AC_MSG_RESULT(yes)
2269         AC_CHECK_LIB(crypto,EVP_md5,
2270             [
2271                 SSL_LIBS=-lcrypto
2272             ],
2273             [
2274                 AC_MSG_ERROR([SSL crypto library was requested, but is not available])
2275             ])
2276 else
2277         AC_MSG_RESULT(no)
2278 fi
2279 AC_SUBST(SSL_LIBS)
2280
2281 dnl kerberos check
2282 AC_MSG_CHECKING(whether to use Kerberos library)
2283
2284 AC_ARG_WITH(krb5,
2285   AC_HELP_STRING( [--with-krb5@<:@=DIR@:>@],
2286                   [use Kerberos library (located in directory DIR, if supplied) to use in Kerberos dissection @<:@default=yes@:>@]),
2287 [
2288         if test $withval = no
2289         then
2290                 want_krb5=no
2291         elif test $withval = yes
2292         then
2293                 want_krb5=yes
2294         else
2295                 want_krb5=yes
2296                 krb5_dir=$withval
2297         fi
2298 ],[
2299         #
2300         # Use Kerberos library if available, otherwise don't.
2301         #
2302         want_krb5=ifavailable
2303         krb5_dir=
2304 ])
2305 if test "x$want_krb5" = "xno" ; then
2306         AC_MSG_RESULT(no)
2307 else
2308         AC_MSG_RESULT(yes)
2309         AC_WIRESHARK_KRB5_CHECK
2310 fi
2311
2312
2313 dnl c-ares Check
2314 C_ARES_LIBS=''
2315 AC_MSG_CHECKING(whether to use the c-ares library if available)
2316
2317 AC_ARG_WITH(c-ares,
2318   AC_HELP_STRING( [--with-c-ares@<:@=DIR@:>@],
2319                   [use c-ares (located in directory DIR, if supplied) @<:@default=yes, if present@:>@]),
2320 [
2321 if   test "x$withval" = "xno";  then
2322         want_c_ares=no
2323 elif test "x$withval" = "xyes"; then
2324         want_c_ares=yes
2325 elif test -d "$withval"; then
2326         want_c_ares=yes
2327         AC_WIRESHARK_ADD_DASH_L(WS_LDFLAGS, ${withval}/lib)
2328 fi
2329 ])
2330 if test "x$want_c_ares" = "xno" ; then
2331         AC_MSG_RESULT(no)
2332 else
2333         AC_MSG_RESULT(yes)
2334         AC_WIRESHARK_C_ARES_CHECK
2335 fi
2336 AC_SUBST(C_ARES_LIBS)
2337
2338 dnl GEOIP Check
2339 GEOIP_LIBS=''
2340 AC_MSG_CHECKING(whether to use the GeoIP IP address mapping library if available)
2341
2342 AC_ARG_WITH(geoip,
2343   AC_HELP_STRING( [--with-geoip@<:@=DIR@:>@],
2344                   [use GeoIP (located in directory DIR, if supplied) @<:@default=yes, if present@:>@]),
2345 [
2346 if   test "x$withval" = "xno";  then
2347         want_geoip=no
2348 elif test "x$withval" = "xyes"; then
2349         want_geoip=yes
2350 elif test -d "$withval"; then
2351         want_geoip=yes
2352         AC_WIRESHARK_ADD_DASH_L(WS_LDFLAGS, ${withval}/lib)
2353 fi
2354 ])
2355 if test "x$want_geoip" = "xno"; then
2356         AC_MSG_RESULT(no)
2357 else
2358         AC_MSG_RESULT(yes)
2359         AC_WIRESHARK_GEOIP_CHECK
2360 fi
2361 AC_SUBST(GEOIP_LIBS)
2362
2363 dnl LIBSSH Check
2364 LIBSSH=''
2365 AC_MSG_CHECKING(whether to use the libssh library if available)
2366
2367 AC_ARG_WITH(ssh,
2368   AC_HELP_STRING( [--with-libssh@<:@=DIR@:>@],
2369                   [use libssh (located in directory DIR, if supplied) @<:@default=yes, if present@:>@]),
2370 [
2371 if   test "x$withval" = "xno";  then
2372         want_libssh=no
2373 elif test "x$withval" = "xyes"; then
2374         want_libssh=yes
2375 elif test -d "$withval"; then
2376         want_libssh=yes
2377         AC_WIRESHARK_ADD_DASH_L(WS_LDFLAGS, ${withval}/lib)
2378 fi
2379 ])
2380 if test "x$want_libssh" = "xno"; then
2381         AC_MSG_RESULT(no)
2382 else
2383         AC_MSG_RESULT(yes)
2384         AC_WIRESHARK_LIBSSH_CHECK
2385 fi
2386 AC_SUBST(LIBSSH_LIBS)
2387
2388 dnl nghttp2 Check
2389 NGHTTP2_LIBS=''
2390 AC_MSG_CHECKING(whether to use the nghttp2 HPACK library if available)
2391
2392 AC_ARG_WITH(nghttp2,
2393   AC_HELP_STRING( [--with-nghttp2@<:@=DIR@:>@],
2394                   [use nghttp2 (located in directory DIR, if supplied) @<:@default=yes, if present@:>@]),
2395 [
2396 if   test "x$withval" = "xno";  then
2397         want_nghttp2=no
2398 elif test "x$withval" = "xyes"; then
2399         want_nghttp2=yes
2400 elif test -d "$withval"; then
2401         want_nghttp2=yes
2402         AC_WIRESHARK_ADD_DASH_L(WS_LDFLAGS, ${withval}/lib)
2403 fi
2404 ])
2405 if test "x$want_nghttp2" = "xno"; then
2406         AC_MSG_RESULT(no)
2407 else
2408         AC_MSG_RESULT(yes)
2409         AC_WIRESHARK_NGHTTP2_CHECK
2410 fi
2411 AC_SUBST(NGHTTP2_LIBS)
2412
2413 dnl Checks for typedefs, structures, and compiler characteristics.
2414 # AC_C_CONST
2415
2416 # Check how we can get the time zone abbreviation
2417 AC_STRUCT_TIMEZONE
2418
2419 # We need to know whether "struct stat" has an "st_flags" member
2420 # for file_user_immutable().
2421
2422 AC_CHECK_MEMBERS([struct stat.st_flags])
2423
2424 # We need to know whether "struct stat" has an "st_birthtime" member
2425 # or an "__st_birthtime" member for the file set dialog.
2426
2427 AC_CHECK_MEMBERS([struct stat.st_birthtime])
2428 AC_CHECK_MEMBERS([struct stat.__st_birthtime])
2429
2430 # We need to know whether "struct sockaddr" has an "sa_len" member
2431 # for get_interface_list().
2432
2433 AC_CHECK_MEMBERS([struct sockaddr.sa_len],,,
2434                  [#ifdef HAVE_SYS_TYPES_H
2435                   #include <sys/types.h>
2436                   #endif
2437                   #ifdef HAVE_SYS_SOCKET_H
2438                   #include <sys/socket.h>
2439                   #endif])
2440
2441 # We must know our byte order
2442 AC_C_BIGENDIAN
2443
2444 # Checks whether "-traditional" is needed when using "ioctl".
2445 # XXX - do we need this?
2446 AC_PROG_GCC_TRADITIONAL
2447
2448 AC_REPLACE_FUNCS(getopt_long)
2449 dnl
2450 dnl Do we have optreset?
2451 dnl
2452 if test "x$ac_cv_func_getopt_long" = xyes; then
2453   AC_CACHE_CHECK([whether optreset is defined], ac_cv_have_optreset,
2454     AC_LINK_IFELSE([AC_LANG_SOURCE([[extern int optreset;return optreset;]])],
2455         ac_cv_have_optreset=yes, ac_cv_have_optreset=no))
2456   if test "$ac_cv_have_optreset" = yes ; then
2457     AC_DEFINE(HAVE_OPTRESET, 1, [Define to 1 if you have the optreset variable])
2458   fi
2459 fi
2460
2461 AC_REPLACE_FUNCS(inet_aton)
2462
2463 AC_CHECK_FUNC(inet_pton, [
2464   dnl check for pre-BIND82 inet_pton() bug.
2465   AC_MSG_CHECKING(for broken inet_pton)
2466   AC_TRY_RUN([#include <sys/types.h>
2467 #include <sys/socket.h>
2468 #include <netinet/in.h>
2469 #include <arpa/inet.h>
2470 int main()
2471 {
2472 #ifdef AF_INET6
2473   char buf[16];
2474   /* this should return 0 (error) */
2475   return inet_pton(AF_INET6, "0:1:2:3:4:5:6:7:", buf);
2476 #else
2477   return 1;
2478 #endif
2479 }], [AC_MSG_RESULT(ok);
2480 have_inet_pton=yes], [AC_MSG_RESULT(broken);
2481 have_inet_pton=no], [AC_MSG_RESULT([cross compiling, assume it is broken]);
2482 have_inet_pton=no])],
2483 have_inet_pton=no)
2484 if test "$have_inet_pton" = no; then
2485   AC_LIBOBJ(inet_pton)
2486 else
2487   AC_DEFINE(HAVE_INET_PTON, 1, [Define to 1 if you have the `inet_pton' function.])
2488 fi
2489
2490 AC_REPLACE_FUNCS(inet_ntop)
2491 AC_REPLACE_FUNCS(strptime)
2492 AC_REPLACE_FUNCS(popcount)
2493
2494 AC_CHECK_FUNCS(mkstemps mkdtemp)
2495 AC_CHECK_FUNCS(getprotobynumber)
2496 AC_CHECK_FUNCS(issetugid)
2497 AC_CHECK_FUNCS(sysconf)
2498 AC_CHECK_FUNCS(getifaddrs)
2499 AC_CHECK_FUNC(getexecname)
2500
2501 #
2502 # Check for SpeexDSP (http://www.speex.org)
2503 #
2504 AS_IF([test "x$have_qt_multimedia_lib" = xyes],
2505         [PKG_CHECK_MODULES(SPEEXDSP, speexdsp, [have_speexdsp=yes], [have_speexdsp=no])])
2506 AS_IF([test "x$have_speexdsp" = xyes],
2507         [AC_DEFINE(HAVE_SPEEXDSP, 1, [Define to 1 if you have SpeexDSP])])
2508 AM_CONDITIONAL(HAVE_SPEEXDSP, [test "x$have_speexdsp" = "xyes"])
2509
2510 # Check Bluetooth SBC codec for RTP Player
2511 # git://git.kernel.org/pub/scm/bluetooth/sbc.git
2512 AC_ARG_WITH([sbc],
2513   AC_HELP_STRING( [--with-sbc=@<:@yes/no@:>@],
2514                   [use SBC codec to play Bluetooth A2DP stream @<:@default=yes, if available@:>@]),
2515   with_sbc="$withval"; want_sbc="yes", with_sbc="yes")
2516
2517 PKG_CHECK_MODULES(SBC, sbc >= 1.0, [have_sbc=yes], [have_sbc=no])
2518 if test "x$with_sbc" != "xno"; then
2519     if (test "${have_sbc}" = "yes"); then
2520         AC_DEFINE(HAVE_SBC, 1, [Define to support playing SBC by standalone BlueZ SBC library])
2521     elif test "x$want_sbc" = "xyes"; then
2522         # Error out if the user explicitly requested the sbc library
2523         AC_MSG_ERROR([SBC codec library was requested, but is not available])
2524     fi
2525 else
2526     have_sbc=no
2527 fi
2528 AM_CONDITIONAL(HAVE_SBC, test "x$have_sbc" = "xyes")
2529
2530 #`
2531 # Check SpanDSP library for RTP Player
2532 # http://www.soft-switch.org/
2533 AC_ARG_WITH([spandsp],
2534   AC_HELP_STRING( [--with-spandsp=@<:@yes/no@:>@],
2535                  [use SpanDSP to play G.722/G.726 codecs @<:@default=yes, if available@:>@]),
2536   with_spandsp="$withval"; want_spandsp="yes", with_spandsp="yes")
2537
2538 PKG_CHECK_MODULES(SPANDSP, spandsp, [have_spandsp=yes], [have_spandsp=no])
2539 if test "x$with_spandsp" != "xno"; then
2540     if (test "${have_spandsp}" = "yes"); then
2541         AC_DEFINE(HAVE_SPANDSP, 1, [Define if you have the SpanDSP library])
2542     elif test "x$want_spandsp" = "xyes"; then
2543         # Error out if the user explicitly requested the SpanDSP library
2544         AC_MSG_ERROR([SpanDSP library was requested, but is not available])
2545     fi
2546 else
2547     have_spandsp=no
2548 fi
2549 AM_CONDITIONAL(HAVE_SPANDSP, test "x$have_spandsp" = "xyes")
2550
2551 dnl
2552 dnl check whether plugins should be enabled and, if they should be,
2553 dnl check for plugins directory - stolen from Amanda's configure.ac
2554 dnl
2555 dnl we don't wish to expand ${libdir} yet
2556 plugindir="\${libdir}/wireshark/plugins/${VERSION}"
2557 AC_ARG_WITH(plugins,
2558   AC_HELP_STRING( [--with-plugins@<:@=DIR@:>@],
2559                   [support plugins (installed in DIR, if supplied) @<:@default=yes, if possible@:>@]),
2560 [
2561   if test "x$withval" = "xno"; then
2562     have_plugins=no
2563   elif test "x$have_plugins" = "xno"; then
2564       AC_MSG_ERROR([GLib on this platform doesn't support loadable modules, so you can't enable plugins.])
2565   elif test "x$withval" != "xyes"; then
2566       plugindir="$withval"
2567   fi
2568 ])
2569 AM_CONDITIONAL(HAVE_PLUGINS, test "x$have_plugins" = "xyes")
2570 if test x$have_plugins = xyes
2571 then
2572   plugins_dir="plugins"
2573   AC_DEFINE(HAVE_PLUGINS, 1, [Define if plugins are enabled])
2574 else
2575   plugins_dir=""
2576 fi
2577 AC_SUBST(plugins_dir)
2578 AC_SUBST(plugindir)
2579
2580 #
2581 # The plugin dissectors reside in ./plugins/PROTO/
2582 #
2583 PLUGIN_LIBS=""
2584 AC_SUBST(PLUGIN_LIBS)
2585
2586 dnl
2587 dnl check whether extcap programs should be enabled and, if they should be,
2588 dnl check for extcap directory - stolen from Amanda's configure.ac
2589 dnl
2590 dnl we don't wish to expand ${libdir} yet
2591 extcapdir="\${libdir}/wireshark/extcap"
2592 AC_ARG_WITH(extcap,
2593   AC_HELP_STRING( [--with-extcap@<:@=DIR@:>@],
2594                   [use extcap for external capture sources (installed in DIR, if supplied) @<:@default=yes, if possible@:>@]),
2595 [
2596   if test "x$withval" = "xno"; then
2597       have_extcap=no
2598   elif test "x$withval" = "xyes"; then
2599       have_extcap=yes
2600   elif test "x$withval" != "xyes"; then
2601       have_extcap=yes
2602       extcapdir ="$withval"
2603   fi
2604 ],[
2605     have_extcap=yes
2606 ])
2607 AM_CONDITIONAL(HAVE_EXTCAP, test "x$have_extcap" = "xyes")
2608 if test "x$have_extcap" = "xyes"
2609 then
2610   AC_DEFINE(HAVE_EXTCAP, 1, [Define if external capture sources should be enabled])
2611   extcap_subdir="extcap"
2612   extcap_man="extcap.4"
2613 fi
2614 AC_SUBST(extcap_subdir)
2615 AC_SUBST(extcap_man)
2616 AC_SUBST(extcapdir)
2617
2618 dnl androiddump check
2619 AC_MSG_CHECKING(whether to build androiddump)
2620
2621 AC_ARG_ENABLE(androiddump,
2622   AC_HELP_STRING( [--enable-androiddump],
2623                   [build androiddump @<:@default=yes@:>@]),
2624     androiddump=$enableval,enable_androiddump=yes)
2625
2626 if test "x$have_extcap" != xyes; then
2627         AC_MSG_RESULT([no, extcap disabled])
2628         enable_androiddump=no
2629 elif test "x$enable_androiddump" = "xyes" ; then
2630         AC_MSG_RESULT(yes)
2631 else
2632         AC_MSG_RESULT(no)
2633 fi
2634
2635 AC_ARG_ENABLE(androiddump_use_libpcap,
2636   AC_HELP_STRING( [--enable-androiddump-use-libpcap],
2637                   [build androiddump using libpcap @<:@default=no@:>@]),
2638     androiddump_use_libpcap=$enableval,enable_androiddump_use_libpcap=no)
2639
2640 if test "x$enable_androiddump" = "xyes" -a "x$enable_androiddump_use_libpcap" = "xyes" ; then
2641         AC_DEFINE(ANDROIDDUMP_USE_LIBPCAP, 1, [Androiddump will use Libpcap])
2642 fi
2643
2644 if test "x$enable_androiddump" = "xyes" ; then
2645         androiddump_bin="androiddump\$(EXEEXT)"
2646         androiddump_man="androiddump.1"
2647 else
2648         androiddump_bin=""
2649         androiddump_man=""
2650 fi
2651 AC_SUBST(androiddump_bin)
2652 AC_SUBST(androiddump_man)
2653
2654 dnl sshdump check
2655 AC_MSG_CHECKING(whether to build sshdump)
2656
2657 AC_ARG_ENABLE(sshdump,
2658         AC_HELP_STRING( [--enable-sshdump],
2659                 [build sshdump @<:@default=yes@:>@]),
2660         [],[enable_sshdump=yes])
2661
2662 if test "x$have_extcap" != xyes; then
2663         AC_MSG_RESULT([no, extcap disabled])
2664         enable_sshdump=no
2665 elif test "x$have_libssh_pointsix" != xyes; then
2666         AC_MSG_RESULT([no, libssh >= 0.6.0 not available])
2667         enable_sshdump=no
2668 elif test "x$enable_sshdump" = "xyes" ; then
2669         AC_MSG_RESULT(yes)
2670 else
2671         AC_MSG_RESULT(no)
2672 fi
2673
2674 if test "x$enable_sshdump" = "xyes" ; then
2675         sshdump_bin="sshdump\$(EXEEXT)"
2676         sshdump_man="sshdump.1"
2677 else
2678         sshdump_bin=""
2679         sshdump_man=""
2680 fi
2681 AC_SUBST(sshdump_bin)
2682 AC_SUBST(sshdump_man)
2683
2684 dnl ciscodump check
2685 AC_MSG_CHECKING(whether to build ciscodump)
2686
2687 AC_ARG_ENABLE(ciscodump,
2688         AC_HELP_STRING( [--enable-ciscodump],
2689                 [build ciscodump @<:@default=yes@:>@]),
2690         [],[enable_ciscodump=yes])
2691
2692 if test "x$have_extcap" != xyes; then
2693         AC_MSG_RESULT([no, extcap disabled])
2694         enable_ciscodump=no
2695 elif test "x$have_libssh_pointsix" != xyes; then
2696         AC_MSG_RESULT([no, libssh >= 0.6.0 not available])
2697         enable_ciscodump=no
2698 elif test "x$enable_ciscodump" = "xyes" ; then
2699         AC_MSG_RESULT(yes)
2700 else
2701         AC_MSG_RESULT(no)
2702 fi
2703
2704 if test "x$enable_ciscodump" = "xyes" ; then
2705         ciscodump_bin="ciscodump\$(EXEEXT)"
2706         ciscodump_man="ciscodump.1"
2707 else
2708         ciscodump_bin=""
2709         ciscodump_man=""
2710 fi
2711 AC_SUBST(ciscodump_bin)
2712 AC_SUBST(ciscodump_man)
2713
2714 dnl randpktdump check
2715 AC_MSG_CHECKING(whether to build randpktdump)
2716
2717 AC_ARG_ENABLE(randpktdump,
2718         AC_HELP_STRING( [--enable-randpktdump],
2719                 [build randpktdump @<:@default=yes@:>@]),
2720         randpktdump=$enableval,enable_randpktdump=yes)
2721
2722 if test "x$have_extcap" != xyes; then
2723         AC_MSG_RESULT([no, extcap disabled])
2724         enable_randpktdump=no
2725 elif test "x$enable_randpktdump" = "xyes" ; then
2726         AC_MSG_RESULT(yes)
2727 else
2728         AC_MSG_RESULT(no)
2729 fi
2730
2731 if test "x$enable_randpktdump" = "xyes" ; then
2732         randpktdump_bin="randpktdump\$(EXEEXT)"
2733         randpktdump_man="randpktdump.1"
2734 else
2735         randpktdump_bin=""
2736         randpktdump_man=""
2737 fi
2738 AC_SUBST(randpktdump_bin)
2739 AC_SUBST(randpktdump_man)
2740
2741 dnl udpdump check
2742 AC_MSG_CHECKING(whether to build udpdump)
2743
2744 AC_ARG_ENABLE(udpdump,
2745         AC_HELP_STRING( [--enable-udpdump],
2746                 [build udpdump @<:@default=yes@:>@]),
2747         [],[enable_udpdump=yes])
2748
2749 if test "x$have_extcap" != xyes; then
2750         AC_MSG_RESULT([no, extcap disabled])
2751         enable_udpdump=no
2752 elif test "x$enable_udpdump" = "xyes" ; then
2753         AC_MSG_RESULT(yes)
2754 else
2755         AC_MSG_RESULT(no)
2756 fi
2757
2758 if test "x$enable_udpdump" = "xyes" ; then
2759         udpdump_bin="udpdump\$(EXEEXT)"
2760         udpdump_man="udpdump.1"
2761 else
2762         udpdump_bin=""
2763         udpdump_man=""
2764 fi
2765 AC_SUBST(udpdump_bin)
2766 AC_SUBST(udpdump_man)
2767
2768 AM_CONDITIONAL(ENABLE_STATIC, test x$enable_static = xyes)
2769 if test x$enable_static = xyes -a x$have_plugins = xyes
2770 then
2771   AC_DEFINE(ENABLE_STATIC, 1, [Link plugins statically into Wireshark])
2772 fi
2773 AC_SUBST(ENABLE_STATIC)
2774
2775 # Gather which GUI we're building for rpmbuild
2776 if test "x$have_gtk" = "xyes"; then
2777         if test "x$gtk_major_version" = "x3"; then
2778                 RPMBUILD_WITH_ARGS="--with gtk3 --without gtk2"
2779         else
2780                 RPMBUILD_WITH_ARGS="--without gtk3 --with gtk2"
2781         fi
2782 else
2783         RPMBUILD_WITH_ARGS="--without gtk2 --without gtk3"
2784 fi
2785 if test "x$have_qt" = "xyes" ; then
2786         if test "$qt_version" -eq "5"; then
2787                 RPMBUILD_WITH_ARGS="$RPMBUILD_WITH_ARGS --with qt5"
2788         else
2789                 RPMBUILD_WITH_ARGS="$RPMBUILD_WITH_ARGS --with qt"
2790         fi
2791 else
2792         RPMBUILD_WITH_ARGS="$RPMBUILD_WITH_ARGS --without qt --without qt5"
2793 fi
2794 if test "x$have_lua" = "xyes" ; then
2795         RPMBUILD_WITH_ARGS="$RPMBUILD_WITH_ARGS --with lua"
2796 else
2797         RPMBUILD_WITH_ARGS="$RPMBUILD_WITH_ARGS --without lua"
2798 fi
2799 AC_SUBST(RPMBUILD_WITH_ARGS)
2800 AC_SUBST(RPM_VERSION, version_major.version_minor.version_micro)
2801
2802 AC_SUBST(WS_CPPFLAGS)
2803 AC_SUBST(WS_CFLAGS)
2804 AC_SUBST(WS_CXXFLAGS)
2805 AC_SUBST(WS_LDFLAGS)
2806
2807 AC_SUBST(WS_CFLAGS_FOR_BUILD)
2808
2809 AH_BOTTOM([#include <ws_diag_control.h>])
2810
2811 dnl Save the cacheable configure results to config.cache before recursing
2812 AC_CACHE_SAVE
2813
2814 sinclude(plugins/Custom.m4) dnl
2815 ifdef(_CUSTOM_AC_OUTPUT_,, define(_CUSTOM_AC_OUTPUT_, )) dnl
2816
2817 sinclude(epan/dissectors/asn1/Custom.m4) dnl
2818 ifdef(_CUSTOM_ASN1_AC_OUTPUT_,, define(_CUSTOM_ASN1_AC_OUTPUT_, )) dnl
2819
2820 AC_CONFIG_HEADERS([config.h])
2821
2822 AC_CONFIG_FILES(
2823   Makefile
2824   doxygen.cfg
2825   epan/dissectors/asn1/Makefile
2826   wireshark.pc
2827   _CUSTOM_ASN1_AC_OUTPUT_
2828   epan/dissectors/asn1/acp133/Makefile
2829   epan/dissectors/asn1/acse/Makefile
2830   epan/dissectors/asn1/ansi_map/Makefile
2831   epan/dissectors/asn1/ansi_tcap/Makefile
2832   epan/dissectors/asn1/atn-cm/Makefile
2833   epan/dissectors/asn1/atn-cpdlc/Makefile
2834   epan/dissectors/asn1/atn-ulcs/Makefile
2835   epan/dissectors/asn1/c1222/Makefile
2836   epan/dissectors/asn1/camel/Makefile
2837   epan/dissectors/asn1/cdt/Makefile
2838   epan/dissectors/asn1/charging_ase/Makefile
2839   epan/dissectors/asn1/cmip/Makefile
2840   epan/dissectors/asn1/cmp/Makefile
2841   epan/dissectors/asn1/crmf/Makefile
2842   epan/dissectors/asn1/cms/Makefile
2843   epan/dissectors/asn1/credssp/Makefile
2844   epan/dissectors/asn1/dap/Makefile
2845   epan/dissectors/asn1/disp/Makefile
2846   epan/dissectors/asn1/dop/Makefile
2847   epan/dissectors/asn1/dsp/Makefile
2848   epan/dissectors/asn1/ess/Makefile
2849   epan/dissectors/asn1/ftam/Makefile
2850   epan/dissectors/asn1/goose/Makefile
2851   epan/dissectors/asn1/gprscdr/Makefile
2852   epan/dissectors/asn1/gsm_map/Makefile
2853   epan/dissectors/asn1/h225/Makefile
2854   epan/dissectors/asn1/h235/Makefile
2855   epan/dissectors/asn1/h245/Makefile
2856   epan/dissectors/asn1/h248/Makefile
2857   epan/dissectors/asn1/h282/Makefile
2858   epan/dissectors/asn1/h283/Makefile
2859   epan/dissectors/asn1/h323/Makefile
2860   epan/dissectors/asn1/h450/Makefile
2861   epan/dissectors/asn1/h450-ros/Makefile
2862   epan/dissectors/asn1/h460/Makefile
2863   epan/dissectors/asn1/h501/Makefile
2864   epan/dissectors/asn1/HI2Operations/Makefile
2865   epan/dissectors/asn1/hnbap/Makefile
2866   epan/dissectors/asn1/idmp/Makefile
2867   epan/dissectors/asn1/ilp/Makefile
2868   epan/dissectors/asn1/inap/Makefile
2869   epan/dissectors/asn1/isdn-sup/Makefile
2870   epan/dissectors/asn1/kerberos/Makefile
2871   epan/dissectors/asn1/lcsap/Makefile
2872   epan/dissectors/asn1/ldap/Makefile
2873   epan/dissectors/asn1/logotypecertextn/Makefile
2874   epan/dissectors/asn1/lpp/Makefile
2875   epan/dissectors/asn1/lppa/Makefile
2876   epan/dissectors/asn1/lppe/Makefile
2877   epan/dissectors/asn1/lte-rrc/Makefile
2878   epan/dissectors/asn1/m2ap/Makefile
2879   epan/dissectors/asn1/m3ap/Makefile
2880   epan/dissectors/asn1/mms/Makefile
2881   epan/dissectors/asn1/mpeg-audio/Makefile
2882   epan/dissectors/asn1/mpeg-pes/Makefile
2883   epan/dissectors/asn1/mudurl/Makefile
2884   epan/dissectors/asn1/nbap/Makefile
2885   epan/dissectors/asn1/ns_cert_exts/Makefile
2886   epan/dissectors/asn1/novell_pkis/Makefile
2887   epan/dissectors/asn1/ocsp/Makefile
2888   epan/dissectors/asn1/p1/Makefile
2889   epan/dissectors/asn1/p22/Makefile
2890   epan/dissectors/asn1/p7/Makefile
2891   epan/dissectors/asn1/p772/Makefile
2892   epan/dissectors/asn1/pcap/Makefile
2893   epan/dissectors/asn1/pkcs1/Makefile
2894   epan/dissectors/asn1/pkcs12/Makefile
2895   epan/dissectors/asn1/pkinit/Makefile
2896   epan/dissectors/asn1/pkixac/Makefile
2897   epan/dissectors/asn1/pkix1explicit/Makefile
2898   epan/dissectors/asn1/pkix1implicit/Makefile
2899   epan/dissectors/asn1/pkixproxy/Makefile
2900   epan/dissectors/asn1/pkixqualified/Makefile
2901   epan/dissectors/asn1/pkixtsp/Makefile
2902   epan/dissectors/asn1/pres/Makefile
2903   epan/dissectors/asn1/q932/Makefile
2904   epan/dissectors/asn1/q932-ros/Makefile
2905   epan/dissectors/asn1/qsig/Makefile
2906   epan/dissectors/asn1/ranap/Makefile
2907   epan/dissectors/asn1/rnsap/Makefile
2908   epan/dissectors/asn1/ros/Makefile
2909   epan/dissectors/asn1/rrc/Makefile
2910   epan/dissectors/asn1/rrlp/Makefile
2911   epan/dissectors/asn1/rtse/Makefile
2912   epan/dissectors/asn1/rua/Makefile
2913   epan/dissectors/asn1/s1ap/Makefile
2914   epan/dissectors/asn1/sabp/Makefile
2915   epan/dissectors/asn1/sbc-ap/Makefile
2916   epan/dissectors/asn1/smrse/Makefile
2917   epan/dissectors/asn1/snmp/Makefile
2918   epan/dissectors/asn1/spnego/Makefile
2919   epan/dissectors/asn1/sv/Makefile
2920   epan/dissectors/asn1/t124/Makefile
2921   epan/dissectors/asn1/t125/Makefile
2922   epan/dissectors/asn1/t38/Makefile
2923   epan/dissectors/asn1/tcap/Makefile
2924   epan/dissectors/asn1/tetra/Makefile
2925   epan/dissectors/asn1/ulp/Makefile
2926   epan/dissectors/asn1/wlancertextn/Makefile
2927   epan/dissectors/asn1/x2ap/Makefile
2928   epan/dissectors/asn1/x509af/Makefile
2929   epan/dissectors/asn1/x509ce/Makefile
2930   epan/dissectors/asn1/x509if/Makefile
2931   epan/dissectors/asn1/x509sat/Makefile
2932   epan/dissectors/asn1/x721/Makefile
2933   capchild/Makefile
2934   capchild/doxygen.cfg
2935   caputils/Makefile
2936   caputils/doxygen.cfg
2937   doc/Makefile
2938   docbook/Makefile
2939   epan/Makefile
2940   epan/compress/Makefile
2941   epan/crypt/Makefile
2942   epan/doxygen.cfg
2943   epan/dfilter/Makefile
2944   epan/dissectors/Makefile
2945   epan/dissectors/dcerpc/Makefile
2946   epan/ftypes/Makefile
2947   epan/wmem/Makefile
2948   epan/wslua/Makefile
2949   extcap/Makefile
2950   codecs/Makefile
2951   ui/Makefile
2952   ui/doxygen.cfg
2953   ui/gtk/Makefile
2954   ui/gtk/doxygen.cfg
2955   ui/cli/Makefile
2956   ui/qt/Makefile
2957   ui/qt/doxygen.cfg
2958   help/Makefile
2959   packaging/Makefile
2960   packaging/macosx/Info.plist
2961   packaging/macosx/Makefile
2962   packaging/macosx/osx-dmg.sh
2963   packaging/macosx/Wireshark_package.pmdoc/index.xml
2964   packaging/nsis/Makefile
2965   packaging/rpm/Makefile
2966   packaging/rpm/SPECS/Makefile
2967   packaging/rpm/SPECS/wireshark.spec
2968   packaging/svr4/Makefile
2969   packaging/svr4/checkinstall
2970   packaging/svr4/pkginfo
2971   packaging/wix/Makefile
2972   plugins/Makefile
2973   plugins/docsis/Makefile
2974   plugins/easy_codec/Makefile
2975   plugins/ethercat/Makefile
2976   plugins/gryphon/Makefile
2977   plugins/irda/Makefile
2978   plugins/m2m/Makefile
2979   plugins/mate/Makefile
2980   plugins/opcua/Makefile
2981   plugins/profinet/Makefile
2982   plugins/stats_tree/Makefile
2983   plugins/transum/Makefile
2984   plugins/unistim/Makefile
2985   plugins/wimax/Makefile
2986   plugins/wimaxasncp/Makefile
2987   plugins/wimaxmacphy/Makefile
2988   randpkt_core/doxygen.cfg
2989   randpkt_core/Makefile
2990   tools/Makefile
2991   tools/lemon/Makefile
2992   wiretap/Makefile
2993   writecap/Makefile
2994   writecap/doxygen.cfg
2995   wsutil/Makefile
2996   _CUSTOM_AC_OUTPUT_
2997 )
2998
2999 AC_OUTPUT
3000
3001
3002 # Pretty messages
3003
3004 if test "x$have_gtk" = "xyes"; then
3005         gtk_lib_message=" (with GTK+ v$GTK_VERSION"
3006         if test "x$have_ige_mac" = "xyes"; then
3007                 gtk_lib_message="$gtk_lib_message and macOS integration)"
3008         else
3009                 gtk_lib_message="$gtk_lib_message)"
3010         fi
3011 fi
3012
3013 if test "x$have_qt" = "xyes" ; then
3014         enable_wireshark_qt="yes"
3015         qt_lib_message=" (with Qt$qt_version v$QT_VERSION)"
3016 else
3017         enable_wireshark_qt="no"
3018 fi
3019
3020 if test "x$enable_setcap_install" = "xyes" ; then
3021         setcap_message="yes"
3022 else
3023         setcap_message="no"
3024 fi
3025
3026 if test "x$enable_setuid_install" = "xyes" ; then
3027         setuid_message="yes"
3028 else
3029         setuid_message="no"
3030 fi
3031
3032 if test "x$DUMPCAP_GROUP" = "x" ; then
3033         dumpcap_group_message="(none)"
3034 else
3035         dumpcap_group_message="$DUMPCAP_GROUP"
3036 fi
3037
3038 if test "x$want_zlib" = "xno" ; then
3039         zlib_message="no"
3040 else
3041         zlib_message="yes"
3042 fi
3043
3044 if test "x$have_lua" = "xyes" ; then
3045         lua_message="yes"
3046 else
3047         lua_message="no"
3048 fi
3049
3050 if test "x$have_qt_multimedia_lib" = "xyes" ; then
3051         qt_multimedia_message="yes"
3052 else
3053         qt_multimedia_message="no"
3054 fi
3055
3056 if test "x$want_portaudio" = "xyes" ; then
3057         portaudio_message="yes"
3058 else
3059         portaudio_message="no"
3060 fi
3061
3062 if test "x$want_ssl" = "xno" ; then
3063         ssl_message="no"
3064 else
3065         ssl_message="yes"
3066 fi
3067
3068 if test "x$want_krb5" = "xno" ; then
3069         krb5_message="no"
3070 else
3071         krb5_message="yes ($ac_krb5_version)"
3072 fi
3073
3074 if test "x$have_good_c_ares" = "xyes" ; then
3075         c_ares_message="yes"
3076 else
3077         c_ares_message="no (name resolution will be disabled)"
3078 fi
3079
3080 if test "x$have_good_libcap" = "xyes" ; then
3081         libcap_message="yes"
3082 else
3083         libcap_message="no"
3084 fi
3085
3086 if test "x$have_good_geoip" = "xyes" ; then
3087         geoip_message="yes"
3088 else
3089         geoip_message="no"
3090 fi
3091
3092 if test "x$have_good_libssh" = "xyes" ; then
3093         libssh_message="yes"
3094 else
3095         libssh_message="no"
3096 fi
3097
3098 if test "x$have_ssh_userauth_agent" = "xyes" ; then
3099         ssh_userauth_agent_message="yes"
3100 else
3101         ssh_userauth_agent_message="no"
3102 fi
3103
3104 if test "x$have_good_nghttp2" = "xyes" ; then
3105         nghttp2_message="yes"
3106 else
3107         nghttp2_message="no"
3108 fi
3109
3110 echo ""
3111 echo "  CPPFLAGS: $WS_CPPFLAGS $CPPFLAGS"
3112 echo ""
3113 echo "  CFLAGS: $WS_CFLAGS $CFLAGS"
3114 echo ""
3115 echo "  CXXFLAGS: $WS_CXXFLAGS $CXXFLAGS"
3116 echo ""
3117 echo "  LDFLAGS: $WS_LDFLAGS $LDFLAGS"
3118 echo ""
3119 echo "  LIBS: $LIBS"
3120
3121 echo ""
3122 echo "The Wireshark package has been configured with the following options:"
3123 echo "                       GLib version : v$GLIB_VERSION"
3124 echo "                    Build wireshark : $enable_wireshark_qt$qt_lib_message"
3125 echo "                Build wireshark-gtk : $have_gtk""$gtk_lib_message"
3126 echo "                       Build tshark : $enable_tshark"
3127 echo "                      Build tfshark : $enable_tfshark"
3128 echo "                     Build capinfos : $enable_capinfos"
3129 echo "                      Build captype : $enable_captype"
3130 echo "                      Build editcap : $enable_editcap"
3131 echo "                      Build dumpcap : $enable_dumpcap"
3132 echo "                     Build mergecap : $enable_mergecap"
3133 echo "                   Build reordercap : $enable_reordercap"
3134 echo "                    Build text2pcap : $enable_text2pcap"
3135 echo "                      Build randpkt : $enable_randpkt"
3136 echo "                       Build dftest : $enable_dftest"
3137 echo "                     Build rawshark : $enable_rawshark"
3138 echo "                       Build sharkd : $enable_sharkd"
3139 echo "                  Build androiddump : $enable_androiddump"
3140 echo "                      Build sshdump : $enable_sshdump"
3141 echo "                    Build ciscodump : $enable_ciscodump"
3142 echo "                  Build randpktdump : $enable_randpktdump"
3143 echo "                      Build udpdump : $enable_udpdump"
3144 echo ""
3145 echo "   Save files as pcap-ng by default : $enable_pcap_ng_default"
3146 echo "  Install dumpcap with capabilities : $setcap_message"
3147 echo "             Install dumpcap setuid : $setuid_message"
3148 echo "                  Use dumpcap group : $dumpcap_group_message"
3149 echo "                        Use plugins : $have_plugins"
3150 echo "       Use external capture sources : $have_extcap"
3151 echo "                    Use Lua library : $lua_message"
3152 echo "                Build Qt RTP player : $qt_multimedia_message"
3153 echo "              Build GTK+ RTP player : $portaudio_message"
3154 echo "             Build profile binaries : $enable_profile_build"
3155 echo "                   Use pcap library : $want_pcap"
3156 echo "                   Use zlib library : $zlib_message"
3157 echo "               Use kerberos library : $krb5_message"
3158 echo "                 Use c-ares library : $c_ares_message"
3159 echo "                Use SMI MIB library : $libsmi_message"
3160 echo "             Use GNU gcrypt library : yes"
3161 echo "             Use SSL crypto library : $ssl_message"
3162 echo "                 Use GnuTLS library : $tls_message"
3163 echo "     Use POSIX capabilities library : $libcap_message"
3164 echo "                  Use GeoIP library : $geoip_message"
3165 echo "                 Use libssh library : $libssh_message"
3166 echo "            Have ssh_userauth_agent : $ssh_userauth_agent_message"
3167 echo "                     Use nl library : $libnl_message"
3168 echo "              Use SBC codec library : $have_sbc"
3169 echo "                Use SpanDSP library : $have_spandsp"
3170 echo "                Use nghttp2 library : $nghttp2_message"
3171 echo "                    Use LZ4 library : $have_lz4"
3172 echo "                 Use Snappy library : $have_snappy"
3173 #echo "       Use GDK-Pixbuf with GResource: $have_gresource_pixbuf"