]> The Tcpdump Group git mirrors - libpcap/blob - CMakeLists.txt
Define ffs() in optimize.c; that's all that uses it.
[libpcap] / CMakeLists.txt
1 cmake_minimum_required( VERSION 2.8.8 )
2
3 set( PROJECT_NAME pcap )
4 project( ${PROJECT_NAME} )
5
6 ###################################################################
7 # Parameters
8 ###################################################################
9
10 option (USE_IPV6 "Enable IPv6" ON)
11 option (USE_STATIC_RT "Use static Runtime" ON)
12
13 ######################################
14 # Project setings
15 ######################################
16
17 include_directories(
18 ${CMAKE_BINARY_DIR}
19 ${pcap_SOURCE_DIR}
20 )
21
22 if( WIN32 )
23 include_directories(
24 ../Common/
25 Win32/Include
26 )
27 endif( WIN32)
28
29 add_definitions( -DLIBPCAP_EXPORTS )
30
31 if( MSVC )
32 add_definitions( -D__STDC__ )
33 add_definitions( -D_CRT_SECURE_NO_WARNINGS )
34 add_definitions( "-D_U_=" )
35 elseif( CMAKE_COMPILER_IS_GNUCXX )
36 add_definitions( "-D_U_=__attribute__((unused))" )
37 else(MSVC)
38 add_definitions( "-D_U_=" )
39 endif( MSVC )
40
41 if (USE_STATIC_RT)
42 MESSAGE( STATUS "Use STATIC runtime" )
43 set(NAME_RT MT)
44 if( MSVC )
45 set (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MT")
46 set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT")
47 set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
48 set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
49
50 set (CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /MT")
51 set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /MT")
52 set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")
53 set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
54 endif( MSVC )
55 else (USE_STATIC_RT)
56 MESSAGE( STATUS "Use DYNAMIC runtime" )
57 set(NAME_RT MD)
58 if( MSVC )
59 set (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MD")
60 set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MD")
61 set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD")
62 set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd")
63
64 set (CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /MD")
65 set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /MD")
66 set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MD")
67 set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MDd")
68 endif( MSVC )
69 endif (USE_STATIC_RT)
70
71 ###################################################################
72 # Detect available features
73 ###################################################################
74
75 try_compile( HAVE_STRINGS_H ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_strings.c" )
76 message( STATUS "HAVE_STRINGS_H = ${HAVE_STRINGS_H}" )
77 if( HAVE_STRINGS_H )
78 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_STRINGS_H\n" )
79 add_definitions( -DHAVE_STRINGS_H )
80 endif( HAVE_STRINGS_H )
81
82 try_compile( HAVE_INTTYPES_H ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_inttypes.c" )
83 message( STATUS "HAVE_INTTYPES_H = ${HAVE_INTTYPES_H}" )
84 if( HAVE_INTTYPES_H )
85 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_INTTYPES_H\n" )
86 add_definitions( -DHAVE_INTTYPES_H )
87 endif( HAVE_INTTYPES_H )
88
89 try_compile( HAVE_STDINT_H ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_stdint.c" )
90 message( STATUS "HAVE_STDINT_H = ${HAVE_STDINT_H}" )
91 if( HAVE_STDINT_H )
92 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_STDINT_H\n" )
93 add_definitions( -DHAVE_STDINT_H )
94 endif( HAVE_STDINT_H )
95
96 try_compile( HAVE_UNISTD_H ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_unistd.c" )
97 message( STATUS "HAVE_UNISTD_H = ${HAVE_UNISTD_H}" )
98 if( HAVE_UNISTD_H )
99 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_UNISTD_H\n" )
100 add_definitions( -DHAVE_UNISTD_H )
101 else( HAVE_UNISTD_H )
102 add_definitions( -DYY_NO_UNISTD_H )
103 endif( HAVE_UNISTD_H )
104
105 try_compile( HAVE_STRERROR ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_strerror.c" )
106 message( STATUS "HAVE_STRERROR = ${HAVE_STRERROR}" )
107 if( HAVE_STRERROR )
108 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_STRERROR\n" )
109 add_definitions( -DHAVE_STRERROR )
110 endif( HAVE_STRERROR )
111
112 try_compile( HAVE_SNPRINTF ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_snprintf.c" )
113 message( STATUS "HAVE_SNPRINTF = ${HAVE_SNPRINTF}" )
114 if( HAVE_SNPRINTF )
115 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_SNPRINTF\n" )
116 add_definitions( -DHAVE_SNPRINTF )
117 endif( HAVE_SNPRINTF )
118
119 try_compile( HAVE_VSNPRINTF ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_vsnprintf.c" )
120 message( STATUS "HAVE_VSNPRINTF = ${HAVE_VSNPRINTF}" )
121 if( HAVE_VSNPRINTF )
122 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_VSNPRINTF\n" )
123 add_definitions( -DHAVE_VSNPRINTF )
124 endif( HAVE_VSNPRINTF )
125
126 try_compile( HAVE_LIMITS_H ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_limits.c" )
127 message( STATUS "HAVE_LIMITS_H = ${HAVE_LIMITS_H}" )
128 if( HAVE_LIMITS_H )
129 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_LIMITS_H\n" )
130 add_definitions( -DHAVE_LIMITS_H )
131 endif( HAVE_LIMITS_H )
132
133 try_compile( HAVE_SOCKADDR_SA_LEN ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_sockaddr_sa_len.c" )
134 message( STATUS "HAVE_SOCKADDR_SA_LEN = ${HAVE_SOCKADDR_SA_LEN}" )
135 if( HAVE_SOCKADDR_SA_LEN )
136 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_SOCKADDR_SA_LEN\n" )
137 add_definitions( -DHAVE_SOCKADDR_SA_LEN )
138 endif( HAVE_SOCKADDR_SA_LEN )
139
140 try_compile( HAVE_SOCKADDR_STORAGE ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_sockaddr_storage.c" )
141 message( STATUS "HAVE_SOCKADDR_STORAGE = ${HAVE_SOCKADDR_STORAGE}" )
142 if( HAVE_SOCKADDR_STORAGE )
143 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_SOCKADDR_STORAGE\n" )
144 add_definitions( -DHAVE_SOCKADDR_STORAGE )
145 endif( HAVE_SOCKADDR_STORAGE )
146
147 try_compile( HAVE_SYS_BITYPES_H ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_bitypes.c" )
148 message( STATUS "HAVE_SYS_BITYPES_H = ${HAVE_SYS_BITYPES_H}" )
149 if( HAVE_SYS_BITYPES_H )
150 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_SYS_BITYPES_H\n" )
151 add_definitions( -DHAVE_SYS_BITYPES_H )
152 endif( HAVE_SYS_BITYPES_H )
153
154
155 if( USE_IPV6 )
156 MESSAGE( STATUS "Use IPv6" )
157 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define USE_IPV6\n" )
158 add_definitions( -DUSE_IPV6 )
159 endif( USE_IPV6 )
160
161 if( WIN32 )
162 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_ADDRINFO\n" )
163 add_definitions( -DHAVE_ADDRINFO )
164 endif( WIN32 )
165
166 file( WRITE "${CMAKE_BINARY_DIR}/config.h" "${CONFIG_H_CONTENT}" )
167
168 ######################################
169 # External dependencies
170 ######################################
171
172 ######################################
173 # Input files
174 ######################################
175
176 file(GLOB PROJECT_SOURCE_LIST_CORE_C
177 bpf_dump.c
178 bpf_image.c
179 etherent.c
180 gencode.c
181 grammar.c
182 inet.c
183 nametoaddr.c
184 optimize.c
185 pcap-common.c
186 pcap-new.c
187 pcap.c
188 savefile.c
189 scanner.c
190 sf-pcap-ng.c
191 sf-pcap.c
192 sockutils.c
193 missing/snprintf.c
194 bpf/net/bpf_filter.c
195 )
196
197 set( PROJECT_SOURCE_LIST_C ${PROJECT_SOURCE_LIST_C} ${PROJECT_SOURCE_LIST_CORE_C} )
198
199 if( WIN32 )
200 file(GLOB PROJECT_SOURCE_LIST_WIN32_C
201 fad-win32.c
202 pcap-win32.c
203 Win32/Src/getservent.c
204 )
205
206 set( PROJECT_SOURCE_LIST_C ${PROJECT_SOURCE_LIST_C} ${PROJECT_SOURCE_LIST_WIN32_C} )
207 endif( WIN32 )
208
209 file(GLOB PROJECT_SOURCE_LIST_CORE_H
210 *.h
211 pcap/*.h
212 )
213 set( PROJECT_SOURCE_LIST_H ${PROJECT_SOURCE_LIST_H} ${PROJECT_SOURCE_LIST_CORE_H} )
214
215 if( WIN32 )
216 file(GLOB PROJECT_SOURCE_LIST_WIN32_H
217 Win32/Include/*.h
218 )
219 set( PROJECT_SOURCE_LIST_H ${PROJECT_SOURCE_LIST_H} ${PROJECT_SOURCE_LIST_WIN32_H} )
220 endif( WIN32 )
221
222 source_group("Source Files" FILES ${PROJECT_SOURCE_LIST_C})
223 source_group("Header Files" FILES ${PROJECT_SOURCE_LIST_H})
224
225 ######################################
226 # Register targets
227 ######################################
228
229 add_library (${PROJECT_NAME} ${PROJECT_SOURCE_LIST_C} ${PROJECT_SOURCE_LIST_H})
230
231 if( WIN32 )
232 target_link_libraries ( ${PROJECT_NAME}
233 packet
234 ws2_32
235 )
236 endif( WIN32 )