Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Aug 2004 10:37:20 +0400
From:      Sergey Matveychuk <sem@FreeBSD.org>
To:        freebsd-gnats-submit@FreeBSD.org, freebsd-perl@freebsd.org, Oliver Eikemeier <eik@FreeBSD.org>
Subject:   Re: ports/55515: [patch] extract perl stuff from bsd.port.mk into bsd.perl.mk
Message-ID:  <411C61A0.30302@FreeBSD.org>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------040007030500050100040009
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Here is an adapted patch for modern bsd.port.mk and suitable bsd.perl.mk.

-- 
Sem.

--------------040007030500050100040009
Content-Type: text/plain;
 name="bsd.port.mk.perl-patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="bsd.port.mk.perl-patch"

--- bsd.port.mk.orig	Fri Aug 13 10:12:06 2004
+++ bsd.port.mk	Fri Aug 13 10:14:17 2004
@@ -208,33 +208,6 @@
 # USE_ICONV		- Says that the port uses libiconv.
 # USE_GETTEXT		- Says that the port uses GNU gettext (libintl).
 ##
-# USE_PERL5		- Says that the port uses perl5 in one or more of the extract,
-#                         patch, build, install or run phases.
-# USE_PERL5_BUILD	- Says that the port uses perl5 in one or more of the extract,
-#                         patch, build or install phases.
-# USE_PERL5_RUN		- Says that the port uses perl5 for running.
-# PERL5			- Set to full path of perl5, either in the system or
-#				  installed from a port.
-# PERL			- Set to full path of perl5, either in the system or
-#				  installed from a port, but without the version number.
-#				  Use this if you need to replace "#!" lines in scripts.
-# PERL_VERSION	- Full version of perl5 (see below for current value).
-# PERL_VER		- Short version of perl5 (see below for current value).
-# PERL_LEVEL	- Perl version as an integer of the form MNNNPP, where
-#					M is major version, N is minor version, and P is
-#					the patch level. E.g., PERL_VERSION=5.6.1 would give
-#					a PERL_LEVEL of 500601. This can be used in comparisons
-#					to determine if the version of perl is high enough,
-#					whether a particular dependency is needed, etc.
-# PERL_ARCH		- Directory name of architecture dependent libraries
-#				  (value: ${ARCH}-freebsd).
-# PERL_PORT		- Name of the perl port that is installed
-#				  (value: perl5)
-# SITE_PERL		- Directory name where site specific perl packages go.
-#					This value is added to PLIST_SUB.
-# PERL_MODBUILD		- Use Module::Build to configure, build and install
-#			  port.
-#
 # USE_GHOSTSCRIPT	- Says that the port needs ghostscript to both
 #					build and run.  Default: not set.
 # USE_GHOSTSCRIPT_BUILD	- Says that the port needs ghostscript to build.
@@ -288,6 +261,13 @@
 #					See bsd.autotools.mk for more details.
 #					XXX: not currently in active use - this is a placeholder.
 ##
+# USE_PERL5_BUILD	- Says that the port uses perl5 in one or more of
+# 					  the extract, patch, build or install phases.
+# USE_PERL5_RUN	- Says that the port uses perl5 for running.
+# USE_PERL5		- Implements both USE_PERL5_BUILD and USE_PERL5_RUN.
+# 				  (See bsd.perl.mk for full list of variables and 
+# 				  CONFIGURE_SCRIPT, CONFIGURE_ARGS defaults.)
+##
 # USE_JAVA		- Says that the port relies on the Java language.
 #				  Implies inclusion of bsd.java.mk.  (Also see
 #				  that file for more information on USE_JAVA_*).
@@ -667,19 +647,14 @@
 #				  configure stage will not do anything if this is not set.
 # GNU_CONFIGURE	- Set if you are using GNU configure (optional).  Implies
 #				  HAS_CONFIGURE.
-# PERL_CONFIGURE - Configure using Perl's MakeMaker.  Implies USE_PERL5.
 # CONFIGURE_WRKSRC - Directory to run configure in (default: ${WRKSRC}).
 # CONFIGURE_SCRIPT - Name of configure script, relative to ${CONFIGURE_WRKSRC}
-#				  (default: "Makefile.PL" if PERL_CONFIGURE is set,
-#				  "configure" otherwise).
+#				  (default: "configure").
 # CONFIGURE_TARGET - The name of target to call when GNU_CONFIGURE is
 #				  defined (default: ${MACHINE_ARCH}-portbld-freebsd${OSREL}).
 # CONFIGURE_ARGS - Pass these args to configure if ${HAS_CONFIGURE} is set
 #				  (default: "--prefix=${PREFIX} ${CONFIGURE_TARGET}" if
-#				  GNU_CONFIGURE is set, "CC=${CC} CCFLAGS=${CFLAGS}
-#				  PREFIX=${PREFIX} INSTALLPRIVLIB=${PREFIX}/lib
-#				  INSTALLARCHLIB=${PREFIX}/lib" if PERL_CONFIGURE is set,
-#				  empty otherwise).
+#				  GNU_CONFIGURE is set, empty otherwise).
 # CONFIGURE_ENV - Pass these env (shell-like) to configure if
 #				  ${HAS_CONFIGURE} is set.
 # CONFIGURE_LOG - The name of configure log file (default: config.log).
@@ -1068,67 +1043,6 @@
 RUN_DEPENDS+=	${APXS}:${PORTSDIR}/${APACHE_PORT}
 .endif
 
-.if ${OSVERSION} >= 502100
-PERL_VERSION?=	5.8.5
-PERL_VER?=	5.8.5
-.else
-.if ${OSVERSION} >= 500032
-PERL_VERSION?=	5.6.1
-PERL_VER?=		5.6.1
-.else
-.if ${OSVERSION} >= 500007
-PERL_VERSION?=	5.6.0
-PERL_VER?=		5.6.0
-.else
-.if ${OSVERSION} >= 300000
-PERL_VERSION?=	5.00503
-.else
-PERL_VERSION?=	5.00502
-.endif
-PERL_VER?=		5.005
-.endif
-.endif
-.endif
-
-.if !defined(PERL_LEVEL) && defined(PERL_VERSION)
-perl_major=		${PERL_VERSION:C|^([1-9]+).*|\1|}
-_perl_minor=	00${PERL_VERSION:C|^([1-9]+)\.([0-9]+).*|\2|}
-perl_minor=		${_perl_minor:C|^.*(...)|\1|}
-.if ${perl_minor} >= 100
-perl_minor=		${PERL_VERSION:C|^([1-9]+)\.([0-9][0-9][0-9]).*|\2|}
-perl_patch=		${PERL_VERSION:C|^.*(..)|\1|}
-.else # ${perl_minor} < 100
-_perl_patch=	0${PERL_VERSION:C|^([1-9]+)\.([0-9]+)\.*|0|}
-perl_patch=		${_perl_patch:C|^.*(..)|\1|}
-.endif # ${perl_minor} < 100
-PERL_LEVEL=	${perl_major}${perl_minor}${perl_patch}
-.else
-PERL_LEVEL=0
-.endif # !defined(PERL_LEVEL) && defined(PERL_VERSION)
-
-.if ${PERL_LEVEL} >= 500600
-PERL_ARCH?=		mach
-.else
-PERL_ARCH?=		${ARCH}-freebsd
-.endif
-
-.if ${PERL_LEVEL} >= 500800
-PERL_PORT?=	perl5.8
-.else
-PERL_PORT?=	perl5
-.endif
-
-SITE_PERL_REL?=	lib/perl5/site_perl/${PERL_VER}
-SITE_PERL?=	${LOCALBASE}/${SITE_PERL_REL}
-
-.if ${PERL_LEVEL} < 500600
-PERL5=		/usr/bin/perl${PERL_VERSION}
-PERL=		/usr/bin/perl
-.else
-PERL5=		${LOCALBASE}/bin/perl${PERL_VERSION}
-PERL=		${LOCALBASE}/bin/perl
-.endif
-
 # XXX: (not yet): .if defined(USE_AUTOTOOLS)
 # .include "${PORTSDIR}/Mk/bsd.autotools.mk"
 # XXX: (not yet): .endif
@@ -1161,6 +1075,10 @@
 .include "${PORTSDIR}/Mk/bsd.ruby.mk"
 .endif
 
+.if defined(USE_PERL5) || defined(PERL_CONFIGURE) || defined(USE_PERL5_BUILD) || defined(USE_PERL5_RUN) || defined(PERL_MODBUILD) || ${PORTNAME} == "perl"
+.include "${PORTSDIR}/Mk/bsd.perl.mk"
+.endif
+
 .if defined(USE_QT) || defined(USE_QT2) || defined(USE_QT_VER) || defined(USE_KDELIBS_VER) || defined(USE_KDEBASE_VER)
 .include "${PORTSDIR}/Mk/bsd.kde.mk"
 .endif
@@ -1501,44 +1419,6 @@
 .endif
 .endif
 
-PLIST_SUB+=		PERL_VERSION=${PERL_VERSION} \
-				PERL_VER=${PERL_VER} \
-				PERL_ARCH=${PERL_ARCH} \
-				SITE_PERL=${SITE_PERL_REL}
-
-.if defined(PERL_MODBUILD)
-PERL_CONFIGURE=		yes
-CONFIGURE_SCRIPT?=	Build.PL
-.if ${PORTNAME} != Module-Build
-BUILD_DEPENDS+=		${SITE_PERL}/Module/Build.pm:${PORTSDIR}/devel/p5-Module-Build
-.endif
-ALL_TARGET?=
-PL_BUILD?=		Build
-CONFIGURE_ARGS+= \
-	install_path=lib="${PREFIX}/${SITE_PERL_REL}" \
-	install_path=arch="${PREFIX}/${SITE_PERL_REL}/${PERL_ARCH}" \
-	install_path=script="${PREFIX}/bin" \
-	install_path=bin="${PREFIX}/bin" \
-	install_path=libdoc="${MAN3PREFIX}/man/man3" \
-	install_path=bindoc="${MAN1PREFIX}/man/man1"
-.endif
-
-.if defined(PERL_CONFIGURE)
-USE_PERL5=	yes
-USE_REINPLACE=yes
-.endif
-
-.if ${PERL_LEVEL} >= 500600
-.if defined(USE_PERL5) || defined(USE_PERL5_BUILD)
-EXTRACT_DEPENDS+=${PERL5}:${PORTSDIR}/lang/${PERL_PORT}
-PATCH_DEPENDS+=	${PERL5}:${PORTSDIR}/lang/${PERL_PORT}
-BUILD_DEPENDS+=	${PERL5}:${PORTSDIR}/lang/${PERL_PORT}
-.endif
-.if defined(USE_PERL5) || defined(USE_PERL5_RUN)
-RUN_DEPENDS+=	${PERL5}:${PORTSDIR}/lang/${PERL_PORT}
-.endif
-.endif
-
 .if defined(USE_MYSQL)
 DEFAULT_MYSQL_VER?=	40
 # MySQL client version currently supported.
@@ -1597,6 +1477,10 @@
 .include "${PORTSDIR}/Mk/bsd.python.mk"
 .endif
 
+.if defined(USE_PERL5_BUILD) || defined(USE_PERL5_RUN)
+.include "${PORTSDIR}/Mk/bsd.perl.mk"
+.endif
+
 .if exists(${PORTSDIR}/../Makefile.inc)
 .include "${PORTSDIR}/../Makefile.inc"
 USE_SUBMAKE=	yes
@@ -2394,14 +2278,6 @@
 LATEST_LINK?=		${PKGBASE}
 PKGLATESTFILE=		${PKGLATESTREPOSITORY}/${LATEST_LINK}${PKG_SUFX}
 
-.if defined(PERL_CONFIGURE)
-CONFIGURE_ARGS+=	CC="${CC}" CCFLAGS="${CFLAGS}" PREFIX="${PREFIX}" \
-			INSTALLPRIVLIB="${PREFIX}/lib" INSTALLARCHLIB="${PREFIX}/lib"
-CONFIGURE_SCRIPT?=	Makefile.PL
-MAN3PREFIX?=		${PREFIX}/lib/perl5/${PERL_VERSION}
-.undef HAS_CONFIGURE
-.endif
-
 CONFIGURE_SCRIPT?=	configure
 CONFIGURE_TARGET?=	${MACHINE_ARCH}-portbld-freebsd${OSREL}
 CONFIGURE_LOG?=		config.log
@@ -3109,19 +2985,6 @@
 			 ${FALSE}; \
 		fi)
 .endif
-.if defined(PERL_CONFIGURE)
-	@cd ${CONFIGURE_WRKSRC} && \
-		${SETENV} ${CONFIGURE_ENV} \
-		${PERL5} ./${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS}
-.if !defined(PERL_MODBUILD)
-	@cd ${CONFIGURE_WRKSRC} && \
-		${PERL5} -pi -e 's/ doc_(perl|site|\$$\(INSTALLDIRS\))_install$$//' Makefile
-.if ${PERL_LEVEL} <= 500503
-	@cd ${CONFIGURE_WRKSRC} && \
-		${PERL5} -pi -e 's/^(INSTALLSITELIB|INSTALLSITEARCH|SITELIBEXP|SITEARCHEXP|INSTALLMAN1DIR|INSTALLMAN3DIR) = \/usr\/local/$$1 = \$$(PREFIX)/' Makefile
-.endif
-.endif
-.endif
 .if defined(USE_IMAKE)
 	@(cd ${CONFIGURE_WRKSRC}; ${SETENV} ${MAKE_ENV} ${XMKMF})
 .endif
@@ -3134,13 +2997,9 @@
 .if defined(USE_GMAKE)
 	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${ALL_TARGET})
 .else
-.if defined(PERL_MODBUILD)
-	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_ARGS} ${ALL_TARGET})
-.else
 	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${ALL_TARGET})
 .endif
 .endif
-.endif
 
 # Check conflicts
 
@@ -3183,15 +3042,11 @@
 .endif
 .endif
 .else # !defined(USE_GMAKE)
-.if defined(PERL_MODBUILD)
-	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_ARGS} ${INSTALL_TARGET})
-.else
 	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET})
 .if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
 	@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} install.man)
 .if ${XFREE86_HTML_MAN:L} == yes
 	@${MKHTMLINDEX} ${PREFIX}/lib/X11/doc/html
-.endif
 .endif
 .endif
 .endif

--------------040007030500050100040009
Content-Type: text/plain;
 name="bsd.perl.mk"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="bsd.perl.mk"

# -*- mode: Makefile; tab-width: 4; -*-
# ex: ts=4
#
# bsd.perl.mk - Utility for perl related ports
#
# Created by: Sergey Matveychuk <sem@ciam.ru>
#
# $FreeBSD: $
#
##
# USE_PERL5_BUILD	- Says that the port uses perl5 in one or more of
# 				  the extract, patch, build or install phases.
# USE_PERL5_RUN	- Says that the port uses perl5 for running.
# USE_PERL5		- Implements both USE_PERL5_BUILD and USE_PERL5_RUN.
# PERL5			- Set to full path of perl5, either in the system or
#				  installed from a port.
# PERL			- Set to full path of perl5, either in the system or
#				  installed from a port, but without the version number.
#				  Use this if you need to replace "#!" lines in scripts.
# PERL_VERSION	- Full version of perl5 (see below for current value).
# PERL_VER		- Short version of perl5 (see below for current value).
# PERL_LEVEL	- Perl version as an integer of the form MNNNPP, where
#					M is major version, N is minor version, and P is
#					the patch level. E.g., PERL_VERSION=5.6.1 would give
#					a PERL_LEVEL of 500601. This can be used in comparisons
#					to determine if the version of perl is high enough,
#					whether a particular dependency is needed, etc.
# PERL_ARCH		- Directory name of architecture dependent libraries
#				  (value: ${ARCH}-freebsd).
# PERL_PORT		- Name of the perl port that is installed
#				  (value: perl5)
# SITE_PERL		- Directory name where site specific perl packages go.
#				  This value is added to PLIST_SUB.
# PERL_MODBUILD	- Use Module::Build to configure, build and install
#			  	  port.
#
# For configure:
# PERL_CONFIGURE - Configure using Perl's MakeMaker.  Implies USE_PERL5.
# CONFIGURE_SCRIPT - Name of configure script (default: "Makefile.PL" or
# 					"Build.PL" if PERL_MODBUILD is set).
# CONFIGURE_ARGS - Pass these args to configure script
#				   (default: "CC=${CC} CCFLAGS=${CFLAGS} PREFIX=${PREFIX}
#				   INSTALLPRIVLIB=${PREFIX}/lib INSTALLARCHLIB=${PREFIX}/lib").
##

.if !defined(_POSTMKINCLUDED) && !defined(Perl_Pre_Include)

Perl_Pre_Include=			bsd.perl.mk

.if ${OSVERSION} >= 502100
PERL_VERSION?=	5.8.5
PERL_VER?=	5.8.5
.else
.if ${OSVERSION} >= 500032
PERL_VERSION?=	5.6.1
PERL_VER?=		5.6.1
.else
.if ${OSVERSION} >= 500007
PERL_VERSION?=	5.6.0
PERL_VER?=		5.6.0
.else
.if ${OSVERSION} >= 300000
PERL_VERSION?=	5.00503
.else
PERL_VERSION?=	5.00502
.endif
PERL_VER?=		5.005
.endif
.endif
.endif

.if !defined(PERL_LEVEL) && defined(PERL_VERSION)
perl_major=		${PERL_VERSION:C|^([1-9]+).*|\1|}
_perl_minor=	00${PERL_VERSION:C|^([1-9]+)\.([0-9]+).*|\2|}
perl_minor=		${_perl_minor:C|^.*(...)|\1|}
.if ${perl_minor} >= 100
perl_minor=		${PERL_VERSION:C|^([1-9]+)\.([0-9][0-9][0-9]).*|\2|}
perl_patch=		${PERL_VERSION:C|^.*(..)|\1|}
.else # ${perl_minor} < 100
_perl_patch=	0${PERL_VERSION:C|^([1-9]+)\.([0-9]+)\.*|0|}
perl_patch=		${_perl_patch:C|^.*(..)|\1|}
.endif # ${perl_minor} < 100
PERL_LEVEL=	${perl_major}${perl_minor}${perl_patch}
.else
PERL_LEVEL=0
.endif # !defined(PERL_LEVEL) && defined(PERL_VERSION)

.if ${PERL_LEVEL} >= 500600
PERL_ARCH?=		mach
.else
PERL_ARCH?=		${ARCH}-freebsd
.endif

.if ${PERL_LEVEL} >= 500800
PERL_PORT?=	perl5.8
.else
PERL_PORT?=	perl5
.endif

SITE_PERL_REL?=	lib/perl5/site_perl/${PERL_VER}
SITE_PERL?=	${LOCALBASE}/${SITE_PERL_REL}

.if ${PERL_LEVEL} < 500600
PERL5=		/usr/bin/perl${PERL_VERSION}
PERL=		/usr/bin/perl
.else
PERL5=		${LOCALBASE}/bin/perl${PERL_VERSION}
PERL=		${LOCALBASE}/bin/perl
.endif

PLIST_SUB+=		PERL_VERSION=${PERL_VERSION} \
				PERL_VER=${PERL_VER} \
				PERL_ARCH=${PERL_ARCH} \
				SITE_PERL=${SITE_PERL_REL}

.if defined(PERL_MODBUILD)
PERL_CONFIGURE=		yes
CONFIGURE_SCRIPT?=	Build.PL
.if ${PORTNAME} != Module-Build
BUILD_DEPENDS+=		${SITE_PERL}/Module/Build.pm:${PORTSDIR}/devel/p5-Module-Build
.endif
ALL_TARGET?=
PL_BUILD?=		Build
CONFIGURE_ARGS+= \
	install_path=lib="${PREFIX}/${SITE_PERL_REL}" \
	install_path=arch="${PREFIX}/${SITE_PERL_REL}/${PERL_ARCH}" \
	install_path=script="${PREFIX}/bin" \
	install_path=bin="${PREFIX}/bin" \
	install_path=libdoc="${MAN3PREFIX}/man/man3" \
	install_path=bindoc="${MAN1PREFIX}/man/man1"
.endif

.if defined(USE_PERL5)
USE_PERL5_BUILD=	yes
USE_PERL5_RUN=		yes
.endif

.if defined(PERL_CONFIGURE)
USE_PERL5_BUILD=	yes
.endif

.endif          # !defined(_POSTMKINCLUDED) && !defined(Perl_Pre_Include)

.if defined(_POSTMKINCLUDED) && !defined(Perl_Post_Include)

Perl_Post_Include=                      bsd.perl.mk

.if ${PERL_LEVEL} >= 500600
.if defined(USE_PERL5) || defined(USE_PERL5_BUILD)
EXTRACT_DEPENDS+=${PERL5}:${PORTSDIR}/lang/${PERL_PORT}
PATCH_DEPENDS+=	${PERL5}:${PORTSDIR}/lang/${PERL_PORT}
BUILD_DEPENDS+=	${PERL5}:${PORTSDIR}/lang/${PERL_PORT}
.endif
.if defined(USE_PERL5) || defined(USE_PERL5_RUN)
RUN_DEPENDS+=	${PERL5}:${PORTSDIR}/lang/${PERL_PORT}
.endif
.endif

.if defined(PERL_CONFIGURE)
CONFIGURE_ARGS+=	CC="${CC}" CCFLAGS="${CFLAGS}" PREFIX="${PREFIX}" \
			INSTALLPRIVLIB="${PREFIX}/lib" INSTALLARCHLIB="${PREFIX}/lib"
CONFIGURE_SCRIPT?=	Makefile.PL
MAN3PREFIX?=		${PREFIX}/lib/perl5/${PERL_VERSION}
.undef HAS_CONFIGURE
.endif

.if !target(do-configure) && defined(PERL_CONFIGURE)
do-configure:
	@cd ${CONFIGURE_WRKSRC} && \
		${SETENV} ${CONFIGURE_ENV} \
		${PERL5} ./${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS}
.if !defined(PERL_MODBUILD)
	@cd ${CONFIGURE_WRKSRC} && \
		${PERL5} -pi -e 's/ doc_(perl|site|\$$\(INSTALLDIRS\))_install$$//' Makefile
.if ${PERL_LEVEL} <= 500503
	@cd ${CONFIGURE_WRKSRC} && \
		${PERL5} -pi -e 's/^(INSTALLSITELIB|INSTALLSITEARCH|SITELIBEXP|SITEARCHEXP|INSTALLMAN1DIR|INSTALLMAN3DIR) = \/usr\/local/$$1 = \$$(PREFIX)/' Makefile
.endif
.endif
.endif

.if !target(do-build) && defined(PERL_MODBUILD)
do-build:
	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_ARGS} ${ALL_TARGET})
.endif

.if !target(do-install) && defined(PERL_MODBUILD)
do-install:
	@(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PERL5} ${PL_BUILD} ${MAKE_ARGS} ${INSTALL_TARGET})
.endif

.endif          # !defined(Perl_Include)

--------------040007030500050100040009--



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