Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 30 Aug 2018 21:05:37 +0100
From:      Alexander Richardson <arichardson@freebsd.org>
To:        Cy Schubert <Cy.Schubert@cschubert.com>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org,  svn-src-head@freebsd.org
Subject:   Re: svn commit: r338098 - in head: . tools/build
Message-ID:  <CA%2BZ_v8oqa1kwV4egQ8VbPLfmg=CdE6jbtyL7am2gYkOr5Aq4uw@mail.gmail.com>
In-Reply-To: <201808291920.w7TJKhKs047018@slippy.cwsent.com>
References:  <arichardson@FreeBSD.org> <201808201039.w7KAdrMM079556@repo.freebsd.org> <201808291920.w7TJKhKs047018@slippy.cwsent.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 29 Aug 2018 at 20:21 Cy Schubert <Cy.Schubert@cschubert.com> wrote:

> In message <201808201039.w7KAdrMM079556@repo.freebsd.org>, Alex
> Richardson writ
> es:
> > Author: arichardson
> > Date: Mon Aug 20 10:39:53 2018
> > New Revision: 338098
> > URL: https://svnweb.freebsd.org/changeset/base/338098
> >
> > Log:
> >   Don't create directories in ${WORLDTMP}/legacy with mtree
> >
> >   This has two advantages:
> >   1) We no longer create lots of empty directories that are not needed
> >   2) This is a requirement for building on non-FreeBSD hosts since mtree
> will
> >   only exist after the bootstrap-tools phase there.
> >
> >   Aproved By: jhb (mentor)
> >   Differential Revision: https://reviews.freebsd.org/D16773
> >
> > Modified:
> >   head/Makefile.inc1
> >   head/tools/build/Makefile
> >
> > Modified: head/Makefile.inc1
> >
> =============================================================================
> > =
> > --- head/Makefile.inc1        Mon Aug 20 10:39:48 2018        (r338097)
> > +++ head/Makefile.inc1        Mon Aug 20 10:39:53 2018        (r338098)
> > @@ -968,29 +968,10 @@ _worldtmp: .PHONY
> >  .endif       # !defined(NO_CLEAN)
> >       @mkdir -p ${WORLDTMP}
> >       @touch ${WORLDTMP}/${.TARGET}
> > -
> > -.for _dir in \
> > -    lib lib/casper lib/geom usr legacy/bin legacy/usr
> > -     mkdir -p ${WORLDTMP}/${_dir}
> > -.endfor
> > -     ${WORLDTMP_MTREE} -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
> > -         -p ${WORLDTMP}/legacy/usr >/dev/null
> > -     ${WORLDTMP_MTREE} -f ${.CURDIR}/etc/mtree/BSD.include.dist \
> > -         -p ${WORLDTMP}/legacy/usr/include >/dev/null
> > -     ${WORLDTMP_MTREE} -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
> > -         -p ${WORLDTMP}/usr >/dev/null
> > -     ${WORLDTMP_MTREE} -f ${.CURDIR}/etc/mtree/BSD.include.dist \
> > -         -p ${WORLDTMP}/usr/include >/dev/null
> > -     ln -sf ${.CURDIR}/sys ${WORLDTMP}
> > -.if ${MK_DEBUG_FILES} != "no"
> > -     ${WORLDTMP_MTREE} -f ${.CURDIR}/etc/mtree/BSD.debug.dist \
> > -         -p ${WORLDTMP}/legacy/usr/lib >/dev/null
> > -     ${WORLDTMP_MTREE} -f ${.CURDIR}/etc/mtree/BSD.debug.dist \
> > -         -p ${WORLDTMP}/usr/lib >/dev/null
> > -.endif
> > -.for _mtree in ${LOCAL_MTREE}
> > -     ${WORLDTMP_MTREE} -f ${.CURDIR}/${_mtree} -p ${WORLDTMP} >
> /dev/null
> > -.endfor
> > +# We can't use mtree to create the worldtmp directories since it may
> not be
> > +# available on the target system (this happens e.g. when building on
> non-Fre
> > eBSD)
> > +     cd ${.CURDIR}/tools/build; \
> > +         ${MAKE} DIRPRFX=tools/build/ DESTDIR=${WORLDTMP}/legacy
> installdirs
> >  _legacy:
> >       @echo
> >       @echo
> "--------------------------------------------------------------"
> > @@ -1003,6 +984,19 @@ _bootstrap-tools:
> >       @echo ">>> stage 1.2: bootstrap tools"
> >       @echo
> "--------------------------------------------------------------"
> >       ${_+_}cd ${.CURDIR}; ${BMAKE} bootstrap-tools
> > +     mkdir -p ${WORLDTMP}/usr ${WORLDTMP}/lib/casper
> ${WORLDTMP}/lib/geom
> > +     ${WORLDTMP_MTREE} -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
> > +         -p ${WORLDTMP}/usr >/dev/null
> > +     ${WORLDTMP_MTREE} -f ${.CURDIR}/etc/mtree/BSD.include.dist \
> > +         -p ${WORLDTMP}/usr/include >/dev/null
> > +     ln -sf ${.CURDIR}/sys ${WORLDTMP}
> > +.if ${MK_DEBUG_FILES} != "no"
> > +     ${WORLDTMP_MTREE} -f ${.CURDIR}/etc/mtree/BSD.debug.dist \
> > +         -p ${WORLDTMP}/usr/lib >/dev/null
> > +.endif
> > +.for _mtree in ${LOCAL_MTREE}
> > +     ${WORLDTMP_MTREE} -f ${.CURDIR}/${_mtree} -p ${WORLDTMP} >
> /dev/null
> > +.endfor
> >  _cleanobj:
> >  .if !defined(NO_CLEAN)
> >       @echo
> >
> > Modified: head/tools/build/Makefile
> >
> =============================================================================
> > =
> > --- head/tools/build/Makefile Mon Aug 20 10:39:48 2018        (r338097)
> > +++ head/tools/build/Makefile Mon Aug 20 10:39:53 2018        (r338098)
> > @@ -59,4 +59,17 @@ SUBDIR=            cross-build
> >  # Needed to build config (since it uses libnv)
> >  SYSINCS+=    ${SRCTOP}/sys/sys/nv.h ${SRCTOP}/sys/sys/cnv.h
> >
> > +
> > +# Create all the directories that are needed during the legacy,
> bootstrap-to
> > ols
> > +# and cross-tools stages. We do this here using mkdir since mtree may
> not ex
> > ist
> > +# yet (this happens if we are crossbuilding from Linux/Mac).
> > +installdirs:
> > +.for _dir in bin sbin usr/bin usr/sbin usr/lib usr/include lib/geom
> lib/casp
> > er
> > +     mkdir -p "${DESTDIR}/${_dir}"
> > +.endfor
> > +
> > +.for _group in ${INCSGROUPS:NINCS}
> > +     mkdir -p "${DESTDIR}/${${_group}DIR}"
> > +.endfor
> > +
> >  .include <bsd.lib.mk>
> >
>
> This broke my krb5 project branch. The fix for me is easy but rather
> inelegant, adding yet another for loop. Would it not be better to
> guarantee that mtree is in $WORLDTEMP for platforms that don't have it
> naturally or unconditionally? And, before we use it? With this change
> it requires, depending on what any future patch changes, that etc/mtree
> and this fragment be updated. To me it feels klunky.
>
> I'll work around this for now but IMO long term we should use a
> different strategy and reduce redundancy.
>
> Thoughts?
>
> Sorry about the breakage.
WORLDTMP is still populated using mtree, only the limited subset of
directories needed in $WORLDTMP/legacy is created here.
I wonder why you need a separate loop for krb5? What other directories are
needed by the bootstrap tools?
$WORLDTMP/legacy should only contain a few binaries + headers and libs for
the bootstrap tools so I don't think we will add more directories very
frequently.
I think for now this is fine and long-term I was under the impression that
creating directories with mtree would eventuall go away and be replaced
with bsd.dirs.mk (added in r336640).
It looks like all mtree calls are gone in
https://github.com/brd/freebsd/blob/etc-DIR/Makefile.inc1 so it looks like
this is possible.


Alex



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CA%2BZ_v8oqa1kwV4egQ8VbPLfmg=CdE6jbtyL7am2gYkOr5Aq4uw>