Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 Aug 2018 12:20:43 -0700
From:      Cy Schubert <Cy.Schubert@cschubert.com>
To:        Alex Richardson <arichardson@FreeBSD.org>
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:  <201808291920.w7TJKhKs047018@slippy.cwsent.com>
In-Reply-To: Message from Alex Richardson <arichardson@FreeBSD.org> of "Mon, 20 Aug 2018 10:39:53 -0000." <201808201039.w7KAdrMM079556@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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?


-- 
Cheers,
Cy Schubert <Cy.Schubert@cschubert.com>
FreeBSD UNIX:  <cy@FreeBSD.org>   Web:  http://www.FreeBSD.org

	The need of the many outweighs the greed of the few.





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201808291920.w7TJKhKs047018>