Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 31 Mar 2026 17:23:06 +0000
From:      Yuri Victorovich <yuri@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 2be4b76cb0d0 - main - math/dune-common: update 2.8.0=?utf-8?Q? =E2=86=92 2.1?=1.0
Message-ID:  <69cc02fa.42fa1.68f52d88@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by yuri:

URL: https://cgit.FreeBSD.org/ports/commit/?id=2be4b76cb0d07145e160639b95ab4015f96874b3

commit 2be4b76cb0d07145e160639b95ab4015f96874b3
Author:     Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2026-03-31 17:01:21 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2026-03-31 17:23:01 +0000

    math/dune-common: update 2.8.0 → 2.11.0
---
 math/dune-common/Makefile                          | 19 ++---
 math/dune-common/distinfo                          |  8 +--
 .../files/patch-cmake_modules_DuneDoxygen.cmake    | 12 ++++
 .../patch-cmake_modules_DunePythonVirtualenv.cmake | 24 +++++++
 math/dune-common/files/patch-doc_CMakeLists.txt    | 11 ++-
 .../files/patch-doc_comm_CMakeLists.txt            | 10 +++
 .../files/patch-doc_doxygen_CMakeLists.txt         | 13 ++++
 math/dune-common/pkg-plist                         | 80 +++++++++++++++-------
 8 files changed, 134 insertions(+), 43 deletions(-)

diff --git a/math/dune-common/Makefile b/math/dune-common/Makefile
index 111a46bf1c92..8ec6b01e6d3d 100644
--- a/math/dune-common/Makefile
+++ b/math/dune-common/Makefile
@@ -1,11 +1,8 @@
 PORTNAME=	dune-common
 DISTVERSIONPREFIX=	v
-DISTVERSION=	2.8.0
-PORTREVISION=	17
+DISTVERSION=	2.11.0
 CATEGORIES=	math
 
-PATCH_SITES=	https://gitlab.dune-project.org/core/${PORTNAME}/-/commit/
-PATCHFILES+=	d36ce92a18904a3fe69028811c619b4b5a09ef4e.patch:-p1
 
 MAINTAINER=	yuri@FreeBSD.org
 COMMENT=	DUNE framework: Build system, infrastructure and foundation classes
@@ -15,13 +12,13 @@ LICENSE=	GPLv2
 LICENSE_FILE=	${WRKSRC}/LICENSE.md
 
 BUILD_DEPENDS=	metis>0:math/metis \
-		openmpi4>0:net/openmpi4 \
+		openmpi>0:net/openmpi \
 		vc>0:devel/vc # Metis isn't used, see https://gitlab.dune-project.org/core/dune-common/-/issues/306
 LIB_DEPENDS=	libopenblas.so:math/openblas \
 		libtbb.so:devel/onetbb
 
 USES=		cmake compiler:c++17-lang fortran pkgconfig python shebangfix
-SHEBANG_FILES=	bin/dune-ctest bin/setup-dunepy.py bin/dunepackaging.py bin/rmgenerated.py  cmake/scripts/extract_cmake_data.py
+SHEBANG_FILES=	bin/dune-add-spdx bin/dune-ctest bin/dunepackaging.py cmake/scripts/extract_cmake_data.py
 USE_GITLAB=	yes
 USE_LDCONFIG=	yes
 
@@ -29,17 +26,20 @@ GL_SITE=	https://gitlab.dune-project.org
 GL_ACCOUNT=	core
 
 CMAKE_ON=	BUILD_SHARED_LIBS
+CMAKE_OFF=	DUNE_ENABLE_PYTHONBINDINGS
 CMAKE_ARGS=	-DTBB_INCLUDE_DIR=${LOCALBASE}/include -DTBB_LIBRARIES=${LOCALBASE}/lib/libtbb.so
 
+PLIST_SUB+=	DUNE_COMMON_CMAKE_HASH=09f6943203612a8f3df596107fdd4f98
+
 OPTIONS_DEFINE=	DOCS DOXYGEN MANPAGES
 OPTIONS_DEFAULT=	MANPAGES
 OPTIONS_SUB=	yes
 
 DOCS_CMAKE_BOOL=	FREEBSD_INSTALL_DOCS
-DOCS_BUILD_DEPENDS=	latex:print/tex-formats \
-			sphinx-build:textproc/py-sphinx
+DOCS_BUILD_DEPENDS=	sphinx-build:textproc/py-sphinx
 
 DOXYGEN_BUILD_DEPENDS=	doxygen:devel/doxygen
+DOXYGEN_CMAKE_BOOL=	FREEBSD_INSTALL_DOXYGEN
 DOXYGEN_IMPLIES=	DOCS
 
 MANPAGES_CMAKE_BOOL=	FREEBSD_INSTALL_MANPAGES
@@ -47,6 +47,7 @@ MANPAGES_CMAKE_BOOL=	FREEBSD_INSTALL_MANPAGES
 PORTDOCS=	*
 
 post-install:
-	@${RM} ${STAGEDIR}${PREFIX}/share/dune/cmake/scripts/run-in-dune-env.sh.in # https://gitlab.dune-project.org/core/dune-common/-/issues/229
+	@${RM} ${STAGEDIR}${PREFIX}/share/dune/cmake/scripts/run-in-dune-env.sh.in
+	@${RM} ${STAGEDIR}${PREFIX}/share/dune/cmake/scripts/set-dune-pythonpath.sh.in
 
 .include <bsd.port.mk>
diff --git a/math/dune-common/distinfo b/math/dune-common/distinfo
index abfcfc9a407b..059b72c6dab6 100644
--- a/math/dune-common/distinfo
+++ b/math/dune-common/distinfo
@@ -1,5 +1,3 @@
-TIMESTAMP = 1750927049
-SHA256 (dune-common-v2.8.0.tar.bz2) = f4abb10e1cbbfa1835204fc7f44bb3ee50e3108343b5a200254f35a76a5561bd
-SIZE (dune-common-v2.8.0.tar.bz2) = 636924
-SHA256 (d36ce92a18904a3fe69028811c619b4b5a09ef4e.patch) = 32f0b7927ed2b70e9c1d095689064045c7c25f76056e0243c24641ac0cb9aafa
-SIZE (d36ce92a18904a3fe69028811c619b4b5a09ef4e.patch) = 877
+TIMESTAMP = 1774915221
+SHA256 (dune-common-v2.11.0.tar.bz2) = 34fad9cc02db5bb3744c0b951799c0bab7010bd539b308b3689d9a05b20d8e7b
+SIZE (dune-common-v2.11.0.tar.bz2) = 785344
diff --git a/math/dune-common/files/patch-cmake_modules_DuneDoxygen.cmake b/math/dune-common/files/patch-cmake_modules_DuneDoxygen.cmake
new file mode 100644
index 000000000000..8184723b67fe
--- /dev/null
+++ b/math/dune-common/files/patch-cmake_modules_DuneDoxygen.cmake
@@ -0,0 +1,12 @@
+--- cmake/modules/DuneDoxygen.cmake.orig	2026-03-31 05:34:46 UTC
++++ cmake/modules/DuneDoxygen.cmake
+@@ -134,7 +134,7 @@ macro(add_doxygen_target)
+            # Manifest is generated when prefix was set at configuration time, otherwise is skipped
+            LIST(APPEND CMAKE_INSTALL_MANIFEST_FILES ${CMAKE_INSTALL_FULL_DOCDIR}/doxygen/\${_basename})
+          endforeach()
+-         file(INSTALL \${doxygenfiles} DESTINATION ${CMAKE_INSTALL_DOCDIR}/doxygen)
+-         message(STATUS \"Installed doxygen into ${CMAKE_INSTALL_DOCDIR}/doxygen\")")
++         file(INSTALL \${doxygenfiles} DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DOCDIR}/doxygen)
++         message(STATUS \"Installed doxygen into ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DOCDIR}/doxygen\")")
+   endif()
+ endmacro(add_doxygen_target)
diff --git a/math/dune-common/files/patch-cmake_modules_DunePythonVirtualenv.cmake b/math/dune-common/files/patch-cmake_modules_DunePythonVirtualenv.cmake
new file mode 100644
index 000000000000..ec6e5d608fdb
--- /dev/null
+++ b/math/dune-common/files/patch-cmake_modules_DunePythonVirtualenv.cmake
@@ -0,0 +1,24 @@
+--- cmake/modules/DunePythonVirtualenv.cmake.orig	2026-01-09 13:06:10 UTC
++++ cmake/modules/DunePythonVirtualenv.cmake
+@@ -254,14 +254,17 @@ endif()
+ # Also write a small wrapper script 'run-in-dune-env' into the build directory
+ # This is necessary to execute installed python scripts (the bin path of a virtualenv
+ # is *not* in the sys path, so a simple `python scriptname` does not work.
+-if(UNIX)
++# Only needed when python bindings are enabled and the template exists
++if(UNIX AND DUNE_ENABLE_PYTHONBINDINGS)
+   find_package(UnixCommands QUIET)
+   dune_module_path(MODULE dune-common
+                    RESULT scriptdir
+                    SCRIPT_DIR)
+-  configure_file(${scriptdir}/run-in-dune-env.sh.in
+-                 ${CMAKE_BINARY_DIR}/run-in-dune-env
+-                 @ONLY)
++  if(EXISTS "${scriptdir}/run-in-dune-env.sh.in")
++    configure_file(${scriptdir}/run-in-dune-env.sh.in
++                   ${CMAKE_BINARY_DIR}/run-in-dune-env
++                   @ONLY)
++  endif()
+ else()
+   message(WARNING "Writing script 'run-in-dune-env' not implemented on your platform!")
+ endif()
diff --git a/math/dune-common/files/patch-doc_CMakeLists.txt b/math/dune-common/files/patch-doc_CMakeLists.txt
index 80184fe0d3a9..df62e79ebe93 100644
--- a/math/dune-common/files/patch-doc_CMakeLists.txt
+++ b/math/dune-common/files/patch-doc_CMakeLists.txt
@@ -1,8 +1,13 @@
---- doc/CMakeLists.txt.orig	2025-06-26 07:51:35 UTC
+--- doc/CMakeLists.txt.orig	2026-01-09 13:06:10 UTC
 +++ doc/CMakeLists.txt
-@@ -1,5 +1,9 @@
-+if (FREEBSD_INSTALL_DOCS)
+@@ -1,8 +1,14 @@
+ # SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
+ # SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
+ 
++# Always include doxygen subdir so Doxystyle/doxygen-macros are installed
++# (referenced by dune-common-config.cmake via set_and_check)
  add_subdirectory("doxygen")
++if (FREEBSD_INSTALL_DOCS)
  add_subdirectory("buildsystem")
  add_subdirectory("comm")
 +endif()
diff --git a/math/dune-common/files/patch-doc_comm_CMakeLists.txt b/math/dune-common/files/patch-doc_comm_CMakeLists.txt
new file mode 100644
index 000000000000..e2eabd9f21d3
--- /dev/null
+++ b/math/dune-common/files/patch-doc_comm_CMakeLists.txt
@@ -0,0 +1,10 @@
+--- doc/comm/CMakeLists.txt.orig	2026-03-31 13:23:17 UTC
++++ doc/comm/CMakeLists.txt
+@@ -14,6 +14,4 @@ dune_add_latex_document(
+ 
+ dune_add_latex_document(
+   SOURCE communication.tex
+-  FATHER_TARGET doc
+-  BUILD_ON_INSTALL
+-  INSTALL ${CMAKE_INSTALL_DOCDIR}/comm)
++  FATHER_TARGET doc)
diff --git a/math/dune-common/files/patch-doc_doxygen_CMakeLists.txt b/math/dune-common/files/patch-doc_doxygen_CMakeLists.txt
new file mode 100644
index 000000000000..f98853836e79
--- /dev/null
+++ b/math/dune-common/files/patch-doc_doxygen_CMakeLists.txt
@@ -0,0 +1,13 @@
+--- doc/doxygen/CMakeLists.txt.orig	2026-01-09 13:06:10 UTC
++++ doc/doxygen/CMakeLists.txt
+@@ -2,7 +2,9 @@
+ # SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
+ 
+ # create Doxyfile.in and Doxyfile
+-add_doxygen_target()
++if (FREEBSD_INSTALL_DOXYGEN)
++  add_doxygen_target()
++endif()
+ 
+ install(
+   FILES
diff --git a/math/dune-common/pkg-plist b/math/dune-common/pkg-plist
index 811b0d1eb5d1..ab58c5aa2336 100644
--- a/math/dune-common/pkg-plist
+++ b/math/dune-common/pkg-plist
@@ -1,13 +1,12 @@
+bin/dune-add-spdx
 bin/dune-ctest
 bin/dune-git-whitespace-hook
 bin/dunecontrol
 bin/dunepackaging.py
 bin/duneproject
-bin/rmgenerated.py
-bin/setup-dunepy.py
+include/dune-common-config.hh
 include/dune/common/alignedallocator.hh
 include/dune/common/arraylist.hh
-include/dune/common/assertandreturn.hh
 include/dune/common/bartonnackmanifcheck.hh
 include/dune/common/bigunsignedint.hh
 include/dune/common/binaryfunctions.hh
@@ -15,7 +14,12 @@ include/dune/common/bitsetvector.hh
 include/dune/common/boundschecking.hh
 include/dune/common/classname.hh
 include/dune/common/concept.hh
+include/dune/common/concepts.hh
+include/dune/common/concepts/container.hh
+include/dune/common/concepts/hashable.hh
+include/dune/common/concepts/number.hh
 include/dune/common/conditional.hh
+include/dune/common/copyableoptional.hh
 include/dune/common/debugalign.hh
 include/dune/common/debugallocator.hh
 include/dune/common/debugstream.hh
@@ -35,28 +39,29 @@ include/dune/common/float_cmp.cc
 include/dune/common/float_cmp.hh
 include/dune/common/fmatrix.hh
 include/dune/common/fmatrixev.hh
+include/dune/common/forceinline.hh
 include/dune/common/ftraits.hh
-include/dune/common/function.hh
 include/dune/common/fvector.hh
-include/dune/common/gcd.hh
 include/dune/common/genericiterator.hh
 include/dune/common/gmpfield.hh
 include/dune/common/hash.hh
+include/dune/common/hybridmultiindex.hh
 include/dune/common/hybridutilities.hh
 include/dune/common/indent.hh
+include/dune/common/indexediterator.hh
 include/dune/common/indices.hh
+include/dune/common/integersequence.hh
 include/dune/common/interfaces.hh
 include/dune/common/ios_state.hh
 include/dune/common/iteratorfacades.hh
 include/dune/common/iteratorrange.hh
-include/dune/common/keywords.hh
-include/dune/common/lcm.hh
 include/dune/common/lru.hh
 include/dune/common/mallocallocator.hh
 include/dune/common/math.hh
+include/dune/common/matrixconcepts.hh
 include/dune/common/matvectraits.hh
+include/dune/common/metis.hh
 include/dune/common/overloadset.hh
-include/dune/common/parallel/collectivecommunication.hh
 include/dune/common/parallel/communication.hh
 include/dune/common/parallel/communicator.hh
 include/dune/common/parallel/future.hh
@@ -64,7 +69,6 @@ include/dune/common/parallel/indexset.hh
 include/dune/common/parallel/indicessyncer.hh
 include/dune/common/parallel/interface.hh
 include/dune/common/parallel/localindex.hh
-include/dune/common/parallel/mpicollectivecommunication.hh
 include/dune/common/parallel/mpicommunication.hh
 include/dune/common/parallel/mpidata.hh
 include/dune/common/parallel/mpifuture.hh
@@ -72,6 +76,7 @@ include/dune/common/parallel/mpiguard.hh
 include/dune/common/parallel/mpihelper.hh
 include/dune/common/parallel/mpipack.hh
 include/dune/common/parallel/mpitraits.hh
+include/dune/common/parallel/parmetis.hh
 include/dune/common/parallel/plocalindex.hh
 include/dune/common/parallel/remoteindices.hh
 include/dune/common/parallel/selection.hh
@@ -81,13 +86,13 @@ include/dune/common/parametertree.hh
 include/dune/common/parametertreeparser.hh
 include/dune/common/path.hh
 include/dune/common/poolallocator.hh
-include/dune/common/power.hh
 include/dune/common/precision.hh
 include/dune/common/promotiontraits.hh
 include/dune/common/propertymap.hh
 include/dune/common/proxymemberaccess.hh
 include/dune/common/quadmath.hh
 include/dune/common/rangeutilities.hh
+include/dune/common/referencehelper.hh
 include/dune/common/reservedvector.hh
 include/dune/common/scalarmatrixview.hh
 include/dune/common/scalarvectorview.hh
@@ -104,13 +109,25 @@ include/dune/common/simd/test.hh
 include/dune/common/simd/vc.hh
 include/dune/common/singleton.hh
 include/dune/common/sllist.hh
-include/dune/common/std/apply.hh
+include/dune/common/std/algorithm.hh
+include/dune/common/std/assume.hh
+include/dune/common/std/cmath.hh
+include/dune/common/std/compare.hh
+include/dune/common/std/default_accessor.hh
+include/dune/common/std/extents.hh
 include/dune/common/std/functional.hh
-include/dune/common/std/make_array.hh
-include/dune/common/std/optional.hh
+include/dune/common/std/impl/containerconstructiontraits.hh
+include/dune/common/std/impl/fwd_layouts.hh
+include/dune/common/std/iterator.hh
+include/dune/common/std/layout_left.hh
+include/dune/common/std/layout_right.hh
+include/dune/common/std/layout_stride.hh
+include/dune/common/std/mdarray.hh
+include/dune/common/std/mdspan.hh
+include/dune/common/std/memory.hh
+include/dune/common/std/no_unique_address.hh
+include/dune/common/std/span.hh
 include/dune/common/std/type_traits.hh
-include/dune/common/std/utility.hh
-include/dune/common/std/variant.hh
 include/dune/common/stdstreams.hh
 include/dune/common/stdthread.hh
 include/dune/common/streamoperators.hh
@@ -121,12 +138,16 @@ include/dune/common/test/collectorstream.hh
 include/dune/common/test/iteratortest.hh
 include/dune/common/test/testsuite.hh
 include/dune/common/timer.hh
-include/dune/common/to_unique_ptr.hh
 include/dune/common/transpose.hh
 include/dune/common/tupleutility.hh
 include/dune/common/tuplevector.hh
 include/dune/common/typelist.hh
 include/dune/common/typetraits.hh
+include/dune/common/typetree/childaccess.hh
+include/dune/common/typetree/nodeconcepts.hh
+include/dune/common/typetree/traversal.hh
+include/dune/common/typetree/treecontainer.hh
+include/dune/common/typetree/treepath.hh
 include/dune/common/typeutilities.hh
 include/dune/common/unused.hh
 include/dune/common/vc.hh
@@ -134,17 +155,17 @@ include/dune/common/version.hh
 include/dune/common/visibility.hh
 lib/cmake/dune-common/dune-common-config-version.cmake
 lib/cmake/dune-common/dune-common-config.cmake
-lib/cmake/dune-common/dune-common-targets-%%CMAKE_BUILD_TYPE%%.cmake
+lib/cmake/dune-common/dune-common-scoped-targets-%%DUNE_COMMON_CMAKE_HASH%%-release.cmake
+lib/cmake/dune-common/dune-common-scoped-targets-%%DUNE_COMMON_CMAKE_HASH%%.cmake
 lib/cmake/dune-common/dune-common-targets.cmake
 lib/dunecontrol/dune-common/dune.module
 lib/dunemodules.lib
 lib/libdunecommon.so
 libdata/pkgconfig/dune-common.pc
-%%MANPAGES%%share/man/man1/dunecontrol.1.gz
 share/bash-completion/completions/dunecontrol
 %%DATADIR%%/config.h.cmake
-%%DOCS%%%%DATADIR%%/doc/doxygen/Doxystyle
-%%DOCS%%%%DATADIR%%/doc/doxygen/doxygen-macros
+%%DATADIR%%/doc/doxygen/Doxystyle
+%%DATADIR%%/doc/doxygen/doxygen-macros
 share/dune/cmake/modules/AddBLASLapackFlags.cmake
 share/dune/cmake/modules/AddGMPFlags.cmake
 share/dune/cmake/modules/AddMETISFlags.cmake
@@ -158,30 +179,34 @@ share/dune/cmake/modules/AddThreadsFlags.cmake
 share/dune/cmake/modules/AddVcFlags.cmake
 share/dune/cmake/modules/CMakeBuiltinFunctionsDocumentation.cmake
 share/dune/cmake/modules/CheckCXXFeatures.cmake
+share/dune/cmake/modules/DuneAddLibrary.cmake
 share/dune/cmake/modules/DuneAddPybind11Module.cmake
-share/dune/cmake/modules/DuneCMakeCompat.cmake
 share/dune/cmake/modules/DuneCommonMacros.cmake
-share/dune/cmake/modules/DuneCxaDemangle.cmake
+share/dune/cmake/modules/DuneDefaultIncludeDirectories.cmake
 share/dune/cmake/modules/DuneDoc.cmake
 share/dune/cmake/modules/DuneDoxygen.cmake
 share/dune/cmake/modules/DuneEnableAllPackages.cmake
 share/dune/cmake/modules/DuneExecuteProcess.cmake
 share/dune/cmake/modules/DuneInstance.cmake
-share/dune/cmake/modules/DuneMPI.cmake
 share/dune/cmake/modules/DuneMacros.cmake
+share/dune/cmake/modules/DuneModuleDependencies.cmake
+share/dune/cmake/modules/DuneModuleInformation.cmake
 share/dune/cmake/modules/DunePathHelper.cmake
 share/dune/cmake/modules/DunePkgConfig.cmake
+share/dune/cmake/modules/DunePolicy.cmake
+share/dune/cmake/modules/DuneProject.cmake
 share/dune/cmake/modules/DunePythonCommonMacros.cmake
 share/dune/cmake/modules/DunePythonFindPackage.cmake
 share/dune/cmake/modules/DunePythonInstallPackage.cmake
-share/dune/cmake/modules/DunePythonMacros.cmake
 share/dune/cmake/modules/DunePythonTestCommand.cmake
 share/dune/cmake/modules/DunePythonVirtualenv.cmake
+share/dune/cmake/modules/DuneReplaceProperties.cmake
 share/dune/cmake/modules/DuneSphinxCMakeDoc.cmake
 share/dune/cmake/modules/DuneSphinxDoc.cmake
 share/dune/cmake/modules/DuneStreams.cmake
 share/dune/cmake/modules/DuneSymlinkOrCopy.cmake
 share/dune/cmake/modules/DuneTestMacros.cmake
+share/dune/cmake/modules/DuneUtilities.cmake
 share/dune/cmake/modules/FindGMP.cmake
 share/dune/cmake/modules/FindInkscape.cmake
 share/dune/cmake/modules/FindLatexMk.cmake
@@ -204,12 +229,15 @@ share/dune/cmake/scripts/CreateDoxyFile.cmake
 share/dune/cmake/scripts/FinalizeHeadercheck.cmake
 share/dune/cmake/scripts/InstallFile.cmake
 share/dune/cmake/scripts/RunDoxygen.cmake
+share/dune/cmake/scripts/WritePythonCMakeMetadata.cmake
+share/dune/cmake/scripts/checkvenvconf.py
 share/dune/cmake/scripts/conf.py.in
-share/dune/cmake/scripts/envdetect.py
 share/dune/cmake/scripts/extract_cmake_data.py
 share/dune/cmake/scripts/index.rst.in
 share/dune/cmake/scripts/main77.cc.in
 share/dune/cmake/scripts/module_library.cc.in
 share/dune/cmake/scripts/pyversion.py
+share/dune/cmake/scripts/setup.py.in
 share/dune/cmake/scripts/sphinx_cmake_dune.py
-%%PORTDOCS%%@dir %%DOCSDIR%%/comm
+share/dune/cmake/scripts/venvpath.py
+%%MANPAGES%%share/man/man1/dunecontrol.1.gz


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69cc02fa.42fa1.68f52d88>