Re: Weird goings on with make::empty()
> On Sep 4, 2019, at 07:58, Ian Lepore wrote: > >> On Wed, 2019-09-04 at 09:33 -0500, Kyle Evans wrote: >> On Wed, Sep 4, 2019 at 9:27 AM Enji Cooper >> wrote: >>> >>> On Sep 4, 2019, at 04:59, Poul-Henning Kamp wrote: On: Repository Root: svn+ssh://repo.freebsd.org/base Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f Revision: 351809 I built a kernel, but drm-current-kmod did not get compiled from the new world order in /usr/local/sys/modules Debugging I ended up doing this to src/sys/conf/kern.post.mk: Index: sys/conf/kern.post.mk == = --- sys/conf/kern.post.mk(revision 351809) +++ sys/conf/kern.post.mk(working copy) @@ -77,12 +77,14 @@ ${target:S/^reinstall$/install/:S/^clobber$/cleandir/} .endif .for module in ${LOCAL_MODULES} -.if !empty(module) +true "XXX A $(module) 2 ${LOCALBASE} 3 ${LOCAL_MODULES} 4 ${MODULES_WITH_WORLD}" +#.if !empty(module) +true "XXX B $(module) 2 ${LOCALBASE} 3 ${LOCAL_MODULES} 4 ${MODULES_WITH_WORLD}" @${ECHODIR} "===> ${module} (${target:S/^reinstall$/install/:S/^clobber$/cleandir/})" @cd ${LOCAL_MODULES_DIR}/${module}; ${MKMODULESENV} ${MAKE} \ DIRPRFX="${module}/" \ ${target:S/^reinstall$/install/:S/^clobber$/cleandir/} -.endif +#.endif .endfor .endif .endfor This gives me the expected output from buildkernel: true "XXX A drm-current-kmod 2 /usr/local 3 drm-current-kmod 4 " true "XXX B drm-current-kmod 2 /usr/local 3 drm-current-kmod 4 " If I leave in the ".if !empty(module)" line in, I only get: true "XXX A drm-current-kmod 2 /usr/local 3 drm-current-kmod 4 " suggestions welcome... >>> >>> (CCing Kyle) >>> >>> This behavior change is probably caused by r351799. >>> >>> I personally think the code before Kyle’s change and after it was >>> buggy. It’s not word splitting LOCAL_MODULES before iterating over >>> it. >>> >> >> I've backed out r351799 since it breaks usage of LOCAL_MODULES >> (though >> I really don't understand how empty works, apparently, and that makes >> me sad)... please advise on a correct path forward, because it's not >> clear to me. >> >> Thanks, >> >> Kyle Evans >> > > I'm not positive, but I suspect this has to do with when variables are > expanded. In particular, the loop variable for a .for is expanded on > each loop iteration, but doesn't yet exist during parsing. I suspect > that the .if is evaluated earlier, during parsing. For example, this > makefile: > > all: > .for x in a "" b > .if empty(x) > @echo empty > .endif > @echo ${x} > .endfor > @echo done > > gives this output: > > revolution > make -f /tmp/Makefile > empty > a > empty > > empty > b > done > > The way I interpret that is that empty(x) is true during parsing, so > the for loop is generated to contain "@echo empty" and "@echo ${x}", > then the for loop actually runs and prints both "empty" and the value > of ${x} on each iteration. Correct. Word splitting is the key. I’ll take a stab at this later on today. Thanks, -Enji ___ freebsd-current@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"
Re: Weird goings on with make::empty()
On Wed, 2019-09-04 at 09:33 -0500, Kyle Evans wrote: > On Wed, Sep 4, 2019 at 9:27 AM Enji Cooper > wrote: > > > > > > > On Sep 4, 2019, at 04:59, Poul-Henning Kamp > > > wrote: > > > > > > On: > > > > > >Repository Root: svn+ssh://repo.freebsd.org/base > > >Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f > > >Revision: 351809 > > > > > > I built a kernel, but drm-current-kmod did not get compiled > > > from the new world order in /usr/local/sys/modules > > > > > > Debugging I ended up doing this to src/sys/conf/kern.post.mk: > > > > > >Index: sys/conf/kern.post.mk > > >== > > > = > > >--- sys/conf/kern.post.mk(revision 351809) > > >+++ sys/conf/kern.post.mk(working copy) > > >@@ -77,12 +77,14 @@ > > >${target:S/^reinstall$/install/:S/^clobber$/cleandir/} > > > .endif > > > .for module in ${LOCAL_MODULES} > > >-.if !empty(module) > > >+true "XXX A $(module) 2 ${LOCALBASE} 3 ${LOCAL_MODULES} 4 > > > ${MODULES_WITH_WORLD}" > > >+#.if !empty(module) > > >+true "XXX B $(module) 2 ${LOCALBASE} 3 ${LOCAL_MODULES} 4 > > > ${MODULES_WITH_WORLD}" > > >@${ECHODIR} "===> ${module} > > > (${target:S/^reinstall$/install/:S/^clobber$/cleandir/})" > > >@cd ${LOCAL_MODULES_DIR}/${module}; ${MKMODULESENV} > > > ${MAKE} \ > > >DIRPRFX="${module}/" \ > > >${target:S/^reinstall$/install/:S/^clobber$/cleandir/} > > >-.endif > > >+#.endif > > > .endfor > > > .endif > > > .endfor > > > > > > This gives me the expected output from buildkernel: > > > > > >true "XXX A drm-current-kmod 2 /usr/local 3 drm-current-kmod 4 > > > " > > >true "XXX B drm-current-kmod 2 /usr/local 3 drm-current-kmod 4 > > > " > > > > > > If I leave in the ".if !empty(module)" line in, I only get: > > > > > >true "XXX A drm-current-kmod 2 /usr/local 3 drm-current-kmod 4 > > > " > > > > > > suggestions welcome... > > > > (CCing Kyle) > > > > This behavior change is probably caused by r351799. > > > > I personally think the code before Kyle’s change and after it was > > buggy. It’s not word splitting LOCAL_MODULES before iterating over > > it. > > > > I've backed out r351799 since it breaks usage of LOCAL_MODULES > (though > I really don't understand how empty works, apparently, and that makes > me sad)... please advise on a correct path forward, because it's not > clear to me. > > Thanks, > > Kyle Evans > I'm not positive, but I suspect this has to do with when variables are expanded. In particular, the loop variable for a .for is expanded on each loop iteration, but doesn't yet exist during parsing. I suspect that the .if is evaluated earlier, during parsing. For example, this makefile: all: .for x in a "" b .if empty(x) @echo empty .endif @echo ${x} .endfor @echo done gives this output: revolution > make -f /tmp/Makefile empty a empty empty b done The way I interpret that is that empty(x) is true during parsing, so the for loop is generated to contain "@echo empty" and "@echo ${x}", then the for loop actually runs and prints both "empty" and the value of ${x} on each iteration. -- Ian ___ freebsd-current@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"
Re: Weird goings on with make::empty()
On Wed, 4 Sep 2019 09:33:08 -0500 Kyle Evans wrote: > On Wed, Sep 4, 2019 at 9:27 AM Enji Cooper wrote: > > > > > > > On Sep 4, 2019, at 04:59, Poul-Henning Kamp wrote: > > > > > > On: > > > > > >Repository Root: svn+ssh://repo.freebsd.org/base > > >Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f > > >Revision: 351809 > > > > > > I built a kernel, but drm-current-kmod did not get compiled > > > from the new world order in /usr/local/sys/modules > > > > > > Debugging I ended up doing this to src/sys/conf/kern.post.mk: > > > > > >Index: sys/conf/kern.post.mk > > >=== > > >--- sys/conf/kern.post.mk(revision 351809) > > >+++ sys/conf/kern.post.mk(working copy) > > >@@ -77,12 +77,14 @@ > > >${target:S/^reinstall$/install/:S/^clobber$/cleandir/} > > > .endif > > > .for module in ${LOCAL_MODULES} > > >-.if !empty(module) > > >+true "XXX A $(module) 2 ${LOCALBASE} 3 ${LOCAL_MODULES} 4 > > > ${MODULES_WITH_WORLD}" > > >+#.if !empty(module) > > >+true "XXX B $(module) 2 ${LOCALBASE} 3 ${LOCAL_MODULES} 4 > > > ${MODULES_WITH_WORLD}" > > >@${ECHODIR} "===> ${module} > > > (${target:S/^reinstall$/install/:S/^clobber$/cleandir/})" > > >@cd ${LOCAL_MODULES_DIR}/${module}; ${MKMODULESENV} ${MAKE} \ > > >DIRPRFX="${module}/" \ > > >${target:S/^reinstall$/install/:S/^clobber$/cleandir/} > > >-.endif > > >+#.endif > > > .endfor > > > .endif > > > .endfor > > > > > > This gives me the expected output from buildkernel: > > > > > >true "XXX A drm-current-kmod 2 /usr/local 3 drm-current-kmod 4 " > > >true "XXX B drm-current-kmod 2 /usr/local 3 drm-current-kmod 4 " > > > > > > If I leave in the ".if !empty(module)" line in, I only get: > > > > > >true "XXX A drm-current-kmod 2 /usr/local 3 drm-current-kmod 4 " > > > > > > suggestions welcome... > > > > (CCing Kyle) > > > > This behavior change is probably caused by r351799. > > > > I personally think the code before Kyle___s change and after it was buggy. > > It___s not word splitting LOCAL_MODULES before iterating over it. > > > > I've backed out r351799 since it breaks usage of LOCAL_MODULES (though > I really don't understand how empty works, apparently, and that makes > me sad)... please advise on a correct path forward, because it's not > clear to me. > In Kyle's defence my testing of his patch was only with LOCAL_MODULES= and LOCAL_MODULES="" in /etc/src.conf. I don't have any ports modules to be compiled with the kernel. -- Gary Jennejohn ___ freebsd-current@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"
Re: Weird goings on with make::empty()
On Wed, Sep 4, 2019 at 9:27 AM Enji Cooper wrote: > > > > On Sep 4, 2019, at 04:59, Poul-Henning Kamp wrote: > > > > On: > > > >Repository Root: svn+ssh://repo.freebsd.org/base > >Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f > >Revision: 351809 > > > > I built a kernel, but drm-current-kmod did not get compiled > > from the new world order in /usr/local/sys/modules > > > > Debugging I ended up doing this to src/sys/conf/kern.post.mk: > > > >Index: sys/conf/kern.post.mk > >=== > >--- sys/conf/kern.post.mk(revision 351809) > >+++ sys/conf/kern.post.mk(working copy) > >@@ -77,12 +77,14 @@ > >${target:S/^reinstall$/install/:S/^clobber$/cleandir/} > > .endif > > .for module in ${LOCAL_MODULES} > >-.if !empty(module) > >+true "XXX A $(module) 2 ${LOCALBASE} 3 ${LOCAL_MODULES} 4 > > ${MODULES_WITH_WORLD}" > >+#.if !empty(module) > >+true "XXX B $(module) 2 ${LOCALBASE} 3 ${LOCAL_MODULES} 4 > > ${MODULES_WITH_WORLD}" > >@${ECHODIR} "===> ${module} > > (${target:S/^reinstall$/install/:S/^clobber$/cleandir/})" > >@cd ${LOCAL_MODULES_DIR}/${module}; ${MKMODULESENV} ${MAKE} \ > >DIRPRFX="${module}/" \ > >${target:S/^reinstall$/install/:S/^clobber$/cleandir/} > >-.endif > >+#.endif > > .endfor > > .endif > > .endfor > > > > This gives me the expected output from buildkernel: > > > >true "XXX A drm-current-kmod 2 /usr/local 3 drm-current-kmod 4 " > >true "XXX B drm-current-kmod 2 /usr/local 3 drm-current-kmod 4 " > > > > If I leave in the ".if !empty(module)" line in, I only get: > > > >true "XXX A drm-current-kmod 2 /usr/local 3 drm-current-kmod 4 " > > > > suggestions welcome... > > (CCing Kyle) > > This behavior change is probably caused by r351799. > > I personally think the code before Kyle’s change and after it was buggy. It’s > not word splitting LOCAL_MODULES before iterating over it. > I've backed out r351799 since it breaks usage of LOCAL_MODULES (though I really don't understand how empty works, apparently, and that makes me sad)... please advise on a correct path forward, because it's not clear to me. Thanks, Kyle Evans ___ freebsd-current@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"
Re: Weird goings on with make::empty()
> On Sep 4, 2019, at 04:59, Poul-Henning Kamp wrote: > > On: > >Repository Root: svn+ssh://repo.freebsd.org/base >Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f >Revision: 351809 > > I built a kernel, but drm-current-kmod did not get compiled > from the new world order in /usr/local/sys/modules > > Debugging I ended up doing this to src/sys/conf/kern.post.mk: > >Index: sys/conf/kern.post.mk >=== >--- sys/conf/kern.post.mk(revision 351809) >+++ sys/conf/kern.post.mk(working copy) >@@ -77,12 +77,14 @@ >${target:S/^reinstall$/install/:S/^clobber$/cleandir/} > .endif > .for module in ${LOCAL_MODULES} >-.if !empty(module) >+true "XXX A $(module) 2 ${LOCALBASE} 3 ${LOCAL_MODULES} 4 > ${MODULES_WITH_WORLD}" >+#.if !empty(module) >+true "XXX B $(module) 2 ${LOCALBASE} 3 ${LOCAL_MODULES} 4 > ${MODULES_WITH_WORLD}" >@${ECHODIR} "===> ${module} > (${target:S/^reinstall$/install/:S/^clobber$/cleandir/})" >@cd ${LOCAL_MODULES_DIR}/${module}; ${MKMODULESENV} ${MAKE} \ >DIRPRFX="${module}/" \ >${target:S/^reinstall$/install/:S/^clobber$/cleandir/} >-.endif >+#.endif > .endfor > .endif > .endfor > > This gives me the expected output from buildkernel: > >true "XXX A drm-current-kmod 2 /usr/local 3 drm-current-kmod 4 " >true "XXX B drm-current-kmod 2 /usr/local 3 drm-current-kmod 4 " > > If I leave in the ".if !empty(module)" line in, I only get: > >true "XXX A drm-current-kmod 2 /usr/local 3 drm-current-kmod 4 " > > suggestions welcome... (CCing Kyle) This behavior change is probably caused by r351799. I personally think the code before Kyle’s change and after it was buggy. It’s not word splitting LOCAL_MODULES before iterating over it. Cheers, -Enji ___ freebsd-current@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"