tshark: endpoints statistics are not supported for now, do not list them in -z
[metze/wireshark/wip.git] / CMakeLists.txt
1 # CMakeLists.txt
2 #
3 # Wireshark - Network traffic analyzer
4 # By Gerald Combs <gerald@wireshark.org>
5 # Copyright 1998 Gerald Combs
6 #
7 # This program is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU General Public License
9 # as published by the Free Software Foundation; either version 2
10 # of the License, or (at your option) any later version.
11 #
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #
21
22 project(Wireshark C CXX)
23
24 cmake_minimum_required(VERSION 2.8.3)
25
26 # Needs to be set after cmake_minimum_required or cmake_policy(VERSION)
27 # Policy since 2.6.1
28 cmake_policy(SET CMP0008 NEW)
29 # Policy since 2.6.3
30 # Backward compatibility for versions < 2.6.3
31 cmake_policy(SET CMP0011 OLD)
32 # Policy since 2.8.1
33 cmake_policy(SET CMP0015 NEW)
34
35 #Where to find local cmake scripts
36 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
37
38 include(UseCustomIncludes)
39 ADD_CUSTOM_CMAKE_INCLUDE()
40
41 # This cannot be implemented via option(...)
42 if( NOT CMAKE_BUILD_TYPE )
43         set( CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
44                 "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
45                 FORCE)
46 endif()
47 message(STATUS "Configuration types: ${CMAKE_CONFIGURATION_TYPES}")
48 message(STATUS "${CMAKE_BUILD_TYPE}: ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
49 #Where to put executables and libraries in the build tree
50 if(NOT ARCHIVE_OUTPUT_PATH)
51         set(ARCHIVE_OUTPUT_PATH ${Wireshark_BINARY_DIR}/run CACHE INTERNAL
52                    "Single output directory for building all archives.")
53 endif()
54 if(NOT EXECUTABLE_OUTPUT_PATH)
55         set(EXECUTABLE_OUTPUT_PATH ${Wireshark_BINARY_DIR}/run CACHE INTERNAL
56                    "Single output directory for building all executables.")
57         file(MAKE_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}/extcap)
58 endif()
59 if(NOT LIBRARY_OUTPUT_PATH)
60         set(LIBRARY_OUTPUT_PATH ${Wireshark_BINARY_DIR}/run CACHE INTERNAL
61                    "Single output directory for building all libraries.")
62 endif()
63 # Under linux the release mode (CMAKE_BUILD_TYPE=release) defines NDEBUG
64 #Defines CMAKE_INSTALL_BINDIR, CMAKE_INSTALL_DATADIR, etc ...
65 include(CMakeInstallDirs)
66
67 # set(PROJECT_MAJOR_VERSION 1)
68 # set(PROJECT_MINOR_VERSION 9)
69 # set(PROJECT_PATCH_VERSION 0)
70 # set(PROJECT_VERSION_EXTENSION "-rc5")
71 # If not set, copy over Wireshark version from configure.ac
72 if(NOT PROJECT_MAJOR_VERSION)
73         file(STRINGS
74                 ${CMAKE_SOURCE_DIR}/configure.ac
75                 PROJECT_MAJOR_VERSION_TMP
76                 REGEX "^m4_define\\(\\[?version_major\\]?, *\\[?[0-9]+\\]?\\)"
77         )
78         file(STRINGS
79                 ${CMAKE_SOURCE_DIR}/configure.ac
80                 PROJECT_MINOR_VERSION_TMP
81                 REGEX "^m4_define\\(\\[?version_minor\\]?, *\\[?[0-9]+\\]?\\)"
82         )
83         file(STRINGS
84                 ${CMAKE_SOURCE_DIR}/configure.ac
85                 PROJECT_PATCH_VERSION_TMP
86                 REGEX "^m4_define\\(\\[?version_micro\\]?, *\\[?[0-9]+\\]?\\)"
87         )
88         # XXX pull VERSION_EXTENSION out of configure.ac ?
89
90         string(REGEX REPLACE "m4_define\\(\\[?version_major\\]?, *\\[?([0-9]+)\\]?\\)"
91                 "\\1"
92                 PROJECT_MAJOR_VERSION
93                 ${PROJECT_MAJOR_VERSION_TMP}
94         )
95         string(REGEX REPLACE "m4_define\\(\\[?version_minor\\]?, *\\[?([0-9]+)\\]?\\)"
96                 "\\1"
97                 PROJECT_MINOR_VERSION
98                 ${PROJECT_MINOR_VERSION_TMP}
99         )
100         string(REGEX REPLACE "m4_define\\(\\[?version_micro\\]?, *\\[?([0-9]+)\\]?\\)"
101                 "\\1"
102                 PROJECT_PATCH_VERSION
103                 ${PROJECT_PATCH_VERSION_TMP}
104         )
105 endif()
106
107 if(PROJECT_VERSION_EXTENSION)
108         set(PROJECT_VERSION ${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_PATCH_VERSION}${PROJECT_VERSION_EXTENSION})
109 else()
110         set(PROJECT_VERSION ${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_PATCH_VERSION})
111 endif()
112
113 message(STATUS "V: ${PROJECT_VERSION}, MaV: ${PROJECT_MAJOR_VERSION}, MiV: ${PROJECT_MINOR_VERSION}, PL: ${PROJECT_PATCH_VERSION}, EV: ${PROJECT_VERSION_EXTENSION}.")
114
115 include(UseLemon)
116 include(UseMakeDissectorReg)
117 include(UseMakeTapReg)
118 include(UseAsn2Wrs)
119
120 include_directories(
121         ${CMAKE_BINARY_DIR}
122         ${CMAKE_SOURCE_DIR}
123         ${CMAKE_SOURCE_DIR}/epan
124         ${CMAKE_SOURCE_DIR}/tools/lemon
125         ${CMAKE_SOURCE_DIR}/wiretap
126 )
127
128 include( CMakeOptions.txt )
129 if( DUMPCAP_INSTALL_OPTION STREQUAL "suid" )
130         set( DUMPCAP_SETUID "SETUID" )
131 else()
132         set( DUMPCAP_SETUID )
133 endif()
134 if( NOT CMAKE_SYSTEM_NAME STREQUAL "Linux" AND
135         DUMPCAP_INSTALL_OPTION STREQUAL "capabilities" )
136         message( WARNING "Capabilities are only supported on Linux" )
137         set( DUMPCAP_INSTALL_OPTION )
138 endif()
139
140 if( CMAKE_C_COMPILER_ID MATCHES "MSVC")
141         if (MSVC10)
142                 set(MSC_VER_REQUIRED 1600)
143         elseif(MSVC11)
144                 set(MSC_VER_REQUIRED 1700)
145         elseif(MSVC12)
146                 set(MSC_VER_REQUIRED 1800)
147         else()
148                 message(FATAL_ERROR "You are using an unsupported version of MSVC")
149         endif()
150         set(LOCAL_CFLAGS
151                 /Zi
152                 /W3
153                 /MDd
154                 /DWIN32_LEAN_AND_MEAN
155                 "/DMSC_VER_REQUIRED=${MSC_VER_REQUIRED}"
156                 /D_CRT_SECURE_NO_DEPRECATE
157                 /D_CRT_NONSTDC_NO_DEPRECATE
158                 /MP
159                 # NOMINMAX keeps windows.h from defining "min" and "max" via windef.h.
160                 # This avoids conflicts with the C++ standard library.
161                 /DNOMINMAX
162                 # -DPSAPI_VERSION=1                 Programs that must run on earlier versions of Windows as well as Windows 7 and later
163                 #                                   versions should always call this function as GetProcessMemoryInfo. To ensure correct
164                 #                                   resolution of symbols, add Psapi.lib to the TARGETLIBS macro and compile the program
165                 #                                   with -DPSAPI_VERSION=1.To use run-time dynamic linking, load Psapi.dll.
166                 #                                   http://msdn.microsoft.com/en-us/library/windows/desktop/ms683219(v=vs.85).aspx
167                 # -DBUILD_WINDOWS                   Starting from VS2013, GetVersionEx is deprecated and we are recommended to use
168                 #                                   VerifyVersionInfo instead
169                 #                                   http://msdn.microsoft.com/en-us/library/windows/desktop/ms724429(v=vs.85).aspx
170                 #                                   http://msdn.microsoft.com/en-us/library/windows/desktop/ms725491(v=vs.85).aspx
171                 #                                   To continue to use GetVersionEx, we can define BUILD_WINDOWS
172                 # -D_ALLOW_KEYWORD_MACROS           For VS2012 onwards the, C++ STL does not permit macro redefinitions of keywords
173                 #                                   (see http://msdn.microsoft.com/en-us/library/bb531344(v=vs.110).aspx)
174                 #                                   This definition prevents the complaint about the redefinition of inline by WinPCap
175                 #                                   in pcap-stdinc.h when compiling CPP files, e.g. the Qt UI
176                 /DPSAPI_VERSION=1
177                 /DBUILD_WINDOWS
178                 /D_ALLOW_KEYWORD_MACROS
179         )
180
181         if(MSVC12)
182                 # /Zo                               Enhanced debugging of optimised codem for VS2013 Update 3 and beyond,
183                 #                                   Assume all VS2013 builds are at least Update 3.
184                 #                                   See http://msdn.microsoft.com/en-us/library/dn785163.aspx
185                 set(LOCAL_CFLAGS ${LOCAL_CFLAGS} "/Zo")
186         endif()
187
188         if(NOT WIN64)
189                 set(LOCAL_CFLAGS ${LOCAL_CFLAGS} "/D_BIND_TO_CURRENT_CRT_VERSION=1")
190         endif()
191
192         # Additional compiler warnings to be treated as "Level 3"
193         #  when compiling Wireshark sources. (Selected from "level 4" warnings).
194         ## 4295: array is too small to include a terminating null character
195         ## 4189: local variable is initialized but not referenced
196         set(WARNINGS_CFLAGS "/w34295 /w34189")
197
198         # FIXME: WINPCAP_VERSION cannot be determined from source or executable.
199         set(WINPCAP_VERSION "unknown")
200         set(WIRESHARK_COMMON_FLAGS
201                 "/DWINPCAP_VERSION=${WINPCAP_VERSION}"
202                 ${LOCAL_CFLAGS}
203                 ${WARNINGS_CFLAGS}
204         )
205
206         # Set in Makefile.nmake
207         set(WS_LINK_FLAGS "/LARGEADDRESSAWARE /MANIFEST:NO /INCREMENTAL:NO /RELEASE")
208
209 else()
210         if(CMAKE_OSX_DEPLOYMENT_TARGET)
211                 if(APPLE)
212                         if(${CMAKE_OSX_DEPLOYMENT_TARGET} STREQUAL "10.0")
213                                 message(FATAL_ERROR "We don't support building for OS X 10.0")
214                         elseif(${CMAKE_OSX_DEPLOYMENT_TARGET} STREQUAL "10.1")
215                                 message(FATAL_ERROR "We don't support building for OS X 10.1")
216                         elseif(${CMAKE_OSX_DEPLOYMENT_TARGET} STREQUAL "10.2")
217                                 message(FATAL_ERROR "We don't support building for OS X 10.2")
218                         elseif(${CMAKE_OSX_DEPLOYMENT_TARGET} STREQUAL "10.4" OR ${CMAKE_OSX_DEPLOYMENT_TARGET} STREQUAL "10.5")
219                                 #
220                                 # Only 32-bit builds are supported.  10.5
221                                 # (and 10.4?) had a bug that causes some BPF
222                                 # functions not to work with 64-bit userland
223                                 # code, so capturing won't work.
224                                 #
225                                 set(CMAKE_C_FLAGS "-m32 ${CMAKE_C_FLAGS}")
226                                 set(CMAKE_CXX_FLAGS "-m32 ${CMAKE_CXX_FLAGS}")
227                                 set(WS_LINK_FLAGS "-m32 ${WS_LINK_FLAGS}")
228                         endif()
229                         message(STATUS "Building for OS X ${CMAKE_OSX_DEPLOYMENT_TARGET}")
230                 else()
231                         message(FATAL_ERROR "CMAKE_OSX_DEPLOYMENT_TARGET only applies when building for OS X")
232                 endif()
233         endif()
234
235         set(WIRESHARK_COMMON_FLAGS
236                 # The following are for C and C++
237                 # -O<X> and -g get set by the CMAKE_BUILD_TYPE
238                 -Wall
239                 -W
240                 -Wextra
241                 -Wendif-labels
242                 -Wpointer-arith
243                 -Warray-bounds
244                 -Wformat-security
245                 -fwrapv
246                 -fno-strict-overflow
247                 -fno-delete-null-pointer-checks
248                 -fsanitize=undefined # compile and runtime checks
249                 # -fsanitize=float-divide-by-zero
250                 # -fsanitize=float-cast-overflow
251                 # -fsanitize=address
252                 # -fno-sanitize-recover # Abort during runtime
253                 -Wvla
254                 -Waddress
255                 -Wattributes
256                 -Wdiv-by-zero
257                 -Wignored-qualifiers
258                 -Wpragmas
259                 -Wno-overlength-strings
260                 -Wwrite-strings
261                 -Wno-long-long
262                 -Wheader-guard
263                 -Wunused-const-variable
264         )
265
266         set(WIRESHARK_C_ONLY_FLAGS
267                 # The following are C only, not C++
268                 -Wc++-compat
269                 -Wdeclaration-after-statement
270                 -Wshadow
271                 -Wno-pointer-sign
272                 -Wold-style-definition
273                 -Wstrict-prototypes
274                 -Wlogical-op
275                 -Wjump-misses-init
276                 # The Qt headers generate a ton of shortening errors on 64-bit systems
277                 # so only enable this for C for now.
278                 -Wshorten-64-to-32
279         )
280
281         set(WIRESHARK_CPP_ONLY_FLAGS
282         )
283
284         set(WIRESHARK_EXTRA_COMPILER_COMMON_FLAGS
285                 # The following are for C and C++
286                 -pedantic
287                 #
288                 # Various code blocks this one.
289                 #
290                 -Woverflow
291                 -fstrict-overflow -Wstrict-overflow=4
292                 #
293                 # Due to various places where APIs we don't control
294                 # require us to cast away constness, we can probably
295                 # never enable this one with -Werror.
296                 #
297                 -Wcast-qual
298                 #
299                 # Some generated ASN.1 dissectors block this one;
300                 # multiple function declarations for the same
301                 # function are being generated.
302                 #
303                 -Wredundant-decls
304                 #
305                 # Some loops are safe, but it's hard to convince the
306                 # compiler of that.
307                 #
308                 -Wunsafe-loop-optimizations
309                 #
310                 # All the registration functions block these for now.
311                 #
312                 -Wmissing-prototypes
313                 -Wmissing-declarations
314                 #
315                 # A bunch of "that might not work on SPARC" code blocks
316                 # this one for now.
317                 #
318                 -Wcast-align
319                 #
320                 # Works only with Clang
321                 #
322                 -Wunreachable-code
323                 #
324                 # Works only with Clang but generates a lot of warnings
325                 # (about glib library not using Doxygen)
326                 #
327                 -Wdocumentation
328         )
329
330         set(WIRESHARK_EXTRA_COMPILER_C_ONLY_FLAGS
331                 # The following are C only, not C++
332                 #
333                 # Due to various places where APIs we don't control
334                 # require us to cast away constness, we can probably
335                 # never enable this one with -Werror.
336                 #
337                 -Wbad-function-cast
338         )
339
340         set(WIRESHARK_EXTRA_COMPILER_CPP_ONLY_FLAGS
341         )
342
343         if(CMAKE_C_COMPILER_ID MATCHES "Clang")
344                 set(WIRESHARK_COMMON_FLAGS ${WIRESHARK_COMMON_FLAGS}
345                         #-fcolor-diagnostics
346                 )
347
348                 # ccache + clang++ can result in "argument unused during
349                 # compilation" warnings.
350                 set(WIRESHARK_CPP_ONLY_FLAGS ${WIRESHARK_CPP_ONLY_FLAGS}
351                         -Qunused-arguments
352                 )
353         else()
354                 set(WIRESHARK_COMMON_FLAGS ${WIRESHARK_COMMON_FLAGS}
355                         -fexcess-precision=fast
356                 )
357
358                 set(WIRESHARK_C_ONLY_FLAGS ${WIRESHARK_C_ONLY_FLAGS}
359                 )
360         endif()
361
362         if(ENABLE_EXTRA_COMPILER_WARNINGS)   # This overrides -Werror
363                 set(WIRESHARK_COMMON_FLAGS ${WIRESHARK_COMMON_FLAGS} ${WIRESHARK_EXTRA_COMPILER_COMMON_FLAGS})
364                 set(WIRESHARK_C_ONLY_FLAGS ${WIRESHARK_C_ONLY_FLAGS} ${WIRESHARK_EXTRA_COMPILER_C_ONLY_FLAGS})
365                 set(WIRESHARK_CPP_ONLY_FLAGS ${WIRESHARK_CPP_ONLY_FLAGS} ${WIRESHARK_EXTRA_COMPILER_CPP_ONLY_FLAGS})
366         endif()
367
368         add_definitions(
369                 -DG_DISABLE_DEPRECATED
370                 -DG_DISABLE_SINGLE_INCLUDES
371         )
372 endif()
373
374 set( C_FLAG_TESTS ${WIRESHARK_COMMON_FLAGS} ${WIRESHARK_C_ONLY_FLAGS} )
375 set( CPP_FLAG_TESTS ${WIRESHARK_COMMON_FLAGS} ${WIRESHARK_CPP_ONLY_FLAGS} )
376
377 # Counterhack to work around some cache magic in CHECK_C_SOURCE_COMPILES
378 include(CheckCCompilerFlag)
379 include(CheckCXXCompilerFlag)
380
381 if(NOT DISABLE_WERROR AND NOT ENABLE_EXTRA_COMPILER_WARNINGS)
382         check_c_compiler_flag(-Werror WERROR)
383 else()
384         set(WERROR FALSE)
385 endif()
386
387 # Sigh: Have to use THIS_FLAG instead of ${F} for some reason
388 foreach(THIS_FLAG ${C_FLAG_TESTS})
389         string( REGEX REPLACE "[^a-zA-Z0-9_]+" "_" F ${THIS_FLAG} )
390         set(${F} ${THIS_FLAG})
391         set(V C_${F}_VALID)
392         message(STATUS "Checking for c-compiler flag: ${THIS_FLAG}")
393         check_c_compiler_flag("${ADDED_CMAKE_C_FLAGS} ${${F}}" ${V})
394         if (${${V}})
395                 set(ADDED_CMAKE_C_FLAGS "${ADDED_CMAKE_C_FLAGS} ${${F}}")
396         endif()
397 endforeach()
398 set(CMAKE_C_FLAGS "${ADDED_CMAKE_C_FLAGS} ${CMAKE_C_FLAGS}")
399
400 foreach(THIS_FLAG ${CPP_FLAG_TESTS})
401         string( REGEX REPLACE "[^a-zA-Z0-9_]+" "_" F ${THIS_FLAG} )
402         set(${F} ${THIS_FLAG})
403         set(V CPP_${F}_VALID)
404         message(STATUS "Checking for c++-compiler flag: ${THIS_FLAG}")
405         check_cxx_compiler_flag("${ADDED_CMAKE_CXX_FLAGS} ${${F}}" ${V})
406         if (${${V}})
407                 set(ADDED_CMAKE_CXX_FLAGS "${ADDED_CMAKE_CXX_FLAGS} ${${F}}")
408         endif()
409 endforeach()
410 set(CMAKE_CXX_FLAGS "${ADDED_CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS}")
411
412 #
413 # XXX - we're assuming MSVC supports the SSE 4.2 intrinsics and
414 # that other C compilers support them iff they support the
415 # -msse4.2 flag.
416 #
417 # Perhaps we should check whether we can compile something
418 # that uses them, instead, and do something else to figure
419 # out what compiler flag, if any, we need to pass to the
420 # compiler to compile code that uses them.
421 #
422 if(CMAKE_C_COMPILER_ID MATCHES "MSVC")
423         set(HAVE_SSE4_2 TRUE)
424 else()
425         message(STATUS "Checking for c-compiler flag: -msse4.2")
426         check_c_compiler_flag(-msse4.2 HAVE_SSE4_2)
427         if(HAVE_SSE4_2)
428                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
429         endif()
430 endif()
431
432 check_c_compiler_flag(-fvisibility=hidden FVHIDDEN)
433 if(FVHIDDEN)
434         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
435 else() # TODO add alternate compiler flags for hiding symbols
436         if( NOT CMAKE_C_COMPILER_ID MATCHES "MSVC")
437                 message(WARNING "Hiding shared library symbols is not supported by the compiler."
438                         " All shared library symbols will be exported.")
439         endif()
440 endif()
441
442 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
443         set (C_UNUSED "__attribute__((unused))" )
444 else()
445         set (C_UNUSED "" )
446 endif()
447
448
449 if(NOT CMAKE_C_COMPILER_ID MATCHES "MSVC")
450         set(WIRESHARK_LD_FLAGS
451                 -Wl,--as-needed
452                 # -flto
453                 # -fwhopr
454                 # -fwhole-program
455         )
456 endif()
457
458 include(CheckCLinkerFlag)
459 set(C 0)
460 # Sigh: Have to use THIS_FLAG instead of ${F} for some reason
461 foreach(THIS_FLAG ${WIRESHARK_LD_FLAGS})
462         set(F WS_LD_FLAG_${C})
463         set(${F} ${THIS_FLAG})
464         set(V WS_LD_FLAG_VALID${C})
465         check_c_linker_flag(${${F}} ${V})
466         if (${${V}})
467                 set(WS_LINK_FLAGS "${WS_LINK_FLAGS} ${${F}}")
468         endif()
469         math(EXPR C "${C} + 1")
470 endforeach()
471
472 if(ENABLE_STATIC)
473         set(LINK_MODE_LIB STATIC)
474         set(LINK_MODE_MODULE STATIC)
475 else()
476         set(LINK_MODE_LIB SHARED)
477         set(LINK_MODE_MODULE MODULE)
478 endif()
479
480 if(APPLE AND EXISTS /usr/local/opt/gettext)
481         # GLib on OS X requires libintl. Homebrew installs gettext (and
482         # libintl) in /usr/local/opt/gettext
483         include_directories(/usr/local/opt/gettext/include)
484         link_directories(/usr/local/opt/gettext/lib)
485 endif()
486
487 # The packagelist is doing some magic:  If we add XXX to the packagelist, we
488 # - may optionally set XXX_OPTIONS to pass to the find_package command
489 # - will call FindXXX.cmake
490 # - return found libraries in XXX_LIBRARIES
491 # - return found include in XXX_INCLUDE_DIRS
492 # - set HAVE_XXX
493
494 #The minimum package list
495 set(PACKAGELIST Gettext M GLIB2 GMODULE2 GTHREAD2 LEX YACC Perl SED SH PythonInterp)
496 set(LEX_REQUIRED TRUE)
497 set(GLIB2_REQUIRED TRUE)
498 set(GLIB2_FIND_REQUIRED TRUE)
499 set(GLIB2_MIN_VERSION 2.14.0)
500 set(GTHREAD2_REQUIRED TRUE)
501 set(PythonInterp_FIND_VERSION 2)
502 set(Python_ADDITIONAL_VERSIONS 3)
503 set(YACC_REQUIRED TRUE)
504 if (NOT WIN32)
505         set(M_REQUIRED TRUE)
506 endif()
507
508 set(PACKAGELIST ${PACKAGELIST} HtmlViewer)
509
510 if(ENABLE_PCAP)
511         set(PACKAGELIST ${PACKAGELIST} PCAP)
512 endif()
513
514 if(ENABLE_AIRPCAP)
515         set(PACKAGELIST ${PACKAGELIST} AIRPCAP)
516 endif()
517
518 # Build the GTK-GUI?
519 if(BUILD_wireshark_gtk)
520         if(ENABLE_GTK3)
521                 set(PACKAGELIST ${PACKAGELIST} GTK3)
522         else()
523                 set(PACKAGELIST ${PACKAGELIST} GTK2)
524                 set(GTK2_OPTIONS COMPONENTS gtk)
525                 set(GTK2_FIND_VERSION 2.12)
526                 set(GTK2_DEBUG false)
527         endif()
528 endif()
529
530 # Build the Qt GUI?
531 if(BUILD_wireshark)
532         if(ENABLE_QT5)
533                 # Untested, may not work if CMAKE_PREFIX_PATH gets overwritten
534                 # somewhere. The if WIN32 in this place is annoying as well.
535                 if( WIN32 )
536                         set( QT5_BASE_PATH "$ENV{QT5_BASE_DIR}" )
537                         set( CMAKE_PREFIX_PATH "${QT5_BASE_PATH}" )
538                         # Used for the creation of setpath.bat
539                         set( QT5_DLL_PATH "${QT5_BASE_PATH}/bin" )
540                         set( WS_ALL_LIBS ${WS_ALL_LIBS} ${QT5_DLL_PATH} )
541                 endif()
542                 set(PACKAGELIST ${PACKAGELIST}
543                         Qt5LinguistTools
544                         Qt5MultimediaWidgets
545                         Qt5PrintSupport
546                         Qt5Widgets
547                 )
548                 if (APPLE)
549                         set(PACKAGELIST ${PACKAGELIST} Qt5MacExtras)
550                 endif()
551                 if( WIN32 )
552                         set(PACKAGELIST ${PACKAGELIST} Qt5WinExtras)
553                 endif()
554                 set(QT_VERSION 5)
555         else()
556                 set(PACKAGELIST ${PACKAGELIST} Qt4)
557                 # set(Qt4_OPTIONS 4.7.1 REQUIRED QtCore QtGui)
558                 set(QT_VERSION 4)
559         endif()
560 endif()
561
562 # SMI SNMP
563 if(ENABLE_SMI)
564         set(PACKAGELIST ${PACKAGELIST} SMI)
565 endif()
566
567 # GNU crypto
568 if(ENABLE_GCRYPT)
569         set(PACKAGELIST ${PACKAGELIST} GCRYPT)
570 endif()
571
572 # GNU SSL/TLS support
573 if(ENABLE_GNUTLS)
574         set(PACKAGELIST ${PACKAGELIST} GNUTLS)
575 endif()
576
577 # Kerberos
578 if(ENABLE_KERBEROS)
579         set(PACKAGELIST ${PACKAGELIST} KERBEROS)
580 endif()
581
582 # Portable audio
583 if(ENABLE_PORTAUDIO AND BUILD_wireshark_gtk)
584         set(PACKAGELIST ${PACKAGELIST} PORTAUDIO)
585 endif()
586
587
588 # Prefer c-ares over adns
589 if(ENABLE_CARES) # C Asynchronouse resolver
590         set(PACKAGELIST ${PACKAGELIST} CARES)
591 elseif(ENABLE_ADNS) # Gnu asynchronous DNS
592         set(PACKAGELIST ${PACKAGELIST} ADNS)
593 endif()
594
595 # Zlib compression
596 if(ENABLE_ZLIB)
597         set(PACKAGELIST ${PACKAGELIST} ZLIB)
598 endif()
599
600 # Embedded Lua interpreter
601 if(ENABLE_LUA)
602         set(PACKAGELIST ${PACKAGELIST} LUA)
603 endif()
604
605 # GeoIP address resolving
606 if(ENABLE_GEOIP)
607         set(PACKAGELIST ${PACKAGELIST} GEOIP)
608 endif()
609
610 if(ENABLE_NETLINK)
611         set(PACKAGELIST ${PACKAGELIST} NL)
612 endif()
613
614 if(ENABLE_SBC)
615         set(PACKAGELIST ${PACKAGELIST} SBC)
616 endif()
617
618 # Capabilities
619 if(ENABLE_CAP)
620         set(PACKAGELIST ${PACKAGELIST} CAP SETCAP)
621 endif()
622
623 # Windows version updates
624 if(ENABLE_WINSPARKLE)
625         set(PACKAGELIST ${PACKAGELIST} WINSPARKLE)
626 endif()
627
628 set(PACKAGELIST ${PACKAGELIST} YAPP)
629
630 set(PACKAGELIST ${PACKAGELIST} POD)
631
632 if(ENABLE_HTML_GUIDES)
633         set(PACKAGELIST ${PACKAGELIST} DOXYGEN)
634 endif()
635
636 set(PROGLIST text2pcap mergecap capinfos captype editcap reordercap dumpcap)
637
638 #Sort the package list
639 list(SORT PACKAGELIST)
640 message(STATUS "Packagelist: ${PACKAGELIST}")
641 #Let's loop the package list
642 foreach(PACKAGE ${PACKAGELIST})
643         if(${PACKAGE} STREQUAL "Qt4")
644                 set(PACKAGE_VAR "QT")
645         elseif(${PACKAGE} STREQUAL "PythonInterp")
646                 set(PACKAGE_VAR "PYTHONINTERP")
647         elseif(${PACKAGE} STREQUAL "Gettext")
648                 set(PACKAGE_VAR "GETTEXT")
649         elseif(${PACKAGE} STREQUAL "HtmlViewer")
650                 set(PACKAGE_VAR "HTML_VIEWER")
651         elseif(${PACKAGE} STREQUAL "Perl")
652                 set(PACKAGE_VAR "PERL")
653         else()
654                 set(PACKAGE_VAR ${PACKAGE})
655         endif()
656         if(${PACKAGE}_OPTIONS)
657                 find_package(${PACKAGE} ${${PACKAGE}_OPTIONS})
658         elseif(${PACKAGE}_REQUIRED)
659                 find_package(${PACKAGE} REQUIRED)
660         else()
661                 find_package(${PACKAGE})
662         endif()
663         if (${PACKAGE_VAR}_FOUND)
664                 message("${PACKAGE_VAR} FOUND")
665                 set(HAVE_LIB${PACKAGE_VAR} 1)
666                 include_directories(${${PACKAGE_VAR}_INCLUDE_DIRS})
667                 set(WS_ALL_LIBS ${WS_ALL_LIBS} ${${PACKAGE_VAR}_LIBRARIES})
668                 message(STATUS "${PACKAGE} includes: ${${PACKAGE_VAR}_INCLUDE_DIRS}")
669                 message(STATUS "${PACKAGE} libs: ${${PACKAGE_VAR}_LIBRARIES}")
670                 if (${PACKAGE}_DEFINITIONS)
671                         message(STATUS "${PACKAGE} definitions: ${${PACKAGE_VAR}_DEFINITIONS}")
672                 endif()
673                 if (${PACKAGE_VAR}_EXECUTABLE)
674                         message(STATUS "${PACKAGE} executable: ${${PACKAGE_VAR}_EXECUTABLE}")
675                 endif()
676         else()
677                 #
678                 # Not finding a package is only a fatal error if the
679                 # package is required; if it's required, then its
680                 # XXX_REQUIRED variable is set to TRUE, and the above
681                 # code will pass REQUIRED to find_package, and the
682                 # configure will fail if the package isn't found.
683                 #
684                 # Do *NOT* report this as an error!
685                 #
686                 message("${PACKAGE_VAR} NOT FOUND")
687         endif()
688 endforeach()
689
690 # Provide Windows system lib names
691 include( UseWinLibs )
692
693 # Create file to set paths to run binaries from build dir
694 WSExtendPath( "${WS_ALL_LIBS}" "${CMAKE_BINARY_DIR}/setpath.bat" )
695
696 #packaging
697 include(CPackConfig.txt)
698
699 if(HAVE_LIBAIRPCAP)
700         set(HAVE_AIRPCAP 1)
701 endif()
702 if(HAVE_LIBLUA)
703         set(HAVE_LUA_H 1)
704         set(HAVE_LUA 1)
705 endif()
706 if(HAVE_LIBKERBEROS)
707         set(HAVE_KERBEROS 1)
708         # HAVE_HEIMDAL_KERBEROS
709         set(HAVE_MIT_KERBEROS 1)
710         set(HAVE_KEYTYPE_ARCFOUR_56 1)
711 endif()
712 if(HAVE_LIBGEOIP)
713         set(HAVE_GEOIP 1)
714 endif()
715 if(HAVE_LIBCARES)
716         set(HAVE_C_ARES 1)
717 endif()
718 if(HAVE_LIBADNS)
719         set(HAVE_GNU_ADNS 1)
720 endif()
721 if(HAVE_LIBNL AND HAVE_AIRPCAP)
722         message(ERROR "Airpcap and Libnl support are mutually exclusive")
723 endif()
724 if(HAVE_LIBSBC)
725         set(HAVE_SBC 1)
726 endif()
727
728 if (HAVE_LIBWINSPARKLE)
729         set(HAVE_SOFTWARE_UPDATE 1)
730 endif()
731
732 # No matter which version of GTK is present
733 if(GTK2_FOUND OR GTK3_FOUND)
734         set(GTK_FOUND ON)
735 endif()
736 # That's the name autofoo uses
737 if(HAVE_LIBZLIB)
738         set(HAVE_LIBZ 1)
739         # Always include the "true" zlib includes first. This works around a
740         # bug in the Windows setup of GTK[23] which has a faulty zconf.h.
741         include_directories(BEFORE ${ZLIB_INCLUDE_DIRS})
742 endif()
743 if (Qt5Widgets_FOUND)
744         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
745         if (Qt5_POSITION_INDEPENDENT_CODE)
746                 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
747         endif()
748         set (QT_FOUND ON)
749         set (QT_LIBRARIES ${Qt5Widgets_LIBRARIES} ${Qt5PrintSupport_LIBRARIES})
750         if(Qt5MultimediaWidgets_FOUND)
751                 set (QT_LIBRARIES ${QT_LIBRARIES} ${Qt5MultimediaWidgets_LIBRARIES})
752                 # That's the name autofoo uses
753                 set(QT_MULTIMEDIAWIDGETS_LIB 1)
754         endif()
755         if(Qt5MacExtras_FOUND)
756                 set (QT_LIBRARIES ${QT_LIBRARIES} ${Qt5MacExtras_LIBRARIES})
757                 # That's the name autofoo uses
758                 set(QT_MACEXTRAS_LIB 1)
759         endif()
760         if(Qt5WinExtras_FOUND)
761                 set (QT_LIBRARIES ${QT_LIBRARIES} ${Qt5WinExtras_LIBRARIES})
762                 # set(QT_WINEXTRAS_LIB 1) # Not needed?
763         endif()
764 # If Qt4: QT_LIBRARIES and QT_INCLUDES are not set above. They require extra magic
765 elseif(QT_FOUND)
766         include(${QT_USE_FILE})
767         include_directories(${QT_INCLUDE_DIR})
768         message(STATUS "QT includes: ${QT_INCLUDE_DIR}")
769         message(STATUS "QT libs: ${QT_LIBRARIES}")
770 endif()
771
772 message(STATUS "C-Flags: ${CMAKE_C_FLAGS}")
773 message(STATUS "CXX-Flags: ${CMAKE_CXX_FLAGS}")
774
775 if(APPLE)
776         #
777         # We assume that APPLE means OS X so that we have the OS X
778         # frameworks.
779         #
780         set(HAVE_OS_X_FRAMEWORKS 1)
781         FIND_LIBRARY (APPLE_APPLICATION_SERVICES_LIBRARY ApplicationServices)
782         FIND_LIBRARY (APPLE_CORE_FOUNDATION_LIBRARY CoreFoundation)
783         FIND_LIBRARY (APPLE_SYSTEM_CONFIGURATION_LIBRARY SystemConfiguration)
784 endif()
785
786 include(ConfigureChecks.cmake)
787
788 #Big or little endian ?
789 include(TestBigEndian)
790 test_big_endian(WORDS_BIGENDIAN)
791
792 set(DATAFILE_DIR "${CMAKE_INSTALL_PREFIX}/share/${CPACK_PACKAGE_NAME}")
793
794 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
795
796 ADD_CUSTOM_TARGET(
797         gitversion ALL
798         COMMAND ${PERL_EXECUTABLE}
799                 ${CMAKE_CURRENT_SOURCE_DIR}/make-version.pl
800                 ${CMAKE_CURRENT_SOURCE_DIR}
801         DEPENDS
802                 ${CMAKE_CURRENT_SOURCE_DIR}/make-version.pl
803 )
804 set_target_properties(gitversion PROPERTIES FOLDER "Auxiliary")
805
806 ADD_CUSTOM_COMMAND(
807         OUTPUT  ${CMAKE_BINARY_DIR}/version.h
808         COMMAND ${PERL_EXECUTABLE}
809                 ${CMAKE_CURRENT_SOURCE_DIR}/make-version.pl
810                 ${CMAKE_CURRENT_SOURCE_DIR}
811         DEPENDS
812                 ${CMAKE_CURRENT_SOURCE_DIR}/make-version.pl
813 )
814
815 if(ENABLE_PLUGINS)
816         set(HAVE_PLUGINS 1)
817         if(IS_ABSOLUTE ${CMAKE_INSTALL_LIBDIR})
818                 set(PLUGIN_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/@CPACK_PACKAGE_NAME@/plugins/${CPACK_PACKAGE_VERSION}")
819         else()
820                 set(PLUGIN_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/@CPACK_PACKAGE_NAME@/plugins/${CPACK_PACKAGE_VERSION}")
821         endif()
822         set(PLUGIN_SRC_DIRS
823                 plugins/docsis
824                 plugins/ethercat
825                 plugins/gryphon
826                 plugins/irda
827                 plugins/m2m
828                 plugins/mate
829                 plugins/opcua
830                 plugins/profinet
831                 plugins/stats_tree
832                 plugins/unistim
833                 plugins/wimax
834                 plugins/wimaxasncp
835                 plugins/wimaxmacphy
836                 ${CUSTOM_PLUGIN_SRC_DIR}
837         )
838 # It seems this stuff doesn't build with autofoo either...
839 #       if(YAPP_FOUND)
840 #               set(PLUGIN_SRC_DIRS
841 #                       ${PLUGIN_SRC_DIRS}
842 #                       plugins/tpg
843 #               )
844 #       endif()
845 else()
846         set(PLUGIN_SRC_DIRS )
847 endif()
848
849 foreach(PLUGIN_DIR ${PLUGIN_SRC_DIRS})
850         add_subdirectory( ${PLUGIN_DIR} )
851 endforeach()
852
853 if(ENABLE_EXTCAP)
854         set(HAVE_EXTCAP 1)
855         set(EXTCAP_DIR "${DATAFILE_DIR}/extcap/")
856 endif()
857
858 add_subdirectory( asn1 EXCLUDE_FROM_ALL )
859 add_subdirectory( capchild )
860 add_subdirectory( caputils )
861 add_subdirectory( codecs )
862 if (NOT WIN32)
863         # Some work will be required for Windows. See the notes at the top
864         # of FindASCIIDOC.cmake.
865         add_subdirectory( docbook )
866 endif()
867 add_subdirectory( epan )
868 add_subdirectory( tools/lemon )
869 add_subdirectory( ui )
870 add_subdirectory( wiretap )
871 add_subdirectory( wsutil )
872
873 if(NOT WIN32)
874         add_custom_target(dumpabi DEPENDS dumpabi-libwireshark dumpabi-libwiretap dumpabi-libwsutil color.h)
875 endif()
876
877 if(ENABLE_ECHLD)
878         add_subdirectory( echld )
879 endif()
880
881 if(BUILD_wireshark_gtk AND GTK_FOUND)
882         add_subdirectory( ui/gtk )
883 endif()
884
885 if(BUILD_wireshark AND QT_FOUND)
886         add_subdirectory( ui/qt )
887 endif()
888
889
890 # Basedir where to install guides
891 set(DOC_DIR "$ENV{docdir}" CACHE FILEPATH "Installation directory for ug and dg pdfs.")
892 message(STATUS "docdir: ${DOC_DIR}")
893
894 if(ENABLE_PCAP_NG_DEFAULT)
895         set(PCAP_NG_DEFAULT 1)
896 endif()
897
898 # Large file support (e.g. make off_t 64 bit if supported)
899 include(gmxTestLargeFiles)
900 gmx_test_large_files(GMX_LARGEFILES)
901
902 add_definitions( -DTOP_SRCDIR=\"${CMAKE_SOURCE_DIR}\" )
903
904 if(WIN32)
905         set(WS_MSVC_NORETURN "__declspec(noreturn)")
906
907         # Disable deprecation
908         if(MSVC80 OR MSVC90)
909                 add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
910         endif()
911 else()
912         set(WS_MSVC_NORETURN " ")
913 endif()
914
915 set( VERSION ${PROJECT_VERSION} )
916 set( configure_input "Built with CMake ${CMAKE_VERSION}" )
917 configure_file(${CMAKE_SOURCE_DIR}/cmakeconfig.h.in ${CMAKE_BINARY_DIR}/config.h)
918 set( IN_FILES
919         adns_dll.rc
920         capchild/doxygen.cfg.in
921         caputils/doxygen.cfg.in
922         doxygen.cfg.in
923         doxygen_global.cfg
924         epan/doxygen.cfg.in
925         image/libwireshark.rc.in
926         image/text2pcap.rc.in
927         image/capinfos.rc.in
928         image/wireshark.rc.in
929         image/mergecap.rc.in
930         image/tshark.rc.in
931         image/dumpcap.rc.in
932         image/reordercap.rc.in
933         image/rawshark.rc.in
934         image/file_dlg_win32.rc
935         image/tfshark.rc.in
936         image/editcap.rc.in
937         image/captype.rc.in
938         image/libwsutil.rc.in
939         image/wiretap.rc.in
940         packaging/macosx/Info.plist.in
941         plugins/ethercat/plugin.rc.in
942         plugins/unistim/plugin.rc.in
943         plugins/opcua/plugin.rc.in
944         plugins/wimax/plugin.rc.in
945         plugins/gryphon/plugin.rc.in
946         plugins/profinet/plugin.rc.in
947         plugins/m2m/plugin.rc.in
948         plugins/stats_tree/plugin.rc.in
949         plugins/wimaxasncp/plugin.rc.in
950         plugins/mate/plugin.rc.in
951         plugins/wimaxmacphy/plugin.rc.in
952         plugins/irda/plugin.rc.in
953         plugins/docsis/plugin.rc.in
954         plugins/easy_codec/plugin.rc.in
955         ${CUSTOM_PLUGIN_IN_FILES}
956         ui/doxygen.cfg.in
957         ui/gtk/doxygen.cfg.in
958         ui/qt/doxygen.cfg.in
959         wireshark.pc.in
960 )
961 foreach( _in_file ${IN_FILES} )
962         get_filename_component( _path ${_in_file} PATH )
963         string( REGEX REPLACE "(.*)\\.in" "\\1" _outfile ${_in_file}  )
964         configure_file( ${CMAKE_SOURCE_DIR}/${_in_file} ${CMAKE_BINARY_DIR}/${_outfile} @ONLY )
965 endforeach()
966
967 include(FeatureSummary)
968 #SET_FEATURE_INFO(NAME DESCRIPTION [URL [COMMENT] ]
969 SET_FEATURE_INFO(SBC "SBC Codec for Bluetooth A2DP stream playing" "www: http://git.kernel.org/cgit/bluetooth/sbc.git" )
970
971 FEATURE_SUMMARY(WHAT ALL)
972
973 link_directories(
974         ${CMAKE_BINARY_DIR}/ui
975         ${CMAKE_BINARY_DIR}/ui/gtk
976         ${CMAKE_BINARY_DIR}/ui/qt
977         ${CMAKE_BINARY_DIR}/capchild
978         ${CMAKE_BINARY_DIR}/caputils
979         ${CMAKE_BINARY_DIR}/codecs
980         ${CMAKE_BINARY_DIR}/epan
981         ${CMAKE_BINARY_DIR}/wiretap
982         ${CMAKE_BINARY_DIR}/wsutil
983 )
984
985 if(WIN32)
986         set(PLATFORM_UI_SRC
987                 ui/win32/console_win32.c
988                 ui/win32/file_dlg_win32.c
989                 ui/win32/print_win32.c
990                 image/file_dlg_win32.rc
991         )
992 endif()
993
994 # sources common for wireshark, tshark, and rawshark
995 set(SHARK_COMMON_SRC
996         cfile.c
997         frame_tvbuff.c
998         sync_pipe_write.c
999 )
1000
1001 # sources for external capture interfaces
1002 if(ENABLE_EXTCAP)
1003         set(SHARK_COMMON_SRC
1004                 ${SHARK_COMMON_SRC}
1005                 extcap.c
1006                 extcap_parser.c
1007         )
1008 endif()
1009
1010 set(TSHARK_TAP_SRC
1011         ui/cli/tap-afpstat.c
1012         ui/cli/tap-ansi_astat.c
1013         ui/cli/tap-bootpstat.c
1014         ui/cli/tap-camelcounter.c
1015         ui/cli/tap-camelsrt.c
1016         ui/cli/tap-comparestat.c
1017         ui/cli/tap-dcerpcstat.c
1018         ui/cli/tap-diameter-avp.c
1019         ui/cli/tap-expert.c
1020         ui/cli/tap-follow.c
1021         ui/cli/tap-funnel.c
1022         ui/cli/tap-gsm_astat.c
1023         ui/cli/tap-h225counter.c
1024         ui/cli/tap-h225rassrt.c
1025         ui/cli/tap-hosts.c
1026         ui/cli/tap-httpstat.c
1027         ui/cli/tap-icmpstat.c
1028         ui/cli/tap-icmpv6stat.c
1029         ui/cli/tap-iostat.c
1030         ui/cli/tap-iousers.c
1031         ui/cli/tap-macltestat.c
1032         ui/cli/tap-mgcpstat.c
1033         ui/cli/tap-megacostat.c
1034         ui/cli/tap-protocolinfo.c
1035         ui/cli/tap-protohierstat.c
1036         ui/cli/tap-radiusstat.c
1037         ui/cli/tap-rlcltestat.c
1038         ui/cli/tap-rpcstat.c
1039         ui/cli/tap-rpcprogs.c
1040         ui/cli/tap-rtp.c
1041         ui/cli/tap-rtspstat.c
1042         ui/cli/tap-scsistat.c
1043         ui/cli/tap-sctpchunkstat.c
1044         ui/cli/tap-sipstat.c
1045         ui/cli/tap-smbsids.c
1046         ui/cli/tap-smbstat.c
1047         ui/cli/tap-stats_tree.c
1048         ui/cli/tap-sv.c
1049         ui/cli/tap-wspstat.c
1050 )
1051
1052 set(INSTALL_DIRS
1053         diameter
1054         dtds
1055         help
1056         radius
1057         tpncp
1058         wimaxasncp
1059 )
1060
1061 set(INSTALL_FILES
1062         ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1063         COPYING
1064         ${CMAKE_BINARY_DIR}/capinfos.html
1065         ${CMAKE_BINARY_DIR}/captype.html
1066         cfilters
1067         colorfilters
1068         dfilters
1069         ${CMAKE_BINARY_DIR}/dftest.html
1070         ${CMAKE_BINARY_DIR}/dumpcap.html
1071         ${CMAKE_BINARY_DIR}/editcap.html
1072         ${CMAKE_BINARY_DIR}/asn2deb.html
1073         ${CMAKE_BINARY_DIR}/idl2deb.html
1074         ${CMAKE_BINARY_DIR}/idl2wrs.html
1075         ipmap.html
1076         manuf
1077         ${CMAKE_BINARY_DIR}/mergecap.html
1078         pdml2html.xsl
1079         ${CMAKE_BINARY_DIR}/randpkt.html
1080         ${CMAKE_BINARY_DIR}/rawshark.html
1081         ${CMAKE_BINARY_DIR}/reordercap.html
1082         services
1083         smi_modules
1084         ${CMAKE_BINARY_DIR}/text2pcap.html
1085         ${CMAKE_BINARY_DIR}/tshark.html
1086         ${CMAKE_BINARY_DIR}/wireshark-filter.html
1087         ${CMAKE_BINARY_DIR}/wireshark.html
1088         docbook/ws.css
1089 )
1090
1091 set(MAN1_FILES
1092         ${CMAKE_BINARY_DIR}/capinfos.1
1093         ${CMAKE_BINARY_DIR}/captype.1
1094         ${CMAKE_BINARY_DIR}/dftest.1
1095         ${CMAKE_BINARY_DIR}/dumpcap.1
1096         ${CMAKE_BINARY_DIR}/editcap.1
1097         ${CMAKE_BINARY_DIR}/idl2wrs.1
1098         ${CMAKE_BINARY_DIR}/mergecap.1
1099         ${CMAKE_BINARY_DIR}/randpkt.1
1100         ${CMAKE_BINARY_DIR}/rawshark.1
1101         ${CMAKE_BINARY_DIR}/reordercap.1
1102         ${CMAKE_BINARY_DIR}/text2pcap.1
1103         ${CMAKE_BINARY_DIR}/tshark.1
1104         ${CMAKE_BINARY_DIR}/wireshark.1
1105 )
1106
1107 set(MAN4_FILES
1108         ${CMAKE_BINARY_DIR}/wireshark-filter.4
1109 )
1110
1111 set(LIBEPAN_LIBS
1112 #               @NSL_LIBS@      # -lnsl
1113 #               @SOCKET_LIBS@   # -lsocket
1114 #               @SSL_LIBS@      # -lcrypto
1115                 epan
1116 #               $(plugin_ldadd) # in case of static
1117                 ${AIRPCAP_LIBRARIES}
1118                 ${PCAP_LIBRARIES}
1119                 ${CARES_LIBRARIES}
1120                 ${ADNS_LIBRARIES}
1121                 ${KERBEROS_LIBRARIES}
1122                 ${LUA_LIBRARIES}
1123                 ${PYTHON_LIBRARIES}
1124                 ${GEOIP_LIBRARIES}
1125                 ${GCRYPT_LIBRARIES}
1126                 ${GNUTLS_LIBRARIES}
1127                 ${SMI_LIBRARIES}
1128                 ${ZLIB_LIBRARIES}
1129                 ${M_LIBRARIES}
1130                 ${SBC_LIBRARIES}
1131                 ${WINSPARKLE_LIBRARIES}
1132 )
1133
1134 if( (BUILD_wireshark AND QT_FOUND) OR (BUILD_wireshark_gtk AND GTK_FOUND) )
1135         set(WIRESHARK_SRC
1136                 capture_info.c
1137                 capture_opts.c
1138                 color_filters.c
1139                 file.c
1140                 fileset.c
1141                 summary.c
1142                 ${SHARK_COMMON_SRC}
1143                 ${PLATFORM_UI_SRC}
1144         )
1145         set(wireshark_FILES
1146                 ${WIRESHARK_SRC}
1147                 image/wireshark.rc
1148         )
1149 endif()
1150
1151 if(ENABLE_APPLICATION_BUNDLE)
1152         #
1153         # Add -Wl,-single_module to the LDFLAGS used with shared
1154         # libraries, to fix some error that show up in some cases;
1155         # some Apple documentation recommends it for most shared
1156         # libraries.
1157         #
1158         set( CMAKE_SHARED_LINKER_FLAGS "-Wl,-single_module ${CMAKE_SHARED_LINKER_FLAGS}" )
1159         #
1160         # Add -Wl,-headerpad_max_install_names to the LDFLAGS, as
1161         # code-signing issues is running out of padding space.
1162         #
1163         # Add -Wl,-search_paths_first to make sure that if we search
1164         # directories A and B, in that order, for a given library, a
1165         # non-shared version in directory A, rather than a shared
1166         # version in directory B, is chosen (so we can use
1167         # --with-pcap=/usr/local to force all programs to be linked
1168         # with a static version installed in /usr/local/lib rather than
1169         # the system version in /usr/lib).
1170         #
1171         # Also add -Wl,-rpath,@executable_path/../lib and
1172         # -Wl,-rpath,/usr/local/lib, so that, if we build an app
1173         # bundle, we can tweak all the executable images, shared
1174         # libraries, and plugins in the bundle to look for non-system
1175         # libraries in the rpath, rather than having a script tweak
1176         # DYLD_LIBRARY_PATH.
1177         #
1178
1179         set(CMAKE_EXE_LINKER_FLAGS
1180         "-Wl,-headerpad_max_install_names -Wl,-search_paths_first -Wl,-rpath,@executable_path/../lib -Wl,-rpath,@executable_path/../Frameworks -Wl,-rpath,/usr/local/lib ${CMAKE_EXE_LINKER_FLAGS}"
1181         )
1182
1183         # Add files to the app bundle
1184         # Wireshark.app/Contents
1185         set(BUNDLE_CONTENTS_FILES
1186                 ${CMAKE_BINARY_DIR}/packaging/macosx/PkgInfo
1187         )
1188         set_source_files_properties(${BUNDLE_CONTENTS_FILES} PROPERTIES
1189                 MACOSX_PACKAGE_LOCATION .
1190         )
1191
1192         # Wireshark.app/Contents/Resources
1193         set(BUNDLE_RESOURCE_FILES
1194                 ${CMAKE_SOURCE_DIR}/packaging/macosx/Resources/Wireshark.icns
1195                 ${CMAKE_SOURCE_DIR}/packaging/macosx/Resources/Wiresharkdoc.icns
1196         )
1197         set_source_files_properties(${BUNDLE_RESOURCE_FILES} PROPERTIES
1198                 MACOSX_PACKAGE_LOCATION Resources
1199         )
1200
1201         # Wireshark.app/Contents/Resources/share/man/man1
1202         set(BUNDLE_RESOURCE_SHARE_MAN1_FILES ${MAN1_FILES})
1203         set_source_files_properties(${BUNDLE_RESOURCE_SHARE_MAN1_FILES} PROPERTIES
1204                 MACOSX_PACKAGE_LOCATION Resources/share/man/man1
1205         )
1206
1207         # Wireshark.app/Contents/Resources/share/man/man1
1208         set(BUNDLE_RESOURCE_SHARE_MAN4_FILES ${MAN4_FILES})
1209         set_source_files_properties(${BUNDLE_RESOURCE_SHARE_MAN4_FILES} PROPERTIES
1210                 MACOSX_PACKAGE_LOCATION Resources/share/man/man4
1211         )
1212
1213         # Wireshark.app/Contents/Resources/share/wireshark
1214         set(BUNDLE_RESOURCE_SHARE_WIRESHARK_FILES
1215                 ${INSTALL_FILES}
1216         )
1217         set_source_files_properties(${BUNDLE_RESOURCE_SHARE_WIRESHARK_FILES} PROPERTIES
1218                 MACOSX_PACKAGE_LOCATION Resources/share/wireshark
1219         )
1220
1221         # Wireshark.app/Contents/Resources/share/wireshark/*/*
1222         # This is a bit messy but copying directories using
1223         # MACOSX_PACKAGE_LOCATION is currently broken:
1224         # http://public.kitware.com/Bug/view.php?id=13784
1225         # We also assume INSTALL_DIRS are all one level deep
1226         set(BUNDLE_RESOURCE_SHARE_WIRESHARK_SUBIDR_FILES)
1227         foreach (_subdir ${INSTALL_DIRS})
1228                 file(GLOB _subdir_files RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/${_subdir}/*)
1229                 list(REMOVE_ITEM _subdir_files ${_subdir}/Custom.make)
1230                 set(BUNDLE_RESOURCE_SHARE_WIRESHARK_SUBIDR_FILES
1231                         ${BUNDLE_RESOURCE_SHARE_WIRESHARK_SUBIDR_FILES}
1232                         ${_subdir_files}
1233                 )
1234                 set_source_files_properties(${_subdir_files} PROPERTIES
1235                         MACOSX_PACKAGE_LOCATION Resources/share/wireshark/${_subdir}
1236                 )
1237         endforeach()
1238
1239         set(EXTRA_BUNDLE_FILES
1240                 ${BUNDLE_CONTENTS_FILES}
1241                 ${BUNDLE_RESOURCE_FILES}
1242                 ${BUNDLE_RESOURCE_SHARE_MAN1_FILES}
1243                 ${BUNDLE_RESOURCE_SHARE_MAN4_FILES}
1244                 ${BUNDLE_RESOURCE_SHARE_WIRESHARK_FILES}
1245                 ${BUNDLE_RESOURCE_SHARE_WIRESHARK_SUBIDR_FILES}
1246         )
1247 else()
1248         set(EXTRA_BUNDLE_FILES)
1249 endif()
1250
1251 if(BUILD_wireshark AND QT_FOUND)
1252         set(wireshark_LIBS
1253                 qtui
1254                 ui
1255                 capchild
1256                 caputils
1257                 ${QT_LIBRARIES}
1258                 ${GTHREAD2_LIBRARIES}
1259                 codecs
1260                 ${LIBEPAN_LIBS}
1261                 ${APPLE_APPLICATION_SERVICES_LIBRARY}
1262                 ${APPLE_CORE_FOUNDATION_LIBRARY}
1263                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
1264                 ${NL_LIBRARIES}
1265         )
1266         # wireshark and wireshark-gtk share wireshark_FILES
1267
1268         # Policy since 2.8.11
1269         if (POLICY CMP0020)
1270                 cmake_policy(SET CMP0020 OLD)
1271         endif()
1272
1273         add_executable(wireshark MACOSX_BUNDLE ${wireshark_FILES} ${EXTRA_BUNDLE_FILES})
1274         set_target_properties(wireshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1275         set_target_properties(wireshark PROPERTIES FOLDER "Executables")
1276         if(ENABLE_APPLICATION_BUNDLE OR WIN32)
1277                 set_target_properties(wireshark PROPERTIES OUTPUT_NAME Wireshark)
1278         endif()
1279         if(ENABLE_APPLICATION_BUNDLE)
1280                 set_target_properties(
1281                         wireshark PROPERTIES
1282                                 MACOSX_BUNDLE_INFO_PLIST ${CMAKE_BINARY_DIR}/packaging/macosx/Info.plist
1283                 )
1284                 add_custom_command(
1285                         TARGET wireshark POST_BUILD
1286                         COMMAND ln -sf ${CMAKE_BINARY_DIR}/run/Wireshark.app/Contents/MacOS/Wireshark ${CMAKE_BINARY_DIR}/run/wireshark
1287                 )
1288         endif()
1289
1290         target_link_libraries(wireshark ${wireshark_LIBS})
1291         install(
1292                 TARGETS wireshark
1293                 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
1294                 BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR}
1295         )
1296
1297         if(NOT ENABLE_APPLICATION_BUNDLE)
1298                 # Map for endpoints dialog
1299                 ADD_CUSTOM_COMMAND(
1300                         TARGET wireshark
1301                         POST_BUILD
1302                         COMMAND ${CMAKE_COMMAND} -E copy_if_different
1303                                 "${PROJECT_SOURCE_DIR}/ipmap.html"
1304                                 $<TARGET_FILE_DIR:wireshark>
1305                 )
1306         endif()
1307 endif()
1308
1309 # Common properties for CLI executables
1310 macro(set_extra_executable_properties _executable _folder)
1311         set_target_properties(${_executable} PROPERTIES
1312                 LINK_FLAGS "${WS_LINK_FLAGS}"
1313                 FOLDER ${_folder}
1314         )
1315
1316         if(ENABLE_APPLICATION_BUNDLE)
1317                 set_target_properties(${_executable} PROPERTIES
1318                         RUNTIME_OUTPUT_DIRECTORY run/Wireshark.app/Contents/MacOS
1319                 )
1320         add_custom_command(
1321                 TARGET ${_executable} POST_BUILD
1322                 COMMAND ln -sf ${CMAKE_BINARY_DIR}/run/Wireshark.app/Contents/MacOS/${_executable} ${CMAKE_BINARY_DIR}/run/
1323         )
1324         endif()
1325 endmacro()
1326
1327 if(BUILD_wireshark_gtk AND GTK_FOUND)
1328         set(wireshark_gtk_LIBS
1329                 gtkui
1330                 ui
1331                 capchild
1332                 caputils
1333                 ${GTK2_LIBRARIES}
1334                 ${GTK3_LIBRARIES}
1335                 ${GTHREAD2_LIBRARIES}
1336                 codecs
1337                 ${PORTAUDIO_LIBRARIES}
1338                 ${LIBEPAN_LIBS}
1339                 ${APPLE_APPLICATION_SERVICES_LIBRARY}
1340                 ${APPLE_CORE_SERVICES_LIBRARY}
1341                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
1342                 ${NL_LIBRARIES}
1343                 ${WIN_COMCTL32_LIBRARY}
1344         )
1345         # wireshark and wireshark-gtk share wireshark_FILES
1346
1347         add_executable(wireshark-gtk ${wireshark_FILES})
1348         set_target_properties(wireshark-gtk PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1349         set_target_properties(wireshark-gtk PROPERTIES FOLDER "Executables")
1350         target_link_libraries(wireshark-gtk ${wireshark_gtk_LIBS})
1351         install(TARGETS wireshark-gtk RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1352
1353         # Map for endpoints dialog
1354         ADD_CUSTOM_COMMAND(
1355                 TARGET wireshark-gtk
1356                 POST_BUILD
1357                 COMMAND ${CMAKE_COMMAND} -E copy_if_different
1358                         "${PROJECT_SOURCE_DIR}/ipmap.html"
1359                         $<TARGET_FILE_DIR:wireshark-gtk>
1360         )
1361 endif()
1362
1363 register_tap_files(tshark-tap-register.c
1364         tshark-taps
1365         ${TSHARK_TAP_SRC}
1366 )
1367
1368 if(BUILD_tshark)
1369         set(tshark_LIBS
1370                 ui
1371                 capchild
1372                 caputils
1373                 ${LIBEPAN_LIBS}
1374                 ${APPLE_CORE_FOUNDATION_LIBRARY}
1375                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
1376         )
1377         set(tshark_FILES
1378                 capture_opts.c
1379                 tshark-tap-register.c
1380                 tshark.c
1381                 ${TSHARK_TAP_SRC}
1382                 ${SHARK_COMMON_SRC}
1383                 image/tshark.rc
1384         )
1385         add_executable(tshark ${tshark_FILES})
1386         set_extra_executable_properties(tshark "Executables")
1387         target_link_libraries(tshark ${tshark_LIBS})
1388         install(TARGETS tshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1389 endif()
1390
1391 if(BUILD_tfshark)
1392         set(tfshark_LIBS
1393                 ui
1394                 ${LIBEPAN_LIBS}
1395                 ${APPLE_CORE_FOUNDATION_LIBRARY}
1396                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
1397         )
1398         set(tfshark_FILES
1399                 tfshark.c
1400                 ${TSHARK_TAP_SRC}
1401                 ${SHARK_COMMON_SRC}
1402                 image/tfshark.rc
1403         )
1404         add_executable(tfshark ${tfshark_FILES})
1405         set_extra_executable_properties(tfshark "Executables")
1406         target_link_libraries(tfshark ${tfshark_LIBS})
1407         install(TARGETS tfshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1408 endif()
1409
1410 if(BUILD_rawshark AND PCAP_FOUND)
1411         set(rawshark_LIBS
1412                 caputils
1413                 ${LIBEPAN_LIBS}
1414                 ${APPLE_CORE_FOUNDATION_LIBRARY}
1415                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
1416         )
1417         set(rawshark_FILES
1418                 ${SHARK_COMMON_SRC}
1419                 rawshark.c
1420                 ui/util.c
1421                 image/rawshark.rc
1422         )
1423         add_executable(rawshark ${rawshark_FILES})
1424         set_extra_executable_properties(rawshark "Executables")
1425         target_link_libraries(rawshark ${rawshark_LIBS})
1426         install(TARGETS rawshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1427 endif()
1428
1429 if(BUILD_dftest)
1430         set(dftest_LIBS
1431                 ${LIBEPAN_LIBS}
1432         )
1433         set(dftest_FILES
1434                 dftest.c
1435                 ui/util.c
1436         )
1437         add_executable(dftest ${dftest_FILES})
1438         set_extra_executable_properties(dftest "Tests")
1439         target_link_libraries(dftest ${dftest_LIBS})
1440         install(TARGETS dftest RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1441 endif()
1442
1443 if(BUILD_randpkt)
1444         set(randpkt_LIBS
1445                 wiretap
1446                 wsutil
1447                 ${M_LIBRARIES}
1448                 ${PCAP_LIBRARIES}
1449 #               @SOCKET_LIBS@
1450 #               @NSL_LIBS@
1451                 ${CARES_LIBRARIES}
1452                 ${ADNS_LIBRARIES}
1453                 ${ZLIB_LIBRARIES}
1454         )
1455         set(randpkt_FILES
1456                 randpkt.c
1457         )
1458         add_executable(randpkt ${randpkt_FILES})
1459         set_extra_executable_properties(randpkt "Executables")
1460         target_link_libraries(randpkt ${randpkt_LIBS})
1461         install(TARGETS randpkt RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1462 endif()
1463
1464 if(BUILD_text2pcap)
1465         set(text2pcap_LIBS
1466                 wsutil
1467                 ${M_LIBRARIES}
1468                 ${ZLIB_LIBRARIES}
1469         )
1470         set(text2pcap_CLEAN_FILES
1471                 text2pcap.c
1472                 pcapio.c
1473         )
1474         set(text2pcap_FILES
1475                 ${text2pcap_CLEAN_FILES}
1476                 image/text2pcap.rc
1477         )
1478         add_lex_files(text2pcap_FILES
1479                 text2pcap-scanner.l
1480         )
1481         add_executable(text2pcap ${text2pcap_FILES})
1482         set_extra_executable_properties(text2pcap "Executables")
1483         target_link_libraries(text2pcap ${text2pcap_LIBS})
1484         install(TARGETS text2pcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1485 endif()
1486
1487 if(BUILD_mergecap)
1488         set(mergecap_LIBS
1489                 wiretap
1490                 ${ZLIB_LIBRARIES}
1491                 ${CMAKE_DL_LIBS}
1492         )
1493         set(mergecap_FILES
1494                 mergecap.c
1495                 image/mergecap.rc
1496         )
1497         add_executable(mergecap ${mergecap_FILES})
1498         set_extra_executable_properties(mergecap "Executables")
1499         target_link_libraries(mergecap ${mergecap_LIBS})
1500         install(TARGETS mergecap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1501 endif()
1502
1503 if(BUILD_reordercap)
1504         set(reordercap_LIBS
1505                 wiretap
1506                 ${ZLIB_LIBRARIES}
1507                 ${CMAKE_DL_LIBS}
1508         )
1509         set(reordercap_FILES
1510                 reordercap.c
1511                 image/reordercap.rc
1512         )
1513         add_executable(reordercap ${reordercap_FILES})
1514         set_extra_executable_properties(reordercap "Executables")
1515         target_link_libraries(reordercap ${reordercap_LIBS})
1516         install(TARGETS reordercap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1517 endif()
1518
1519 if(BUILD_capinfos)
1520         set(capinfos_LIBS
1521                 wiretap
1522                 wsutil
1523                 ${ZLIB_LIBRARIES}
1524                 ${GCRYPT_LIBRARIES}
1525                 ${CMAKE_DL_LIBS}
1526         )
1527         set(capinfos_FILES
1528                 capinfos.c
1529                 image/capinfos.rc
1530         )
1531         add_executable(capinfos ${capinfos_FILES})
1532         set_extra_executable_properties(capinfos "Executables")
1533         target_link_libraries(capinfos ${capinfos_LIBS})
1534         install(TARGETS capinfos RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1535 endif()
1536
1537 if(BUILD_captype)
1538         set(captype_LIBS
1539                 wiretap
1540                 wsutil
1541                 ${ZLIB_LIBRARIES}
1542                 ${CMAKE_DL_LIBS}
1543         )
1544         set(captype_FILES
1545                 captype.c
1546                 image/captype.rc
1547         )
1548         add_executable(captype ${captype_FILES})
1549         set_extra_executable_properties(captype "Executables")
1550         target_link_libraries(captype ${captype_LIBS})
1551         install(TARGETS captype RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1552 endif()
1553
1554 if(BUILD_editcap)
1555         set(editcap_LIBS
1556                 wiretap
1557                 ${ZLIB_LIBRARIES}
1558                 ${CMAKE_DL_LIBS}
1559         )
1560         set(editcap_FILES
1561                 editcap.c
1562                 image/editcap.rc
1563         )
1564         add_executable(editcap ${editcap_FILES})
1565         set_extra_executable_properties(editcap "Executables")
1566         target_link_libraries(editcap ${editcap_LIBS})
1567         install(TARGETS editcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1568 endif()
1569
1570 if(BUILD_dumpcap AND PCAP_FOUND)
1571         set(dumpcap_LIBS
1572                 wsutil
1573                 caputils
1574                 ${PCAP_LIBRARIES}
1575                 ${CAP_LIBRARIES}
1576 #               @SOCKET_LIBS@
1577 #               @NSL_LIBS@
1578                 ${GLIB2_LIBRARIES}
1579                 ${GTHREAD2_LIBRARIES}
1580                 ${ZLIB_LIBRARIES}
1581                 ${APPLE_CORE_FOUNDATION_LIBRARY}
1582                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
1583                 ${NL_LIBRARIES}
1584         )
1585         set(dumpcap_FILES
1586                 capture_opts.c
1587                 capture_stop_conditions.c
1588                 conditions.c
1589                 dumpcap.c
1590                 pcapio.c
1591                 ringbuffer.c
1592                 sync_pipe_write.c
1593                 image/dumpcap.rc
1594         )
1595         add_executable(dumpcap ${dumpcap_FILES})
1596         set_extra_executable_properties(dumpcap "Executables")
1597         target_link_libraries(dumpcap ${dumpcap_LIBS})
1598         install(TARGETS dumpcap
1599                         RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
1600                         PERMISSIONS ${DUMPCAP_SETUID}
1601                                 OWNER_READ OWNER_WRITE OWNER_EXECUTE
1602                                 GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
1603         )
1604         if(DUMPCAP_INSTALL_OPTION STREQUAL "capabilities")
1605                 install( CODE "execute_process(
1606                         COMMAND
1607                                 ${SETCAP_EXECUTABLE}
1608                                 cap_net_raw,cap_net_admin+ep
1609                                 ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/dumpcap${CMAKE_EXECUTABLE_SUFFIX}
1610                         RESULT_VARIABLE
1611                                 _SETCAP_RESULT
1612                         )
1613                         if( _SETCAP_RESULT )
1614                                 message( WARNING \"setcap failed (${_SETCAP_RESULT}).\")
1615                         endif()"
1616                 )
1617         endif()
1618 endif()
1619
1620 ADD_CUSTOM_COMMAND(
1621         OUTPUT  ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1622         COMMAND ${PERL_EXECUTABLE}
1623                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1624                 ${CMAKE_SOURCE_DIR}/doc/make-authors-short.pl
1625                 < ${CMAKE_SOURCE_DIR}/AUTHORS
1626                 > ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1627         DEPENDS
1628                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1629                 ${CMAKE_SOURCE_DIR}/doc/make-authors-short.pl
1630                 ${CMAKE_SOURCE_DIR}/AUTHORS
1631 )
1632
1633 ADD_CUSTOM_COMMAND(
1634         OUTPUT  ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1635         COMMAND ${PERL_EXECUTABLE}
1636                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1637                 ${CMAKE_SOURCE_DIR}/doc/make-authors-format.pl
1638                 < ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1639                 > ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1640         DEPENDS
1641                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1642                 ${CMAKE_SOURCE_DIR}/doc/make-authors-format.pl
1643                 ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1644 )
1645
1646 if(WIN32)
1647 FILE(TO_NATIVE_PATH ${CMAKE_SOURCE_DIR}/doc/wireshark.pod.template WPT_WIN_PATH)
1648 FILE(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT ASF_WIN_PATH)
1649 FILE(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/wireshark.pod WP_WIN_PATH)
1650 ADD_CUSTOM_COMMAND(
1651         OUTPUT  ${CMAKE_BINARY_DIR}/wireshark.pod
1652         COMMAND copy /B ${WPT_WIN_PATH} + ${ASF_WIN_PATH} ${WP_WIN_PATH}
1653         DEPENDS
1654                 ${CMAKE_SOURCE_DIR}/doc/wireshark.pod.template
1655                 ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1656 )
1657 else()
1658
1659 ADD_CUSTOM_COMMAND(
1660         OUTPUT  ${CMAKE_BINARY_DIR}/wireshark.pod
1661         COMMAND cat
1662                 ${CMAKE_SOURCE_DIR}/doc/wireshark.pod.template
1663                 ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1664                 > ${CMAKE_BINARY_DIR}/wireshark.pod
1665         DEPENDS
1666                 ${CMAKE_SOURCE_DIR}/doc/wireshark.pod.template
1667                 ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1668 )
1669 endif()
1670
1671 if(ENABLE_APPLICATION_BUNDLE)
1672 ADD_CUSTOM_COMMAND(
1673         OUTPUT ${CMAKE_BINARY_DIR}/packaging/macosx/PkgInfo
1674         COMMAND ${CMAKE_COMMAND} -E echo APPLWshk > ${CMAKE_BINARY_DIR}/packaging/macosx/PkgInfo
1675 )
1676
1677 ADD_CUSTOM_TARGET(osx-app
1678         COMMAND ${CMAKE_SOURCE_DIR}/packaging/macosx/osx-app.sh
1679         WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/run
1680 )
1681 endif()
1682
1683 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/capinfos 1 )
1684 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/captype 1 )
1685 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/dftest 1 )
1686 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/dumpcap 1 )
1687 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/editcap 1 )
1688 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/asn2deb 1 )
1689 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/idl2deb 1 )
1690 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/idl2wrs 1 )
1691 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/mergecap 1 )
1692 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/randpkt 1 )
1693 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/rawshark 1 )
1694 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/reordercap 1 )
1695 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/text2pcap 1 )
1696 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/tshark 1 )
1697 pod2manhtml( ${CMAKE_BINARY_DIR}/wireshark 1 )
1698 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/wireshark-filter 4 )
1699
1700 add_custom_target(
1701         auxiliary ALL
1702         DEPENDS
1703                 ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1704                 capinfos.html
1705                 captype.html
1706                 dftest.html
1707                 dumpcap.html
1708                 editcap.html
1709                 asn2deb.html
1710                 idl2deb.html
1711                 idl2wrs.html
1712                 mergecap.html
1713                 randpkt.html
1714                 rawshark.html
1715                 reordercap.html
1716                 text2pcap.html
1717                 tshark.html
1718                 wireshark.html
1719                 wireshark-filter.html
1720 )
1721 set_target_properties(auxiliary PROPERTIES FOLDER "Docs")
1722
1723 set(CLEAN_FILES
1724         ${wireshark_FILES}
1725         ${tshark_FILES}
1726         ${rawshark_FILES}
1727         ${dftest_FILES}
1728         ${randpkt_FILES}
1729         ${text2pcap_CLEAN_FILES}
1730         ${mergecap_FILES}
1731         ${capinfos_FILES}
1732         ${captype_FILES}
1733         ${editcap_FILES}
1734         ${dumpcap_FILES}
1735 )
1736
1737 if (WERROR)
1738         set_source_files_properties(
1739                 ${CLEAN_FILES}
1740                 PROPERTIES
1741                 COMPILE_FLAGS -Werror
1742         )
1743 endif()
1744
1745 install(
1746         FILES
1747                 ${INSTALL_FILES}
1748         DESTINATION
1749                 ${CMAKE_INSTALL_DATADIR}/${CPACK_PACKAGE_NAME}
1750 )
1751
1752 install(
1753         FILES
1754                 ${MAN1_FILES}
1755         DESTINATION
1756                 ${CMAKE_INSTALL_MANDIR}/man1
1757 )
1758
1759 install(
1760         FILES
1761                 ${MAN4_FILES}
1762         DESTINATION
1763                 ${CMAKE_INSTALL_MANDIR}/man4
1764 )
1765
1766 install(
1767         FILES
1768                 "${CMAKE_BINARY_DIR}/wireshark.pc"
1769         DESTINATION
1770                 ${CMAKE_INSTALL_LIBDIR}/pkgconfig
1771 )
1772
1773 install(
1774         DIRECTORY
1775                 ${INSTALL_DIRS}
1776         DIRECTORY_PERMISSIONS
1777                 OWNER_EXECUTE OWNER_WRITE OWNER_READ
1778                 GROUP_EXECUTE GROUP_READ
1779                 WORLD_EXECUTE WORLD_READ
1780         DESTINATION
1781                 ${CMAKE_INSTALL_DATADIR}/${CPACK_PACKAGE_NAME}
1782         PATTERN ".git" EXCLUDE
1783         PATTERN ".svn" EXCLUDE
1784         PATTERN "Makefile.*" EXCLUDE
1785         PATTERN "faq.py" EXCLUDE
1786 )
1787
1788 include( UseCheckAPI )
1789 CHECKAPI(
1790         ${TSHARK_TAP_SRC}
1791         ${WIRESHARK_SRC}
1792 )
1793
1794 set(CMAKE_INSTALL_MODULES_DIR ${CMAKE_INSTALL_LIBDIR}/@CPACK_PACKAGE_NAME@)
1795 configure_file("${CMAKE_MODULE_PATH}/WiresharkConfig.cmake.in" "${CMAKE_BINARY_DIR}/WiresharkConfig.cmake" @ONLY)
1796 configure_file("${CMAKE_MODULE_PATH}/WiresharkConfigVersion.cmake.in" "${CMAKE_BINARY_DIR}/WiresharkConfigVersion.cmake" @ONLY)
1797 install(
1798         FILES
1799                 ${CMAKE_MODULE_PATH}/FindGLIB2.cmake
1800                 ${CMAKE_MODULE_PATH}/FindWireshark.cmake
1801                 ${CMAKE_MODULE_PATH}/FindWSWinLibs.cmake
1802                 ${CMAKE_MODULE_PATH}/UseAsn2Wrs.cmake
1803                 ${CMAKE_MODULE_PATH}/LocatePythonModule.cmake
1804                 ${CMAKE_MODULE_PATH}/UseMakeDissectorReg.cmake
1805                 ${CMAKE_BINARY_DIR}/WiresharkConfig.cmake
1806                 ${CMAKE_BINARY_DIR}/WiresharkConfigVersion.cmake
1807         DESTINATION
1808                 ${CMAKE_INSTALL_MODULES_DIR}
1809 )
1810
1811 if(DOC_DIR)
1812         message(STATUS "Docdir install: ${DOC_DIR}")
1813         INSTALL(
1814                 DIRECTORY
1815                         ${CMAKE_BINARY_DIR}/docbook/
1816                 DIRECTORY_PERMISSIONS
1817                         OWNER_EXECUTE OWNER_WRITE OWNER_READ
1818                         GROUP_EXECUTE GROUP_READ
1819                         WORLD_EXECUTE WORLD_READ
1820                 DESTINATION
1821                         ${DOC_DIR}/guides
1822                 FILES_MATCHING
1823                 PATTERN "*.pdf"
1824         )
1825 endif()