Changeset View
Changeset View
Standalone View
Standalone View
Mk/Uses/guile.mk
- This file was added.
# Provide support for guile | |||||
# | |||||
# MAINTAINER: ports@FreeBSD.org | |||||
# Usage: | |||||
# | |||||
# USES+= guile[:options,...] | |||||
# | |||||
# Options: | |||||
# | |||||
# X.Y specify a Guile version, e.g. 2.2 or 3.0 | |||||
# | |||||
# flavors define FLAVOR / FLAVORS as guileX from the allowed versions | |||||
# | |||||
# build add dependency to BUILD_DEPENDS instead of LIB_DEPENDS | |||||
# run add dependency to RUN_DEPENDS instead of LIB_DEPENDS | |||||
# | |||||
# env define only the GUIL[DE]_* vars and add them to PLIST_SUB, | |||||
# do not add dependencies or other global state | |||||
# | |||||
# alias add BINARY_ALIAS for guile tools | |||||
# | |||||
# noextra don't add _GUILE_EXTRA_LIB_DEPENDS | |||||
# | |||||
# nopkgconf don't add to PKGCONFIG_PATHS | |||||
# | |||||
# Variables defined for use by the port: | |||||
# | |||||
# GUILE_VER e.g. 2.2 | |||||
# GUILE_SFX e.g. 2 (be careful, consider the possibility of 3.1) | |||||
# GUILE_FLAVOR e.g. guile22 | |||||
# GUILE_PORT e.g. lang/guile2 | |||||
# GUILE_CMD name of guile binary, e.g. guile-2.2 | |||||
# GUILE_*_CMD name of guile-* binary (legacy) | |||||
# GUILD_CMD name of guild binary, e.g. guild-2.2 | |||||
# GUIL*_CMDPATH full paths of commands | |||||
# GUILE_PKGCONFIG_DIR directory for version-specific .pc files | |||||
# (relative to PREFIX or LOCALBASE) | |||||
# | |||||
.if !defined(_INCLUDE_USES_GUILE_MK) | |||||
_INCLUDE_USES_GUILE_MK= yes | |||||
# When adding a version, please keep the comment in | |||||
# Mk/bsd.default-versions.mk in sync. | |||||
_GUILE_VALID_VERSIONS:= 1.8 2.2 3.0 | |||||
. if defined(_GUILE_EXTRA_VER) | |||||
_GUILE_VALID_VERSIONS+= ${_GUILE_EXTRA_VER} | |||||
. endif | |||||
_GUILE_DEFAULT_VERSION:= ${GUILE_DEFAULT} | |||||
. if ! ${_GUILE_VALID_VERSIONS:M${_GUILE_DEFAULT_VERSION}} | |||||
IGNORE= Invalid default Guile version ${GUILE_DEFAULT} | |||||
. endif | |||||
# args | |||||
_GUILE_ARG_VERSIONS:= ${guile_ARGS:M[1-9].[0-9]} | |||||
_GUILE_ARG_FLAVORS:= | |||||
. if ${guile_ARGS:Mflavors} | |||||
_GUILE_ARG_FLAVORS:=yes | |||||
. endif | |||||
# | |||||
# Parse ver arguments | |||||
# | |||||
# If multiple versions are specified, we are either doing flavors (in | |||||
# which case we build them all) or we are supposed to pick one, in | |||||
# which case we pick the default version if it was specified, otherwise | |||||
# the highest. | |||||
# | |||||
_GUILE_CHOSEN_VER:= | |||||
_GUILE_REQUESTED_VERS:= | |||||
# check args for validity first | |||||
. for _v in ${_GUILE_ARG_VERSIONS} | |||||
. if ! ${_GUILE_VALID_VERSIONS:M${_v}} | |||||
IGNORE= Invalid Guile version ${_v} | |||||
. else | |||||
_GUILE_REQUESTED_VERS+= ${_v} | |||||
. endif | |||||
. endfor | |||||
. if ${_GUILE_ARG_FLAVORS} | |||||
# default to all versions (unlikely in practice) | |||||
. if empty(_GUILE_REQUESTED_VERS) | |||||
_GUILE_REQUESTED_VERS:= ${_GUILE_VALID_VERSIONS} | |||||
. endif | |||||
# Note that we organize the FLAVORS list so that the | |||||
# first one corresponds to the default version. | |||||
. if empty(FLAVORS) | |||||
FLAVORS=${_GUILE_DEFAULT_VERSION:S/.//:S/^/guile/} \ | |||||
${_GUILE_REQUESTED_VERS:N${_GUILE_DEFAULT_VERSION}:S/.//:S/^/guile/} | |||||
. endif | |||||
. if empty(FLAVOR) | |||||
FLAVOR= ${FLAVORS:[1]} | |||||
. endif | |||||
_GUILE_CHOSEN_VER:= ${FLAVOR:S/^guile//:C/./&./} | |||||
. else # !${_GUILE_ARG_FLAVORS} | |||||
# default to default version | |||||
. if empty(_GUILE_REQUESTED_VERS) | |||||
_GUILE_REQUESTED_VERS:= ${_GUILE_DEFAULT_VERSION} | |||||
. endif | |||||
_GUILE_CHOSEN_VER:= ${_GUILE_REQUESTED_VERS:M${_GUILE_DEFAULT_VERSION}} | |||||
. if empty(_GUILE_CHOSEN_VER) | |||||
_GUILE_CHOSEN_VER:= ${_GUILE_REQUESTED_VERS:O:[-1]} | |||||
. endif | |||||
. endif # ${_GUILE_ARG_FLAVORS} | |||||
# _GUILE_CHOSEN_VER is now the desired version in all cases. | |||||
# | |||||
# The GUILE_VER / GUILE_SFX here is the existing usage, but if a | |||||
# version 3.1 comes along, that'll all need to be revisited. | |||||
# | |||||
# GUILE_VER= 3.0 (for example) | |||||
# GUILE_SFX= 3 | |||||
# GUILE_FLAVOR= guile30 | |||||
GUILE_VER= ${_GUILE_CHOSEN_VER} | |||||
GUILE_SFX= ${_GUILE_CHOSEN_VER:R} | |||||
GUILE_PORT= lang/guile${GUILE_SFX} | |||||
GUILE_FLAVOR= guile${GUILE_VER:S/.//} | |||||
_GUILE_CMDNAMES:= guile guile-snarf guile-config guile-tools | |||||
. if ${GUILE_SFX} > 1 | |||||
_GUILE_CMDNAMES+= guild | |||||
. endif | |||||
. for _c in ${_GUILE_CMDNAMES} | |||||
${_c:S/-/_/:tu}_CMD:= ${_c}-${GUILE_VER} | |||||
${_c:S/-/_/:tu}_CMDPATH:= ${LOCALBASE}/bin/${_c}-${GUILE_VER} | |||||
. endfor | |||||
PLIST_SUB+= GUILE_VER=${GUILE_VER} GUILE_SFX=${GUILE_SFX} | |||||
# This may reduce the need for BINARY_ALIAS | |||||
GUILE_ENV= ${_GUILE_CMDNAMES:tu:S/-/_/:@t@${t}=${${t}_CMDPATH}@} | |||||
# XXX XXX XXX | |||||
# | |||||
# This all assumes that the underlying Guile >= 2 is built with the | |||||
# threading option, which is on by default. | |||||
_GUILE_1.8_EXTRA_LIB_DEPENDS= \ | |||||
libgmp.so:math/gmp \ | |||||
libltdl.so:devel/libltdl | |||||
_GUILE_2.2_EXTRA_LIB_DEPENDS= \ | |||||
libgc-threaded.so:devel/boehm-gc-threaded | |||||
_GUILE_3.0_EXTRA_LIB_DEPENDS= \ | |||||
libgc-threaded.so:devel/boehm-gc-threaded | |||||
. if ${guile_ARGS:Mnoextra} | |||||
_GUILE_EXTRA_LIB_DEPENDS?= | |||||
. else | |||||
_GUILE_EXTRA_LIB_DEPENDS= ${_GUILE_${GUILE_VER}_EXTRA_LIB_DEPENDS} | |||||
. endif | |||||
. if !${guile_ARGS:Menv} | |||||
. if ${guile_ARGS:Mbuild} | |||||
BUILD_DEPENDS+= ${GUILE_CMD}:${GUILE_PORT} | |||||
. endif | |||||
. if ${guile_ARGS:Mrun} | |||||
RUN_DEPENDS+= ${GUILE_CMD}:${GUILE_PORT} | |||||
. endif | |||||
. if !${guile_ARGS:Mbuild} && !${guile_ARGS:Mrun} | |||||
. if ${GUILE_SFX} > 1 | |||||
LIB_DEPENDS+= libguile-${GUILE_VER}.so:${GUILE_PORT} ${_GUILE_EXTRA_LIB_DEPENDS} | |||||
. else | |||||
LIB_DEPENDS+= libguile.so:${GUILE_PORT} ${_GUILE_EXTRA_LIB_DEPENDS} | |||||
. endif | |||||
. endif | |||||
. endif | |||||
. if ${guile_ARGS:Malias} | |||||
BINARY_ALIAS+= ${_GUILE_CMDNAMES:@t@${t}=${${t:tu:S/-/_/}_CMD}@} | |||||
. else | |||||
CONFIGURE_ENV+= ${GUILE_ENV} | |||||
MAKE_ENV+= ${GUILE_ENV} | |||||
. endif | |||||
. if !${guile_ARGS:Mnopkgconf} | |||||
GUILE_PKGCONFIG_DIR:= libdata/pkgconfig/guile/${GUILE_VER} | |||||
PKGCONFIG_PATHS+= ${LOCALBASE}/${GUILE_PKGCONFIG_DIR} | |||||
PLIST_SUB+= GUILE_PKGCONFIG_DIR=${GUILE_PKGCONFIG_DIR} | |||||
. endif | |||||
.endif |