packet-dis: fix typos
[metze/wireshark/wip.git] / CMakeLists.txt
1 # CMakeLists.txt
2 #
3 # Wireshark - Network traffic analyzer
4 # By Gerald Combs <gerald@wireshark.org>
5 # Copyright 1998 Gerald Combs
6 #
7 # This program is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU General Public License
9 # as published by the Free Software Foundation; either version 2
10 # of the License, or (at your option) any later version.
11 #
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #
21
22 project(Wireshark C CXX)
23
24 cmake_minimum_required(VERSION 2.6)
25 set(CMAKE_BACKWARDS_COMPATIBILITY 2.6)
26
27 # Needs to be set after cmake_minimum_required or cmake_policy(VERSION)
28 # Policy since 2.6.1
29 cmake_policy(SET CMP0008 NEW)
30 # Policy since 2.6.3
31 # Backward compatibility for versions < 2.6.3
32 cmake_policy(SET CMP0011 OLD)
33 # Policy since 2.8.1
34 #cmake_policy(SET CMP0015 NEW)
35 # Policy since 2.8.11
36 if( ${CMAKE_MAJOR_VERSION} GREATER 2 OR ${CMAKE_MINOR_VERSION} GREATER 8 OR
37         (${CMAKE_MINOR_VERSION} EQUAL 8 AND ${CMAKE_PATCH_VERSION} GREATER 10) )
38         # Don't: Automatically link Qt executable to qtmain target on Windows
39         cmake_policy(SET CMP0020 OLD)
40 endif()
41
42 # This cannot be implemented via option(...)
43 if( NOT CMAKE_BUILD_TYPE )
44         set( CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
45                 "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
46                 FORCE)
47 endif()
48 message(STATUS "Configuration types: ${CMAKE_CONFIGURATION_TYPES}")
49 message(STATUS "${CMAKE_BUILD_TYPE}: ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
50
51 # set(PROJECT_MAJOR_VERSION 1)
52 # set(PROJECT_MINOR_VERSION 9)
53 # set(PROJECT_PATCH_VERSION 0)
54 # set(PROJECT_VERSION_EXTENSION "-rc5")
55 # If not set, copy over Wireshark version from configure.ac
56 if(NOT PROJECT_MAJOR_VERSION)
57         file(STRINGS
58                 ${CMAKE_SOURCE_DIR}/configure.ac
59                 PROJECT_MAJOR_VERSION_TMP
60                 REGEX "^m4_define\\(\\[?version_major\\]?, *\\[?[0-9]+\\]?\\)"
61         )
62         file(STRINGS
63                 ${CMAKE_SOURCE_DIR}/configure.ac
64                 PROJECT_MINOR_VERSION_TMP
65                 REGEX "^m4_define\\(\\[?version_minor\\]?, *\\[?[0-9]+\\]?\\)"
66         )
67         file(STRINGS
68                 ${CMAKE_SOURCE_DIR}/configure.ac
69                 PROJECT_PATCH_VERSION_TMP
70                 REGEX "^m4_define\\(\\[?version_micro\\]?, *\\[?[0-9]+\\]?\\)"
71         )
72         # XXX pull VERSION_EXTENSION out of configure.ac ?
73
74         string(REGEX REPLACE "m4_define\\(\\[?version_major\\]?, *\\[?([0-9]+)\\]?\\)"
75                 "\\1"
76                 PROJECT_MAJOR_VERSION
77                 ${PROJECT_MAJOR_VERSION_TMP}
78         )
79         string(REGEX REPLACE "m4_define\\(\\[?version_minor\\]?, *\\[?([0-9]+)\\]?\\)"
80                 "\\1"
81                 PROJECT_MINOR_VERSION
82                 ${PROJECT_MINOR_VERSION_TMP}
83         )
84         string(REGEX REPLACE "m4_define\\(\\[?version_micro\\]?, *\\[?([0-9]+)\\]?\\)"
85                 "\\1"
86                 PROJECT_PATCH_VERSION
87                 ${PROJECT_PATCH_VERSION_TMP}
88         )
89 endif()
90
91
92 if(PROJECT_VERSION_EXTENSION)
93         set(PROJECT_VERSION ${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_PATCH_VERSION}${PROJECT_VERSION_EXTENSION})
94 else()
95         set(PROJECT_VERSION ${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_PATCH_VERSION})
96 endif()
97
98 message(STATUS "V: ${PROJECT_VERSION}, MaV: ${PROJECT_MAJOR_VERSION}, MiV: ${PROJECT_MINOR_VERSION}, PL: ${PROJECT_PATCH_VERSION}, EV: ${PROJECT_VERSION_EXTENSION}.")
99
100 #Where to find local cmake scripts
101 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
102 include(UseLemon)
103 include(UseMakeDissectorReg)
104 include(UseMakeTapReg)
105 include(UseAsn2Wrs)
106
107 # Under linux the release mode (CMAKE_BUILD_TYPE=release) defines NDEBUG
108
109 #Defines CMAKE_INSTALL_BINDIR, CMAKE_INSTALL_DATADIR, etc ...
110 include(CMakeInstallDirs)
111
112 include_directories(
113         ${CMAKE_BINARY_DIR}
114         ${CMAKE_SOURCE_DIR}
115         ${CMAKE_SOURCE_DIR}/epan
116         ${CMAKE_SOURCE_DIR}/filetap
117         ${CMAKE_SOURCE_DIR}/tools/lemon
118         ${CMAKE_SOURCE_DIR}/wiretap
119 )
120
121 #Where to put executables and libraries in the build tree
122 if(NOT ARCHIVE_OUTPUT_PATH)
123         set(ARCHIVE_OUTPUT_PATH ${Wireshark_BINARY_DIR}/run CACHE INTERNAL
124                    "Single output directory for building all archives.")
125 endif()
126 if(NOT EXECUTABLE_OUTPUT_PATH)
127         set(EXECUTABLE_OUTPUT_PATH ${Wireshark_BINARY_DIR}/run CACHE INTERNAL
128                    "Single output directory for building all executables.")
129 endif()
130 if(NOT LIBRARY_OUTPUT_PATH)
131         set(LIBRARY_OUTPUT_PATH ${Wireshark_BINARY_DIR}/run CACHE INTERNAL
132                    "Single output directory for building all libraries.")
133 endif()
134
135 include( CMakeOptions.txt )
136 if( DUMPCAP_INSTALL_OPTION STREQUAL "suid" )
137         set( DUMPCAP_SETUID "SETUID" )
138 else()
139         set( DUMPCAP_SETUID )
140 endif()
141 if( NOT CMAKE_SYSTEM_NAME STREQUAL "Linux" AND
142         DUMPCAP_INSTALL_OPTION STREQUAL "capabilities" )
143         message( WARNING "Capabilities are only supported on Linux" )
144         set( DUMPCAP_INSTALL_OPTION )
145 endif()
146
147 if( CMAKE_C_COMPILER_ID MATCHES "MSVC")
148         if (MSVC10)
149                 set(MSC_VER_REQUIRED 1600)
150         elseif(MSVC11)
151                 set(MSC_VER_REQUIRED 1700)
152         elseif(MSVC12)
153                 set(MSC_VER_REQUIRED 1800)
154         else()
155                 message(FATAL_ERROR "You are using an unsupported version of MSVC")
156         endif()
157         set(LOCAL_CFLAGS
158                 /Zi
159                 /W3
160                 /MDd
161                 /DWIN32_LEAN_AND_MEAN
162                 "/DMSC_VER_REQUIRED=${MSC_VER_REQUIRED}"
163                 /D_CRT_SECURE_NO_DEPRECATE
164                 /D_CRT_NONSTDC_NO_DEPRECATE
165                 /MP
166                 # NOMINMAX keeps windows.h from defining "min" and "max" via windef.h.
167                 # This avoids conflicts with the C++ standard library.
168                 /DNOMINMAX
169         )
170
171         if(NOT WIN64)
172                 set(LOCAL_CFLAGS ${LOCAL_CFLAGS} "/D_BIND_TO_CURRENT_CRT_VERSION=1")
173         endif()
174
175         # Additional compiler warnings to be treated as "Level 3"
176         #  when compiling Wireshark sources. (Selected from "level 4" warnings).
177         ## 4295: array is too small to include a terminating null character
178         set(WARNINGS_CFLAGS "/w34295")
179
180         # FIXME: WINPCAP_VERSION cannot be determined from source or executable.
181         set(WINPCAP_VERSION "unknown")
182         set(WIRESHARK_C_FLAGS
183                 "/DWINPCAP_VERSION=${WINPCAP_VERSION}"
184                 ${LOCAL_CFLAGS}
185                 ${WARNINGS_CFLAGS}
186         )
187 else()
188         set(WIRESHARK_C_FLAGS
189                 # -O<X> and -g get set by the CMAKE_BUILD_TYPE
190                 -Wall
191                 -W
192                 -Wextra
193                 -Wendif-labels
194                 -Wpointer-arith
195                 -Warray-bounds
196                 -Wformat-security
197                 -Wvla
198                 -Waddress
199                 -Wattributes
200                 -Wdiv-by-zero
201                 -Wignored-qualifiers
202                 -Wpragmas
203                 -Wno-overlength-strings
204                 -Wwrite-strings
205                 -Wno-long-long
206                 -Wheader-guard
207         )
208
209         set(WIRESHARK_C_ONLY_FLAGS
210                 # The following are C only, not C++
211                 -Wc++-compat
212                 -Wdeclaration-after-statement
213                 -Wshadow
214                 -Wno-pointer-sign
215                 -Wold-style-definition
216                 -Wstrict-prototypes
217                 -Wlogical-op
218                 -Wjump-misses-init
219                 # The Qt headers generate a ton of shortening errors on 64-bit systems
220                 # so only enable this for C for now.
221                 -Wshorten-64-to-32
222         )
223
224         set(WIRESHARK_CPP_ONLY_FLAGS
225         )
226
227         set(WIRESHARK_EXTRA_COMPILER_C_FLAGS
228                 -pedantic
229                 -Woverflow
230                 #
231                 # Various code blocks this one.
232                 #
233                 -fstrict-overflow -Wstrict-overflow=4
234                 #
235                 # Due to various places where APIs we don't control
236                 # require us to cast away constness, we can probably
237                 # never enable this one with -Werror.
238                 #
239                 -Wcast-qual
240                 #
241                 # Some generated ASN.1 dissectors block this one;
242                 # multiple function declarations for the same
243                 # function are being generated.
244                 #
245                 -Wredundant-decls
246                 #
247                 # Some loops are safe, but it's hard to convince the
248                 # compiler of that.
249                 #
250                 -Wunsafe-loop-optimizations
251                 #
252                 # All the registration functions block this for now.
253                 #
254                 -Wmissing-declarations
255                 #
256                 # A bunch of "that might not work on SPARC" code blocks
257                 # this one for now.
258                 #
259                 -Wcast-align
260                 #
261                 # Some code blocks this for now.
262                 #
263                 -Wunreachable-code
264                 #
265                 # Some code blocks this for now.
266                 #
267                 -Wdocumentation
268                 -fwrapv
269                 -fno-strict-overflow
270                 -fno-delete-null-pointer-checks
271         )
272
273         set(WIRESHARK_EXTRA_COMPILER_C_ONLY_FLAGS
274                 # The following are C only, not C++
275                 #
276                 # Due to various places where APIs we don't control
277                 # require us to cast away constness, we can probably
278                 # never enable this one with -Werror.
279                 #
280                 -Wbad-function-cast
281                 #
282                 # All the registration functions block this for now.
283                 #
284                 -Wmissing-prototypes
285         )
286
287         set(WIRESHARK_EXTRA_COMPILER_CPP_ONLY_FLAGS
288         )
289
290         # With clang some tests don't fail properly during testing but only
291         # during real compiles
292
293         if(CMAKE_C_COMPILER_ID MATCHES "Clang")
294                 set(WIRESHARK_C_FLAGS ${WIRESHARK_C_FLAGS}
295                         -Qunused-arguments
296                         #-fcolor-diagnostics
297         )
298         else()
299                 set(WIRESHARK_C_FLAGS ${WIRESHARK_C_FLAGS}
300                         -fexcess-precision=fast
301                 )
302
303                 set(WIRESHARK_C_ONLY_FLAGS ${WIRESHARK_C_ONLY_FLAGS}
304                 )
305         endif()
306
307         if(ENABLE_EXTRA_COMPILER_WARNINGS)   # This overrides -Werror
308                 set(WIRESHARK_C_FLAGS ${WIRESHARK_C_FLAGS} ${WIRESHARK_EXTRA_COMPILER_C_FLAGS})
309                 set(WIRESHARK_C_ONLY_FLAGS ${WIRESHARK_C_ONLY_FLAGS} ${WIRESHARK_EXTRA_COMPILER_C_ONLY_FLAGS})
310                 set(WIRESHARK_CPP_ONLY_FLAGS ${WIRESHARK_CPP_ONLY_FLAGS} ${WIRESHARK_EXTRA_COMPILER_CPP_ONLY_FLAGS})
311         endif()
312
313         add_definitions(
314                 -DG_DISABLE_DEPRECATED
315                 -DG_DISABLE_SINGLE_INCLUDES
316         )
317 endif()
318
319 set( C_FLAG_TESTS ${WIRESHARK_C_FLAGS} ${WIRESHARK_C_ONLY_FLAGS} )
320 set( CPP_FLAG_TESTS ${WIRESHARK_C_FLAGS} ${WIRESHARK_CPP_ONLY_FLAGS} )
321
322 # Counterhack to work around some cache magic in CHECK_C_SOURCE_COMPILES
323 include(CheckCCompilerFlag)
324 include(CheckCXXCompilerFlag)
325
326 if(NOT DISABLE_WERROR AND NOT ENABLE_EXTRA_COMPILER_WARNINGS)
327         check_c_compiler_flag(-Werror=unknown-warning-option WERR_UNKNOWN)
328         check_c_compiler_flag(-Werror WERROR)
329 else()
330         set(WERR_UNKNOWN FALSE)
331         set(WERROR FALSE)
332 endif()
333 # string of additional compile command line flags for check_c_compiler_flag
334 if(WERR_UNKNOWN)
335         set(CMAKE_REQUIRED_FLAGS -Werror=unknown-warning-option )
336 endif()
337
338 # Sigh: Have to use THIS_FLAG instead of ${F} for some reason
339 foreach(THIS_FLAG ${C_FLAG_TESTS})
340         string( REGEX REPLACE "[^a-zA-Z0-9_]+" "_" F ${THIS_FLAG} )
341         set(${F} ${THIS_FLAG})
342         set(V C_${F}_VALID)
343         message(STATUS "Checking for c-compiler flag: ${THIS_FLAG}")
344         check_c_compiler_flag(${${F}} ${V})
345         if (${${V}})
346                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${${F}}")
347         endif()
348 endforeach()
349 foreach(THIS_FLAG ${CPP_FLAG_TESTS})
350         string( REGEX REPLACE "[^a-zA-Z0-9_]+" "_" F ${THIS_FLAG} )
351         set(${F} ${THIS_FLAG})
352         set(V CPP_${F}_VALID)
353         message(STATUS "Checking for c++-compiler flag: ${THIS_FLAG}")
354         check_cxx_compiler_flag(${${F}} ${V})
355         if (${${V}})
356                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${${F}}")
357         endif()
358 endforeach()
359 message(STATUS "C-Flags: ${CMAKE_C_FLAGS}\nCXX-Flags: ${CMAKE_CXX_FLAGS}")
360
361 check_c_compiler_flag(-fvisibility=hidden FVHIDDEN)
362 if(FVHIDDEN)
363         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
364 else() # TODO add alternate compiler flags for hiding symbols
365         message(WARNING "Hiding shared library symbols is not supported by the compiler."
366                 " All shared library symbols will be exported.")
367 endif()
368
369 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
370         set (C_UNUSED "__attribute__((unused))" )
371 else()
372         set (C_UNUSED "" )
373 endif()
374
375
376 if( CMAKE_C_COMPILER_ID MATCHES "MSVC")
377         # Set in Makefile.nmake
378         set(WIRESHARK_LD_FLAGS
379                 /LARGEADDRESSAWARE
380         )
381 else()
382         set(WIRESHARK_LD_FLAGS
383                 -Wl,--as-needed
384                 # -flto
385                 # -fwhopr
386                 # -fwhole-program
387         )
388 endif()
389
390 include(CheckCLinkerFlag)
391 set(C 0)
392 # Sigh: Have to use THIS_FLAG instead of ${F} for some reason
393 foreach(THIS_FLAG ${WIRESHARK_LD_FLAGS})
394         set(F WS_LD_FLAG_${C})
395         set(${F} ${THIS_FLAG})
396         set(V WS_LD_FLAG_VALID${C})
397         check_c_linker_flag(${${F}} ${V})
398         if (${${V}})
399                 set(WS_LINK_FLAGS ${WS_LINK_FLAGS} ${${F}})
400         endif()
401         math(EXPR C "${C} + 1")
402 endforeach()
403
404 if(ENABLE_STATIC)
405   set(LINK_MODE_LIB STATIC)
406   set(LINK_MODE_MODULE STATIC)
407 else()
408   set(LINK_MODE_LIB SHARED)
409   set(LINK_MODE_MODULE MODULE)
410 endif()
411
412 if(APPLE AND EXISTS /usr/local/opt/gettext)
413         # GLib on OS X requires libintl. Homebrew installs gettext (and
414         # libintl) in /usr/local/opt/gettext
415         include_directories(/usr/local/opt/gettext/include)
416         link_directories(/usr/local/opt/gettext/lib)
417 endif()
418
419 # The packagelist is doing some magic:  If we add XXX to the packagelist, we
420 # - may optionally set XXX_OPTIONS to pass to the find_package command
421 # - will call FindXXX.cmake
422 # - return found libraries in XXX_LIBRARIES
423 # - return found include in XXX_INCLUDE_DIRS
424 # - set HAVE_XXX
425
426 #The minimum package list
427 set(PACKAGELIST Gettext GLIB2 GMODULE2 GTHREAD2 M LEX YACC Perl SED SH PythonInterp)
428 set(GLIB2_REQUIRED TRUE)
429 set(GLIB2_FIND_REQUIRED TRUE)
430 set(GLIB2_MIN_VERSION 2.14.0)
431 set(GTHREAD2_REQUIRED TRUE)
432 set(M_REQUIRED TRUE)
433 set(PythonInterp_FIND_VERSION 2)
434 set(Python_ADDITIONAL_VERSIONS 3)
435
436 set(PACKAGELIST ${PACKAGELIST} HtmlViewer)
437
438 if(ENABLE_PCAP)
439         set(PACKAGELIST ${PACKAGELIST} PCAP)
440 endif()
441
442 if(ENABLE_AIRPCAP)
443         set(PACKAGELIST ${PACKAGELIST} AIRPCAP)
444 endif()
445
446 # Build the GTK-GUI?
447 if(BUILD_wireshark)
448         if(ENABLE_GTK3)
449                 set(PACKAGELIST ${PACKAGELIST} GTK3)
450         else()
451                 set(PACKAGELIST ${PACKAGELIST} GTK2)
452                 set(GTK2_OPTIONS COMPONENTS gtk)
453                 set(GTK2_FIND_VERSION 2.12)
454                 set(GTK2_DEBUG false)
455         endif()
456 endif()
457
458 # Build the Qt GUI?
459 if(BUILD_qtshark)
460         if(ENABLE_QT5)
461                 set(PACKAGELIST ${PACKAGELIST} Qt5Widgets Qt5PrintSupport Qt5LinguistTools)
462                 if (APPLE)
463                         set(PACKAGELIST ${PACKAGELIST} Qt5MacExtras)
464                 endif()
465                 set(QT_VERSION 5)
466                 # Untested, may not work if CMAKE_PREFIX_PATH gets overwritten
467                 # somewhere. The if WIN32 in this place is annoying as well.
468                 if( WIN32 )
469                         set( QT5_BASE_PATH "$ENV{QT5_BASE_DIR}" )
470                         set( CMAKE_PREFIX_PATH "${QT5_BASE_PATH}" )
471                         # Used for the creation of setpath.bat
472                         set( QT5_DLL_PATH "${CMAKE_PREFIX_PATH}/bin/dummy" )
473                         set( WS_ALL_LIBS ${WS_ALL_LIBS} ${QT5_DLL_PATH} )
474                 endif()
475         else()
476                 set(PACKAGELIST ${PACKAGELIST} Qt4)
477                 # set(Qt4_OPTIONS 4.7.1 REQUIRED QtCore QtGui)
478                 set(QT_VERSION 4)
479         endif()
480 endif()
481
482 # SMI SNMP
483 if(ENABLE_SMI)
484         set(PACKAGELIST ${PACKAGELIST} SMI)
485 endif()
486
487 # GNU crypto
488 if(ENABLE_GCRYPT)
489         set(PACKAGELIST ${PACKAGELIST} GCRYPT)
490 endif()
491
492 # GNU SSL/TLS support
493 if(ENABLE_GNUTLS)
494         set(PACKAGELIST ${PACKAGELIST} GNUTLS)
495 endif()
496
497 # Kerberos
498 if(ENABLE_KERBEROS)
499         set(PACKAGELIST ${PACKAGELIST} KERBEROS)
500 endif()
501
502 # Portable audio
503 if(ENABLE_PORTAUDIO AND BUILD_wireshark)
504         set(PACKAGELIST ${PACKAGELIST} PORTAUDIO)
505 endif()
506
507
508 # Prefer c-ares over adns
509 if(ENABLE_CARES) # C Asynchronouse resolver
510         set(PACKAGELIST ${PACKAGELIST} CARES)
511 elseif(ENABLE_ADNS) # Gnu asynchronous DNS
512         set(PACKAGELIST ${PACKAGELIST} ADNS)
513 endif()
514
515 # Zlib compression
516 if(ENABLE_ZLIB)
517         set(PACKAGELIST ${PACKAGELIST} ZLIB)
518 endif()
519
520 # Lua 5.1 dissectors
521 if(ENABLE_LUA)
522         set(PACKAGELIST ${PACKAGELIST} LUA)
523 endif()
524
525 # GeoIP address resolving
526 if(ENABLE_GEOIP)
527         set(PACKAGELIST ${PACKAGELIST} GEOIP)
528 endif()
529
530 if(ENABLE_NETLINK)
531         set(PACKAGELIST ${PACKAGELIST} NL)
532 endif()
533
534 if(ENABLE_SBC)
535         set(PACKAGELIST ${PACKAGELIST} SBC)
536 endif()
537
538 # Capabilities
539 if(ENABLE_CAP)
540         set(PACKAGELIST ${PACKAGELIST} CAP SETCAP)
541 endif()
542
543 if(ENABLE_PYTHON)
544         set(PACKAGELIST ${PACKAGELIST} PythonLibs)
545 endif()
546
547 set(PACKAGELIST ${PACKAGELIST} YAPP)
548
549 set(PACKAGELIST ${PACKAGELIST} POD)
550
551 if(ENABLE_GUIDES)
552         set(PACKAGELIST ${PACKAGELIST} DOXYGEN)
553 endif()
554
555 set(PROGLIST text2pcap mergecap capinfos captype editcap reordercap dumpcap)
556
557 #Sort the package list
558 list(SORT PACKAGELIST)
559 message(STATUS "Packagelist: ${PACKAGELIST}")
560 #Let's loop the package list
561 foreach(PACKAGE ${PACKAGELIST})
562         if(${PACKAGE} STREQUAL "Qt4")
563                 set(PACKAGE_VAR "QT")
564         elseif(${PACKAGE} STREQUAL "PythonInterp")
565                 set(PACKAGE_VAR "PYTHONINTERP")
566         elseif(${PACKAGE} STREQUAL "PythonLibs")
567                 set(PACKAGE_VAR "PYTHONLIBS")
568         elseif(${PACKAGE} STREQUAL "Gettext")
569                 set(PACKAGE_VAR "GETTEXT")
570         elseif(${PACKAGE} STREQUAL "HtmlViewer")
571                 set(PACKAGE_VAR "HTMLVIEWER")
572         elseif(${PACKAGE} STREQUAL "Perl")
573                 set(PACKAGE_VAR "PERL")
574         else()
575                 set(PACKAGE_VAR ${PACKAGE})
576         endif()
577         if(${PACKAGE}_OPTIONS)
578                 find_package(${PACKAGE} ${${PACKAGE}_OPTIONS})
579         elseif(${PACKAGE}_REQUIRED)
580                 find_package(${PACKAGE} REQUIRED)
581         else()
582                 find_package(${PACKAGE})
583         endif()
584         if (${PACKAGE_VAR}_FOUND)
585                 message("${PACKAGE_VAR} FOUND")
586                 set(HAVE_LIB${PACKAGE_VAR} 1)
587                 include_directories(${${PACKAGE_VAR}_INCLUDE_DIRS})
588                 set(WS_ALL_LIBS ${WS_ALL_LIBS} ${${PACKAGE_VAR}_LIBRARIES})
589                 message(STATUS "${PACKAGE} includes: ${${PACKAGE_VAR}_INCLUDE_DIRS}")
590                 message(STATUS "${PACKAGE} libs: ${${PACKAGE_VAR}_LIBRARIES}")
591                 if (${PACKAGE}_DEFINITIONS)
592                         message(STATUS "${PACKAGE} definitions: ${${PACKAGE_VAR}_DEFINITIONS}")
593                 endif()
594                 if (${PACKAGE_VAR}_EXECUTABLE)
595                         message(STATUS "${PACKAGE} executable: ${${PACKAGE_VAR}_EXECUTABLE}")
596                 endif()
597         else()
598                 #
599                 # Not finding a package is only a fatal error if the
600                 # package is required; if it's required, then its
601                 # XXX_REQUIRED variable is set to TRUE, and the above
602                 # code will pass REQUIRED to find_package, and the
603                 # configure will fail if the package isn't found.
604                 #
605                 # Do *NOT* report this as an error!
606                 #
607                 message("${PACKAGE_VAR} NOT FOUND")
608         endif()
609 endforeach()
610
611 # Provide Windows system lib names
612 include( UseWinLibs )
613
614 # Create file to set paths to run binaries from build dir
615 WSExtendPath( "${WS_ALL_LIBS}" "${CMAKE_BINARY_DIR}/setpath.bat" )
616
617 #packaging
618 include(CPackConfig.txt)
619
620 if(HAVE_LIBPYTHON)
621         set(HAVE_PYTHON 1)
622         set(PYTHON_DIR "${CMAKE_INSTALL_PREFIX}/lib/wireshark/python/${CPACK_PACKAGE_VERSION}")
623 endif()
624 if(HAVE_LIBLUA)
625         set(HAVE_LUA_H 1)
626         set(HAVE_LUA 1)
627 endif()
628 if(HAVE_LIBKERBEROS)
629         set(HAVE_KERBEROS 1)
630         # HAVE_HEIMDAL_KERBEROS
631         set(HAVE_MIT_KERBEROS 1)
632         set(HAVE_KEYTYPE_ARCFOUR_56 1)
633 endif()
634 if(HAVE_LIBGEOIP)
635         set(HAVE_GEOIP 1)
636 endif()
637 if(HAVE_LIBCARES)
638         set(HAVE_C_ARES 1)
639 endif()
640 if(HAVE_LIBADNS)
641         set(HAVE_GNU_ADNS 1)
642 endif()
643 if(HAVE_LIBNL AND HAVE_AIRPCAP)
644         message(ERROR "Airpcap and Libnl support are mutually exclusive")
645 endif()
646 if(HAVE_LIBSBC)
647     set(HAVE_SBC 1)
648 endif()
649 # No matter which version of GTK is present
650 if(GTK2_FOUND OR GTK3_FOUND)
651         set(GTK_FOUND ON)
652 endif()
653 # That's the name autofoo uses
654 if(HAVE_LIBZLIB)
655         set(HAVE_LIBZ 1)
656         # Always include the "true" zlib includes first. This works around a
657         # bug in the Windows setup of GTK[23] which has a faulty zconf.h.
658         include_directories(BEFORE ${ZLIB_INCLUDE_DIRS})
659 endif()
660 if (Qt5Widgets_FOUND)
661         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
662         if (Qt5_POSITION_INDEPENDENT_CODE)
663                 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
664         endif()
665         set (QT_FOUND ON)
666         set (QT_LIBRARIES ${Qt5Widgets_LIBRARIES} ${Qt5PrintSupport_LIBRARIES})
667         if(Qt5MacExtras_FOUND)
668                 set (QT_LIBRARIES ${QT_LIBRARIES} ${Qt5MacExtras_LIBRARIES})
669                 # That's the name autofoo uses
670                 set(QT_MACEXTRAS_LIB 1)
671         endif()
672 # If Qt4: QT_LIBRARIES and QT_INCLUDES are not set above. They require extra magic
673 elseif(QT_FOUND)
674         include(${QT_USE_FILE})
675         include_directories(${QT_INCLUDE_DIR})
676         message(STATUS "QT includes: ${QT_INCLUDE_DIR}")
677         message(STATUS "QT libs: ${QT_LIBRARIES}")
678 endif()
679 include(ConfigureChecks.cmake)
680
681 #Big or little endian ?
682 include(TestBigEndian)
683 test_big_endian(WORDS_BIGENDIAN)
684
685 set(DATAFILE_DIR "${CMAKE_INSTALL_PREFIX}/share/${CPACK_PACKAGE_NAME}")
686
687 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
688
689 if(ENABLE_PLUGINS)
690         set(HAVE_PLUGINS 1)
691         set(PLUGIN_DIR="${DATAFILE_DIR}/plugins/${CPACK_PACKAGE_VERSION}")
692         set(PLUGIN_INSTALL_DIR="${CMAKE_INSTALL_LIBDIR}/@CPACK_PACKAGE_NAME@/plugins/${CPACK_PACKAGE_VERSION}")
693         set(PLUGIN_SRC_DIRS
694                 plugins/docsis
695                 plugins/ethercat
696                 plugins/gryphon
697                 plugins/irda
698                 plugins/m2m
699                 plugins/mate
700                 plugins/opcua
701                 plugins/profinet
702                 plugins/stats_tree
703                 plugins/unistim
704                 plugins/wimax
705                 plugins/wimaxasncp
706                 plugins/wimaxmacphy
707         )
708 # It seems this stuff doesn't build with autofoo either...
709 #       if(YAPP_FOUND)
710 #               set(PLUGIN_SRC_DIRS
711 #                       ${PLUGIN_SRC_DIRS}
712 #                       plugins/tpg
713 #               )
714 #       endif()
715 else()
716         set(PLUGIN_SRC_DIRS )
717 endif()
718
719 foreach(PLUGIN_DIR ${PLUGIN_SRC_DIRS})
720         add_subdirectory( ${PLUGIN_DIR} )
721 endforeach()
722
723 add_subdirectory( asn1 EXCLUDE_FROM_ALL )
724 add_subdirectory( codecs )
725 add_subdirectory( epan )
726 add_subdirectory( filetap )
727 add_subdirectory( tools/lemon )
728 add_subdirectory( ui )
729 add_subdirectory( wiretap )
730 add_subdirectory( wsutil )
731
732 if(NOT WIN32)
733         add_custom_target(dumpabi DEPENDS dumpabi-libwireshark dumpabi-libfiletap dumpabi-libwiretap dumpabi-libwsutil color.h)
734 endif()
735
736 if(ENABLE_ECHLD)
737         add_subdirectory( echld )
738 endif()
739
740 if(BUILD_wireshark AND GTK_FOUND)
741         add_subdirectory( ui/gtk )
742 endif()
743
744 if(BUILD_qtshark AND QT_FOUND)
745         add_subdirectory( ui/qt )
746 endif()
747
748
749 # Basedir where to install guides
750 set(DOC_DIR "$ENV{docdir}" CACHE FILEPATH "Installation directory for ug and dg pdfs.")
751 message(STATUS "docdir: ${DOC_DIR}")
752
753 if(ENABLE_GUIDES)
754         add_subdirectory( docbook )
755 endif()
756
757 if(ENABLE_PCAP_NG_DEFAULT)
758         set(PCAP_NG_DEFAULT 1)
759 endif()
760
761 # Large file support (e.g. make off_t 64 bit if supported)
762 include(gmxTestLargeFiles)
763 gmx_test_large_files(GMX_LARGEFILES)
764
765 add_definitions( -DTOP_SRCDIR=\"${CMAKE_SOURCE_DIR}\" )
766
767 if(APPLE)
768         #
769         # We assume that APPLE means OS X so that we have the OS X
770         # frameworks.
771         #
772         set(HAVE_OS_X_FRAMEWORKS 1)
773         FIND_LIBRARY (APPLE_APPLICATION_SERVICES_LIBRARY ApplicationServices)
774         FIND_LIBRARY (APPLE_CORE_FOUNDATION_LIBRARY CoreFoundation)
775         FIND_LIBRARY (APPLE_SYSTEM_CONFIGURATION_LIBRARY SystemConfiguration)
776 endif()
777
778 if(WIN32)
779         set(WS_MSVC_NORETURN "__declspec(noreturn)")
780
781         # Disable deprecation
782         if(MSVC80 OR MSVC90)
783                 add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
784         endif()
785 else()
786         set(WS_MSVC_NORETURN " ")
787 endif()
788
789 configure_file(${CMAKE_SOURCE_DIR}/cmakeconfig.h.in ${CMAKE_BINARY_DIR}/config.h)
790 configure_file(${CMAKE_SOURCE_DIR}/wireshark.pc.in ${CMAKE_BINARY_DIR}/wireshark.pc @ONLY)
791 if( ENABLE_GUIDES )
792         configure_file(
793                 ${CMAKE_SOURCE_DIR}/doxygen_global.cfg
794                 ${CMAKE_BINARY_DIR}/doxygen_global.cfg
795         )
796         configure_file(
797                 ${CMAKE_SOURCE_DIR}/ui/qt/doxygen.cfg.in
798                 ${CMAKE_BINARY_DIR}/ui/qt/doxygen.cfg
799         )
800         configure_file(
801                 ${CMAKE_SOURCE_DIR}/ui/gtk/doxygen.cfg.in
802                 ${CMAKE_BINARY_DIR}/ui/gtk/doxygen.cfg
803         )
804         configure_file(
805                 ${CMAKE_SOURCE_DIR}/ui/doxygen.cfg.in
806                 ${CMAKE_BINARY_DIR}/ui/doxygen.cfg
807         )
808         configure_file(
809                 ${CMAKE_SOURCE_DIR}/epan/doxygen.cfg.in
810                 ${CMAKE_BINARY_DIR}/epan/doxygen.cfg
811         )
812         configure_file(
813                 ${CMAKE_SOURCE_DIR}/doxygen.cfg.in
814                 ${CMAKE_BINARY_DIR}/doxygen.cfg
815         )
816 endif()
817
818 set( configure_input "Built with CMake ${CMAKE_VERSION}" )
819 set( VERSION ${PROJECT_VERSION} )
820
821 configure_file(
822         ${CMAKE_SOURCE_DIR}/packaging/macosx/Info.plist.in
823         ${CMAKE_BINARY_DIR}/packaging/macosx/Info.plist
824         @ONLY)
825
826 include(FeatureSummary)
827 #SET_FEATURE_INFO(NAME DESCRIPTION [URL [COMMENT] ]
828 #FEATURE_SUMMARY(WHAT ALL) Requires removal of our local copy of FeatureSummary
829 PRINT_ENABLED_FEATURES()
830 PRINT_DISABLED_FEATURES()
831
832 link_directories(
833         ${CMAKE_BINARY_DIR}/ui
834         ${CMAKE_BINARY_DIR}/ui/gtk
835         ${CMAKE_BINARY_DIR}/ui/qt
836         ${CMAKE_BINARY_DIR}/codecs
837         ${CMAKE_BINARY_DIR}/epan
838         ${CMAKE_BINARY_DIR}/filetap
839         ${CMAKE_BINARY_DIR}/wiretap
840         ${CMAKE_BINARY_DIR}/wsutil
841 )
842
843 ADD_CUSTOM_TARGET(
844         gitversion ALL
845         COMMAND ${PERL_EXECUTABLE}
846                 ${CMAKE_CURRENT_SOURCE_DIR}/make-version.pl
847                 ${CMAKE_CURRENT_SOURCE_DIR}
848         DEPENDS
849                 ${CMAKE_CURRENT_SOURCE_DIR}/make-version.pl
850 )
851 set_target_properties(gitversion PROPERTIES FOLDER "Auxiliary")
852
853 ADD_CUSTOM_COMMAND(
854         OUTPUT  version.h
855         COMMAND ${PERL_EXECUTABLE}
856                 ${CMAKE_CURRENT_SOURCE_DIR}/make-version.pl
857                 ${CMAKE_CURRENT_SOURCE_DIR}
858         DEPENDS
859                 ${CMAKE_CURRENT_SOURCE_DIR}/make-version.pl
860 )
861
862 if(UNIX)
863         set(PLATFORM_PCAP_SRC
864                 capture-pcap-util-unix.c
865         )
866 endif()
867
868 if(WIN32)
869         set(PLATFORM_PCAP_SRC
870                 capture_win_ifnames.c
871                 capture-wpcap.c
872                 capture_wpcap_packet.c
873         )
874         set(PLATFORM_UI_SRC
875                 ui/win32/console_win32.c
876                 ui/win32/file_dlg_win32.c
877                 ui/win32/print_win32.c
878         )
879 endif()
880
881 # sources common for wireshark, tshark, and rawshark
882 set(SHARK_COMMON_SRC
883         ${PLATFORM_PCAP_SRC}
884         capture-pcap-util.c
885         cfile.c
886         cfutils.c
887         clopts_common.c
888         frame_tvbuff.c
889         version.h
890         sync_pipe_write.c
891         version_info.c
892 )
893
894 # sources common for wireshark and tshark, but not rawshark;
895 # these are for programs that capture traffic by running dumpcap
896 set(SHARK_COMMON_CAPTURE_SRC
897         capture_ifinfo.c
898         capture_sync.c
899         capture_ui_utils.c
900 )
901
902 set(TSHARK_TAP_SRC
903         ui/cli/tap-afpstat.c
904         ui/cli/tap-ansi_astat.c
905         ui/cli/tap-bootpstat.c
906         ui/cli/tap-camelcounter.c
907         ui/cli/tap-camelsrt.c
908         ui/cli/tap-comparestat.c
909         ui/cli/tap-dcerpcstat.c
910         ui/cli/tap-diameter-avp.c
911         ui/cli/tap-expert.c
912         ui/cli/tap-follow.c
913         ui/cli/tap-funnel.c
914         ui/cli/tap-gsm_astat.c
915         ui/cli/tap-h225counter.c
916         ui/cli/tap-h225rassrt.c
917         ui/cli/tap-hosts.c
918         ui/cli/tap-httpstat.c
919         ui/cli/tap-icmpstat.c
920         ui/cli/tap-icmpv6stat.c
921         ui/cli/tap-iostat.c
922         ui/cli/tap-iousers.c
923         ui/cli/tap-macltestat.c
924         ui/cli/tap-mgcpstat.c
925         ui/cli/tap-megacostat.c
926         ui/cli/tap-protocolinfo.c
927         ui/cli/tap-protohierstat.c
928         ui/cli/tap-radiusstat.c
929         ui/cli/tap-rlcltestat.c
930         ui/cli/tap-rpcstat.c
931         ui/cli/tap-rpcprogs.c
932         ui/cli/tap-rtp.c
933         ui/cli/tap-rtspstat.c
934         ui/cli/tap-scsistat.c
935         ui/cli/tap-sctpchunkstat.c
936         ui/cli/tap-sipstat.c
937         ui/cli/tap-smbsids.c
938         ui/cli/tap-smbstat.c
939         ui/cli/tap-stats_tree.c
940         ui/cli/tap-sv.c
941         ui/cli/tap-wspstat.c
942 )
943
944 set(INSTALL_DIRS
945         diameter
946         dtds
947         help
948         radius
949         tpncp
950         wimaxasncp
951 )
952
953 set(INSTALL_FILES
954         ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
955         COPYING
956         ${CMAKE_BINARY_DIR}/capinfos.html
957         ${CMAKE_BINARY_DIR}/captype.html
958         cfilters
959         colorfilters
960         dfilters
961         ${CMAKE_BINARY_DIR}/dftest.html
962         ${CMAKE_BINARY_DIR}/dumpcap.html
963         ${CMAKE_BINARY_DIR}/editcap.html
964         ${CMAKE_BINARY_DIR}/asn2deb.html
965         ${CMAKE_BINARY_DIR}/idl2deb.html
966         ${CMAKE_BINARY_DIR}/idl2wrs.html
967         ipmap.html
968         manuf
969         ${CMAKE_BINARY_DIR}/mergecap.html
970         pdml2html.xsl
971         ${CMAKE_BINARY_DIR}/randpkt.html
972         ${CMAKE_BINARY_DIR}/rawshark.html
973         ${CMAKE_BINARY_DIR}/reordercap.html
974         services
975         smi_modules
976         ${CMAKE_BINARY_DIR}/text2pcap.html
977         ${CMAKE_BINARY_DIR}/tshark.html
978         ${CMAKE_BINARY_DIR}/wireshark-filter.html
979         ${CMAKE_BINARY_DIR}/wireshark.html
980         docbook/ws.css
981 )
982
983 set(LIBEPAN_LIBS
984 #               @NSL_LIBS@      # -lnsl
985 #               @SOCKET_LIBS@   # -lsocket
986 #               @SSL_LIBS@      # -lcrypto
987                 epan
988 #               $(plugin_ldadd) # in case of static
989                 ${AIRPCAP_LIBRARIES}
990                 ${PCAP_LIBRARIES}
991                 ${CARES_LIBRARIES}
992                 ${ADNS_LIBRARIES}
993                 ${KERBEROS_LIBRARIES}
994                 ${LUA_LIBRARIES}
995                 ${PYTHON_LIBRARIES}
996                 ${GEOIP_LIBRARIES}
997                 ${GCRYPT_LIBRARIES}
998                 ${GNUTLS_LIBRARIES}
999                 ${SMI_LIBRARIES}
1000                 ${ZLIB_LIBRARIES}
1001                 ${M_LIBRARIES}
1002                 ${SBC_LIBRARIES}
1003 )
1004
1005 if( (BUILD_wireshark AND GTK_FOUND) OR (BUILD_qtshark AND QT_FOUND) )
1006         set(wireshark_FILES
1007                 airpcap_loader.c
1008                 capture.c
1009                 capture_info.c
1010                 capture_opts.c
1011                 color_filters.c
1012                 file.c
1013                 fileset.c
1014                 filters.c
1015                 iface_monitor.c
1016                 proto_hier_stats.c
1017                 summary.c
1018                 ws80211_utils.c
1019                 ${SHARK_COMMON_CAPTURE_SRC}
1020                 ${SHARK_COMMON_SRC}
1021                 ${PLATFORM_UI_SRC}
1022         )
1023 endif()
1024
1025 if(BUILD_wireshark AND GTK_FOUND)
1026         set(wireshark_LIBS
1027                 gtkui
1028                 ui
1029                 ${GTK2_LIBRARIES}
1030                 ${GTK3_LIBRARIES}
1031                 ${GTHREAD2_LIBRARIES}
1032                 codecs
1033                 ${PORTAUDIO_LIBRARIES}
1034                 ${LIBEPAN_LIBS}
1035                 ${APPLE_APPLICATION_SERVICES_LIBRARY}
1036                 ${APPLE_CORE_SERVICES_LIBRARY}
1037                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
1038                 ${NL_LIBRARIES}
1039                 ${WIN_COMCTL32_LIBRARY}
1040         )
1041         # qtshark and wireshark share wireshark_FILES
1042
1043         add_executable(wireshark ${wireshark_FILES})
1044         add_dependencies(wireshark gitversion)
1045         set_target_properties(wireshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1046         set_target_properties(wireshark PROPERTIES FOLDER "Executables")
1047         target_link_libraries(wireshark ${wireshark_LIBS})
1048         install(TARGETS wireshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1049 endif()
1050
1051 if(BUILD_qtshark AND QT_FOUND)
1052         set(qtshark_LIBS
1053                 qtui
1054                 ui
1055                 ${QT_LIBRARIES}
1056                 ${GTHREAD2_LIBRARIES}
1057                 codecs
1058                 ${LIBEPAN_LIBS}
1059                 ${APPLE_APPLICATION_SERVICES_LIBRARY}
1060                 ${APPLE_CORE_FOUNDATION_LIBRARY}
1061                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
1062                 ${NL_LIBRARIES}
1063         )
1064         # qtshark and wireshark share wireshark_FILES
1065
1066         add_executable(qtshark ${wireshark_FILES})
1067         add_dependencies(qtshark gitversion)
1068         set_target_properties(qtshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1069         set_target_properties(qtshark PROPERTIES FOLDER "Executables")
1070         target_link_libraries(qtshark ${qtshark_LIBS})
1071         install(TARGETS qtshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1072 endif()
1073
1074 register_tap_files(tshark-tap-register.c
1075                 tshark-taps
1076         ${TSHARK_TAP_SRC}
1077 )
1078
1079 if(BUILD_tshark)
1080         set(tshark_LIBS
1081                 ui
1082                 ${LIBEPAN_LIBS}
1083                 ${APPLE_CORE_FOUNDATION_LIBRARY}
1084                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
1085         )
1086         set(tshark_FILES
1087                 capture_opts.c
1088                 tshark-tap-register.c
1089                 tshark.c
1090                 ${TSHARK_TAP_SRC}
1091                 ${SHARK_COMMON_CAPTURE_SRC}
1092                 ${SHARK_COMMON_SRC}
1093         )
1094         add_executable(tshark ${tshark_FILES})
1095         add_dependencies(tshark gitversion)
1096         set_target_properties(tshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1097         set_target_properties(tshark PROPERTIES FOLDER "Executables")
1098         target_link_libraries(tshark ${tshark_LIBS})
1099         install(TARGETS tshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1100 endif()
1101
1102 if(BUILD_tfshark)
1103         set(tfshark_LIBS
1104                 filetap
1105                 ui
1106                 ${LIBEPAN_LIBS}
1107                 ${APPLE_CORE_FOUNDATION_LIBRARY}
1108                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
1109         )
1110         set(tfshark_FILES
1111                 tfshark.c
1112                 ${TSHARK_TAP_SRC}
1113                 ${SHARK_COMMON_SRC}
1114         )
1115         add_executable(tfshark ${tfshark_FILES})
1116         add_dependencies(tfshark gitversion)
1117         set_target_properties(tfshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1118         set_target_properties(tfshark PROPERTIES FOLDER "Executables")
1119         target_link_libraries(tfshark ${tfshark_LIBS})
1120         install(TARGETS tfshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1121 endif()
1122
1123 if(BUILD_rawshark AND PCAP_FOUND)
1124         set(rawshark_LIBS
1125                 ${LIBEPAN_LIBS}
1126                 ${APPLE_CORE_FOUNDATION_LIBRARY}
1127                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
1128         )
1129         set(rawshark_FILES
1130                 ${SHARK_COMMON_SRC}
1131                 rawshark.c
1132                 ui/util.c
1133         )
1134         add_executable(rawshark ${rawshark_FILES})
1135         add_dependencies(rawshark gitversion)
1136         set_target_properties(rawshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1137         set_target_properties(rawshark PROPERTIES FOLDER "Executables")
1138         target_link_libraries(rawshark ${rawshark_LIBS})
1139         install(TARGETS rawshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1140 endif()
1141
1142 if(BUILD_dftest)
1143         set(dftest_LIBS
1144                 ${LIBEPAN_LIBS}
1145         )
1146         set(dftest_FILES
1147                 dftest.c
1148                 ui/util.c
1149         )
1150         add_executable(dftest ${dftest_FILES})
1151         set_target_properties(dftest PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1152         set_target_properties(dftest PROPERTIES FOLDER "Executables")
1153         target_link_libraries(dftest ${dftest_LIBS})
1154         install(TARGETS dftest RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1155 endif()
1156
1157 if(BUILD_randpkt)
1158         set(randpkt_LIBS
1159                 wiretap
1160                 wsutil
1161                 ${M_LIBRARIES}
1162                 ${PCAP_LIBRARIES}
1163 #               @SOCKET_LIBS@
1164 #               @NSL_LIBS@
1165                 ${CARES_LIBRARIES}
1166                 ${ADNS_LIBRARIES}
1167                 ${ZLIB_LIBRARIES}
1168         )
1169         set(randpkt_FILES
1170                 randpkt.c
1171         )
1172         add_executable(randpkt ${randpkt_FILES})
1173         set_target_properties(randpkt PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1174         set_target_properties(randpkt PROPERTIES FOLDER "Executables")
1175         target_link_libraries(randpkt ${randpkt_LIBS})
1176         install(TARGETS randpkt RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1177 endif()
1178
1179 if(BUILD_text2pcap)
1180         set(text2pcap_LIBS
1181                 wsutil
1182                 ${M_LIBRARIES}
1183                 ${ZLIB_LIBRARIES}
1184         )
1185         set(text2pcap_CLEAN_FILES
1186                 text2pcap.c
1187                 pcapio.c
1188         )
1189         set(text2pcap_FILES
1190                 ${text2pcap_CLEAN_FILES}
1191         )
1192         add_lex_files(text2pcap_FILES
1193                 text2pcap-scanner.l
1194         )
1195         add_executable(text2pcap ${text2pcap_FILES})
1196         add_dependencies(text2pcap gitversion)
1197         set_target_properties(text2pcap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1198         set_target_properties(text2pcap PROPERTIES FOLDER "Executables")
1199         target_link_libraries(text2pcap ${text2pcap_LIBS})
1200         install(TARGETS text2pcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1201 endif()
1202
1203 if(BUILD_mergecap)
1204         set(mergecap_LIBS
1205                 wiretap
1206                 ${ZLIB_LIBRARIES}
1207                 ${CMAKE_DL_LIBS}
1208         )
1209         set(mergecap_FILES
1210                 mergecap.c
1211                 version.h
1212         )
1213         add_executable(mergecap ${mergecap_FILES})
1214         add_dependencies(mergecap gitversion)
1215         set_target_properties(mergecap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1216         set_target_properties(mergecap PROPERTIES FOLDER "Executables")
1217         target_link_libraries(mergecap ${mergecap_LIBS})
1218         install(TARGETS mergecap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1219 endif()
1220
1221 if(BUILD_reordercap)
1222         set(reordercap_LIBS
1223                 wiretap
1224                 ${ZLIB_LIBRARIES}
1225                 ${CMAKE_DL_LIBS}
1226         )
1227         set(reordercap_FILES
1228                 reordercap.c
1229                 version.h
1230         )
1231         add_executable(reordercap ${reordercap_FILES})
1232         add_dependencies(reordercap gitversion)
1233         set_target_properties(reordercap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1234         set_target_properties(reordercap PROPERTIES FOLDER "Executables")
1235         target_link_libraries(reordercap ${reordercap_LIBS})
1236         install(TARGETS reordercap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1237 endif()
1238
1239 if(BUILD_capinfos)
1240         set(capinfos_LIBS
1241                 wiretap
1242                 wsutil
1243                 ${ZLIB_LIBRARIES}
1244                 ${GCRYPT_LIBRARIES}
1245                 ${CMAKE_DL_LIBS}
1246         )
1247         set(capinfos_FILES
1248                 capinfos.c
1249         )
1250         add_executable(capinfos ${capinfos_FILES})
1251         add_dependencies(capinfos gitversion)
1252         set_target_properties(capinfos PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1253         set_target_properties(capinfos PROPERTIES FOLDER "Executables")
1254         target_link_libraries(capinfos ${capinfos_LIBS})
1255         install(TARGETS capinfos RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1256 endif()
1257
1258 if(BUILD_captype)
1259         set(captype_LIBS
1260                 wiretap
1261                 wsutil
1262                 ${ZLIB_LIBRARIES}
1263                 ${CMAKE_DL_LIBS}
1264         )
1265         set(captype_FILES
1266                 captype.c
1267         )
1268         add_executable(captype ${captype_FILES})
1269         add_dependencies(captype gitversion)
1270         set_target_properties(captype PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1271         set_target_properties(captype PROPERTIES FOLDER "Executables")
1272         target_link_libraries(captype ${captype_LIBS})
1273         install(TARGETS captype RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1274 endif()
1275
1276 if(BUILD_editcap)
1277         set(editcap_LIBS
1278                 wiretap
1279                 ${ZLIB_LIBRARIES}
1280                 ${CMAKE_DL_LIBS}
1281         )
1282         set(editcap_FILES
1283                 editcap.c
1284         )
1285         add_executable(editcap ${editcap_FILES})
1286         add_dependencies(editcap gitversion)
1287         set_target_properties(editcap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1288         set_target_properties(editcap PROPERTIES FOLDER "Executables")
1289         target_link_libraries(editcap ${editcap_LIBS})
1290         install(TARGETS editcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1291 endif()
1292
1293 if(BUILD_dumpcap AND PCAP_FOUND)
1294         set(dumpcap_LIBS
1295                 wsutil
1296                 ${PCAP_LIBRARIES}
1297                 ${CAP_LIBRARIES}
1298 #               @SOCKET_LIBS@
1299 #               @NSL_LIBS@
1300                 ${GLIB2_LIBRARIES}
1301                 ${GTHREAD2_LIBRARIES}
1302                 ${ZLIB_LIBRARIES}
1303                 ${APPLE_CORE_FOUNDATION_LIBRARY}
1304                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
1305                 ${NL_LIBRARIES}
1306         )
1307         set(dumpcap_FILES
1308                 version.h
1309                 capture_opts.c
1310                 capture-pcap-util.c
1311                 capture_stop_conditions.c
1312                 cfutils.c
1313                 clopts_common.c
1314                 conditions.c
1315                 dumpcap.c
1316                 pcapio.c
1317                 ringbuffer.c
1318                 sync_pipe_write.c
1319                 version_info.c
1320                 ws80211_utils.c
1321                 ${PLATFORM_PCAP_SRC}
1322         )
1323         add_executable(dumpcap ${dumpcap_FILES})
1324         add_dependencies(dumpcap gitversion)
1325         set_target_properties(dumpcap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1326         set_target_properties(dumpcap PROPERTIES FOLDER "Executables")
1327         target_link_libraries(dumpcap ${dumpcap_LIBS})
1328         install(TARGETS dumpcap
1329                         RUNTIME
1330                         DESTINATION ${CMAKE_INSTALL_BINDIR}
1331                         PERMISSIONS ${DUMPCAP_SETUID}
1332                                 OWNER_READ OWNER_WRITE OWNER_EXECUTE
1333                                 GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
1334         )
1335         if(DUMPCAP_INSTALL_OPTION STREQUAL "capabilities")
1336                 install( CODE "execute_process(
1337                         COMMAND
1338                                 ${SETCAP_EXECUTABLE}
1339                                 cap_net_raw,cap_net_admin+ep
1340                                 ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/dumpcap${CMAKE_EXECUTABLE_SUFFIX}
1341                         RESULT_VARIABLE
1342                                 _SETCAP_RESULT
1343                         )
1344                         if( _SETCAP_RESULT )
1345                                 message( WARNING \"setcap failed (${_SETCAP_RESULT}).\")
1346                         endif()"
1347                 )
1348         endif()
1349 endif()
1350
1351 ADD_CUSTOM_COMMAND(
1352         OUTPUT  ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1353         COMMAND ${PERL_EXECUTABLE}
1354                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1355                 ${CMAKE_SOURCE_DIR}/doc/make-authors-short.pl
1356                 < ${CMAKE_SOURCE_DIR}/AUTHORS
1357                 > ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1358         DEPENDS
1359                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1360                 ${CMAKE_SOURCE_DIR}/doc/make-authors-short.pl
1361                 ${CMAKE_SOURCE_DIR}/AUTHORS
1362 )
1363
1364 ADD_CUSTOM_COMMAND(
1365         OUTPUT  ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1366                 ${CMAKE_BINARY_DIR}/wireshark.pod
1367         COMMAND ${PERL_EXECUTABLE}
1368                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1369                 ${CMAKE_SOURCE_DIR}/doc/make-authors-format.pl
1370                 < ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1371                 > ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1372         COMMAND cat
1373                 ${CMAKE_SOURCE_DIR}/doc/wireshark.pod.template
1374                 ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1375                 > ${CMAKE_BINARY_DIR}/wireshark.pod
1376         DEPENDS
1377                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1378                 ${CMAKE_SOURCE_DIR}/doc/make-authors-format.pl
1379                 ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1380                 ${CMAKE_SOURCE_DIR}/doc/wireshark.pod.template
1381 )
1382
1383 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/capinfos 1 )
1384 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/captype 1 )
1385 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/dftest 1 )
1386 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/dumpcap 1 )
1387 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/editcap 1 )
1388 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/asn2deb 1 )
1389 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/idl2deb 1 )
1390 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/idl2wrs 1 )
1391 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/mergecap 1 )
1392 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/randpkt 1 )
1393 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/rawshark 1 )
1394 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/reordercap 1 )
1395 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/text2pcap 1 )
1396 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/tshark 1 )
1397 pod2manhtml( ${CMAKE_BINARY_DIR}/wireshark 1 )
1398 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/wireshark-filter 4 )
1399
1400 add_custom_target(
1401         auxiliary ALL
1402         DEPENDS
1403                 AUTHORS-SHORT
1404                 capinfos.html
1405                 captype.html
1406                 dftest.html
1407                 dumpcap.html
1408                 editcap.html
1409                 asn2deb.html
1410                 idl2deb.html
1411                 idl2wrs.html
1412                 mergecap.html
1413                 randpkt.html
1414                 rawshark.html
1415                 reordercap.html
1416                 text2pcap.html
1417                 tshark.html
1418                 wireshark.html
1419                 wireshark-filter.html
1420 )
1421 set_target_properties(auxiliary PROPERTIES FOLDER "Docs")
1422
1423 set(MAN1_FILES
1424         ${CMAKE_BINARY_DIR}/capinfos.1
1425         ${CMAKE_BINARY_DIR}/captype.1
1426         ${CMAKE_BINARY_DIR}/dftest.1
1427         ${CMAKE_BINARY_DIR}/dumpcap.1
1428         ${CMAKE_BINARY_DIR}/editcap.1
1429         ${CMAKE_BINARY_DIR}/idl2wrs.1
1430         ${CMAKE_BINARY_DIR}/mergecap.1
1431         ${CMAKE_BINARY_DIR}/randpkt.1
1432         ${CMAKE_BINARY_DIR}/rawshark.1
1433         ${CMAKE_BINARY_DIR}/reordercap.1
1434         ${CMAKE_BINARY_DIR}/text2pcap.1
1435         ${CMAKE_BINARY_DIR}/tshark.1
1436         ${CMAKE_BINARY_DIR}/wireshark.1
1437 )
1438
1439 set(MAN4_FILES
1440         ${CMAKE_BINARY_DIR}/wireshark-filter.4
1441 )
1442
1443 set(CLEAN_FILES
1444         ${wireshark_FILES}
1445         ${tshark_FILES}
1446         ${rawshark_FILES}
1447         ${dftest_FILES}
1448         ${randpkt_FILES}
1449         ${text2pcap_CLEAN_FILES}
1450         ${mergecap_FILES}
1451         ${capinfos_FILES}
1452         ${captype_FILES}
1453         ${editcap_FILES}
1454         ${dumpcap_FILES}
1455 )
1456
1457 if (WERROR)
1458         set_source_files_properties(
1459                 ${CLEAN_FILES}
1460                 PROPERTIES
1461                 COMPILE_FLAGS -Werror
1462         )
1463 endif()
1464
1465 install(
1466         FILES
1467                 ${INSTALL_FILES}
1468         DESTINATION
1469                 ${CMAKE_INSTALL_DATADIR}/${CPACK_PACKAGE_NAME}
1470 )
1471
1472 install(
1473         FILES
1474                 ${MAN1_FILES}
1475         DESTINATION
1476                 ${CMAKE_INSTALL_MANDIR}/man1
1477 )
1478
1479 install(
1480         FILES
1481                 ${MAN4_FILES}
1482         DESTINATION
1483                 ${CMAKE_INSTALL_MANDIR}/man4
1484 )
1485
1486 install(
1487         FILES
1488                 "${CMAKE_BINARY_DIR}/wireshark.pc"
1489         DESTINATION
1490                  ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/pkgconfig
1491 )
1492
1493 install(
1494         DIRECTORY
1495                 ${INSTALL_DIRS}
1496         DIRECTORY_PERMISSIONS
1497                 OWNER_EXECUTE OWNER_WRITE OWNER_READ
1498                 GROUP_EXECUTE GROUP_READ
1499                 WORLD_EXECUTE WORLD_READ
1500         DESTINATION
1501                 ${CMAKE_INSTALL_DATADIR}/${CPACK_PACKAGE_NAME}
1502         PATTERN ".git" EXCLUDE
1503         PATTERN ".svn" EXCLUDE
1504         PATTERN "Makefile.*" EXCLUDE
1505         PATTERN "faq.py" EXCLUDE
1506 )
1507
1508 include( UseCheckAPI )
1509 CHECKAPI(
1510                   ${TSHARK_TAP_SRC}
1511                   ${wireshark_FILES}
1512 )
1513
1514 if(DOC_DIR)
1515         message(STATUS "Docdir install: ${DOC_DIR}")
1516         INSTALL(
1517                 DIRECTORY
1518                         ${CMAKE_BINARY_DIR}/docbook/
1519                 DIRECTORY_PERMISSIONS
1520                         OWNER_EXECUTE OWNER_WRITE OWNER_READ
1521                         GROUP_EXECUTE GROUP_READ
1522                         WORLD_EXECUTE WORLD_READ
1523                 DESTINATION
1524                         ${DOC_DIR}/guides
1525                 FILES_MATCHING
1526                 PATTERN "*.pdf"
1527         )
1528 endif()