PROJECT( libsyncml C )
SET( LIBSYNCML_VERSION_MAJOR "0" )
SET( LIBSYNCML_VERSION_MINOR "4" )
SET( LIBSYNCML_VERSION_PATCH "6" )
SET( LIBSYNCML_VERSION "${LIBSYNCML_VERSION_MAJOR}.${LIBSYNCML_VERSION_MINOR}.${LIBSYNCML_VERSION_PATCH}" )

# TODO: Move to external file/macro
SET( CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules" )

SET( LIB_SUFFIX "" CACHE STRING "The library directory suffix. 32bit empty string, 64 for 64bit." )
SET( LIB_INSTALL_DIR  "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE INTERNAL "libary location" )
SET( BIN_INSTALL_DIR  "${CMAKE_INSTALL_PREFIX}/bin" CACHE INTERNAL "binary location" )
SET( SHARE_INSTALL_DIR  "${CMAKE_INSTALL_PREFIX}/share" CACHE INTERNAL "data location" )
SET( INCLUDE_INSTALL_DIR  "${CMAKE_INSTALL_PREFIX}/include" CACHE INTERNAL "headers location" )
SET( LIBEXEC_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/libexec" CACHE INTERNAL "libexec location" )

#MESSAGE(STATUS "CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}" )

SET( LIBSYNCML_LIBRARIES_DIR "${LIB_INSTALL_DIR}" CACHE PATH "Syncml library location" )
SET( LIBSYNCML_INCLUDE_DIR "${INCLUDE_INSTALL_DIR}/libsyncml-1.0" CACHE PATH "Syncml headers location" )
SET( LIBSYNCML_BIN_DIR "${BIN_INSTALL_DIR}" CACHE PATH "Syncml binaries location" )
SET( LIBSYNCML_DATA_DIR "${CMAKE_INSTALL_PREFIX}/share" CACHE PATH "Syncml data location" )
SET( LIBSYNCML_EXEC_INSTALL_DIR "${BIN_INSTALL_DIR}" CACHE PATH "Syncml binary location" )

# find header files and type size
INCLUDE( CheckTypeSize )
INCLUDE( CheckIncludeFiles )

CHECK_INCLUDE_FILES( dlfcn.h HAVE_DLFCN_H )
CHECK_INCLUDE_FILES( inttypes.h HAVE_INTTYPES_H )
CHECK_INCLUDE_FILES( memory.h HAVE_MEMORY_H )
CHECK_INCLUDE_FILES( stdint.h HAVE_STDINT_H )
CHECK_INCLUDE_FILES( stdlib.h HAVE_STDLIB_H )
CHECK_INCLUDE_FILES( strings.h HAVE_STRINGS_H )
CHECK_INCLUDE_FILES( string.h HAVE_STRING_H )
CHECK_INCLUDE_FILES( sys/stat.h HAVE_SYS_STAT_H )
CHECK_INCLUDE_FILES( sys/types.h HAVE_SYS_TYPES_H )
CHECK_INCLUDE_FILES( unistd.h HAVE_UNISTD_H )

CHECK_TYPE_SIZE( uint16_t UINT16_T )
CHECK_TYPE_SIZE( uint32_t UINT32_T )
CHECK_TYPE_SIZE( uint8_t UINT8_T )

# ensure out od source build
INCLUDE( MacroEnsureOutOfSourceBuild )
MACRO_ENSURE_OUT_OF_SOURCE_BUILD("${CMAKE_PROJECT_NAME} doesn't allow to build within the source directory. Please, create a seperate build directory and run 'cmake ${PROJECT_SOURCE_DIR} [options]'!")

# find requirements
SET ( OPENOBEX_MIN_VERSION "1.1" )
SET ( LIBSOUP2_MIN_VERSION "2.2.91" )
#SET ( LIBWBXML2_MIN_VERSION "0.9.0" )
#SET ( BLUEZ_MIN_VERSION "3.19" )

FIND_PACKAGE( GLIB2 REQUIRED )
FIND_PACKAGE( LibXml2 REQUIRED )	
FIND_PACKAGE( OpenObex )
FIND_PACKAGE( LibSoup2 )
FIND_PACKAGE( LibWbxml2 )
FIND_PACKAGE( BlueZ )
FIND_PACKAGE( Check )

IF(LIBWBXML2_FOUND)
	SET( ENABLE_WBXML ON)
ENDIF(LIBWBXML2_FOUND)

IF(LIBSOUP2_FOUND)
	OPTION( ENABLE_HTTP "enable http transports" ON )
ELSE(LIBSOUP2_FOUND)
	SET( ENABLE_HTTP OFF )
ENDIF(LIBSOUP2_FOUND)

IF(OPENOBEX_FOUND)
	OPTION( ENABLE_OBEX "enable obex transports" ON )
	IF(BLUEZ_FOUND)
		OPTION( ENABLE_BLUETOOTH "enable obex over bluetooth transports" ON )
	ELSE(BLUEZ_FOUND)
		SET( ENABLE_BLUETOOTH OFF )
	ENDIF(BLUEZ_FOUND)
ELSE(OPENOBEX_FOUND)
	SET( ENABLE_OBEX OFF )
ENDIF(OPENOBEX_FOUND)

IF(CHECK_FOUND)
	OPTION( ENABLE_UNIT_TEST "enable unit tests" OFF )
	INCLUDE( Testing )
ENDIF(CHECK_FOUND)

OPTION( ENABLE_TOOLS "enable building tools" ON )
OPTION( ENABLE_TRACE "enable tracing" ON )

SET( PACKAGE "libsyncml" )
SET( PACKAGE_BUGREPORT " " )
SET( PACKAGE_NAME "libsyncml" )
SET( PACKAGE_TARNAME "${PACKAGE_NAME}" )
SET( PACKAGE_STRING "${PACKAGE_NAME} ${LIBSYNCML_VERSION}" )
SET( PACKAGE_VERSION "${LIBSYNCML_VERSION}" )
SET( VERSION "${LIBSYNCML_VERSION}" )

CONFIGURE_FILE( "config.h.cmake" "config.h" )
CONFIGURE_FILE( "libsyncml-1.0.pc.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/libsyncml-1.0.pc" @ONLY)

# add uninstall target
CONFIGURE_FILE(	"${CMAKE_SOURCE_DIR}/cmake/modules/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY)

ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")

ADD_SUBDIRECTORY( libsyncml )
ADD_SUBDIRECTORY( tools )
ADD_SUBDIRECTORY( tests )

# todo: add requires in pc file
INSTALL( FILES "${CMAKE_CURRENT_BINARY_DIR}/libsyncml-1.0.pc" DESTINATION "${LIB_INSTALL_DIR}/pkgconfig/" )

# status output
INCLUDE( ShowStatus )
MESSAGE( STATUS "==================================================" )
SHOW_STATUS( ENABLE_TOOLS "building tools\t\t" )
SHOW_STATUS( ENABLE_TRACE "tracing tools\t\t" )
SHOW_STATUS( ENABLE_UNIT_TEST "unit tests\t\t\t" )
SHOW_STATUS( ENABLE_HTTP "http transports\t\t" )
SHOW_STATUS( ENABLE_OBEX "obex transports\t\t" )
SHOW_STATUS( ENABLE_BLUETOOTH "obex over bluetooth transports" )

