1 cmake_minimum_required( VERSION 2.8.8 )
3 set( PROJECT_NAME pcap )
4 project( ${PROJECT_NAME} )
6 ###################################################################
8 ###################################################################
10 option (USE_IPV6 "Enable IPv6" ON)
11 option (USE_STATIC_RT "Use static Runtime" ON)
13 ######################################
15 ######################################
29 add_definitions( -DLIBPCAP_EXPORTS )
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))" )
38 add_definitions( "-D_U_=" )
42 MESSAGE( STATUS "Use STATIC runtime" )
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")
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")
56 MESSAGE( STATUS "Use DYNAMIC runtime" )
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")
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")
71 ###################################################################
72 # Detect available features
73 ###################################################################
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}" )
78 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_STRINGS_H\n" )
79 add_definitions( -DHAVE_STRINGS_H )
80 endif( HAVE_STRINGS_H )
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}" )
85 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_INTTYPES_H\n" )
86 add_definitions( -DHAVE_INTTYPES_H )
87 endif( HAVE_INTTYPES_H )
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}" )
92 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_STDINT_H\n" )
93 add_definitions( -DHAVE_STDINT_H )
94 endif( HAVE_STDINT_H )
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}" )
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 )
105 try_compile( HAVE_STRERROR ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_strerror.c" )
106 message( STATUS "HAVE_STRERROR = ${HAVE_STRERROR}" )
108 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_STRERROR\n" )
109 add_definitions( -DHAVE_STRERROR )
110 endif( HAVE_STRERROR )
112 try_compile( HAVE_SNPRINTF ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_snprintf.c" )
113 message( STATUS "HAVE_SNPRINTF = ${HAVE_SNPRINTF}" )
115 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_SNPRINTF\n" )
116 add_definitions( -DHAVE_SNPRINTF )
117 endif( HAVE_SNPRINTF )
119 try_compile( HAVE_VSNPRINTF ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_vsnprintf.c" )
120 message( STATUS "HAVE_VSNPRINTF = ${HAVE_VSNPRINTF}" )
122 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_VSNPRINTF\n" )
123 add_definitions( -DHAVE_VSNPRINTF )
124 endif( HAVE_VSNPRINTF )
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}" )
129 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_LIMITS_H\n" )
130 add_definitions( -DHAVE_LIMITS_H )
131 endif( HAVE_LIMITS_H )
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 )
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 )
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 )
156 MESSAGE( STATUS "Use IPv6" )
157 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define USE_IPV6\n" )
158 add_definitions( -DUSE_IPV6 )
162 set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_ADDRINFO\n" )
163 add_definitions( -DHAVE_ADDRINFO )
166 file( WRITE "${CMAKE_BINARY_DIR}/config.h" "${CONFIG_H_CONTENT}" )
168 ######################################
169 # External dependencies
170 ######################################
172 ######################################
174 ######################################
176 file(GLOB PROJECT_SOURCE_LIST_CORE_C
197 set( PROJECT_SOURCE_LIST_C ${PROJECT_SOURCE_LIST_C} ${PROJECT_SOURCE_LIST_CORE_C} )
200 file(GLOB PROJECT_SOURCE_LIST_WIN32_C
203 Win32/Src/getservent.c
206 set( PROJECT_SOURCE_LIST_C ${PROJECT_SOURCE_LIST_C} ${PROJECT_SOURCE_LIST_WIN32_C} )
209 file(GLOB PROJECT_SOURCE_LIST_CORE_H
213 set( PROJECT_SOURCE_LIST_H ${PROJECT_SOURCE_LIST_H} ${PROJECT_SOURCE_LIST_CORE_H} )
216 file(GLOB PROJECT_SOURCE_LIST_WIN32_H
219 set( PROJECT_SOURCE_LIST_H ${PROJECT_SOURCE_LIST_H} ${PROJECT_SOURCE_LIST_WIN32_H} )
222 source_group("Source Files" FILES ${PROJECT_SOURCE_LIST_C})
223 source_group("Header Files" FILES ${PROJECT_SOURCE_LIST_H})
225 ######################################
227 ######################################
229 add_library (${PROJECT_NAME} ${PROJECT_SOURCE_LIST_C} ${PROJECT_SOURCE_LIST_H})
232 target_link_libraries ( ${PROJECT_NAME}