blob: 8a2526f468e634cf3131ec035286217061a02649 [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.
#
# Build the log4cxx library
add_library(log4cxx)
if(${log4cxx_ABI_VER} GREATER 15)
set_target_properties(log4cxx PROPERTIES CXX_VISIBILITY_PRESET hidden)
endif()
if(BUILD_SHARED_LIBS)
target_compile_definitions(log4cxx PRIVATE LOG4CXX)
if(UNIX AND NOT APPLE)
# Make defined symbols non-preemptible, which can optimize relocation processing
target_link_options(log4cxx PRIVATE "LINKER:-Bsymbolic")
endif()
else()
target_compile_definitions(log4cxx PUBLIC LOG4CXX_STATIC)
endif()
add_dependencies(log4cxx log4cxx-include)
set(extra_classes "")
if(LOG4CXX_NETWORKING_SUPPORT)
list(APPEND extra_classes
datagrampacket.cpp
datagramsocket.cpp
aprdatagramsocket.cpp
serversocket.cpp
aprserversocket.cpp
socket.cpp
aprsocket.cpp
telnetappender.cpp
socketappenderskeleton.cpp
socketoutputstream.cpp
xmlsocketappender.cpp
syslogwriter.cpp
syslogappender.cpp
)
endif()
if(LOG4CXX_DOMCONFIGURATOR_SUPPORT)
list(APPEND extra_classes
domconfigurator.cpp
)
endif()
if(LOG4CXX_MULTIPROCESS_ROLLING_FILE_APPENDER)
target_compile_definitions(log4cxx PRIVATE LOG4CXX_MULTI_PROCESS)
list(APPEND extra_classes
multiprocessrollingfileappender.cpp
)
endif()
if(${ENABLE_FMT_LAYOUT})
list(APPEND extra_classes
fmtlayout.cpp
)
endif()
target_sources(log4cxx
PRIVATE
action.cpp
andfilter.cpp
appenderattachableimpl.cpp
appenderskeleton.cpp
aprinitializer.cpp
asyncappender.cpp
asyncbuffer.cpp
basicconfigurator.cpp
bufferedwriter.cpp
bytearrayinputstream.cpp
bytearrayoutputstream.cpp
bytebuffer.cpp
cacheddateformat.cpp
charsetdecoder.cpp
charsetencoder.cpp
class.cpp
classnamepatternconverter.cpp
classregistration.cpp
colorstartpatternconverter.cpp
colorendpatternconverter.cpp
configurator.cpp
consoleappender.cpp
cyclicbuffer.cpp
date.cpp
dateformat.cpp
datepatternconverter.cpp
dbappender.cpp
defaultconfigurator.cpp
defaultloggerfactory.cpp
defaultrepositoryselector.cpp
exception.cpp
fallbackerrorhandler.cpp
file.cpp
fileappender.cpp
filedatepatternconverter.cpp
fileinputstream.cpp
filelocationpatternconverter.cpp
fileoutputstream.cpp
filerenameaction.cpp
filewatchdog.cpp
filter.cpp
filterbasedtriggeringpolicy.cpp
fixedwindowrollingpolicy.cpp
formattinginfo.cpp
fulllocationpatternconverter.cpp
gzcompressaction.cpp
hexdump.cpp
hierarchy.cpp
htmllayout.cpp
inetaddress.cpp
inputstream.cpp
inputstreamreader.cpp
integer.cpp
integerpatternconverter.cpp
jsonlayout.cpp
layout.cpp
level.cpp
levelmatchfilter.cpp
levelpatternconverter.cpp
levelrangefilter.cpp
linelocationpatternconverter.cpp
lineseparatorpatternconverter.cpp
literalpatternconverter.cpp
loader.cpp
locale.cpp
locationinfo.cpp
locationinfofilter.cpp
logger.cpp
loggermatchfilter.cpp
loggerpatternconverter.cpp
loggingevent.cpp
loggingeventpatternconverter.cpp
loglog.cpp
logmanager.cpp
logstream.cpp
manualtriggeringpolicy.cpp
mapfilter.cpp
mdc.cpp
messagebuffer.cpp
messagepatternconverter.cpp
methodlocationpatternconverter.cpp
nameabbreviator.cpp
namepatternconverter.cpp
ndc.cpp
mdcpatternconverter.cpp
ndcpatternconverter.cpp
nteventlogappender.cpp
odbcappender.cpp
onlyonceerrorhandler.cpp
optionconverter.cpp
outputdebugstringappender.cpp
outputstream.cpp
outputstreamwriter.cpp
patternconverter.cpp
patternlayout.cpp
patternparser.cpp
pool.cpp
properties.cpp
propertiespatternconverter.cpp
propertyconfigurator.cpp
propertyresourcebundle.cpp
propertysetter.cpp
reader.cpp
relativetimedateformat.cpp
relativetimepatternconverter.cpp
resourcebundle.cpp
rollingfileappender.cpp
rollingpolicy.cpp
rollingpolicybase.cpp
rolloverdescription.cpp
rootlogger.cpp
shortfilelocationpatternconverter.cpp
simpledateformat.cpp
simplelayout.cpp
sizebasedtriggeringpolicy.cpp
smtpappender.cpp
strftimedateformat.cpp
stringhelper.cpp
stringmatchfilter.cpp
stringtokenizer.cpp
system.cpp
systemerrwriter.cpp
systemoutwriter.cpp
threadlocal.cpp
threadpatternconverter.cpp
threadusernamepatternconverter.cpp
threadspecificdata.cpp
threadutility.cpp
throwableinformationpatternconverter.cpp
timebasedrollingpolicy.cpp
timezone.cpp
transcoder.cpp
transform.cpp
triggeringpolicy.cpp
writer.cpp
writerappender.cpp
xmllayout.cpp
zipcompressaction.cpp
${extra_classes}
)
if(LOG4CXX_EVENTS_AT_EXIT)
target_sources(log4cxx
PRIVATE atexitregistry.cpp
)
endif(LOG4CXX_EVENTS_AT_EXIT)
if(WIN32)
target_sources(log4cxx
PRIVATE visualstudio.natvis
)
endif(WIN32)
set(LOG4CXX_LIB_NAME "log4cxx" CACHE STRING "Main library base name")
set_target_properties(log4cxx PROPERTIES
VERSION ${LIBLOG4CXX_LIB_VERSION}
SOVERSION ${LIBLOG4CXX_LIB_SOVERSION}
OUTPUT_NAME ${LOG4CXX_LIB_NAME}
PDB_NAME ${LOG4CXX_LIB_NAME}
COMPILE_PDB_NAME ${LOG4CXX_LIB_NAME}
EXPORT_NAME ${LOG4CXX_LIB_NAME}
)
get_directory_property( FILESYSTEM_IMPL DIRECTORY "${LOG4CXX_SOURCE_DIR}/src/main/include" DEFINITION FILESYSTEM_IMPL )
if("${FILESYSTEM_IMPL}" STREQUAL "std::filesystem" OR
"${FILESYSTEM_IMPL}" STREQUAL "std::experimental::filesystem" )
target_link_libraries(log4cxx PUBLIC $<$<AND:$<CXX_COMPILER_ID:GNU>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,9.0>>:stdc++fs>)
endif()
if(${ENABLE_FMT_LAYOUT})
target_link_libraries(log4cxx PUBLIC fmt::fmt)
endif()