345 lines
11 KiB
CMake
345 lines
11 KiB
CMake
# Copyright Contributors to the OpenVDB Project
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
#[=======================================================================[.rst:
|
|
|
|
FindLog4cplus
|
|
-------------
|
|
|
|
Find Log4cplus include dirs and libraries
|
|
|
|
Use this module by invoking find_package with the form::
|
|
|
|
find_package(Log4cplus
|
|
[version] [EXACT] # Minimum or EXACT version
|
|
[REQUIRED] # Fail with error if Log4cplus is not found
|
|
)
|
|
|
|
|
|
IMPORTED Targets
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
``Log4cplus::Log4cplus``
|
|
This module defines IMPORTED target Log4cplus::log4cplus, if Log4cplus has been
|
|
found.
|
|
|
|
Result Variables
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
This will define the following variables:
|
|
|
|
``Log4cplus_FOUND``
|
|
True if the system has the Log4cplus library.
|
|
``Log4cplus_VERSION``
|
|
The version of the Log4cplus library which was found.
|
|
``Log4cplus_INCLUDE_DIRS``
|
|
Include directories needed to use Log4cplus.
|
|
``Log4cplus_RELEASE_LIBRARIES``
|
|
Libraries needed to link to the release version of Log4cplus.
|
|
``Log4cplus_RELEASE_LIBRARY_DIRS``
|
|
Log4cplus release library directories.
|
|
``Log4cplus_DEBUG_LIBRARIES``
|
|
Libraries needed to link to the debug version of Log4cplus.
|
|
``Log4cplus_DEBUG_LIBRARY_DIRS``
|
|
Log4cplus debug library directories.
|
|
|
|
Deprecated - use [RELEASE|DEBUG] variants:
|
|
|
|
``Log4cplus_LIBRARIES``
|
|
Libraries needed to link to Log4cplus.
|
|
``Log4cplus_LIBRARY_DIRS``
|
|
Log4cplus library directories.
|
|
|
|
Cache Variables
|
|
^^^^^^^^^^^^^^^
|
|
|
|
The following cache variables may also be set:
|
|
|
|
``Log4cplus_INCLUDE_DIR``
|
|
The directory containing ``log4cplus/version.h``.
|
|
``Log4cplus_LIBRARY``
|
|
The path to the Log4cplus library. may include target_link_libraries() debug/optimized keywords.
|
|
``Log4cplus_LIBRARY_RELEASE``
|
|
The path to the Log4cplus release library.
|
|
``Log4cplus_LIBRARY_DEBUG``
|
|
The path to the Log4cplus debug library.
|
|
|
|
Hints
|
|
^^^^^
|
|
|
|
Instead of explicitly setting the cache variables, the following variables
|
|
may be provided to tell this module where to look.
|
|
|
|
``Log4cplus_ROOT``
|
|
Preferred installation prefix.
|
|
``LOG4CPLUS_INCLUDEDIR``
|
|
Preferred include directory e.g. <prefix>/include
|
|
``LOG4CPLUS_LIBRARYDIR``
|
|
Preferred library directory e.g. <prefix>/lib
|
|
``LOG4CPLUS_DEBUG_SUFFIX``
|
|
Suffix of the debug version of the log4cplus lib. Defaults to "D".
|
|
``SYSTEM_LIBRARY_PATHS``
|
|
Global list of library paths intended to be searched by and find_xxx call
|
|
``LOG4CPLUS_USE_STATIC_LIBS``
|
|
Only search for static log4cplus libraries
|
|
``DISABLE_CMAKE_SEARCH_PATHS``
|
|
Disable CMakes default search paths for find_xxx calls in this module
|
|
|
|
#]=======================================================================]
|
|
|
|
cmake_minimum_required(VERSION 3.20)
|
|
include(GNUInstallDirs)
|
|
|
|
|
|
mark_as_advanced(
|
|
Log4cplus_INCLUDE_DIR
|
|
Log4cplus_LIBRARY
|
|
)
|
|
|
|
set(_FIND_LOG4CPLUS_ADDITIONAL_OPTIONS "")
|
|
if(DISABLE_CMAKE_SEARCH_PATHS)
|
|
set(_FIND_LOG4CPLUS_ADDITIONAL_OPTIONS NO_DEFAULT_PATH)
|
|
endif()
|
|
|
|
# Set _LOG4CPLUS_ROOT based on a user provided root var. Xxx_ROOT and ENV{Xxx_ROOT}
|
|
# are prioritised over the legacy capitalized XXX_ROOT variables for matching
|
|
# CMake 3.12 behaviour
|
|
# @todo deprecate -D and ENV LOG4CPLUS_ROOT from CMake 3.12
|
|
if(Log4cplus_ROOT)
|
|
set(_LOG4CPLUS_ROOT ${Log4cplus_ROOT})
|
|
elseif(DEFINED ENV{Log4cplus_ROOT})
|
|
set(_LOG4CPLUS_ROOT $ENV{Log4cplus_ROOT})
|
|
elseif(LOG4CPLUS_ROOT)
|
|
set(_LOG4CPLUS_ROOT ${LOG4CPLUS_ROOT})
|
|
elseif(DEFINED ENV{LOG4CPLUS_ROOT})
|
|
set(_LOG4CPLUS_ROOT $ENV{LOG4CPLUS_ROOT})
|
|
endif()
|
|
|
|
# Additionally try and use pkconfig to find log4cplus
|
|
if(USE_PKGCONFIG)
|
|
if(NOT DEFINED PKG_CONFIG_FOUND)
|
|
find_package(PkgConfig)
|
|
endif()
|
|
if(PKG_CONFIG_FOUND)
|
|
pkg_check_modules(PC_Log4cplus QUIET log4cplus)
|
|
endif()
|
|
endif()
|
|
|
|
# ------------------------------------------------------------------------
|
|
# Search for Log4cplus include DIR
|
|
# ------------------------------------------------------------------------
|
|
|
|
set(_LOG4CPLUS_INCLUDE_SEARCH_DIRS "")
|
|
list(APPEND _LOG4CPLUS_INCLUDE_SEARCH_DIRS
|
|
${LOG4CPLUS_INCLUDEDIR}
|
|
${_LOG4CPLUS_ROOT}
|
|
${PC_Log4cplus_INCLUDEDIR}
|
|
${SYSTEM_LIBRARY_PATHS}
|
|
)
|
|
|
|
# Look for a standard log4cplus header file.
|
|
find_path(Log4cplus_INCLUDE_DIR log4cplus/version.h
|
|
${_FIND_LOG4CPLUS_ADDITIONAL_OPTIONS}
|
|
PATHS ${_LOG4CPLUS_INCLUDE_SEARCH_DIRS}
|
|
PATH_SUFFIXES ${CMAKE_INSTALL_INCLUDEDIR} include
|
|
)
|
|
|
|
if(EXISTS "${Log4cplus_INCLUDE_DIR}/log4cplus/version.h")
|
|
file(STRINGS "${Log4cplus_INCLUDE_DIR}/log4cplus/version.h"
|
|
_log4cplus_version_string REGEX "#define LOG4CPLUS_VERSION LOG4CPLUS_MAKE_VERSION"
|
|
)
|
|
string(REGEX REPLACE "#define LOG4CPLUS_VERSION LOG4CPLUS_MAKE_VERSION\((.*)\).*$" "\\1"
|
|
_log4cplus_version_string "${_log4cplus_version_string}"
|
|
)
|
|
string(REGEX REPLACE "[(]([0-9]+),.*[)].*$" "\\1"
|
|
Log4cplus_MAJOR_VERSION "${_log4cplus_version_string}"
|
|
)
|
|
string(REGEX REPLACE "[(].+, ([0-9]+),.+[)].*$" "\\1"
|
|
Log4cplus_MINOR_VERSION "${_log4cplus_version_string}"
|
|
)
|
|
string(REGEX REPLACE "[(].*,.*, ([0-9]+)[)].*$" "\\1"
|
|
Log4cplus_PATCH_VERSION "${_log4cplus_version_string}"
|
|
)
|
|
unset(_log4cplus_version_string)
|
|
|
|
set(Log4cplus_VERSION ${Log4cplus_MAJOR_VERSION}.${Log4cplus_MINOR_VERSION}.${Log4cplus_PATCH_VERSION})
|
|
endif()
|
|
|
|
# ------------------------------------------------------------------------
|
|
# Search for Log4cplus lib DIR
|
|
# ------------------------------------------------------------------------
|
|
|
|
if(NOT DEFINED LOG4CPLUS_DEBUG_SUFFIX)
|
|
set(LOG4CPLUS_DEBUG_SUFFIX D)
|
|
endif()
|
|
|
|
set(_LOG4CPLUS_LIBRARYDIR_SEARCH_DIRS "")
|
|
list(APPEND _LOG4CPLUS_LIBRARYDIR_SEARCH_DIRS
|
|
${LOG4CPLUS_LIBRARYDIR}
|
|
${_LOG4CPLUS_ROOT}
|
|
${PC_Log4cplus_LIBDIR}
|
|
${SYSTEM_LIBRARY_PATHS}
|
|
)
|
|
|
|
# Library suffix handling
|
|
|
|
set(_LOG4CPLUS_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
|
|
|
if(MSVC)
|
|
if(LOG4CPLUS_USE_STATIC_LIBS)
|
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib")
|
|
endif()
|
|
else()
|
|
if(LOG4CPLUS_USE_STATIC_LIBS)
|
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
|
endif()
|
|
endif()
|
|
|
|
set(Log4cplus_LIB_COMPONENTS "")
|
|
list(APPEND LOG4CPLUS_BUILD_TYPES RELEASE DEBUG)
|
|
|
|
foreach(BUILD_TYPE ${LOG4CPLUS_BUILD_TYPES})
|
|
set(_LOG4CPLUS_LIB_NAME log4cplus)
|
|
if(BUILD_TYPE STREQUAL DEBUG)
|
|
set(_LOG4CPLUS_LIB_NAME "${_LOG4CPLUS_LIB_NAME}${LOG4CPLUS_DEBUG_SUFFIX}")
|
|
endif()
|
|
|
|
find_library(Log4cplus_LIBRARY_${BUILD_TYPE} ${_LOG4CPLUS_LIB_NAME}
|
|
${_FIND_LOG4CPLUS_ADDITIONAL_OPTIONS}
|
|
PATHS ${_LOG4CPLUS_LIBRARYDIR_SEARCH_DIRS}
|
|
PATH_SUFFIXES ${CMAKE_INSTALL_LIBDIR} lib64 lib
|
|
)
|
|
|
|
list(APPEND Log4cplus_LIB_COMPONENTS ${Log4cplus_LIBRARY_${BUILD_TYPE}})
|
|
endforeach()
|
|
|
|
# Reset library suffix
|
|
|
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ${_LOG4CPLUS_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
|
|
unset(_LOG4CPLUS_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES)
|
|
|
|
if(Log4cplus_LIBRARY_DEBUG AND Log4cplus_LIBRARY_RELEASE)
|
|
# if the generator is multi-config or if CMAKE_BUILD_TYPE is set for
|
|
# single-config generators, set optimized and debug libraries
|
|
get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
|
if(_isMultiConfig OR CMAKE_BUILD_TYPE)
|
|
set(Log4cplus_LIBRARY optimized ${Log4cplus_LIBRARY_RELEASE} debug ${Log4cplus_LIBRARY_DEBUG})
|
|
else()
|
|
# For single-config generators where CMAKE_BUILD_TYPE has no value,
|
|
# just use the release libraries
|
|
set(Log4cplus_LIBRARY ${Log4cplus_LIBRARY_RELEASE})
|
|
endif()
|
|
# FIXME: This probably should be set for both cases
|
|
set(Log4cplus_LIBRARIES optimized ${Log4cplus_LIBRARY_RELEASE} debug ${Log4cplus_LIBRARY_DEBUG})
|
|
endif()
|
|
|
|
# if only the release version was found, set the debug variable also to the release version
|
|
if(Log4cplus_LIBRARY_RELEASE AND NOT Log4cplus_LIBRARY_DEBUG)
|
|
set(Log4cplus_LIBRARY_DEBUG ${Log4cplus_LIBRARY_RELEASE})
|
|
set(Log4cplus_LIBRARY ${Log4cplus_LIBRARY_RELEASE})
|
|
set(Log4cplus_LIBRARIES ${Log4cplus_LIBRARY_RELEASE})
|
|
endif()
|
|
|
|
# if only the debug version was found, set the release variable also to the debug version
|
|
if(Log4cplus_LIBRARY_DEBUG AND NOT Log4cplus_LIBRARY_RELEASE)
|
|
set(Log4cplus_LIBRARY_RELEASE ${Log4cplus_LIBRARY_DEBUG})
|
|
set(Log4cplus_LIBRARY ${Log4cplus_LIBRARY_DEBUG})
|
|
set(Log4cplus_LIBRARIES ${Log4cplus_LIBRARY_DEBUG})
|
|
endif()
|
|
|
|
# If the debug & release library ends up being the same, omit the keywords
|
|
if("${Log4cplus_LIBRARY_RELEASE}" STREQUAL "${Log4cplus_LIBRARY_DEBUG}")
|
|
set(Log4cplus_LIBRARY ${Log4cplus_LIBRARY_RELEASE} )
|
|
set(Log4cplus_LIBRARIES ${Log4cplus_LIBRARY_RELEASE} )
|
|
endif()
|
|
|
|
if(Log4cplus_LIBRARY)
|
|
set(Log4cplus_FOUND TRUE)
|
|
else()
|
|
set(Log4cplus_FOUND FALSE)
|
|
endif()
|
|
|
|
# ------------------------------------------------------------------------
|
|
# Cache and set Log4cplus_FOUND
|
|
# ------------------------------------------------------------------------
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(Log4cplus
|
|
FOUND_VAR Log4cplus_FOUND
|
|
REQUIRED_VARS
|
|
Log4cplus_LIBRARY
|
|
Log4cplus_INCLUDE_DIR
|
|
VERSION_VAR Log4cplus_VERSION
|
|
)
|
|
|
|
if(NOT Log4cplus_FOUND)
|
|
if(Log4cplus_FIND_REQUIRED)
|
|
message(FATAL_ERROR "Unable to find Log4cplus")
|
|
endif()
|
|
return()
|
|
endif()
|
|
|
|
# Partition release/debug lib vars
|
|
|
|
set(Log4cplus_RELEASE_LIBRARIES ${Log4cplus_LIBRARY_RELEASE})
|
|
get_filename_component(Log4cplus_RELEASE_LIBRARY_DIRS ${Log4cplus_RELEASE_LIBRARIES} DIRECTORY)
|
|
set(Log4cplus_DEBUG_LIBRARIES ${Log4cplus_LIBRARY_DEBUG})
|
|
get_filename_component(Log4cplus_DEBUG_LIBRARY_DIRS ${Log4cplus_DEBUG_LIBRARIES} DIRECTORY)
|
|
set(Log4cplus_LIBRARIES ${Log4cplus_RELEASE_LIBRARIES})
|
|
set(Log4cplus_LIBRARY_DIRS ${Log4cplus_RELEASE_LIBRARY_DIRS})
|
|
set(Log4cplus_INCLUDE_DIRS ${Log4cplus_INCLUDE_DIR})
|
|
|
|
# Configure lib type. If XXX_USE_STATIC_LIBS, we always assume a static
|
|
# lib is in use. If win32, we can't mark the import .libs as shared, so
|
|
# these are always marked as UNKNOWN. Otherwise, infer from extension.
|
|
set(LOG4CPLUS_LIB_TYPE UNKNOWN)
|
|
if(LOG4CPLUS_USE_STATIC_LIBS)
|
|
set(LOG4CPLUS_LIB_TYPE STATIC)
|
|
elseif(UNIX)
|
|
get_filename_component(_LOG4CPLUS_EXT ${Log4cplus_LIBRARY} EXT)
|
|
if(_LOG4CPLUS_EXT STREQUAL ".a")
|
|
set(LOG4CPLUS_LIB_TYPE STATIC)
|
|
elseif(_LOG4CPLUS_EXT STREQUAL ".so" OR
|
|
_LOG4CPLUS_EXT STREQUAL ".dylib")
|
|
set(LOG4CPLUS_LIB_TYPE SHARED)
|
|
endif()
|
|
endif()
|
|
|
|
get_filename_component(Log4cplus_LIBRARY_DIRS ${Log4cplus_LIBRARY_RELEASE} DIRECTORY)
|
|
|
|
if(NOT TARGET Log4cplus::log4cplus)
|
|
add_library(Log4cplus::log4cplus ${LOG4CPLUS_LIB_TYPE} IMPORTED)
|
|
set_target_properties(Log4cplus::log4cplus PROPERTIES
|
|
INTERFACE_COMPILE_OPTIONS "${PC_Log4cplus_CFLAGS_OTHER}"
|
|
INTERFACE_INCLUDE_DIRECTORIES "${Log4cplus_INCLUDE_DIRS}")
|
|
|
|
# Standard location
|
|
set_target_properties(Log4cplus::log4cplus PROPERTIES
|
|
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX;RC"
|
|
IMPORTED_LOCATION "${Log4cplus_LIBRARY}")
|
|
|
|
# WIN32 APIs
|
|
if(WIN32)
|
|
set_target_properties(Log4cplus::log4cplus PROPERTIES
|
|
IMPORTED_LINK_INTERFACE_LIBRARIES "ws2_32;advapi32")
|
|
endif()
|
|
|
|
# Release location
|
|
if(EXISTS "${Log4cplus_LIBRARY_RELEASE}")
|
|
set_property(TARGET Log4cplus::log4cplus APPEND PROPERTY
|
|
IMPORTED_CONFIGURATIONS RELEASE)
|
|
set_target_properties(Log4cplus::log4cplus PROPERTIES
|
|
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX;RC"
|
|
IMPORTED_LOCATION_RELEASE "${Log4cplus_LIBRARY_RELEASE}")
|
|
endif()
|
|
|
|
# Debug location
|
|
if(EXISTS "${Log4cplus_LIBRARY_DEBUG}")
|
|
set_property(TARGET Log4cplus::log4cplus APPEND PROPERTY
|
|
IMPORTED_CONFIGURATIONS DEBUG)
|
|
set_target_properties(Log4cplus::log4cplus PROPERTIES
|
|
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX;RC"
|
|
IMPORTED_LOCATION_DEBUG "${Log4cplus_LIBRARY_DEBUG}")
|
|
endif()
|
|
endif()
|