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