2012-07-22 182 views
0

我正在考虑在使用GNU Autotools构建的项目中使用log4cplus。对于其他库依赖项(例如boost),我已经能够找到合理的规范M4宏来测试这些依赖关系。是否有log4cplus的标准Autoconf宏?

经过一番研究,我仍然无法找到lib4cplus的类似股票宏。我知道我可以制作自己的作品,但在可能的情况下,“标准”版本更可取。有人知道吗?

回答

0

下面是我正在运行,因为在1.0.4明显缺少pkg-config支持。

我强烈建议未来的用户首先检查source repo,因为在那里提供的宏可能会看到社区支持,而这个版本不会。

# 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])]) 
]) 
2

log4cplus没有任何标准的Autoconf宏。如果你做了一些,我可以将它们添加到log4cplus软件包中。

虽然有log4cplus的pkg-config文件。尝试使用它:

PKG_PROG_PKG_CONFIG 
PKG_CHECK_MODULES([log4cplus]) 
+0

啊!优秀。我已经在制作一个,但'pkg-config'将是一个很好的捷径。 – phs 2012-07-22 06:55:27

+0

嗯。版本1.0.4(大多数软件包管理器中可用的版本)是否包含'pkg-config' pc文件?我没有在自制软件或ubuntu中精确地看到它,也没有在该标签的源代码树中看到它。 – phs 2012-07-22 18:27:03

+0

太棒了。尽管有两条评论:您可能需要使用语法'PKG_CHECK_MODULES([log4cplus],[log4cplus])'代替。此外,在64位平台上,文件'log4cplus.pc'位于'/ usr/lib/pkgconfig'中,而不是'/ usr/lib64/pkgconfig'。 – 2016-09-22 18:26:33