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