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