3 # handle dependency on Kerberos port
6 # Usage: USES=gssapi or USES=gssapi:ARGS
7 # Valid ARGS: base (default, implicit), heimdal, mit.
8 # "bootstrap" is a special prefix only for krb5 or heimdal ports.
10 # flags is a special suffix to define CFLAGS, LDFLAGS, and LDADD.
13 # MAINTAINER: hrs@FreeBSD.org
15 # User defined variables:
16 # HEIMDAL_HOME (default: ${LOCALBASE})
17 # KRB5_HOME (default: ${LOCALBASE})
26 # GSSAPI_CONFIGURE_ARGS
36 # - GSSAPILIBDIR is prepended to "-Wl,-rpath," in LDFLAGS.
37 # - bootstrap sets PREFIX based on KRB5_HOME or HEIMDAL_HOME.
43 # OPTIONS_SINGLE= GSSAPI
44 # OPTIONS_SINGLE_GSSAPI= GSSAPI_BASE GSSAPI_HEIMDAL GSSAPI_MIT GSSAPI_NONE
46 # GSSAPI_BASE_USES= gssapi
47 # GSSAPI_BASE_CONFIGURE_ON= \
48 # --with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}
50 # GSSAPI_HEIMDAL_USES=gssapi:heimdal
51 # GSSAPI_HEIMDAL_CONFIGURE_ON= \
52 # --with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}
54 # GSSAPI_MIT_USES= gssapi:mit
55 # GSSAPI_MIT_CONFIGURE_ON= \
56 # --with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}
58 # GSSAPI_NONE_CONFIGURE_ON= --without-gssapi
60 # If pathname is required for Kerberos implementation, use ${GSSAPIBASEDIR}.
62 # CPPFLAGS, LDFLAGS, and LDADD can automatically be set by using "flags"
63 # modifier. It is useful if the port does not use a configure script.
67 # A port maintainer can try "make debug-krb" to confirm if building
68 # a GSSAPI library works fine. It will perform a library link test and
69 # show which library and what parameters will be used.
70 # If it works but your port does not build, some parameters are missing in
71 # the building phase of the port. If it does not work, the problem is in
72 # the GSSAPI library, not your port. Please contact MAINTAINER of this file
75 .if !defined(_INCLUDE_USES_GSSAPI_MK)
76 _INCLUDE_USES_GSSAPI_MK= yes
78 _HEIMDAL_DEPENDS=${GSSAPILIBDIR}/libgssapi.so:security/heimdal
79 _MITKRB5_DEPENDS=${GSSAPILIBDIR}/libkrb5support.so:security/krb5
80 _HEADERS= sys/types.h sys/stat.h stdint.h
82 .undef _FIXUP_KRB5CONFIG
83 .if empty(gssapi_ARGS)
86 .for _A in ${gssapi_ARGS}
88 .if ${_local} == "base"
89 . if ${SSL_DEFAULT} != base
90 IGNORE= You are using OpenSSL from ports and have selected GSSAPI from base, please select another GSSAPI value
93 GSSAPIBASEDIR= ${HEIMDAL_HOME}
94 GSSAPILIBDIR= ${GSSAPIBASEDIR}/lib
95 GSSAPIINCDIR= ${GSSAPIBASEDIR}/include
96 _HEADERS+= gssapi/gssapi.h gssapi/gssapi_krb5.h krb5.h
97 GSSAPICPPFLAGS= -I"${GSSAPIINCDIR}"
98 GSSAPILIBS= -lkrb5 -lgssapi -lgssapi_krb5
99 GSSAPILDFLAGS= -L"${GSSAPILIBDIR}"
100 .if empty(OSREL:N9.3)
101 _FIXUP_KRB5CONFIG= yes
103 .elif ${_local} == "heimdal"
104 HEIMDAL_HOME?= ${LOCALBASE}
105 GSSAPIBASEDIR= ${HEIMDAL_HOME}
106 GSSAPILIBDIR= ${GSSAPIBASEDIR}/lib/heimdal
107 GSSAPIINCDIR= ${GSSAPIBASEDIR}/include/heimdal
108 _HEADERS+= gssapi/gssapi.h gssapi/gssapi_krb5.h krb5.h
109 .if !defined(_KRB_BOOTSTRAP)
110 BUILD_DEPENDS+= ${_HEIMDAL_DEPENDS}
111 RUN_DEPENDS+= ${_HEIMDAL_DEPENDS}
113 PREFIX= ${HEIMDAL_HOME}
115 GSSAPICPPFLAGS= -I"${GSSAPIINCDIR}"
116 GSSAPILIBS= -lkrb5 -lgssapi
117 GSSAPILDFLAGS= -L"${GSSAPILIBDIR}"
118 _RPATH= ${GSSAPILIBDIR}
119 .elif ${_local} == "mit"
120 KRB5_HOME?= ${LOCALBASE}
121 GSSAPIBASEDIR= ${KRB5_HOME}
122 GSSAPILIBDIR= ${GSSAPIBASEDIR}/lib
123 GSSAPIINCDIR= ${GSSAPIBASEDIR}/include
124 _HEADERS+= gssapi/gssapi.h gssapi/gssapi_krb5.h krb5.h
125 .if !defined(_KRB_BOOTSTRAP)
126 BUILD_DEPENDS+= ${_MITKRB5_DEPENDS}
127 RUN_DEPENDS+= ${_MITKRB5_DEPENDS}
131 GSSAPILIBS= -lkrb5 -lgssapi_krb5
132 GSSAPICPPFLAGS= -I"${GSSAPIINCDIR}"
133 GSSAPILDFLAGS= -L"${GSSAPILIBDIR}"
134 _RPATH= ${GSSAPILIBDIR}
135 .elif ${_local} == "bootstrap"
137 .elif ${_local} == "flags"
140 IGNORE= USES=gssapi - invalid args: [${_local}] specified
144 # Fix up krb5-config if broken. This script included in 9.X prior to
145 # r271474 and in 10.X prior to r271473 are broken because
146 # libgssapi_krb5 for some interfaces of GSS-API is missing.
147 .if defined(_FIXUP_KRB5CONFIG)
148 KRB5CONFIG=${WRKDIR}/krb5-config
149 _USES_configure+= 290:krb5config-fix
151 ${SED} -e 's,\$$lib_flags -lgssapi -lheimntlm,\$$lib_flags -lgssapi -lgssapi_krb5 -lheimntlm,' < ${GSSAPIBASEDIR}/bin/krb5-config > ${KRB5CONFIG}
152 ${CHMOD} a+rx ${KRB5CONFIG}
154 KRB5CONFIG=${GSSAPIBASEDIR}/bin/krb5-config
157 # Fix up -Wl,-rpath in LDFLAGS
158 .if defined(_RPATH) && !empty(_RPATH)
159 .if !empty(LDFLAGS:M-Wl,-rpath,*)
160 .for F in ${LDFLAGS:M-Wl,-rpath,*}
161 LDFLAGS:= -Wl,-rpath,${_RPATH}:${F:S/-Wl,-rpath,//} \
162 ${LDFLAGS:N-Wl,-rpath,*}
165 LDFLAGS+= -Wl,-rpath,${_RPATH}:/usr/lib
167 _DEBUG_KRB_RPATH= -Wl,-rpath,${_RPATH}
169 .if defined(_KRB_USEFLAGS) && !empty(_KRB_USEFLAGS)
170 CPPFLAGS+= ${GSSAPICPPFLAGS}
171 LDFLAGS+= ${GSSAPILDFLAGS}
172 LDADD+= ${GSSAPILIBS}
174 GSSAPI_CONFIGURE_ARGS= \
175 CFLAGS="${GSSAPICPPFLAGS} ${CFLAGS}" \
176 LDFLAGS="${GSSAPILDFLAGS} ${LDFLAGS}" \
177 LIBS="${GSSAPILIBS} ${LIBS}" \
178 KRB5CONFIG="${KRB5CONFIG}"
181 @(for I in ${_HEADERS}; do echo "#include <$$I>"; done; \
182 echo "int main() { gss_acquire_cred(0, 0, 0, 0, 0, 0, 0, 0);" \
183 "krb5_init_context(0);" \
184 "gsskrb5_register_acceptor_identity(0); return 0;}" \
185 ) > /tmp/${.TARGET}.c
186 ${CC} ${CFLAGS} -o /tmp/${.TARGET}.x ${GSSAPICPPFLAGS} \
187 ${GSSAPILIBS} ${GSSAPILDFLAGS} ${_DEBUG_KRB_RPATH} \
188 /tmp/${.TARGET}.c && \
189 ldd /tmp/${.TARGET}.x; \
190 rm -f /tmp/${.TARGET}.x
191 @echo "PREFIX: ${PREFIX}"
192 @echo "GSSAPIBASEDIR: ${GSSAPIBASEDIR}"
193 @echo "GSSAPIINCDIR: ${GSSAPIINCDIR}"
194 @echo "GSSAPILIBDIR: ${GSSAPILIBDIR}"
195 @echo "GSSAPILIBS: ${GSSAPILIBS}"
196 @echo "GSSAPICPPFLAGS: ${GSSAPICPPFLAGS}"
197 @echo "GSSAPILDFLAGS: ${GSSAPILDFLAGS}"
198 @echo "GSSAPI_CONFIGURE_ARGS: ${GSSAPI_CONFIGURE_ARGS}"
199 @echo "KRB5CONFIG: ${KRB5CONFIG}"
200 @echo "CFLAGS: ${CFLAGS}"
201 @echo "LDFLAGS: ${LDFLAGS}"
202 @echo "LDADD: ${LDADD}"