PROJECT(XMLRPC)

INCLUDE_REGULAR_EXPRESSION("^.*$")

# Disable warnings on Borland to avoid changing 3rd party code.
IF(BORLAND)
  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-")
ENDIF(BORLAND)

# Include all the necessary files for macros
SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")

# Check if header file exists and add it to the list.
SET(CURRENT_INCLUDES)
INCLUDE (CheckIncludeFiles)
MACRO(CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE)
  CHECK_INCLUDE_FILES("${CURRENT_INCLUDES};${FILE}" ${VARIABLE})
  IF(${VARIABLE})
    SET(CURRENT_INCLUDES ${CURRENT_INCLUDES} ${FILE})
  ENDIF(${VARIABLE})
ENDMACRO(CHECK_INCLUDE_FILE_CONCAT)

CHECK_INCLUDE_FILE_CONCAT("stdio.h" HAVE_STDIO_H)
CHECK_INCLUDE_FILE_CONCAT("stdarg.h" HAVE_STDARG_H)
CHECK_INCLUDE_FILE_CONCAT("sys/filio.h" HAVE_SYS_FILIO_H)
CHECK_INCLUDE_FILE_CONCAT("sys/ioctl.h" HAVE_SYS_IOCTL_H)
CHECK_INCLUDE_FILE_CONCAT("wchar.h" HAVE_WCHAR_H)

IF(HAVE_WCHAR_H)
  OPTION(HAVE_UNICODE_WCHAR "Enable Unicode Support" YES)
  MARK_AS_ADVANCED(HAVE_UNICODE_WCHAR)
ELSE(HAVE_WCHAR_H)
  SET(HAVE_UNICODE_WCHAR 0)
ENDIF(HAVE_WCHAR_H)

INCLUDE (CheckSymbolExists)
CHECK_SYMBOL_EXISTS(asprintf "${CURRENT_INCLUDES}" HAVE_ASPRINTF)
CHECK_SYMBOL_EXISTS(setgroups "${CURRENT_INCLUDES}" HAVE_SETGROUPS)

INCLUDE (CheckTypeSize)
CHECK_TYPE_SIZE(size_t  SIZEOF_SIZE_T)

INCLUDE (TryCompileFromSource)
SET(HEADER_INCLUDES "${CURRENT_INCLUDES}")
TRY_COMPILE_FROM_SOURCE("va_list list1, list2; list1 = list2"
  VA_LIST_ISNOT_ARRAY_DEFINE)
TRY_COMPILE_FROM_SOURCE("va_list list1, list2; va_copy(list1, list2);"
  HAS_VA_COPY)
SET(VA_LIST_IS_ARRAY_DEFINE 0)
IF(NOT VA_LIST_ISNOT_ARRAY_DEFINE)
  SET(VA_LIST_IS_ARRAY_DEFINE 1)
ENDIF(NOT VA_LIST_ISNOT_ARRAY_DEFINE)
TRY_COMPILE_FROM_SOURCE("int x __attribute__((__unused__))"
  ATTR_UNUSED_VAR)
SET(ATTR_UNUSED)
IF(ATTR_UNUSED_VAR)
  SET(ATTR_UNUSED "__attribute__((__unused__))")
ENDIF(ATTR_UNUSED_VAR)

SET(HAVE_LIBWWW_SSL)
SET(DIRECTORY_SEPARATOR "/")

SET(HAVE_PTHREADS 0)
IF(CMAKE_BUILD_XMLRPC_WITH_THREADS)
  FIND_PACKAGE(Threads)
  IF(WIN32 OR CMAKE_USE_PTHREADS_INIT)
    SET(HAVE_PTHREADS 1)
  ENDIF(WIN32 OR CMAKE_USE_PTHREADS_INIT)
ENDIF(CMAKE_BUILD_XMLRPC_WITH_THREADS)

INCLUDE_DIRECTORIES(
  "${CMAKE_CURRENT_SOURCE_DIR}"
  "${CMAKE_CURRENT_BINARY_DIR}"
  ${CMAKE_EXPAT_INCLUDES}
  ${CMAKE_CURL_INCLUDES}
  )

CONFIGURE_FILE(
  "${CMAKE_CURRENT_SOURCE_DIR}/xmlrpc_config.h.in"
  "${CMAKE_CURRENT_BINARY_DIR}/xmlrpc_config.h"
  )
CONFIGURE_FILE(
  "${CMAKE_CURRENT_SOURCE_DIR}/xmlrpc_amconfig.h.in"
  "${CMAKE_CURRENT_BINARY_DIR}/xmlrpc_amconfig.h"
  )

SET(xmlrpc_SRCS
  #XmlRpcCpp.cpp
  xmlrpc_array.c
  xmlrpc_authcookie.c
  xmlrpc_base64.c
  xmlrpc_client.c
  xmlrpc_data.c
  xmlrpc_expat.c
  xmlrpc_parse.c
  xmlrpc_registry.c
  xmlrpc_serialize.c
  xmlrpc_curl_transport.c
  #xmlrpc_server_abyss.c
  xmlrpc_struct.c
  xmlrpc_strutil.c
  xmlrpc_support.c
  casprintf.c
  )
IF(HAVE_UNICODE_WCHAR)
  SET(xmlrpc_SRCS
    ${xmlrpc_SRCS}
    xmlrpc_utf8.c
    )
ENDIF(HAVE_UNICODE_WCHAR)
IF(WIN32)
  SET(xmlrpc_SRCS ${xmlrpc_SRCS}
    win32_pthreads.c
    )
ENDIF(WIN32)

ADD_LIBRARY(cmXMLRPC ${xmlrpc_SRCS})
TARGET_LINK_LIBRARIES(cmXMLRPC ${CMAKE_EXPAT_LIBRARIES} ${CMAKE_CURL_LIBRARIES})
IF(HAVE_PTHREADS)
  TARGET_LINK_LIBRARIES(cmXMLRPC ${CMAKE_THREAD_LIBS_INIT})
ENDIF(HAVE_PTHREADS)

ADD_EXECUTABLE(xrtest synch_client.c)
TARGET_LINK_LIBRARIES(xrtest cmXMLRPC ${CMAKE_DL_LIBS})

# comment out test since it doesn pass and Andy doesn;t seem to be fixing it,
# for now assume that XMLRPC is not production quality code - Ken
# ADD_TEST(Test-XMLRPC ${EXECUTABLE_OUTPUT_PATH}/xrtest)
