tech-toolchain archive

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

Re: make rules when creating multiple files

On Sat, 13 Aug 2011, Thomas Klausner wrote:

> Matthew Green provided the following analysis for PR 45126 (parallel
> build breakage in Kerberos):
> ----- Forwarded message from matthew green <> -----
> i think i may have figured out the cause of this.  i noticed that
> my build tree had hdb_asn1.h as a zero length file.  after a little
> bit of red-herring with seeing a similar zero length file in the
> src/compat build, i come across the rules in
> src/crypto/external/bsd/heimdal/
> ${ASN1_FILES.${src}} ${src:.asn1=_asn1.hx} ${src:.asn1=_asn1-priv.hx}: ${src} 
> \
>                                         ${src:.asn1=.opt} ${TOOL_ASN1_COMPILE}
>         ${TOOL_ASN1_COMPILE}                    \
>                 ${ASN1_OPTS.${src}}             \
>                 --option-file=${.ALLSRC:[2]}    \
>                 ${.ALLSRC:[1]} ${src:.asn1=_asn1}
> this rule will run the asn1_compile multiple times when it infact
> only wants to be run once.  i'm not sure how this is causing zero
> length files to be created but this rule is, AFAIK, broken.
> i don't have a fix.
> .mrg.
> ----- End forwarded message -----
> What is the correct fix?

rework it to provide a single target, with other files produced as
side-effects and rearrange any dependents to depend on that target rather
than the side-effect files

eg for things like cgram.y -> cgram.[ch] we don't do

cgram.c cgram.h: cgram.y
        yacc -d cgram.y
        mv cgram.c
        mv cgram.h

src.c: cgram.h

which will work for -j1 but will run it twice for -j2

but instead, use

cgram.c: cgram.y
        yacc -d cgram.y
        mv cgram.c
        mv cgram.h

src.c: cgram.c

and don't tell make about the cgram.h file. If the user edits it by hand,
well thats their mistake..


Home | Main Index | Thread Index | Old Index