Add Gettext to PACKAGELIST. Homebrew puts it in a nonstandard location.
[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 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 if(APPLE)
645         #
646         # We assume that APPLE means OS X so that we have the OS X
647         # frameworks.
648         #
649         set(HAVE_OS_X_FRAMEWORKS 1)
650         FIND_LIBRARY (APPLE_APPLICATION_SERVICES_LIBRARY ApplicationServices)
651         FIND_LIBRARY (APPLE_CORE_FOUNDATION_LIBRARY CoreFoundation)
652         FIND_LIBRARY (APPLE_SYSTEM_CONFIGURATION_LIBRARY SystemConfiguration)
653 endif()
654
655 if(WIN32)
656         set(WS_MSVC_NORETURN "__declspec(noreturn)")
657
658         # Disable deprecation
659         if(MSVC80 OR MSVC90)
660                 add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
661         endif()
662 else()
663         set(WS_MSVC_NORETURN " ")
664 endif()
665
666 configure_file(${CMAKE_SOURCE_DIR}/cmakeconfig.h.in ${CMAKE_BINARY_DIR}/config.h)
667
668 set( configure_input "Built with CMake ${CMAKE_VERSION}" )
669 set( VERSION ${PROJECT_VERSION} )
670
671 configure_file(
672         ${CMAKE_SOURCE_DIR}/packaging/macosx/Info.plist.in
673         ${CMAKE_SOURCE_DIR}/packaging/macosx/Info.plist
674         @ONLY)
675
676 include(FeatureSummary)
677 #SET_FEATURE_INFO(NAME DESCRIPTION [URL [COMMENT] ]
678 #FEATURE_SUMMARY(WHAT ALL) Requires removal of our local copy of FeatureSummary
679 PRINT_ENABLED_FEATURES()
680 PRINT_DISABLED_FEATURES()
681
682 link_directories(
683         ${CMAKE_BINARY_DIR}/ui
684         ${CMAKE_BINARY_DIR}/ui/gtk
685         ${CMAKE_BINARY_DIR}/ui/qt
686         ${CMAKE_BINARY_DIR}/codecs
687         ${CMAKE_BINARY_DIR}/epan
688         ${CMAKE_BINARY_DIR}/wiretap
689         ${CMAKE_BINARY_DIR}/wsutil
690 )
691
692 ADD_CUSTOM_TARGET(
693         svnversion ALL
694         COMMAND ${PERL_EXECUTABLE}
695                 ${CMAKE_CURRENT_SOURCE_DIR}/make-version.pl
696                 ${CMAKE_CURRENT_SOURCE_DIR}
697         DEPENDS
698                 ${CMAKE_CURRENT_SOURCE_DIR}/make-version.pl
699 )
700 set_target_properties(svnversion PROPERTIES FOLDER "Auxiliary")
701
702 ADD_CUSTOM_COMMAND(
703         OUTPUT  svnversion.h
704         COMMAND ${PERL_EXECUTABLE}
705                 ${CMAKE_CURRENT_SOURCE_DIR}/make-version.pl
706                 ${CMAKE_CURRENT_SOURCE_DIR}
707         DEPENDS
708                 ${CMAKE_CURRENT_SOURCE_DIR}/make-version.pl
709 )
710
711 if(UNIX)
712         set(PLATFORM_CAPTURE_SRC
713                 capture-pcap-util-unix.c
714         )
715 endif()
716
717 if(WIN32)
718         set(PLATFORM_CAPTURE_SRC
719                 capture_win_ifnames.c
720                 capture-wpcap.c
721                 capture_wpcap_packet.c
722         )
723         set(PLATFORM_UI_SRC
724                 ui/win32/console_win32.c
725                 ui/win32/file_dlg_win32.c
726                 ui/win32/print_win32.c
727         )
728 endif()
729
730 set(WTAP_PLUGIN_SOURCES
731         epan/plugins.c
732         epan/filesystem.c
733 )
734
735 set(SHARK_COMMON_CAPTURE_SRC
736         capture_ifinfo.c
737         capture_ui_utils.c
738 )
739
740 set(WIRESHARK_COMMON_SRC
741         ${PLATFORM_CAPTURE_SRC}
742         capture-pcap-util.c
743         cfile.c
744         cfutils.c
745         clopts_common.c
746         frame_tvbuff.c
747         svnversion.h
748         sync_pipe_write.c
749         version_info.c
750 )
751
752 set(TSHARK_TAP_SRC
753         ui/cli/tap-afpstat.c
754         ui/cli/tap-ansi_astat.c
755         ui/cli/tap-bootpstat.c
756         ui/cli/tap-camelcounter.c
757         ui/cli/tap-camelsrt.c
758         ui/cli/tap-comparestat.c
759         ui/cli/tap-dcerpcstat.c
760         ui/cli/tap-diameter-avp.c
761         ui/cli/tap-expert.c
762         ui/cli/tap-follow.c
763         ui/cli/tap-funnel.c
764         ui/cli/tap-gsm_astat.c
765         ui/cli/tap-h225counter.c
766         ui/cli/tap-h225rassrt.c
767         ui/cli/tap-hosts.c
768         ui/cli/tap-httpstat.c
769         ui/cli/tap-icmpstat.c
770         ui/cli/tap-icmpv6stat.c
771         ui/cli/tap-iostat.c
772         ui/cli/tap-iousers.c
773         ui/cli/tap-macltestat.c
774         ui/cli/tap-mgcpstat.c
775         ui/cli/tap-megacostat.c
776         ui/cli/tap-protocolinfo.c
777         ui/cli/tap-protohierstat.c
778         ui/cli/tap-radiusstat.c
779         ui/cli/tap-rlcltestat.c
780         ui/cli/tap-rpcstat.c
781         ui/cli/tap-rpcprogs.c
782         ui/cli/tap-rtp.c
783         ui/cli/tap-rtspstat.c
784         ui/cli/tap-scsistat.c
785         ui/cli/tap-sctpchunkstat.c
786         ui/cli/tap-sipstat.c
787         ui/cli/tap-smbsids.c
788         ui/cli/tap-smbstat.c
789         ui/cli/tap-stats_tree.c
790         ui/cli/tap-sv.c
791         ui/cli/tap-wspstat.c
792 )
793
794 set(INSTALL_DIRS
795         diameter
796         dtds
797         help
798         radius
799         tpncp
800         wimaxasncp
801 )
802
803 set(INSTALL_FILES
804         ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
805         COPYING
806         ${CMAKE_BINARY_DIR}/capinfos.html
807         cfilters
808         colorfilters
809         dfilters
810         ${CMAKE_BINARY_DIR}/dftest.html
811         ${CMAKE_BINARY_DIR}/dumpcap.html
812         ${CMAKE_BINARY_DIR}/editcap.html
813         ${CMAKE_BINARY_DIR}/asn2deb.html
814         ${CMAKE_BINARY_DIR}/idl2deb.html
815         ${CMAKE_BINARY_DIR}/idl2wrs.html
816         ipmap.html
817         manuf
818         ${CMAKE_BINARY_DIR}/mergecap.html
819         pdml2html.xsl
820         ${CMAKE_BINARY_DIR}/randpkt.html
821         ${CMAKE_BINARY_DIR}/rawshark.html
822         ${CMAKE_BINARY_DIR}/reordercap.html
823         services
824         smi_modules
825         ${CMAKE_BINARY_DIR}/text2pcap.html
826         ${CMAKE_BINARY_DIR}/tshark.html
827         ${CMAKE_BINARY_DIR}/wireshark-filter.html
828         ${CMAKE_BINARY_DIR}/wireshark.html
829         docbook/ws.css
830 )
831
832 set(LIBEPAN_LIBS
833 #               @NSL_LIBS@      # -lnsl
834 #               @SOCKET_LIBS@   # -lsocket
835 #               @SSL_LIBS@      # -lcrypto
836                 epan
837 #               $(plugin_ldadd) # in case of static
838                 ${AIRPCAP_LIBRARIES}
839                 ${PCAP_LIBRARIES}
840                 ${CARES_LIBRARIES}
841                 ${ADNS_LIBRARIES}
842                 ${KERBEROS_LIBRARIES}
843                 ${LUA_LIBRARIES}
844                 ${PYTHON_LIBRARIES}
845                 ${GEOIP_LIBRARIES}
846                 ${GCRYPT_LIBRARIES}
847                 ${GNUTLS_LIBRARIES}
848                 ${SMI_LIBRARIES}
849                 ${ZLIB_LIBRARIES}
850                 ${M_LIBRARIES}
851 )
852
853 if( (BUILD_wireshark AND GTK_FOUND) OR (BUILD_qtshark AND QT_FOUND) )
854         set(wireshark_FILES
855                 airpcap_loader.c
856                 capture.c
857                 capture_info.c
858                 capture_opts.c
859                 capture_sync.c
860                 color_filters.c
861                 file.c
862                 fileset.c
863                 filters.c
864                 iface_monitor.c
865                 proto_hier_stats.c
866                 summary.c
867                 ws80211_utils.c
868                 ${SHARK_COMMON_CAPTURE_SRC}
869                 ${WIRESHARK_COMMON_SRC}
870                 ${PLATFORM_UI_SRC}
871         )
872 endif()
873
874 if(BUILD_wireshark AND GTK_FOUND)
875         set(wireshark_LIBS
876                 gtkui
877                 ui
878                 ${GTK2_LIBRARIES}
879                 ${GTK3_LIBRARIES}
880                 ${GTHREAD2_LIBRARIES}
881                 codecs
882                 ${PORTAUDIO_LIBRARIES}
883                 ${LIBEPAN_LIBS}
884                 ${APPLE_APPLICATION_SERVICES_LIBRARY}
885                 ${APPLE_CORE_SERVICES_LIBRARY}
886                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
887                 ${NL_LIBRARIES}
888                 ${WIN_COMCTL32_LIBRARY}
889         )
890         # qtshark and wireshark share wireshark_FILES
891
892         add_executable(wireshark ${wireshark_FILES})
893         add_dependencies(wireshark svnversion)
894         set_target_properties(wireshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
895         set_target_properties(wireshark PROPERTIES FOLDER "Executables")
896         target_link_libraries(wireshark ${wireshark_LIBS})
897         install(TARGETS wireshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
898 endif()
899
900 if(BUILD_qtshark AND QT_FOUND)
901         set(qtshark_LIBS
902                 qtui
903                 ui
904                 ${QT_LIBRARIES}
905                 ${GTHREAD2_LIBRARIES}
906                 codecs
907                 ${LIBEPAN_LIBS}
908                 ${APPLE_APPLICATION_SERVICES_LIBRARY}
909                 ${APPLE_CORE_FOUNDATION_LIBRARY}
910                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
911                 ${NL_LIBRARIES}
912         )
913         # qtshark and wireshark share wireshark_FILES
914
915         add_executable(qtshark ${wireshark_FILES})
916         add_dependencies(qtshark svnversion)
917         set_target_properties(qtshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
918         set_target_properties(qtshark PROPERTIES FOLDER "Executables")
919         target_link_libraries(qtshark ${qtshark_LIBS})
920         install(TARGETS qtshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
921 endif()
922
923 register_tap_files(tshark-tap-register.c
924         tshark-taps
925         ${TSHARK_TAP_SRC}
926 )
927
928 if(BUILD_tshark)
929         set(tshark_LIBS
930                 ui
931                 ${LIBEPAN_LIBS}
932                 ${APPLE_CORE_FOUNDATION_LIBRARY}
933                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
934         )
935         set(tshark_FILES
936                 capture_opts.c
937                 capture_sync.c
938                 tshark-tap-register.c
939                 tshark.c
940                 ${TSHARK_TAP_SRC}
941                 ${SHARK_COMMON_CAPTURE_SRC}
942                 ${WIRESHARK_COMMON_SRC}
943         )
944         add_executable(tshark ${tshark_FILES})
945         add_dependencies(tshark svnversion)
946         set_target_properties(tshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
947         set_target_properties(tshark PROPERTIES FOLDER "Executables")
948         target_link_libraries(tshark ${tshark_LIBS})
949         install(TARGETS tshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
950 endif()
951
952 if(BUILD_rawshark AND PCAP_FOUND)
953         set(rawshark_LIBS
954                 ${LIBEPAN_LIBS}
955                 ${APPLE_CORE_FOUNDATION_LIBRARY}
956                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
957         )
958         set(rawshark_FILES
959                 ${WIRESHARK_COMMON_SRC}
960                 rawshark.c
961                 ui/util.c
962         )
963         add_executable(rawshark ${rawshark_FILES})
964         add_dependencies(rawshark svnversion)
965         set_target_properties(rawshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
966         set_target_properties(rawshark PROPERTIES FOLDER "Executables")
967         target_link_libraries(rawshark ${rawshark_LIBS})
968         install(TARGETS rawshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
969 endif()
970
971 if(BUILD_dftest)
972         set(dftest_LIBS
973                 ${LIBEPAN_LIBS}
974         )
975         set(dftest_FILES
976                 dftest.c
977                 ui/util.c
978         )
979         add_executable(dftest ${dftest_FILES})
980         set_target_properties(dftest PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
981         set_target_properties(dftest PROPERTIES FOLDER "Executables")
982         target_link_libraries(dftest ${dftest_LIBS})
983         install(TARGETS dftest RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
984 endif()
985
986 if(BUILD_randpkt)
987         set(randpkt_LIBS
988                 wiretap
989                 wsutil
990                 ${M_LIBRARIES}
991                 ${PCAP_LIBRARIES}
992 #               @SOCKET_LIBS@
993 #               @NSL_LIBS@
994                 ${CARES_LIBRARIES}
995                 ${ADNS_LIBRARIES}
996                 ${ZLIB_LIBRARIES}
997         )
998         set(randpkt_FILES
999                 randpkt.c
1000         )
1001         add_executable(randpkt ${randpkt_FILES})
1002         set_target_properties(randpkt PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1003         set_target_properties(randpkt PROPERTIES FOLDER "Executables")
1004         target_link_libraries(randpkt ${randpkt_LIBS})
1005         install(TARGETS randpkt RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1006 endif()
1007
1008 if(BUILD_text2pcap)
1009         set(text2pcap_LIBS
1010                 wsutil
1011                 ${M_LIBRARIES}
1012                 ${ZLIB_LIBRARIES}
1013         )
1014         set(text2pcap_CLEAN_FILES
1015                 text2pcap.c
1016                 pcapio.c
1017         )
1018         set(text2pcap_FILES
1019                 ${text2pcap_CLEAN_FILES}
1020         )
1021         add_lex_files(text2pcap_FILES
1022                 text2pcap-scanner.l
1023         )
1024         add_executable(text2pcap ${text2pcap_FILES})
1025         add_dependencies(text2pcap svnversion)
1026         set_target_properties(text2pcap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1027         set_target_properties(text2pcap PROPERTIES FOLDER "Executables")
1028         target_link_libraries(text2pcap ${text2pcap_LIBS})
1029         install(TARGETS text2pcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1030 endif()
1031
1032 if(BUILD_mergecap)
1033         set(mergecap_LIBS
1034                 wiretap
1035                 ${ZLIB_LIBRARIES}
1036                 ${CMAKE_DL_LIBS}
1037         )
1038         set(mergecap_FILES
1039                 mergecap.c
1040                 svnversion.h
1041                 ${WTAP_PLUGIN_SOURCES}
1042         )
1043         add_executable(mergecap ${mergecap_FILES})
1044         add_dependencies(mergecap svnversion)
1045         set_target_properties(mergecap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1046         set_target_properties(mergecap PROPERTIES FOLDER "Executables")
1047         target_link_libraries(mergecap ${mergecap_LIBS})
1048         install(TARGETS mergecap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1049 endif()
1050
1051 if(BUILD_reordercap)
1052         set(reordercap_LIBS
1053                 wiretap
1054                 ${ZLIB_LIBRARIES}
1055                 ${CMAKE_DL_LIBS}
1056         )
1057         set(reordercap_FILES
1058                 reordercap.c
1059                 svnversion.h
1060                 ${WTAP_PLUGIN_SOURCES}
1061         )
1062         add_executable(reordercap ${reordercap_FILES})
1063         add_dependencies(reordercap svnversion)
1064         set_target_properties(reordercap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1065         set_target_properties(reordercap PROPERTIES FOLDER "Executables")
1066         target_link_libraries(reordercap ${reordercap_LIBS})
1067         install(TARGETS reordercap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1068 endif()
1069
1070 if(BUILD_capinfos)
1071         set(capinfos_LIBS
1072                 wiretap
1073                 wsutil
1074                 ${ZLIB_LIBRARIES}
1075                 ${GCRYPT_LIBRARIES}
1076                 ${CMAKE_DL_LIBS}
1077         )
1078         set(capinfos_FILES
1079                 capinfos.c
1080                 ${WTAP_PLUGIN_SOURCES}
1081         )
1082         add_executable(capinfos ${capinfos_FILES})
1083         add_dependencies(capinfos svnversion)
1084         set_target_properties(capinfos PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1085         set_target_properties(capinfos PROPERTIES FOLDER "Executables")
1086         target_link_libraries(capinfos ${capinfos_LIBS})
1087         install(TARGETS capinfos RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1088 endif()
1089
1090 if(BUILD_editcap)
1091         set(editcap_LIBS
1092                 wiretap
1093                 ${ZLIB_LIBRARIES}
1094                 ${CMAKE_DL_LIBS}
1095         )
1096         set(editcap_FILES
1097                 editcap.c
1098                 ${WTAP_PLUGIN_SOURCES}
1099         )
1100         add_executable(editcap ${editcap_FILES})
1101         add_dependencies(editcap svnversion)
1102         set_target_properties(editcap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1103         set_target_properties(editcap PROPERTIES FOLDER "Executables")
1104         target_link_libraries(editcap ${editcap_LIBS})
1105         install(TARGETS editcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1106 endif()
1107
1108 if(BUILD_dumpcap AND PCAP_FOUND)
1109         set(dumpcap_LIBS
1110                 wsutil
1111                 ${PCAP_LIBRARIES}
1112                 ${CAP_LIBRARIES}
1113 #               @SOCKET_LIBS@
1114 #               @NSL_LIBS@
1115                 ${GLIB2_LIBRARIES}
1116                 ${GTHREAD2_LIBRARIES}
1117                 ${ZLIB_LIBRARIES}
1118                 ${APPLE_CORE_FOUNDATION_LIBRARY}
1119                 ${APPLE_SYSTEM_CONFIGURATION_LIBRARY}
1120                 ${NL_LIBRARIES}
1121         )
1122         set(dumpcap_FILES
1123                 svnversion.h
1124                 capture_opts.c
1125                 capture-pcap-util.c
1126                 capture_stop_conditions.c
1127                 cfutils.c
1128                 clopts_common.c
1129                 conditions.c
1130                 dumpcap.c
1131                 pcapio.c
1132                 ringbuffer.c
1133                 sync_pipe_write.c
1134                 version_info.c
1135                 ws80211_utils.c
1136                 ${PLATFORM_CAPTURE_SRC}
1137         )
1138         add_executable(dumpcap ${dumpcap_FILES})
1139         add_dependencies(dumpcap svnversion)
1140         set_target_properties(dumpcap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
1141         set_target_properties(dumpcap PROPERTIES FOLDER "Executables")
1142         target_link_libraries(dumpcap ${dumpcap_LIBS})
1143         install(TARGETS dumpcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1144 endif()
1145
1146 ADD_CUSTOM_COMMAND(
1147         OUTPUT  ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1148         COMMAND ${PERL_EXECUTABLE}
1149                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1150                 ${CMAKE_SOURCE_DIR}/doc/make-authors-short.pl
1151                 < ${CMAKE_SOURCE_DIR}/AUTHORS
1152                 > ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1153         DEPENDS
1154                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1155                 ${CMAKE_SOURCE_DIR}/doc/make-authors-short.pl
1156                 ${CMAKE_SOURCE_DIR}/AUTHORS
1157 )
1158
1159 ADD_CUSTOM_COMMAND(
1160         OUTPUT  ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1161                 ${CMAKE_BINARY_DIR}/wireshark.pod
1162         COMMAND ${PERL_EXECUTABLE}
1163                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1164                 ${CMAKE_SOURCE_DIR}/doc/make-authors-format.pl
1165                 < ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1166                 > ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1167         COMMAND cat
1168                 ${CMAKE_SOURCE_DIR}/doc/wireshark.pod.template
1169                 ${CMAKE_BINARY_DIR}/AUTHORS-SHORT-FORMAT
1170                 > ${CMAKE_BINARY_DIR}/wireshark.pod
1171         DEPENDS
1172                 ${CMAKE_SOURCE_DIR}/doc/perlnoutf.pl
1173                 ${CMAKE_SOURCE_DIR}/doc/make-authors-format.pl
1174                 ${CMAKE_BINARY_DIR}/AUTHORS-SHORT
1175                 ${CMAKE_SOURCE_DIR}/doc/wireshark.pod.template
1176 )
1177
1178 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/capinfos 1 )
1179 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/dftest 1 )
1180 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/dumpcap 1 )
1181 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/editcap 1 )
1182 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/asn2deb 1 )
1183 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/idl2deb 1 )
1184 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/idl2wrs 1 )
1185 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/mergecap 1 )
1186 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/randpkt 1 )
1187 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/rawshark 1 )
1188 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/reordercap 1 )
1189 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/text2pcap 1 )
1190 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/tshark 1 )
1191 pod2manhtml( ${CMAKE_BINARY_DIR}/wireshark 1 )
1192 pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/wireshark-filter 4 )
1193
1194 add_custom_target(
1195         auxiliary ALL
1196         DEPENDS
1197                 AUTHORS-SHORT
1198                 capinfos.html
1199                 dftest.html
1200                 dumpcap.html
1201                 editcap.html
1202                 asn2deb.html
1203                 idl2deb.html
1204                 idl2wrs.html
1205                 mergecap.html
1206                 randpkt.html
1207                 rawshark.html
1208                 reordercap.html
1209                 text2pcap.html
1210                 tshark.html
1211                 wireshark.html
1212                 wireshark-filter.html
1213 )
1214 set_target_properties(auxiliary PROPERTIES FOLDER "Docs")
1215
1216 set(MAN1_FILES
1217         ${CMAKE_BINARY_DIR}/capinfos.1
1218         ${CMAKE_BINARY_DIR}/dftest.1
1219         ${CMAKE_BINARY_DIR}/dumpcap.1
1220         ${CMAKE_BINARY_DIR}/editcap.1
1221         ${CMAKE_BINARY_DIR}/idl2wrs.1
1222         ${CMAKE_BINARY_DIR}/mergecap.1
1223         ${CMAKE_BINARY_DIR}/randpkt.1
1224         ${CMAKE_BINARY_DIR}/rawshark.1
1225         ${CMAKE_BINARY_DIR}/reordercap.1
1226         ${CMAKE_BINARY_DIR}/text2pcap.1
1227         ${CMAKE_BINARY_DIR}/tshark.1
1228         ${CMAKE_BINARY_DIR}/wireshark.1
1229 )
1230
1231 set(MAN4_FILES
1232         ${CMAKE_BINARY_DIR}/wireshark-filter.4
1233 )
1234
1235 set(CLEAN_FILES
1236         ${wireshark_FILES}
1237         ${tshark_FILES}
1238         ${rawshark_FILES}
1239         ${dftest_FILES}
1240         ${randpkt_FILES}
1241         ${text2pcap_CLEAN_FILES}
1242         ${mergecap_FILES}
1243         ${capinfos_FILES}
1244         ${editcap_FILES}
1245         ${dumpcap_FILES}
1246 )
1247
1248 if (WERROR)
1249         set_source_files_properties(
1250                 ${CLEAN_FILES}
1251                 PROPERTIES
1252                 COMPILE_FLAGS -Werror
1253         )
1254 endif()
1255
1256 install(
1257         FILES
1258                 ${INSTALL_FILES}
1259         DESTINATION
1260                 ${CMAKE_INSTALL_DATADIR}/${CPACK_PACKAGE_NAME}
1261 )
1262
1263 install(
1264         FILES
1265                 ${MAN1_FILES}
1266         DESTINATION
1267                 ${CMAKE_INSTALL_MANDIR}/man1
1268 )
1269
1270 install(
1271         FILES
1272                 ${MAN4_FILES}
1273         DESTINATION
1274                 ${CMAKE_INSTALL_MANDIR}/man4
1275 )
1276
1277 install(
1278         DIRECTORY
1279                 ${INSTALL_DIRS}
1280         DIRECTORY_PERMISSIONS
1281                 OWNER_EXECUTE OWNER_WRITE OWNER_READ
1282                 GROUP_EXECUTE GROUP_READ
1283                 WORLD_EXECUTE WORLD_READ
1284         DESTINATION
1285                 ${CMAKE_INSTALL_DATADIR}/${CPACK_PACKAGE_NAME}
1286         PATTERN ".svn" EXCLUDE
1287         PATTERN "Makefile.*" EXCLUDE
1288         PATTERN "faq.py" EXCLUDE
1289 )
1290
1291
1292 if(DOC_DIR)
1293         message(STATUS "Docdir install: ${DOC_DIR}")
1294         INSTALL(
1295                 DIRECTORY
1296                         ${CMAKE_BINARY_DIR}/docbook/
1297                 DIRECTORY_PERMISSIONS
1298                         OWNER_EXECUTE OWNER_WRITE OWNER_READ
1299                         GROUP_EXECUTE GROUP_READ
1300                         WORLD_EXECUTE WORLD_READ
1301                 DESTINATION
1302                         ${DOC_DIR}/guides
1303                 FILES_MATCHING
1304                 PATTERN "*.pdf"
1305         )
1306 endif()