On 4/16/2016 5:05 AM, Jilles Tjoelker wrote: > On Tue, Apr 12, 2016 at 02:45:19AM +0000, Bryan Drewery wrote: >> Author: bdrewery >> Date: Tue Apr 12 02:45:19 2016 >> New Revision: 297842 >> URL: https://svnweb.freebsd.org/changeset/base/297842 > >> Log: >> META_MODE: Avoid changed build command every build. > >> Because the file is generated with -f using another Makefile, 2 >> different Makefiles are trying to handle the .meta file for the >> target. The obvious .NOMETA_CMP or .NOMETA on the ${MAKE} targets >> don't work as they are very limited in scope in bmake. Using >> .PHONY fixes the problem and ensures that the ${MAKE} command >> is always ran to check if it is outdated in the sub-make. > >> An example of the problem in gnu/lib/libgcc (with make -dM): >> /usr/obj/root/git/freebsd/gnu/lib/libgcc/tm.h.meta: 2: a build command >> has changed >> TARGET_CPU_DEFAULT="" HEADERS="options.h i386/biarch64.h i386/i386.h >> i386/unix.h i386/att.h dbxelf.h elfos-undef.h elfos.h freebsd-native.h >> freebsd-spec.h freebsd.h i386/x86-64.h i386/freebsd.h i386/freebsd64.h >> defaults.h" DEFINES="" /bin/sh >> /root/git/freebsd/gnu/lib/libgcc/../../../contrib/gcc/mkconfig.sh tm.h >> vs >> (cd /root/git/freebsd/gnu/lib/libgcc; make -f >> /root/git/freebsd/gnu/lib/libgcc/../../usr.bin/cc/cc_tools/Makefile >> MFILE=/root/git/freebsd/gnu/lib/libgcc/../../usr.bin/cc/cc_tools/Makefile >> GCCDIR=/root/git/freebsd/gnu/lib/libgcc/../../../contrib/gcc tm.h) >> Skipping meta for tm.h: .NOMETA >> (cd /root/git/freebsd/gnu/lib/libgcc; make -f >> /root/git/freebsd/gnu/lib/libgcc/../../usr.bin/cc/cc_tools/Makefile >> MFILE=/root/git/freebsd/gnu/lib/libgcc/../../usr.bin/cc/cc_tools/Makefile >> GCCDIR=/root/git/freebsd/gnu/lib/libgcc/../../../contrib/gcc tm.h) >> `tm.h' is up to date. > >> Modified: >> head/gnu/lib/csu/Makefile >> head/gnu/lib/libgcc/Makefile >> head/gnu/lib/libgcov/Makefile > >> Modified: head/gnu/lib/csu/Makefile >> ============================================================================== >> --- head/gnu/lib/csu/Makefile Tue Apr 12 02:01:16 2016 >> (r297841) >> +++ head/gnu/lib/csu/Makefile Tue Apr 12 02:45:19 2016 >> (r297842) >> @@ -71,7 +71,7 @@ crtendS.o: ${ENDSRC} >> -c -o ${.TARGET} ${.ALLSRC:N*.h} >> >> CLEANFILES+= tm.h tconfig.h options.h optionlist cs-tconfig.h cs-tm.h >> -tm.h tconfig.h options.h: ${CCDIR}/cc_tools/Makefile >> +tm.h tconfig.h options.h: ${CCDIR}/cc_tools/Makefile .PHONY >> (cd ${.CURDIR}; ${MAKE} -f ${.ALLSRC} MFILE=${.ALLSRC} GCCDIR=${GCCDIR} >> ${.TARGET}) >> >> .include <bsd.lib.mk> >> >> Modified: head/gnu/lib/libgcc/Makefile >> ============================================================================== >> --- head/gnu/lib/libgcc/Makefile Tue Apr 12 02:01:16 2016 >> (r297841) >> +++ head/gnu/lib/libgcc/Makefile Tue Apr 12 02:45:19 2016 >> (r297842) >> @@ -343,7 +343,7 @@ ${_src:R:S/$/.So/}: ${_src} ${COMMONHDRS >> # >> # Generated headers >> # >> -${COMMONHDRS}: ${.CURDIR}/../../usr.bin/cc/cc_tools/Makefile >> +${COMMONHDRS}: ${.CURDIR}/../../usr.bin/cc/cc_tools/Makefile .PHONY >> (cd ${.CURDIR}; ${MAKE} -f ${.ALLSRC} MFILE=${.ALLSRC} GCCDIR=${GCCDIR} >> ${.TARGET}) >> >> CLEANFILES += ${COMMONHDRS} >> >> Modified: head/gnu/lib/libgcov/Makefile >> ============================================================================== >> --- head/gnu/lib/libgcov/Makefile Tue Apr 12 02:01:16 2016 >> (r297841) >> +++ head/gnu/lib/libgcov/Makefile Tue Apr 12 02:45:19 2016 >> (r297842) >> @@ -45,7 +45,7 @@ CC_S = ${CC} -c ${CFLAGS} ${PICFLAG} -DS >> COMMONHDRS= tm.h tconfig.h gcov-iov.h options.h >> CLEANFILES+= ${COMMONHDRS} cs-tm.h cs-tconfig.h options.h optionlist >> >> -${COMMONHDRS}: ${.CURDIR}/../../usr.bin/cc/cc_tools/Makefile >> +${COMMONHDRS}: ${.CURDIR}/../../usr.bin/cc/cc_tools/Makefile .PHONY >> (cd ${.CURDIR}; ${MAKE} -f ${.ALLSRC} MFILE=${.ALLSRC} GCCDIR=${GCCDIR} >> ${.TARGET}) >> >> ${OBJS} beforedepend: ${COMMONHDRS} > > Unfortunately, this causes things to be built every time for > non-metamode builds, including make installworld. I had to revert the > gnu/lib/csu/Makefile part locally to get make installworld with a > read-only /usr/obj to work again. >
Yup, it does in META MODE as well. I failed to do an install test. r298218 fixes it and I added an error in install if a rebuild occurs in r298219 to help catch these earlier. -- Regards, Bryan Drewery
signature.asc
Description: OpenPGP digital signature