1ba31c9498077f1899d7fa4e92f862cc4c9464d3
[pingcheck] / src / CMakeLists.txt
1 # package: find external packages
2 include(FindPkgConfig)
3
4 # package: required boost libraries
5 set(Boost_USE_STATIC_LIBS OFF)
6 set(Boost_USE_MULTITHREADED OFF)
7 set(Boost_USE_STATIC_RUNTIME OFF)
8
9 find_package(Boost 1.44 COMPONENTS filesystem program_options system serialization date_time REQUIRED)
10
11 # package: boost-custom
12 include_directories(${CMAKE_SOURCE_DIR}/lib/boost-custom)
13
14 # package: boost-net-dns
15 include_directories(${CMAKE_SOURCE_DIR}/lib/boost-net-dns)
16
17 # package: libi2ncommon
18 pkg_check_modules(I2NCOMMON REQUIRED libi2ncommon)
19 include_directories(${I2NCOMMON_INCLUDE_DIRS})
20 link_directories(${I2NCOMMON_LIBRARY_DIRS})
21
22 # package: doxygen
23 find_package(Doxygen)
24
25 # compiler: include directories where the source code is located
26 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
27
28 # compiler: source code files
29 set(SOURCES
30     config/configuration.cpp
31     config/configurationcommandline.cpp
32     config/configurationfile.cpp
33     config/configurationinterface.cpp
34     config/configurationoptions.cpp
35     config/configurationreader.cpp
36     config/host.cpp
37     config/option/daemonoption.cpp
38     config/option/configfileoption.cpp
39     config/option/configurationoption.cpp
40     config/option/hostconfigurationoption.cpp
41     config/option/hostpingintervaloption.cpp
42     config/option/hostpingprotocoloption.cpp
43     config/option/hostportoption.cpp
44     config/option/hostnameoption.cpp
45     config/option/hostsourcenetworkinterfaceoption.cpp
46     config/option/hostsdownlimitoption.cpp
47     config/option/linkdownintervaloption.cpp
48     config/option/linkupintervaloption.cpp
49     config/option/logleveloption.cpp
50     config/option/logoutputoption.cpp
51     config/option/logfileoption.cpp
52     config/option/nameserveroption.cpp
53     config/option/pingfaillimitoption.cpp
54     config/option/sourcenetworkinterfaceoption.cpp
55     config/option/statusnotifiercmdoption.cpp
56     config/option/versionoption.cpp
57     config/option/ratiorandomhostsoption.cpp
58     config/option/pingreplytimeoutoption.cpp
59     config/option/maxaddressresolutionattemptsoption.cpp
60     config/option/resolvedipttlthresholdoption.cpp
61     config/option/mintimebetweenresolvesoption.cpp
62     config/option/dnscachefileoption.cpp
63     dns/timetolive.cpp
64     dns/hostaddress.cpp
65     dns/dnsipprotocol.cpp
66     dns/dnscache.cpp
67     dns/resolverbase.cpp
68     dns/dnsresolver.cpp
69     dns/dnsmaster.cpp
70     host/hoststatus.cpp
71     host/pingstatus.cpp
72     host/loglevel.cpp
73     host/logoutput.cpp
74     host/messagepayload.cpp
75     host/networkinterfacelist.cpp
76     host/pinger.cpp
77     host/pingerfactory.cpp
78     host/pinginterval.cpp
79     host/pingnumber.cpp
80     host/pingprotocol.cpp
81     host/pingscheduler.cpp
82     tools/pcap.cpp
83     icmp/icmpdata.cpp
84     icmp/icmpdata_pingfailreply.cpp
85     icmp/icmpechodata.cpp
86     icmp/icmpdestinationunreachabledata.cpp
87     icmp/icmptimeexceededdata.cpp
88     icmp/icmpheader.cpp
89     icmp/icmppacket.cpp
90     icmp/icmppinger.cpp
91     icmp/icmppacketfactory.cpp
92     ip/ipheader.cpp
93     ip/ipv4header.cpp
94     ip/ipv6header.cpp
95     link/linkstatus.cpp
96     link/statusnotifiercommand.cpp
97     tcp/tcpheader.cpp
98     tcp/tcppinger.cpp
99     tcp/tcpipv4segment.cpp
100     tcp/tcpipv6segment.cpp
101     tcp/tcpsegment.cpp
102     tcp/tcpsegmentfactory.cpp
103     boost_assert_handler.cpp
104     main.cpp
105 )
106
107 # documentation: add a target to generate API documentation with Doxygen
108 if(DOXYGEN_FOUND)
109     configure_file(
110         ${CMAKE_SOURCE_DIR}/doc/doxyfile.in
111         ${CMAKE_BINARY_DIR}/doc/Doxyfile @ONLY
112     )
113     add_custom_target(
114         doc
115         ${DOXYGEN_EXECUTABLE}
116         ${CMAKE_BINARY_DIR}/doc/Doxyfile
117         WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/doc
118         COMMENT "Generating API documentation with Doxygen" VERBATIM
119     )
120 endif(DOXYGEN_FOUND)
121
122 # compiler: creates the binary
123 add_executable(${TARGET} ${SOURCES})
124
125 # linker: link the program against the libraries
126 target_link_libraries(
127     ${TARGET}
128     Boost::filesystem
129     Boost::program_options
130     Boost::system
131     Boost::serialization
132     Boost::date_time
133     ${I2NCOMMON_LIBRARIES}
134     pthread
135 )
136
137 # creates the install rule for the binary
138 install(TARGETS ${TARGET} DESTINATION bin)
139
140
141 # create a library from the same files to feed into the linker for tools
142 add_library(lib_for_tools STATIC ${SOURCES})
143 target_link_libraries(lib_for_tools pthread)
144
145 # now create an executable for tools/feed_packet_data that depends on lib_for_tools
146 set(feed_packet_data_SOURCES tools/pcap.cpp tools/feed_packet_data.cpp)
147 add_executable(feed_packet_data ${feed_packet_data_SOURCES})
148 target_link_libraries(
149     feed_packet_data
150     lib_for_tools
151     Boost::filesystem
152     Boost::program_options
153     Boost::system
154     Boost::serialization
155     Boost::date_time
156     ${I2NCOMMON_LIBRARIES}
157 )
158 # no install! install(TARGETS feed_packet_data DESTINATION bin)