1!INCLUDE ..\win32\common.mak
2
3SCRAM=1
4
5!IF "$(NTLM)" == "1"
6PLUGINS_EXT=saslNTLM.dll
7!ELSE
8PLUGINS_EXT=
9!ENDIF
10
11!IF "$(GSSAPI)" == "CyberSafe"
12PLUGINS_EXT=$(PLUGINS_EXT) saslGSSAPI.dll
13!ENDIF
14
15!IF "$(SRP)" == "1"
16PLUGINS_EXT=$(PLUGINS_EXT) saslSRP.dll
17!IF "$(DO_SRP_SETPASS)" == "1"
18SRP_FLAGS=/DDO_SRP_SETPASS=1
19!ENDIF
20!ENDIF
21
22!IF "$(OTP)" == "1"
23PLUGINS_EXT=$(PLUGINS_EXT) saslOTP.dll
24!ENDIF
25
26!IF "$(LDAP)" == "1"
27PLUGINS_EXT=$(PLUGINS_EXT) saslLDAPDB.dll
28
29# NB: linking to libsasl itself!!!
30LDAP_FLAGS = /I $(LDAP_INCLUDE)
31LDAP_LIBS = $(LDAP_LIB_BASE)\olber32.lib $(LDAP_LIB_BASE)\oldap32.lib ..\lib\libsasl.lib
32!ENDIF
33
34!IF "$(SQL)" == "SQLITE"
35PLUGINS_EXT=$(PLUGINS_EXT) saslSQLITE.dll
36SQL_FLAGS= $(SQLITE_INCLUDES) /DHAVE_SQLITE=1
37SQLITE_LIBS = /libpath:$(SQLITE_LIBPATH) libsqlite.lib
38!ENDIF
39!IF "$(SQL)" == "SQLITE3"
40PLUGINS_EXT=$(PLUGINS_EXT) saslSQLITE.dll
41SQL_FLAGS= $(SQLITE_INCLUDES3) /DHAVE_SQLITE3=1
42SQLITE_LIBS = /libpath:$(SQLITE_LIBPATH3) libsqlite3.lib
43!ENDIF
44
45PLUGINS=saslANONYMOUS.dll \
46	saslPLAIN.dll \
47	saslCRAMMD5.dll \
48	saslDIGESTMD5.dll \
49	saslLOGIN.dll \
50	saslSCRAM.dll \
51	$(PLUGINS_EXT) \
52	saslSASLDB.dll
53
54generated_rc=saslANONYMOUS.rc saslPLAIN.rc saslCRAMMD5.rc saslDIGESTMD5.rc saslLOGIN.rc saslNTLM.rc saslSCRAM.rc saslGSSAPI.rc saslSRP.rc saslOTP.rc saslSASLDB.rc saslSQLITE.rc saslLDAPDB.rc
55
56# WS2tcpip.h included in Visual Studio 7 provides getaddrinfo, ...
57# emulation on Windows, so there is no need to build getaddrinfo.c
58
59!IF "$(VCVER)" == "6"
60compat_sources = getaddrinfo.c getnameinfo.c
61compat_objs = getaddrinfo.obj getnameinfo.obj
62!ENDIF
63
64common_sources = plugin_common.c plugin_common.h
65common_objs = plugin_common.obj $(compat_objs)
66
67saslANONYMOUS_sources = anonymous.c anonymous_init.c $(common_sources)
68saslANONYMOUS_objs = anonymous.obj anonymous_init.obj $(common_objs)
69saslANONYMOUS_out = saslANONYMOUS.dll saslANONYMOUS.exp saslANONYMOUS.lib
70
71saslPLAIN_sources = plain.c plain_init.c $(common_sources)
72saslPLAIN_objs = plain.obj plain_init.obj $(common_objs)
73saslPLAIN_out = saslPLAIN.dll saslPLAIN.exp saslPLAIN.lib
74
75saslCRAMMD5_sources = cram.c crammd5_init.c $(common_sources)
76saslCRAMMD5_objs = cram.obj crammd5_init.obj $(common_objs)
77saslCRAMMD5_out = saslCRAMMD5.dll saslCRAMMD5.exp saslCRAMMD5.lib
78
79saslDIGESTMD5_sources = digestmd5.c digestmd5_init.c $(common_sources)
80saslDIGESTMD5_objs = digestmd5.obj digestmd5_init.obj $(common_objs)
81saslDIGESTMD5_out = saslDIGESTMD5.dll saslDIGESTMD5.exp saslDIGESTMD5.lib
82
83saslLOGIN_sources = login.c login_init.c $(common_sources)
84saslLOGIN_objs = login.obj login_init.obj $(common_objs)
85saslLOGIN_out = saslLOGIN.dll saslLOGIN.exp saslLOGIN.lib
86
87saslSCRAM_sources = scram.c scram_init.c $(common_sources)
88saslSCRAM_objs = scram.obj scram_init.obj $(common_objs)
89saslSCRAM_out = saslSCRAM.dll saslSCRAM.exp saslSCRAM.lib
90
91saslNTLM_sources = ntlm.c ntlm_init.c $(common_sources)
92saslNTLM_objs = ntlm.obj ntlm_init.obj $(common_objs)
93saslNTLM_out = saslNTLM.dll saslNTLM.exp saslNTLM.lib
94
95saslGSSAPI_sources = gssapi.c gssapiv2_init.c $(common_sources)
96saslGSSAPI_objs = gssapi.obj gssapiv2_init.obj $(common_objs)
97saslGSSAPI_out = saslGSSAPI.dll saslGSSAPI.exp saslGSSAPI.lib
98
99saslSRP_sources = srp.c srp_init.c $(common_sources)
100saslSRP_objs = srp.obj srp_init.obj $(common_objs)
101saslSRP_out = saslSRP.dll saslSRP.exp saslSRP.lib
102
103saslOTP_sources = otp.c otp_init.c $(common_sources)
104saslOTP_objs = otp.obj otp_init.obj $(common_objs)
105saslOTP_out = saslOTP.dll saslOTP.exp saslOTP.lib
106
107saslSQL_sources = sql.c sql_init.c $(common_sources)
108saslSQL_objs = sql.obj sql_init.obj $(common_objs)
109# saslSQL_out is an agregation of all generated files for all SQL plugins
110saslSQL_out = saslSQLITE.dll saslSQLITE.exp saslSQLITE.lib
111
112saslLDAPDB_sources = ldapdb.c $(common_sources)
113saslLDAPDB_objs = ldapdb.obj $(common_objs)
114saslLDAPDB_out = saslLDAPDB.dll saslLDAPDB.exp saslLDAPDB.lib
115
116!IF "$(NTLM)" == "1" || "$(SRP)" == "1" || "$(OTP)" == "1" || "$(SCRAM)" == "1"
117OPENSSL_FLAGS= /I $(OPENSSL_INCLUDE)
118!ELSE
119OPENSSL_FLAGS=
120!ENDIF
121
122!IF "$(GSSAPILIB)" == ""
123GSSAPILIB=gssapi32.lib
124!ENDIF
125
126!IF "$(GSSAPI)" == "CyberSafe"
127GSS_FLAGS= /I $(GSSAPI_INCLUDE) /D "HAVE_GSS_C_NT_HOSTBASED_SERVICE" /D "HAVE_GSS_C_NT_USER_NAME"
128GSS_LIBS=/libpath:$(GSSAPI_LIBPATH) $(GSSAPILIB)
129!ELSE IF "$(GSSAPI)" == "MITKerberos"
130GSS_FLAGS= /I $(GSSAPI_INCLUDE) /D "HAVE_GSS_C_NT_HOSTBASED_SERVICE" /D "HAVE_GSS_C_NT_USER_NAME"
131GSS_LIBS=/libpath:$(GSSAPI_LIBPATH) $(GSSAPILIB)
132!ELSE
133GSS_FLAGS=
134GSS_LIBS=
135!ENDIF
136
137!IF "$(SASLDB)" == "LMDB"
138DB_LIBS=/libpath:$(LMDB_LIBPATH) lmdb.lib
139
140# Auxprop Plugin
141libsasldb_sources = allockey.c db_lmdb.c
142libsasldb_objs = allockey.obj db_lmdb.obj
143!ELSE
144DB_LIBS=/libpath:$(DB_LIBPATH) $(DB_LIB)
145
146# Auxprop Plugin
147libsasldb_sources = allockey.c db_berkeley.c
148libsasldb_objs = allockey.obj db_berkeley.obj
149!ENDIF
150
151CRAM_FLAGS=/DOBSOLETE_CRAM_ATTR=1
152
153DIGEST_FLAGS=/D "WITH_RC4" /DOBSOLETE_DIGEST_ATTR=1
154
155SCRAM_FLAGS=/DHAVE_SHA256=1
156
157saslSASLDB_sources = sasldb.c sasldb_init.c $(libsasldb_sources) $(common_sources)
158saslSASLDB_objs = sasldb.obj sasldb_init.obj $(libsasldb_objs) $(common_objs)
159saslSASLDB_out = saslSASLDB.dll saslSASLDB.exp saslSASLDB.lib
160
161all_objs = $(saslANONYMOUS_objs) $(saslPLAIN_objs) $(saslCRAMMD5_objs) $(saslDIGESTMD5_objs) $(saslLOGIN_objs) $(saslSCRAM_objs) $(saslNTLM_objs) $(saslGSSAPI_objs) $(saslSRP_objs) $(saslOTP_objs) $(saslSASLDB_objs) $(saslSQL_objs) $(saslLDAPDB_objs)
162all_out = $(saslANONYMOUS_out) $(saslPLAIN_out) $(saslCRAMMD5_out) $(saslDIGESTMD5_out) $(saslLOGIN_out) $(saslSCRAM_out) $(saslNTLM_out) $(saslGSSAPI_out) $(saslSRP_out) $(saslOTP_out) $(saslSASLDB_out) $(saslSQL_out) $(saslLDAPDB_out)
163
164# LIBSASL_EXPORTS is required to export additional DB routines from sasldb
165DB_FLAGS = /I $(DB_INCLUDE) /I "..\sasldb" /D "LIBSASL_EXPORTS" /D "KEEP_DB_OPEN"
166
167!IF $(TARGET_WIN_SYSTEM) >= 51
168EXTRA_FLAGS = /D TARGET_WIN_SYSTEM=$(TARGET_WIN_SYSTEM) $(EXTRA_FLAGS)
169!ENDIF
170
171EXTRA_FLAGS=$(EXTRA_FLAGS) $(DB_FLAGS) $(OPENSSL_FLAGS) $(GSS_FLAGS) $(SRP_FLAGS) $(SQL_FLAGS) $(DIGEST_FLAGS) $(CRAM_FLAGS) $(SCRAM_FLAGS) $(LDAP_FLAGS)
172CPPFLAGS = /I "..\win32\include" /I "." /I "..\include" $(EXTRA_FLAGS) /D "WIN32" /D "_WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL"
173
174OPENSSL_LIBS=/libpath:$(OPENSSL_LIBPATH) libeay32.lib ssleay32.lib
175
176# Where to install files from this directory
177libdir = $(prefix)\lib
178bindir = $(prefix)\bin\sasl2
179
180all : all-recursive
181
182#
183# /I flag to xcopy tells to treat the last parameter as directory and create all missing levels
184#
185# In order to force xcopy not to confirm if the second parameter is file or directory,
186# the first parameter has to contain a wildcard character. For example, we use libsasl.l*,
187# instead of libsasl.lib. Ugly, but works!
188#
189# Note, that we will copy all dlls here, not just $(PLUGINS). This is a bug, but it allows
190# us to copy GSSAPI plugin, which might not be in $(PLUGINS).
191#
192install: $(PLUGINS)
193	@xcopy *.dll $(bindir) /I /F /Y
194
195all-recursive : $(PLUGINS)
196
197getaddrinfo.c: ..\lib\getaddrinfo.c
198	xcopy /D /Y ..\lib\getaddrinfo.c .
199
200getnameinfo.c: ..\lib\getnameinfo.c
201	xcopy /D /Y ..\lib\getnameinfo.c .
202
203plugin_common.c: ..\common\plugin_common.c
204	xcopy /D /Y ..\common\plugin_common.c .
205
206plugin_common.h: ..\common\plugin_common.h
207	xcopy /D /Y ..\common\plugin_common.h .
208
209allockey.c: ..\sasldb\allockey.c
210	xcopy /D /Y ..\sasldb\allockey.c .
211
212db_berkeley.c: ..\sasldb\db_berkeley.c
213	xcopy /D /Y ..\sasldb\db_berkeley.c .
214
215db_lmdb.c: ..\sasldb\db_lmdb.c
216	xcopy /D /Y ..\sasldb\db_lmdb.c .
217
218#Add /pdb: option?
219
220saslANONYMOUS.dll: $(saslANONYMOUS_objs) saslANONYMOUS.res
221	$(LINK32DLL) @<< $(LINK32DLL_FLAGS) /out:"saslANONYMOUS.dll" /implib:"saslANONYMOUS.lib" $(saslANONYMOUS_objs) saslANONYMOUS.res
222<<
223	IF EXIST $@.manifest mt -manifest $@.manifest -outputresource:$@;2
224
225saslPLAIN.dll: $(saslPLAIN_objs) saslPLAIN.res
226	$(LINK32DLL) @<< $(LINK32DLL_FLAGS) /out:"saslPLAIN.dll" /implib:"saslPLAIN.lib" $(saslPLAIN_objs) saslPLAIN.res
227<<
228	IF EXIST $@.manifest mt -manifest $@.manifest -outputresource:$@;2
229
230saslCRAMMD5.dll: $(saslCRAMMD5_objs) saslCRAMMD5.res
231	$(LINK32DLL) @<< $(LINK32DLL_FLAGS) /out:"saslCRAMMD5.dll" /implib:"saslCRAMMD5.lib" $(saslCRAMMD5_objs) saslCRAMMD5.res
232<<
233	IF EXIST $@.manifest mt -manifest $@.manifest -outputresource:$@;2
234
235saslDIGESTMD5.dll: $(saslDIGESTMD5_objs) saslDIGESTMD5.res
236	$(LINK32DLL) @<< $(LINK32DLL_FLAGS) /out:"saslDIGESTMD5.dll" /implib:"saslDIGESTMD5.lib" $(saslDIGESTMD5_objs) saslDIGESTMD5.res
237<<
238	IF EXIST $@.manifest mt -manifest $@.manifest -outputresource:$@;2
239
240saslLOGIN.dll: $(saslLOGIN_objs) saslLOGIN.res
241	$(LINK32DLL) @<< $(LINK32DLL_FLAGS) /out:"saslLOGIN.dll" /implib:"saslLOGIN.lib" $(saslLOGIN_objs) saslLOGIN.res
242<<
243	IF EXIST $@.manifest mt -manifest $@.manifest -outputresource:$@;2
244
245saslSCRAM.dll: $(saslSCRAM_objs) saslSCRAM.res
246	$(LINK32DLL) @<< $(OPENSSL_LIBS) $(LINK32DLL_FLAGS) /out:"saslSCRAM.dll" /implib:"saslSCRAM.lib" $(saslSCRAM_objs) saslSCRAM.res
247<<
248	IF EXIST $@.manifest mt -manifest $@.manifest -outputresource:$@;2
249
250saslNTLM.dll: $(saslNTLM_objs) saslNTLM.res
251	$(LINK32DLL) @<< $(OPENSSL_LIBS) $(LINK32DLL_FLAGS) /out:"saslNTLM.dll" /implib:"saslNTLM.lib" $(saslNTLM_objs) saslNTLM.res
252<<
253	IF EXIST $@.manifest mt -manifest $@.manifest -outputresource:$@;2
254
255saslGSSAPI.dll: $(saslGSSAPI_objs) saslGSSAPI.res
256	$(LINK32DLL) @<< $(GSS_LIBS) $(LINK32DLL_FLAGS) /out:"saslGSSAPI.dll" /implib:"saslGSSAPI.lib" $(saslGSSAPI_objs) saslGSSAPI.res
257<<
258	IF EXIST $@.manifest mt -manifest $@.manifest -outputresource:$@;2
259
260saslSRP.dll: $(saslSRP_objs) saslSRP.res
261	$(LINK32DLL) @<< $(OPENSSL_LIBS) $(LINK32DLL_FLAGS) /out:"saslSRP.dll" /implib:"saslSRP.lib" $(saslSRP_objs) saslSRP.res
262<<
263	IF EXIST $@.manifest mt -manifest $@.manifest -outputresource:$@;2
264
265saslOTP.dll: $(saslOTP_objs) saslOTP.res
266	$(LINK32DLL) @<< $(OPENSSL_LIBS) $(LINK32DLL_FLAGS) /out:"saslOTP.dll" /implib:"saslOTP.lib" $(saslOTP_objs) saslOTP.res
267<<
268	IF EXIST $@.manifest mt -manifest $@.manifest -outputresource:$@;2
269
270saslSASLDB.dll: $(saslSASLDB_objs) saslSASLDB.res
271	$(LINK32DLL) @<< $(DB_LIBS) $(LINK32DLL_FLAGS) /out:"saslSASLDB.dll" /implib:"saslSASLDB.lib" $(saslSASLDB_objs) saslSASLDB.res
272<<
273	IF EXIST $@.manifest mt -manifest $@.manifest -outputresource:$@;2
274
275saslSQLITE.dll: $(saslSQL_objs) saslSQLITE.res
276	$(LINK32DLL) @<< $(SQLITE_LIBS) $(LINK32DLL_FLAGS) /out:"saslSQLITE.dll" /implib:"saslSQLITE.lib" $(saslSQL_objs) saslSQLITE.res
277<<
278	IF EXIST $@.manifest mt -manifest $@.manifest -outputresource:$@;2
279
280saslLDAPDB.dll: $(saslLDAPDB_objs) saslLDAPDB.res
281	$(LINK32DLL) @<< $(LDAP_LIBS) $(OPENSSL_LIBS) $(LINK32DLL_FLAGS) /out:"saslLDAPDB.dll" /implib:"saslLDAPDB.lib" $(saslLDAPDB_objs) saslLDAPDB.res
282<<
283	IF EXIST $@.manifest mt -manifest $@.manifest -outputresource:$@;2
284
285CLEAN :
286	-@erase $(all_objs)
287	-@erase "*.idb"
288	-@erase "*.pdb"
289	-@erase "*.manifest"
290	-@erase getaddrinfo.c
291	-@erase allockey.c
292	-@erase db_berkeley.c
293	-@erase db_lmdb.c
294	-@erase getnameinfo.c
295	-@erase plugin_common.h
296	-@erase plugin_common.c
297	-@erase $(generated_rc)
298	-@erase "*.res"
299	-@erase $(all_out)
300
301.c.obj::
302   $(CPP) @<<
303   $(CPP_PROJ) $<
304<<
305
306.cpp.obj::
307   $(CPP) @<<
308   $(CPP_PROJ) $<
309<<
310
311.cxx.obj::
312   $(CPP) @<<
313   $(CPP_PROJ) $<
314<<
315
316.rc.res:
317	rc $<
318
319$(generated_rc):
320	copy <<temp.rc $@
321#include "windows.h"
322
323VS_VERSION_INFO VERSIONINFO
324 FILEVERSION $(SASL_VERSION_MAJOR),$(SASL_VERSION_MINOR),$(SASL_VERSION_STEP),0
325 PRODUCTVERSION $(SASL_VERSION_MAJOR),$(SASL_VERSION_MINOR),$(SASL_VERSION_STEP),0
326 FILEFLAGSMASK 0x3fL
327#ifdef _DEBUG
328 FILEFLAGS 0x1L
329#else
330 FILEFLAGS 0x0L
331#endif
332 FILEOS 0x40004L
333 FILETYPE 0x1L
334 FILESUBTYPE 0x0L
335BEGIN
336    BLOCK "StringFileInfo"
337    BEGIN
338        BLOCK "040904b0"
339        BEGIN
340            VALUE "CompanyName", "Carnegie Mellon University\0"
341            VALUE "FileDescription", "CMU SASL $(@B) plugin\0"
342            VALUE "FileVersion", "$(SASL_VERSION_MAJOR).$(SASL_VERSION_MINOR).$(SASL_VERSION_STEP).0\0"
343            VALUE "InternalName", "$(@B)\0"
344            VALUE "LegalCopyright", "Copyright (c) Carnegie Mellon University 2002-2017\0"
345            VALUE "OriginalFilename", "$(@B).dll\0"
346            VALUE "ProductName", "Carnegie Mellon University SASL\0"
347            VALUE "ProductVersion", "$(SASL_VERSION_MAJOR).$(SASL_VERSION_MINOR).$(SASL_VERSION_STEP)-0"
348        END
349    END
350    BLOCK "VarFileInfo"
351    BEGIN
352        VALUE "Translation", 0x409, 1200
353    END
354END
355<<
356