1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-13 03:03:15 +00:00
freebsd-ports/Mk/Uses/gssapi.mk
2014-12-02 23:45:15 +00:00

181 lines
5.3 KiB
Makefile

# $FreeBSD$
#
# handle dependency on Kerberos port
#
# Feature: gssapi
# Usage: USES=gssapi or USES=gssapi:ARGS
# Valid ARGS: base (default, implicit), heimdal, mit.
# "bootstrap" is a special prefix only for krb5 or heimdal ports.
# ("bootstrap,mit")
# flags is a special suffix to define CFLAGS, LDFLAGS, and LDADD.
# ("base,flags")
#
# MAINTAINER: hrs@FreeBSD.org
#
# User defined variables:
# HEIMDAL_HOME (default: ${LOCALBASE})
# KRB5_HOME (default: ${LOCALBASE})
#
# Exported variables:
# GSSAPIBASEDIR
# GSSAPICPPFLAGS
# GSSAPIINCDIR
# GSSAPILDFLAGS
# GSSAPILIBDIR
# GSSAPILIBS
# GSSAPI_CONFIGURE_ARGS
#
# Affected variables:
# PREFIX (bootstrap)
# CPPFLAGS (flags)
# LDADD (flags)
# LDCFLAGS
#
# Notes:
# - GSSAPILIBDIR is prepended to "-Wl,-rpath," in LDFLAGS.
# - bootstrap sets PREFIX based on KRB5_HOME or HEIMDAL_HOME.
#
# Usage:
#
# A typical example:
#
# OPTIONS_SINGLE= GSSAPI
# OPTIONS_SINGLE_GSSAPI= GSSAPI_BASE GSSAPI_HEIMDAL GSSAPI_MIT GSSAPI_NONE
#
# GSSAPI_BASE_USES= gssapi
# GSSAPI_BASE_CONFIGURE_ON= \
# --with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}
#
# GSSAPI_HEIMDAL_USES=gssapi:heimdal
# GSSAPI_HEIMDAL_CONFIGURE_ON= \
# --with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}
#
# GSSAPI_MIT_USES= gssapi:mit
# GSSAPI_MIT_CONFIGURE_ON= \
# --with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}
#
# GSSAPI_NONE_CONFIGURE_ON= --without-gssapi
#
# If pathname is required for Kerberos implementation, use ${GSSAPIBASEDIR}.
#
# CPPFLAGS, LDFLAGS, and LDADD can automatically be set by using "flags"
# modifier. It is useful if the port does not use a configure script.
#
# How To Debug:
#
# A port maintainer can try "make debug-krb" to confirm if building
# a GSSAPI library works fine. It will perform a library link test and
# show which library and what parameters will be used.
# If it works but your port does not build, some parameters are missing in
# the building phase of the port. If it does not work, the problem is in
# the GSSAPI library, not your port. Please contact MAINTAINER of this file
# in that case.
#
.if !defined(_INCLUDE_USES_GSSAPI_MK)
_INCLUDE_USES_GSSAPI_MK= yes
_HEIMDAL_DEPENDS=${GSSAPILIBDIR}/libgssapi.so:${PORTSDIR}/security/heimdal
_MITKRB5_DEPENDS=${GSSAPILIBDIR}/libkrb5support.so:${PORTSDIR}/security/krb5
_HEADERS= sys/types.h sys/stat.h stdint.h
.if empty(gssapi_ARGS)
gssapi_ARGS= base
.endif
.for _A in ${gssapi_ARGS}
_local:= ${_A}
.if ${_local} == "base"
HEIMDAL_HOME= /usr
GSSAPIBASEDIR= ${HEIMDAL_HOME}
GSSAPILIBDIR= ${GSSAPIBASEDIR}/lib
GSSAPIINCDIR= ${GSSAPIBASEDIR}/include
_HEADERS+= gssapi/gssapi.h gssapi/gssapi_krb5.h krb5.h
GSSAPICPPFLAGS= -I"${GSSAPIINCDIR}"
GSSAPILIBS= -lkrb5 -lgssapi -lgssapi_krb5
GSSAPILDFLAGS= -L"${GSSAPILIBDIR}"
.elif ${_local} == "heimdal"
HEIMDAL_HOME?= ${LOCALBASE}
GSSAPIBASEDIR= ${HEIMDAL_HOME}
GSSAPILIBDIR= ${GSSAPIBASEDIR}/lib/heimdal
GSSAPIINCDIR= ${GSSAPIBASEDIR}/include/heimdal
_HEADERS+= gssapi/gssapi.h gssapi/gssapi_krb5.h krb5.h
.if !defined(_KRB_BOOTSTRAP)
BUILD_DEPENDS+= ${_HEIMDAL_DEPENDS}
RUN_DEPENDS+= ${_HEIMDAL_DEPENDS}
.else
PREFIX= ${HEIMDAL_HOME}
.endif
GSSAPICPPFLAGS= -I"${GSSAPIINCDIR}"
GSSAPILIBS= -lkrb5 -lgssapi
GSSAPILDFLAGS= -L"${GSSAPILIBDIR}"
_RPATH= ${GSSAPILIBDIR}
.elif ${_local} == "mit"
KRB5_HOME?= ${LOCALBASE}
GSSAPIBASEDIR= ${KRB5_HOME}
GSSAPILIBDIR= ${GSSAPIBASEDIR}/lib
GSSAPIINCDIR= ${GSSAPIBASEDIR}/include
_HEADERS+= gssapi/gssapi.h gssapi/gssapi_krb5.h krb5.h
.if !defined(_KRB_BOOTSTRAP)
BUILD_DEPENDS+= ${_MITKRB5_DEPENDS}
RUN_DEPENDS+= ${_MITKRB5_DEPENDS}
.else
PREFIX= ${KRB5_HOME}
.endif
GSSAPILIBS= -lkrb5 -lgssapi_krb5
GSSAPICPPFLAGS= -I"${GSSAPIINCDIR}"
GSSAPILDFLAGS= -L"${GSSAPILIBDIR}"
_RPATH= ${GSSAPILIBDIR}
.elif ${_local} == "bootstrap"
_KRB_BOOTSTRAP= 1
.elif ${_local} == "flags"
_KRB_USEFLAGS= 1
.else
IGNORE= USES=gssapi - invalid args: [${_local}] specified
.endif
.endfor
# Fix up -Wl,-rpath in LDFLAGS
.if defined(_RPATH) && !empty(_RPATH)
.if !empty(LDFLAGS:M-Wl,-rpath,*)
.for F in ${LDFLAGS:M-Wl,-rpath,*}
LDFLAGS:= -Wl,-rpath,${_RPATH}:${F:S/-Wl,-rpath,//} \
${LDFLAGS:N-Wl,-rpath,*}
.endfor
.else
LDFLAGS+= -Wl,-rpath,${_RPATH}:/usr/lib
.endif
_DEBUG_KRB_RPATH= -Wl,-rpath,${_RPATH}
.endif
.if defined(_KRB_USEFLAGS) && !empty(_KRB_USEFLAGS)
CPPFLAGS+= ${GSSAPICPPFLAGS}
LDFLAGS+= ${GSSAPILDFLAGS}
LDADD+= ${GSSAPILIBS}
.endif
GSSAPI_CONFIGURE_ARGS= \
CFLAGS="${GSSAPICPPFLAGS} ${CFLAGS}" \
LDFLAGS="${GSSAPILDFLAGS} ${LDFLAGS}" \
LIBS="${GSSAPILIBS} ${LIBS}"
debug-krb:
@(for I in ${_HEADERS}; do echo "#include <$$I>"; done; \
echo "int main() { gss_acquire_cred(0, 0, 0, 0, 0, 0, 0, 0);" \
"krb5_init_context(0);" \
"gsskrb5_register_acceptor_identity(0); return 0;}" \
) > /tmp/${.TARGET}.c
${CC} ${CFLAGS} -o /tmp/${.TARGET}.x ${GSSAPICPPFLAGS} \
${GSSAPILIBS} ${GSSAPILDFLAGS} ${_DEBUG_KRB_RPATH} \
/tmp/${.TARGET}.c && \
ldd /tmp/${.TARGET}.x; \
rm -f /tmp/${.TARGET}.x
@echo "PREFIX: ${PREFIX}"
@echo "GSSAPIBASEDIR: ${GSSAPIBASEDIR}"
@echo "GSSAPIINCDIR: ${GSSAPIINCDIR}"
@echo "GSSAPILIBDIR: ${GSSAPILIBDIR}"
@echo "GSSAPILIBS: ${GSSAPILIBS}"
@echo "GSSAPICPPFLAGS: ${GSSAPICPPFLAGS}"
@echo "GSSAPILDFLAGS: ${GSSAPILDFLAGS}"
@echo "GSSAPI_CONFIGURE_ARGS: ${GSSAPI_CONFIGURE_ARGS}"
@echo "CFLAGS: ${CFLAGS}"
@echo "LDFLAGS: ${LDFLAGS}"
@echo "LDADD: ${LDADD}"
.endif