On Sat, 12 Jul 2003, Tim Kientzle wrote: > Bruce Evans wrote: > > On Sat, 12 Jul 2003, Tim Kientzle wrote: > >>To be honest, I was never able to understand how > >>the previous version was supposed to work, since > >>the newvers.sh script was run with a very > >>odd current directory. > > > > Looks like it was assumed to just set variables, so that sourcing > > it doesn't make a mess. > > Here's the part that confuses me. > sys/conf/newvers.sh does more than just > set variables: I think it was originally only for building ver* files for kernels. Then it got (mis)used in src/include/Makefile. > * It updates the file "version" in the current directory > * It creates the file "vers.c" in the current directory This is very old kernel-building stuff. The only problem with it seems to be that it writes garbage files vers.c and `version' to the current directory (always the object directory for src/include?) > * It runs 'make -V KERN_IDENT' , which assumes at a minimum > that there is a Makefile in the current directory. > (Otherwise, you're invoking 'make' with no target.) This part is from a commit to newvers.sh last month. > When building -CURRENT on 4.7, the build fails in > /usr/src/include because of the following: > > osreldate.h: ${.CURDIR}/../sys/conf/newvers.sh \ > ${.CURDIR}/../sys/sys/param.h \ > ${.CURDIR}/Makefile > _at_${ECHO} creating osreldate.h from newvers.sh > _at_setvar PARAMFILE ${.CURDIR}/../sys/sys/param.h; \ > . ${.CURDIR}/../sys/conf/newvers.sh; \ > echo "$$COPYRIGHT" > osreldate.h; \ > > In particular, newvers.sh is being run with the > current directory being ${.OBJDIR}, and ${.OBJDIR} > doesn't contain a Makefile, so the 'make -V KERN_IDENT' > fails. My patch just runs newvers.sh in ${.CURDIR}, > which is also wrong, since that creates two files in > ${.CURDIR} that shouldn't be there. The difference seems to be that `make -V FOO' doesn't require a Makefile in -current. I think this is a side effect of indirectly related fixes for make -V (maybe the one to fix `make -f /dev/null -V FOO'. ISTR `make foo.o' never required a Makefile with BSD make. Apparently `make -V' was surprisingly different, and still is in 4.7. > I don't know the "right" way to fix this, because > I don't really understand why 'osreldate.h' cares > about KERN_IDENT, nor why it is reasonable for vers.c > and version to be created as side-effects. I suspect > that newvers.sh should be broken into two pieces: one > that sets the variables and another that creates/updates > version and vers.c. The former might then be useful > in building osreldate.h. I think splitting it or making it exit after just setting variables in the userland case is the right fix. I don't completely understand the KERN_IDENT changes, but they are only relevant for building kernels so we just need to turn them off for src/include/Makefile. BruceReceived on Sat Jul 12 2003 - 18:01:10 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:14 UTC