public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Marek Vasut <marex@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v4 1/8] Implement autoconf header file
Date: Sun, 10 Nov 2013 20:47:17 +0100	[thread overview]
Message-ID: <201311102047.17874.marex@denx.de> (raw)
In-Reply-To: <1382800457-26608-2-git-send-email-sjg@chromium.org>

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 > $@.tmp; \
> +	: Regenerate our list of all config macros if neeed ; \
> +	if [ ! -f $@-all.tmp ] || \
> +		find $(src) -name '*.h' -type f -newer $@-all.tmp | \
> +			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 > $@-all.tmp; \

"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 > $@-enabled.tmp; \
> +	set -e ; \
> +	: Find CONFIGs that are not enabled ; \
> +	comm -13 $@-enabled.tmp $@-all.tmp >>$@.tmp && \
> +	mv $@.tmp $@

[...]

> 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.
[...]

  reply	other threads:[~2013-11-10 19:47 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-26 15:14 [U-Boot] [PATCH v4 0/8] Provide a mechanism to avoid using #ifdef everywhere Simon Glass
2013-10-26 15:14 ` [U-Boot] [PATCH v4 1/8] Implement autoconf header file Simon Glass
2013-11-10 19:47   ` Marek Vasut [this message]
2013-10-26 15:14 ` [U-Boot] [PATCH v4 2/8] main: Use autoconf for boot retry feature Simon Glass
2013-10-26 15:14 ` [U-Boot] [PATCH v4 3/8] main: Remove CONFIG #ifdefs from the abortboot() code Simon Glass
2013-10-26 15:14 ` [U-Boot] [PATCH v4 4/8] main: Use autoconf to remove #ifdefs around process_boot_delay() Simon Glass
2013-10-26 15:14 ` [U-Boot] [PATCH v4 5/8] main: Use autoconf for boot_delay code Simon Glass
2013-10-26 15:14 ` [U-Boot] [PATCH v4 6/8] main: Use autoconf for parser selection Simon Glass
2013-10-28 14:21   ` Michal Simek
2013-10-26 15:14 ` [U-Boot] [PATCH v4 7/8] main: Use autoconf in command line reading Simon Glass
2013-10-26 15:14 ` [U-Boot] [PATCH v4 8/8] main: Use autoconf in main_loop() Simon Glass
2013-10-28 14:44 ` [U-Boot] [PATCH v4 0/8] Provide a mechanism to avoid using #ifdef everywhere Wolfgang Denk
2013-10-28 15:32   ` Tom Rini
2013-10-28 20:31     ` Simon Glass
2013-11-06  7:24 ` Wolfgang Denk
2013-11-06  8:30   ` Stefan Roese
2013-11-07  9:20   ` Albert ARIBAUD
2013-11-10  4:24   ` Simon Glass
2013-11-10 12:58     ` Wolfgang Denk
2014-01-14 10:11     ` Detlev Zundel
2014-01-15 18:11       ` Simon Glass
2014-01-17 15:13         ` Detlev Zundel
2014-01-26 20:58           ` Simon Glass
  -- strict thread matches above, loose matches on Subject: below --
2013-06-17 14:44 Simon Glass
2013-06-17 14:44 ` [U-Boot] [PATCH v4 1/8] Implement autoconf header file Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201311102047.17874.marex@denx.de \
    --to=marex@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox