Dear Simon Glass,

> Add support for generating an autoconf.h header file that can be used in
> the source instead of #ifdef.
> 
> For example, instead of:
> 
>  #ifdef CONFIG_VERSION_VARIABLE
>       setenv("ver", version_string);  /* set version variable */
>  #endif

I hope this has nothing to do with autoconf(1) .

[...]

> +# The file is regenerated when any U-Boot header file changes.
> +$(obj)include/generated/autoconf.h: $(obj)include/config.h
> +     @$(XECHO) Generating $@ ; \
> +     set -e ; \
> +     : Extract the config macros to a C header file ; \
> +     $(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h | \
> +             sed -n -f tools/scripts/define2value.sed > [email protected]; \
> +     : Regenerate our list of all config macros if neeed ; \
> +     if [ ! -f [email protected] ] || \
> +             find $(src) -name '*.h' -type f -newer [email protected] | \
> +                     egrep -qv 'include/(autoconf.h|generated|config.h)'; \
> +                     then \
> +             : Extract all config macros from all C header files ; \
> +             : We can grep for CONFIG since the value will be dropped ; \
> +             ( \
> +                     find ${src} -name "*.h" -type f | xargs \
> +                     cat | grep CONFIG | \
> +                     sed -n -f tools/scripts/define2zero.sed \

Won't "find ... -exec grep CONFIG \; | sed ..." work here and drop some extra 
overhead ?

> +             ) | sort | uniq > [email protected]; \

"sort -u" maybe ?

> +     fi; \
> +     : Extract the enabled config macros to a C header file ; \
> +     $(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h | \
> +             sed -n -f tools/scripts/define2zero.sed | \
> +                     sort > [email protected]; \
> +     set -e ; \
> +     : Find CONFIGs that are not enabled ; \
> +     comm -13 [email protected] [email protected] >>[email protected] && \
> +     mv [email protected] $@

[...]

> diff --git a/tools/scripts/define2value.sed
> b/tools/scripts/define2value.sed new file mode 100644
> index 0000000..205f9fe
> --- /dev/null
> +++ b/tools/scripts/define2value.sed
> @@ -0,0 +1,37 @@
> +#
> +# Sed script to parse CPP macros and generate a list of CONFIG macros
> +#
> +# This converts:
> +#    #define CONFIG_XXX value
> +#into:
> +#    #define autoconf_xxx() value
> +#    #define autoconf_has_xxx() 1
> +
> +# Macros with parameters are ignored.
> +# (Note we avoid + since it doesn't appear to work)
> +/^#define CONFIG_[A-Za-z0-9_][A-Za-z0-9_]*(/ {
> +     d
> +}
> +
> +# Only process values prefixed with #define CONFIG_
> +/^#define CONFIG_[A-Za-z0-9_][A-Za-z0-9_]*/ {

You might want to adjust it this way:

/^[[:blank:]]\+#define[[:blank:]]\+[[:alnum:]_]\+/

This will pick "#define"s prefixed and suffixed with arbitrary amount of 
whitespace.

> +     # Strip the #define prefix
> +     s/#define[ \t]*CONFIG_/autoconf_/;

This will pick #defineCONFIG . Maybe "#define[[:blank:]]\+"

> +     # Change to form CONFIG_*=VALUE
> +     s/[\t ][\t ]*/=/;
> +     # Handle lines with no value
> +     s/^\([^=]*\)$/\1=/;

I wonder, how will this handle lines like:

include/configs/yucca.h:#define CONFIG_SYS_FLASH_WORD_SIZE      unsigned char

or

include/configs/at91sam9m10g45ek.h:#define CONFIG_SYS_PROMPT            
"U-Boot> 
"

or

#define CONFIG_FOO \
        value_is_bar \
        another_value_quux

?

> +     # Drop trailing spaces
> +     s/ *$//;
> +     # Change empty values to '1'
> +     s/=$/=1/;
> +     # Add #define at the start
> +     s/^\([^=]*\)=/#define \L\1() /
> +     # print the line
> +     p
> +     # Create autoconf_has_...(), value 1
> +     s/().*/() 1/
> +     s/\(autoconf_\)/\1has_/
> +     # print the line
> +     p
> +}

I'm tempted to rework this as a one-liner, but please stop me if you consider 
that worthless.
[...]
_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to