[squid-dev] [PATCH] search for header files in well-known local directories

Kinkie gkinkie at gmail.com
Mon Jan 4 09:57:13 UTC 2016


On Mon, Jan 4, 2016 at 6:38 AM, Amos Jeffries <squid3 at treenet.co.nz> wrote:

> The auto-conf design for using custom directories (such as these /opt
> areas) is that the builder supplies the pth parameter
> (--with-gnutls=/opt/local/gnutls) when such local customized installs
> are to be used.

There is a problem with this: our automated tests do not allow for
setting these parameters, except by going through some hoops.
The code is already in configure.ac, just documented as '--without-gnutls'.

But I believe I found the actual issue, fixed by the attached patch.
There's two problems:
- headers are checked before PKG_CHECK_MODULES
- PKG_CHECK_MODULES sets include-related flags in CFLAGS, but then
AC_CHECK_HEADERS uses CPPFLAGS, not CFLAGS.

The patch addresses both by:
- calling PKG_CHECK_MODULES before AC_CHECK_HEADERS
- extending SQUID_STATE_* macros to also cover CPPFLAGS
- manually setting CPPFLAGS for the benefit of AC_CHECK_HEADERS (and
rolling it back once the check is done).


-- 
    Francesco
-------------- next part --------------
=== modified file 'acinclude/squid-util.m4'
--- acinclude/squid-util.m4	2016-01-01 00:12:18 +0000
+++ acinclude/squid-util.m4	2016-01-04 09:48:31 +0000
@@ -1,88 +1,91 @@
 ## Copyright (C) 1996-2016 The Squid Software Foundation and contributors
 ##
 ## Squid software is distributed under GPLv2+ license and includes
 ## contributions from numerous individuals and organizations.
 ## Please see the COPYING and CONTRIBUTORS files for details.
 ##
 
 dnl save main environment variables to variables to the namespace defined by the
 dnl first argument (prefix)
 dnl e.g. SQUID_SAVEFLAGS([foo]) will save CFLAGS to foo_CFLAGS etc.
 dnl Saved variables are:
 dnl CFLAGS, CXXFLAGS, LDFLAGS, LIBS plus any variables specified as
 dnl second argument
 AC_DEFUN([SQUID_STATE_SAVE],[
 # save state, key is $1
 $1_CFLAGS="${CFLAGS}"
 $1_CXXFLAGS="${CXXFLAGS}"
 $1_LDFLAGS="${LDFLAGS}"
 $1_LIBS="${LIBS}"
 $1_CC="${CC}"
 $1_CXX="${CXX}"
+$1_CPPFLAGS="${CPPFLAGS}"
 $1_squid_saved_vars="$2"
 for squid_util_var_tosave in $$1_squid_saved_vars
 do
     squid_util_var_tosave2="$1_${squid_util_var_tosave}"
     eval "${squid_util_var_tosave2}=\"${squid_util_var_tosave}\""
 done
 ])
 
 dnl commit the state changes: deleting the temporary state defined in SQUID_STATE_SAVE
 dnl with the same prefix. It's not necessary to specify the extra variables passed
 dnl to SQUID_STATE_SAVE again, they will be automatically reclaimed.
 AC_DEFUN([SQUID_STATE_COMMIT],[
 # commit state, key is $1
 unset $1_CFLAGS
 unset $1_CXXFLAGS
 unset $1_LDFLAGS
 unset $1_LIBS
 unset $1_CC
 unset $1_CXX
+unset $1_CPPFLAGS
 for squid_util_var_tosave in $$1_squid_saved_vars
 do
     unset ${squid_util_var_tosave}
 done
 ])
 
 dnl rollback state to the call of SQUID_STATE_SAVE with the same namespace argument.
 dnl all temporary state will be cleared, including the custom variables specified
 dnl at call time. It's not necessary to explicitly name them, they will be automatically
 dnl cleared.
 AC_DEFUN([SQUID_STATE_ROLLBACK],[
 # rollback state, key is $1
 CFLAGS="${$1_CFLAGS}"
 CXXFLAGS="${$1_CXXFLAGS}"
 LDFLAGS="${$1_LDFLAGS}"
 LIBS="${$1_LIBS}"
 CC="${$1_CC}"
 CXX="${$1_CXX}"
+CPPFLAGS="${$1_CPPFLAGS}"
 for squid_util_var_tosave in $$1_squid_saved_vars
 do
     squid_util_var_tosave2="\$$1_${squid_util_var_tosave}"
     eval "$squid_util_var_tosave=\"${squid_util_var_tosave2}\""
 done
 SQUID_STATE_COMMIT($1)
 ])
 
 
 dnl look for modules in the base-directory supplied as argument.
 dnl fill-in the variable pointed-to by the second argument with the
 dnl space-separated list of modules 
 AC_DEFUN([SQUID_LOOK_FOR_MODULES],[
 $2=""
 for dir in $1/*; do
   module="`basename $dir`"
   if test -d "$dir" && test "$module" != CVS; then
       $2="$$2 $module"
   fi
 done
 ])
 
 dnl remove duplicates out of a list.
 dnl dnl argument is the name of a variable to be checked and cleaned up
 AC_DEFUN([SQUID_CLEANUP_MODULES_LIST],[
 squid_cleanup_tmp_outlist=""
 for squid_cleanup_tmp in $$1
 do
   squid_cleanup_tmp_dupe=0
   for squid_cleanup_tmp2 in $squid_cleanup_tmp_outlist

=== modified file 'configure.ac'
--- configure.ac	2016-01-03 10:45:27 +0000
+++ configure.ac	2016-01-04 09:48:37 +0000
@@ -1210,73 +1210,75 @@
 
 dnl Check for libcrypt
 CRYPTLIB=
 dnl Some of our helpers use crypt(3) which may be in libc, or in
 dnl libcrypt (eg FreeBSD)
 AC_CHECK_LIB(crypt, crypt, [CRYPTLIB="-lcrypt"])
 dnl Solaris10 provides MD5 natively through libmd5
 AC_CHECK_LIB(md5, MD5Init, [CRYPTLIB="$CRYPTLIB -lmd5"])
 AC_SUBST(CRYPTLIB)
 
 SSLLIB=""
 
 dnl User may want to disable GnuTLS
 AC_ARG_WITH(gnutls,
   AS_HELP_STRING([--without-gnutls],
                  [Do not use GnuTLS for SSL. Default: auto-detect]), [ 
 case "$with_gnutls" in
   yes|no)
     : # Nothing special to do here
     ;;
   *)
     if test ! -d "$withval" ; then
       AC_MSG_ERROR([--with-gnutls path does not point to a directory])
     fi
     LIBGNUTLS_PATH="-L$with_gnutls/lib"
     CPPFLAGS="-I$with_gnutls/include $CPPFLAGS"
   esac
 ])
 AH_TEMPLATE(USE_GNUTLS,[GnuTLS support is available])
 if test "x$with_gnutls" != "xno"; then
-  AC_CHECK_HEADERS(gnutls/gnutls.h gnutls/x509.h)
+  SQUID_STATE_SAVE(squid_gnutls_state)
 
   # User may have provided a custom location for GnuTLS. Otherwise...
-  SQUID_STATE_SAVE(squid_gnutls_state)
   LIBS="$LIBS $LIBGNUTLS_PATH"
 
   # auto-detect using pkg-config
-  PKG_CHECK_MODULES([LIBGNUTLS],[gnutls >= 3.1.5],,[
+  PKG_CHECK_MODULES([LIBGNUTLS],[gnutls >= 3.1.5],[
+    CPPFLAGS="$CPPFLAGS $LIBGNUTLS_CFLAGS"
+    ],[
     ## find the package without pkg-config
     ## check that the library is actually new enough.
     ## by testing for a 3.1.5+ function which we use
     AC_CHECK_LIB(gnutls,gnutls_certificate_verify_peers3,[LIBGNUTLS_LIBS="-lgnutls"])
   ])
+  AC_CHECK_HEADERS(gnutls/gnutls.h gnutls/x509.h)
 
   SQUID_STATE_ROLLBACK(squid_gnutls_state) #de-pollute LIBS
 
   if test "x$with_gnutls" = "xyes" -a "x$LIBGNUTLS_LIBS" = "x"; then
     AC_MSG_ERROR([Required GnuTLS library not found])
   fi
   if test "x$LIBGNUTLS_LIBS" != "x" ; then
     CXXFLAGS="$LIBGNUTLS_CFLAGS $CXXFLAGS"
     SSLLIB="$LIBGNUTLS_PATH $LIBGNUTLS_LIBS $SSLLIB"
     AC_DEFINE(USE_GNUTLS,1,[GnuTLS support is available])
   else
     with_gnutls=no
   fi
 fi
 AC_MSG_NOTICE([GnuTLS library support: ${with_gnutls:=auto} ${LIBGNUTLS_PATH} ${LIBGNUTLS_LIBS}])
 
 dnl User may specify OpenSSL is needed from a non-standard location
 AC_ARG_WITH(openssl,
   AS_HELP_STRING([--with-openssl=PATH],
                  [Compile with the OpenSSL libraries. The path to
                   the OpenSSL development libraries and headers
                   installation can be specified if outside of the
                   system standard directories]), [ 
 case "$with_openssl" in
   yes|no)
     : # Nothing special to do here
     ;;
   *)
     if test ! -d "$withval" ; then
       AC_MSG_ERROR([--with-openssl path does not point to a directory])



More information about the squid-dev mailing list