blob: e078865a13df0f0b2f24b99902b77a8ae3fe26e0 [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
set(GENERATED_HEADERS)
# Configure log4cxx.h
set(LOG4CXX_CHAR "utf-8" CACHE STRING "Internal character representation, choice of utf-8, wchar_t, unichar")
set_property(CACHE LOG4CXX_CHAR PROPERTY STRINGS "utf-8" "wchar_t" "unichar")
if(${LOG4CXX_CHAR} STREQUAL "unichar")
set(LOGCHAR_IS_UNICHAR 1)
set(LOGCHAR_IS_WCHAR 0)
set(LOGCHAR_IS_UTF8 0)
elseif(${LOG4CXX_CHAR} STREQUAL "wchar_t")
set(LOGCHAR_IS_WCHAR 1)
set(LOGCHAR_IS_UNICHAR 0)
set(LOGCHAR_IS_UTF8 0)
else()
set(LOGCHAR_IS_UNICHAR 0)
set(LOGCHAR_IS_WCHAR 0)
set(LOGCHAR_IS_UTF8 1)
endif()
option(LOG4CXX_WCHAR_T "Enable wchar_t API methods" ON)
option(LOG4CXX_UNICHAR "Enable UniChar API methods" OFF)
set(INIT_IOS_BASE 0)
if(APPLE)
option(LOG4CXX_CFSTRING "Enable CFString API methods, requires Mac OS/X CoreFoundation" OFF)
set(INIT_IOS_BASE 1)
endif()
set(CHAR_API 1)
foreach(varName WCHAR_T UNICHAR CFSTRING )
if(${LOG4CXX_${varName}})
set("${varName}_API" 1)
else()
set("${varName}_API" 0)
endif()
endforeach()
option(LOG4CXX_NETWORKING_SUPPORT "Support logging over a network socket" ON)
if(LOG4CXX_NETWORKING_SUPPORT)
set(NETWORKING_SUPPORT 1)
else()
set(NETWORKING_SUPPORT 0)
endif()
option(LOG4CXX_DOMCONFIGURATOR_SUPPORT "Support XML as a configuration method" ON)
if(LOG4CXX_DOMCONFIGURATOR_SUPPORT)
set(DOMCONFIGURATOR_SUPPORT 1)
else()
set(DOMCONFIGURATOR_SUPPORT 0)
endif()
option(LOG4CXX_MULTIPROCESS_ROLLING_FILE_APPENDER "Support multiple processes logging to the same file" OFF)
if(LOG4CXX_MULTIPROCESS_ROLLING_FILE_APPENDER)
set(MULTIPROCESS_RFA 1)
else()
set(MULTIPROCESS_RFA 0)
endif()
option(LOG4CXX_EVENTS_AT_EXIT "Prevent static data cleanup to allow event logging during application exit. Note: Appenders should not configure the \"BufferedIO\" option to true." OFF)
if(LOG4CXX_EVENTS_AT_EXIT )
set(EVENTS_AT_EXIT 1)
else()
set(EVENTS_AT_EXIT 0)
endif()
set(LOG4CXX_DECLARE_DEFAULT_NS_ALIAS 0)
if(NOT "log4cxx" STREQUAL "${LOG4CXX_NS}")
set(LOG4CXX_DECLARE_DEFAULT_NS_ALIAS 1)
endif()
set(LOG4CXX_FORMAT_NAMESPACE "fmt" CACHE STRING "format() function namespace, choice of fmt (default), std")
set_property(CACHE LOG4CXX_FORMAT_NAMESPACE PROPERTY STRINGS "fmt" "std")
set(LOG4CXX_USE_STANDARD_FORMAT 0)
if("std" STREQUAL "${LOG4CXX_FORMAT_NAMESPACE}")
set(LOG4CXX_USE_STANDARD_FORMAT 1)
endif()
# Configure log4cxx_private.h
set(LOG4CXX_CHARSET "utf-8" CACHE STRING "LogString characters, choice of utf-8 (default), ISO-8859-1, US-ASCII, EBCDIC, locale")
set_property(CACHE LOG4CXX_CHARSET PROPERTY STRINGS "utf-8" "ISO-8859-1" "US-ASCII" "EBCDIC" "locale")
set(CHARSET_EBCDIC 0)
set(CHARSET_USASCII 0)
set(CHARSET_ISO88591 0)
set(CHARSET_UTF8 0)
if(${LOG4CXX_CHARSET} STREQUAL "EBCDIC")
set(CHARSET_EBCDIC 1)
elseif(${LOG4CXX_CHARSET} STREQUAL "US-ASCII")
set(CHARSET_USASCII 1)
elseif(${LOG4CXX_CHARSET} STREQUAL "ISO-8859-1")
set(CHARSET_ISO88591 1)
elseif(${LOG4CXX_CHARSET} STREQUAL "utf-8")
set(CHARSET_UTF8 1)
endif()
#
# Test for various functions
#
include(CheckFunctionExists)
include(CheckCXXSymbolExists)
include(CheckIncludeFileCXX)
include(CheckLibraryExists)
CHECK_INCLUDE_FILE_CXX(locale HAS_STD_LOCALE)
CHECK_SYMBOL_EXISTS(mbsrtowcs "cwchar" HAS_MBSRTOWCS)
CHECK_SYMBOL_EXISTS(wcstombs "cstdlib" HAS_WCSTOMBS)
CHECK_SYMBOL_EXISTS(fwide "cwchar" HAS_FWIDE )
CHECK_SYMBOL_EXISTS(syslog "syslog.h" HAS_SYSLOG)
if(UNIX)
set(CMAKE_REQUIRED_LIBRARIES "pthread")
CHECK_SYMBOL_EXISTS(pthread_sigmask "signal.h" HAS_PTHREAD_SIGMASK)
CHECK_SYMBOL_EXISTS(pthread_self "pthread.h" HAS_PTHREAD_SELF)
# Check for the (linux) pthread_setname_np.
# OSX and BSD are special apparently. OSX only lets you name
# the current thread, while BSD calls it pthread_set_name_np.
# Since this is really not a core feature and the end-user can configure
# it anyway, we're only going to worry about linux.
include(${LOG4CXX_SOURCE_DIR}/src/cmake/pthread/log4cxx-pthread.cmake)
if(${PTHREAD_SETNAME_NP_FOUND})
set(HAS_PTHREAD_SETNAME 1)
endif()
if(${PTHREAD_GETNAME_NP_FOUND})
set(HAS_PTHREAD_GETNAME 1)
endif()
endif(UNIX)
foreach(varName
HAS_THREAD_LOCAL
HAS_STD_LOCALE
HAS_ODBC
HAS_MBSRTOWCS
HAS_WCSTOMBS
HAS_FWIDE
HAS_LIBESMTP
HAS_SYSLOG
HAS_PTHREAD_SELF
HAS_PTHREAD_SIGMASK
HAS_PTHREAD_SETNAME
HAS_PTHREAD_GETNAME
)
if(${varName} EQUAL 0)
continue()
elseif(${varName} EQUAL 1)
continue()
elseif(${varName} STREQUAL "ON" OR ${varName} STREQUAL "TRUE")
set(${varName} 1 )
else()
set(${varName} 0 )
endif()
endforeach()
# Configure both our private header and our public header
configure_file(${LOG4CXX_SOURCE_DIR}/src/cmake/compiler-features/makeunique.h.cmake
${CMAKE_CURRENT_BINARY_DIR}/log4cxx/helpers/makeunique.h
)
list(APPEND GENERATED_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/log4cxx/helpers/makeunique.h)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/log4cxx/private/log4cxx_private.h.in
${CMAKE_CURRENT_BINARY_DIR}/log4cxx/private/log4cxx_private.h
@ONLY
)
list(APPEND GENERATED_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/log4cxx/private/log4cxx_private.h)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/log4cxx/log4cxx.h.in
${CMAKE_CURRENT_BINARY_DIR}/log4cxx/log4cxx.h
@ONLY
)
list(APPEND GENERATED_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/log4cxx/log4cxx.h)
configure_file(${LOG4CXX_SOURCE_DIR}/src/cmake/boost-fallback/boost-std-configuration.h.cmake
${CMAKE_CURRENT_BINARY_DIR}/log4cxx/private/boost-std-configuration.h
)
list(APPEND GENERATED_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/log4cxx/private/boost-std-configuration.h)
if(WIN32)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/log4cxx/version_info.h.in
${CMAKE_CURRENT_BINARY_DIR}/log4cxx/version_info.h
@ONLY
)
list(APPEND GENERATED_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/log4cxx/version_info.h)
endif()
# A target for the convenience of working with headers in the IDE
file(GENERATE
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/empty-lib-stub.cpp
CONTENT "namespace {int someUnused{};}\n"
)
file(GLOB_RECURSE HEADERS log4cxx/*)
if(NOT LOG4CXX_DOMCONFIGURATOR_SUPPORT)
list(REMOVE_ITEM HEADERS "xml/domconfigurator.h")
endif()
add_library(log4cxx-include STATIC ${HEADERS} ${GENERATED_HEADERS} ${CMAKE_CURRENT_BINARY_DIR}/empty-lib-stub.cpp)
target_include_directories(log4cxx-include PUBLIC . ${CMAKE_CURRENT_BINARY_DIR})
# And the same for Qt
option(LOG4CXX_QT_SUPPORT "Qt support/integration" OFF)
if(LOG4CXX_QT_SUPPORT)
file(GLOB_RECURSE HEADERS_QT log4cxx-qt/*)
add_library(log4cxx-qt-include STATIC ${HEADERS_QT} ${CMAKE_CURRENT_BINARY_DIR}/empty-lib-stub.cpp)
target_include_directories(log4cxx-qt-include PUBLIC . ${CMAKE_CURRENT_BINARY_DIR})
add_dependencies(log4cxx-qt-include log4cxx-include)
endif()