svn commit: r448132 - in head: Mk devel/qt5 www www/qt5-webengine www/qt5-webengine/files

Raphael Kubo da Costa rakuco at FreeBSD.org
Thu Aug 17 15:56:17 UTC 2017


Author: rakuco
Date: Thu Aug 17 15:56:11 2017
New Revision: 448132
URL: https://svnweb.freebsd.org/changeset/ports/448132

Log:
  New port: www/qt5-webengine.
  
  Qt WebEngine provides functionality for rendering regions of dynamic web
  content. In other words, this is Chromium's Blink web engine and parts of
  Chromium's content layer wrapped by Qt. Qt WebKit is deprecated upstream, and
  WebEngine is the future.
  
  This port has been in the works for a very long time, with contributions by
  myself, tcberner, Adriaan de Groot and Marie Loise Nolden.
  
  Since most of the port is just a large part of Chromium's code base, this means
  sharing some of the pain www/chromium goes through by having to patch a ton of
  files. We cannot share the exact same patches because this version of Qt
  WebEngine is based on an older Chromium release.
  
  I have verified that the port works, but it is possible that many things are
  still wrong or missing, so bug reports are encouraged.
  
  Reviewed by:	Adriaan de Groot <groot at kde.org>, tcberner
  Differential Revision:	https://reviews.freebsd.org/D12063

Added:
  head/www/qt5-webengine/
  head/www/qt5-webengine/Makefile   (contents, props changed)
  head/www/qt5-webengine/distinfo   (contents, props changed)
  head/www/qt5-webengine/files/
  head/www/qt5-webengine/files/freebsd.pri   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_base.gyp   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_base.gypi   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_files_file__path__watcher__kqueue.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_files_file__path__watcher__kqueue.h   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_posix_unix__domain__socket__linux.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_process_memory__stubs.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_process_process__posix.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_threading_platform__thread__linux.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_trace__event_process__memory__dump.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_tracked__objects.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_common.gypi   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_linux_unbundle_libusb.gyp   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_app_content__main__runner.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_browser_browser__main__loop.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_browser_child__process__launcher.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_browser_download_file__metadata__linux.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_browser_frame__host_render__widget__host__view__guest.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_browser_geolocation_location__arbitrator__impl.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_content__browser.gypi   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_content__common.gypi   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_gpu_gpu__child__thread.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_gpu_gpu__main.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_renderer_devtools_v8__sampling__profiler.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_renderer_renderer__main__platform__delegate__linux.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_crypto_nss__util.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_device_usb_usb__context.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_device_usb_usb__service__impl.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_device_usb_usb__service__impl.h   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_gpu_gpu__config.gypi   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_capture_video_file__video__capture__device__factory.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_capture_video_linux_v4l2__capture__delegate.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_capture_video_linux_video__capture__device__linux.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_capture_video_video__capture__device.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_capture_video_video__capture__device.h   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_capture_video_video__capture__device__factory.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_filters_vp9__parser.h   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_media.gyp   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_net_base_address__tracker__linux.h   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_net_base_network__interfaces__posix.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_net_dns_address__sorter__posix.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_net_dns_dns__reloader.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_net_net.gypi   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_ppapi_shared__impl_private_net__address__private__impl.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_skia_skia__chrome.gypi   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_WebKit_Source_bindings_core_v8_V8ScriptRunner.cpp   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_WebKit_Source_core_core.gyp   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_WebKit_Source_platform_blink__platform.gyp   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_WebKit_Source_platform_fonts_FontPlatformData.cpp   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_WebKit_Source_platform_heap_StackFrameDepth.cpp   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_WebKit_Source_web_web.gyp   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_WebKit_Source_wtf_ByteSwap.h   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_ffmpeg_libavutil_mem.c   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_libjingle_libjingle.gyp   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_ots_include_opentype-sanitiser.h   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_base_platform__thread.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_base_taskrunner.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_build_common.gypi   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_modules_rtp__rtcp_source_rtp__utility.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_modules_video__capture_device__info__impl.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_system__wrappers_source_atomic32__posix.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_system__wrappers_source_condition__variable.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_webrtc_voice__engine_voice__engine__defines.h   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_events_event__switches.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_events_event__switches.h   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_ui_gl_gl.gyp   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_src_crankshaft_lithium.cc   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_3rdparty_chromium_v8_src_crankshaft_lithium.h   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_core_core__common.pri   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_core_core__module.pro   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_core_gyp__run.pro   (contents, props changed)
  head/www/qt5-webengine/files/patch-src_core_qtwebengine.gypi   (contents, props changed)
  head/www/qt5-webengine/files/patch-tools-qmake-config.tests-enable-on-FreeBSD   (contents, props changed)
  head/www/qt5-webengine/files/patch-tools_qmake_mkspecs_features_configure.prf   (contents, props changed)
  head/www/qt5-webengine/files/patch-tools_qmake_mkspecs_features_functions.prf   (contents, props changed)
  head/www/qt5-webengine/pkg-plist   (contents, props changed)
Modified:
  head/Mk/bsd.qt.mk
  head/devel/qt5/distinfo
  head/www/Makefile

Modified: head/Mk/bsd.qt.mk
==============================================================================
--- head/Mk/bsd.qt.mk	Thu Aug 17 15:34:18 2017	(r448131)
+++ head/Mk/bsd.qt.mk	Thu Aug 17 15:56:11 2017	(r448132)
@@ -92,8 +92,8 @@ QT_DIST=		3d base canvas3d charts connectivity datavis
 				declarative-render2d gamepad graphicaleffects imageformats \
 				location multimedia quickcontrols quickcontrols2 script scxml \
 				sensors serialbus serialport svg tools translations \
-				virtualkeyboard wayland webchannel websockets x11extras \
-				xmlpatterns
+				virtualkeyboard wayland webchannel webengine \
+				websockets x11extras xmlpatterns
 .		endif
 .  endif
 
@@ -321,7 +321,7 @@ _USE_QT5_ONLY=	3d buildtools canvas3d charts concurren
 				qdbus qdoc qdoc-data qev qml quick quickcontrols \
 				quickcontrols2 scxml sensors serialbus serialport \
 				sql-tds uiplugin uitools virtualkeyboard wayland webchannel \
-				websockets websockets-qml widgets x11extras
+				webengine websockets websockets-qml widgets x11extras
 
 3d_PORT=		graphics/${_QT_RELNAME}-3d
 3d_LIB=		libQt${_QT_LIBVER}3DCore.so
@@ -591,6 +591,9 @@ virtualkeyboard_PATH=	${QT_PLUGINDIR}/platforminputcon
 
 webchannel_PORT=	www/${_QT_RELNAME}-webchannel
 webchannel_LIB=	libQt${_QT_LIBVER}WebChannel.so
+
+webengine_PORT=		www/${_QT_RELNAME}-webengine
+webengine_LIB=	libQt${_QT_LIBVER}WebEngine.so
 
 websockets_PORT=	www/${_QT_RELNAME}-websockets
 websockets_LIB=	libQt${_QT_LIBVER}WebSockets.so

Modified: head/devel/qt5/distinfo
==============================================================================
--- head/devel/qt5/distinfo	Thu Aug 17 15:34:18 2017	(r448131)
+++ head/devel/qt5/distinfo	Thu Aug 17 15:56:11 2017	(r448132)
@@ -51,6 +51,8 @@ SHA256 (KDE/Qt/5.7.1/qtwayland-opensource-src-5.7.1.ta
 SIZE (KDE/Qt/5.7.1/qtwayland-opensource-src-5.7.1.tar.xz) = 291776
 SHA256 (KDE/Qt/5.7.1/qtwebchannel-opensource-src-5.7.1.tar.xz) = 63ab3ac76ff993009cfa978162a764e05b763cacb70d1a862893f8de4492319b
 SIZE (KDE/Qt/5.7.1/qtwebchannel-opensource-src-5.7.1.tar.xz) = 122436
+SHA256 (KDE/Qt/5.7.1/qtwebengine-opensource-src-5.7.1.tar.xz) = 2101883e3d632b50133a14e3bbdc1d4d649e405c9618f2eef1b72a7b821ccc2b
+SIZE (KDE/Qt/5.7.1/qtwebengine-opensource-src-5.7.1.tar.xz) = 163782564
 SHA256 (KDE/Qt/5.7.1/qtwebsockets-opensource-src-5.7.1.tar.xz) = 5c2a75b68e7f2e98530659b33bb08edee83013832dbf99cc5b40afc8a90652d1
 SIZE (KDE/Qt/5.7.1/qtwebsockets-opensource-src-5.7.1.tar.xz) = 193204
 SHA256 (KDE/Qt/5.7.1/qtx11extras-opensource-src-5.7.1.tar.xz) = 5f5a0c2cc66ec01c2f2f31eff32fea26bd0bc03741a5dfd803b13870aa4ce427

Modified: head/www/Makefile
==============================================================================
--- head/www/Makefile	Thu Aug 17 15:34:18 2017	(r448131)
+++ head/www/Makefile	Thu Aug 17 15:56:11 2017	(r448132)
@@ -1864,6 +1864,7 @@
     SUBDIR += qooxdoo
     SUBDIR += qt4-webkit
     SUBDIR += qt5-webchannel
+    SUBDIR += qt5-webengine
     SUBDIR += qt5-webkit
     SUBDIR += qt5-websockets
     SUBDIR += qt5-websockets-qml

Added: head/www/qt5-webengine/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/Makefile	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,105 @@
+# $FreeBSD$
+
+# QtWebEngine itself is a very thin layer of Qt code on top of a large part of
+# Chromium (everything up to the content/ layer). As such, most of the work in
+# this port revolves around taming Chromium and getting it to build on FreeBSD.
+# While it does build at the moment, there are several items that should be
+# investigated or improved:
+# - We are using several stub files, especially in Chromium's base/ and net/
+#   layers. We should look at implementing the missing bits instead.
+# - We are currently not using any sandboxing mechanism.
+# - We are disabling support for features such as WebRTC and printing. We need
+#   to see what it would take to properly support them.
+# - We need to see if more "use_system_<FOO>" flags can be passed.
+# - The process of porting QtWebEngine needs to be documented so we can move to
+#   newer releases more easily.
+
+PORTNAME=	webengine
+DISTVERSION=	${QT5_VERSION}
+CATEGORIES=	www
+PKGNAMEPREFIX=	qt5-
+
+MAINTAINER=	kde at FreeBSD.org
+COMMENT=	Qt 5 library to render web content
+
+BUILD_DEPENDS=	bison:devel/bison \
+		ninja:devel/ninja \
+		python:lang/python \
+		yasm:devel/yasm \
+		${LOCALBASE}/include/linux/videodev2.h:multimedia/v4l_compat
+LIB_DEPENDS=	libdbus-1.so:devel/dbus \
+		libevent.so:devel/libevent \
+		libfontconfig.so:x11-fonts/fontconfig \
+		libfreetype.so:print/freetype2 \
+		libjsoncpp.so:devel/jsoncpp \
+		libnspr4.so:devel/nspr \
+		libnss3.so:security/nss \
+		libopus.so:audio/opus \
+		libpci.so:devel/libpci \
+		libpng.so:graphics/png \
+		libprotobuf.so:devel/protobuf \
+		libsnappy.so:archivers/snappy \
+		libsrtp.so:net/libsrtp \
+		libwebp.so:graphics/webp
+
+OPTIONS_SINGLE=		AUDIO
+OPTIONS_SINGLE_AUDIO=	ALSA PULSEAUDIO
+OPTIONS_DEFAULT=	ALSA
+
+AUDIO_DESC=		Audio backend
+
+ALSA_LIB_DEPENDS=	libasound.so:audio/alsa-lib
+ALSA_QMAKE_ON=		QT_CONFIG+=alsa
+PULSEAUDIO_LIB_DEPENDS=	libpulse.so:audio/pulseaudio
+PULSEAUDIO_QMAKE_ON=	QT_CONFIG+=pulseaudio
+
+# We pass `norecursive' to USES=qmake because src/plugins/plugins.pro checks
+# whether webenginewidgets is available, which fails when qmake processes all
+# .pro files at once.
+USES=		gperf jpeg python:2,build pkgconfig \
+		qmake:norecursive,outsource shebangfix
+USE_GNOME=	glib20 libxml2 libxslt
+USE_QT5=	core designer gui location network qml quick webchannel \
+		widgets buildtools_build qmake_build
+USE_XORG=	scrnsaverproto x11 xcomposite xcursor xext xi xproto \
+		xrandr xrender xscrnsaver xtst
+
+USE_LDCONFIG=	${QT_LIBDIR}
+
+QT_DIST=	${PORTNAME}
+
+QMAKE_ARGS=	WEBENGINE_CONFIG+=use_nss \
+		WEBENGINE_CONFIG+=use_proprietary_codecs \
+		WEBENGINE_CONFIG+=use_system_libevent
+
+# We could just set it to an empty string as well. "all" does not account for
+# dependencies correctly in the generated Makefiles, use the right target here.
+ALL_TARGET=	first
+
+# The build system reads the environment variable $NINJA_PATH to decide whether
+# to boostrap ninja or not (and also to invoke it afterwards). CC and CXX are
+# read by some Chromium code to determine which compiler to invoke when running
+# some configuration tests.
+# Since we use USES=qmake:norecursive, we also need to pass some variables to
+# MAKE_ENV because part of the configuration process happens during the build.
+CONFIGURE_ENV+=	NINJAFLAGS="-j${MAKE_JOBS_NUMBER}" \
+		NINJA_PATH="${LOCALBASE}/bin/ninja"
+MAKE_ENV+=	CC="${CC}" CXX="${CXX}" ${CONFIGURE_ENV}
+
+post-extract:
+# Install FreeBSD's freebsd.pri file.
+	${CP} ${FILESDIR}/freebsd.pri ${WRKSRC}/src/core/config/freebsd.pri
+# Unbundle libusb.
+	${RM} -r ${WRKSRC}/src/3rdparty/chromium/third_party/libusb/src
+	${CP} ${WRKSRC}/src/3rdparty/chromium/build/linux/unbundle/libusb.gyp \
+		${WRKSRC}/src/3rdparty/chromium/third_party/libusb/libusb.gyp
+# Unbundle libxml.
+	${CP} ${WRKSRC}/src/3rdparty/chromium/build/linux/unbundle/libxml.gyp \
+		${WRKSRC}/src/3rdparty/chromium/third_party/libxml/libxml.gyp
+
+post-patch:
+# Too many occurrences to keep in a patch in files/.
+	${REINPLACE_CMD} -e 's,OS == "linux",(OS == "linux" or OS == "freebsd"),g' \
+		${WRKSRC}/src/3rdparty/chromium/third_party/ffmpeg/ffmpeg_generated.gypi
+
+.include <bsd.port.mk>

Added: head/www/qt5-webengine/distinfo
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/distinfo	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1 @@
+TIMESTAMP = 1491910958

Added: head/www/qt5-webengine/files/freebsd.pri
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/freebsd.pri	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,16 @@
+include(desktop_linux.pri)
+
+GYP_CONFIG +=   disable_nacl=1          \
+                enable_basic_printing=0 \
+                enable_printing=0       \
+                enable_webrtc=0         \
+                enable_hidpi=1          \
+                use_dbus=1              \
+                use_pulseaudio=0
+
+# Once the port works better, we can think about readding the diverse `use_system_<foo>`
+# for bundled libraries.
+# For now, only add very few system libraries.
+GYP_CONFIG += use_system_yasm=1 \
+              use_system_libusb=1 \
+              use_system_libcxx=1

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_base.gyp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_base.gyp	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,13 @@
+Disable USE_SYMBOLIZE, it assumes Linux is being used and does things such as
+reading from /proc.
+--- src/3rdparty/chromium/base/base.gyp.orig	2017-04-19 16:31:45 UTC
++++ src/3rdparty/chromium/base/base.gyp
+@@ -46,7 +46,7 @@
+             'xdg_mime',
+           ],
+           'defines': [
+-            'USE_SYMBOLIZE',
++            # 'USE_SYMBOLIZE',
+           ],
+         }, {  # desktop_linux == 0 and chromeos == 0
+             'sources/': [

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_base.gypi
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_base.gypi	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,17 @@
+--- src/3rdparty/chromium/base/base.gypi.orig	2016-11-07 14:46:18 UTC
++++ src/3rdparty/chromium/base/base.gypi
+@@ -1006,9 +1006,14 @@
+               'process/memory_stubs.cc',
+             ],
+             'sources/': [
++              ['exclude', '^debug/proc_maps_linux\\.cc$'],
++              ['exclude', '^files/file_path_watcher_fsevents\\.cc$'],
+               ['exclude', '^files/file_path_watcher_linux\\.cc$'],
+               ['exclude', '^files/file_path_watcher_stub\\.cc$'],
+               ['exclude', '^files/file_util_linux\\.cc$'],
++              ['exclude', '^process/memory_linux\\.cc$'],
++              ['exclude', '^process/process_iterator_linux\\.cc$'],
++              ['exclude', '^process/process_metrics_linux\\.cc$'],
+               ['exclude', '^process/process_linux\\.cc$'],
+               ['exclude', '^sys_info_linux\\.cc$'],
+             ],

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_files_file__path__watcher__kqueue.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_files_file__path__watcher__kqueue.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,13 @@
+--- src/3rdparty/chromium/base/files/file_path_watcher_kqueue.cc.orig	2017-04-19 09:33:16 UTC
++++ src/3rdparty/chromium/base/files/file_path_watcher_kqueue.cc
+@@ -388,4 +388,10 @@ void FilePathWatcherKQueue::CancelOnMess
+   }
+ }
+ 
++// In the upstream version, this method is implemented in
++// file_path_watcher_mac.cc, which we obviously do not use.
++FilePathWatcher::FilePathWatcher() {
++  impl_ = new FilePathWatcherKQueue();
++}
++
+ }  // namespace base

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_files_file__path__watcher__kqueue.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_files_file__path__watcher__kqueue.h	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,14 @@
+--- src/3rdparty/chromium/base/files/file_path_watcher_kqueue.h.orig	2017-04-11 14:08:45 UTC
++++ src/3rdparty/chromium/base/files/file_path_watcher_kqueue.h
+@@ -5,6 +5,11 @@
+ #ifndef BASE_FILES_FILE_PATH_WATCHER_KQUEUE_H_
+ #define BASE_FILES_FILE_PATH_WATCHER_KQUEUE_H_
+ 
++#ifdef __FreeBSD__
++#include <sys/stdint.h>
++#include <sys/types.h>
++#endif
++
+ #include <sys/event.h>
+ #include <vector>
+ 

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_posix_unix__domain__socket__linux.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_posix_unix__domain__socket__linux.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,44 @@
+--- src/3rdparty/chromium/base/posix/unix_domain_socket_linux.cc.orig	2017-04-11 14:08:45 UTC
++++ src/3rdparty/chromium/base/posix/unix_domain_socket_linux.cc
+@@ -21,6 +21,15 @@
+ #include <sys/uio.h>
+ #endif
+ 
++#if defined(__FreeBSD__)
++// Port over Linux ucred structure
++struct ucred {
++  pid_t pid; // process ID of the sending process
++  uid_t uid; // user ID of the sending process
++  gid_t gid; // group ID of the sending process
++};
++#endif
++
+ namespace base {
+ 
+ const size_t UnixDomainSocket::kMaxFileDescriptors = 16;
+@@ -41,7 +50,13 @@ static bool CreateSocketPair(ScopedFD* one, ScopedFD* 
+ // static
+ bool UnixDomainSocket::EnableReceiveProcessId(int fd) {
+   const int enable = 1;
++#if defined(__FreeBSD__)
++  // XXX(rene) do this? :
++  // taken from dbus, Academic Free License 2.1 / GPL 2+
++  return 0; // fake OK
++#else
+   return setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &enable, sizeof(enable)) == 0;
++#endif
+ }
+ #endif  // !defined(OS_NACL_NONSFI)
+ 
+@@ -147,7 +162,11 @@ ssize_t UnixDomainSocket::RecvMsgWithFlags(int fd,
+       // The PNaCl toolchain for Non-SFI binary build does not support
+       // SCM_CREDENTIALS.
+       if (cmsg->cmsg_level == SOL_SOCKET &&
++#if defined(__FreeBSD__)
++          1) {
++#else
+           cmsg->cmsg_type == SCM_CREDENTIALS) {
++#endif
+         DCHECK_EQ(payload_len, sizeof(struct ucred));
+         DCHECK_EQ(pid, -1);
+         pid = reinterpret_cast<struct ucred*>(CMSG_DATA(cmsg))->pid;

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_process_memory__stubs.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_process_memory__stubs.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,15 @@
+Use the definition in memory.cc instead.
+--- src/3rdparty/chromium/base/process/memory_stubs.cc.orig	2017-04-19 16:40:17 UTC
++++ src/3rdparty/chromium/base/process/memory_stubs.cc
+@@ -32,9 +32,11 @@ bool UncheckedMalloc(size_t size, void**
+   return *result != nullptr;
+ }
+ 
++#if !defined(OS_BSD)
+ bool UncheckedCalloc(size_t num_items, size_t size, void** result) {
+   *result = calloc(num_items, size);
+   return *result != nullptr;
+ }
++#endif
+ 
+ }  // namespace base

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_process_process__posix.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_process_process__posix.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,10 @@
+--- src/3rdparty/chromium/base/process/process_posix.cc.orig	2017-04-11 14:08:45 UTC
++++ src/3rdparty/chromium/base/process/process_posix.cc
+@@ -8,6 +8,7 @@
+ #include <stdint.h>
+ #include <sys/resource.h>
+ #include <sys/wait.h>
++#include <signal.h>
+ 
+ #include "base/files/scoped_file.h"
+ #include "base/logging.h"

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_threading_platform__thread__linux.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_threading_platform__thread__linux.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,21 @@
+--- src/3rdparty/chromium/base/threading/platform_thread_linux.cc.orig	2017-04-11 14:08:45 UTC
++++ src/3rdparty/chromium/base/threading/platform_thread_linux.cc
+@@ -17,7 +17,9 @@
+ 
+ #if !defined(OS_NACL)
+ #include <pthread.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/types.h>
+ #include <unistd.h>
+ #endif
+@@ -81,7 +83,7 @@ void PlatformThread::SetName(const std::string& name) 
+   ThreadIdNameManager::GetInstance()->SetName(CurrentId(), name);
+   tracked_objects::ThreadData::InitializeThreadContext(name);
+ 
+-#if !defined(OS_NACL)
++#if !defined(OS_NACL) && !defined(OS_BSD)
+   // On linux we can get the thread names to show up in the debugger by setting
+   // the process name for the LWP.  We don't want to do this for the main
+   // thread because that would rename the process, causing tools like killall

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_trace__event_process__memory__dump.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_trace__event_process__memory__dump.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,29 @@
+--- src/3rdparty/chromium/base/trace_event/process_memory_dump.cc.orig	2016-11-07 14:46:18 UTC
++++ src/3rdparty/chromium/base/trace_event/process_memory_dump.cc
+@@ -52,7 +52,7 @@ size_t ProcessMemoryDump::CountResidentB
+     const size_t page_count = (chunk_size + page_size - 1) / page_size;
+     size_t resident_page_count = 0;
+ 
+-#if defined(OS_MACOSX) || defined(OS_IOS)
++#if defined(OS_MACOSX) || defined(OS_IOS) || defined(OS_BSD)
+     std::vector<char> vec(page_count + 1);
+     // mincore in MAC does not fail with EAGAIN.
+     result = mincore(chunk_start, chunk_size, vec.data());
+@@ -61,7 +61,7 @@ size_t ProcessMemoryDump::CountResidentB
+ 
+     for (size_t i = 0; i < page_count; i++)
+       resident_page_count += vec[i] & MINCORE_INCORE ? 1 : 0;
+-#else   // defined(OS_MACOSX) || defined(OS_IOS)
++#else   // defined(OS_MACOSX) || defined(OS_IOS) || defined(OS_BSD)
+     std::vector<unsigned char> vec(page_count + 1);
+     int error_counter = 0;
+     // HANDLE_EINTR tries for 100 times. So following the same pattern.
+@@ -73,7 +73,7 @@ size_t ProcessMemoryDump::CountResidentB
+ 
+     for (size_t i = 0; i < page_count; i++)
+       resident_page_count += vec[i];
+-#endif  // defined(OS_MACOSX) || defined(OS_IOS)
++#endif  // defined(OS_MACOSX) || defined(OS_IOS) || defined(OS_BSD)
+ 
+     total_resident_size += resident_page_count * page_size;
+     offset += kMaxChunkSize;

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_tracked__objects.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_base_tracked__objects.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,11 @@
+--- src/3rdparty/chromium/base/tracked_objects.cc.orig	2017-04-11 14:08:45 UTC
++++ src/3rdparty/chromium/base/tracked_objects.cc
+@@ -431,7 +431,7 @@ void ThreadData::OnThreadTerminationCleanup() {
+   }
+   // We must NOT do any allocations during this callback.
+   // Using the simple linked lists avoids all allocations.
+-  DCHECK_EQ(this->next_retired_worker_, reinterpret_cast<ThreadData*>(NULL));
++  DCHECK_EQ(this->next_retired_worker_, reinterpret_cast<ThreadData*>(0));
+   this->next_retired_worker_ = first_retired_worker_;
+   first_retired_worker_ = this;
+ }

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_common.gypi
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_common.gypi	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,16 @@
+--- src/3rdparty/chromium/build/common.gypi.orig	2017-04-11 14:08:45 UTC
++++ src/3rdparty/chromium/build/common.gypi
+@@ -4781,6 +4781,13 @@
+         'ldflags': [
+           '-Wl,--no-keep-memory',
+         ],
++        'ldflags!': [
++          '-ldl',
++          '-pie',
++        ],
++        'libraries!': [
++          '-ldl',
++        ],
+       },
+     }],
+     # Android-specific options; note that most are set above with Linux.

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_linux_unbundle_libusb.gyp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_build_linux_unbundle_libusb.gyp	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,20 @@
+--- src/3rdparty/chromium/build/linux/unbundle/libusb.gyp.orig	2017-04-11 14:08:45 UTC
++++ src/3rdparty/chromium/build/linux/unbundle/libusb.gyp
+@@ -18,14 +18,14 @@
+       ],
+       'direct_dependent_settings': {
+         'cflags': [
+-          '<!@(pkg-config --cflags libusb-1.0)',
++          '',
+         ],
+         'link_settings': {
+           'ldflags': [
+-            '<!@(pkg-config --libs-only-L --libs-only-other libusb-1.0)',
++            '-lusb',
+           ],
+           'libraries': [
+-            '<!@(pkg-config --libs-only-l libusb-1.0)',
++            '-lusb',
+           ],
+         },
+       },

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_app_content__main__runner.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_app_content__main__runner.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,30 @@
+We currently do not use the zygote code that Linux does.
+--- src/3rdparty/chromium/content/app/content_main_runner.cc.orig	2017-04-19 16:52:23 UTC
++++ src/3rdparty/chromium/content/app/content_main_runner.cc
+@@ -265,7 +265,7 @@ struct MainFunction {
+   int (*function)(const MainFunctionParams&);
+ };
+ 
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ // On platforms that use the zygote, we have a special subset of
+ // subprocesses that are launched via the zygote.  This function
+ // fills in some process-launching bits around ZygoteMain().
+@@ -314,7 +314,7 @@ int RunZygote(const MainFunctionParams& 
+   NOTREACHED() << "Unknown zygote process type: " << process_type;
+   return 1;
+ }
+-#endif  // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#endif  // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ 
+ #if !defined(OS_IOS)
+ static void RegisterMainThreadFactories() {
+@@ -385,7 +385,7 @@ int RunNamedProcessTypeMain(
+     }
+   }
+ 
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+   // Zygote startup is special -- see RunZygote comments above
+   // for why we don't use ZygoteMain directly.
+   if (process_type == switches::kZygoteProcess)

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_browser_browser__main__loop.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_browser_browser__main__loop.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,20 @@
+--- src/3rdparty/chromium/content/browser/browser_main_loop.cc.orig	2017-04-11 14:08:45 UTC
++++ src/3rdparty/chromium/content/browser/browser_main_loop.cc
+@@ -189,7 +189,7 @@
+ namespace content {
+ namespace {
+ 
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ void SetupSandbox(const base::CommandLine& parsed_command_line) {
+   TRACE_EVENT0("startup", "SetupSandbox");
+   base::FilePath sandbox_binary;
+@@ -440,7 +440,7 @@ void BrowserMainLoop::EarlyInitialization() {
+   TRACE_EVENT0("startup", "BrowserMainLoop::EarlyInitialization");
+   TRACK_SCOPED_REGION("Startup", "BrowserMainLoop::EarlyInitialization");
+ 
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+   // No thread should be created before this call, as SetupSandbox()
+   // will end-up using fork().
+   SetupSandbox(parsed_command_line_);

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_browser_child__process__launcher.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_browser_child__process__launcher.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,38 @@
+--- src/3rdparty/chromium/content/browser/child_process_launcher.cc.orig	2017-04-11 14:08:45 UTC
++++ src/3rdparty/chromium/content/browser/child_process_launcher.cc
+@@ -198,7 +198,7 @@ void LaunchOnLauncherThread(const NotifyCallback& call
+   // We need to close the client end of the IPC channel to reliably detect
+   // child termination.
+ 
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+   if (use_zygote) {
+     base::ProcessHandle handle = ZygoteHostImpl::GetInstance()->ForkRequest(
+         cmd_line->argv(), std::move(files_to_register), process_type);
+@@ -296,7 +296,7 @@ void TerminateOnLauncherThread(bool zygote, base::Proc
+   process.Terminate(RESULT_CODE_NORMAL_EXIT, false);
+   // On POSIX, we must additionally reap the child.
+ #if defined(OS_POSIX)
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+   if (zygote) {
+     // If the renderer was created via a zygote, we have to proxy the reaping
+     // through the zygote process.
+@@ -398,7 +398,7 @@ void ChildProcessLauncher::Launch(
+ 
+ void ChildProcessLauncher::UpdateTerminationStatus(bool known_dead) {
+   DCHECK(CalledOnValidThread());
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+   if (zygote_) {
+     termination_status_ = ZygoteHostImpl::GetInstance()->
+         GetTerminationStatus(process_.Handle(), known_dead, &exit_code_);
+@@ -469,7 +469,7 @@ void ChildProcessLauncher::Notify(
+   starting_ = false;
+   process_ = std::move(process);
+ 
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+   zygote_ = zygote;
+ #endif
+   if (process_.IsValid()) {

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_browser_download_file__metadata__linux.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_browser_download_file__metadata__linux.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,20 @@
+--- src/3rdparty/chromium/content/browser/download/file_metadata_linux.cc.orig	2017-04-20 13:00:41 UTC
++++ src/3rdparty/chromium/content/browser/download/file_metadata_linux.cc
+@@ -6,7 +6,7 @@
+ 
+ #include <stddef.h>
+ #include <sys/types.h>
+-#include <sys/xattr.h>
++#include <sys/extattr.h>
+ 
+ #include "base/files/file_path.h"
+ #include "base/files/file_util.h"
+@@ -21,7 +21,7 @@ const char kReferrerURLAttrName[] = "use
+ static void SetExtendedFileAttribute(const char* path, const char* name,
+                                      const char* value, size_t value_size,
+                                      int flags) {
+-  int result = setxattr(path, name, value, value_size, flags);
++  int result = extattr_set_file(path, EXTATTR_NAMESPACE_USER, name, value, value_size);
+   if (result) {
+     DPLOG(ERROR)
+         << "Could not set extended attribute " << name << " on file " << path;

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_browser_frame__host_render__widget__host__view__guest.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_browser_frame__host_render__widget__host__view__guest.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,16 @@
+--- src/3rdparty/chromium/content/browser/frame_host/render_widget_host_view_guest.cc.orig	2017-04-11 14:08:45 UTC
++++ src/3rdparty/chromium/content/browser/frame_host/render_widget_host_view_guest.cc
+@@ -338,11 +338,11 @@ gfx::NativeView RenderWidgetHostViewGuest::GetNativeVi
+ 
+ gfx::NativeViewId RenderWidgetHostViewGuest::GetNativeViewId() const {
+   if (!guest_)
+-    return static_cast<gfx::NativeViewId>(NULL);
++    return reinterpret_cast<gfx::NativeViewId>(NULL);
+ 
+   RenderWidgetHostView* rwhv = guest_->GetOwnerRenderWidgetHostView();
+   if (!rwhv)
+-    return static_cast<gfx::NativeViewId>(NULL);
++    return reinterpret_cast<gfx::NativeViewId>(NULL);
+   return rwhv->GetNativeViewId();
+ }
+ 

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_browser_geolocation_location__arbitrator__impl.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_browser_geolocation_location__arbitrator__impl.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,11 @@
+--- src/3rdparty/chromium/content/browser/geolocation/location_arbitrator_impl.cc.orig	2017-04-19 16:57:24 UTC
++++ src/3rdparty/chromium/content/browser/geolocation/location_arbitrator_impl.cc
+@@ -174,7 +174,7 @@ LocationProvider* LocationArbitratorImpl
+ }
+ 
+ LocationProvider* LocationArbitratorImpl::NewSystemLocationProvider() {
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+   return NULL;
+ #else
+   return content::NewSystemLocationProvider();

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_content__browser.gypi
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_content__browser.gypi	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,33 @@
+--- src/3rdparty/chromium/content/content_browser.gypi.orig	2016-11-07 14:46:18 UTC
++++ src/3rdparty/chromium/content/content_browser.gypi
+@@ -2140,6 +2140,9 @@
+     ['os_bsd==1', {
+       'sources/': [
+         ['exclude', '^browser/gamepad/gamepad_platform_data_fetcher_linux\\.cc$'],
++        ['exclude', '^browser/zygote_host/zygote_host_impl_linux\\.cc$'],
++        ['exclude', '^zygote/zygote_linux\\.cc$'],
++        ['exclude', '^zygote/zygote_main_linux\\.cc$'],
+       ],
+     }],
+     ['use_aura==1', {
+@@ -2191,14 +2194,16 @@
+         'browser/geolocation/empty_wifi_data_provider.cc',
+       ],
+     }],
+-    ['OS == "linux" and use_dbus==1', {
+-      'sources!': [
+-        'browser/geolocation/empty_wifi_data_provider.cc',
+-      ],
++    ['use_dbus==1', {
+       'dependencies': [
+         '../build/linux/system.gyp:dbus',
+         '../dbus/dbus.gyp:dbus',
+       ],
++    }],
++    ['OS == "linux" and use_dbus==1', {
++      'sources!': [
++        'browser/geolocation/empty_wifi_data_provider.cc',
++      ],
+     }, {  # OS != "linux" or use_dbus==0
+       'sources!': [
+         'browser/geolocation/wifi_data_provider_linux.cc',

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_content__common.gypi
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_content__common.gypi	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,32 @@
+--- src/3rdparty/chromium/content/content_common.gypi.orig	2016-11-07 14:46:18 UTC
++++ src/3rdparty/chromium/content/content_common.gypi
+@@ -12,6 +12,7 @@
+     '../skia/skia.gyp:skia',
+     '../third_party/WebKit/public/blink_headers.gyp:blink_headers',
+     '../third_party/icu/icu.gyp:icuuc',
++    '../third_party/mesa/mesa.gyp:mesa_headers',
+     '../ui/accessibility/accessibility.gyp:accessibility',
+     '../ui/accessibility/accessibility.gyp:ax_gen',
+     '../ui/base/ime/ui_base_ime.gyp:ui_base_ime',
+@@ -756,6 +757,21 @@
+         'content.gyp:common_aidl',
+       ],
+     }],
++    ['os_bsd==1', {
++      'sources!': [
++        'common/sandbox_linux/bpf_cros_arm_gpu_policy_linux.cc',
++        'common/sandbox_linux/bpf_gpu_policy_linux.cc',
++        'common/sandbox_linux/bpf_ppapi_policy_linux.cc',
++        'common/sandbox_linux/bpf_renderer_policy_linux.cc',
++        'common/sandbox_linux/bpf_utility_policy_linux.cc',
++        'common/sandbox_linux/sandbox_bpf_base_policy_linux.cc',
++        'common/sandbox_linux/sandbox_debug_handling_linux.cc',
++        'common/sandbox_linux/sandbox_init_linux.cc',
++        'common/sandbox_linux/sandbox_linux.cc',
++        'common/sandbox_linux/sandbox_seccomp_bpf_linux.cc',
++        'common/set_process_title_linux.cc',
++      ],
++    }],
+     ['use_pango == 1', {
+       'dependencies': [
+         '../build/linux/system.gyp:pangocairo',

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_gpu_gpu__child__thread.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_gpu_gpu__child__thread.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,18 @@
+--- src/3rdparty/chromium/content/gpu/gpu_child_thread.cc.orig	2017-04-11 14:08:45 UTC
++++ src/3rdparty/chromium/content/gpu/gpu_child_thread.cc
+@@ -306,6 +306,7 @@ void GpuChildThread::StopWatchdog() {
+ }
+ 
+ void GpuChildThread::OnCollectGraphicsInfo() {
++#if !defined(OS_FREEBSD)
+ #if defined(OS_WIN)
+   // GPU full info collection should only happen on un-sandboxed GPU process
+   // or single process/in-process gpu mode on Windows.
+@@ -348,6 +349,7 @@ void GpuChildThread::OnCollectGraphicsInfo() {
+     base::MessageLoop::current()->QuitWhenIdle();
+   }
+ #endif  // OS_WIN
++#endif 
+ }
+ 
+ void GpuChildThread::OnGetVideoMemoryUsageStats() {

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_gpu_gpu__main.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_gpu_gpu__main.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,45 @@
+--- src/3rdparty/chromium/content/gpu/gpu_main.cc.orig	2017-04-11 14:08:45 UTC
++++ src/3rdparty/chromium/content/gpu/gpu_main.cc
+@@ -99,7 +99,7 @@ void GetGpuInfoFromCommandLine(gpu::GPUInfo& gpu_info,
+                                const base::CommandLine& command_line);
+ bool WarmUpSandbox(const base::CommandLine& command_line);
+ 
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_FREEBSD)
+ bool CollectGraphicsInfo(gpu::GPUInfo& gpu_info);
+ #endif
+ 
+@@ -191,13 +191,13 @@ int GpuMain(const MainFunctionParams& parameters) {
+ #else
+   base::MessageLoop main_message_loop(base::MessageLoop::TYPE_UI);
+ #endif
+-#elif defined(OS_LINUX) && defined(USE_X11)
++#elif (defined(OS_LINUX)||defined(OS_BSD)) && defined(USE_X11)
+   // We need a UI loop so that we can grab the Expose events. See GLSurfaceGLX
+   // and https://crbug.com/326995.
+   base::MessageLoop main_message_loop(base::MessageLoop::TYPE_UI);
+   scoped_ptr<ui::PlatformEventSource> event_source =
+       ui::PlatformEventSource::CreateDefault();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX)||defined(OS_BSD)
+   base::MessageLoop main_message_loop(base::MessageLoop::TYPE_DEFAULT);
+ #elif defined(OS_MACOSX)
+   // This is necessary for CoreAnimation layers hosted in the GPU process to be
+@@ -303,7 +303,7 @@ int GpuMain(const MainFunctionParams& parameters) {
+       // and we already registered them through SetGpuInfo() above.
+       base::TimeTicks before_collect_context_graphics_info =
+           base::TimeTicks::Now();
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_FREEBSD)
+       if (!CollectGraphicsInfo(gpu_info))
+         dead_on_arrival = true;
+ 
+@@ -457,7 +457,7 @@ bool WarmUpSandbox(const base::CommandLine& command_li
+   return true;
+ }
+ 
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_FREEBSD)
+ bool CollectGraphicsInfo(gpu::GPUInfo& gpu_info) {
+   TRACE_EVENT0("gpu,startup", "Collect Graphics Info");
+ 

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_renderer_devtools_v8__sampling__profiler.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_renderer_devtools_v8__sampling__profiler.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,21 @@
+--- src/3rdparty/chromium/content/renderer/devtools/v8_sampling_profiler.cc.orig	2017-04-11 14:08:45 UTC
++++ src/3rdparty/chromium/content/renderer/devtools/v8_sampling_profiler.cc
+@@ -6,6 +6,7 @@
+ 
+ #include <stdint.h>
+ #include <string.h>
++#include <ucontext.h>
+ 
+ #include "base/format_macros.h"
+ #include "base/location.h"
+@@ -544,6 +546,10 @@ void V8SamplingThread::HandleProfilerSignal(int signal
+   state.pc = reinterpret_cast<void*>(mcontext->__ss.REG_64_32(__rip, __eip));
+   state.sp = reinterpret_cast<void*>(mcontext->__ss.REG_64_32(__rsp, __esp));
+   state.fp = reinterpret_cast<void*>(mcontext->__ss.REG_64_32(__rbp, __ebp));
++#elif defined(OS_FREEBSD)
++  state.pc = reinterpret_cast<void*>(mcontext.REG_64_32(mc_rip, mc_eip));
++  state.sp = reinterpret_cast<void*>(mcontext.REG_64_32(mc_rsp, mc_esp));
++  state.fp = reinterpret_cast<void*>(mcontext.REG_64_32(mc_rbp, mc_ebp));
+ #else
+   state.pc =
+       reinterpret_cast<void*>(mcontext.gregs[REG_64_32(REG_RIP, REG_EIP)]);

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_renderer_renderer__main__platform__delegate__linux.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_content_renderer_renderer__main__platform__delegate__linux.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,18 @@
+--- src/3rdparty/chromium/content/renderer/renderer_main_platform_delegate_linux.cc.orig	2017-04-20 13:24:44 UTC
++++ src/3rdparty/chromium/content/renderer/renderer_main_platform_delegate_linux.cc
+@@ -29,6 +29,7 @@ void RendererMainPlatformDelegate::Platf
+ }
+ 
+ bool RendererMainPlatformDelegate::EnableSandbox() {
++#if defined(OS_LINUX)
+   // The setuid sandbox is started in the zygote process: zygote_main_linux.cc
+   // http://code.google.com/p/chromium/wiki/LinuxSUIDSandbox
+   //
+@@ -60,6 +61,7 @@ bool RendererMainPlatformDelegate::Enabl
+   }
+ #endif  // __x86_64__
+ 
++#endif  // defined(OS_LINUX)
+   return true;
+ }
+ 

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_crypto_nss__util.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_crypto_nss__util.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,24 @@
+--- src/3rdparty/chromium/crypto/nss_util.cc.orig	2017-04-23 10:32:17 UTC
++++ src/3rdparty/chromium/crypto/nss_util.cc
+@@ -15,7 +15,7 @@
+ 
+ #include "crypto/nss_util_internal.h"
+ 
+-#if defined(OS_OPENBSD)
++#if defined(OS_BSD)
+ #include <sys/mount.h>
+ #include <sys/param.h>
+ #endif
+@@ -158,10 +158,10 @@ void UseLocalCacheOfNSSDatabaseIfNFS(con
+   base::FileSystemType fs_type = base::FILE_SYSTEM_UNKNOWN;
+   if (base::GetFileSystemType(database_dir, &fs_type))
+     db_on_nfs = (fs_type == base::FILE_SYSTEM_NFS);
+-#elif defined(OS_OPENBSD)
++#elif defined(OS_BSD)
+   struct statfs buf;
+   if (statfs(database_dir.value().c_str(), &buf) == 0)
+-    db_on_nfs = (strcmp(buf.f_fstypename, MOUNT_NFS) == 0);
++    db_on_nfs = (strcmp(buf.f_fstypename, "nfs") == 0);
+ #else
+   NOTIMPLEMENTED();
+ #endif

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_device_usb_usb__context.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_device_usb_usb__context.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,22 @@
+--- src/3rdparty/chromium/device/usb/usb_context.cc.orig	2017-04-11 14:15:58 UTC
++++ src/3rdparty/chromium/device/usb/usb_context.cc
+@@ -9,8 +9,7 @@
+ #include "base/macros.h"
+ #include "base/threading/simple_thread.h"
+ #include "device/usb/usb_error.h"
+-#include "third_party/libusb/src/libusb/interrupt.h"
+-#include "third_party/libusb/src/libusb/libusb.h"
++#include "libusb.h"
+ 
+ namespace device {
+ 
+@@ -58,7 +57,9 @@ void UsbContext::UsbEventHandler::Run() {
+ 
+ void UsbContext::UsbEventHandler::Stop() {
+   base::subtle::Release_Store(&running_, 0);
++#if !defined(__FreeBSD__)
+   libusb_interrupt_handle_event(context_);
++#endif
+ }
+ 
+ UsbContext::UsbContext(PlatformUsbContext context) : context_(context) {

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_device_usb_usb__service__impl.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_device_usb_usb__service__impl.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,48 @@
+The hotplug API is not available on FreeBSD <= 10.3.
+
+The API was added in base r302080, so it is part of FreeBSD 11.0+. It was
+MFC'ed to stable/10 in r302275, which is between __FreeBSD_version's 1003505
+(r302228) and 1003506 (r304611).
+--- src/3rdparty/chromium/device/usb/usb_service_impl.cc.orig	2017-04-20 16:14:07 UTC
++++ src/3rdparty/chromium/device/usb/usb_service_impl.cc
+@@ -482,6 +482,7 @@ UsbServiceImpl::UsbServiceImpl(
+   }
+   context_ = new UsbContext(platform_context);
+ 
++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1003506
+   rv = libusb_hotplug_register_callback(
+       context_->context(),
+       static_cast<libusb_hotplug_event>(LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED |
+@@ -492,6 +493,7 @@ UsbServiceImpl::UsbServiceImpl(
+   if (rv == LIBUSB_SUCCESS) {
+     hotplug_enabled_ = true;
+   }
++#endif
+ 
+   RefreshDevices();
+ #if defined(OS_WIN)
+@@ -504,7 +506,9 @@ UsbServiceImpl::UsbServiceImpl(
+ 
+ UsbServiceImpl::~UsbServiceImpl() {
+   if (hotplug_enabled_) {
++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1003506
+     libusb_hotplug_deregister_callback(context_->context(), hotplug_handle_);
++#endif
+   }
+   for (const auto& map_entry : devices_) {
+     map_entry.second->OnDisconnect();
+@@ -744,6 +748,7 @@ void UsbServiceImpl::RemoveDevice(scoped
+ }
+ 
+ // static
++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1003506
+ int LIBUSB_CALL UsbServiceImpl::HotplugCallback(libusb_context* context,
+                                                 PlatformUsbDevice device,
+                                                 libusb_hotplug_event event,
+@@ -799,5 +804,6 @@ void UsbServiceImpl::OnPlatformDeviceRem
+   }
+   libusb_unref_device(platform_device);
+ }
++#endif  // defined(__FreeBSD_version) && __FreeBSD_version >= 1003506
+ 
+ }  // namespace device

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_device_usb_usb__service__impl.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_device_usb_usb__service__impl.h	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,33 @@
+The hotplug API is not available on FreeBSD <= 10.3.
+
+The API was added in base r302080, so it is part of FreeBSD 11.0+. It was
+MFC'ed to stable/10 in r302275, which is between __FreeBSD_version's 1003505
+(r302228) and 1003506 (r304611).
+--- src/3rdparty/chromium/device/usb/usb_service_impl.h.orig	2017-04-20 16:14:03 UTC
++++ src/3rdparty/chromium/device/usb/usb_service_impl.h
+@@ -72,6 +72,7 @@ class UsbServiceImpl :
+   void RemoveDevice(scoped_refptr<UsbDeviceImpl> device);
+ 
+   // Handle hotplug events from libusb.
++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1003506
+   static int LIBUSB_CALL HotplugCallback(libusb_context* context,
+                                          PlatformUsbDevice device,
+                                          libusb_hotplug_event event,
+@@ -79,6 +80,7 @@ class UsbServiceImpl :
+   // These functions release a reference to the provided platform device.
+   void OnPlatformDeviceAdded(PlatformUsbDevice platform_device);
+   void OnPlatformDeviceRemoved(PlatformUsbDevice platform_device);
++#endif
+ 
+   scoped_refptr<UsbContext> context_;
+   scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+@@ -88,7 +90,9 @@ class UsbServiceImpl :
+   // connected instead of only when a full enumeration is requested.
+   // TODO(reillyg): Support this on all platforms. crbug.com/411715
+   bool hotplug_enabled_ = false;
++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1003506
+   libusb_hotplug_callback_handle hotplug_handle_;
++#endif
+ 
+   // Enumeration callbacks are queued until an enumeration completes.
+   bool enumeration_ready_ = false;

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_gpu_gpu__config.gypi
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_gpu_gpu__config.gypi	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,17 @@
+--- src/3rdparty/chromium/gpu/gpu_config.gypi.orig	2016-11-07 14:46:18 UTC
++++ src/3rdparty/chromium/gpu/gpu_config.gypi
+@@ -66,12 +66,12 @@
+         '../third_party/amd/amd_videocard_info_win.cc',
+       ],
+     }],
+-    ['OS=="linux" and use_libpci==1 and (use_x11==1 or use_ozone==1)', {
++    ['(OS=="linux" or os_bsd==1) and use_libpci==1 and (use_x11==1 or use_ozone==1)', {
+       'dependencies': [
+         '../build/linux/system.gyp:libpci',
+       ],
+     }],
+-    ['OS=="linux" and use_x11==1', {
++    ['(OS=="linux" or os_bsd==1) and use_x11==1', {
+       'dependencies': [
+         '../build/linux/system.gyp:x11',
+         '../build/linux/system.gyp:xext',

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_capture_video_file__video__capture__device__factory.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_capture_video_file__video__capture__device__factory.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,11 @@
+--- src/3rdparty/chromium/media/capture/video/file_video_capture_device_factory.cc.orig	2017-04-23 10:37:42 UTC
++++ src/3rdparty/chromium/media/capture/video/file_video_capture_device_factory.cc
+@@ -50,7 +50,7 @@ void FileVideoCaptureDeviceFactory::GetD
+   device_names->push_back(VideoCaptureDevice::Name(
+       command_line_file_path.value(), kFileVideoCaptureDeviceName,
+       VideoCaptureDevice::Name::AVFOUNDATION));
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+   device_names->push_back(VideoCaptureDevice::Name(
+       command_line_file_path.value(), kFileVideoCaptureDeviceName,
+       VideoCaptureDevice::Name::V4L2_SINGLE_PLANE));

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_capture_video_linux_v4l2__capture__delegate.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_capture_video_linux_v4l2__capture__delegate.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,21 @@
+--- src/3rdparty/chromium/media/capture/video/linux/v4l2_capture_delegate.cc.orig	2017-04-19 19:13:43 UTC
++++ src/3rdparty/chromium/media/capture/video/linux/v4l2_capture_delegate.cc
+@@ -20,7 +20,7 @@
+ #include "media/capture/video/linux/v4l2_capture_delegate_single_plane.h"
+ #include "media/capture/video/linux/video_capture_device_linux.h"
+ 
+-#if !defined(OS_OPENBSD)
++#if !defined(OS_BSD)
+ #include <linux/version.h>
+ #endif
+ 
+@@ -277,9 +277,7 @@ void V4L2CaptureDelegate::AllocateAndSta
+   // operation (|errno| == EINVAL in this case) or plain failure.
+   if ((power_line_frequency_ == V4L2_CID_POWER_LINE_FREQUENCY_50HZ)
+       || (power_line_frequency_ == V4L2_CID_POWER_LINE_FREQUENCY_60HZ)
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)
+       || (power_line_frequency_ == V4L2_CID_POWER_LINE_FREQUENCY_AUTO)
+-#endif
+      ) {
+     struct v4l2_control control = {};
+     control.id = V4L2_CID_POWER_LINE_FREQUENCY;

Added: head/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_capture_video_linux_video__capture__device__linux.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/qt5-webengine/files/patch-src_3rdparty_chromium_media_capture_video_linux_video__capture__device__linux.cc	Thu Aug 17 15:56:11 2017	(r448132)
@@ -0,0 +1,25 @@
+--- src/3rdparty/chromium/media/capture/video/linux/video_capture_device_linux.cc.orig	2016-11-07 14:46:18 UTC
++++ src/3rdparty/chromium/media/capture/video/linux/video_capture_device_linux.cc
+@@ -17,7 +17,9 @@
+ #include <sys/videoio.h>
+ #else
+ #include <linux/videodev2.h>
++#if !defined(OS_BSD)
+ #include <linux/version.h>
++#endif  // defined(OS_BSD)
+ #endif
+ 
+ namespace media {
+@@ -144,12 +146,8 @@ int VideoCaptureDeviceLinux::TranslatePo
+     case media::PowerLineFrequency::FREQUENCY_60HZ:
+       return V4L2_CID_POWER_LINE_FREQUENCY_60HZ;
+     default:
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)
+       // If we have no idea of the frequency, at least try and set it to AUTO.
+       return V4L2_CID_POWER_LINE_FREQUENCY_AUTO;

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-ports-head mailing list