aboutsummaryrefslogtreecommitdiff
path: root/Mk/Scripts
Commit message (Collapse)AuthorAgeFilesLines
* Mk/Scripts/do-users-groups.sh: Make users and groups creation fail-fastMichael Osipov2024-05-031-3/+3
| | | | | | | | | | Fail fast when pw(8) fails to create a user or a group. Especially when it is not the last command in the pre-install script then the exit code will be 0 and the failure will go unnoticed. PR: 267384 Approved by: jrm (mentor) Differential Revision: https://reviews.freebsd.org/D42719
* Mk/Scripts: Fix qa for manprefixMuhammad Moinur Rahman2024-04-121-5/+2
| | | | | | | As man pages have been moved PREFIX/share/man adjust the qa check. Reported by: eduardo Approved by: portmgr (blanket)
* Mk/Scripts/do-users-groups.sh: Make message endings consistent (cleanup)Michael Osipov2024-04-101-11/+11
| | | | | Approved by: jrm (mentor), otis (mentor), rene (portmgr) Differential Revision: https://reviews.freebsd.org/D44694
* Mk/Scripts/do-depends.sh: Avoid make -D flagTijl Coosemans2024-03-061-2/+2
| | | | | | | | | | | | | | | | Both FreeBSD make and GNU make pass command line flags to sub-makes through the MAKEFLAGS environment variable, but the flags aren't compatible and GNU make 4.4 exits with an error when it encounters flags it doesn't understand, e.g. -D. Avoid using the flag for now until ports run gmake with SETENVI. This fixes the case where a port is built using make directly and it recurses to build a dependency that uses gmake. Poudriere does not use this feature of the ports tree to build dependencies so it's not affected. PR: 272216, 277492
* Mk/Scripts: Add qa check for man pagesMuhammad Moinur Rahman2024-02-291-1/+12
| | | | | | | | | | | | portmgr@ has been actively working on moving man pages from ${PREFIX}/man to ${PREFIX}/share/man. Majority of the ports belonging to non-committers or aliases has been migrated to ${PREFIX}/share/man. There are still around 1000+ ports remaining mainly from the committers. portmgr@ has planned to make the hard change after the split of 2024Q3 after which ports that installs man pages in ${PREFIX}/man will no longer build or will be BROKEN. Approved by: portmgr
* Features/debuginfo.mk: Automatically generate a subpackage with debugging info.Gleb Popov2024-02-032-5/+14
| | | | | | | Differential Revision: https://reviews.freebsd.org/D43515 Tested by: flo Approved by: portmgr, emaste
* Scripts/qa.sh: fine tune USES=ssl recommendationFernando Apesteguía2024-01-201-4/+8
| | | | | | | | | Try to avoid the "you need USES=ssl" in ports that provide a libssl.so or libcrypto.so libraries themselves like security/openssl or security/libressl. PR: 270035 Approved by: portmgr (mat@) Differential Revision: https://reviews.freebsd.org/D41973
* component: add SUBPACKAGESLuca Pizzamiglio2024-01-013-6/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit add SUBPACKAGES support to the framework. Fix users of _LICENSE_DIR Fix multi/dual license Add annotation to packages about being a subpkg Make do-depends aware of the subpackages Add PKGBASE.subpkg variable Fix actual-package-depends target Fix dependencies in sub-packages Implement LICENSE support Fix PLIST_FILES.subpkg Make DESCR.subpkg warning message shorter Add SUBPACKES to the list of OPTIONS_HELPERS Fix _strip_perms Simplify METADIR as in the original patch Fix _PLIST Fix the case when there are no subpackages Fix typo Fix _PKGDIR initialization Fix PLIST Fix typo in RE Fix METADIR Fix type in PKGFILE Fix [build|run]-depends-list targets Initial import of the subpackage framework This import is based on https://reviews.freebsd.org/D16457 PR: 275735 Differential Revision: https://reviews.freebsd.org/D40549
* www/kf5-kdewebkit: Remove expired portMuhammad Moinur Rahman2023-12-311-8/+7
| | | | 2023-12-31 www/kf5-kdewebkit: Depends on deprecated www/qt5-webkit
* dialog: force UTF-8 localeBaptiste Daroussin2023-10-111-2/+2
| | | | | | | On some terminal, namely "putty" and "linux", the unicode capability are not properly exposed, resulting in a not so nice UI, forcing the env to be unicode friendly with executing the DIDALOG commnands make the output nice in those environements
* config: switch from dialog4ports to portconfigBaptiste Daroussin2023-10-101-2/+2
| | | | | | | | | | | | dialog4ports is using libdialog which is being decommissioned from base replaced by bsddialog. We cannot switch to depending on devel/cdialog because it build depends on too many things, on the other hand the author of bsddialog made portconfig as a drop-in replacement for dialog4ports, it only build depends on devel/bsddialog (we use the version in port to be sure to have the right version on all supported versions of the ports tree) Reported by: Herbert J. Skuhra" <herbert@gojira.at>
* Mk/Scripts/cargo-crates-git-configure.awk: Generate the patch.crates-io ↵Mikael Urankar2023-10-081-7/+11
| | | | | | | | | | | | section after parsing all the Cargo.toml files If we have multiple Cargo.toml files with the same crates in the [patch.crates-io] section we will end up with crates defined mutiple times and cargo will refuse to proceed. Write this section after parsing all the Cargo.toml files. PR: 273280 Reviewed by: tobik
* cargo.mk: Strip vV from GitHub tags only when followed by a digitTobias Kortkamp2023-10-021-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes the following in games/veloren-weekly when iced crates have a tag similar to veloren-winit-0.28 $ cd games/veloren-weekly $ make cargo-crates-merge $ make [...] ===> Configuring for veloren-weekly-s20230830 ===> Cargo config: find: /usr/ports/games/veloren-weekly/work/egui_winit_platform-eloren-winit-0.28: No such file or directory find: /usr/ports/games/veloren-weekly/work/iced-eloren-winit-0.28: No such file or directory find: /usr/ports/games/veloren-weekly/work/iced-eloren-winit-0.28: No such file or directory find: /usr/ports/games/veloren-weekly/work/iced-eloren-winit-0.28: No such file or directory find: /usr/ports/games/veloren-weekly/work/iced-eloren-winit-0.28: No such file or directory find: /usr/ports/games/veloren-weekly/work/iced-eloren-winit-0.28: No such file or directory find: /usr/ports/games/veloren-weekly/work/iced-eloren-winit-0.28: No such file or directory [...] [patch.'https://gitlab.com/Imbris/keyboard-keynames.git'] keyboard-keynames = { path = '/usr/ports/games/veloren-weekly/work/keyboard-keynames-veloren-winit-0.28-fca4bbdfa51bf054b155a455935b3792975c989d' } [...] [patch.'https://github.com/Imberflur/egui_winit_platform.git'] egui_winit_platform = { path = '/usr/ports/games/veloren-weekly/work/egui_winit_platform-eloren-winit-0.28' } [...] [patch.'https://github.com/Imberflur/iced'] iced_core = { path = '/usr/ports/games/veloren-weekly/work/iced-eloren-winit-0.28' } iced_futures = { path = '/usr/ports/games/veloren-weekly/work/iced-eloren-winit-0.28' } iced_graphics = { path = '/usr/ports/games/veloren-weekly/work/iced-eloren-winit-0.28' } iced_native = { path = '/usr/ports/games/veloren-weekly/work/iced-eloren-winit-0.28' } iced_style = { path = '/usr/ports/games/veloren-weekly/work/iced-eloren-winit-0.28' } iced_winit = { path = '/usr/ports/games/veloren-weekly/work/iced-eloren-winit-0.28' } [...] ===> Updating Cargo.lock error: failed to load source for dependency `iced_core` Caused by: Unable to update /usr/ports/games/veloren-weekly/work/iced-eloren-winit-0.28 Caused by: failed to read `/usr/ports/games/veloren-weekly/work/iced-eloren-winit-0.28/Cargo.toml` Caused by: No such file or directory (os error 2) *** Error code 101 Stop. make[1]: stopped in /usr/ports/games/veloren-weekly PR: 273468 Reported by: jbeich
* Mk/Scripts/qa.sh: Fix typoPo-Chuan Hsieh2023-09-221-1/+1
| | | | Approved by: portmgr (blanket)
* sanity: warn about unnused LIB_DEPENDS entriesTobias C. Berner2023-09-121-1/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | `stage-qa` already warns about missing dependencies. However, it does not warn about possibly unneeded ones. This change tries to address this, by simply walking the list of linked against shared libraries and then matching the entries of LIB_DEPENDS against them. Note: this may lead to false positives -- as always, user your brain, and don't rely on output of static tools alone. Possible output might look like: [...] ====> Running Q/A tests (stage-qa) Warning: you might not need LIB_DEPENDS on libqgpgme.so Warning: you might not need LIB_DEPENDS on libintl.so Warning: you might not need LIB_DEPENDS on libKF5IconThemes.so Warning: you might not need LIB_DEPENDS on libqca-qt5.so Warning: you might not need LIB_DEPENDS on libQt5Test.so [...] Note, that in this case all are false positives. Differential Revision: https://reviews.freebsd.org/D27304
* Mk: depulicate WWW informationBaptiste Daroussin2023-08-211-9/+1
| | | | | | | | | | | | Stop duplication the WWW informations within the packages Since september 2022 the WWW lines has been moved from pkg-descr to Makefile, however the ports tree continued to push this info at the end of pkg-descr automatically, which is a duplicated information. Differential Revision: https://reviews.freebsd.org/D41523 Reviewed by: mat
* devel/llvm: recommend USES=llvm for stage-qaJan Beich2023-08-101-1/+1
|
* www/py-django: drop unused stage-qa check after ff89f3f090b3Jan Beich2023-08-101-3/+0
| | | | Depending on non-existent ports is already illegal.
* lang/julia: allow consumers after fed755e222a5Jan Beich2023-08-101-3/+0
| | | | Only one Julia version is currently supported, so it's not a meta port.
* lang/mono: convert to a meta port after 6c225bcc570eJan Beich2023-08-101-0/+3
| | | | | | | - Removing everything in favor of RUN_DEPENDS - Add QA check to prevent future consumers PR: 251795
* framework: Fix fetch-url-list and fetch-urlall-listMateusz Piotrowski2023-07-121-12/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The fetch-url-list and fetch-urlall-list targets are meant to produce a list of URLs from which a port fetches its distfiles and patches. Currently, those targets were not working as expected as they print parts of the output meant for other targets like the fetch-list target. For example: mateusz.piotrowski@server /ports/x11-servers/xwayland-devel$ make fetch-urlall-list [...] mkdir -p "xorg" && -o xorg/proto-xorgproto-824001c947cb1962209c6a8f2c63c2637877220d_GL0.tar.gz [...] This patch prevents do-fetch.sh from printing the "mkdir" line and the "-o" line. While here: - Remove the outdated comment about escaping. There is no excessive escaping happening there anymore. - Indent cases in the case statement to match the style of the rest of the file. Reviewed by: pizzamig Approved by: portmgr (pizzamig) Sponsored by: Klara Inc. Differential Revision: https://reviews.freebsd.org/D40808
* Mk/Scripts: Fix ports depends-list.shAndrew "RhodiumToad" Gierth2023-06-131-3/+3
| | | | | | | | | | | | | | | | depends-list.sh fails in two ways: one is a simple quoting bug which causes empty FLAVOR variables to be propagated; the other is that de-duplication is being done without regard for flavors. The upshot of these is that where a port depends on a specific flavor (first bug) or on multiple flavors (second bug, usually caused by build dependencies) of another port, the constructed dependency list is incomplete, and so -recursive targets do not do all the required work. (This is especially annoying for fetch-recursive.) Reviewed by: portmgr@FreeBSD.org PR: 269982 Differential Revision: https://reviews.freebsd.org/D40491
* Mk/Scripts: Add quotes to $0 in the stripped() function in qa.shYuri Victorovich2023-06-051-1/+1
| | | | | | | | This is a followup to the previous patch that fixed the bug with missing unstripped file suggestions. PR: 270398 Suggested by: mat@
* Mk/Scripts: Fix the 'stripped' check from 'make check-plist' to report all ↵Yuri Victorovich2023-06-021-1/+1
| | | | | | | | | | | | | | | | | | | unstripped files Prior to this patch, the 'stripped' check always skipped the first unstripped file. It uses the "find [...] -exec sh -c 'readelf -S -- /dev/null $0 "$@" || :' -- {} +" command. When arguments are passed to shell like this: "sh -c 'script' arg1 arg2 arg3" - $@ within the script is assigned to 'arg2 arg3', and $0 is assigned to arg1. This is a quirk in how shells handle arguments in case when the script is passed using -c. This patch adds $0 to account for the first passed file. PR: 270398 Approved by: portmgr-lurkers (garga)
* strip_RECORD.py: move to Mk/ScriptsCharlie Li2023-03-091-0/+46
| | | | Requested by: mat
* x11/budgie: + Budgie desktop environment.Olivier Duchateau2023-03-041-0/+1
| | | | | | | | | | | | | This is import of complete Budgie desktop, it contains: - Uses 'budgie.mk' framework - Add virtual category (budgie) in `Mk/bsd.port.mk` - Meta-port `x11-wm/budgie` - New icon theme `x11-themes/tela-icon-theme` Reviewed by: rene, tcberner, lbartoletti, arrowd Differential Revision: https://reviews.freebsd.org/D37224
* Mk/Scripts/makesum.sh: Fix for distinfo files with nothing but a TIMESTAMPTijl Coosemans2022-12-251-1/+1
| | | | PR: 267904
* Mk/Scripts: Fix potential error creating .metadir/+DESCBryan Drewery2022-12-141-7/+9
| | | | | | | | | | In some builds it could be possible that pkg-descr is not writable. We could either install -m 0644 the file over or just let sh create it. This change also opens the destination file only once now. Fixes: ddd0e820c
* Uses/cargo: Fix invalid WRKSRC for crates fetched from GitLab with tagTobias Kortkamp2022-10-081-2/+9
| | | | | | | | | | | | | | | | | | When using tags the archive fetched from GitLab has the corresponding commit hash appended to the directory root too. snui@git+https://gitlab.com/snakedye/snui.git?tag=v0.1.4\#83873f1e148a9c84471c10f166c9a945a44d3e64 would result in WRKSRC_crate_snui= ${WRKDIR}/snui-v0.1.4 but it must be WRKSRC_crate_snui= ${WRKDIR}/snui-v0.1.4-83873f1e148a9c84471c10f166c9a945a44d3e64 PR: 266724 Reported by: jbeich
* Mk/bsd.port.mk: support multiple URLs in WWWStefan Eßer2022-09-211-2/+4
| | | | | | | | | | | | | | | | | | | The WWW macro was supposewd to hold only one URL pointing to the most useful starting point for a user searching for additional information, configuration examples, etc. Some port maintainers have set the WWW macro to a list of URLs, breaking assumptions by scripts and tools in the ports system and of external users of the ports system. This change allows WWW to hold a list of URLs by only considering the first list element in places where only a single URL is supported. This mirrors the previous behavior of only using the first line tagged with "WWW: " in the pkg-descr file. Approved by: portmgr (tcberner) Differential Revision: https://reviews.freebsd.org/D36558
* Mk/Scripts: protect URL string by enclosing it quotesStefan Eßer2022-09-091-1/+1
| | | | | | | | | | | The format of the manifest file does not allow commas in values. Since URLs may include commas, they need to be protected against interpretation of these commas as field separators. This update unbreaks the package generation for ports that have a comma in the URL. Approved by: portmgr (implcit)
* Mk/bsd.ports.mk: Add suppport for WWW in MakefilesStefan Eßer2022-09-071-0/+4
| | | | | | | | | | | | | | | | | | | | | Expect the project website or other relevant URL of a port to be specified in a WWW macro in its Makefile. This information used to be available in WWW: lines at the end of each port's pkg-descr file. By moving it into the Makefile, this value is easier to access, verify, and maintain. A WWW: line is added to the "desc" element of package manifests based on the WWW macro value by the create-manifest.sh script. This restores the previous contents of this line in the manifest (as e.g. expected by the Freshports website). The ports-mgmt/portlint port has been updated in commit 9800743f0 (version 2.19.13) to support the planned introduction of WWW in port Makefiles. Approved by: portmgr (tcberner) Differential Revision: https://reviews.freebsd.org/D36434
* Mk/Scripts/qa.sh: Bogus 'xx doesn't have a SONAME' messages are printed by ↵Yuri Victorovich2022-07-091-2/+2
| | | | | | | | | | | | | | stage-qa for some shared libraries Reason: 'grep -q SONAME' ends before it drains the pipe, pipe fails when the remaining output is too long, and 'set -o pipefail' causes the whole command to fail when it is supposed to succeed. Remedy: Please apply the attached patch fix-SONAME.patch, or alternatively remove 'set -o pipefail' from qa.sh PR: 259992 Approved by: tcberner@ (as portmgr)
* */*: Introduce versioned Go portsDmitri Goutnik2022-06-061-0/+3
| | | | | | | | | | | | | - Mk/Uses/go.mk: add support for selecting Go port version in USES=go; - Mk/bsd.default-versions.mk: add GO_DEFAULT; - convert lang/go-devel to the master and lang/go{117,118} to slave ports; - add lang/go meta-port that provides go and gofmt symlinks to the current default version. PR: 264336 Reviewed by: ygy jwb yuri mikael drtr0jan@yandex.ru decke mat Differential Revision: https://reviews.freebsd.org/D35346
* KDE: Update KDE Gear to 22.04Tobias C. Berner2022-04-211-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Thursday, 21 April 2022 Welcome to KDE Gear ⚙️ 22.04! Skip to What’s New KDE Gear ⚙️ 22.04 brings you all the updates added to a long list of KDE apps over the last four months. KDE programs allow you to work, create and play without having to submit yourself to extortionate licenses and intrusive advertising, or surrender your privacy to unscrupulous corporations. Below you will discover a selection of the changes added in the last four months to software designed to make your life better. But remember, there is much, much more: games, social media apps, utilities for communicating, developing and creating stuff… All these things have been worked on to give you more stability and boost your productivity. If you want to see a full list of everything we have done, check out the complete changelog. WARNING: There’s a lot! All the details can be found here: https://kde.org/announcements/gear/22.04.0/
* devel/glib: convert gio modules and glib schemas to triggersBaptiste Daroussin2022-03-181-3/+0
| | | | | | | | | Use trigger to compile glib schemas, and generate gio modules cache PR: 262567 Reviewed by: tcberner Exp-run by: antoine Differential Revision: https://reviews.freebsd.org/D34564
* devel/ORBit2: remove gnome2 libraryBaptiste Daroussin2022-03-151-1/+0
|
* devel/ruby-gems: Update to 3.3.7Dan Langille2022-02-201-1/+1
| | | | | | | | | | | | | | | | | | | | These are fixes Ruby 3.0 Changes were compiled against all dependencies of devel/ruby-gems and they all built cleanly. There are five known build failures, all prexisting: * devel/rubygem-xdg5: requires Ruby 3.0 * devel/rubygem-xdg: requires Ruby 3.1 * graphics/rubygem-objectdetect: port explicitly marked broken * mail/rubygem-tmail: port explicitly marked broken * science/cdcl: marked broken, unfetchable Plus, science/rubygem-ruby-dcl gets skipped because of science/cdcl PR: 258108 Approved by: ruby (zi@)
* framework: Add new USES 'magick' for graphics/ImageMagick*Tobias C. Berner2021-12-111-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | A new USES has been added to depend on ImageMagick. USES=magick adds a LIB_DEPENDS on graphics/ImageMagick${IMAGEMAGICK_DEFAULT}. If a specific version is required, use for example USES=magick:6 resp. USES=magick:7 If only a build, run or test is required, use for example USES=magick:build resp. USES=magick:6,build,test If a dependency on the nox11 flavor is required, use for example USES=magick:nox11 resp. USES=magick:7,nox11,run,test See magick.mk for more details on the available flags. The tree has been completely converted to make use of this. Approved by: bapt Differential Revision: https://reviews.freebsd.org/D32754
* Mk/Scripts/qa.sh: Turn off pipefail when piping to grep -qJoseph Mingrone2021-11-191-0/+4
| | | | | | | | | | | | | | | | | | The pipeline readelf -d "${dep_file}" | grep -q SONAME can fail because grep -q closes the output early resulting sigpipe being sent to readelf. Other possible solutions are to turn off pipefail for the file or remove the -q grep argument. Credit to ashish@ for the detective work to discover the root cause of this. Differential Revision: https://reviews.freebsd.org/D31211 Reviewed by: emaste Approved by: bapt (portmgr) mat (portmgr)
* Uses/cargo: Rework git source support based on patch-in-config sectionsTobias Kortkamp2021-10-254-70/+272
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Git sources from `Cargo.lock` are added to `CARGO_CRATES` through the normal mechanism of `make cargo-crates` by the porter. They are used to populate `MASTER_SITES`, `DISTFILES` with static git-archive(1) tarballs a la `USE_GITHUB`, `USE_GITLAB`. In the configure phase we generate `[patch]` sections in the config file which will cause `cargo update` to auto-update `Cargo.lock` to point to the appropriate extraction directories. Normally `cargo update` would connect to the network to update all Git sources but since rust-1.55.0 our cargo has been patched to skip this when `CARGO_FREEBSD_PORTS_SKIP_GIT_UPDATE` is set in the environment. This replaces the old `CARGO_USE_GITHUB`, `CARGO_USE_GITLAB` hacks where this was done by editing all `Cargo.toml` with sed(1) calls. Additionally, we try to automatically infer the individiual crate sub-directories inside the Git sources based on `package.name` in `Cargo.toml` to remove the need for `CARGO_GIT_SUBDIR`. USES=cargo also now sets `WRKSRC_crate_$name` for each crate to point to the crate extraction directories. PR: 256581 Reviewed by: jbeich
* cleanup: drop support for EOL FreeBSD 11.XRene Ladan2021-09-301-1/+1
| | | | | | | | | | | | | | | | | Search criteria used: - 11.4 - OSREL* - OSVER* - *_FreeBSD_11 Input from: - adridg: devel/qca-legacy - jbeich: _WITH_DPRINTF, _WITH_GETLINE, GNU bfd workarounds - sunpoet: security/p5-*OpenSSL* Reviewed by: doceng, kde, multimedia, perl, python, ruby, rust Differential Revision: https://reviews.freebsd.org/D32008 Test Plan: make index
* Scripts/split-url.awk: Pass result array as parameterTobias Kortkamp2021-09-082-3/+3
|
* Scripts/split-url.awk: Add reverse function to stitch the URL back togetherTobias Kortkamp2021-09-081-0/+32
|
* Scripts/split-url.awk: Split query strings tooTobias Kortkamp2021-09-081-2/+11
| | | | | | Also reset state on function entry otherwise split_url() cannot really be called multiple times since there would be garbage values in the url array from previous calls.
* Scripts/cargo-crates.awk: Move split_url() to separate fileTobias Kortkamp2021-09-072-30/+29
| | | | Also stop leaking local variables
* Mk/Scripts/qa.sh: Add QA for libglvndKevin Bowling2021-08-021-0/+4
| | | | | | Reported by: tcbrener Reviewed by: tcbrener Differential Revision: https://reviews.freebsd.org/D31375
* Mk/: Update the URLs in the comments to the latest locationLi-Wen Hsu2021-07-161-1/+1
| | | | | Reviewed by: rene Differential Revision: https://reviews.freebsd.org/D31152
* Mk/Scripts/smart_makepatch.sh: Force diff to produce the patch file instead ↵Po-Chuan Hsieh2021-07-141-1/+1
| | | | | | | | | | | | | | | | | of "Binary files ... differ" message It helps avoid generating wrong patches, e.g. patch-grpc.gemspec in r567838 [1]. from diff manpage: -a --text Treat all files as ASCII text. Normally diff will simply print "Binary files ... differ" if files contain binary characters. Use of this option forces diff to produce a diff. [1] https://cgit.FreeBSD.org/ports/diff/net/rubygem-grpc130/files/patch-grpc.gemspec?id=073c1c710a0c7254820adab9920c1903ace83fae PR: 257027 Approved by: mat (portmgr)
* Mk/*: Update the link about adopting portsGuangyuan Yang2021-06-201-1/+1
| | | | | Approved by: rene (portmgr), lwhsu (mentor) Differential Revision: https://reviews.freebsd.org/D30744