1*fe52b1f5SJerome Forissier# Generate/check/update a .h file to reflect the values of Makefile 2*fe52b1f5SJerome Forissier# variables 3*fe52b1f5SJerome Forissier# 4*fe52b1f5SJerome Forissier# Example usage (by default, check-conf-h will consider all CFG_* 5*fe52b1f5SJerome Forissier# variables): 6*fe52b1f5SJerome Forissier# 7*fe52b1f5SJerome Forissier# path/to/conf.h: FORCE 8*fe52b1f5SJerome Forissier# $(call check-conf-h) 9*fe52b1f5SJerome Forissier# 10*fe52b1f5SJerome Forissier# Or, to include only the variables with the given prefix(es): 11*fe52b1f5SJerome Forissier# 12*fe52b1f5SJerome Forissier# path/to/crypto_config.h: FORCE 13*fe52b1f5SJerome Forissier# $(call check-conf-h,CFG_CRYPTO_ CRYPTO_) 14*fe52b1f5SJerome Forissier 15*fe52b1f5SJerome Forissierdefine check-conf-h 16*fe52b1f5SJerome Forissier $(q)set -e; \ 17*fe52b1f5SJerome Forissier echo ' CHK $@'; \ 18*fe52b1f5SJerome Forissier cnf="$(strip $(foreach var, \ 19*fe52b1f5SJerome Forissier $(call cfg-vars-by-prefix,$1), \ 20*fe52b1f5SJerome Forissier $(call cfg-make-define,$(var))))"; \ 21*fe52b1f5SJerome Forissier guard="_`echo $@ | tr -- -/. ___`_"; \ 22*fe52b1f5SJerome Forissier mkdir -p $(dir $@); \ 23*fe52b1f5SJerome Forissier echo "#ifndef $${guard}" >$@.tmp; \ 24*fe52b1f5SJerome Forissier echo "#define $${guard}" >>$@.tmp; \ 25*fe52b1f5SJerome Forissier echo -n "$${cnf}" | sed 's/_nl_ */\n/g' >>$@.tmp; \ 26*fe52b1f5SJerome Forissier echo "#endif" >>$@.tmp; \ 27*fe52b1f5SJerome Forissier if [ -r $@ ] && cmp -s $@ $@.tmp; then \ 28*fe52b1f5SJerome Forissier rm -f $@.tmp; \ 29*fe52b1f5SJerome Forissier else \ 30*fe52b1f5SJerome Forissier echo ' UPD $@'; \ 31*fe52b1f5SJerome Forissier mv $@.tmp $@; \ 32*fe52b1f5SJerome Forissier fi 33*fe52b1f5SJerome Forissierendef 34*fe52b1f5SJerome Forissier 35*fe52b1f5SJerome Forissierdefine cfg-vars-by-prefix 36*fe52b1f5SJerome Forissier $(strip $(if $(1),$(call _cfg-vars-by-prefix,$(1)), 37*fe52b1f5SJerome Forissier $(call _cfg-vars-by-prefix,CFG_))) 38*fe52b1f5SJerome Forissierendef 39*fe52b1f5SJerome Forissier 40*fe52b1f5SJerome Forissierdefine _cfg-vars-by-prefix 41*fe52b1f5SJerome Forissier $(sort $(foreach prefix,$(1),$(filter $(prefix)%,$(.VARIABLES)))) 42*fe52b1f5SJerome Forissierendef 43*fe52b1f5SJerome Forissier 44*fe52b1f5SJerome Forissier# Convert a makefile variable to a #define 45*fe52b1f5SJerome Forissier# <undefined>, n => <undefined> 46*fe52b1f5SJerome Forissier# y => 1 47*fe52b1f5SJerome Forissier# <other value> => <other value> 48*fe52b1f5SJerome Forissierdefine cfg-make-define 49*fe52b1f5SJerome Forissier $(strip $(if $(filter y,$($1)), 50*fe52b1f5SJerome Forissier #define $1 1 /* '$($1)' */_nl_, 51*fe52b1f5SJerome Forissier $(if $(filter xn x,x$($1)), 52*fe52b1f5SJerome Forissier /* $1 is not set ('$($1)') */_nl_, 53*fe52b1f5SJerome Forissier #define $1 $($1) /* '$($1)' */_nl_))) 54*fe52b1f5SJerome Forissierendef 55