diff options
Diffstat (limited to 'sntp/m4/ntp_cacheversion.m4')
-rw-r--r-- | sntp/m4/ntp_cacheversion.m4 | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/sntp/m4/ntp_cacheversion.m4 b/sntp/m4/ntp_cacheversion.m4 new file mode 100644 index 0000000..3619a60 --- /dev/null +++ b/sntp/m4/ntp_cacheversion.m4 @@ -0,0 +1,129 @@ +# 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. +# +# The top-level configure.ac in a subtree using NTP_CACHEVERSION +# will clear a previous cache lacking any saved cache version number, +# while children do not. This comes into play only when introducing +# NTP_CACHEVERSION where it had not been previously used: Previous +# cached results are presumed incompatible and not used. The reason +# children do not flush the cached is it is shared with the parent and +# 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 the child version stamp in it. +# +# See html/copyright.html or COPYRIGHT in plain text. + +AC_DEFUN_ONCE([NTP_CACHEVERSION], [ + AC_BEFORE([$0], [AM_INIT_AUTOMAKE])dnl + AC_BEFORE([$0], [AC_CONFIG_HEADERS])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 + dnl AS_UNSET([$c_varname]) + dnl With Autoconf 2.61 and automake 1.10.3, using AS_UNSET + dnl here triggers generation of a syntax error in configure. + dnl Once we require a newer Autoconf we can revert to the + dnl AS_UNSET code. + { eval $c_varname=; 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 |