PROJECT(libevent C)

CHECK_INCLUDE_FILES(sys/time.h   HAVE_SYS_TIME_H)
CHECK_INCLUDE_FILES(sys/tree.h   HAVE_SYS_TREE_H)
CHECK_INCLUDE_FILES(fcntl.h      HAVE_FCNTL_H)
CHECK_INCLUDE_FILES(stdarg.h     HAVE_STDARG_H)
CHECK_INCLUDE_FILES(inttypes.h   HAVE_INTTYPES_H)
CHECK_INCLUDE_FILES(stdint.h     HAVE_STDINT_H)
CHECK_INCLUDE_FILES(poll.h       HAVE_POLL_H)
CHECK_INCLUDE_FILES(signal.h     HAVE_SIGNAL_H)
CHECK_INCLUDE_FILES(unistd.h     HAVE_UNISTD_H)
CHECK_INCLUDE_FILES(sys/devpoll.h HAVE_SYS_DEVPOLL_H)
CHECK_INCLUDE_FILES(port.h       HAVE_PORT_H)
CHECK_INCLUDE_FILES(kqueue.h     HAVE_KQUEUE_H)

CHECK_FUNCTION_EXISTS(poll       HAVE_POLL)
CHECK_FUNCTION_EXISTS(select     HAVE_SELECT)
CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
CHECK_FUNCTION_EXISTS(vasprintf  HAVE_VASPRINTF)
CHECK_FUNCTION_EXISTS(fcntl      HAVE_FCNTL)
CHECK_FUNCTION_EXISTS(clock_gettime HAVE_CLOCK_GETTIME)
CHECK_FUNCTION_EXISTS(strtok_r   HAVE_STRTOK_R)
CHECK_FUNCTION_EXISTS(strsep     HAVE_STRSEP)
CHECK_FUNCTION_EXISTS(getaddrinfo HAVE_GETADDRINFO)
CHECK_FUNCTION_EXISTS(getnameinfo HAVE_GETNAMEINFO)
CHECK_FUNCTION_EXISTS(strlcpy    HAVE_STRLCPY)
CHECK_FUNCTION_EXISTS(inet_ntop  HAVE_INET_NTOP)
CHECK_FUNCTION_EXISTS(sigtimedwait HAVE_SIGTIMEDWAIT)
CHECK_FUNCTION_EXISTS(epoll_ctl  HAVE_EPOLL)
CHECK_FUNCTION_EXISTS(kqueue     HAVE_KQUEUE)

CONFIGURE_FILE(config.h.cmake ${CMAKE_CURRENT_SOURCE_DIR}/event-config.h)

ADD_DEFINITIONS(-DHAVE_CONFIG_H)
ADD_DEFINITIONS(-DVERSION=\\"libevent-1.4.11-stable\\")

IF(WIN32)
	ADD_DEFINITIONS(-D__func__=__FUNCTION__)
	ADD_DEFINITIONS(-Dinline=__inline)
	ADD_DEFINITIONS(-DBUILD_EVENT_DLL)
    ADD_DEFINITIONS(-D_BIND_TO_CURRENT_MFC_VERSION=1 -D_BIND_TO_CURRENT_CRT_VERSION=1)
ENDIF(WIN32)


INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
INCLUDE_DIRECTORIES(compat/)

SET(libevent_sources 
	event.c
	evbuffer.c
	buffer.c
	log.c
	signal.c
	evutil.c
	# rtsig.c
	
	strlcpy.c
)

IF(WIN32)
	SET(libevent_sources 
		${libevent_sources} 
		WIN32-Code/win32.c
	)
	INCLUDE_DIRECTORIES(WIN32-Code/)
ENDIF(WIN32)

IF(HAVE_SELECT)
	SET(libevent_sources 
		${libevent_sources} 
		select.c
		signal.c
	)
ENDIF(HAVE_SELECT)

IF(HAVE_POLL)
	SET(libevent_sources 
		${libevent_sources} 
		poll.c
	)
ENDIF(HAVE_POLL)

IF(HAVE_EPOLL)
	SET(libevent_sources 
		${libevent_sources} 
		epoll.c
        epoll_sub.c
	)
ENDIF(HAVE_EPOLL)

IF(HAVE_SYS_DEVPOLL_H)
	SET(libevent_sources 
		${libevent_sources} 
		devpoll.c
	)
ENDIF(HAVE_SYS_DEVPOLL_H)

IF(HAVE_PORT_H)
	SET(libevent_sources 
		${libevent_sources} 
		evport.c
	)
ENDIF(HAVE_PORT_H)

IF(HAVE_KQUEUE_H)
	SET(libevent_sources 
		${libevent_sources} 
		kqueue.c
	)
ENDIF(HAVE_KQUEUE_H)

ADD_LIBRARY(event SHARED
	${libevent_sources}
)

IF(WIN32)
	## winsock2 
	TARGET_LINK_LIBRARIES(event ws2_32)
ENDIF(WIN32)

INSTALL(TARGETS event 
	RUNTIME DESTINATION bin
	LIBRARY DESTINATION lib
)
