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