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