1# NTP_CACHEVERSION(component, version) 2# ------------------------------------ 3# compare this configure script's cache version stamp with the stamp 4# saved by the prior run in config.cache. If they differ, clear all 5# cache variables to avoid using results cached with a script that 6# is known to differ in a cache-invalidating manner. 7# 8# Note: use immediately following AC_INIT in configure.ac, as clearing 9# all _cv_ variables only makes sense immediately after loading, before 10# use or modification. 11# 12# It is assumed that parent configure.ac files which use 13# AC_CONFIG_SUBDIR to invoke child configure.ac files have used 14# NTP_CACHEVERSION if any children do. The top-level configure script 15# will clear a previous cache lacking any saved cache version number, 16# while children do not. The reason is the children can rely on the 17# parent having cleared any cache variables predating this mechanism. 18# Therefore the child can rely on the config.cache generated by the 19# parent on the first run despite not finding its version stamp 20# previously saved. In this case top-level means a configure script 21# not invoked by another configure script in its parent directory. 22 23AC_DEFUN_ONCE([NTP_CACHEVERSION], [ 24 AC_BEFORE([$0], [AM_INIT_AUTOMAKE])dnl 25 AC_BEFORE([$0], [AM_CONFIG_HEADER])dnl 26 AC_BEFORE([$0], [AC_PROG_CC])dnl 27 AC_BEFORE([$0], [AC_CONFIG_SUBDIRS])dnl 28 29 ntp_cache_flush=1 30 31 case "$ntp_cv_[$1]_cache_version" in 32 [$2]) 33 # same version, good 34 ntp_cache_flush=0 35 ;; 36 '') 37 # No cache, predates ntp_cv_$1_cache_version, or is empty. 38 case "$cache_file" in 39 /dev/null) 40 ntp_cache_flush=0 41 ;; 42 *) 43 case "$NTP_CACHEVERSION_PARENT" in 44 '') 45 # Do not clear the cache immediately after it is created 46 # empty as it is noisy. Differentiate a newly-created 47 # config.cache from one predating the cache version 48 # mechanism by looking for the first cached variable set 49 # by Autoconf 50 case "$ac_cv_path_install" in 51 '') 52 # empty config.cache file 53 ntp_cache_flush=0 54 esac 55 ;; 56 *) 57 # Parent configure just created cache from empty, 58 # flushing would be counterproductive. 59 ntp_cache_flush=0; 60 esac 61 esac 62 ;; 63 *) 64 # configure cache version mismatches config.cache version 65 esac 66 67 case "$ntp_cache_flush" in 68 1) 69 c_version="${ntp_cv_[$1]_cache_version:-(no version found)}" 70 71 # Do we flush all variables or exclude others' version stamps? 72 73 case "$NTP_CACHEVERSION_PARENT" in 74 '') 75 # Clear all *_cv_* variables including our child subdirs' 76 # ntp_cv_*_cache_version variables. This prevents subdir 77 # configure scripts from noticing a version mismatch just 78 # after the top configure in the invocation cleared and 79 # recreated the cache. 80 81 c_varname_list=`set | 82 sed -n -e 's/=.*$//' \ 83 -e '/_cv_/p' 84 ` 85 ;; 86 *) 87 # This is not the top configure this particular invocation. 88 # Clear all *_cv_* variables sparing the version stamps 89 # of other configure scripts, so we don't trigger 90 # useless repeated clearings. 91 92 c_varname_list=`set | 93 sed -n -e 's/=.*$//' \ 94 -e '/ntp_cv_.*_cache_version/d' \ 95 -e '/_cv_/p' 96 ` 97 esac 98 99 for c_varname in $c_varname_list 100 do 101 AS_UNSET([$c_varname]) 102 done 103 104 AC_MSG_NOTICE([[$cache_file saved by another version, ignored.]]) 105 AC_MSG_NOTICE([[configure script cache version: ]][$2]) 106 AC_MSG_NOTICE([[$cache_file version: $c_version]]) 107 AS_UNSET([c_varname]) 108 AS_UNSET([c_varname_list]) 109 AS_UNSET([c_version]) 110 esac 111 112 AS_UNSET([ntp_cache_flush]) 113 114 # save configure version in config.cache for next time 115 ntp_cv_[$1]_cache_version="[$2]" 116 117 # let any subdir configure.ac NTP_CACHEVERSION invocations 118 # know they are not the top level. 119 NTP_CACHEVERSION_PARENT='[$1]' ; export NTP_CACHEVERSION_PARENT 120])dnl 121