FIND_PACKAGE(Threads)
INCLUDE(CheckIncludeFile)
IF(CMAKE_THREAD_LIBS_INIT)
  CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H)
  add_definitions(-DLIBXML_THREAD_ENABLED)
ENDIF(CMAKE_THREAD_LIBS_INIT)
IF(CMAKE_USE_PTHREADS_INIT)
  SET(HAVE_LIBPTHREAD 1)
ENDIF(CMAKE_USE_PTHREADS_INIT)

CHECK_INCLUDE_FILE(ansidecl.h HAVE_ANSIDECL_H)
CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
CHECK_INCLUDE_FILE(float.h HAVE_FLOAT_H)
CHECK_INCLUDE_FILE(fp_class.h HAVE_FP_CLASS_H)
CHECK_INCLUDE_FILE(ieeefp.h HAVE_IEEEFP_H)
CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
CHECK_INCLUDE_FILE(locale.h HAVE_LOCALE_H)
CHECK_INCLUDE_FILE(math.h HAVE_MATH_H)
CHECK_INCLUDE_FILE(memory.h HAVE_MEMORY_H)
CHECK_INCLUDE_FILE(nan.h HAVE_NAN_H)
CHECK_INCLUDE_FILE(stdarg.h HAVE_STDARG_H)
CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
CHECK_INCLUDE_FILE(stdlib.h HAVE_STDLIB_H)
CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)
CHECK_INCLUDE_FILE(string.h HAVE_STRING_H)
CHECK_INCLUDE_FILE(sys/select.h HAVE_SYS_SELECT_H)
CHECK_INCLUDE_FILE(sys/stat.h HAVE_SYS_STAT_H)
CHECK_INCLUDE_FILE(sys/timeb.h HAVE_SYS_TIMEB_H)
CHECK_INCLUDE_FILE(sys/time.h HAVE_SYS_TIME_H)
CHECK_INCLUDE_FILE(time.h HAVE_TIME_H)
CHECK_INCLUDE_FILE(sys/types.h HAVE_SYS_TYPES_H)
CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
CHECK_INCLUDE_FILE(xlocale.h HAVE_XLOCALE_H)

INCLUDE(CheckFunctionExists)
CHECK_FUNCTION_EXISTS(asctime HAVE_ASCTIME)
CHECK_FUNCTION_EXISTS(clock_gettime HAVE_CLOCK_GETTIME)
CHECK_FUNCTION_EXISTS(printf HAVE_PRINTF)
CHECK_FUNCTION_EXISTS(fprintf HAVE_FPRINTF)
CHECK_FUNCTION_EXISTS(sprintf HAVE_SPRINTF)
CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF)
CHECK_FUNCTION_EXISTS(vfprintf HAVE_VFPRINTF)
CHECK_FUNCTION_EXISTS(vsprintf HAVE_VSPRINTF)
CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF)
CHECK_FUNCTION_EXISTS(ftime HAVE_FTIME)
CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
CHECK_FUNCTION_EXISTS(gmtime_r HAVE_GMTIME_R)
CHECK_FUNCTION_EXISTS(localtime HAVE_LOCALTIME)
CHECK_FUNCTION_EXISTS(localtime_r HAVE_LOCALTIME_R)
CHECK_FUNCTION_EXISTS(mktime HAVE_MKTIME)
CHECK_FUNCTION_EXISTS(sscanf HAVE_SSCANF)
CHECK_FUNCTION_EXISTS(stat HAVE_STAT)
CHECK_FUNCTION_EXISTS(time HAVE_TIME)

SET(WITH_XSLT_DEBUG 1)
SET(WITH_MEM_DEBUG 0)
SET(WITH_TRIO 0)
SET(WITH_DEBUGGER 1)
SET(WITH_MODULES 0)
IF(NOT WIN32)
  SET(LIBXSLT_DEFAULT_PLUGINS_PATH "${CMAKE_INSTALL_PREFIX}/lib/libxslt-plugins")
ENDIF(NOT WIN32)
IF(HAVE_XLOCALE_H)
  SET(XSLT_LOCALE_XLOCALE 1)
ELSE(HAVE_XLOCALE_H)
  SET(XSLT_LOCALE_XLOCALE 0)
ENDIF(HAVE_XLOCALE_H)
IF(WIN32)
  SET(XSLT_LOCALE_WINAPI 1)
ELSE(WIN32)
  SET(XSLT_LOCALE_WINAPI 0)
ENDIF(WIN32)

SET(VERSION "1.1.26")
SET(LIBXSLT_VERSION_NUMBER 10126)
SET(LIBXSLT_VERSION_EXTRA "-BRLCAD")

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
	${CMAKE_CURRENT_BINARY_DIR}/../include/libxslt/config.h)
DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../include/libxslt/config.h")

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/xsltconfig.h.in
  ${CMAKE_CURRENT_BINARY_DIR}/../include/libxslt/xsltconfig.h)
DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../include/libxslt/xsltconfig.h")

SET(libxslt_srcs
  src/attributes.c
  src/attrvt.c
  src/documents.c
  src/extensions.c
  src/extra.c
  src/functions.c
  src/imports.c
  src/keys.c
  src/namespaces.c
  src/numbers.c
  src/pattern.c
  src/preproc.c
  src/security.c
  src/templates.c
  src/transform.c
  src/variables.c
  src/xslt.c
  src/xsltlocale.c
  src/xsltutils.c
  )

include_directories(
  ${CMAKE_CURRENT_SOURCE_DIR}/include
  ${CMAKE_CURRENT_SOURCE_DIR}/include/libxslt
  ${CMAKE_CURRENT_SOURCE_DIR}/../libxml/include
  ${CMAKE_CURRENT_BINARY_DIR}/../include
  ${CMAKE_CURRENT_BINARY_DIR}/../include/libxslt
  /usr/local/include
  )

add_library(xslt SHARED ${libxslt_srcs})
target_link_libraries(xslt xml)
