Re: make release of CURRENT on 4.7 box

From: Bruce Evans (bde_at_zeta.org.au)
Date: 07/13/03

  • Next message: Craig Rodrigues: "Re: GCC 3.3.1, new warnings with <limits>"
    Date: Sun, 13 Jul 2003 12:57:01 +1000 (EST)
    To: Tim Kientzle <kientzle@acm.org>
    
    

    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
    > @${ECHO} creating osreldate.h from newvers.sh
    > @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.

    Bruce
    _______________________________________________
    freebsd-current@freebsd.org mailing list
    http://lists.freebsd.org/mailman/listinfo/freebsd-current
    To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"


  • Next message: Craig Rodrigues: "Re: GCC 3.3.1, new warnings with <limits>"