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