windows-netidmgr-extension-sample-20080217
[openafs.git] / src / WINNT / netidmgr_plugin / extensions / sample / Makefile
1 #
2 # Copyright (c) 2008 Secure Endpoints Inc.
3 #
4 # Permission is hereby granted, free of charge, to any person
5 # obtaining a copy of this software and associated documentation files
6 # (the "Software"), to deal in the Software without restriction,
7 # including without limitation the rights to use, copy, modify, merge,
8 # publish, distribute, sublicense, and/or sell copies of the Software,
9 # and to permit persons to whom the Software is furnished to do so,
10 # subject to the following conditions:
11 #
12 # The above copyright notice and this permission notice shall be
13 # included in all copies or substantial portions of the Software.
14 #
15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19 # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20 # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 # SOFTWARE.
23
24 # Environment variables
25 # ---------------------
26 #
27 # Before running the makefile, set the environment variable KFWSDKDIR
28 # to the directory containing the Kerberos for Windows SDK version 3.1
29 # or later.  The path should not end in a backslash.
30
31 # Configuration settings
32 # ----------------------
33
34 # Declare a few things about our plug-in.
35
36 # TODO: Change the plug-in name
37 PLUGINNAME=MyAFSExtPlugin
38
39 # TODO: Change the module name
40 MODULENAME=MyAFSExtModule
41
42 # TODO: Change the authentication method name
43 AUTHMETHODNAME=$(PLUGINNAME)
44
45 # TODO: Change this as appropriate
46 DLLBASENAME=myplugin
47
48 # Version info
49
50 # TODO: Change the version numbers
51 VERMAJOR=0
52 VERMINOR=1
53 VERAUX  =0
54 VERPATCH=0
55
56 # Leave these as-is
57 VERLIST=$(VERMAJOR).$(VERMINOR).$(VERAUX).$(VERPATCH)
58 VERLISTC=$(VERMAJOR),$(VERMINOR),$(VERAUX),$(VERPATCH)
59
60 # Various checks
61
62 !ifndef MSSDK
63 ! error Platform SDK environment variables not set.
64 !endif
65
66 !ifndef KFWSDKDIR
67 ! error KFWSDKDIR environment variable not set.
68 !endif
69
70 !ifndef AFSPLUGINDIR
71 ! error AFSPLUGINDIR environment variable not set.
72 !endif
73
74 # Directories
75
76 BUILDROOT=.
77
78 !ifdef NODEBUG
79 BUILDTYPE=release
80 !else
81 BUILDTYPE=debug
82 !endif
83
84 !ifndef CPU
85 !error Environment variable 'CPU' is not defined.
86 !endif
87
88 DEST=$(BUILDROOT)\dest\$(CPU)_$(BUILDTYPE)
89 OBJ=$(BUILDROOT)\obj\$(CPU)_$(BUILDTYPE)
90
91 !ifndef NIDMRAWDIRS
92 KFWINCDIR=$(KFWSDKDIR)\inc
93 NIDMINCDIR=$(KFWINCDIR)\netidmgr
94 NIDMLIBDIR=$(KFWSDKDIR)\lib\$(CPU)
95 !else
96 NIDMINCDIR=$(KFWSDKDIR)\inc
97 NIDMLIBDIR=$(KFWSDKDIR)
98 !endif
99
100 # Win32.mak
101
102 !include <Win32.Mak>
103
104 # Program macros
105
106 CD=cd
107 RM=del /q
108 MKDIR=mkdir
109 RMDIR=rmdir
110 ECHO=echo
111 CP=copy /y
112 LINK=link
113 MC=mc
114
115 # Lots more macros
116
117 incflags = -I"$(NIDMINCDIR)" -I"$(OBJ)" -I"$(AFSPLUGINDIR)" -I.
118 rincflags = /i "$(NIDMINCDIR)" /i "$(OBJ)" /i "$(AFSPLUGINDIR)" /i .
119
120 ldebug = $(ldebug) /DEBUG
121 cdebug = $(cdebug) -Os -Zi
122
123 cdefines = $(cdefines) -DUNICODE -D_UNICODE
124
125 C2OBJ=$(CC) $(cdebug) $(cflags) $(incflags) $(cdefines) /Fo"$@" /c $**
126
127 DLLGUILINK=$(LINK) /NOLOGO $(ldebug) $(dlllflags) $(guilibsmt) /OUT:"$@" /IMPLIB:$(DEST)\$(@B).lib $**
128
129 DLLRESLINK=$(LINK) /NOLOGO /DLL /NOENTRY /MACHINE:$(PROCESSOR_ARCHITECTURE) /OUT:"$@" $**
130
131 RC2RES=$(RC) $(RFLAGS) $(rincflags) /fo "$@" $**
132
133 MC2RC=$(MC) $(MCFLAGS) -h "$(OBJ)\" -m 1024 -r "$(OBJ)\" -x "$(OBJ)\" $**
134
135 {}.c{$(OBJ)}.obj:
136         $(C2OBJ)
137
138 {$(OBJ)}.c{$(OBJ)}.obj:
139         $(C2OBJ)
140
141 {}.rc{$(OBJ)}.res:
142         $(RC2RES)
143
144 mkdirs::
145 !if !exist($(DEST))
146         $(MKDIR) "$(DEST)"
147 !endif
148 !if !exist($(OBJ))
149         $(MKDIR) "$(OBJ)"
150 !endif
151
152 clean::
153         $(RM) "$(OBJ)\*.*"
154         $(RM) "$(DEST)\*.*"
155
156 .SUFFIXES: .h
157
158 #
159 # Manifest handling
160 #
161 # Starting with Visual Studio 8, the C compiler and the linker
162 # generate manifests so that the applications will link with the
163 # correct side-by-side DLLs at run-time.  These are required for
164 # correct operation under Windows XP.  We also have custom manifests
165 # which need to be merged with the manifests that VS creates.
166 #
167 # The syntax for invoking the _VC_MANIFEST_EMBED_foo macro is:
168 # $(_VC_MANIFEST_EMBED_???) <any additional manifests that need to be merged in>
169 #
170
171 !ifndef MT
172 MT=mt.exe -nologo
173 !endif
174
175 _VC_MANIFEST_EMBED_EXE= \
176 if exist "$@.manifest" $(MT) -outputresource:"$@";1 -manifest "$@.manifest"
177
178 _VC_MANIFEST_EMBED_DLL=$(_VC_MANIFEST_EMBED_EXE)
179
180 # Note that if you are merging manifests, then the VS generated
181 # manifest should be cleaned up after calling _VC_MANIFEST_EMBED_???.
182 # This ensures that even if the DLL or EXE is executed in-place, the
183 # embedded manifest will be used.  Otherwise the $@.manifest file will
184 # be used.
185 _VC_MANIFEST_CLEAN= \
186 if exist "$@.manifest" $(RM) "$@.manifest"
187
188 # End of manifest handling
189
190
191 # Now for the actual build stuff
192
193 DLL=$(DEST)\$(DLLBASENAME).dll
194
195 LIBFILES= \
196         "$(NIDMLIBDIR)\nidmgr32.lib"
197
198 OBJFILES= \
199         $(OBJ)\afspext.obj      \
200         $(OBJ)\main.obj         \
201         $(OBJ)\plugin.obj       \
202         $(OBJ)\config_main.obj
203
204 DLLRESFILE=$(OBJ)\version.res
205
206 CONFIGHEADER=$(OBJ)\credacq_config.h
207
208 all: mkdirs $(CONFIGHEADER) $(DLL) lang
209
210 $(CONFIGHEADER): Makefile
211         $(CP) << "$@"
212 /* This is a generated file.  Do not modify directly. */
213
214 #pragma once
215
216 #define MYPLUGIN_DLLBASE "$(DLLBASENAME)"
217
218 #define MYPLUGIN_NAME "$(PLUGINNAME)"
219
220 #define MYMODULE_NAME "$(MODULENAME)"
221
222 #define AUTHMETHOD_NAME "$(AUTHMETHODNAME)"
223
224 #define VERSION_MAJOR $(VERMAJOR)
225 #define VERSION_MINOR $(VERMINOR)
226 #define VERSION_AUX   $(VERAUX)
227 #define VERSION_PATCH $(VERPATCH)
228
229 #define VERSION_LIST  $(VERLIST)
230 #define VERSION_LISTC $(VERLISTC)
231 #define VERSION_STRING "$(VERLIST)"
232
233 <<
234
235 clean::
236         $(RM) $(CONFIGHEADER)
237
238 $(DLL): $(OBJFILES) $(DLLRESFILE)
239         $(DLLGUILINK) $(LIBFILES)
240         $(_VC_MANIFEST_EMBED_DLL)
241         $(_VC_MANIFEST_CLEAN)
242
243 clean::
244         $(RM) $(DLL)
245
246 # Language specific resources
247
248 # (repeat the following block as needed, redefining LANG for each
249 # supported language)
250
251 # English-US
252 LANG=en_us
253
254 LANGDLL=$(DEST)\$(DLLBASENAME)_$(LANG).dll
255
256 lang:: $(LANGDLL)
257
258 $(LANGDLL): $(OBJ)\langres_$(LANG).res $(OBJ)\version_$(LANG).res
259         $(DLLRESLINK)
260         $(_VC_MANIFEST_EMBED_DLL)
261         $(_VC_MANIFEST_CLEAN)
262
263 clean::
264         $(RM) $(LANGDLL)
265
266 $(OBJ)\version_$(LANG).res: version.rc
267         $(RC) $(RFLAGS) $(rincflags) /d LANGRES /d LANG_$(LANG) /fo $@ $**
268
269 clean::
270         $(RM) $(OBJ)\version_$(LANG).res
271
272 $(OBJ)\langres_$(LANG).res: lang\$(LANG)\langres.rc
273         $(RC2RES)
274
275 clean::
276         $(RM) $(OBJ)\langres_$(LANG).res
277
278 # /English-US