Sync Mk with ports
[dports.git] / Mk / Uses / gssapi.mk
1 # $FreeBSD$
2 #
3 # handle dependency on Kerberos port
4 #
5 # Feature:      gssapi
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.
9 #               ("bootstrap,mit")
10 #               flags is a special suffix to define CFLAGS, LDFLAGS, and LDADD.
11 #               ("base,flags")
12 #
13 # MAINTAINER:   hrs@FreeBSD.org
14 #
15 # User defined variables:
16 #  HEIMDAL_HOME (default: ${LOCALBASE})
17 #  KRB5_HOME (default: ${LOCALBASE})
18 #
19 # Exported variables:
20 #  GSSAPIBASEDIR
21 #  GSSAPICPPFLAGS
22 #  GSSAPIINCDIR
23 #  GSSAPILDFLAGS
24 #  GSSAPILIBDIR
25 #  GSSAPILIBS
26 #  GSSAPI_CONFIGURE_ARGS
27 #  KRB5CONFIG
28 #
29 # Affected variables:
30 #  PREFIX (bootstrap)
31 #  CPPFLAGS (flags)
32 #  LDADD (flags)
33 #  LDCFLAGS
34 #
35 # Notes:
36 #   - GSSAPILIBDIR is prepended to "-Wl,-rpath," in LDFLAGS.
37 #   - bootstrap sets PREFIX based on KRB5_HOME or HEIMDAL_HOME.
38 #
39 # Usage:
40 #
41 #  A typical example:
42 #
43 #   OPTIONS_SINGLE= GSSAPI
44 #   OPTIONS_SINGLE_GSSAPI= GSSAPI_BASE GSSAPI_HEIMDAL GSSAPI_MIT GSSAPI_NONE
45 #
46 #   GSSAPI_BASE_USES=   gssapi
47 #   GSSAPI_BASE_CONFIGURE_ON= \
48 #       --with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}
49 #
50 #   GSSAPI_HEIMDAL_USES=gssapi:heimdal
51 #   GSSAPI_HEIMDAL_CONFIGURE_ON= \
52 #       --with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}
53 #
54 #   GSSAPI_MIT_USES=    gssapi:mit
55 #   GSSAPI_MIT_CONFIGURE_ON= \
56 #       --with-gssapi=${GSSAPIBASEDIR} ${GSSAPI_CONFIGURE_ARGS}
57 #
58 #   GSSAPI_NONE_CONFIGURE_ON= --without-gssapi
59 #
60 #  If pathname is required for Kerberos implementation, use ${GSSAPIBASEDIR}.
61 #
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.
64 #
65 # How To Debug:
66 #
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
73 #  in that case.
74 #
75 .if !defined(_INCLUDE_USES_GSSAPI_MK)
76 _INCLUDE_USES_GSSAPI_MK=        yes
77
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
81
82 .undef _FIXUP_KRB5CONFIG
83 .if empty(gssapi_ARGS)
84 gssapi_ARGS=    base
85 .endif
86 .for _A in ${gssapi_ARGS}
87 _local:=        ${_A}
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
91 .  endif
92 HEIMDAL_HOME=   /usr
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
102 .endif
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}
112 .else
113 PREFIX=         ${HEIMDAL_HOME}
114 .endif
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}
128 .else
129 PREFIX=         ${KRB5_HOME}
130 .endif
131 GSSAPILIBS=     -lkrb5 -lgssapi_krb5
132 GSSAPICPPFLAGS= -I"${GSSAPIINCDIR}"
133 GSSAPILDFLAGS=  -L"${GSSAPILIBDIR}"
134 _RPATH=         ${GSSAPILIBDIR}
135 .elif ${_local} == "bootstrap"
136 _KRB_BOOTSTRAP= 1
137 .elif ${_local} == "flags"
138 _KRB_USEFLAGS=  1
139 .else
140 IGNORE= USES=gssapi - invalid args: [${_local}] specified
141 .endif
142 .endfor
143
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
150 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}
153 .else
154 KRB5CONFIG=${GSSAPIBASEDIR}/bin/krb5-config
155 .endif
156
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,*}
163 .endfor
164 .else
165 LDFLAGS+=       -Wl,-rpath,${_RPATH}:/usr/lib
166 .endif
167 _DEBUG_KRB_RPATH=       -Wl,-rpath,${_RPATH}
168 .endif
169 .if defined(_KRB_USEFLAGS) && !empty(_KRB_USEFLAGS)
170 CPPFLAGS+=      ${GSSAPICPPFLAGS}
171 LDFLAGS+=       ${GSSAPILDFLAGS}
172 LDADD+=         ${GSSAPILIBS}
173 .endif
174 GSSAPI_CONFIGURE_ARGS=  \
175         CFLAGS="${GSSAPICPPFLAGS} ${CFLAGS}" \
176         LDFLAGS="${GSSAPILDFLAGS} ${LDFLAGS}" \
177         LIBS="${GSSAPILIBS} ${LIBS}" \
178         KRB5CONFIG="${KRB5CONFIG}"
179
180 debug-krb:
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}"
203 .endif