summaryrefslogtreecommitdiff
path: root/Mk
diff options
context:
space:
mode:
authorMark Linimon <linimon@FreeBSD.org>2006-07-05 02:13:12 +0000
committerMark Linimon <linimon@FreeBSD.org>2006-07-05 02:13:12 +0000
commitd4842a47595253fce36b9dd8f557402ece5fd7bc (patch)
tree32c8e39d37a2ac6746d00d3638def78686c4c1dc /Mk
parentAdd common logic to support ports using the Python-based SCons build system. (diff)
Add common code to support for WxWidgets based ports.
PR: ports/89398 Submitted by: alepulver
Notes
Notes: svn path=/head/; revision=166952
Diffstat (limited to 'Mk')
-rw-r--r--Mk/bsd.wx.mk534
1 files changed, 534 insertions, 0 deletions
diff --git a/Mk/bsd.wx.mk b/Mk/bsd.wx.mk
new file mode 100644
index 000000000000..9bb53321af25
--- /dev/null
+++ b/Mk/bsd.wx.mk
@@ -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@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@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