| 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) |