Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 20 Oct 2012 21:13:36 +1100 (EST)
From:      Bruce Evans <brde@optusnet.com.au>
To:        Marcel Moolenaar <marcel@xcllnt.net>
Cc:        "svn-src-head@FreeBSD.org" <svn-src-head@FreeBSD.org>, "svn-src-all@FreeBSD.org" <svn-src-all@FreeBSD.org>, "src-committers@FreeBSD.org" <src-committers@FreeBSD.org>, Bruce Evans <brde@optusnet.com.au>, Simon Gerraty <sjg@juniper.net>
Subject:   Re: svn commit: r241298 - in head: . gnu/usr.bin/cc/cc_int gnu/usr.bin/cc/include kerberos5 kerberos5/tools/asn1_compile kerberos5/tools/slc lib/clang/include share/mk tools/build/make_check usr.sbin/c...
Message-ID:  <20121020205008.C1781@besplex.bde.org>
In-Reply-To: <965E2363-6866-4A10-A7B1-C428B3C78925@xcllnt.net>
References:  <201210062001.q96K16Or030755@svn.freebsd.org> <20121007161440.C7605@besplex.bde.org> <81CB9A3A-4BFF-41B2-A1F9-3721A40F6260@xcllnt.net> <20121008165228.F7997@besplex.bde.org> <965E2363-6866-4A10-A7B1-C428B3C78925@xcllnt.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 8 Oct 2012, Marcel Moolenaar wrote:

> On Oct 8, 2012, at 1:08 AM, Bruce Evans <brde@optusnet.com.au> wrote:
>
>> On Sun, 7 Oct 2012, Marcel Moolenaar wrote:
>>
>>> On Oct 6, 2012, at 10:31 PM, Bruce Evans <brde@optusnet.com.au> wrote:
>>>
>>>> On Sat, 6 Oct 2012, Marcel Moolenaar wrote:

Back to the old thread.  Followup to the new commit thread.

>>>>> Log:
>>>>> Add support for bmake. This includes:
>>>>> ....
>>>>> Modified: head/share/mk/bsd.dep.mk
>>>>> ==============================================================================
>>>>> --- head/share/mk/bsd.dep.mk	Sat Oct  6 19:57:27 2012	(r241297)
>>>>> +++ head/share/mk/bsd.dep.mk	Sat Oct  6 20:01:05 2012	(r241298)
>>>>> @@ -102,8 +102,8 @@ ${_YC} y.tab.h: ${_YSRC}
>>>>> CLEANFILES+= y.tab.c y.tab.h
>>>>> .elif !empty(YFLAGS:M-d)
>>>>> .for _YH in ${_YC:R}.h
>>>>> -.ORDER: ${_YC} ${_YH}
>>>>> -${_YC} ${_YH}: ${_YSRC}
>>>>> +${_YH}: ${_YC}
>>>>> +${_YC}: ${_YSRC}
>>>>> 	${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC}
>>>>> SRCS+=	${_YH}
>>>>> CLEANFILES+= ${_YH}
>>>>
>>>> This is broken.  Yacc headers don't depend on generated yacc .c files.
>>>> Now there is only a null rule to create the headers.  One broken case
>>>> is when the header somehow gets deleted.  It bcomes out of date, but
>>>> running make to update it only runs the null rule, so it remains
>>>> nonexistent.
>>>
>>> The problem with the old rule is that it's broken as well. The
>>> change attempts to fix a real parallel build problem. Your
>>> comment is valid though. What about the following (possibly
>>> white-space corrupted) patch from Simon:
>>
>> What's wrong with the old rule?  It uses the .ORDER directive to force
>> creation of the 2 generated files in sequential order, so that parallel
>> builds can't happen.
>
> Since the source file is re-created when the header is created,
> any parallel work done with the C file is a problem.

Yes, but the old rule uses .ORDER to try to prevent parallel work,
and you never explained why it stopped working.  I think I expmained
the problem in the later thread as finer-grained timestamps exposing
old races more.

> At HP, where we used clearcase & clearmake, we had to create
> an intermediate tarfile, the result of the yacc(1) rule and
> then have the .h and .c file depend on the tarfile. Each got
> unique created by extracting only ${.TARGET}.
>
> Roughly and loosely speaking:
>
> .tar: .y
> 	yacc and create tar file
>
> .c: .tar
> 	tar x y.tab.c
>
> .h: .tar
> 	tar x y.tab.h
> 
> I think something like this is the only way to get something
> that's 100% correct.

Probably.  Using temporary files seems to be messier.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20121020205008.C1781>