Small style changes.
[metze/wireshark/wip.git] / CMakeLists.txt
1 # CMakeLists.txt
2 #
3 # $Id$
4 #
5 # Wireshark - Network traffic analyzer
6 # By Gerald Combs <gerald@wireshark.org>
7 # Copyright 1998 Gerald Combs
8 #
9 # This program is free software; you can redistribute it and/or
10 # modify it under the terms of the GNU General Public License
11 # as published by the Free Software Foundation; either version 2
12 # of the License, or (at your option) any later version.
13 #
14 # This program is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 # GNU General Public License for more details.
18 #
19 # You should have received a copy of the GNU General Public License
20 # along with this program; if not, write to the Free Software
21 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22 #
23
24 project(Wireshark C CXX)
25
26 cmake_minimum_required(VERSION 2.6)
27 set(CMAKE_BACKWARDS_COMPATIBILITY 2.6)
28
29 # Needs to be set after cmake_minimum_required or cmake_policy(VERSION)
30 # Policy since 2.6.1
31 cmake_policy(SET CMP0008 NEW)
32 # Policy since 2.6.3
33 # Backward compatibility for versions < 2.6.3
34 cmake_policy(SET CMP0011 OLD)
35 # Policy since 2.8.1
36 #cmake_policy(SET CMP0015 NEW)
37 # Policy since 2.8.11
38 if( ${CMAKE_MAJOR_VERSION} GREATER 2 OR ${CMAKE_MINOR_VERSION} GREATER 8 OR
39         (${CMAKE_MINOR_VERSION} EQUAL 8 AND ${CMAKE_PATCH_VERSION} GREATER 10) )
40         # Don't: Automatically link Qt executable to qtmain target on Windows
41         cmake_policy(SET CMP0020 OLD)
42 endif()
43
44 # This cannot be implemented via option(...)
45 if( NOT CMAKE_BUILD_TYPE )
46         set( CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
47                 "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
48                 FORCE)
49 endif()
50 message(STATUS "Configuration types: ${CMAKE_CONFIGURATION_TYPES}")
51 message(STATUS "${CMAKE_BUILD_TYPE}: ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
52
53 # set(PROJECT_MAJOR_VERSION 1)
54 # set(PROJECT_MINOR_VERSION 9)
55 # set(PROJECT_PATCH_VERSION 0)
56 # set(PROJECT_VERSION_EXTENSION "-rc5")
57 # If not set, copy over Wireshark version from configure.ac
58 if(NOT PROJECT_MAJOR_VERSION)
59         file(STRINGS
60                 ${CMAKE_SOURCE_DIR}/configure.ac
61                 PROJECT_MAJOR_VERSION_TMP
62                 REGEX "^m4_define\\(\\[?version_major\\]?, *\\[?[0-9]+\\]?\\)"
63         )
64         file(STRINGS
65                 ${CMAKE_SOURCE_DIR}/configure.ac
66                 PROJECT_MINOR_VERSION_TMP
67                 REGEX "^m4_define\\(\\[?version_minor\\]?, *\\[?[0-9]+\\]?\\)"
68         )
69         file(STRINGS
70                 ${CMAKE_SOURCE_DIR}/configure.ac
71                 PROJECT_PATCH_VERSION_TMP
72                 REGEX "^m4_define\\(\\[?version_micro\\]?, *\\[?[0-9]+\\]?\\)"
73         )
74         # XXX pull VERSION_EXTENSION out of configure.ac ?
75
76         string(REGEX REPLACE "m4_define\\(\\[?version_major\\]?, *\\[?([0-9]+)\\]?\\)"
77                 "\\1"
78                 PROJECT_MAJOR_VERSION
79                 ${PROJECT_MAJOR_VERSION_TMP}
80         )
81         string(REGEX REPLACE "m4_define\\(\\[?version_minor\\]?, *\\[?([0-9]+)\\]?\\)"
82                 "\\1"
83                 PROJECT_MINOR_VERSION
84                 ${PROJECT_MINOR_VERSION_TMP}
85         )
86         string(REGEX REPLACE "m4_define\\(\\[?version_micro\\]?, *\\[?([0-9]+)\\]?\\)"
87                 "\\1"
88                 PROJECT_PATCH_VERSION
89                 ${PROJECT_PATCH_VERSION_TMP}
90         )
91 endif()
92
93
94 if(PROJECT_VERSION_EXTENSION)
95         set(PROJECT_VERSION ${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_PATCH_VERSION}${PROJECT_VERSION_EXTENSION})
96 else()
97         set(PROJECT_VERSION ${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_PATCH_VERSION})
98 endif()
99
100 message(STATUS "V: ${PROJECT_VERSION}, MaV: ${PROJECT_MAJOR_VERSION}, MiV: ${PROJECT_MINOR_VERSION}, PL: ${PROJECT_PATCH_VERSION}, EV: ${PROJECT_VERSION_EXTENSION}.")
101
102 #Where to find local cmake scripts
103 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
104 include(UseLemon)
105 include(UseMakeDissectorReg)
106 include(UseMakeTapReg)
107 include(UseAsn2Wrs)
108
109 # Under linux the release mode (CMAKE_BUILD_TYPE=release) defines NDEBUG
110
111 # Enable with: "make VERBOSE=1"
112 set(CMAKE_VERBOSE_MAKEFILE OFF)
113
114 #Defines CMAKE_INSTALL_BINDIR, CMAKE_INSTALL_DATADIR, etc ...
115 include(CMakeInstallDirs)
116
117 include_directories(
118         ${CMAKE_BINARY_DIR}
119         ${CMAKE_SOURCE_DIR}
120         ${CMAKE_SOURCE_DIR}/epan
121         ${CMAKE_SOURCE_DIR}/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(WTAP_PLUGIN_SOURCES
765         epan/plugins.c
766 )
767
768 set(SHARK_COMMON_CAPTURE_SRC
769         capture_ifinfo.c
770         capture_ui_utils.c
771 )
772
773 set(WIRESHARK_COMMON_SRC
774         ${PLATFORM_CAPTURE_SRC}
775         capture-pcap-util.c
776         cfile.c
777         cfutils.c
778         clopts_common.c
779         frame_tvbuff.c
780         svnversion.h
781         sync_pipe_write.c
782         version_info.c
783 )
784
785 set(TSHARK_TAP_SRC
786         ui/cli/tap-afpstat.c
787         ui/cli/tap-ansi_astat.c
788         ui/cli/tap-bootpstat.c
789         ui/cli/tap-camelcounter.c
790         ui/cli/tap-camelsrt.c
791         ui/cli/tap-comparestat.c
792         ui/cli/tap-dcerpcstat.c
793         ui/cli/tap-diameter-avp.c
794         ui/cli/tap-expert.c
795         ui/cli/tap-follow.c
796         ui/cli/tap-funnel.c
797         ui/cli/tap-gsm_astat.c
798         ui/cli/tap-h225counter.c
799         ui/cli/tap-h225rassrt.c
800         ui/cli/tap-hosts.c
801         ui/cli/tap-httpstat.c
802         ui/cli/tap-icmpstat.c
803         ui/cli/tap-icmpv6stat.c
804         ui/cli/tap-iostat.c
805         ui/cli/tap-iousers.c
806         ui/cli/tap-macltestat.c
807         ui/cli/tap-mgcpstat.c
808         ui/cli/tap-megacostat.c
809         ui/cli/tap-protocolinfo.c
810         ui/cli/tap-protohierstat.c
811         ui/cli/tap-radiusstat.c
812         ui/cli/tap-rlcltestat.c
813         ui/cli/tap-rpcstat.c
814         ui/cli/tap-rpcprogs.c
815         ui/cli/tap-rtp.c
816         ui/cli/tap-rtspstat.c
817         ui/cli/tap-scsistat.c
818         ui/cli/tap-sctpchunkstat.c
819         ui/cli/tap-sipstat.c
820         ui/cli/tap-smbsids.c
821         ui/cli/tap-smbstat.c
822         ui/cli/tap-stats_tree.c
823         ui/cli/tap-sv.c
824         ui/cli/tap-wspstat.c
825 )
826
827 set(INSTALL_DIRS
828         diameter
829         dtds
830         help
831         radius
832         tpncp
833         wimaxasncp
834 )
835
836 set(INSTALL_FILES
837         ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
838         COPYING
839         ${CMAKE_BINARY_DIR}/capinfos.html
840         cfilters
841         colorfilters
842         dfilters
843         ${CMAKE_BINARY_DIR}/dftest.html
844         ${CMAKE_BINARY_DIR}/dumpcap.html
845         ${CMAKE_BINARY_DIR}/editcap.html
846         ${CMAKE_BINARY_DIR}/asn2deb.html
847         ${CMAKE_BINARY_DIR}/idl2deb.html
848         ${CMAKE_BINARY_DIR}/idl2wrs.html
849         ipmap.html
850         manuf
851         ${CMAKE_BINARY_DIR}/mergecap.html
852         pdml2html.xsl
853         ${CMAKE_BINARY_DIR}/randpkt.html
854         ${CMAKE_BINARY_DIR}/rawshark.html
855         ${CMAKE_BINARY_DIR}/reordercap.html
856         services
857         smi_modules
858         ${CMAKE_BINARY_DIR}/text2pcap.html
859         ${CMAKE_BINARY_DIR}/tshark.html
860         ${CMAKE_BINARY_DIR}/wireshark-filter.html
861         ${CMAKE_BINARY_DIR}/wireshark.html
862         docbook/ws.css
863 )
864
865 set(LIBEPAN_LIBS
866 #               @NSL_LIBS@      # -lnsl
867 #               @SOCKET_LIBS@   # -lsocket
868 #               @SSL_LIBS@      # -lcrypto
869                 epan
870 #               $(plugin_ldadd) # in case of static
871                 ${AIRPCAP_LIBRARIES}
872                 ${PCAP_LIBRARIES}
873                 ${CARES_LIBRARIES}
874                 ${ADNS_LIBRARIES}
875                 ${KERBEROS_LIBRARIES}
876                 ${LUA_LIBRARIES}
877                 ${PYTHON_LIBRARIES}
878                 ${GEOIP_LIBRARIES}
879                 ${GCRYPT_LIBRARIES}
880                 ${GNUTLS_LIBRARIES}
881                 ${SMI_LIBRARIES}
882                 ${ZLIB_LIBRARIES}
883                 ${M_LIBRARIES}
884 )
885
886 if( (BUILD_wireshark AND GTK_FOUND) OR (BUILD_qtshark AND QT_FOUND) )
887         set(wireshark_FILES
888                 airpcap_loader.c
889                 capture.c
890                 capture_info.c
891                 capture_opts.c
892                 capture_sync.c
893                 color_filters.c
894                 file.c
895                 fileset.c
896                 filters.c
897                 iface_monitor.c
898                 proto_hier_stats.c
899                 summary.c
900                 ws80211_utils.c
901                 ${SHARK_COMMON_CAPTURE_SRC}
902                 ${WIRESHARK_COMMON_SRC}
903                 ${PLATFORM_UI_SRC}
904         )
905 endif()
906
907 if(BUILD_wireshark AND GTK_FOUND)
908         set(wireshark_LIBS
909                 gtkui
910                 ui
911                 ${GTK2_LIBRARIES}
912                 ${GTK3_LIBRARIES}
913                 ${GTHREAD2_LIBRARIES}
914                 codecs
915                 ${PORTAUDIO_LIBRARIES}
916                 ${LIBEPAN_LIBS}
917                 ${APPLE_APPLICATION_SERVICES_LIBRARY}
918                 ${APPLE_CORE_SERVICES_LIBRARY}
919                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
920                 ${NL_LIBRARIES}
921                 ${WIN_COMCTL32_LIBRARY}
922         )
923         # qtshark and wireshark share wireshark_FILES
924
925         add_executable(wireshark ${wireshark_FILES})
926         add_dependencies(wireshark svnversion)
927         set_target_properties(wireshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
928         set_target_properties(wireshark PROPERTIES FOLDER "Executables")
929         target_link_libraries(wireshark ${wireshark_LIBS})
930         install(TARGETS wireshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
931 endif()
932
933 if(BUILD_qtshark AND QT_FOUND)
934         set(qtshark_LIBS
935                 qtui
936                 ui
937                 ${QT_LIBRARIES}
938                 ${GTHREAD2_LIBRARIES}
939                 codecs
940                 ${LIBEPAN_LIBS}
941                 ${APPLE_APPLICATION_SERVICES_LIBRARY}
942                 ${APPLE_CORE_FOUNDATION_LIBRARY}
943                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
944                 ${NL_LIBRARIES}
945         )
946         # qtshark and wireshark share wireshark_FILES
947
948         add_executable(qtshark ${wireshark_FILES})
949         add_dependencies(qtshark svnversion)
950         set_target_properties(qtshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
951         set_target_properties(qtshark PROPERTIES FOLDER "Executables")
952         target_link_libraries(qtshark ${qtshark_LIBS})
953         install(TARGETS qtshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
954 endif()
955
956 register_tap_files(tshark-tap-register.c
957                 tshark-taps
958         ${TSHARK_TAP_SRC}
959 )
960
961 if(BUILD_tshark)
962         set(tshark_LIBS
963                 ui
964                 ${LIBEPAN_LIBS}
965                 ${APPLE_CORE_FOUNDATION_LIBRARY}
966                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
967         )
968         set(tshark_FILES
969                 capture_opts.c
970                 capture_sync.c
971                 tshark-tap-register.c
972                 tshark.c
973                 ${TSHARK_TAP_SRC}
974                 ${SHARK_COMMON_CAPTURE_SRC}
975                 ${WIRESHARK_COMMON_SRC}
976         )
977         add_executable(tshark ${tshark_FILES})
978         add_dependencies(tshark svnversion)
979         set_target_properties(tshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
980         set_target_properties(tshark PROPERTIES FOLDER "Executables")
981         target_link_libraries(tshark ${tshark_LIBS})
982         install(TARGETS tshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
983 endif()
984
985 if(BUILD_rawshark AND PCAP_FOUND)
986         set(rawshark_LIBS
987                 ${LIBEPAN_LIBS}
988                 ${APPLE_CORE_FOUNDATION_LIBRARY}
989                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
990         )
991         set(rawshark_FILES
992                 ${WIRESHARK_COMMON_SRC}
993                 rawshark.c
994                 ui/util.c
995         )
996         add_executable(rawshark ${rawshark_FILES})
997         add_dependencies(rawshark svnversion)
998         set_target_properties(rawshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
999         set_target_properties(rawshark PROPERTIES FOLDER "Executables")
1000         target_link_libraries(rawshark ${rawshark_LIBS})
1001         install(TARGETS rawshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1002 endif()
1003
1004 if(BUILD_dftest)
1005         set(dftest_LIBS
1006                 ${LIBEPAN_LIBS}
1007         )
1008         set(dftest_FILES
1009                 dftest.c
1010                 ui/util.c
1011         )
1012         add_executable(dftest ${dftest_FILES})
1013         set_target_properties(dftest PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1014         set_target_properties(dftest PROPERTIES FOLDER "Executables")
1015         target_link_libraries(dftest ${dftest_LIBS})
1016         install(TARGETS dftest RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1017 endif()
1018
1019 if(BUILD_randpkt)
1020         set(randpkt_LIBS
1021                 wiretap
1022                 wsutil
1023                 ${M_LIBRARIES}
1024                 ${PCAP_LIBRARIES}
1025 #               @SOCKET_LIBS@
1026 #               @NSL_LIBS@
1027                 ${CARES_LIBRARIES}
1028                 ${ADNS_LIBRARIES}
1029                 ${ZLIB_LIBRARIES}
1030         )
1031         set(randpkt_FILES
1032                 randpkt.c
1033         )
1034         add_executable(randpkt ${randpkt_FILES})
1035         set_target_properties(randpkt PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1036         set_target_properties(randpkt PROPERTIES FOLDER "Executables")
1037         target_link_libraries(randpkt ${randpkt_LIBS})
1038         install(TARGETS randpkt RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1039 endif()
1040
1041 if(BUILD_text2pcap)
1042         set(text2pcap_LIBS
1043                 wsutil
1044                 ${M_LIBRARIES}
1045                 ${ZLIB_LIBRARIES}
1046         )
1047         set(text2pcap_CLEAN_FILES
1048                 text2pcap.c
1049                 pcapio.c
1050         )
1051         set(text2pcap_FILES
1052                 ${text2pcap_CLEAN_FILES}
1053         )
1054         add_lex_files(text2pcap_FILES
1055                 text2pcap-scanner.l
1056         )
1057         add_executable(text2pcap ${text2pcap_FILES})
1058         add_dependencies(text2pcap svnversion)
1059         set_target_properties(text2pcap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1060         set_target_properties(text2pcap PROPERTIES FOLDER "Executables")
1061         target_link_libraries(text2pcap ${text2pcap_LIBS})
1062         install(TARGETS text2pcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1063 endif()
1064
1065 if(BUILD_mergecap)
1066         set(mergecap_LIBS
1067                 wiretap
1068                 ${ZLIB_LIBRARIES}
1069                 ${CMAKE_DL_LIBS}
1070         )
1071         set(mergecap_FILES
1072                 mergecap.c
1073                 svnversion.h
1074                 ${WTAP_PLUGIN_SOURCES}
1075         )
1076         add_executable(mergecap ${mergecap_FILES})
1077         add_dependencies(mergecap svnversion)
1078         set_target_properties(mergecap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1079         set_target_properties(mergecap PROPERTIES FOLDER "Executables")
1080         target_link_libraries(mergecap ${mergecap_LIBS})
1081         install(TARGETS mergecap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1082 endif()
1083
1084 if(BUILD_reordercap)
1085         set(reordercap_LIBS
1086                 wiretap
1087                 ${ZLIB_LIBRARIES}
1088                 ${CMAKE_DL_LIBS}
1089         )
1090         set(reordercap_FILES
1091                 reordercap.c
1092                 svnversion.h
1093                 ${WTAP_PLUGIN_SOURCES}
1094         )
1095         add_executable(reordercap ${reordercap_FILES})
1096         add_dependencies(reordercap svnversion)
1097         set_target_properties(reordercap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1098         set_target_properties(reordercap PROPERTIES FOLDER "Executables")
1099         target_link_libraries(reordercap ${reordercap_LIBS})
1100         install(TARGETS reordercap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1101 endif()
1102
1103 if(BUILD_capinfos)
1104         set(capinfos_LIBS
1105                 wiretap
1106                 wsutil
1107                 ${ZLIB_LIBRARIES}
1108                 ${GCRYPT_LIBRARIES}
1109                 ${CMAKE_DL_LIBS}
1110         )
1111         set(capinfos_FILES
1112                 capinfos.c
1113                 ${WTAP_PLUGIN_SOURCES}
1114         )
1115         add_executable(capinfos ${capinfos_FILES})
1116         add_dependencies(capinfos svnversion)
1117         set_target_properties(capinfos PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1118         set_target_properties(capinfos PROPERTIES FOLDER "Executables")
1119         target_link_libraries(capinfos ${capinfos_LIBS})
1120         install(TARGETS capinfos RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1121 endif()
1122
1123 if(BUILD_editcap)
1124         set(editcap_LIBS
1125                 wiretap
1126                 ${ZLIB_LIBRARIES}
1127                 ${CMAKE_DL_LIBS}
1128         )
1129         set(editcap_FILES
1130                 editcap.c
1131                 ${WTAP_PLUGIN_SOURCES}
1132         )
1133         add_executable(editcap ${editcap_FILES})
1134         add_dependencies(editcap svnversion)
1135         set_target_properties(editcap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1136         set_target_properties(editcap PROPERTIES FOLDER "Executables")
1137         target_link_libraries(editcap ${editcap_LIBS})
1138         install(TARGETS editcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1139 endif()
1140
1141 if(BUILD_dumpcap AND PCAP_FOUND)
1142         set(dumpcap_LIBS
1143                 wsutil
1144                 ${PCAP_LIBRARIES}
1145                 ${CAP_LIBRARIES}
1146 #               @SOCKET_LIBS@
1147 #               @NSL_LIBS@
1148                 ${GLIB2_LIBRARIES}
1149                 ${GTHREAD2_LIBRARIES}
1150                 ${ZLIB_LIBRARIES}
1151                 ${APPLE_CORE_FOUNDATION_LIBRARY}
1152                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
1153                 ${NL_LIBRARIES}
1154         )
1155         set(dumpcap_FILES
1156                 svnversion.h
1157                 capture_opts.c
1158                 capture-pcap-util.c
1159                 capture_stop_conditions.c
1160                 cfutils.c
1161                 clopts_common.c
1162                 conditions.c
1163                 dumpcap.c
1164                 pcapio.c
1165                 ringbuffer.c
1166                 sync_pipe_write.c
1167                 version_info.c
1168                 ws80211_utils.c
1169                 ${PLATFORM_CAPTURE_SRC}
1170         )
1171         add_executable(dumpcap ${dumpcap_FILES})
1172         add_dependencies(dumpcap svnversion)
1173         set_target_properties(dumpcap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1174         set_target_properties(dumpcap PROPERTIES FOLDER "Executables")
1175         target_link_libraries(dumpcap ${dumpcap_LIBS})
1176         install(TARGETS dumpcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1177 endif()
1178
1179 ADD_CUSTOM_COMMAND(
1180         OUTPUT  ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1181         COMMAND ${PERL_EXECUTABLE}
1182                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1183                 ${CMAKE_SOURCE_DIR}/doc/make-authors-short.pl
1184                 < ${CMAKE_SOURCE_DIR}/AUTHORS
1185                 > ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1186         DEPENDS
1187                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1188                 ${CMAKE_SOURCE_DIR}/doc/make-authors-short.pl
1189                 ${CMAKE_SOURCE_DIR}/AUTHORS
1190 )
1191
1192 ADD_CUSTOM_COMMAND(
1193         OUTPUT  ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1194                 ${CMAKE_BINARY_DIR}/wireshark.pod
1195         COMMAND ${PERL_EXECUTABLE}
1196                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1197                 ${CMAKE_SOURCE_DIR}/doc/make-authors-format.pl
1198                 < ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1199                 > ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1200         COMMAND cat
1201                 ${CMAKE_SOURCE_DIR}/doc/wireshark.pod.template
1202                 ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1203                 > ${CMAKE_BINARY_DIR}/wireshark.pod
1204         DEPENDS
1205                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1206                 ${CMAKE_SOURCE_DIR}/doc/make-authors-format.pl
1207                 ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1208                 ${CMAKE_SOURCE_DIR}/doc/wireshark.pod.template
1209 )
1210
1211 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/capinfos 1 )
1212 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/dftest 1 )
1213 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/dumpcap 1 )
1214 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/editcap 1 )
1215 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/asn2deb 1 )
1216 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/idl2deb 1 )
1217 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/idl2wrs 1 )
1218 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/mergecap 1 )
1219 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/randpkt 1 )
1220 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/rawshark 1 )
1221 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/reordercap 1 )
1222 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/text2pcap 1 )
1223 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/tshark 1 )
1224 pod2manhtml( ${CMAKE_BINARY_DIR}/wireshark 1 )
1225 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/wireshark-filter 4 )
1226
1227 add_custom_target(
1228         auxiliary ALL
1229         DEPENDS
1230                 AUTHORS-SHORT
1231                 capinfos.html
1232                 dftest.html
1233                 dumpcap.html
1234                 editcap.html
1235                 asn2deb.html
1236                 idl2deb.html
1237                 idl2wrs.html
1238                 mergecap.html
1239                 randpkt.html
1240                 rawshark.html
1241                 reordercap.html
1242                 text2pcap.html
1243                 tshark.html
1244                 wireshark.html
1245                 wireshark-filter.html
1246 )
1247 set_target_properties(auxiliary PROPERTIES FOLDER "Docs")
1248
1249 set(MAN1_FILES
1250         ${CMAKE_BINARY_DIR}/capinfos.1
1251         ${CMAKE_BINARY_DIR}/dftest.1
1252         ${CMAKE_BINARY_DIR}/dumpcap.1
1253         ${CMAKE_BINARY_DIR}/editcap.1
1254         ${CMAKE_BINARY_DIR}/idl2wrs.1
1255         ${CMAKE_BINARY_DIR}/mergecap.1
1256         ${CMAKE_BINARY_DIR}/randpkt.1
1257         ${CMAKE_BINARY_DIR}/rawshark.1
1258         ${CMAKE_BINARY_DIR}/reordercap.1
1259         ${CMAKE_BINARY_DIR}/text2pcap.1
1260         ${CMAKE_BINARY_DIR}/tshark.1
1261         ${CMAKE_BINARY_DIR}/wireshark.1
1262 )
1263
1264 set(MAN4_FILES
1265         ${CMAKE_BINARY_DIR}/wireshark-filter.4
1266 )
1267
1268 set(CLEAN_FILES
1269         ${wireshark_FILES}
1270         ${tshark_FILES}
1271         ${rawshark_FILES}
1272         ${dftest_FILES}
1273         ${randpkt_FILES}
1274         ${text2pcap_CLEAN_FILES}
1275         ${mergecap_FILES}
1276         ${capinfos_FILES}
1277         ${editcap_FILES}
1278         ${dumpcap_FILES}
1279 )
1280
1281 if (WERROR)
1282         set_source_files_properties(
1283                 ${CLEAN_FILES}
1284                 PROPERTIES
1285                 COMPILE_FLAGS -Werror
1286         )
1287 endif()
1288
1289 install(
1290         FILES
1291                 ${INSTALL_FILES}
1292         DESTINATION
1293                 ${CMAKE_INSTALL_DATADIR}/${CPACK_PACKAGE_NAME}
1294 )
1295
1296 install(
1297         FILES
1298                 ${MAN1_FILES}
1299         DESTINATION
1300                 ${CMAKE_INSTALL_MANDIR}/man1
1301 )
1302
1303 install(
1304         FILES
1305                 ${MAN4_FILES}
1306         DESTINATION
1307                 ${CMAKE_INSTALL_MANDIR}/man4
1308 )
1309
1310 install(
1311         DIRECTORY
1312                 ${INSTALL_DIRS}
1313         DIRECTORY_PERMISSIONS
1314                 OWNER_EXECUTE OWNER_WRITE OWNER_READ
1315                 GROUP_EXECUTE GROUP_READ
1316                 WORLD_EXECUTE WORLD_READ
1317         DESTINATION
1318                 ${CMAKE_INSTALL_DATADIR}/${CPACK_PACKAGE_NAME}
1319         PATTERN ".svn" EXCLUDE
1320         PATTERN "Makefile.*" EXCLUDE
1321         PATTERN "faq.py" EXCLUDE
1322 )
1323
1324 include( UseCheckAPI )
1325 CHECKAPI(
1326                   ${TSHARK_TAP_SRC}
1327                   ${wireshark_FILES}
1328 )
1329
1330 if(DOC_DIR)
1331         message(STATUS "Docdir install: ${DOC_DIR}")
1332         INSTALL(
1333                 DIRECTORY
1334                         ${CMAKE_BINARY_DIR}/docbook/
1335                 DIRECTORY_PERMISSIONS
1336                         OWNER_EXECUTE OWNER_WRITE OWNER_READ
1337                         GROUP_EXECUTE GROUP_READ
1338                         WORLD_EXECUTE WORLD_READ
1339                 DESTINATION
1340                         ${DOC_DIR}/guides
1341                 FILES_MATCHING
1342                 PATTERN "*.pdf"
1343         )
1344 endif()