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
@@ -1,28 +1,34 @@
 # $FreeBSD$
 
 .PATH: ${.CURDIR}/../man4.arm # Some manpages are common to arm and aarch64
 
 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 \
 	aw_sid.4 \
 	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
@@ -1,28 +1,30 @@
 # $FreeBSD$
 
 MAN=	\
 	aw_gpio.4 \
 	aw_mmc.4 \
 	aw_rtc.4 \
 	aw_sid.4 \
 	aw_spi.4 \
 	aw_syscon.4 \
 	bcm283x_pwm.4 \
 	devcfg.4 \
 	imx6_ahci.4 \
 	imx6_snvs.4 \
 	imx_wdog.4 \
 	mge.4 \
 	ti_adc.4
 
 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
@@ -1,31 +1,33 @@
 # $FreeBSD$
 
 MAN=	apm.4 \
 	ce.4 \
 	cp.4 \
 	CPU_ELAN.4 \
 	glxiic.4 \
 	glxsb.4 \
 	longrun.4 \
 	npx.4 \
 	pae.4 \
 	pbio.4 \
 	perfmon.4 \
 	pnp.4 \
 	pnpbios.4 \
 	sbni.4 \
 	smapi.4 \
 	vpd.4
 
 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
@@ -1,25 +1,27 @@
 # $FreeBSD$
 
 MAN=	adb.4 \
 	akbd.4 \
 	abtn.4 \
 	ams.4 \
 	cuda.4 \
 	dtsec.4 \
 	llan.4 \
 	ofw_console.4 \
 	pmu.4 \
 	powermac_nvram.4 \
 	smu.4 \
 	snd_ai2s.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
@@ -1,27 +1,32 @@
 # $FreeBSD$
 
 # 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
 SUBDIR+=	bhyvectl
 SUBDIR+=	bhyveload
 .endif
 SUBDIR+=	boot0cfg
 .if ${MK_TOOLCHAIN} != "no"
 SUBDIR+=	btxld
 .endif
 SUBDIR+=	cpucontrol
 .if ${MK_HYPERV} != "no"
 SUBDIR+=	hyperv
 .endif
 SUBDIR+=	lptcontrol
 SUBDIR+=	mptable
 SUBDIR+=	spkrtest
 SUBDIR+=	zzz
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
@@ -1,14 +1,10 @@
 # $FreeBSD$
 
 PROG=	apm
 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>