Make building with GeoIP, Python, Capabilities and c-ares
[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., 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 option(ENABLE_EXTRA_GCC_CHECKS "Do additional -W checks in GCC" OFF)
77 option(ENABLE_AIRPCAP    "Enable Airpcap support" ON)
78 # todo
79 option(ENABLE_STATIC     "Build a static version of Wireshark" OFF)
80
81 option(ENABLE_ADNS       "Build with adns support" ON)
82 option(ENABLE_PCRE       "Build with pcre support" ON)
83 option(ENABLE_PORTAUDIO  "Build with portaudio support" ON)
84 option(ENABLE_Z          "Build with zlib compression support" ON)
85 # todo wslua currently seems to be broken
86 option(ENABLE_LUA        "Build with lua dissector support" OFF)
87 option(ENABLE_PYTHON     "Build with python dissector support" ON)
88 option(ENABLE_SMI        "Build with smi snmp support" ON)
89 option(ENABLE_GNUTLS     "Build with GNU TLS support" ON)
90 option(ENABLE_GCRYPT     "Build with GNU crypto support" ON)
91 option(ENABLE_GEOIP      "Build with GeoIP support" ON)
92 option(ENABLE_CAP        "Build with posix capabilities support" ON)
93 option(ENABLE_CARES      "Build with c_ares support" ON)
94 # todo Mostly hardcoded
95 option(ENABLE_KERBEROS   "Build with Kerberos support" ON)
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 M 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 # Kerberos
148 if(ENABLE_KERBEROS)
149         set(PACKAGELIST KERBEROS ${PACKAGELIST})
150 endif()
151
152 # Portable audio
153 if(ENABLE_PORTAUDIO)
154         set(PACKAGELIST PORTAUDIO ${PACKAGELIST})
155 endif()
156
157
158 # Prefer c-ares over adns
159 if(ENABLE_CARES)        # C Asynchronouse resolver
160         set(PACKAGELIST CARES ${PACKAGELIST})
161 elseif(ENABLE_ADNS)     # Gnu asynchronous DNS
162         set(PACKAGELIST ADNS ${PACKAGELIST})
163 endif()
164
165 # Zlib compression
166 if(ENABLE_Z)
167         set(PACKAGELIST Z ${PACKAGELIST})
168 endif()
169
170 # Lua 5.1 dissectors
171 if(ENABLE_LUA)
172         set(PACKAGELIST LUA ${PACKAGELIST})
173 endif()
174
175 # GeoIP address resolving
176 if(ENABLE_GEOIP)
177         set(PACKAGELIST GEOIP ${PACKAGELIST})
178 endif()
179
180 # Capabilities
181 if(ENABLE_CAP)
182         set(PACKAGELIST CAP ${PACKAGELIST})
183 endif()
184
185 if(ENABLE_PYTHON)
186         set(PACKAGELIST PYTHON ${PACKAGELIST})
187 endif()
188
189 set(PROGLIST text2pcap mergecap capinfos editcap dumpcap)
190
191 #Let's loop the package list
192 foreach(PACKAGE ${PACKAGELIST})
193         find_package(${PACKAGE} REQUIRED)
194         message(${PACKAGE}_FOUND)
195         if (${PACKAGE}_FOUND)
196                 set(HAVE_LIB${PACKAGE} 1)
197                 include_directories(${${PACKAGE}_INCLUDE_DIRS})
198                 message(STATUS "${PACKAGE} includes: ${${PACKAGE}_INCLUDE_DIRS}")
199                 message(STATUS "${PACKAGE} libs: ${${PACKAGE}_LIBRARIES}")
200         endif()
201 endforeach()
202
203 if(HAVE_LIBPYTHON)
204         set(HAVE_PYTHON 1)
205         set(PYTHON_DIR "${CMAKE_INSTALL_PREFIX}/lib/wireshark/python/${VERSION}")
206 endif()
207 if(HAVE_LIBLUA)
208         set(HAVE_LUA_H 1)
209         set(HAVE_LUA_5_1 1)
210 endif()
211 if(HAVE_LIBKERBEROS)
212         set(HAVE_KERBEROS 1)
213         # HAVE_HEIMDAL_KERBEROS
214         set(HAVE_MIT_KERBEROS 1)
215         set(HAVE_KEYTYPE_ARCFOUR_56 1)
216 endif()
217 if(HAVE_LIBGEOIP)
218         set(HAVE_GEOIP 1)
219 endif()
220 if(HAVE_LIBCARES)
221         set(HAVE_C_ARES 1)
222 endif()
223 if(HAVE_LIBADNS)
224         set(HAVE_GNU_ADNS 1)
225 endif()
226 if(ENABLE_AIRPCAP)
227         set(HAVE_AIRPCAP 1)
228 endif()
229
230 #packaging
231 set(CPACK_PACKAGE_NAME wireshark)
232 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "capture packet")
233 set(CPACK_PACKAGE_VENDOR "wireshark")
234 set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
235 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING")
236 set(CPACK_PACKAGE_VERSION_MAJOR "1")
237 set(CPACK_PACKAGE_VERSION_MINOR "3")
238 set(CPACK_PACKAGE_VERSION_PATCH "0")
239 set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
240
241 set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
242 set(CPACK_PACKAGE_INSTALL_DIRECTORY "/usr")
243 set(CPACK_GENERATOR "TGZ")
244 set(CPACK_SOURCE_GENERATOR "TGZ")
245
246 include(ConfigureChecks.cmake)
247
248 #Big or little endian ?
249 include(TestBigEndian)
250 test_big_endian(WORDS_BIGENDIAN)
251
252 set(DATAFILE_DIR "${CMAKE_INSTALL_PREFIX}/share/${CPACK_PACKAGE_NAME}")
253
254 #Platform specific
255 if(UNIX)
256         set(WS_VAR_IMPORT "extern")
257 endif()
258
259 if(APPLE)
260 #TODO verify that APPLE implies HAVE_OS_X_FRAMEWORKS
261         set(HAVE_OS_X_FRAMEWORKS 1)
262 endif()
263
264 if(WIN32)
265         add_definitions(-D_NEED_VAR_IMPORT_)
266         set(WS_VAR_IMPORT "__declspec(dllimport) extern")
267
268         # Disable deprecation
269         if(MSVC80 OR MSVC90)
270                 add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
271         endif()
272 endif()
273
274
275 add_subdirectory( epan )
276 add_subdirectory( gtk )
277 add_subdirectory( codecs )
278 add_subdirectory( wiretap )
279 add_subdirectory( wsutil )
280
281 configure_file(${CMAKE_SOURCE_DIR}/cmakeconfig.h.in ${CMAKE_BINARY_DIR}/config.h)
282
283 link_directories(
284         gtk
285         codecs
286         epan
287         wiretap
288         wsutil
289 )
290
291 ADD_CUSTOM_COMMAND(
292         OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/svnversion.h
293         COMMAND ${PERL} ${CMAKE_CURRENT_SOURCE_DIR}/make-version.pl
294           ${CMAKE_CURRENT_SOURCE_DIR}
295 )
296 SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_BINARY_DIR}/svnversion.h GENERATED)
297
298 # Create the necessary tools
299 set(lemon_FILES
300         tools/lemon/lemon.c
301 )
302 set(lemon_LIBS
303         # Do we need something here on any platform?
304 )
305 add_executable(lemon ${lemon_FILES})
306 target_link_libraries(lemon ${lemon_LIBS})
307 # but don't install
308
309 ADD_CUSTOM_COMMAND(
310         OUTPUT tshark-tap-register.c
311         COMMAND ${SHELL}
312           ${CMAKE_SOURCE_DIR}/make-tapreg-dotc
313           tshark-tap-register.c
314           ${CMAKE_CURRENT_SOURCE_DIR}
315           ${TSHARK_TAP_SRC}
316         DEPENDS
317           ${CMAKE_SOURCE_DIR}/make-tapreg-dotc
318           ${TSHARK_TAP_SRC}
319 )
320
321 ADD_CUSTOM_COMMAND(
322         OUTPUT ps.c
323         COMMAND ${PYTHON_EXECUTABLE}
324           ${CMAKE_CURRENT_SOURCE_DIR}/rdps.py
325           ${CMAKE_CURRENT_SOURCE_DIR}/print.ps
326           ps.c
327         DEPENDS
328           ${CMAKE_CURRENT_SOURCE_DIR}/rdps.py
329           ${CMAKE_CURRENT_SOURCE_DIR}/print.ps
330 )
331
332 if(UNIX)
333         set(PLATFORM_SRC
334                 capture-pcap-util-unix.c
335         )
336 endif()
337
338 if(WIN32)
339         set(PLATFORM_SRC
340                 capture-wpcap.c capture_wpcap_packet.c
341         )
342 endif()
343
344 set(WIRESHARK_COMMON_SRC
345         ${PLATFORM_SRC}
346         capture_errs.c
347         capture-pcap-util.c
348         capture_ui_utils.c
349         cfile.c
350         clopts_common.c
351         disabled_protos.c
352         packet-range.c
353         print.c
354         ps.c
355         sync_pipe_write.c
356         timestats.c
357         util.c
358         tap-megaco-common.c
359         tap-rtp-common.c
360         version_info.c
361 )
362
363 set(TSHARK_TAP_SRC
364         tap-afpstat.c
365         tap-ansi_astat.c
366         tap-bootpstat.c
367         tap-camelcounter.c
368         tap-camelsrt.c
369         tap-comparestat.c
370         tap-dcerpcstat.c
371         tap-funnel.c
372         tap-gsm_astat.c
373         tap-h225counter.c
374         tap-h225rassrt.c
375         tap-httpstat.c
376         tap-iostat.c
377         tap-iousers.c
378         tap-mgcpstat.c
379         tap-megacostat.c
380         tap-protocolinfo.c
381         tap-protohierstat.c
382         tap-radiusstat.c
383         tap-rpcstat.c
384         tap-rpcprogs.c
385         tap-rtp.c
386         tap-sctpchunkstat.c
387         tap-sipstat.c
388         tap-smbsids.c
389         tap-smbstat.c
390         tap-stats_tree.c
391         tap-wspstat.c
392 )
393
394 set(LIBEPAN_LIBS
395 #               $(wireshark_optional_objects)
396                 wiretap
397                 wsutil
398                 epan
399 #               @INET_PTON_LO@
400 #               @INET_NTOP_LO@
401 #               @SSL_LIBS@
402 #               $(plugin_ldadd)
403                 ${PCRE_LIBRARIES}
404                 ${GLIB2_LIBRARIES}
405                 ${PCAP_LIBRARIES}
406 #               @SOCKET_LIBS@
407 #               @NSL_LIBS@
408                 ${CARES_LIBRARIES}
409                 ${ADNS_LIBRARIES}
410                 ${KERBEROS_LIBRARIES}
411 #               @FRAMEWORKS@
412                 ${LUA_LIBRARIES}
413                 ${PYTHON_LIBRARIES}
414                 ${GEOIP_LIBRARIES}
415                 ${GCRYPT_LIBRARIES}
416                 ${GNUTLS_LIBRARIES}
417                 ${SMI_LIBRARIES}
418                 ${Z_LIBRARIES}
419                 ${M_LIBRARIES}
420 )
421
422 if(BUILD_wireshark)
423         set(wireshark_LIBS
424                 ui
425                 ${GTK2_LIBRARIES}
426                 codecs
427                 ${PORTAUDIO_LIBRARIES}
428                 ${LIBEPAN_LIBS}
429         )
430         set(wireshark_FILES
431                 airpcap_loader.c
432                 alert_box.c
433                 capture.c
434                 capture_info.c
435                 capture_opts.c
436                 capture_sync.c
437                 color_filters.c
438                 file.c
439                 fileset.c
440                 filters.c
441                 g711.c
442                 merge.c
443                 proto_hier_stats.c
444                 summary.c
445                 tempfile.c
446                 ${WIRESHARK_COMMON_SRC}
447         )
448         add_executable(wireshark ${wireshark_FILES})
449         target_link_libraries(wireshark ${wireshark_LIBS})
450         install(TARGETS wireshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
451 endif()
452
453 if(BUILD_tshark)
454         set(tshark_LIBS
455                 ${LIBEPAN_LIBS}
456         )
457         set(tshark_FILES
458                 capture_opts.c
459                 capture_sync.c
460                 tempfile.c
461                 tshark-tap-register.c
462                 tshark.c
463                 ${TSHARK_TAP_SRC}
464                 ${WIRESHARK_COMMON_SRC}
465         )
466         add_executable(tshark ${tshark_FILES})
467         target_link_libraries(tshark ${tshark_LIBS})
468         install(TARGETS tshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
469 endif()
470
471 if(BUILD_rawshark)
472         set(rawshark_LIBS
473                 ${LIBEPAN_LIBS}
474         )
475         set(rawshark_FILES
476                 ${WIRESHARK_COMMON_SRC}
477                 rawshark.c
478         )
479         add_executable(rawshark ${rawshark_FILES})
480         target_link_libraries(rawshark ${rawshark_LIBS})
481         install(TARGETS rawshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
482 endif()
483
484 if(BUILD_dftest)
485         set(dftest_LIBS
486                 ${LIBEPAN_LIBS}
487         )
488         set(dftest_FILES
489                 dftest.c
490                 util.c
491         )
492         add_executable(dftest ${dftest_FILES})
493         target_link_libraries(dftest ${dftest_LIBS})
494         install(TARGETS dftest RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
495 endif()
496
497 if(BUILD_randpkt)
498         set(randpkt_LIBS
499                 wiretap
500                 wsutil
501                 ${GLIB2_LIBRARIES}
502                 ${M_LIBRARIES}
503                 ${PCAP_LIBRARIES}
504 #               @SOCKET_LIBS@
505 #               @NSL_LIBS@
506                 ${CARES_LIBRARIES}
507                 ${ADNS_LIBRARIES}
508                 ${Z_LIBRARIES}
509         )
510         set(randpkt_FILES
511                 randpkt.c
512         )
513         add_executable(randpkt ${randpkt_FILES})
514         target_link_libraries(randpkt ${randpkt_LIBS})
515         install(TARGETS randpkt RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
516 endif()
517
518 if(BUILD_text2pcap)
519         set(text2pcap_LIBS
520                 wiretap
521                 wsutil
522                 ${GLIB2_LIBRARIES}
523                 ${M_LIBRARIES}
524                 ${Z_LIBRARIES}
525         )
526         set(text2pcap_FILES
527                 text2pcap.c
528         )
529         add_lex_files(text2pcap_FILES
530                 text2pcap-scanner.l
531         )
532         add_executable(text2pcap ${text2pcap_FILES})
533         target_link_libraries(text2pcap ${text2pcap_LIBS})
534         install(TARGETS text2pcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
535 endif()
536
537 if(BUILD_mergecap)
538         set(mergecap_LIBS
539                 wiretap
540                 wsutil
541                 ${GLIB2_LIBRARIES}
542                 ${Z_LIBRARIES}
543         )
544         set(mergecap_FILES
545                 mergecap.c
546                 merge.c
547                 svnversion.h
548         )
549         add_executable(mergecap ${mergecap_FILES})
550         target_link_libraries(mergecap ${mergecap_LIBS})
551         install(TARGETS mergecap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
552 endif()
553
554 if(BUILD_capinfos)
555         set(capinfos_LIBS
556                 wiretap
557                 wsutil
558                 ${GLIB2_LIBRARIES}
559                 ${Z_LIBRARIES}
560         )
561         set(capinfos_FILES
562                 capinfos.c
563         )
564         add_executable(capinfos ${capinfos_FILES})
565         target_link_libraries(capinfos ${capinfos_LIBS})
566         install(TARGETS capinfos RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
567 endif()
568
569 if(BUILD_editcap)
570         set(editcap_LIBS
571                 wiretap
572                 wsutil
573                 ${GLIB2_LIBRARIES}
574                 ${Z_LIBRARIES}
575         )
576         set(editcap_FILES
577                 editcap.c
578                 epan/crypt/crypt-md5.c
579                 epan/nstime.c
580         )
581         add_executable(editcap ${editcap_FILES})
582         target_link_libraries(editcap ${editcap_LIBS})
583         install(TARGETS editcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
584 endif()
585
586 if(BUILD_dumpcap)
587         set(dumpcap_LIBS
588                 wiretap
589                 wsutil
590 #               @INET_NTOP_LO@
591                 ${GLIB2_LIBRARIES}
592                 ${PCAP_LIBRARIES}
593                 ${CAP_LIBRARIES}
594 #               @SOCKET_LIBS@
595 #               @NSL_LIBS@
596 #               @FRAMEWORKS@
597                 ${GCRYPT_LIBRARIES}
598                 ${GNUTLS_LIBRARIES}
599                 ${Z_LIBRARIES}
600
601         )
602         set(dumpcap_FILES
603                 svnversion.h
604                 capture_opts.c
605                 capture-pcap-util.c
606                 capture_stop_conditions.c
607                 clopts_common.c
608                 conditions.c
609                 dumpcap.c
610                 pcapio.c
611                 ringbuffer.c
612                 sync_pipe_write.c
613                 tempfile.c
614                 version_info.c
615                 ${PLATFORM_SRC}
616         )
617         add_executable(dumpcap ${dumpcap_FILES})
618         target_link_libraries(dumpcap ${dumpcap_LIBS})
619         install(TARGETS dumpcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
620 endif()