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>