version 1.12, 2004/11/10 17:29:37 |
version 1.24, 2006/07/08 23:11:17 |
|
|
# $NetBSD$ |
# $NetBSD$ |
# |
# |
# The pthreads strategy for pkgsrc is to "bless" a particular pthread |
# The pthreads strategy for pkgsrc is to "bless" a particular pthread |
# package as the Official Pthread Replacement (OPR). A package that uses |
# package as the Official Pthread Replacement (OPR). The following |
# pthreads may do one of the following: |
# variables may be set before including this file: |
# |
# |
# (1) Simply include pthread.buildlink3.mk. This will make the package |
# PTHREAD_OPTS?= # empty |
# use the native pthread library if it's available, or else the OPR |
# A list of options to configure the search for a suitable pthreads |
# package. The value of PTHREAD_TYPE may be checked to be either |
# implementation. |
# "native", or the name of the OPR package, or "none", e.g. |
|
# |
# |
# # |
# "native" means that only a native pthreads implementation is |
# # package Makefile stuff... |
# acceptable. |
# # |
|
# .include "../../mk/pthread.buildlink3.mk" |
|
# |
# |
# .if defined(PTHREAD_TYPE) && ${PTHREAD_TYPE} == "none" |
# "optional" will override the effects of any instance of |
# CONFIGURE_ARGS+= --without-pthreads |
# "require". This should _only_ be used by those packages |
# .endif |
# that can be built with or without pthreads independently |
|
# of whether any of its dependencies need pthreads. |
|
# Currently, this is only www/mozilla, which uses its own |
|
# threading library if native pthreads are unavailable, |
|
# despite that it uses GTK+, which _does_ need pthreads. |
# |
# |
# .include "../../mk/bsd.pkg.mk" |
# "require" means that the package is skipped silently when no |
|
# implementation can be found. |
# |
# |
# Note that it's only safe to check and use the value of PTHREAD_TYPE |
# By default, the native pthreads implementation is used if it's |
# after all other buildlink3.mk files have been included. |
# available. Otherwise the OPR is used. |
# |
# |
# (2) Add "native" to PTHREAD_OPTS prior to including |
# PTHREAD_AUTO_VARS?= no |
# pthread.buildlink3.mk. This is like case (1), but we only check for |
# This variable specifies whether the values of the variables |
# the native pthread library, e.g., |
# PTHREAD_{CFLAGS,CPPFLAGS,LDFLAGS,LIBS} should be automatically |
|
# added to their respective variables. |
# |
# |
# PTHREAD_OPTS+= native |
# After inclusion of this file, the following variables may be examined: |
# # |
|
# # package Makefile stuff... |
|
# # |
|
# .include "../../mk/pthread.buildlink3.mk" |
|
# |
# |
# .if defined(PTHREAD_TYPE) && ${PTHREAD_TYPE} == "none" |
# PTHREAD_TYPE |
# CONFIGURE_ARGS+= --without-pthreads |
# The type of pthreads implementation that has been found. |
# .endif |
|
# |
|
# .include "../../mk/bsd.pkg.mk" |
|
# |
# |
# (3) Add "require" to PTHREAD_OPTS prior to including |
# "native" means that the native pthreads implementation is used. |
# pthread.buildlink3.mk. This will make the package use the native |
|
# pthread library or else use the OPR package, and will otherwise set |
|
# PKG_SKIP_REASON if neither can be used, e.g., |
|
# |
# |
# PTHREAD_OPTS+= require |
# "none" means that no suitable pthreads implementation could be |
# # |
# found. |
# # package Makefile stuff... |
|
# # |
|
# .include "../../mk/pthread.buildlink3.mk" |
|
# .include "../../mk/bsd.pkg.mk" |
|
# |
# |
# (4) Add both "require" and "native" to PTHREAD_OPTS prior to including |
# Any other value is the name of the package that is used as the |
# pthread.buildlink3.mk. This is like case (3), but we only check for |
# pthread implementation. |
# the native pthread library, e.g., |
|
# |
# |
# PTHREAD_OPTS+= require native |
# Note that it's only safe to check and use the value of PTHREAD_TYPE |
# # |
# after all other buildlink3.mk files have been included. |
# # more package Makefile stuff... |
|
# # |
|
# .include "../../mk/pthread.buildlink3.mk" |
|
# .include "../../mk/bsd.pkg.mk" |
|
# |
# |
# The case where a package must use either the native pthread library or |
# The case where a package must use either the native pthread library or |
# some pthread package aside from the OPR is a special case of (2), e.g., |
# some pthread package aside from the OPR (e.g. "ptl2") can be solved as |
# if the required pthread package is "ptl2", then: |
# follows: |
# |
# |
# PTHREAD_OPTS+= native |
# PTHREAD_OPTS+= native |
# # |
# # |
|
|
# .endif |
# .endif |
# |
# |
# .include "../../mk/bsd.pkg.mk" |
# .include "../../mk/bsd.pkg.mk" |
# |
|
# A package Makefile may add the word "optional" to PTHREAD_OPTS, which |
|
# will override the effects of any instance of the word "require". This |
|
# should _only_ be used by those packages that can be built with or |
|
# without pthreads _independently_ of whether any of its dependencies need |
|
# pthreads. Currently, this only only www/mozilla, which uses its own |
|
# threading library if native pthreads is unavailable, despite that it |
|
# uses GTK+, which _does_ need pthreads. |
|
# |
|
########################################################################### |
|
# |
|
# PTHREAD_OPTS represents whether this package requires pthreads, and also |
|
# whether it needs to be native. It may include the word "require" |
|
# to denote that a pthreads implementation is required, and may also |
|
# include the word "native" to denote that only native pthreads are |
|
# acceptable. |
|
# |
|
# _PKG_PTHREAD is the fall-back package pthread implementation use by |
|
# pthread.buildlink3.mk. |
|
# |
|
# _PKG_PTHREAD_COMPAT_PATTERNS matches the ONLY_FOR_PLATFORMS from the |
|
# Makefile for ${_PKG_PTHREAD}. It's used to see if ${_PKG_PTHREADS} |
|
# can actually be used to replace a native pthreads. |
|
# |
|
PTHREAD_BUILDLINK3_MK:= ${PTHREAD_BUILDLINK3_MK}+ |
PTHREAD_BUILDLINK3_MK:= ${PTHREAD_BUILDLINK3_MK}+ |
|
|
|
# The fall-back package pthread implementation |
_PKG_PTHREAD?= pth |
_PKG_PTHREAD?= pth |
_PKG_PTHREAD_DEPENDS?= pth>=2.0.0 |
_PKG_PTHREAD_DEPENDS?= pth>=2.0.0 |
_PKG_PTHREAD_PKGSRCDIR?= ../../devel/${_PKG_PTHREAD} |
_PKG_PTHREAD_PKGSRCDIR?= ../../devel/${_PKG_PTHREAD} |
_PKG_PTHREAD_BUILDLINK3_MK?= ${_PKG_PTHREAD_PKGSRCDIR}/buildlink3.mk |
_PKG_PTHREAD_BUILDLINK3_MK?= ${_PKG_PTHREAD_PKGSRCDIR}/buildlink3.mk |
|
|
|
# _PKG_PTHREAD_COMPAT_PATTERNS matches the ONLY_FOR_PLATFORMS from the |
|
# Makefile for ${_PKG_PTHREAD}. It is used to see if ${_PKG_PTHREADS} |
|
# can actually be used to replace a native pthreads. |
_PKG_PTHREAD_COMPAT_PATTERNS= *-*-* |
_PKG_PTHREAD_COMPAT_PATTERNS= *-*-* |
|
|
.include "../../mk/bsd.prefs.mk" |
.include "../../mk/bsd.prefs.mk" |
Line 117 PTHREAD_OPTS?= # empty |
|
Line 83 PTHREAD_OPTS?= # empty |
|
# of /usr/include/pthread.h (we might want to make this check stricter). |
# of /usr/include/pthread.h (we might want to make this check stricter). |
# |
# |
.undef PTHREAD_TYPE |
.undef PTHREAD_TYPE |
PREFER_NATIVE_PTHREADS?= YES |
.if exists(/usr/include/pthread.h) && \ |
.if exists(/usr/include/pthread.h) && ${PREFER_NATIVE_PTHREADS} == "YES" |
!empty(PREFER_NATIVE_PTHREADS:M[yY][eE][sS]) |
PTHREAD_TYPE= native |
PTHREAD_TYPE= native |
.else |
.else |
. if !empty(PTHREAD_OPTS:Mnative) |
. if !empty(PTHREAD_OPTS:Mnative) |
Line 140 PKG_SKIP_REASON= "${PKGNAME} requires a |
|
Line 106 PKG_SKIP_REASON= "${PKGNAME} requires a |
|
. endif |
. endif |
.endif |
.endif |
|
|
.if ${PTHREAD_TYPE} == "native" |
PTHREAD_AUTO_VARS?= no |
BUILDLINK_PACKAGES:= ${BUILDLINK_PACKAGES:Npthread} |
|
BUILDLINK_PACKAGES+= pthread |
|
# |
|
# Link the native pthread libraries and headers into ${BUILDLINK_DIR}. |
|
# |
|
BUILDLINK_PREFIX.pthread= /usr |
|
BUILDLINK_LDFLAGS.pthread= # empty |
|
|
|
# only pass -pthread on platforms known to support it. |
|
. if ${OPSYS} == "FreeBSD" || ${OPSYS} == "Linux" || ${OPSYS} == "NetBSD" |
|
BUILDLINK_CFLAGS.pthread= -pthread |
|
. else |
|
BUILDLINK_CFLAGS.pthread= # empty |
|
. endif |
|
|
|
# |
|
# Handle systems which have pthreads functions in libc_r such as |
|
# FreeBSD 5.x, or fall back to libc if we don't find libc_r. |
|
# |
|
. if exists(/usr/lib/libpthread.so) || exists(/lib/libpthread.so) |
|
BUILDLINK_LDADD.pthread= -lpthread |
|
. elif exists(/usr/lib/libc_r.so) |
|
BUILDLINK_LDADD.pthread= -lc_r |
|
# In OpenBSD there is no libpthread.so, just libpthread.so.X.X. |
|
. elif ${OPSYS} == "OpenBSD" |
|
_CHECK_LIBPTH!= \ |
|
if ${TEST} -f /usr/lib/libpthread.so.*; then \ |
|
${ECHO} "yes"; \ |
|
else \ |
|
${ECHO} "no"; \ |
|
fi |
|
. if ${_CHECK_LIBPTH} == "yes" |
|
BUILDLINK_LDADD.pthread= -lpthread |
|
. endif |
|
. else |
|
BUILDLINK_LDADD.pthread= # empty |
|
. endif |
|
|
|
|
.if ${PTHREAD_TYPE} == "native" |
|
BUILDLINK_PACKAGES:= ${BUILDLINK_PACKAGES:Npthread} |
|
BUILDLINK_PACKAGES+= pthread |
|
BUILDLINK_ORDER:= ${BUILDLINK_ORDER} ${BUILDLINK_DEPTH}pthread |
|
BUILDLINK_BUILTIN_MK.pthread= ../../mk/pthread.builtin.mk |
|
BUILDLINK_AUTO_VARS.pthread?= ${PTHREAD_AUTO_VARS} |
.elif ${PTHREAD_TYPE} == "${_PKG_PTHREAD}" |
.elif ${PTHREAD_TYPE} == "${_PKG_PTHREAD}" |
. if exists(${_PKG_PTHREAD_BUILDLINK3_MK}) |
. if exists(${_PKG_PTHREAD_BUILDLINK3_MK}) |
. if !empty(_PKG_PTHREAD_DEPENDS) |
. if !empty(_PKG_PTHREAD_DEPENDS) |
BUILDLINK_DEPENDS.${_PKG_PTHREAD}+= ${_PKG_PTHREAD_DEPENDS} |
BUILDLINK_API_DEPENDS.${_PKG_PTHREAD}+= ${_PKG_PTHREAD_DEPENDS} |
. endif |
. endif |
BUILDLINK_PREFIX.pthread= ${BUILDLINK_PREFIX.${_PKG_PTHREAD}} |
|
BUILDLINK_CFLAGS.pthread= ${BUILDLINK_CFLAGS.${_PKG_PTHREAD}} |
|
BUILDLINK_LDFLAGS.pthread= ${BUILDLINK_LDFLAGS.${_PKG_PTHREAD}} |
|
BUILDLINK_LDADD.pthread= -lpthread |
|
. include "${_PKG_PTHREAD_BUILDLINK3_MK}" |
. include "${_PKG_PTHREAD_BUILDLINK3_MK}" |
|
BUILDLINK_PREFIX.pthread= ${BUILDLINK_PREFIX.${_PKG_PTHREAD}} |
|
BUILDLINK_CFLAGS.pthread= ${BUILDLINK_CFLAGS.${_PKG_PTHREAD}} |
|
BUILDLINK_CPPFLAGS.${_PKG_PTHREAD}?= -D_REENTRANT |
|
BUILDLINK_CPPFLAGS.pthread= ${BUILDLINK_CPPFLAGS.${_PKG_PTHREAD}} |
|
BUILDLINK_LDFLAGS.pthread= ${BUILDLINK_LDFLAGS.${_PKG_PTHREAD}} |
|
BUILDLINK_LIBS.${_PKG_PTHREAD}?= -lpthread |
|
BUILDLINK_LIBS.pthread= ${BUILDLINK_LIBS.${_PKG_PTHREAD}} |
|
BUILDLINK_AUTO_VARS.${_PKG_PTHREAD}?= ${PTHREAD_AUTO_VARS} |
|
BUILDLINK_AUTO_VARS.pthread= ${BUILDLINK_AUTO_VARS.${_PKG_PTHREAD}} |
. else |
. else |
PKG_SKIP_REASON= "${PKGNAME} needs pthreads, but ${_PKG_PTHREAD_BUILDLINK3_MK} is missing." |
PKG_SKIP_REASON= ${PKGNAME:Q}" needs pthreads, but "${_PKG_PTHREAD_BUILDLINK3_MK:Q}" is missing." |
. endif |
. endif |
.endif |
.endif |
|
|
.if !empty(PTHREAD_BUILDLINK3_MK:M+) |
.if !empty(PTHREAD_BUILDLINK3_MK:M+) |
# |
# |
# Define user-visible PTHREAD_CFLAGS and PTHREAD_LDFLAGS as compiler |
# Define user-visible PTHREAD_{CFLAGS,LDFLAGS,LIBS} as compiler options |
# options used to compile/link pthreaded code. |
# used to compile/link pthreaded code. |
# |
# |
PTHREAD_CFLAGS= ${BUILDLINK_CFLAGS.pthread} |
PTHREAD_CFLAGS= ${BUILDLINK_CFLAGS.pthread} |
PTHREAD_LDFLAGS= ${BUILDLINK_LDFLAGS.pthread} ${BUILDLINK_LDADD.pthread} |
PTHREAD_CFLAGS+= ${BUILDLINK_CPPFLAGS.pthread} |
|
PTHREAD_LDFLAGS= ${BUILDLINK_LDFLAGS.pthread} |
|
PTHREAD_LIBS= ${BUILDLINK_LIBS.pthread} |
|
CONFIGURE_ENV+= PTHREAD_CFLAGS=${PTHREAD_CFLAGS:Q} |
|
CONFIGURE_ENV+= PTHREAD_LDFLAGS=${PTHREAD_LDFLAGS:Q} |
|
CONFIGURE_ENV+= PTHREAD_LIBS=${PTHREAD_LIBS:Q} |
|
MAKE_ENV+= PTHREAD_CFLAGS=${PTHREAD_CFLAGS:Q} |
|
MAKE_ENV+= PTHREAD_LDFLAGS=${PTHREAD_LDFLAGS:Q} |
|
MAKE_ENV+= PTHREAD_LIBS=${PTHREAD_LIBS:Q} |
|
|
PTHREADBASE= ${BUILDLINK_PREFIX.pthread} |
PTHREADBASE= ${BUILDLINK_PREFIX.pthread} |
CONFIGURE_ENV+= PTHREADBASE=${PTHREADBASE} |
CONFIGURE_ENV+= PTHREADBASE=${PTHREADBASE:Q} |
MAKE_ENV+= PTHREADBASE=${PTHREADBASE} |
MAKE_ENV+= PTHREADBASE=${PTHREADBASE:Q} |
|
|
.endif # PTHREAD_BUILDLINK3_MK |
.endif # PTHREAD_BUILDLINK3_MK |