[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 10:48:56AM -0800, Elliott Mitchell wrote:
> 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

Then upon more reading wouldn't:

%_y.c: | %_l.c

Accomplish the job?  (assuming GNU-make or everyone has copied that
feature)


-- 
(\___(\___(\______          --=> 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®.