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