ports/89398: [PATCH] bsd.wx.mk and patches

Alejandro Pulver alepulver at FreeBSD.org
Thu Jun 15 20:47:31 UTC 2006


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

This diff replaces the patches for bsd.wx.mk and bsd.port.mk. It fixes
WANT_WX (component detection).

- ---------- BEGIN ----------
Index: Mk/bsd.port.mk
===================================================================
RCS file: /home/pcvs/ports/Mk/bsd.port.mk,v
retrieving revision 1.533
diff -u -r1.533 bsd.port.mk
- --- Mk/bsd.port.mk	23 May 2006 21:53:18 -0000	1.533
+++ Mk/bsd.port.mk	15 Jun 2006 20:46:24 -0000
@@ -1393,6 +1393,10 @@
 .include "${PORTSDIR}/Mk/bsd.gnome.mk"
 .endif
 
+.if defined(WANT_WX) || defined(USE_WX) || defined(USE_WX_NOT)
+.include "${PORTSDIR}/Mk/bsd.wx.mk"
+.endif
+
 .if defined(WANT_GSTREAMER) || defined(USE_GSTREAMER) || defined(USE_GSTREAMER80)
 .include "${PORTSDIR}/Mk/bsd.gstreamer.mk"
 .endif
@@ -1841,6 +1845,11 @@
 .include "${PORTSDIR}/Mk/bsd.gnome.mk"
 .endif
 
+.if defined(USE_WX) || defined(USE_WX_NOT)
+.include "${PORTSDIR}/Mk/bsd.wx.mk"
+.endif
+
+
 .if exists(${PORTSDIR}/../Makefile.inc)
 .include "${PORTSDIR}/../Makefile.inc"
 USE_SUBMAKE=	yes
Index: Mk/bsd.wx.mk
===================================================================
RCS file: Mk/bsd.wx.mk
diff -N Mk/bsd.wx.mk
- --- /dev/null	1 Jan 1970 00:00:00 -0000
+++ Mk/bsd.wx.mk	15 Jun 2006 20:46:24 -0000
@@ -0,0 +1,534 @@
+#-*- mode: makefile; tab-width: 4; -*-
+# ex:ts=4
+#
+# $FreeBSD$
+#
+# bsd.wx.mk - Support for WxWidgets based ports.
+#
+# Created by: Alejandro Pulver <alepulver at FreeBSD.org>
+#
+# Please view me with 4 column tabs!
+#
+# The following variables can be defined in a port that uses the WxWidgets
+# library, contributed libraries, WxPython and/or more WxWidgets related
+# components (with run and/or build dependencies). It can be used after and/or
+# before bsd.port.pre.mk, but Python components will only work if Python
+# variables (e.g. USE_PYTHON) are defined before it (this is a bsd.python.mk
+# limitation).
+# USE_WX		- Set to the list of WxWidgets versions that can be used by
+#				  the port. The syntax allows the following elements:
+#				  - Single version (e.g. "2.4").
+#				  - Range of versions (e.g. "2.4-2.6"). Must be ascending.
+#				  - Partial range: single version and upper (e.g. "2.4+").
+#				  - Partial range: single version and lower (e.g. "-2.6").
+#				  Multiple elements can be specified separated by spaces.
+# USE_WX_NOT	- Set to the list of WxWidgets versions that can't be used by
+#				  the port. In other words, it removes some versions from
+#				  USE_WX. If the latter is not defined, it will have the value
+#				  of all the possible versions. The syntax is like USE_WX.
+# WX_COMPS		- Set to the list of WxWidgets components the port uses.
+#				  Several components can be specified separated by spaces. By
+#				  default it will have the value of "wx". Suffixes in the form
+#				  "_xxx" may be added to the components to determine the
+#				  dependency type.
+#				  The available components are:
+#				  wx			- The WxWidgets library.
+#				  contrib		- The WxWidgets contributed libraries.
+#				  python		- The WxWidgets API for Python (WxPython).
+#				  mozilla		- WxMozilla (only for 2.4).
+#				  svg			- WxSVG (only for 2.6).
+#				  The available dependency types are:
+#				  build			- Requires component for building.
+#				  lib			- Requires component for building and running.
+#				  run			- Requires component for running.
+#				  If no suffix is present then "lib" will be used.
+# WX_CONF_ARGS	- Set to "absolute" or "relative" if the port needs configure
+#				  arguments in addition to the WX_CONFIG environment variable.
+#				  It determines the type of parameters that have to be passed
+#				  to the configure script. In the first case it adds
+#				  "--with-wx-config=${WX_CONFIG}" (absolute path of WX_CONFIG),
+#				  and in second one "--with-wx=${X11BASE}" and
+#				  "--with-wx-config=${WX_CONFIG:T} (prefix and name).
+# WX_UNICODE	- Set to "yes" (or anything) if the port needs the Unicode
+#				  version of the WxWidgets library and/or contributed
+#				  libraries.
+#				  NOTE: this should NOT be used for ports that can be compiled
+#				  with Unicode or not, but for the ones that require it. The
+#				  first case is handled by the user variable WITH_UNICODE.
+# WANT_WX		- Set to "yes" or a valid single version (no ranges, etc).
+#				  In both cases it will detect the installed WxWidgets
+#				  components and add them to the variable HAVE_WX. If a
+#				  version is selected, HAVE_WX will contain a list of
+#				  components in the other case it will contain a list of
+#				  "component-version" pairs (e.g. wx-2.6, contrib-2.4, etc).
+#				  It has to be used before bsd.port.pre.mk.
+# WANT_WX_VER	- Set to the prefered WxWidgets version for the port. It must
+#				  be present in USE_WX or missing in USE_WX_NOT. This is
+#				  overriden by the user variable WITH_WX_VER if set. It can
+#				  contain multiple versions in order of preference (last ones
+#				  are tried first).
+#
+# The following variables are intended for the user and can be defined in
+# make.conf.
+# WITH_UNICODE	- If the variable is defined and both the running FreeBSD
+#				  version and the selected WxWidgets version support Unicode,
+#				  then the Unicode version of WxWidgets is used.
+# WITH_WX_VER	- If the variable is defined the version it contains will be
+#				  used as the default for ports that support multiple
+#				  WxWidgets versions. It can contain multiple versions, and
+#				  the last possible one will be used.
+#
+# The following variables are defined by this file, to be read from the port.
+# WX_UNICODE	- If this variable is not defined by the port (which means it
+#				  requires the Unicode version of WxWidgets), it will be
+#				  defined in the case the Unicode version is used (enabled by
+#				  the user through WITH_UNICODE).
+# WX_VERSION	- The WxWidgets version that is going to be used.
+# HAVE_WX		- The list of WxWidgets components installed, if WANT_WX was
+#				  defined. The components will have version suffix if it was
+#				  set to "yes").
+#
+# Examples:
+# - A port that needs WxWidgets 2.6 and contributed libraries with Unicode.
+#	USE_WX=		2.6
+#	WX_COMPS=	wx contrib
+#	WX_UNICODE=	yes
+# - A port that needs WxPython 2.4 for running.
+#	USE_PYTHON=	yes
+#	USE_WX=		2.4
+#	WX_COMPS=	python_run
+# - A port that needs WxPython 2.4 or 2.6 for building.
+#	USE_PYTHON=	yes
+#	USE_WX=		2.4 2.6
+#	WX_COMPS=	python_build
+# - A port that needs WxWidgets version 2.4 or higher and contributed
+#	libraries.
+#	USE_WX=		2.4+
+#	WX_COMPS=	wx contrib
+# - A port that needs WxWidgets of any version other than 2.4.
+#	USE_WX_NOT=	2.4
+#
+# Notes:
+# - The version is processed on each inclusion, so USE_WX, USE_WX_NOT and
+#	WX_UNICODE can be modified before and after including bsd.port.pre.mk.
+#	After determining the version and Unicode, WX_CONFIG will be defined.
+#
+
+WX_Include_MAINTAINER=	alepulver at FreeBSD.org
+
+#
+# Global definitions.
+#
+
+.if !defined(_WX_Definitions_Done)
+_WX_Definitions_Done=	yes
+
+#
+# Common variables:
+# _WX_COMPS_ALL			- List of valid components.
+# _WX_DEP_TYPES_ALL		- List of valid dependency types.
+# _WX_VERS_ALL			- List of supported versions.
+# _WX_VERS_UC_ALL		- List of Unicode capable versions.
+# _WX_CHANGE_VARS		- List of variables allowed to change between pre and
+#						  post inclusions (related to version).
+# _WX_LISTS_ORDER		- Reverse lists preference order.
+# _WX_AUTO_VARS			- Variables defined sometimes that may have to be
+#						  redefined later.
+#
+
+_WX_COMPS_ALL=			wx contrib python mozilla svg
+_WX_DEP_TYPES_ALL=		build lib run
+_WX_VERS_ALL=			2.4 2.6
+_WX_VERS_UC_ALL=		2.6
+_WX_CHANGE_VARS=		USE_WX USE_WX_NOT WX_UNICODE
+_WX_LISTS_ORDER=		_WX_VER_FINAL WANT_WX_VER WITH_WX_VER
+_WX_AUTO_VARS=			USE_WX WX_CONFIG
+
+#
+# Variables used to determine what is needed:
+# _WX_PORT_comp_ver		- Port directory.
+# _WX_LIB_comp_ver		- Name of the shared library (optional).
+# _WX_SHVER_comp_ver	- Shared library version (optional).
+# _WX_FILE_comp_ver		- File installed by that component.
+#
+
+_WX_PORT_wx_2.4=		wxgtk24
+_WX_LIB_wx_2.4=			wx_gtk2-2.4
+
+_WX_PORT_contrib_2.4=	wxgtk24-contrib
+_WX_LIB_contrib_2.4=	wx_gtk2_canvas-2.4
+
+_WX_PORT_python_2.4=	py-wxPython24
+_WX_FILE_python_2.4=	${PYTHON_SITELIBDIR}/wx/__init__.py
+
+_WX_PORT_mozilla_2.4=	wxmozilla
+_WX_LIB_mozilla_2.4=	wxmozilla_gtk2-2.4
+
+_WX_PORT_wx_2.6=		wxgtk26${_WX_UCL}
+_WX_LIB_wx_2.6=			wx_base${_WX_UC}-2.6
+
+_WX_PORT_contrib_2.6=	wxgtk26${_WX_UCL}-contrib
+_WX_LIB_contrib_2.6=	wx_gtk2${_WX_UC}_animate-2.6
+
+_WX_PORT_python_2.6=	py-wxPython26${_WX_UCL}
+_WX_FILE_python_2.6=	${PYTHON_SITELIBDIR}/wx-2.6-gtk2${_WX_PYSUFX}/wx/__init__.py
+
+_WX_PORT_svg_2.6=		wxsvg
+_WX_LIB_svg_2.6=		wxsvg
+
+# Set _WX_SHVER_comp_ver to 0 and _WX_FILE_comp_ver for libs appropiately.
+
+.for comp in ${_WX_COMPS_ALL}
+.	for ver in ${_WX_VERS_ALL}
+.		if defined(_WX_LIB_${comp}_${ver})
+_WX_SHVER_${comp}_${ver}=	0
+_WX_FILE_${comp}_${ver}=	${X11BASE}/lib/lib${_WX_LIB_${comp}_${ver}}.so.${_WX_SHVER_${comp}_${ver}}
+.		endif
+.	endfor
+.endfor
+
+.endif		# !_WX_Defined_Done
+
+#
+# Check for present components.
+#
+
+.if !defined(AFTERPORTMK) && defined(WANT_WX)
+
+# Check if Unicode will be used.
+
+.	for __WANT_WX in ${WANT_WX}
+.		if defined(WITH_UNICODE) && ${OSVERSION} >= 500000 && \
+		   (${_WX_VERS_UC_ALL:M${__WANT_WX}} != "" || ${WANT_WX:L} == "yes")
+_WX_WANT_UNICODE=		yes
+.		endif
+.	endfor
+
+# These variables are reprocessed later so they won't affect other parts.
+
+.	if defined(WX_UNICODE) || defined(_WX_WANT_UNICODE)
+_WX_VER_FINAL=			${_WX_VERS_UC_ALL}
+_WX_UC=					u
+_WX_UCL=				-unicode
+_WX_PYSUFX=				-unicode
+.	else
+_WX_VER_FINAL=			${_WX_VERS_ALL}
+_WX_UC=					#
+_WX_UCL=				#
+_WX_PYSUFX=				-ansi
+.	endif
+
+# Fill HAVE_WX with the installed components.
+
+.	for __WANT_WX in ${WANT_WX}
+# Check if WANT_WX contains more than one word.
+.		if defined(HAVE_WX)
+IGNORE?=				selected multiple values for WANT_WX: ${WANT_WX}
+.		endif
+HAVE_WX=				#
+# Check for all versions.
+.		if ${WANT_WX:L} == "yes"
+.			for comp in ${_WX_COMPS_ALL}
+.				for ver in ${_WX_VER_FINAL}
+_WX_COMP=				_WX_FILE_${comp}_${ver}
+.					if defined(${_WX_COMP}) && exists(${${_WX_COMP}})
+HAVE_WX+=				${comp}-${ver}
+.					endif
+.				endfor
+.			endfor
+# Check for a specific version.
+.		elif ${_WX_VERS_ALL:M${__WANT_WX}}
+.			for comp in ${_WX_COMPS_ALL}
+.				if exists(${_WX_FILE_${comp}_${__WANT_WX}})
+HAVE_WX+=				${comp}
+.				endif
+.			endfor
+.		else
+IGNORE?=				selected an invalid value for WANT_WX: ${__WANT_WX}
+.		endif
+.	endfor
+.endif		# ! AFTERPORTMK && WANT_WX
+
+#
+# Check if the version has changed between inclusions.
+#
+
+.if defined(_WX_Version_Done)
+.	undef _WX_HAS_CHANGED
+
+.	for var in ${_WX_CHANGE_VARS}
+.		if (defined(${var}) && !defined(_WX_OLD_${var})) || \
+		   (!defined(${var}) && defined(_WX_OLD_${var})) || \
+		   (defined(_WX_OLD_${var}) && ${_WX_OLD_${var}} != ${${var}})
+_WX_HAS_CHANGED=		yes
+.		endif
+.	endfor
+.endif		# _WX_Version_Done
+
+#
+# Select WxWidgets version.
+#
+
+.if (!defined(_WX_Version_Done) || defined(_WX_HAS_CHANGED)) && \
+	(defined(USE_WX) || defined(USE_WX_NOT))
+_WX_Version_Done=		yes
+
+# Handle automatic variables.
+
+.for var in ${_WX_AUTO_VARS}
+.	if defined(_WX_${var}_DEFINED)
+.		undef ${var}
+.	endif
+.	if !defined(${var})
+_WX_${var}_DEFINED=		yes
+.	endif
+.endfor
+
+# Reset old variable values.
+
+.if defined(_WX_HAS_CHANGED)
+.	undef _WX_VER
+.	undef _WX_IGNORE
+.endif
+
+# Set defaults (if one isn't present).
+
+USE_WX?=				${_WX_VERS_ALL}
+USE_WX_NOT?=			#
+
+#
+# Make lists of valid and invalid versions.
+#
+# The following variables are used:
+# _WX_VER_CHECK			- If the version is a single one, express in a range.
+# _WX_VER_MIN			- Lower version of the range.
+# _WX_VER_MAX			- Higher version of the range.
+# _WX_VER_LIST			- List of requested versions.
+# _WX_VER_NOT_LIST		- List of disallowed versions.
+# _WX_VER_MERGED		- List of requested version without disallowed ones.
+#
+
+.for list in VER VER_NOT
+_WX_${list}_LIST=		#
+.	for ver in ${USE_WX${list:C/VER//}}
+_WX_VER_CHECK:=			${ver:C/^([[:digit:]]+(\.[[:digit:]]+)*)$/\1-\1/}
+_WX_VER_MIN:=			${_WX_VER_CHECK:C/([[:digit:]]+(\.[[:digit:]]+)*)[-+].*/\1/}
+_WX_VER_MAX:=			${_WX_VER_CHECK:C/.*-([[:digit:]]+(\.[[:digit:]]+)*)/\1/}
+# Minimum version not specified.
+.		if ${_WX_VER_MIN} == ${_WX_VER_CHECK}
+.			undef _WX_VER_MIN
+.			for v in ${_WX_VERS_ALL}
+_WX_VER_MIN?=			${v}
+.			endfor
+.		endif
+# Maximum version not specified.
+.		if ${_WX_VER_MAX} == ${_WX_VER_CHECK}
+.			for v in ${_WX_VERS_ALL}
+_WX_VER_MAX=			${v}
+.			endfor
+.		endif
+# Expand versions and add valid ones to each list.
+.		for v in ${_WX_VERS_ALL}
+.			if ${_WX_VER_MIN} <= ${v} && ${_WX_VER_MAX} >= ${v} && \
+			   ${_WX_${list}_LIST:M${v}} == ""
+_WX_${list}_LIST+=		${v}
+.			endif
+.		endfor
+.	endfor
+.endfor
+
+# Merge the lists into a single list of valid versions.
+
+_WX_VER_MERGED=			#
+.for ver in ${_WX_VER_LIST}
+.	if ${_WX_VER_NOT_LIST:M${ver}} == ""
+_WX_VER_MERGED+=		${ver}
+.	endif
+.endfor
+
+# Check for a null version.
+
+.if empty(_WX_VER_MERGED)
+_WX_IGNORE?=			selected a null or invalid WxWidgets version
+.endif
+
+#
+# Unicode support.
+#
+
+# Create a list of capable versions.
+
+_WX_VER_UC=				#
+.for ver in ${_WX_VER_MERGED}
+.	if ${_WX_VERS_UC_ALL:M${ver}} != ""
+_WX_VER_UC+=			${ver}
+.	endif
+.endfor
+
+# Requested by the user (optional).
+
+.if defined(WITH_UNICODE) && ${OSVERSION} >= 500000
+.	for ver in ${_WX_VER_UC}
+.		if ${_WX_VERS_UC_ALL:M${ver}} != ""
+WX_UNICODE=				yes
+.		endif
+.	endfor
+.endif
+
+# Requested by the port (mandatory).
+
+.if defined(WX_UNICODE)
+.	if ${OSVERSION} < 500000
+_WX_IGNORE?=			requires FreeBSD versions >= 5.X (because of Unicode)
+.	elif empty(_WX_VER_UC)
+_WX_IGNORE?=			selected a WxWidgets version which does not support Unicode: ${_WX_VER_MERGED}
+.	endif
+.endif
+
+# Set Unicode variables.
+
+.if defined(WX_UNICODE)
+_WX_VER_FINAL=			${_WX_VER_UC}
+_WX_UC=					u
+_WX_UCL=				-unicode
+_WX_PYSUFX=				-unicode
+.else
+_WX_VER_FINAL=			${_WX_VER_MERGED}
+_WX_UC=					#
+_WX_UCL=				#
+_WX_PYSUFX=				-ansi
+.endif
+
+#
+# Choose final version.
+#
+
+#
+# Check for the following (in order):
+# 1) WITH_WX_VER		- User preference.
+# 2) WANT_WX_VER		- Port preference.
+# 3) _WX_VER_FINAL		- Available versions.
+#
+
+.for list in ${_WX_LISTS_ORDER}
+.	if defined(${list})
+.		for ver in ${${list}}
+.			if ${_WX_VER_FINAL:M${ver}} != ""
+_WX_VER=				${ver}
+.			endif
+.		endfor
+.	endif
+.endfor
+
+#
+# Set variables.
+#
+
+WX_VERSION=				${_WX_VER}
+WX_CONFIG?=				${X11BASE}/bin/wxgtk2${_WX_UC}-${_WX_VER}-config
+
+# Define old values for detecting changes.
+
+.for var in ${_WX_CHANGE_VARS}
+.	if defined(${var})
+_WX_OLD_${var}:=		${${var}}
+.	endif
+.endfor
+
+.endif		# ! _WX_Version_Done || _WX_HAS_CHANGED
+
+#
+# Process components list and add dependencies, variables, etc.
+#
+
+.if !defined(BEFOREPORTMK)
+# Error check.
+
+.if defined(_WX_IGNORE)
+IGNORE?=				${_WX_IGNORE}
+.endif
+
+#
+# Component parsing.
+#
+# The variables used are:
+# _WX_COMP				- Component part.
+# _WX_DEP_TYPE			- Dependency type part.
+# _WX_COMP_NEW			- Component + dependency type.
+# _WX_COMPS_FINAL		- Final list of components with dependency types.
+#
+
+# Default components.
+
+WX_COMPS?=				wx
+
+# Detect invalid and duplicated components.
+
+_WX_COMPS_FINAL=		#
+.for comp in ${WX_COMPS}
+_WX_COMP=				${comp:C/_([[:alpha:]]+)$//}
+_WX_DEP_TYPE=			${comp:C/.+_([[:alpha:]]+)$/\1/}
+.	if ${_WX_COMP} == ${comp}
+_WX_DEP_TYPE=			lib
+.	endif
+_WX_COMP_NEW=			${_WX_COMP}_${_WX_DEP_TYPE}
+.	for __WX_COMP in ${_WX_COMP}
+.		if ${_WX_COMPS_ALL:M${__WX_COMP}} == ""
+IGNORE?=				selected an invalid WxWidgets component: ${__WX_COMP}
+.		endif
+.	endfor
+.	for __WX_DEP_TYPE in ${_WX_DEP_TYPE}
+.		if ${_WX_DEP_TYPES_ALL:M${__WX_DEP_TYPE}} == ""
+IGNORE?=				selected an invalid WxWidgets dependency type: ${__WX_DEP_TYPE}
+.		endif
+.	endfor
+.	if !defined(_WX_PORT_${_WX_COMP}_${_WX_VER})
+IGNORE?=				selected a WxWidgets component (${_WX_COMP}) which is not available for the selected version (${_WX_VER})
+.	endif
+.	for newcomp in ${_WX_COMP_NEW}
+.		if ${_WX_COMPS_FINAL:M${newcomp}} == ""
+_WX_COMPS_FINAL+=		${newcomp}
+.		endif
+.	endfor
+.endfor
+
+# Add dependencies.
+#
+# The variable used are:
+# _WX_COMP		-		- Component part.
+# _WX_DEP_TYPE			- Dependency type part.
+
+.for comp in ${_WX_COMPS_FINAL}
+_WX_COMP=				${comp:C/_([[:alpha:]]+)$//}
+_WX_DEP_TYPE=			${comp:C/.+_([[:alpha:]]+)$/\1/}
+.	if ${_WX_DEP_TYPE} == "lib"
+.		if defined(_WX_LIB_${_WX_COMP}_${_WX_VER})
+LIB_DEPENDS+=			${_WX_LIB_${_WX_COMP}_${_WX_VER}}:${PORTSDIR}/x11-toolkits/${_WX_PORT_${_WX_COMP}_${_WX_VER}}
+.		else
+BUILD_DEPENDS+=			${_WX_FILE_${_WX_COMP}_${_WX_VER}}:${PORTSDIR}/x11-toolkits/${_WX_PORT_${_WX_COMP}_${_WX_VER}}
+RUN_DEPENDS+=			${_WX_FILE_${_WX_COMP}_${_WX_VER}}:${PORTSDIR}/x11-toolkits/${_WX_PORT_${_WX_COMP}_${_WX_VER}}
+.		endif
+.	else
+${_WX_DEP_TYPE:U}_DEPENDS+=	${_WX_FILE_${_WX_COMP}_${_WX_VER}}:${PORTSDIR}/x11-toolkits/${_WX_PORT_${_WX_COMP}_${_WX_VER}}
+.	endif
+.endfor
+
+#
+# Set build related variables.
+#
+
+MAKE_ENV+=				WX_CONFIG=${WX_CONFIG}
+CONFIGURE_ENV+=			WX_CONFIG=${WX_CONFIG}
+
+.if defined(WX_CONF_ARGS)
+.	if ${WX_CONF_ARGS:L} == "absolute"
+CONFIGURE_ARGS+=		--with-wx-config=${WX_CONFIG}
+.	elif ${WX_CONF_ARGS:L} == "relative"
+CONFIGURE_ARGS+=		--with-wx=${X11BASE} \
+						--with-wx-config=${WX_CONFIG:T}
+.	else
+IGNORE?=				selected an invalid WxWidgets configure argument type: ${WX_CONF_ARGS}
+.	endif
+.endif
+
+.endif		# ! BEFOREPORTMK
- ----------- END -----------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (FreeBSD)

iD8DBQFEkcdhiV05EpRcP2ERAiUDAJ9heby3YeXcQYxnYTAA7L4pZTCC+wCdH62X
divOg9T2A0WZqGSjirFFsM8=
=MKQS
-----END PGP SIGNATURE-----


More information about the freebsd-ports-bugs mailing list