Do one or more of the following:
[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 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         cfilters
846         colorfilters
847         dfilters
848         ${CMAKE_BINARY_DIR}/dftest.html
849         ${CMAKE_BINARY_DIR}/dumpcap.html
850         ${CMAKE_BINARY_DIR}/editcap.html
851         ${CMAKE_BINARY_DIR}/asn2deb.html
852         ${CMAKE_BINARY_DIR}/idl2deb.html
853         ${CMAKE_BINARY_DIR}/idl2wrs.html
854         ipmap.html
855         manuf
856         ${CMAKE_BINARY_DIR}/mergecap.html
857         pdml2html.xsl
858         ${CMAKE_BINARY_DIR}/randpkt.html
859         ${CMAKE_BINARY_DIR}/rawshark.html
860         ${CMAKE_BINARY_DIR}/reordercap.html
861         services
862         smi_modules
863         ${CMAKE_BINARY_DIR}/text2pcap.html
864         ${CMAKE_BINARY_DIR}/tshark.html
865         ${CMAKE_BINARY_DIR}/wireshark-filter.html
866         ${CMAKE_BINARY_DIR}/wireshark.html
867         docbook/ws.css
868 )
869
870 set(LIBEPAN_LIBS
871 #               @NSL_LIBS@      # -lnsl
872 #               @SOCKET_LIBS@   # -lsocket
873 #               @SSL_LIBS@      # -lcrypto
874                 epan
875 #               $(plugin_ldadd) # in case of static
876                 ${AIRPCAP_LIBRARIES}
877                 ${PCAP_LIBRARIES}
878                 ${CARES_LIBRARIES}
879                 ${ADNS_LIBRARIES}
880                 ${KERBEROS_LIBRARIES}
881                 ${LUA_LIBRARIES}
882                 ${PYTHON_LIBRARIES}
883                 ${GEOIP_LIBRARIES}
884                 ${GCRYPT_LIBRARIES}
885                 ${GNUTLS_LIBRARIES}
886                 ${SMI_LIBRARIES}
887                 ${ZLIB_LIBRARIES}
888                 ${M_LIBRARIES}
889 )
890
891 if( (BUILD_wireshark AND GTK_FOUND) OR (BUILD_qtshark AND QT_FOUND) )
892         set(wireshark_FILES
893                 airpcap_loader.c
894                 capture.c
895                 capture_info.c
896                 capture_opts.c
897                 capture_sync.c
898                 color_filters.c
899                 file.c
900                 fileset.c
901                 filters.c
902                 iface_monitor.c
903                 proto_hier_stats.c
904                 summary.c
905                 ws80211_utils.c
906                 ${SHARK_COMMON_CAPTURE_SRC}
907                 ${WIRESHARK_COMMON_SRC}
908                 ${PLATFORM_UI_SRC}
909         )
910 endif()
911
912 if(BUILD_wireshark AND GTK_FOUND)
913         set(wireshark_LIBS
914                 gtkui
915                 ui
916                 ${GTK2_LIBRARIES}
917                 ${GTK3_LIBRARIES}
918                 ${GTHREAD2_LIBRARIES}
919                 codecs
920                 ${PORTAUDIO_LIBRARIES}
921                 ${LIBEPAN_LIBS}
922                 ${APPLE_APPLICATION_SERVICES_LIBRARY}
923                 ${APPLE_CORE_SERVICES_LIBRARY}
924                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
925                 ${NL_LIBRARIES}
926                 ${WIN_COMCTL32_LIBRARY}
927         )
928         # qtshark and wireshark share wireshark_FILES
929
930         add_executable(wireshark ${wireshark_FILES})
931         add_dependencies(wireshark svnversion)
932         set_target_properties(wireshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
933         set_target_properties(wireshark PROPERTIES FOLDER "Executables")
934         target_link_libraries(wireshark ${wireshark_LIBS})
935         install(TARGETS wireshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
936 endif()
937
938 if(BUILD_qtshark AND QT_FOUND)
939         set(qtshark_LIBS
940                 qtui
941                 ui
942                 ${QT_LIBRARIES}
943                 ${GTHREAD2_LIBRARIES}
944                 codecs
945                 ${LIBEPAN_LIBS}
946                 ${APPLE_APPLICATION_SERVICES_LIBRARY}
947                 ${APPLE_CORE_FOUNDATION_LIBRARY}
948                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
949                 ${NL_LIBRARIES}
950         )
951         # qtshark and wireshark share wireshark_FILES
952
953         add_executable(qtshark ${wireshark_FILES})
954         add_dependencies(qtshark svnversion)
955         set_target_properties(qtshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
956         set_target_properties(qtshark PROPERTIES FOLDER "Executables")
957         target_link_libraries(qtshark ${qtshark_LIBS})
958         install(TARGETS qtshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
959 endif()
960
961 register_tap_files(tshark-tap-register.c
962                 tshark-taps
963         ${TSHARK_TAP_SRC}
964 )
965
966 if(BUILD_tshark)
967         set(tshark_LIBS
968                 ui
969                 ${LIBEPAN_LIBS}
970                 ${APPLE_CORE_FOUNDATION_LIBRARY}
971                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
972         )
973         set(tshark_FILES
974                 capture_opts.c
975                 capture_sync.c
976                 tshark-tap-register.c
977                 tshark.c
978                 ${TSHARK_TAP_SRC}
979                 ${SHARK_COMMON_CAPTURE_SRC}
980                 ${WIRESHARK_COMMON_SRC}
981         )
982         add_executable(tshark ${tshark_FILES})
983         add_dependencies(tshark svnversion)
984         set_target_properties(tshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
985         set_target_properties(tshark PROPERTIES FOLDER "Executables")
986         target_link_libraries(tshark ${tshark_LIBS})
987         install(TARGETS tshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
988 endif()
989
990 if(BUILD_rawshark AND PCAP_FOUND)
991         set(rawshark_LIBS
992                 ${LIBEPAN_LIBS}
993                 ${APPLE_CORE_FOUNDATION_LIBRARY}
994                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
995         )
996         set(rawshark_FILES
997                 ${WIRESHARK_COMMON_SRC}
998                 rawshark.c
999                 ui/util.c
1000         )
1001         add_executable(rawshark ${rawshark_FILES})
1002         add_dependencies(rawshark svnversion)
1003         set_target_properties(rawshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1004         set_target_properties(rawshark PROPERTIES FOLDER "Executables")
1005         target_link_libraries(rawshark ${rawshark_LIBS})
1006         install(TARGETS rawshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1007 endif()
1008
1009 if(BUILD_dftest)
1010         set(dftest_LIBS
1011                 ${LIBEPAN_LIBS}
1012         )
1013         set(dftest_FILES
1014                 dftest.c
1015                 ui/util.c
1016         )
1017         add_executable(dftest ${dftest_FILES})
1018         set_target_properties(dftest PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1019         set_target_properties(dftest PROPERTIES FOLDER "Executables")
1020         target_link_libraries(dftest ${dftest_LIBS})
1021         install(TARGETS dftest RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1022 endif()
1023
1024 if(BUILD_randpkt)
1025         set(randpkt_LIBS
1026                 wiretap
1027                 wsutil
1028                 ${M_LIBRARIES}
1029                 ${PCAP_LIBRARIES}
1030 #               @SOCKET_LIBS@
1031 #               @NSL_LIBS@
1032                 ${CARES_LIBRARIES}
1033                 ${ADNS_LIBRARIES}
1034                 ${ZLIB_LIBRARIES}
1035         )
1036         set(randpkt_FILES
1037                 randpkt.c
1038         )
1039         add_executable(randpkt ${randpkt_FILES})
1040         set_target_properties(randpkt PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1041         set_target_properties(randpkt PROPERTIES FOLDER "Executables")
1042         target_link_libraries(randpkt ${randpkt_LIBS})
1043         install(TARGETS randpkt RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1044 endif()
1045
1046 if(BUILD_text2pcap)
1047         set(text2pcap_LIBS
1048                 wsutil
1049                 ${M_LIBRARIES}
1050                 ${ZLIB_LIBRARIES}
1051         )
1052         set(text2pcap_CLEAN_FILES
1053                 text2pcap.c
1054                 pcapio.c
1055         )
1056         set(text2pcap_FILES
1057                 ${text2pcap_CLEAN_FILES}
1058         )
1059         add_lex_files(text2pcap_FILES
1060                 text2pcap-scanner.l
1061         )
1062         add_executable(text2pcap ${text2pcap_FILES})
1063         add_dependencies(text2pcap svnversion)
1064         set_target_properties(text2pcap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1065         set_target_properties(text2pcap PROPERTIES FOLDER "Executables")
1066         target_link_libraries(text2pcap ${text2pcap_LIBS})
1067         install(TARGETS text2pcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1068 endif()
1069
1070 if(BUILD_mergecap)
1071         set(mergecap_LIBS
1072                 wiretap
1073                 ${ZLIB_LIBRARIES}
1074                 ${CMAKE_DL_LIBS}
1075         )
1076         set(mergecap_FILES
1077                 mergecap.c
1078                 svnversion.h
1079         )
1080         add_executable(mergecap ${mergecap_FILES})
1081         add_dependencies(mergecap svnversion)
1082         set_target_properties(mergecap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1083         set_target_properties(mergecap PROPERTIES FOLDER "Executables")
1084         target_link_libraries(mergecap ${mergecap_LIBS})
1085         install(TARGETS mergecap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1086 endif()
1087
1088 if(BUILD_reordercap)
1089         set(reordercap_LIBS
1090                 wiretap
1091                 ${ZLIB_LIBRARIES}
1092                 ${CMAKE_DL_LIBS}
1093         )
1094         set(reordercap_FILES
1095                 reordercap.c
1096                 svnversion.h
1097         )
1098         add_executable(reordercap ${reordercap_FILES})
1099         add_dependencies(reordercap svnversion)
1100         set_target_properties(reordercap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1101         set_target_properties(reordercap PROPERTIES FOLDER "Executables")
1102         target_link_libraries(reordercap ${reordercap_LIBS})
1103         install(TARGETS reordercap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1104 endif()
1105
1106 if(BUILD_capinfos)
1107         set(capinfos_LIBS
1108                 wiretap
1109                 wsutil
1110                 ${ZLIB_LIBRARIES}
1111                 ${GCRYPT_LIBRARIES}
1112                 ${CMAKE_DL_LIBS}
1113         )
1114         set(capinfos_FILES
1115                 capinfos.c
1116         )
1117         add_executable(capinfos ${capinfos_FILES})
1118         add_dependencies(capinfos svnversion)
1119         set_target_properties(capinfos PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1120         set_target_properties(capinfos PROPERTIES FOLDER "Executables")
1121         target_link_libraries(capinfos ${capinfos_LIBS})
1122         install(TARGETS capinfos RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1123 endif()
1124
1125 if(BUILD_editcap)
1126         set(editcap_LIBS
1127                 wiretap
1128                 ${ZLIB_LIBRARIES}
1129                 ${CMAKE_DL_LIBS}
1130         )
1131         set(editcap_FILES
1132                 editcap.c
1133         )
1134         add_executable(editcap ${editcap_FILES})
1135         add_dependencies(editcap svnversion)
1136         set_target_properties(editcap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1137         set_target_properties(editcap PROPERTIES FOLDER "Executables")
1138         target_link_libraries(editcap ${editcap_LIBS})
1139         install(TARGETS editcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1140 endif()
1141
1142 if(BUILD_dumpcap AND PCAP_FOUND)
1143         set(dumpcap_LIBS
1144                 wsutil
1145                 ${PCAP_LIBRARIES}
1146                 ${CAP_LIBRARIES}
1147 #               @SOCKET_LIBS@
1148 #               @NSL_LIBS@
1149                 ${GLIB2_LIBRARIES}
1150                 ${GTHREAD2_LIBRARIES}
1151                 ${ZLIB_LIBRARIES}
1152                 ${APPLE_CORE_FOUNDATION_LIBRARY}
1153                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
1154                 ${NL_LIBRARIES}
1155         )
1156         set(dumpcap_FILES
1157                 svnversion.h
1158                 capture_opts.c
1159                 capture-pcap-util.c
1160                 capture_stop_conditions.c
1161                 cfutils.c
1162                 clopts_common.c
1163                 conditions.c
1164                 dumpcap.c
1165                 pcapio.c
1166                 ringbuffer.c
1167                 sync_pipe_write.c
1168                 version_info.c
1169                 ws80211_utils.c
1170                 ${PLATFORM_CAPTURE_SRC}
1171         )
1172         add_executable(dumpcap ${dumpcap_FILES})
1173         add_dependencies(dumpcap svnversion)
1174         set_target_properties(dumpcap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1175         set_target_properties(dumpcap PROPERTIES FOLDER "Executables")
1176         target_link_libraries(dumpcap ${dumpcap_LIBS})
1177         install(TARGETS dumpcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1178 endif()
1179
1180 ADD_CUSTOM_COMMAND(
1181         OUTPUT  ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1182         COMMAND ${PERL_EXECUTABLE}
1183                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1184                 ${CMAKE_SOURCE_DIR}/doc/make-authors-short.pl
1185                 < ${CMAKE_SOURCE_DIR}/AUTHORS
1186                 > ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1187         DEPENDS
1188                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1189                 ${CMAKE_SOURCE_DIR}/doc/make-authors-short.pl
1190                 ${CMAKE_SOURCE_DIR}/AUTHORS
1191 )
1192
1193 ADD_CUSTOM_COMMAND(
1194         OUTPUT  ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1195                 ${CMAKE_BINARY_DIR}/wireshark.pod
1196         COMMAND ${PERL_EXECUTABLE}
1197                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1198                 ${CMAKE_SOURCE_DIR}/doc/make-authors-format.pl
1199                 < ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1200                 > ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1201         COMMAND cat
1202                 ${CMAKE_SOURCE_DIR}/doc/wireshark.pod.template
1203                 ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1204                 > ${CMAKE_BINARY_DIR}/wireshark.pod
1205         DEPENDS
1206                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1207                 ${CMAKE_SOURCE_DIR}/doc/make-authors-format.pl
1208                 ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1209                 ${CMAKE_SOURCE_DIR}/doc/wireshark.pod.template
1210 )
1211
1212 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/capinfos 1 )
1213 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/dftest 1 )
1214 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/dumpcap 1 )
1215 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/editcap 1 )
1216 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/asn2deb 1 )
1217 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/idl2deb 1 )
1218 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/idl2wrs 1 )
1219 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/mergecap 1 )
1220 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/randpkt 1 )
1221 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/rawshark 1 )
1222 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/reordercap 1 )
1223 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/text2pcap 1 )
1224 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/tshark 1 )
1225 pod2manhtml( ${CMAKE_BINARY_DIR}/wireshark 1 )
1226 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/wireshark-filter 4 )
1227
1228 add_custom_target(
1229         auxiliary ALL
1230         DEPENDS
1231                 AUTHORS-SHORT
1232                 capinfos.html
1233                 dftest.html
1234                 dumpcap.html
1235                 editcap.html
1236                 asn2deb.html
1237                 idl2deb.html
1238                 idl2wrs.html
1239                 mergecap.html
1240                 randpkt.html
1241                 rawshark.html
1242                 reordercap.html
1243                 text2pcap.html
1244                 tshark.html
1245                 wireshark.html
1246                 wireshark-filter.html
1247 )
1248 set_target_properties(auxiliary PROPERTIES FOLDER "Docs")
1249
1250 set(MAN1_FILES
1251         ${CMAKE_BINARY_DIR}/capinfos.1
1252         ${CMAKE_BINARY_DIR}/dftest.1
1253         ${CMAKE_BINARY_DIR}/dumpcap.1
1254         ${CMAKE_BINARY_DIR}/editcap.1
1255         ${CMAKE_BINARY_DIR}/idl2wrs.1
1256         ${CMAKE_BINARY_DIR}/mergecap.1
1257         ${CMAKE_BINARY_DIR}/randpkt.1
1258         ${CMAKE_BINARY_DIR}/rawshark.1
1259         ${CMAKE_BINARY_DIR}/reordercap.1
1260         ${CMAKE_BINARY_DIR}/text2pcap.1
1261         ${CMAKE_BINARY_DIR}/tshark.1
1262         ${CMAKE_BINARY_DIR}/wireshark.1
1263 )
1264
1265 set(MAN4_FILES
1266         ${CMAKE_BINARY_DIR}/wireshark-filter.4
1267 )
1268
1269 set(CLEAN_FILES
1270         ${wireshark_FILES}
1271         ${tshark_FILES}
1272         ${rawshark_FILES}
1273         ${dftest_FILES}
1274         ${randpkt_FILES}
1275         ${text2pcap_CLEAN_FILES}
1276         ${mergecap_FILES}
1277         ${capinfos_FILES}
1278         ${editcap_FILES}
1279         ${dumpcap_FILES}
1280 )
1281
1282 if (WERROR)
1283         set_source_files_properties(
1284                 ${CLEAN_FILES}
1285                 PROPERTIES
1286                 COMPILE_FLAGS -Werror
1287         )
1288 endif()
1289
1290 install(
1291         FILES
1292                 ${INSTALL_FILES}
1293         DESTINATION
1294                 ${CMAKE_INSTALL_DATADIR}/${CPACK_PACKAGE_NAME}
1295 )
1296
1297 install(
1298         FILES
1299                 ${MAN1_FILES}
1300         DESTINATION
1301                 ${CMAKE_INSTALL_MANDIR}/man1
1302 )
1303
1304 install(
1305         FILES
1306                 ${MAN4_FILES}
1307         DESTINATION
1308                 ${CMAKE_INSTALL_MANDIR}/man4
1309 )
1310
1311 install(
1312         DIRECTORY
1313                 ${INSTALL_DIRS}
1314         DIRECTORY_PERMISSIONS
1315                 OWNER_EXECUTE OWNER_WRITE OWNER_READ
1316                 GROUP_EXECUTE GROUP_READ
1317                 WORLD_EXECUTE WORLD_READ
1318         DESTINATION
1319                 ${CMAKE_INSTALL_DATADIR}/${CPACK_PACKAGE_NAME}
1320         PATTERN ".svn" EXCLUDE
1321         PATTERN "Makefile.*" EXCLUDE
1322         PATTERN "faq.py" EXCLUDE
1323 )
1324
1325 include( UseCheckAPI )
1326 CHECKAPI(
1327                   ${TSHARK_TAP_SRC}
1328                   ${wireshark_FILES}
1329 )
1330
1331 if(DOC_DIR)
1332         message(STATUS "Docdir install: ${DOC_DIR}")
1333         INSTALL(
1334                 DIRECTORY
1335                         ${CMAKE_BINARY_DIR}/docbook/
1336                 DIRECTORY_PERMISSIONS
1337                         OWNER_EXECUTE OWNER_WRITE OWNER_READ
1338                         GROUP_EXECUTE GROUP_READ
1339                         WORLD_EXECUTE WORLD_READ
1340                 DESTINATION
1341                         ${DOC_DIR}/guides
1342                 FILES_MATCHING
1343                 PATTERN "*.pdf"
1344         )
1345 endif()