# NTP_CACHEVERSION(component, version)
# ------------------------------------
# compare this configure script's cache version stamp with the stamp
# saved by the prior run in config.cache. If they differ, clear all
# cache variables to avoid using results cached with a script that
# is known to differ in a cache-invalidating manner.
#
# Note: use immediately following AC_INIT in configure.ac, as clearing
# all _cv_ variables only makes sense immediately after loading, before
# use or modification.
#
# It is assumed that parent configure.ac files which use
# AC_CONFIG_SUBDIR to invoke child configure.ac files have used
# NTP_CACHEVERSION if any children do. The top-level configure script
# will clear a previous cache lacking any saved cache version number,
# while children do not. The reason is the children can rely on the
# parent having cleared any cache variables predating this mechanism.
# Therefore the child can rely on the config.cache generated by the
# parent on the first run despite not finding its version stamp
# previously saved. In this case top-level means a configure script
# not invoked by another configure script in its parent directory.
AC_DEFUN_ONCE([NTP_CACHEVERSION], [
AC_BEFORE([$0], [AM_INIT_AUTOMAKE])dnl
AC_BEFORE([$0], [AM_CONFIG_HEADER])dnl
AC_BEFORE([$0], [AC_PROG_CC])dnl
AC_BEFORE([$0], [AC_CONFIG_SUBDIRS])dnl
ntp_cache_flush=1
case "$ntp_cv_[$1]_cache_version" in
[$2])
# same version, good
ntp_cache_flush=0
;;
'')
# No cache, predates ntp_cv_$1_cache_version, or is empty.
case "$cache_file" in
/dev/null)
ntp_cache_flush=0
;;
*)
case "$NTP_CACHEVERSION_PARENT" in
'')
# Do not clear the cache immediately after it is created
# empty as it is noisy. Differentiate a newly-created
# config.cache from one predating the cache version
# mechanism by looking for the first cached variable set
# by Autoconf
case "$ac_cv_path_install" in
'')
# empty config.cache file
ntp_cache_flush=0
esac
;;
*)
# Parent configure just created cache from empty,
# flushing would be counterproductive.
ntp_cache_flush=0;
esac
esac
;;
*)
# configure cache version mismatches config.cache version
esac
case "$ntp_cache_flush" in
1)
c_version="${ntp_cv_[$1]_cache_version:-(no version found)}"
# Do we flush all variables or exclude others' version stamps?
case "$NTP_CACHEVERSION_PARENT" in
'')
# Clear all *_cv_* variables including our child subdirs'
# ntp_cv_*_cache_version variables. This prevents subdir
# configure scripts from noticing a version mismatch just
# after the top configure in the invocation cleared and
# recreated the cache.
c_varname_list=`set |
sed -n -e 's/=.*$//' \
-e '/_cv_/p'
`
;;
*)
# This is not the top configure this particular invocation.
# Clear all *_cv_* variables sparing the version stamps
# of other configure scripts, so we don't trigger
# useless repeated clearings.
c_varname_list=`set |
sed -n -e 's/=.*$//' \
-e '/ntp_cv_.*_cache_version/d' \
-e '/_cv_/p'
`
esac
for c_varname in $c_varname_list
do
AS_UNSET([$c_varname])
done
AC_MSG_NOTICE([[$cache_file saved by another version, ignored.]])
AC_MSG_NOTICE([[configure script cache version: ]][$2])
AC_MSG_NOTICE([[$cache_file version: $c_version]])
AS_UNSET([c_varname])
AS_UNSET([c_varname_list])
AS_UNSET([c_version])
esac
AS_UNSET([ntp_cache_flush])
# save configure version in config.cache for next time
ntp_cv_[$1]_cache_version="[$2]"
# let any subdir configure.ac NTP_CACHEVERSION invocations
# know they are not the top level.
NTP_CACHEVERSION_PARENT='[$1]' ; export NTP_CACHEVERSION_PARENT
])dnl
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>