Date: Sun, 7 Oct 2012 21:11:38 -0700 From: Marcel Moolenaar <marcel@xcllnt.net> To: Bruce Evans <brde@optusnet.com.au> 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>, 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: <81CB9A3A-4BFF-41B2-A1F9-3721A40F6260@xcllnt.net> In-Reply-To: <20121007161440.C7605@besplex.bde.org> References: <201210062001.q96K16Or030755@svn.freebsd.org> <20121007161440.C7605@besplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Oct 6, 2012, at 10:31 PM, Bruce Evans <brde@optusnet.com.au> wrote:
> On Sat, 6 Oct 2012, Marcel Moolenaar wrote:
>
>> 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:
Index: share/mk/bsd.dep.mk
===================================================================
--- share/mk/bsd.dep.mk (revision 241871)
+++ share/mk/bsd.dep.mk (working copy)
@@ -95,16 +95,17 @@ CLEANFILES+= ${_LC}
SRCS:= ${SRCS:S/${_YSRC}/${_YC}/}
CLEANFILES+= ${_YC}
.if !empty(YFLAGS:M-d) && !empty(SRCS:My.tab.h)
-.ORDER: ${_YC} y.tab.h
-${_YC} y.tab.h: ${_YSRC}
+y.tab.h: ${_YSRC}
${YACC} ${YFLAGS} ${.ALLSRC}
+${_YC}: y.tab.h
cp y.tab.c ${_YC}
CLEANFILES+= y.tab.c y.tab.h
.elif !empty(YFLAGS:M-d)
.for _YH in ${_YC:R}.h
-${_YH}: ${_YC}
-${_YC}: ${_YSRC}
+${_YH}: ${_YSRC}
${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC}
+${_YC}: ${_YH}
+ @touch ${.TARGET}
SRCS+= ${_YH}
CLEANFILES+= ${_YH}
.endfor
This makes sure the C file is always more recent than the H
file and important to keep make happy in all situations. It
doesn't fix the the problem of removing the C file entirely.
At least the C file is recreated, but not with the right
contents.
Thoughts?
--
Marcel Moolenaar
marcel@xcllnt.net
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?81CB9A3A-4BFF-41B2-A1F9-3721A40F6260>
