7fa2565590
flag _OPSYS_PTHREAD_AUTO ("yes" for Darwin, "no" for everyone else) and make pthread.buildlink2.mk do basically nothing in that case.
217 lines
7.1 KiB
Makefile
217 lines
7.1 KiB
Makefile
# $NetBSD: pthread.buildlink2.mk,v 1.16 2003/09/14 16:30:34 danw Exp $
|
|
#
|
|
# The pthreads strategy for pkgsrc is to "bless" a particular pthread
|
|
# package as the Official Pthread Replacement (OPR). A package that uses
|
|
# pthreads may do one of the following:
|
|
#
|
|
# (1) Simply include pthread.buildlink2.mk. This will make the package
|
|
# use the native pthread library if it's available, or else the OPR
|
|
# package. The value of PTHREAD_TYPE may be checked to be either
|
|
# "native", or the name of the OPR package, or "none", e.g.
|
|
#
|
|
# #
|
|
# # package Makefile stuff...
|
|
# #
|
|
# .include "../../mk/pthread.buildlink2.mk"
|
|
#
|
|
# .if defined(PTHREAD_TYPE) && ${PTHREAD_TYPE} == "none"
|
|
# CONFIGURE_ARGS+= --without-pthreads
|
|
# .endif
|
|
#
|
|
# .include "../../mk/bsd.pkg.mk"
|
|
#
|
|
# Note that it's only safe to check and use the value of PTHREAD_TYPE
|
|
# after all other buildlink2.mk files have been included.
|
|
#
|
|
# (2) Add "native" to PTHREAD_OPTS prior to including
|
|
# pthread.buildlink2.mk. This is like case (1), but we only check for
|
|
# the native pthread library, e.g.,
|
|
#
|
|
# PTHREAD_OPTS+= native
|
|
# #
|
|
# # package Makefile stuff...
|
|
# #
|
|
# .include "../../mk/pthread.buildlink2.mk"
|
|
#
|
|
# .if defined(PTHREAD_TYPE) && ${PTHREAD_TYPE} == "none"
|
|
# CONFIGURE_ARGS+= --without-pthreads
|
|
# .endif
|
|
#
|
|
# .include "../../mk/bsd.pkg.mk"
|
|
#
|
|
# (3) Add "require" to PTHREAD_OPTS prior to including
|
|
# pthread.buildlink2.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
|
|
# #
|
|
# # package Makefile stuff...
|
|
# #
|
|
# .include "../../mk/pthread.buildlink2.mk"
|
|
# .include "../../mk/bsd.pkg.mk"
|
|
#
|
|
# (4) Add both "require" and "native" to PTHREAD_OPTS prior to including
|
|
# pthread.buildlink2.mk. This is like case (3), but we only check for
|
|
# the native pthread library, e.g.,
|
|
#
|
|
# PTHREAD_OPTS+= require native
|
|
# #
|
|
# # more package Makefile stuff...
|
|
# #
|
|
# .include "../../mk/pthread.buildlink2.mk"
|
|
# .include "../../mk/bsd.pkg.mk"
|
|
#
|
|
# 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.,
|
|
# if the required pthread package is "ptl2", then:
|
|
#
|
|
# PTHREAD_OPTS+= native
|
|
# #
|
|
# # more package Makefile stuff...
|
|
# #
|
|
# .include "../../mk/pthread.buildlink2.mk"
|
|
#
|
|
# .if defined(PTHREAD_TYPE) && ${PTHREAD_TYPE} == "none"
|
|
# . include "../../devel/ptl2/buildlink2.mk"
|
|
# .endif
|
|
#
|
|
# .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.buildlink2.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.
|
|
#
|
|
_PKG_PTHREAD?= pth
|
|
_PKG_PTHREAD_DEPENDS?= pth>=2.0.0
|
|
_PKG_PTHREAD_PKGSRCDIR?= ../../devel/${_PKG_PTHREAD}
|
|
_PKG_PTHREAD_BUILDLINK2_MK?= ${_PKG_PTHREAD_PKGSRCDIR}/buildlink2.mk
|
|
_PKG_PTHREAD_COMPAT_PATTERNS= *-*-*
|
|
|
|
.include "../../mk/bsd.prefs.mk"
|
|
|
|
PTHREAD_OPTS?= # empty
|
|
#
|
|
# We check for a native pthreads implementation by checking for the presence
|
|
# of /usr/include/pthread.h (we might want to make this check stricter).
|
|
#
|
|
.undef PTHREAD_TYPE
|
|
PREFER_NATIVE_PTHREADS?= YES
|
|
.if ${_OPSYS_PTHREAD_AUTO} == "yes"
|
|
PTHREAD_TYPE= automatic
|
|
.elif exists(/usr/include/pthread.h) && ${PREFER_NATIVE_PTHREADS} == "YES"
|
|
PTHREAD_TYPE= native
|
|
.else
|
|
. if !empty(PTHREAD_OPTS:Mnative)
|
|
PTHREAD_TYPE= none
|
|
. if !empty(PTHREAD_OPTS:Mrequire) && empty(PTHREAD_OPTS:Moptional)
|
|
PKG_SKIP_REASON= "${PKGNAME} requires a native pthreads implementation."
|
|
. endif
|
|
. else
|
|
PTHREAD_TYPE= none
|
|
. for _pattern_ in ${_PKG_PTHREAD_COMPAT_PATTERNS}
|
|
. if !empty(MACHINE_PLATFORM:M${_pattern_})
|
|
PTHREAD_TYPE= ${_PKG_PTHREAD}
|
|
. endif
|
|
. endfor
|
|
. if ${PTHREAD_TYPE} == "none" && \
|
|
!empty(PTHREAD_OPTS:Mrequire) && empty(PTHREAD_OPTS:Moptional)
|
|
PKG_SKIP_REASON= "${PKGNAME} requires a working pthreads implementation."
|
|
. endif
|
|
. endif
|
|
.endif
|
|
|
|
.if !defined(PTHREAD_BUILDLINK2_MK)
|
|
PTHREAD_BUILDLINK2_MK= # defined
|
|
|
|
.if ${PTHREAD_TYPE} == "native"
|
|
#
|
|
# Link the native pthread libraries and headers into ${BUILDLINK_DIR}.
|
|
#
|
|
BUILDLINK_PREFIX.pthread= /usr
|
|
BUILDLINK_FILES.pthread= include/pthread.h
|
|
BUILDLINK_FILES.pthread+= lib/libpthread.*
|
|
|
|
BUILDLINK_TARGETS+= pthread-buildlink
|
|
BUILDLINK_TARGETS+= pthread-buildlink-la
|
|
|
|
BUILDLINK_CFLAGS.pthread= -pthread
|
|
|
|
# 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_LDFLAGS.pthread= -lpthread
|
|
LIBTOOL_ARCHIVE_UNTRANSFORM_SED+= \
|
|
-e "s|${BUILDLINK_PREFIX.pthread}/lib/libpthread.la|-lpthread|g" \
|
|
-e "s|${LOCALBASE}/lib/libpthread.la|-lpthread|g"
|
|
. else
|
|
. if exists(/usr/lib/libc_r.so)
|
|
BUILDLINK_LDFLAGS.pthread= -lc_r
|
|
LIBTOOL_ARCHIVE_UNTRANSFORM_SED+= \
|
|
-e "s|${BUILDLINK_PREFIX.pthread}/lib/libpthread.la|-lc_r|g" \
|
|
-e "s|${LOCALBASE}/lib/libpthread.la|-lc_r|g"
|
|
. else
|
|
BUILDLINK_LDFLAGS.pthread= # empty
|
|
LIBTOOL_ARCHIVE_UNTRANSFORM_SED+= \
|
|
-e "s|${BUILDLINK_PREFIX.pthread}/lib/libpthread.la||g" \
|
|
-e "s|${LOCALBASE}/lib/libpthread.la||g"
|
|
. endif
|
|
. endif
|
|
|
|
pthread-buildlink: _BUILDLINK_USE
|
|
|
|
pthread-buildlink-la:
|
|
${_PKG_SILENT}${_PKG_DEBUG} \
|
|
lafile="${BUILDLINK_DIR}/lib/libpthread.la"; \
|
|
libpattern="${BUILDLINK_PREFIX.pthread}/lib/libpthread.*"; \
|
|
${BUILDLINK_FAKE_LA}
|
|
|
|
.elif ${PTHREAD_TYPE} == "${_PKG_PTHREAD}"
|
|
. if exists(${_PKG_PTHREAD_BUILDLINK2_MK})
|
|
. if !empty(_PKG_PTHREAD_DEPENDS)
|
|
BUILDLINK_DEPENDS.${_PKG_PTHREAD}= ${_PKG_PTHREAD_DEPENDS}
|
|
. endif
|
|
BUILDLINK_PREFIX.pthread= ${BUILDLINK_PREFIX.${_PKG_PTHREAD}}
|
|
BUILDLINK_CFLAGS.pthread= ${BUILDLINK_CFLAGS.${_PKG_PTHREAD}}
|
|
BUILDLINK_LDFLAGS.pthread= -lpthread
|
|
. include "${_PKG_PTHREAD_BUILDLINK2_MK}"
|
|
. else
|
|
PKG_SKIP_REASON= "${PKGNAME} needs pthreads, but ${_PKG_PTHREAD_BUILDLINK2_MK} is missing."
|
|
. endif
|
|
|
|
.elif ${PTHREAD_TYPE} == "automatic"
|
|
BUILDLINK_PREFIX.pthread= /usr
|
|
|
|
.endif
|
|
|
|
# Define user-visible PTHREAD_CFLAGS and PTHREAD_LDFLAGS as compiler
|
|
# options used to compile/link pthreaded code.
|
|
#
|
|
PTHREAD_CFLAGS= ${BUILDLINK_CFLAGS.pthread}
|
|
PTHREAD_LDFLAGS=${BUILDLINK_LDFLAGS.pthread}
|
|
|
|
PTHREADBASE= ${BUILDLINK_PREFIX.pthread}
|
|
CONFIGURE_ENV+= PTHREADBASE=${PTHREADBASE}
|
|
MAKE_ENV+= PTHREADBASE=${PTHREADBASE}
|
|
|
|
.endif # PTHREAD_BUILDLINK2_MK
|