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