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