blob: 0a237d94849e2a78f96ff8ebf470ad6540456912 [file] [log] [blame]
cmake_minimum_required( VERSION 2.8.8 )
set( PROJECT_NAME pcap )
project( ${PROJECT_NAME} )
###################################################################
# Parameters
###################################################################
option (USE_IPV6 "Enable IPv6" ON)
option (USE_STATIC_RT "Use static Runtime" ON)
######################################
# Project setings
######################################
include_directories(
${CMAKE_BINARY_DIR}
${pcap_SOURCE_DIR}
)
if( WIN32 )
include_directories(
../Common/
Win32/Include
)
endif( WIN32)
add_definitions( -DLIBPCAP_EXPORTS )
if( MSVC )
add_definitions( -D__STDC__ )
add_definitions( -D_CRT_SECURE_NO_WARNINGS )
add_definitions( "-D_U_=" )
elseif( CMAKE_COMPILER_IS_GNUCXX )
add_definitions( "-D_U_=__attribute__((unused))" )
else(MSVC)
add_definitions( "-D_U_=" )
endif( MSVC )
if (USE_STATIC_RT)
MESSAGE( STATUS "Use STATIC runtime" )
set(NAME_RT MT)
if( MSVC )
set (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MT")
set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT")
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
set (CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /MT")
set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /MT")
set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
endif( MSVC )
else (USE_STATIC_RT)
MESSAGE( STATUS "Use DYNAMIC runtime" )
set(NAME_RT MD)
if( MSVC )
set (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MD")
set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MD")
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD")
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd")
set (CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /MD")
set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /MD")
set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MD")
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MDd")
endif( MSVC )
endif (USE_STATIC_RT)
###################################################################
# Detect available features
###################################################################
try_compile( HAVE_STRINGS_H ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_strings.c" )
message( STATUS "HAVE_STRINGS_H = ${HAVE_STRINGS_H}" )
if( HAVE_STRINGS_H )
set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_STRINGS_H\n" )
add_definitions( -DHAVE_STRINGS_H )
endif( HAVE_STRINGS_H )
try_compile( HAVE_INTTYPES_H ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_inttypes.c" )
message( STATUS "HAVE_INTTYPES_H = ${HAVE_INTTYPES_H}" )
if( HAVE_INTTYPES_H )
set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_INTTYPES_H\n" )
add_definitions( -DHAVE_INTTYPES_H )
endif( HAVE_INTTYPES_H )
try_compile( HAVE_STDINT_H ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_stdint.c" )
message( STATUS "HAVE_STDINT_H = ${HAVE_STDINT_H}" )
if( HAVE_STDINT_H )
set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_STDINT_H\n" )
add_definitions( -DHAVE_STDINT_H )
endif( HAVE_STDINT_H )
try_compile( HAVE_UNISTD_H ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_unistd.c" )
message( STATUS "HAVE_UNISTD_H = ${HAVE_UNISTD_H}" )
if( HAVE_UNISTD_H )
set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_UNISTD_H\n" )
add_definitions( -DHAVE_UNISTD_H )
else( HAVE_UNISTD_H )
add_definitions( -DYY_NO_UNISTD_H )
endif( HAVE_UNISTD_H )
try_compile( HAVE_STRERROR ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_strerror.c" )
message( STATUS "HAVE_STRERROR = ${HAVE_STRERROR}" )
if( HAVE_STRERROR )
set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_STRERROR\n" )
add_definitions( -DHAVE_STRERROR )
endif( HAVE_STRERROR )
try_compile( HAVE_SNPRINTF ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_snprintf.c" )
message( STATUS "HAVE_SNPRINTF = ${HAVE_SNPRINTF}" )
if( HAVE_SNPRINTF )
set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_SNPRINTF\n" )
add_definitions( -DHAVE_SNPRINTF )
endif( HAVE_SNPRINTF )
try_compile( HAVE_VSNPRINTF ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_vsnprintf.c" )
message( STATUS "HAVE_VSNPRINTF = ${HAVE_VSNPRINTF}" )
if( HAVE_VSNPRINTF )
set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_VSNPRINTF\n" )
add_definitions( -DHAVE_VSNPRINTF )
endif( HAVE_VSNPRINTF )
try_compile( HAVE_LIMITS_H ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_limits.c" )
message( STATUS "HAVE_LIMITS_H = ${HAVE_LIMITS_H}" )
if( HAVE_LIMITS_H )
set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_LIMITS_H\n" )
add_definitions( -DHAVE_LIMITS_H )
endif( HAVE_LIMITS_H )
try_compile( HAVE_SOCKADDR_SA_LEN ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_sockaddr_sa_len.c" )
message( STATUS "HAVE_SOCKADDR_SA_LEN = ${HAVE_SOCKADDR_SA_LEN}" )
if( HAVE_SOCKADDR_SA_LEN )
set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_SOCKADDR_SA_LEN\n" )
add_definitions( -DHAVE_SOCKADDR_SA_LEN )
endif( HAVE_SOCKADDR_SA_LEN )
try_compile( HAVE_SOCKADDR_STORAGE ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_sockaddr_storage.c" )
message( STATUS "HAVE_SOCKADDR_STORAGE = ${HAVE_SOCKADDR_STORAGE}" )
if( HAVE_SOCKADDR_STORAGE )
set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_SOCKADDR_STORAGE\n" )
add_definitions( -DHAVE_SOCKADDR_STORAGE )
endif( HAVE_SOCKADDR_STORAGE )
try_compile( HAVE_SYS_BITYPES_H ${CMAKE_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_bitypes.c" )
message( STATUS "HAVE_SYS_BITYPES_H = ${HAVE_SYS_BITYPES_H}" )
if( HAVE_SYS_BITYPES_H )
set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_SYS_BITYPES_H\n" )
add_definitions( -DHAVE_SYS_BITYPES_H )
endif( HAVE_SYS_BITYPES_H )
if( USE_IPV6 )
MESSAGE( STATUS "Use IPv6" )
set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define USE_IPV6\n" )
add_definitions( -DUSE_IPV6 )
endif( USE_IPV6 )
if( WIN32 )
set( CONFIG_H_CONTENT "${CONFIG_H_CONTENT}#define HAVE_ADDRINFO\n" )
add_definitions( -DHAVE_ADDRINFO )
endif( WIN32 )
file( WRITE "${CMAKE_BINARY_DIR}/config.h" "${CONFIG_H_CONTENT}" )
######################################
# External dependencies
######################################
######################################
# Input files
######################################
file(GLOB PROJECT_SOURCE_LIST_CORE_C
bpf_dump.c
bpf_image.c
etherent.c
gencode.c
grammar.c
inet.c
nametoaddr.c
optimize.c
pcap-common.c
pcap-new.c
pcap.c
savefile.c
scanner.c
sf-pcap-ng.c
sf-pcap.c
sockutils.c
missing/snprintf.c
bpf/net/bpf_filter.c
)
set( PROJECT_SOURCE_LIST_C ${PROJECT_SOURCE_LIST_C} ${PROJECT_SOURCE_LIST_CORE_C} )
if( WIN32 )
file(GLOB PROJECT_SOURCE_LIST_WIN32_C
fad-win32.c
pcap-win32.c
)
set( PROJECT_SOURCE_LIST_C ${PROJECT_SOURCE_LIST_C} ${PROJECT_SOURCE_LIST_WIN32_C} )
endif( WIN32 )
file(GLOB PROJECT_SOURCE_LIST_CORE_H
*.h
pcap/*.h
)
set( PROJECT_SOURCE_LIST_H ${PROJECT_SOURCE_LIST_H} ${PROJECT_SOURCE_LIST_CORE_H} )
if( WIN32 )
file(GLOB PROJECT_SOURCE_LIST_WIN32_H
Win32/Include/*.h
)
set( PROJECT_SOURCE_LIST_H ${PROJECT_SOURCE_LIST_H} ${PROJECT_SOURCE_LIST_WIN32_H} )
endif( WIN32 )
source_group("Source Files" FILES ${PROJECT_SOURCE_LIST_C})
source_group("Header Files" FILES ${PROJECT_SOURCE_LIST_H})
######################################
# Register targets
######################################
add_library (${PROJECT_NAME} ${PROJECT_SOURCE_LIST_C} ${PROJECT_SOURCE_LIST_H})
if( WIN32 )
target_link_libraries ( ${PROJECT_NAME}
packet
ws2_32
)
endif( WIN32 )