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