svn commit: r338098 - in head: . tools/build

Cy Schubert Cy.Schubert at cschubert.com
Wed Aug 29 19:21:11 UTC 2018


In message <201808201039.w7KAdrMM079556 at 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 at cschubert.com>
FreeBSD UNIX:  <cy at FreeBSD.org>   Web:  http://www.FreeBSD.org

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




More information about the svn-src-all mailing list