Squid Web Cache Wiki

Squid Web Cache 文档

🔗 Autoconf 库检测指南

此页面仍在进行中。此处记录的 autoconf 模板仍在不断完善中,稳定后将转换为宏。

🔗 行为概述

Squid 所依赖的每个库都应该定义一个 AC_WITH() 宏,以允许用户禁用、要求或替换该库。Squid 应该能够快速检测库的缺失,并且

🔗 部分 1: AC_ARG_WITH()

使用此 autoconf 提供的宏来设置库的路径位置和 with_* 变量。

    AC_ARG_WITH(foo,
      AS_HELP_STRING([--without-foo],
                     [Do not use Foo. Default: auto-detect]), [
    case "$with_foo" in
      yes|no)
        : # Nothing special to do here
        ;;
      *)
        if test ! -d "$withval" ; then
          AC_MSG_ERROR([--with-foo path does not point to a directory])
        fi
        LIBFOO_PATH="-L$with_foo/lib"
        CXXFLAGS="-I$with_foo/include $CXXFLAGS"
      esac
    ])
    AH_TEMPLATE(USE_FOO,[Foo support is available])

🔗 部分 2: 库需求检查

    if test "x$with_foo" != "xno"; then
      SQUID_STATE_SAVE(squid_foo_state)
      LIBS="$LIBS $LIBFOO_PATH"

第三部分和第四部分放在这里

  SQUID_STATE_ROLLBACK(squid_foo_state)

  if test "x$with_foo" = "xyes" -a "x$LIBFOO_LIBS" = "x"; then
    AC_MSG_ERROR([Required Foo library not found])
  fi
  if test "x$LIBFOO_LIBS" != "x" ; then
    CXXFLAGS="$LIBFOO_CFLAGS $CXXFLAGS"
    FOOLIB="$LIBFOO_PATH $LIBFOO_LIBS"
    AC_DEFINE(USE_FOO,1,[Foo support is available])
    with_foo=yes
  else
    with_foo=no
  fi
fi
AC_MSG_NOTICE([Foo library support: ${with_foo:=auto} ${LIBFOO_PATH} ${LIBFOO_LIBS}])
AC_SUBST(FOOLIB)

🔗 部分 3: pkg-config 和文件检测

优先使用 pkg-config 来定位库参数。当库作者提供这些参数时,如果构建参数发生变化,它们会自动更新,并且可以更准确地检测库版本。

PKG_CHECK_MODULES 宏创建了构建此库所需的本地变量 LIBFOO_CFLAGSLIBFOO_LIBS

使用 PKG_CHECK_MODULES 的示例

  # auto-detect using pkg-config
  PKG_CHECK_MODULES([LIBFOO],[foo >= 1.0.0],,[

    ## something went wrong.
    ## try to find the package without pkg-config

    ## check that the library is actually new enough.
    ## by testing for a 1.0.0+ function which we use
    AC_CHECK_LIB(foo,foo_10_function,[LIBFOO_LIBS="-lfoo"])
  ])

🔗 部分 4: 头文件检测

单独检查库的头文件包含。

这是必需的,因为 Squid 要求 HAVE_FOO_H 包装器定义。pkg-config 工具不会自动检查它们,并且对于其成功和失败操作而言,进行两次检查是没有意义的。

  if test "x$LIBFOO_LIBS" != "x" ; then
    AC_CHECK_HEADERS(foo.h)
  fi

🔗 Makefile.am

使用库 Foo 的每个二进制文件都应在其 LDADD 声明中包含 ` $(FOOLIB) `, libcompat.la 条目之后,并且将在相关时进行链接。

:information_source: 为方便维护,这些 FOOLIB LDADD 条目应按字母顺序排列。

导航:网站搜索网站页面分类🔼 向上