|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [XEN PATCH v2 1/4] build,include: rework shell script for headers++.chk
On Wed, Jun 15, 2022 at 08:37:42AM +0200, Jan Beulich wrote:
> On 14.06.2022 18:22, Anthony PERARD wrote:
> > diff --git a/xen/include/Makefile b/xen/include/Makefile
> > index 6d9bcc19b0..49c75a78f9 100644
> > --- a/xen/include/Makefile
> > +++ b/xen/include/Makefile
> > @@ -158,13 +158,22 @@ define cmd_headerscxx_chk
> > touch $@.new; \
> > exit 0; \
> > fi; \
> > - $(foreach i, $(filter %.h,$^), \
> > - echo "#include "\"$(i)\" \
> > + get_prereq() { \
> > + case $$1 in \
> > + $(foreach i, $(filter %.h,$^), \
> > + $(if $($(patsubst $(srctree)/%,%,$(i))-prereq), \
> > + $(i)$(close) \
> > + echo "$(foreach j, $($(patsubst $(srctree)/%,%,$(i))-prereq), \
> > + -include c$(j))";;)) \
> > + esac; \
>
> If I'm reading this right (indentation looks to be a little misleading
> and hence one needs to count parentheses) the case statement could (in
> theory) remain without any "body". As per the command language spec I'm
> looking at this (if it works in the first place) is an extension, and
> formally there's always at least one label required. Since we aim to be
> portable in such regards, I'd like to request that there be a final
> otherwise empty *) line.
When looking at the shell grammar at [1], an empty body seems to be
allowed. But I can add "*)" at the end for peace of mind.
[1]
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_10_02
As for misleading indentation, I've got my $EDITOR to show me matching
parentheses, so I don't need to count them. But if I rewrite that
function as following, would it be easier to follow?
+ get_prereq() { \
+ case $$1 in \
+ $(foreach i, $(filter %.h,$^), \
+ $(if $($(patsubst $(srctree)/%,%,$(i))-prereq), \
+ $(i)$(close) \
+ echo "$(foreach j, $($(patsubst $(srctree)/%,%,$(i))-prereq), \
+ -include c$(j))";;)) \
+ *) ;; \
+ esac; \
+ }; \
> > + }; \
> > + for i in $(filter %.h,$^); do \
> > + echo "#include "\"$$i\" \
> > | $(CXX) -x c++ -std=gnu++98 -Wall -Werror -D__XEN_TOOLS__ \
> > -include stdint.h -include $(srcdir)/public/xen.h \
> > - $(foreach j, $($(patsubst $(srctree)/%,%,$i)-prereq), -include
> > c$(j)) \
> > + `get_prereq $$i` \
>
> While I know we use back-ticked quoting elsewhere, I'd generally
> recommend to use $() for readability. But maybe others view this
> exactly the other way around ...
Well, in Makefile it's `` vs $$(). At least, we don't have to write
$$$(open)$(close) here :-).
I guess $$(get_prereq $$i) isn't too bad here, I'll replace the
backquote.
> And a question without good context to put at: Isn't headers99.chk in
> similar need of converting? It looks only slightly less involved than
> the C++ one.
It doesn't really need converting at the moment, because there's only
two headers to check, so the resulting command line is small. But
converting it at the same time is probably a good idea to avoid having
two different implementations of the header check.
Thanks,
--
Anthony PERARD
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |