log4cplus是否有标准的Autoconf宏
Is there a standard Autoconf macro for log4cplus?
我正在考虑在使用GNU Autotools构建的项目中使用log4cplus。对于其他库依赖项(如boost),我已经能够找到合理的规范M4宏来测试这些依赖项。
经过一番查找,我仍然找不到类似的lib4cplus股票宏。我知道我可能会自己制作,但在可能的情况下,"标准"版本更可取。有人知道吗?
log4cplus没有任何标准的Autoconf宏。如果你做了一些,我可以把它们添加到log4cplus包中。
不过,log4cplus有一个pkg-config
文件。尝试使用它:
PKG_PROG_PKG_CONFIG
PKG_CHECK_MODULES([log4cplus])
考虑到1.0.4中明显缺乏pkg-config
支持,以下是我正在运行的内容。
我强烈建议未来的用户首先检查源代码回购,因为那里提供的宏可能会得到社区支持,而这个版本不会。
# log4cplus.m4: Autoconf macro to test for the presence and version of lib4cplus.
#
# SYNOPSIS
#
# LOG4CPLUS([MINIMUM-VERSION = 1.0.4])
#
# DESCRIPTION
#
# Test for the presence and version of the log4cplus logging library. Specifically, the
# log4cplus/logger.h header must be present, and a test program must link. The version check is
# preprocessor comparison against LOG4CPLUS_VERSION in version.h.
#
# If present, LOG4CPLUS_CPPFLAGS, LOG4CPLUS_LDFLAGS and LOG4CPLUS_LIBS affect preprocessor and
# linker behavior. If absent LOG4CPLUS_LIBS defaults to -llog4cplus.
#
# If a suitable library is found, HAVE_LOG4CPLUS is defined.
#
# EXAMPLE
#
# LOG4CPLUS([1.1.0])
#
AC_DEFUN([LOG4CPLUS], [
# We need sed to turn 1.0.4 into 1, 0, 4 below
AC_REQUIRE([AC_PROG_SED])
# Declare the LOG4CPLUS_* variables as "precious"
AC_ARG_VAR([LOG4CPLUS_CPPFLAGS], [preprocessor flags for log4cplus headers])
AC_ARG_VAR([LOG4CPLUS_LDFLAGS], [linker flags for log4cplus])
AC_ARG_VAR([LOG4CPLUS_LIBS], [libraries log4cplus])
# Supply a default LOG4CPLUS_LIBS if needed
AS_IF(
[test "x$LOG4CPLUS_LIBS" = "x"],
[LOG4CPLUS_LIBS=-llog4cplus])
# In a cache block..
AC_CACHE_VAL([log4cplus_cv_lib_log4cplus], [
# Back up CPPFLAGS, LDFLAGS & LIBS, declare we'll be testing in C++
save_CPPFLAGS="$CPPFLAGS"
save_LDFLAGS="$LDFLAGS"
save_LIBS="$LIBS"
AC_LANG_PUSH([C++])
# Append LOG4CPLUS_CPPFLAGS to CPPFLAGS if present
AS_IF(
[test "x$LOG4CPLUS_CPPFLAGS" != "x"],
[CPPFLAGS="$CPPFLAGS $LOG4CPLUS_CPPFLAGS"])
# Append LOG4CPLUS_LDFLAGS to LDFLAGS if present
AS_IF(
[test "x$LOG4CPLUS_LDFLAGS" != "x"],
[LDFLAGS="$LDFLAGS $LOG4CPLUS_LDFLAGS"])
# Append LOG4CPLUS_LIBS to LIBS if present
AS_IF(
[test "x$LOG4CPLUS_LIBS" != "x"],
[LIBS="$LIBS $LOG4CPLUS_LIBS"])
# If a minimum required version was specified, capture it in a variable.
# If not, assume 1.0.4
AS_IF([test "x$1" = "x"],
[min_version=1.0.4],
[min_version=$1])
# Format the minimum version in a way suitable for the LOG4CPLUS_MAKE_VERSION macro
min_version_commas=`echo $min_version | $SED -e 's/./, /g'`
# Now the checks. Note that we try to avoid side-effects in this block, instead setting only
# the cache variable. Mutations come after. First, can we find a header?
AC_CHECK_HEADER([log4cplus/logger.h],
# Can we link against the library?
[AC_MSG_CHECKING([if log4cplus links])]
[AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include <log4cplus/logger.h>]],
[[log4cplus::Logger logger]])],
[AC_MSG_RESULT([yes])]
# Is the present version new enough?
[AC_MSG_CHECKING([if log4cplus is version compatible])]
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[#include <log4cplus/version.h>]], [[
#if LOG4CPLUS_MAKE_VERSION(]$min_version_commas[) <= LOG4CPLUS_VERSION
#else
error: version check failed.
#endif
]])],
[AC_MSG_RESULT([yes])]
[log4cplus_cv_lib_log4cplus=yes],
[AC_MSG_RESULT([no])]
[log4cplus_cv_lib_log4cplus=no])],
[AC_MSG_RESULT([no])]
[log4cplus_cv_lib_log4cplus=no])],
[log4cplus_cv_lib_log4cplus=no])
AC_LANG_POP([C++])
CPPFLAGS="$save_CPPFLAGS"
LDFLAGS="$save_LDFLAGS"
LIBS="$save_LIBS"
])
# Define HAVE_LOG4CPLUS if the check passed.
AS_IF([test "x$log4cplus_cv_lib_log4cplus" = "xyes"],
[AC_DEFINE([HAVE_LOG4CPLUS], [1], [Define to 1 if log4cplus is found])])
])
相关文章:
- 使用CMake检测支持的C++标准
- 如何理解C++标准N3337中的expr.const.cast子句8
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 编译标准库类型
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 铸造标准::有没有回到原来的类型
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 标准库类型的赋值运算符的引用限定符
- 标准是否严格定义了该程序应该如何编译?
- 如何从Windows应用程序输出到标准?
- 安全到标准:移动会员?
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 这是否符合C++标准:双响双响,例如!!(-0.0).
- 标准::变体的赋值运算符
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 如何在 Mac 上使用 c++17 并行标准库算法?
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- log4cplus是否有标准的Autoconf宏