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