1########################################################################
2#
3# Copyright (c) 2009, Secure Endpoints Inc.
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9#
10# - Redistributions of source code must retain the above copyright
11#   notice, this list of conditions and the following disclaimer.
12#
13# - Redistributions in binary form must reproduce the above copyright
14#   notice, this list of conditions and the following disclaimer in
15#   the documentation and/or other materials provided with the
16#   distribution.
17#
18# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
21# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
22# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
23# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
24# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29# POSSIBILITY OF SUCH DAMAGE.
30#
31
32RELDIR=lib\gssapi
33
34!include ../../windows/NTMakefile.w32
35
36krb5src = \
37	krb5/8003.c \
38	krb5/accept_sec_context.c \
39	krb5/acquire_cred.c \
40	krb5/add_cred.c \
41	krb5/address_to_krb5addr.c \
42	krb5/aeap.c \
43	krb5/arcfour.c \
44	krb5/canonicalize_name.c \
45	krb5/creds.c \
46	krb5/ccache_name.c \
47	krb5/cfx.c \
48	krb5/cfx.h \
49	krb5/compare_name.c \
50	krb5/compat.c \
51	krb5/context_time.c \
52	krb5/copy_ccache.c \
53	krb5/decapsulate.c \
54	krb5/delete_sec_context.c \
55	krb5/display_name.c \
56	krb5/display_status.c \
57	krb5/duplicate_name.c \
58	krb5/encapsulate.c \
59	krb5/export_name.c \
60	krb5/export_sec_context.c \
61	krb5/external.c \
62	krb5/get_mic.c \
63	krb5/gsskrb5_locl.h \
64	krb5/import_name.c \
65	krb5/import_sec_context.c \
66	krb5/indicate_mechs.c \
67	krb5/init.c \
68	krb5/init_sec_context.c \
69	krb5/inquire_context.c \
70	krb5/inquire_cred.c \
71	krb5/inquire_cred_by_mech.c \
72	krb5/inquire_cred_by_oid.c \
73	krb5/inquire_mechs_for_name.c \
74	krb5/inquire_names_for_mech.c \
75	krb5/inquire_sec_context_by_oid.c \
76	krb5/process_context_token.c \
77	krb5/prf.c \
78	krb5/release_buffer.c \
79	krb5/release_cred.c \
80	krb5/release_name.c \
81	krb5/sequence.c \
82	krb5/store_cred.c \
83	krb5/set_cred_option.c \
84	krb5/set_sec_context_option.c \
85	krb5/ticket_flags.c \
86	krb5/unwrap.c \
87	krb5/verify_mic.c \
88	krb5/wrap.c
89
90mechsrc = \
91	mech/context.h \
92	mech/context.c \
93	mech/cred.h \
94	mech/gss_accept_sec_context.c \
95	mech/gss_acquire_cred.c \
96	mech/gss_add_cred.c \
97	mech/gss_add_oid_set_member.c \
98	mech/gss_aeap.c \
99	mech/gss_buffer_set.c \
100	mech/gss_canonicalize_name.c \
101	mech/gss_compare_name.c \
102	mech/gss_context_time.c \
103	mech/gss_create_empty_oid_set.c \
104	mech/gss_cred.c \
105	mech/gss_decapsulate_token.c \
106	mech/gss_delete_sec_context.c \
107	mech/gss_display_name.c \
108	mech/gss_display_status.c \
109	mech/gss_duplicate_name.c \
110	mech/gss_duplicate_oid.c \
111	mech/gss_encapsulate_token.c \
112	mech/gss_export_name.c \
113	mech/gss_export_sec_context.c \
114	mech/gss_get_mic.c \
115	mech/gss_import_name.c \
116	mech/gss_import_sec_context.c \
117	mech/gss_indicate_mechs.c \
118	mech/gss_init_sec_context.c \
119	mech/gss_inquire_context.c \
120	mech/gss_inquire_cred.c \
121	mech/gss_inquire_cred_by_mech.c \
122	mech/gss_inquire_cred_by_oid.c \
123	mech/gss_inquire_mechs_for_name.c \
124	mech/gss_inquire_names_for_mech.c \
125	mech/gss_krb5.c \
126	mech/gss_mech_switch.c \
127	mech/gss_mo.c \
128	mech/gss_names.c \
129	mech/gss_oid.c \
130	mech/gss_oid_equal.c \
131	mech/gss_oid_to_str.c \
132	mech/gss_process_context_token.c \
133	mech/gss_pseudo_random.c \
134	mech/gss_release_buffer.c \
135	mech/gss_release_cred.c \
136	mech/gss_release_name.c \
137	mech/gss_release_oid.c \
138	mech/gss_release_oid_set.c \
139	mech/gss_seal.c \
140	mech/gss_set_cred_option.c \
141	mech/gss_set_sec_context_option.c \
142	mech/gss_sign.c \
143	mech/gss_store_cred.c \
144	mech/gss_test_oid_set_member.c \
145	mech/gss_unseal.c \
146	mech/gss_unwrap.c \
147	mech/gss_utils.c \
148	mech/gss_verify.c \
149	mech/gss_verify_mic.c \
150	mech/gss_wrap.c \
151	mech/gss_wrap_size_limit.c \
152	mech/gss_inquire_sec_context_by_oid.c \
153	mech/mech_switch.h \
154	mech/mechqueue.h \
155	mech/mech_locl.h \
156	mech/name.h \
157	mech/utils.h
158
159spnegosrc = \
160	spnego/accept_sec_context.c \
161	spnego/compat.c \
162	spnego/context_stubs.c \
163	spnego/cred_stubs.c \
164	spnego/external.c \
165	spnego/init_sec_context.c \
166	spnego/spnego_locl.h
167
168ntlmsrc = \
169	ntlm/accept_sec_context.c \
170	ntlm/acquire_cred.c \
171	ntlm/add_cred.c \
172	ntlm/canonicalize_name.c \
173	ntlm/compare_name.c \
174	ntlm/context_time.c \
175	ntlm/crypto.c \
176	ntlm/delete_sec_context.c \
177	ntlm/display_name.c \
178	ntlm/display_status.c \
179	ntlm/duplicate_name.c \
180	ntlm/export_name.c \
181	ntlm/export_sec_context.c \
182	ntlm/external.c \
183	ntlm/ntlm.h \
184	ntlm/import_name.c \
185	ntlm/import_sec_context.c \
186	ntlm/indicate_mechs.c \
187	ntlm/init_sec_context.c \
188	ntlm/inquire_context.c \
189	ntlm/inquire_cred.c \
190	ntlm/inquire_cred_by_mech.c \
191	ntlm/inquire_mechs_for_name.c \
192	ntlm/inquire_names_for_mech.c \
193	ntlm/process_context_token.c \
194	ntlm/release_cred.c \
195	ntlm/release_name.c \
196	ntlm/kdc.c
197
198$(OBJ)\ntlm\ntlm-private.h: $(ntlmsrc)
199	$(PERL) ../../cf/make-proto.pl -q -P remove -p $@ $(ntlmsrc)
200
201$(OBJ)\krb5\gsskrb5-private.h: $(krb5src)
202	$(PERL) ../../cf/make-proto.pl -q -P remove -p $@ $(krb5src)
203
204$(OBJ)\spnego\spnego-private.h: $(spnegosrc)
205	$(PERL) ../../cf/make-proto.pl -q -P remove -p $@ $(spnegosrc)
206
207gssapi_files = $(OBJ)\gssapi\asn1_gssapi_asn1.x
208
209spnego_files = $(OBJ)\spnego\asn1_spnego_asn1.x
210
211$(gssapi_files:.x=.c): $$(@R).x
212
213$(spnego_files:.x=.c): $$(@R).x
214
215$(gssapi_files) $(OBJ)\gssapi\gssapi_asn1.hx $(OBJ)\gssapi\gssapi_asn1-priv.hx: \
216$(BINDIR)\asn1_compile.exe mech\gssapi.asn1
217	cd $(OBJ)\gssapi
218	$(BINDIR)\asn1_compile.exe --one-code-file $(SRCDIR)\mech\gssapi.asn1 gssapi_asn1 \
219	|| ( $(RM) $(OBJ)\gssapi\gssapi_asn1.h ; exit /b 1 )
220	cd $(SRCDIR)
221
222$(spnego_files) $(OBJ)\spnego\spnego_asn1.hx $(OBJ)\spnego\spnego_asn1-priv.hx: \
223$(BINDIR)\asn1_compile.exe spnego\spnego.asn1
224	cd $(OBJ)\spnego
225	$(BINDIR)\asn1_compile --one-code-file --sequence=MechTypeList \
226		$(SRCDIR)\spnego\spnego.asn1 spnego_asn1 \
227	|| ( $(RM) $(OBJ)\spnego\spnego_asn1.h ; exit /b 1 )
228	cd $(SRCDIR)
229
230$(OBJ)\gkrb5_err.c $(OBJ)\gkrb5_err.h: krb5\gkrb5_err.et
231	cd $(OBJ)
232	$(BINDIR)\compile_et.exe $(SRCDIR)\krb5\gkrb5_err.et
233	cd $(SRCDIR)
234
235INCFILES=				\
236    $(INCDIR)\gssapi.h			\
237    $(INCDIR)\gssapi\gssapi.h		\
238    $(INCDIR)\gssapi\gssapi_krb5.h	\
239    $(INCDIR)\gssapi\gssapi_oid.h	\
240    $(INCDIR)\gssapi\gssapi_ntlm.h	\
241    $(INCDIR)\gssapi\gssapi_spnego.h	\
242    $(INCDIR)\gssapi\gkrb5_err.h	\
243    $(OBJ)\ntlm\ntlm-private.h		\
244    $(OBJ)\spnego\spnego-private.h	\
245    $(OBJ)\krb5\gsskrb5-private.h	\
246    $(OBJ)\gkrb5_err.h			\
247    $(OBJ)\gssapi\gssapi_asn1.h		\
248    $(OBJ)\gssapi\gssapi_asn1-priv.h	\
249    $(OBJ)\spnego\spnego_asn1.h		\
250    $(OBJ)\spnego\spnego_asn1-priv.h
251
252all:: $(INCFILES)
253
254libgssapi_OBJs = \
255	$(OBJ)\krb5/8003.obj \
256	$(OBJ)\krb5/accept_sec_context.obj \
257	$(OBJ)\krb5/acquire_cred.obj \
258	$(OBJ)\krb5/add_cred.obj \
259	$(OBJ)\krb5/address_to_krb5addr.obj \
260	$(OBJ)\krb5/aeap.obj \
261	$(OBJ)\krb5/arcfour.obj \
262	$(OBJ)\krb5/canonicalize_name.obj \
263	$(OBJ)\krb5/creds.obj \
264	$(OBJ)\krb5/ccache_name.obj \
265	$(OBJ)\krb5/cfx.obj \
266	$(OBJ)\krb5/compare_name.obj \
267	$(OBJ)\krb5/compat.obj \
268	$(OBJ)\krb5/context_time.obj \
269	$(OBJ)\krb5/copy_ccache.obj \
270	$(OBJ)\krb5/decapsulate.obj \
271	$(OBJ)\krb5/delete_sec_context.obj \
272	$(OBJ)\krb5/display_name.obj \
273	$(OBJ)\krb5/display_status.obj \
274	$(OBJ)\krb5/duplicate_name.obj \
275	$(OBJ)\krb5/encapsulate.obj \
276	$(OBJ)\krb5/export_name.obj \
277	$(OBJ)\krb5/export_sec_context.obj \
278	$(OBJ)\krb5/external.obj \
279	$(OBJ)\krb5/get_mic.obj \
280	$(OBJ)\krb5/import_name.obj \
281	$(OBJ)\krb5/import_sec_context.obj \
282	$(OBJ)\krb5/indicate_mechs.obj \
283	$(OBJ)\krb5/init.obj \
284	$(OBJ)\krb5/init_sec_context.obj \
285	$(OBJ)\krb5/inquire_context.obj \
286	$(OBJ)\krb5/inquire_cred.obj \
287	$(OBJ)\krb5/inquire_cred_by_mech.obj \
288	$(OBJ)\krb5/inquire_cred_by_oid.obj \
289	$(OBJ)\krb5/inquire_mechs_for_name.obj \
290	$(OBJ)\krb5/inquire_names_for_mech.obj \
291	$(OBJ)\krb5/inquire_sec_context_by_oid.obj \
292	$(OBJ)\krb5/process_context_token.obj \
293	$(OBJ)\krb5/prf.obj \
294	$(OBJ)\krb5/release_buffer.obj \
295	$(OBJ)\krb5/release_cred.obj \
296	$(OBJ)\krb5/release_name.obj \
297	$(OBJ)\krb5/sequence.obj \
298	$(OBJ)\krb5/store_cred.obj \
299	$(OBJ)\krb5/set_cred_option.obj \
300	$(OBJ)\krb5/set_sec_context_option.obj \
301	$(OBJ)\krb5/ticket_flags.obj \
302	$(OBJ)\krb5/unwrap.obj \
303	$(OBJ)\krb5/verify_mic.obj \
304	$(OBJ)\krb5/wrap.obj \
305	$(OBJ)\mech/context.obj \
306	$(OBJ)\mech/gss_accept_sec_context.obj \
307	$(OBJ)\mech/gss_acquire_cred.obj \
308	$(OBJ)\mech/gss_add_cred.obj \
309	$(OBJ)\mech/gss_add_oid_set_member.obj \
310	$(OBJ)\mech/gss_aeap.obj \
311	$(OBJ)\mech/gss_buffer_set.obj \
312	$(OBJ)\mech/gss_canonicalize_name.obj \
313	$(OBJ)\mech/gss_compare_name.obj \
314	$(OBJ)\mech/gss_context_time.obj \
315	$(OBJ)\mech/gss_create_empty_oid_set.obj \
316	$(OBJ)\mech/gss_cred.obj \
317	$(OBJ)\mech/gss_decapsulate_token.obj \
318	$(OBJ)\mech/gss_delete_sec_context.obj \
319	$(OBJ)\mech/gss_display_name.obj \
320	$(OBJ)\mech/gss_display_status.obj \
321	$(OBJ)\mech/gss_duplicate_name.obj \
322	$(OBJ)\mech/gss_duplicate_oid.obj \
323	$(OBJ)\mech/gss_encapsulate_token.obj \
324	$(OBJ)\mech/gss_export_name.obj \
325	$(OBJ)\mech/gss_export_sec_context.obj \
326	$(OBJ)\mech/gss_get_mic.obj \
327	$(OBJ)\mech/gss_import_name.obj \
328	$(OBJ)\mech/gss_import_sec_context.obj \
329	$(OBJ)\mech/gss_indicate_mechs.obj \
330	$(OBJ)\mech/gss_init_sec_context.obj \
331	$(OBJ)\mech/gss_inquire_context.obj \
332	$(OBJ)\mech/gss_inquire_cred.obj \
333	$(OBJ)\mech/gss_inquire_cred_by_mech.obj \
334	$(OBJ)\mech/gss_inquire_cred_by_oid.obj \
335	$(OBJ)\mech/gss_inquire_mechs_for_name.obj \
336	$(OBJ)\mech/gss_inquire_names_for_mech.obj \
337	$(OBJ)\mech/gss_krb5.obj \
338	$(OBJ)\mech/gss_mech_switch.obj \
339	$(OBJ)\mech/gss_mo.obj \
340	$(OBJ)\mech/gss_names.obj \
341	$(OBJ)\mech/gss_oid.obj \
342	$(OBJ)\mech/gss_oid_equal.obj \
343	$(OBJ)\mech/gss_oid_to_str.obj \
344	$(OBJ)\mech/gss_process_context_token.obj \
345	$(OBJ)\mech/gss_pseudo_random.obj \
346	$(OBJ)\mech/gss_release_buffer.obj \
347	$(OBJ)\mech/gss_release_cred.obj \
348	$(OBJ)\mech/gss_release_name.obj \
349	$(OBJ)\mech/gss_release_oid.obj \
350	$(OBJ)\mech/gss_release_oid_set.obj \
351	$(OBJ)\mech/gss_seal.obj \
352	$(OBJ)\mech/gss_set_cred_option.obj \
353	$(OBJ)\mech/gss_set_sec_context_option.obj \
354	$(OBJ)\mech/gss_sign.obj \
355	$(OBJ)\mech/gss_store_cred.obj \
356	$(OBJ)\mech/gss_test_oid_set_member.obj \
357	$(OBJ)\mech/gss_unseal.obj \
358	$(OBJ)\mech/gss_unwrap.obj \
359	$(OBJ)\mech/gss_utils.obj \
360	$(OBJ)\mech/gss_verify.obj \
361	$(OBJ)\mech/gss_verify_mic.obj \
362	$(OBJ)\mech/gss_wrap.obj \
363	$(OBJ)\mech/gss_wrap_size_limit.obj \
364	$(OBJ)\mech/gss_inquire_sec_context_by_oid.obj \
365	$(OBJ)\spnego/accept_sec_context.obj \
366	$(OBJ)\spnego/compat.obj \
367	$(OBJ)\spnego/context_stubs.obj \
368	$(OBJ)\spnego/cred_stubs.obj \
369	$(OBJ)\spnego/external.obj \
370	$(OBJ)\spnego/init_sec_context.obj \
371	$(OBJ)\ntlm/accept_sec_context.obj \
372	$(OBJ)\ntlm/acquire_cred.obj \
373	$(OBJ)\ntlm/add_cred.obj \
374	$(OBJ)\ntlm/canonicalize_name.obj \
375	$(OBJ)\ntlm/compare_name.obj \
376	$(OBJ)\ntlm/context_time.obj \
377	$(OBJ)\ntlm/crypto.obj \
378	$(OBJ)\ntlm/delete_sec_context.obj \
379	$(OBJ)\ntlm/display_name.obj \
380	$(OBJ)\ntlm/display_status.obj \
381	$(OBJ)\ntlm/duplicate_name.obj \
382	$(OBJ)\ntlm/export_name.obj \
383	$(OBJ)\ntlm/export_sec_context.obj \
384	$(OBJ)\ntlm/external.obj \
385	$(OBJ)\ntlm/import_name.obj \
386	$(OBJ)\ntlm/import_sec_context.obj \
387	$(OBJ)\ntlm/indicate_mechs.obj \
388	$(OBJ)\ntlm/init_sec_context.obj \
389	$(OBJ)\ntlm/inquire_context.obj \
390	$(OBJ)\ntlm/inquire_cred.obj \
391	$(OBJ)\ntlm/inquire_cred_by_mech.obj \
392	$(OBJ)\ntlm/inquire_mechs_for_name.obj \
393	$(OBJ)\ntlm/inquire_names_for_mech.obj \
394	$(OBJ)\ntlm/process_context_token.obj \
395	$(OBJ)\ntlm/release_cred.obj \
396	$(OBJ)\ntlm/release_name.obj \
397	$(OBJ)\ntlm/kdc.obj \
398	$(OBJ)\gkrb5_err.obj \
399	$(spnego_files:.x=.obj) \
400	$(gssapi_files:.x=.obj)
401
402GCOPTS=-I$(SRCDIR) -I$(OBJ) -Igssapi -DBUILD_GSSAPI_LIB
403
404{$(OBJ)\krb5}.c{$(OBJ)\krb5}.obj::
405	$(C2OBJ_NP) -Fo$(OBJ)\krb5\ -Fd$(OBJ)\krb5\ -I$(OBJ)\krb5 $(GCOPTS)
406
407{krb5}.c{$(OBJ)\krb5}.obj::
408	$(C2OBJ_NP) -Fo$(OBJ)\krb5\ -Fd$(OBJ)\krb5\ -I$(OBJ)\krb5 $(GCOPTS) -DASN1_LIB
409
410{$(OBJ)\mech}.c{$(OBJ)\mech}.obj::
411	$(C2OBJ_NP) -Fo$(OBJ)\mech\ -Fd$(OBJ)\mech\ -I$(OBJ)\mech $(GCOPTS)
412
413{mech}.c{$(OBJ)\mech}.obj::
414	$(C2OBJ_NP) -Fo$(OBJ)\mech\ -Fd$(OBJ)\mech\ -I$(OBJ)\mech -I$(OBJ)\gssapi $(GCOPTS) -DASN1_LIB
415
416{$(OBJ)\ntlm}.c{$(OBJ)\ntlm}.obj::
417	$(C2OBJ_NP) -Fo$(OBJ)\ntlm\ -Fd$(OBJ)\ntlm\ -I$(OBJ)\ntlm $(GCOPTS)
418
419{ntlm}.c{$(OBJ)\ntlm}.obj::
420	$(C2OBJ_NP) -Fo$(OBJ)\ntlm\ -Fd$(OBJ)\ntlm\ -I$(OBJ)\ntlm $(GCOPTS) -DASN1_LIB
421
422{$(OBJ)\spnego}.c{$(OBJ)\spnego}.obj::
423	$(C2OBJ_NP) -Fo$(OBJ)\spnego\ -Fd$(OBJ)\spnego\ -I$(OBJ)\spnego $(GCOPTS)
424
425{spnego}.c{$(OBJ)\spnego}.obj::
426	$(C2OBJ_NP) -Fo$(OBJ)\spnego\ -Fd$(OBJ)\spnego\ -I$(OBJ)\spnego -Imech $(GCOPTS) -DASN1_LIB
427
428{$(OBJ)\gssapi}.c{$(OBJ)\gssapi}.obj::
429	$(C2OBJ_NP) -Fo$(OBJ)\gssapi\ -Fd$(OBJ)\gssapi\ -I$(OBJ)\gssapi $(GCOPTS)
430
431{$(OBJ)}.c{$(OBJ)}.obj::
432	$(C2OBJ_P) $(GCOPTS)
433
434{$(OBJ)\spnego}.x{$(OBJ)\spnego}.c:
435	$(CP) $** $@
436
437{$(OBJ)\gssapi}.x{$(OBJ)\gssapi}.c:
438	$(CP) $** $@
439
440{gssapi}.h{$(INCDIR)\gssapi}.h:
441	$(CP) $** $@
442
443{$(OBJ)}.h{$(INCDIR)\gssapi}.h:
444	$(CP) $** $@
445
446{$(OBJ)\gssapi}.hx{$(OBJ)\gssapi}.h:
447	$(CP) $** $@
448
449{$(OBJ)\spnego}.hx{$(OBJ)\spnego}.h:
450	$(CP) $** $@
451
452LIBGSSAPI_LIBS=\
453	$(LIBROKEN)	\
454	$(LIBHEIMDAL)	\
455	$(LIBHEIMNTLM)	\
456	$(LIBCOMERR)
457
458LIBGSSAPI_SDKLIBS=\
459	$(PTHREAD_LIB)
460
461!ifndef STATICLIBS
462
463RES=$(OBJ)\libgssapi-version.res
464
465$(BINDIR)\gssapi.dll: $(libgssapi_OBJs) $(RES)
466	$(DLLGUILINK_C) -implib:$(LIBGSSAPI)	\
467		-out:$(BINDIR)\gssapi.dll	\
468		-def:libgssapi-exports.def	\
469		$(LIBGSSAPI_LIBS) $(RES) $(LIBGSSAPI_SDKLIBS) @<<
470$(libgssapi_OBJs: =
471)
472<<
473	$(DLLPREP_NODIST)
474
475$(LIBGSSAPI): $(BINDIR)\gssapi.dll
476
477clean::
478	-$(RM) $(BINDIR)\gssapi.*
479
480!else
481
482$(LIBGSSAPI): $(libgssapi_OBJs)
483	$(LIBCON_C) -OUT:$@ $(LIBGSSAPI_LIBS) $(LIBGSSAPI_SDKLIBS) @<<
484$(libgssapi_OBJs: =
485)
486<<
487
488!endif
489
490all:: $(LIBGSSAPI)
491
492clean::
493	-$(RM) $(LIBGSSAPI)
494
495prep:: mkdirs-gss
496
497mkdirs-gss:
498!if !exist($(OBJ)\ntlm)
499	$(MKDIR) $(OBJ)\ntlm
500!endif
501!if !exist($(OBJ)\krb5)
502	$(MKDIR) $(OBJ)\krb5
503!endif
504!if !exist($(OBJ)\spnego)
505	$(MKDIR) $(OBJ)\spnego
506!endif
507!if !exist($(OBJ)\mech)
508	$(MKDIR) $(OBJ)\mech
509!endif
510!if !exist($(OBJ)\gssapi)
511	$(MKDIR) $(OBJ)\gssapi
512!endif
513
514clean::
515	-$(RM) $(OBJ)\ntlm\*.*
516	-$(RM) $(OBJ)\krb5\*.*
517	-$(RM) $(OBJ)\spnego\*.*
518	-$(RM) $(OBJ)\mech\*.*
519	-$(RM) $(OBJ)\gssapi\*.*
520
521all-tools:: $(BINDIR)\gsstool.exe
522
523$(BINDIR)\gsstool.exe: $(OBJ)\gsstool.obj $(OBJ)\gss-commands.obj $(LIBGSSAPI) $(LIBROKEN) $(LIBSL) $(LIBVERS)
524	$(EXECONLINK)
525
526$(OBJ)\gss-commands.c $(OBJ)\gss-commands.h: gss-commands.in
527	cd $(OBJ)
528	$(CP) $(SRCDIR)\gss-commands.in gss-commands.in
529	$(BINDIR)\slc.exe gss-commands.in
530	cd $(SRCDIR)
531
532!ifdef ELISP
533# This macro invocation is used to update the libgssapi_OBJs
534# definition below (generate-obj-macro is defined in maint.el):
535
536(generate-obj-macro "libgssapi_OBJs"
537	            (concat "\t$(OBJ)\\gkrb5_err.obj \\\n"
538                            "\t$(spnego_files:.x=.obj) \\\n"
539                            "\t$(gssapi_files:.x=.obj)")
540                    "krb5src" "mechsrc" "spnegosrc" "ntlmsrc")
541!endif
542
543test-exports:
544	$(PERL) ..\..\cf\w32-check-exported-symbols.pl --vs version-script.map --def libgssapi-exports.def
545
546test:: test-exports
547
548
549TEST_BINARIES=\
550	$(OBJ)\test_oid.exe	\
551	$(OBJ)\test_names.exe	\
552	$(OBJ)\test_cfx.exe	\
553	$(OBJ)\test_acquire_cred.exe	\
554	$(OBJ)\test_cred.exe	\
555	$(OBJ)\test_kcred.exe	\
556	$(OBJ)\test_context.exe	\
557	$(OBJ)\test_ntlm.exe
558
559$(OBJ)\test_oid.exe: $(OBJ)\test_oid.obj $(LIBGSSAPI) $(LIBROKEN)
560	$(EXECONLINK)
561	$(EXEPREP_NODIST)
562
563$(OBJ)\test_names.exe: $(OBJ)\test_names.obj $(LIBGSSAPI) $(LIBROKEN) $(LIBVERS)
564	$(EXECONLINK)
565	$(EXEPREP_NODIST)
566
567$(OBJ)\test_cfx.exe: $(OBJ)\krb5\test_cfx.obj $(LIBHEIMDAL) $(LIBGSSAPI) $(LIBROKEN)
568	$(EXECONLINK)
569	$(EXEPREP_NODIST)
570
571$(OBJ)\test_acquire_cred.exe: $(OBJ)\test_acquire_cred.obj $(OBJ)\test_common.obj \
572		$(LIBGSSAPI) $(LIBROKEN) $(LIBVERS)
573	$(EXECONLINK)
574	$(EXEPREP_NODIST)
575
576$(OBJ)\test_cred.exe: $(OBJ)\test_cred.obj $(LIBGSSAPI) $(LIBROKEN) $(LIBVERS)
577	$(EXECONLINK)
578	$(EXEPREP_NODIST)
579
580$(OBJ)\test_kcred.exe: $(OBJ)\test_kcred.obj $(LIBGSSAPI) $(LIBHEIMDAL)	\
581		$(LIBROKEN) $(LIBVERS)
582	$(EXECONLINK)
583	$(EXEPREP_NODIST)
584
585$(OBJ)\test_context.exe: $(OBJ)\test_context.obj $(OBJ)\test_common.obj	\
586		$(LIBGSSAPI) $(LIBHEIMDAL) $(LIBROKEN) $(LIBVERS)
587	$(EXECONLINK)
588	$(EXEPREP_NODIST)
589
590$(OBJ)\test_ntlm.exe: $(OBJ)\test_ntlm.obj $(OBJ)\test_common.obj	\
591		$(LIBGSSAPI) $(LIBHEIMNTLM) $(LIBROKEN) $(LIBVERS)
592	$(EXECONLINK)
593	$(EXEPREP_NODIST)
594
595{}.c{$(OBJ)}.obj::
596	$(C2OBJ_P) -I$(OBJ)\krb5 -I$(OBJ) -I$(SRCDIR) -I$(SRCDIR)\gssapi
597
598test-binaries: $(LIBGSSAPI) $(TEST_BINARIES)
599
600run-test:
601	cd $(OBJ)
602	test_oid
603	test_names
604	test_cfx
605	test_kcred
606	cd $(SRCDIR)
607
608test:: test-binaries run-test
609