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