[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [XEN PATCH] tools: Have flex and bison mandatory



On Tue, Feb 07, 2023 at 06:02:45PM +0000, Anthony PERARD wrote:
> On Tue, Feb 07, 2023 at 06:03:12PM +0100, Jan Beulich wrote:
> > On 07.02.2023 17:09, Anthony PERARD wrote:
> > > This also remove the way the missing binaries are been handled, with
> > > double-column-rules, which might be an issue sometime.
> > 
> > These double-colon rules should never have been introduced. Double
> > colons have a different meaning ("terminal rule") for pattern rules.
> > In fact they were my initial suspects when looking into that odd build
> > failure in CI.
> 
> After some more investigation, I don't think anymore the double-colon
> rules here is an issue.
> 
> I think the issue that Andrew saw in the CI with "libxlu_cfg_y.o"
> failing to build while "libxlu_cfg_l.[ch]" are been regenerated is
> probably because make doesn't consider "libxlu_cfg_l.[ch]" as a group of
> targets.
> 
> If for some reason we have:
>     libxlu_cfg_l.h newer than libxlu_cfg_l.l newer than libxlu_cfg_l.c
> 
> Then make seems to take two parallel decision:
>     When building libxlu_cfg_y.o:
>         libxlu_cfg_l.h is newer than libxlu_cfg_l.l
>         -> libxlu_cfg_l.h is up-to-date, start building libxlu_cfg_y.o
>     When building libxlu_cfg_l.o:
>         libxlu_cfg_l.c is older than libxlu_cfg_l.l
>         -> we need to generate libxlu_cfg_l.c first
> Then, libxlu_cfg_y.o fails to build because libxlu_cfg_l.h is been
> updated do to the parallel build of libxlu_cfg_l.o.
> 
> I can easily reproduce the issue with:
>     touch libxlu_cfg_l.c; sleep .1; touch libxlu_cfg_l.l; sleep .1;
>     touch libxlu_cfg_l.h; sleep .1; make -j
> And having "sleep 1" in "%.c %.h: %.l" recipe, between `rm` and `flex`.
> 
> I don't know how to properly fix this yet.
> Event writing "%.c %.h &: %.l" doesn't work, with make 4.3, which is
> supposed to be grouped targets. But that's is maybe fixed in 4.4.

Might this be solved with:

%.c: %.l | %.h

I'm unsure whether order-only dependencies are GNU-make only (there is a
good chance).  There is also the option of using .PRECIOUS


-- 
(\___(\___(\______          --=> 8-) EHM <=--          ______/)___/)___/)
 \BS (    |         ehem+sigmsg@xxxxxxx  PGP 87145445         |    )   /
  \_CS\   |  _____  -O #include <stddisclaimer.h> O-   _____  |   /  _/
8A19\___\_|_/58D2 7E3D DDF4 7BA6 <-PGP-> 41D1 B375 37D0 8714\_|_/___/5445





 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.