# This block needs to stay before the project (log4cplus) line so that
#  the output files placed into Android's libs directory.
if (CMAKE_TOOLCHAIN_FILE)
  # Android: set output folder to ${CMAKE_BINARY_DIR}
  set (LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_BINARY_DIR} CACHE PATH
    "root for library output, set this to change where android libs are compiled to")
endif ()

project (log4cplus)
cmake_minimum_required (VERSION 2.8.0)

include (Log4CPlusUtils.cmake)
log4cplus_get_version ("${PROJECT_SOURCE_DIR}/include"
  log4cplus_version_major log4cplus_version_minor log4cplus_version_patch)
message("-- Generating build for Log4cplus version ${log4cplus_version_major}.${log4cplus_version_minor}.${log4cplus_version_patch}")
set (log4cplus_soversion 7)
set (log4cplus_postfix "")

option(LOG4CPLUS_BUILD_TESTING "Build the test suite." ON)

find_package (Threads)
message (STATUS "Threads: ${CMAKE_THREAD_LIBS_INIT}")

set(BUILD_SHARED_LIBS TRUE CACHE BOOL "If TRUE, log4cplus is built as a shared library, otherwise as a static library")

if (WIN32)
  set (UNICODE_DEFAULT ON)
else (WIN32)
  set (UNICODE_DEFAULT OFF)
endif (WIN32)

if (MSVC)
  set (LOG4CPLUS_WORKING_LOCALE_DEFAULT ON)
else (MSVC)
  set (LOG4CPLUS_WORKING_LOCALE_DEFAULT OFF)
endif (MSVC)

option(LOG4CPLUS_WORKING_LOCALE "Define for compilers/standard libraries that support more than just the C locale."
  ${LOG4CPLUS_WORKING_LOCALE_DEFAULT})

option(LOG4CPLUS_WORKING_C_LOCALE
  "Define for compilers/standard libraries that have working C locale."
  OFF)

option (LOG4CPLUS_QT4 "Build with Qt4DebugAppender" OFF)

option(UNICODE "Build with tchar = wchar_t" ${UNICODE_DEFAULT})

option(WITH_ICONV "Use iconv() for char->wchar_t conversion."
  OFF)
  
set(_WIN32_WINNT 0x0500 CACHE STRING "Define Windows API version to use.")

if (NOT ${BUILD_SHARED_LIBS})
  # set S-prefix for static build 
  set (log4cplus_postfix "${log4cplus_postfix}S")
endif()    

if (UNICODE)
  set (log4cplus_postfix "${log4cplus_postfix}U")
endif (UNICODE)

if (WITH_ICONV)
  set(LOG4CPLUS_WITH_ICONV 1)
endif ()

set (log4cplus "log4cplus${log4cplus_postfix}")

include(ConfigureChecks.cmake)

# Prepare defines.hxx.cmake from defines.hxx.in by doing a bit of
# string manipulation.
file(READ include/log4cplus/config/defines.hxx.in FILE_BUFFER)
string(REGEX REPLACE "#undef[^a-zA-Z0-9_]+([a-zA-Z0-9_]+)"
  "#cmakedefine \\1 @\\1@" FILE_BUFFER "${FILE_BUFFER}")
set(DEFINES_HXX_CMAKE
  ${log4cplus_BINARY_DIR}/include/log4cplus/config/defines.hxx.cmake) 
set(DEFINES_HXX ${log4cplus_BINARY_DIR}/include/log4cplus/config/defines.hxx)
file(WRITE ${DEFINES_HXX_CMAKE} ${FILE_BUFFER})

configure_file(${DEFINES_HXX_CMAKE} ${DEFINES_HXX} @ONLY)

include_directories (${log4cplus_SOURCE_DIR}/include
                     ${log4cplus_BINARY_DIR}/include
                    )

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)

if (LOG4CPLUS_BUILD_TESTING)
  enable_testing()
endif (LOG4CPLUS_BUILD_TESTING)

add_subdirectory (src)
add_subdirectory (loggingserver)
if (LOG4CPLUS_BUILD_TESTING)
  add_subdirectory (tests)
endif (LOG4CPLUS_BUILD_TESTING)
if (LOG4CPLUS_QT4)
  add_subdirectory (qt4debugappender)
endif (LOG4CPLUS_QT4)

include(Log4CPlusCPack.cmake)
