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