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