Re: git: df90aeac24c9 - main - Fix build with -DNO_ROOT

From: Mateusz Guzik <mjguzik_at_gmail.com>
Date: Sat, 11 Jun 2022 23:34:09 UTC
I bisected an error to this commit:

# make -sssss 'DESTDIR=/mnt/tmp' distribution
ls: amd64/.8: No such file or directory
make[3]: "/bin/sh -c "/bin/ls amd64/.8"" returned non-zero status

On 11/26/21, Fernando Apesteguía <fernape@freebsd.org> wrote:
> The branch main has been updated by fernape (doc, ports committer):
>
> URL:
> https://cgit.FreeBSD.org/src/commit/?id=df90aeac24c9d3621f294e6638a31499b56f4f6b
>
> commit df90aeac24c9d3621f294e6638a31499b56f4f6b
> Author:     Fernando Apesteguía <fernape@FreeBSD.org>
> AuthorDate: 2021-11-26 10:55:50 +0000
> Commit:     Fernando Apesteguía <fernape@FreeBSD.org>
> CommitDate: 2021-11-26 11:51:08 +0000
>
>     Fix build with -DNO_ROOT
>
>     The inclusion of 0a0f7486413c broke the build with the -DNO_ROOT
> option.
>     Specifically, that commit adds some relative paths (with `..`) to
> METALOG
>     that make other tools using that log, fail afterwards (tar, makefs...).
>
>     It's been argued[1] if this is really something mtree(8) should handle
> more
>     graciously. In the meantime, fix the breakage but changing the order in
> which
>     the links are created: first in the parent directory, then in the
>     architecture-specific one.
>
>     We keep the architecture-specific directories an the links to the
> parent
>     directories. This is something that we might want to change in the
> future.
>
>     This commit is based on a concept patch by avg@.
>
>     [1]
> https://lists.freebsd.org/archives/dev-commits-src-all/2021-November/index.html
>
>     Reported by: bapt@, emaste@
>     Approved by: avg@
>     Fixes: 0a0f7486413c
>     Differential Revision: https://reviews.freebsd.org/D33126
> ---
>  share/man/man4/man4.aarch64/Makefile | 26 ++++++++++++++++----------
>  share/man/man4/man4.arm/Makefile     | 10 ++++++----
>  share/man/man4/man4.i386/Makefile    | 10 ++++++----
>  share/man/man4/man4.powerpc/Makefile | 10 ++++++----
>  usr.sbin/Makefile.amd64              |  5 +++++
>  usr.sbin/apm/Makefile                |  4 ----
>  6 files changed, 39 insertions(+), 26 deletions(-)
>
> diff --git a/share/man/man4/man4.aarch64/Makefile
> b/share/man/man4/man4.aarch64/Makefile
> index 6d0e427e6b28..d1fbced3b0a8 100644
> --- a/share/man/man4/man4.aarch64/Makefile
> +++ b/share/man/man4/man4.aarch64/Makefile
> @@ -4,6 +4,17 @@
>
>  MAN=	\
>  	armv8crypto.4 \
> +	enetc.4 \
> +	felix.4 \
> +	rk_gpio.4 \
> +	rk_grf.4 \
> +	rk_i2c.4 \
> +	rk_pinctrl.4 \
> +
> +# Install manpages shared with arm only if not installing manpages
> +# for all architectures, otherwise arm takes care of installing them.
> +.if !empty(MAN_ARCH) && ${MAN_ARCH} != "all"
> +MAN+=	\
>  	aw_gpio.4 \
>  	aw_mmc.4 \
>  	aw_rtc.4 \
> @@ -11,18 +22,13 @@ MAN=	\
>  	aw_spi.4 \
>  	aw_syscon.4 \
>  	bcm283x_pwm.4 \
> -	enetc.4 \
> -	felix.4 \
> -	rk_gpio.4 \
> -	rk_grf.4 \
> -	rk_i2c.4 \
> -	rk_pinctrl.4 \
>
> -# Link files to the parent directory
> +.endif
> +
> +# Link files to the architecture directory.
> +_ARCH_SUBDIR=aarch64
>  .for _manpage in ${MAN}
> -MLINKS+=${_manpage} ../${_manpage}
> +MLINKS+=${_manpage} ${_ARCH_SUBDIR}/${_manpage}
>  .endfor
>
> -MANSUBDIR=/aarch64
> -
>  .include <bsd.prog.mk>
> diff --git a/share/man/man4/man4.arm/Makefile
> b/share/man/man4/man4.arm/Makefile
> index 2ac8dbb5fd81..76146f4ebdb7 100644
> --- a/share/man/man4/man4.arm/Makefile
> +++ b/share/man/man4/man4.arm/Makefile
> @@ -18,11 +18,13 @@ MAN=	\
>  MLINKS= imx_wdog.4 imxwdt.4
>  MLINKS+= mge.4 if_mge.4
>
> -# Link files to the parent directory
> +# Link files to the architecture directory
> +_ARCH_SUBDIR=arm
> +.for _manpage _link in ${MLINKS}
> +MLINKS+=${_link} ${_ARCH_SUBDIR}/${_link}
> +.endfor
>  .for _manpage in ${MAN}
> -MLINKS+=${_manpage} ../${_manpage}
> +MLINKS+=${_manpage} ${_ARCH_SUBDIR}/${_manpage}
>  .endfor
>
> -MANSUBDIR=/arm
> -
>  .include <bsd.prog.mk>
> diff --git a/share/man/man4/man4.i386/Makefile
> b/share/man/man4/man4.i386/Makefile
> index e3d2e66ca78d..3dfc5f151f9f 100644
> --- a/share/man/man4/man4.i386/Makefile
> +++ b/share/man/man4/man4.i386/Makefile
> @@ -21,11 +21,13 @@ MLINKS=	CPU_ELAN.4 CPU_SOEKRIS.4
>  MLINKS+=pae.4 PAE.4
>  MLINKS+=sbni.4 if_sbni.4
>
> -# Link files to the parent directory
> +# Link files to the architecture directory
> +_ARCH_SUBDIR=i386
> +.for _manpage _link in ${MLINKS}
> +MLINKS+=${_link} ${_ARCH_SUBDIR}/${_link}
> +.endfor
>  .for _manpage in ${MAN}
> -MLINKS+=${_manpage} ../${_manpage}
> +MLINKS+=${_manpage} ${_ARCH_SUBDIR}/${_manpage}
>  .endfor
>
> -MANSUBDIR=/i386
> -
>  .include <bsd.prog.mk>
> diff --git a/share/man/man4/man4.powerpc/Makefile
> b/share/man/man4/man4.powerpc/Makefile
> index aa0e137fcedd..e6ade9778db3 100644
> --- a/share/man/man4/man4.powerpc/Makefile
> +++ b/share/man/man4/man4.powerpc/Makefile
> @@ -15,11 +15,13 @@ MAN=	adb.4 \
>  	snd_davbus.4 \
>  	tsec.4
>
> -# Link files to the parent directory
> +# Link files to the architecture directory
> +_ARCH_SUBDIR=powerpc
> +.for _manpage _link in ${MLINKS}
> +MLINKS+=${_link} ${_ARCH_SUBDIR}/${_link}
> +.endfor
>  .for _manpage in ${MAN}
> -MLINKS+=${_manpage} ../${_manpage}
> +MLINKS+=${_manpage} ${_ARCH_SUBDIR}/${_manpage}
>  .endfor
>
> -MANSUBDIR=/powerpc
> -
>  .include <bsd.prog.mk>
> diff --git a/usr.sbin/Makefile.amd64 b/usr.sbin/Makefile.amd64
> index d4d185414f41..1f15259eb1ac 100644
> --- a/usr.sbin/Makefile.amd64
> +++ b/usr.sbin/Makefile.amd64
> @@ -2,11 +2,16 @@
>
>  # mptable: broken (not 64 bit clean)
>  # pnpinfo: crashes (not really useful anyway)
> +_ARCH_SUBDIR=amd64
>  .if ${MK_ACPI} != "no"
>  SUBDIR+=	acpi
>  .endif
>  .if ${MK_APM} != "no"
>  SUBDIR+=	apm
> +# Link files to the architecture directory
> +.for _manpage in ${:!/bin/sh -c "/bin/ls ${_ARCH_SUBDIR}/.8"!:E}
> +MLINKS+=${_manpage} ${_ARCH_SUBDIR}/${_manpage}
> +.endfor
>  .endif
>  .if ${MK_BHYVE} != "no"
>  SUBDIR+=	bhyve
> diff --git a/usr.sbin/apm/Makefile b/usr.sbin/apm/Makefile
> index 27fa0c37d5cf..f52453c62522 100644
> --- a/usr.sbin/apm/Makefile
> +++ b/usr.sbin/apm/Makefile
> @@ -5,10 +5,6 @@ MAN=	apm.8
>  MLINKS=	apm.8 apmconf.8
>  MANSUBDIR= /${MACHINE_CPUARCH}
>
> -# Link files to the parent directory
> -MLINKS+= apm.8 ../apm.8
> -MLINKS+= apmconf.8 ../apmconf.8
> -
>  PACKAGE=apm
>
>  .include <bsd.prog.mk>
>


-- 
Mateusz Guzik <mjguzik gmail.com>