CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
PROJECT (jabber)

LIST (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

find_path(GLOOX_PATH "gloox" "${CMAKE_CURRENT_SOURCE_DIR}/libs")

file( GLOB_RECURSE QUTIM_H src/*.h include/*.h )
file( GLOB_RECURSE QUTIM_CPP src/*.cpp )
file( GLOB_RECURSE QUTIM_UI src/*.ui )

SET (JABBER_LIBS "")
SET (JABBER_INCLUDE_DIR "")

if( GLOOX_SHARED OR NOT GLOOX_PATH )
	SET( GLOOX_REQUIRED )
	include( FindGloox )
	if( GLOOX_FOUND )
		ADD_DEFINITIONS( -DHAVE_GLOOX )
		LIST(APPEND JABBER_LIBS ${GLOOX_LIBRARIES} )
		LIST(APPEND JABBER_INCLUDE_DIR ${GLOOX_INCLUDE_DIR})
		LIST(APPEND JABBER_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/" )
	endif( GLOOX_FOUND )
else( GLOOX_SHARED OR NOT GLOOX_PATH )
	LIST(REMOVE_ITEM QUTIM_H "${CMAKE_CURRENT_SOURCE_DIR}/src/gloox/dns.h")
	include( FindZLIB )
	include( FindLibIDN )
	if( OpenSSL )
		SET( OPENSSL_REQUIRED )
		include( FindOpenSSL )
	endif( OpenSSL )
	if( GNUTLS )
		SET( GNUTLS_REQUIRED )
		include( FindGNUTLS )
	endif( GNUTLS )
	if( WIN32  )
		FIND_LIBRARY( SECUR32_LIBRARIES secur32 )
		FIND_LIBRARY( CRYPT32_LIBRARIES crypt32 )
		if( SECUR32_LIBRARIES )
			message( STATUS "Secur32 found: ${SECUR32_LIBRARIES}" )
		else( )
			message( SEND_ERROR "Secur32 not found" )
		endif( )
		if( CRYPT32_LIBRARIES )
			message( STATUS "Crypt32 found: ${CRYPT32_LIBRARIES}" )
		else( )
			message( SEND_ERROR "Crypt32 not found" )
		endif( )
	endif( )
	file( GLOB GLOOX_CPP libs/gloox/*.cpp )
	file( GLOB GLOOX_H libs/gloox/*.h )

	if( GNUTLS_FOUND )
		ADD_DEFINITIONS ( -DHAVE_GNUTLS )
		LIST(APPEND JABBER_LIBS ${GNUTLS_LIBRARIES})
		LIST(APPEND JABBER_INCLUDE_DIR ${GNUTLS_INCLUDE_DIR})
	else( GNUTLS_FOUND )
		if( OPENSSL_FOUND )
			ADD_DEFINITIONS ( -DHAVE_OPENSSL )
			LIST(APPEND JABBER_LIBS ${OPENSSL_LIBRARIES} )
			if( WIN32 )
				LIST(APPEND JABBER_LIBS ${OPENSSL_EAY_LIBRARIES} )		
			endif( WIN32 )
			LIST(APPEND JABBER_INCLUDE_DIR ${OPENSSL_INCLUDE_DIR} )
		else( OPENSSL_FOUND )
			if( WIN32 )
				if( SECUR32_LIBRARIES AND CRYPT32_LIBRARIES )
					LIST(APPEND JABBER_LIBS ${SECUR32_LIBRARIES} )
					LIST(APPEND JABBER_LIBS ${CRYPT32_LIBRARIES} )
					ADD_DEFINITIONS ( -DHAVE_WINTLS )
				endif( SECUR32_LIBRARIES AND CRYPT32_LIBRARIES )
			endif( WIN32 )
		endif( OPENSSL_FOUND )
	endif( GNUTLS_FOUND )

	if( LIBIDN_FOUND )
		ADD_DEFINITIONS ( -DHAVE_LIBIDN )
		LIST(APPEND JABBER_LIBS ${LIBIDN_LIBRARIES} )
		LIST(APPEND JABBER_INCLUDE_DIR ${LIBIDN_INCLUDE_DIR} )
	endif( LIBIDN_FOUND )

	if( ZLIB_FOUND )
		ADD_DEFINITIONS ( -DHAVE_ZLIB )
		LIST(APPEND JABBER_LIBS ${ZLIB_LIBRARIES} )
		LIST(APPEND JABBER_INCLUDE_DIR ${ZLIB_INCLUDE_DIR} )
	endif( ZLIB_FOUND)
endif( GLOOX_SHARED OR NOT GLOOX_PATH )


include( CheckFunctionExists )

if( UNIX )
	FIND_LIBRARY( RESOLV_LIBRARIES resolv)
	if( RESOLV_LIBRARIES )
		ADD_DEFINITIONS ( -DHAVE_RES_QUERYDOMAIN )
		ADD_DEFINITIONS ( -DHAVE_DN_SKIPNAME )
		ADD_DEFINITIONS ( -DHAVE_RES_QUERY )
		LIST(APPEND JABBER_LIBS ${RESOLV_LIBRARIES})
		message( STATUS "Found resolv libs: ${RESOLV_LIBRARIES}" )
	else( )
		message( STATUS "Could NOT find resolv libs" )
	endif( RESOLV_LIBRARIES )
else( WIN32 )
	FIND_LIBRARY( DNSAPI_LIBRARIES dnsapi)
	FIND_PATH( WINDNS_H windns.h )
	if( DNSAPI_LIBRARIES AND WINDNS_H )
		ADD_DEFINITIONS ( -DHAVE_WINDNS_H )
		LIST(APPEND JABBER_LIBS ${DNSAPI_LIBRARIES})
	endif( DNSAPI_LIBRARIES AND WINDNS_H )
endif( )

check_function_exists( setsockopt SETSOCKOPT_EXISTS )
if( SETSOCKOPT_EXISTS )
	ADD_DEFINITIONS ( -DHAVE_SETSOCKOPT )
endif( SETSOCKOPT_EXISTS )

SET (QT_USE_QTNETWORK true)
SET (QT_USE_QTGUI true)
FIND_PACKAGE (Qt4 REQUIRED)

INCLUDE (${CMAKE_ROOT}/Modules/UseQt4.cmake)
FIND_PATH( QUTIM_INCLUDE_DIRS qutim/protocolinterface.h ../../include )
if( QUTIM_INCLUDE_DIRS )
	MESSAGE( STATUS "Found qutIM headers: ${QUTIM_INCLUDE_DIRS}" )
	INCLUDE_DIRECTORIES( ${QUTIM_INCLUDE_DIRS} )
else( QUTIM_INCLUDE_DIRS )
	MESSAGE( SEND_ERROR "Could NOT find qutIM development headers" )
endif( QUTIM_INCLUDE_DIRS )
if( APPLE )
	INCLUDE_DIRECTORIES ( /opt/local/include )
endif( APPLE )
#if( UNIX )
#INCLUDE_DIRECTORIES ( /usr/include )
#endif( UNIX )

INCLUDE_DIRECTORIES (${QT_QTGUI_INCLUDE_DIR}
	${QT_QTCORE_INCLUDE_DIR}
	${CMAKE_CURRENT_BINARY_DIR}
	${JABBER_INCLUDE_DIR}
	.
		src
		libs
	)

SET(HEADERS
${QUTIM_H}
${GLOOX_H}
libs/config.win.h
)

SET (SOURCES
${QUTIM_CPP}
${GLOOX_CPP}
)

SET (RESOURCES
./jabber.qrc
)

SET (FORMS
${QUTIM_UI}
)

QT4_WRAP_CPP (MOC_SRCS ${QUTIM_H})
QT4_WRAP_UI (UIS_H ${FORMS})
QT4_ADD_RESOURCES (RCC ${RESOURCES})

ADD_LIBRARY (jabber SHARED ${SOURCES} ${MOC_SRCS} ${UIS_H} ${RCC})

TARGET_LINK_LIBRARIES (jabber
	${QT_LIBRARIES}
	${JABBER_LIBS}
	)
# I do not think, that it is suitable for CMake.
#
# SET_TARGET_PROPERTIES(jabber
#   PROPERTIES
#   PREFIX "../lib"
# )

INSTALL (TARGETS jabber DESTINATION lib/qutim )
