Re: Weird goings on with make::empty()

2019-09-04 Thread Enji Cooper

> 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()

2019-09-04 Thread Ian Lepore
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()

2019-09-04 Thread Gary Jennejohn
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()

2019-09-04 Thread Kyle Evans
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()

2019-09-04 Thread Enji Cooper

> 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"


Weird goings on with make::empty()

2019-09-04 Thread Poul-Henning Kamp
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...


-- 
Poul-Henning Kamp   | UNIX since Zilog Zeus 3.20
p...@freebsd.org | TCP/IP since RFC 956
FreeBSD committer   | BSD since 4.3-tahoe
Never attribute to malice what can adequately be explained by incompetence.
___
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"