16c4915bf0c58cb71b0a4b7f86f35b6bbb89f8fe
[obnox/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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22 #
23
24 project(wireshark C)
25
26 cmake_minimum_required(VERSION 2.6)
27
28 #Where to find local cmake scripts
29 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
30 INCLUDE(UseLemon)
31
32 # Under linux the release mode (CMAKE_BUILD_TYPE=release) defines NDEBUG
33
34 # Disable this later. Alternative: "make VERBOSE=1"
35 set(CMAKE_VERBOSE_MAKEFILE ON)
36
37 set(BUILD_SHARED_LIBS ON)
38
39 #Defines CMAKE_INSTALL_BINDIR, CMAKE_INSTALL_DATADIR, etc ...
40 include(CMakeInstallDirs)
41
42 include_directories(
43         ${CMAKE_BINARY_DIR}
44         ${CMAKE_BINARY_DIR}/epan
45         ${CMAKE_BINARY_DIR}/epan/wslua
46         ${CMAKE_BINARY_DIR}/epan/wspython
47         ${CMAKE_SOURCE_DIR}
48         ${CMAKE_SOURCE_DIR}/epan
49         ${CMAKE_SOURCE_DIR}/epan/dfilter
50         ${CMAKE_SOURCE_DIR}/epan/dissectors
51         ${CMAKE_SOURCE_DIR}/epan/ftypes
52         ${CMAKE_SOURCE_DIR}/epan/wslua
53         ${CMAKE_SOURCE_DIR}/epan/wspython
54         ${CMAKE_SOURCE_DIR}/tools/lemon
55         ${CMAKE_SOURCE_DIR}/wiretap
56         ${CMAKE_SOURCE_DIR}/wsutil
57 )
58
59 #Where to put libraries
60 if(NOT LIBRARY_OUTPUT_PATH)
61         set(LIBRARY_OUTPUT_PATH ${wireshark_BINARY_DIR}/lib CACHE INTERNAL
62                    "Single output directory for building all libraries.")
63 endif()
64
65 option(BUILD_wireshark   "Build the GUI version of Wireshark" ON)
66 option(BUILD_tshark      "Build tshark" ON)
67 option(BUILD_rawshark    "Build rawshark" ON)
68 option(BUILD_dumpcap     "Build dumpcap" ON)
69 option(BUILD_text2pcap   "Build text2pcap" ON)
70 option(BUILD_mergecap    "Build mergecap" ON)
71 option(BUILD_editcap     "Build editcap" ON)
72 option(BUILD_capinfos    "Build capinfos" ON)
73 option(BUILD_randpkt     "Build randpkt" ON)
74 option(BUILD_dftest      "Build dftest" ON)
75
76
77 option(ENABLE_EXTRA_GCC_CHECKS "Do additional -W checks in GCC" OFF)
78 option(ENABLE_AIRPCAP    "Enable Airpcap support" ON)
79 # todo
80 option(ENABLE_STATIC     "Build a static version of Wireshark" OFF)
81
82 option(ENABLE_CARES      "Build with c_ares support" OFF)
83 option(ENABLE_ADNS       "Build with adns support" ON)
84 option(ENABLE_PCRE       "Build with pcre support" ON)
85 option(ENABLE_PORTAUDIO  "Build with portaudio support" ON)
86 option(ENABLE_Z          "Build with zlib compression support" ON)
87 option(ENABLE_LUA        "Build with lua dissector support" ON)
88 option(ENABLE_SMI        "Build with smi snmp support" ON)
89 # todo
90 option(ENABLE_GNUTLS     "Build with GNU TLS support" ON)
91 option(ENABLE_GCRYPT     "Build with GNU crypto support" ON)
92 option(ENABLE_KRB5       "Build with MIT Kerberos 5 support" ON)
93 option(ENABLE_GEOIP      "Build with GeoIP support" ON)
94 option(ENABLE_PYTHON     "Build with python dissector support" ON)
95 option(ENABLE_CAP        "Build with posix capabilities support" OFF)
96
97
98 if(ENABLE_EXTRA_GCC_CHECKS)
99         set(WIRESHARK_EXTRA_GCC_FLAGS -Wcast-qual -Wcast-align -Wbad-function-cast
100                   -pedantic -Wstrict-prototypes -Wmissing-declarations -Wwrite-strings)
101 endif()
102
103 add_definitions(
104         -DHAVE_CONFIG_H
105         -DPACKAGE=\"wireshark\"
106         -DNEW_PACKET_LIST
107 )
108
109 if(CMAKE_COMPILER_IS_GNUCC)
110         add_definitions(
111                 -D_U_=__attribute__\(\(unused\)\)
112                 -Wall -Wpointer-arith -W
113                 ${WIRESHARK_EXTRA_GCC_FLAGS}
114         )
115 else()
116         add_definitions(-D_U_=\"\")
117 endif()
118
119 #The minimum package list
120 set(PACKAGELIST GLIB2 PCAP MATH LEX YACC Perl SH PythonInterp HtmlViewer ${PACKAGELIST})
121
122 #Build the gui ?
123 if(BUILD_wireshark)
124         set(PACKAGELIST GTK2 ${PACKAGELIST})
125 endif()
126
127 # SMI SNMP
128 if(ENABLE_SMI)
129         set(PACKAGELIST SMI ${PACKAGELIST})
130 endif()
131
132 # GNU crypto
133 if(ENABLE_GCRYPT)
134         set(PACKAGELIST GCRYPT ${PACKAGELIST})
135 endif()
136
137 # GNU SSL/TLS support
138 if(ENABLE_GNUTLS)
139         set(PACKAGELIST GNUTLS ${PACKAGELIST})
140 endif()
141
142 # Regular expressions lib
143 if(ENABLE_PCRE)
144         set(PACKAGELIST PCRE ${PACKAGELIST})
145 endif()
146
147 # Portable audio
148 if(ENABLE_PORTAUDIO)
149         set(PACKAGELIST PORTAUDIO ${PACKAGELIST})
150 endif()
151
152 # C Asynchronouse resolver
153 if(ENABLE_CARES)
154         set(PACKAGELIST CARES ${PACKAGELIST})
155 endif()
156
157 #Gnu asynchronous DNS
158 if(ENABLE_ADNS)
159         set(PACKAGELIST ADNS ${PACKAGELIST})
160 endif()
161
162 # Zlib compression
163 if(ENABLE_Z)
164         set(PACKAGELIST Z ${PACKAGELIST})
165 endif()
166
167 # Lua 5.1 dissectors
168 if(ENABLE_LUA)
169         set(PACKAGELIST LUA ${PACKAGELIST})
170 endif()
171
172 set(PROGLIST text2pcap mergecap capinfos editcap dumpcap)
173
174 #Let's loop the package list
175 foreach(PACKAGE ${PACKAGELIST})
176         find_package(${PACKAGE} REQUIRED)
177         message(${PACKAGE}_FOUND)
178         if (${PACKAGE}_FOUND)
179                 set(HAVE_LIB${PACKAGE} "1")
180                 include_directories(${${PACKAGE}_INCLUDE_DIRS})
181                 message(STATUS "${PACKAGE} includes: ${${PACKAGE}_INCLUDE_DIRS}")
182                 message(STATUS "${PACKAGE} libs: ${${PACKAGE}_LIBRARIES}")
183         endif()
184 endforeach()
185
186
187 if(HAVE_LIBLUA)
188         set(HAVE_LUA_H 1)
189         set(HAVE_LUA_5_1 1)
190 endif()
191 if(HAVE_LIBCARES)
192         set(HAVE_C_ARES 1)
193 elseif(HAVE_LIBADNS)
194         set(HAVE_GNU_ADNS 1)
195 endif()
196 if(ENABLE_AIRPCAP)
197         set(HAVE_AIRPCAP 1)
198 endif()
199
200 #packaging
201 set(CPACK_PACKAGE_NAME wireshark)
202 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "capture packet")
203 set(CPACK_PACKAGE_VENDOR "wireshark")
204 set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
205 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING")
206 set(CPACK_PACKAGE_VERSION_MAJOR "1")
207 set(CPACK_PACKAGE_VERSION_MINOR "3")
208 set(CPACK_PACKAGE_VERSION_PATCH "0")
209 set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
210
211 set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
212 set(CPACK_PACKAGE_INSTALL_DIRECTORY "/usr")
213 set(CPACK_GENERATOR "TGZ")
214 set(CPACK_SOURCE_GENERATOR "TGZ")
215
216 include(ConfigureChecks.cmake)
217
218 #Big or little endian ?
219 include(TestBigEndian)
220 test_big_endian(WORDS_BIGENDIAN)
221
222 set(DATAFILE_DIR "${CMAKE_INSTALL_PREFIX}/share/${CPACK_PACKAGE_NAME}")
223
224 #Platform specific
225 if(UNIX)
226         set(WS_VAR_IMPORT "extern")
227 endif()
228
229 if(APPLE)
230 #TODO verify that APPLE implies HAVE_OS_X_FRAMEWORKS
231         set(HAVE_OS_X_FRAMEWORKS 1)
232 endif()
233
234 if(WIN32)
235         add_definitions(-DHAVE_WIN32_LIBWIRESHARK_LIB -D_NEED_VAR_IMPORT_)
236         set(WS_VAR_IMPORT "__declspec(dllimport) extern")
237
238         # Disable deprecation
239         if(MSVC80 OR MSVC90)
240                 add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
241         endif()
242 endif()
243
244
245 add_subdirectory( epan )
246 add_subdirectory( gtk )
247 add_subdirectory( codecs )
248 add_subdirectory( wiretap )
249 add_subdirectory( wsutil )
250
251 configure_file(${CMAKE_SOURCE_DIR}/cmakeconfig.h.in ${CMAKE_BINARY_DIR}/config.h)
252
253 link_directories(
254         gtk
255         codecs
256         epan
257         wiretap
258         wsutil
259 )
260
261 ADD_CUSTOM_COMMAND(
262         OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/svnversion.h
263         COMMAND ${PERL} ${CMAKE_CURRENT_SOURCE_DIR}/make-version.pl
264           ${CMAKE_CURRENT_SOURCE_DIR}
265 )
266 SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_BINARY_DIR}/svnversion.h GENERATED)
267
268 # Create the necessary tools
269 set(lemon_FILES
270         tools/lemon/lemon.c
271 )
272 set(lemon_LIBS
273         # Do we need something here on any platform?
274 )
275 add_executable(lemon ${lemon_FILES})
276 target_link_libraries(lemon ${lemon_LIBS})
277 # but don't install
278
279 ADD_CUSTOM_COMMAND(
280         OUTPUT tshark-tap-register.c
281         COMMAND ${SHELL}
282           ${CMAKE_SOURCE_DIR}/make-tapreg-dotc
283           tshark-tap-register.c
284           ${CMAKE_CURRENT_SOURCE_DIR}
285           ${TSHARK_TAP_SRC}
286         DEPENDS
287           ${CMAKE_SOURCE_DIR}/make-tapreg-dotc
288           ${TSHARK_TAP_SRC}
289 )
290
291 ADD_CUSTOM_COMMAND(
292         OUTPUT ps.c
293         COMMAND ${PYTHON_EXECUTABLE}
294           ${CMAKE_CURRENT_SOURCE_DIR}/rdps.py
295           ${CMAKE_CURRENT_SOURCE_DIR}/print.ps
296           ps.c
297         DEPENDS
298           ${CMAKE_CURRENT_SOURCE_DIR}/rdps.py
299           ${CMAKE_CURRENT_SOURCE_DIR}/print.ps
300 )
301
302 if(UNIX)
303         set(PLATFORM_SRC
304                 capture-pcap-util-unix.c
305         )
306 endif()
307
308 if(WIN32)
309         set(PLATFORM_SRC
310                 capture-wpcap.c capture_wpcap_packet.c
311         )
312 endif()
313
314 set(WIRESHARK_COMMON_SRC
315         ${PLATFORM_SRC}
316         capture_errs.c
317         capture-pcap-util.c
318         capture_ui_utils.c
319         cfile.c
320         clopts_common.c
321         disabled_protos.c
322         packet-range.c
323         print.c
324         ps.c
325         sync_pipe_write.c
326         timestats.c
327         util.c
328         tap-megaco-common.c
329         tap-rtp-common.c
330         version_info.c
331 )
332
333 set(TSHARK_TAP_SRC
334         tap-afpstat.c
335         tap-ansi_astat.c
336         tap-bootpstat.c
337         tap-camelcounter.c
338         tap-camelsrt.c
339         tap-comparestat.c
340         tap-dcerpcstat.c
341         tap-funnel.c
342         tap-gsm_astat.c
343         tap-h225counter.c
344         tap-h225rassrt.c
345         tap-httpstat.c
346         tap-iostat.c
347         tap-iousers.c
348         tap-mgcpstat.c
349         tap-megacostat.c
350         tap-protocolinfo.c
351         tap-protohierstat.c
352         tap-radiusstat.c
353         tap-rpcstat.c
354         tap-rpcprogs.c
355         tap-rtp.c
356         tap-sctpchunkstat.c
357         tap-sipstat.c
358         tap-smbsids.c
359         tap-smbstat.c
360         tap-stats_tree.c
361         tap-wspstat.c
362 )
363
364 set(LIBEPAN_LIBS
365 #               $(wireshark_optional_objects)
366                 wiretap
367                 wsutil
368                 epan
369 #               @INET_PTON_LO@
370 #               @INET_NTOP_LO@
371 #               @SSL_LIBS@
372 #               $(plugin_ldadd)
373                 ${PCRE_LIBRARIES}
374                 ${GLIB2_LIBRARIES}
375                 ${MATH_LIBRARIES}
376                 ${PCAP_LIBRARIES}
377 #               @SOCKET_LIBS@
378 #               @NSL_LIBS@
379                 ${CARES_LIBRARIES}
380                 ${ADNS_LIBRARIES}
381 #               @KRB5_LIBS@
382 #               @FRAMEWORKS@
383                 ${LUA_LIBRARIES}
384                 ${GCRYPT_LIBRARIES}
385                 ${GNUTLS_LIBRARIES}
386                 ${SMI_LIBRARIES}
387                 ${Z_LIBRARIES}
388 )
389
390 if(BUILD_wireshark)
391         set(wireshark_LIBS
392                 ui
393                 ${GTK2_LIBRARIES}
394                 codecs
395                 ${PORTAUDIO_LIBRARIES}
396                 ${LIBEPAN_LIBS}
397         )
398         set(wireshark_FILES
399                 airpcap_loader.c
400                 alert_box.c
401                 capture.c
402                 capture_info.c
403                 capture_opts.c
404                 capture_sync.c
405                 color_filters.c
406                 file.c
407                 fileset.c
408                 filters.c
409                 g711.c
410                 merge.c
411                 proto_hier_stats.c
412                 summary.c
413                 tempfile.c
414                 ${WIRESHARK_COMMON_SRC}
415         )
416         add_executable(wireshark ${wireshark_FILES})
417         target_link_libraries(wireshark ${wireshark_LIBS})
418         install(TARGETS wireshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
419 endif()
420
421 if(BUILD_tshark)
422         set(tshark_LIBS
423                 ${LIBEPAN_LIBS}
424         )
425         set(tshark_FILES
426                 capture_opts.c
427                 capture_sync.c
428                 tempfile.c
429                 tshark-tap-register.c
430                 tshark.c
431                 ${TSHARK_TAP_SRC}
432                 ${WIRESHARK_COMMON_SRC}
433         )
434         add_executable(tshark ${tshark_FILES})
435         target_link_libraries(tshark ${tshark_LIBS})
436         install(TARGETS tshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
437 endif()
438
439 if(BUILD_rawshark)
440         set(rawshark_LIBS
441                 ${LIBEPAN_LIBS}
442         )
443         set(rawshark_FILES
444                 ${WIRESHARK_COMMON_SRC}
445                 rawshark.c
446         )
447         add_executable(rawshark ${rawshark_FILES})
448         target_link_libraries(rawshark ${rawshark_LIBS})
449         install(TARGETS rawshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
450 endif()
451
452 if(BUILD_dftest)
453         set(dftest_LIBS
454                 ${LIBEPAN_LIBS}
455         )
456         set(dftest_FILES
457                 dftest.c
458                 util.c
459         )
460         add_executable(dftest ${dftest_FILES})
461         target_link_libraries(dftest ${dftest_LIBS})
462         install(TARGETS dftest RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
463 endif()
464
465 if(BUILD_randpkt)
466         set(randpkt_LIBS
467                 wiretap
468                 wsutil
469                 ${GLIB2_LIBRARIES}
470                 ${MATH_LIBRARIES}
471                 ${PCAP_LIBRARIES}
472 #               @SOCKET_LIBS@
473 #               @NSL_LIBS@
474                 ${CARES_LIBRARIES}
475                 ${ADNS_LIBRARIES}
476                 ${Z_LIBRARIES}
477         )
478         set(randpkt_FILES
479                 randpkt.c
480         )
481         add_executable(randpkt ${randpkt_FILES})
482         target_link_libraries(randpkt ${randpkt_LIBS})
483         install(TARGETS randpkt RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
484 endif()
485
486 if(BUILD_text2pcap)
487         set(text2pcap_LIBS
488                 wiretap
489                 wsutil
490                 ${GLIB2_LIBRARIES}
491                 ${MATH_LIBRARIES}
492                 ${Z_LIBRARIES}
493         )
494         set(text2pcap_FILES
495                 text2pcap.c
496         )
497         add_lex_files(text2pcap_FILES
498                 text2pcap-scanner.l
499         )
500         add_executable(text2pcap ${text2pcap_FILES})
501         target_link_libraries(text2pcap ${text2pcap_LIBS})
502         install(TARGETS text2pcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
503 endif()
504
505 if(BUILD_mergecap)
506         set(mergecap_LIBS
507                 wiretap
508                 wsutil
509                 ${GLIB2_LIBRARIES}
510                 ${Z_LIBRARIES}
511         )
512         set(mergecap_FILES
513                 mergecap.c
514                 merge.c
515                 svnversion.h
516         )
517         add_executable(mergecap ${mergecap_FILES})
518         target_link_libraries(mergecap ${mergecap_LIBS})
519         install(TARGETS mergecap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
520 endif()
521
522 if(BUILD_capinfos)
523         set(capinfos_LIBS
524                 wiretap
525                 wsutil
526                 ${GLIB2_LIBRARIES}
527                 ${Z_LIBRARIES}
528         )
529         set(capinfos_FILES
530                 capinfos.c
531         )
532         add_executable(capinfos ${capinfos_FILES})
533         target_link_libraries(capinfos ${capinfos_LIBS})
534         install(TARGETS capinfos RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
535 endif()
536
537 if(BUILD_editcap)
538         set(editcap_LIBS
539                 wiretap
540                 wsutil
541                 ${GLIB2_LIBRARIES}
542                 ${Z_LIBRARIES}
543         )
544         set(editcap_FILES
545                 editcap.c
546                 epan/crypt/crypt-md5.c
547                 epan/nstime.c
548         )
549         add_executable(editcap ${editcap_FILES})
550         target_link_libraries(editcap ${editcap_LIBS})
551         install(TARGETS editcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
552 endif()
553
554 if(BUILD_dumpcap)
555         set(dumpcap_LIBS
556                 wiretap
557                 wsutil
558 #               @INET_NTOP_LO@
559                 ${GLIB2_LIBRARIES}
560                 ${PCAP_LIBRARIES}
561 #               @SOCKET_LIBS@
562 #               @NSL_LIBS@
563 #               @FRAMEWORKS@
564                 ${GCRYPT_LIBRARIES}
565                 ${GNUTLS_LIBRARIES}
566 #               @LIBCAP_LIBS@
567                 ${Z_LIBRARIES}
568
569         )
570         set(dumpcap_FILES
571                 svnversion.h
572                 capture_opts.c
573                 capture-pcap-util.c
574                 capture_stop_conditions.c
575                 clopts_common.c
576                 conditions.c
577                 dumpcap.c
578                 pcapio.c
579                 ringbuffer.c
580                 sync_pipe_write.c
581                 tempfile.c
582                 version_info.c
583                 ${PLATFORM_SRC}
584         )
585         add_executable(dumpcap ${dumpcap_FILES})
586         target_link_libraries(dumpcap ${dumpcap_LIBS})
587         install(TARGETS dumpcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
588 endif()