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