Compiles and links yaz.dll and client.exe, which seems to work.
[yaz-moved-to-github.git] / win / makefile.mak
1 # Makefile.mak - makefile for MS NMAKE 
2 #
3 # Programmed by
4 #  HL: Heikki Levanto, Index Data
5 #
6 # History
7 #  18-05-99 HL Stole this from YazX, cleaning up
8 #
9 # Missing
10 #  - get it to work
11 #  - yaz dll
12 #  - client
13 #  - server
14 #  - ztest
15 #  
16 # Envoronment problems
17 # - You need to have the proper path and environment for VC set
18 #   up. There is a bat file VCVARS32.BAT that sets most of it up
19 #   for you. You can find this somewhere near DevStudio\VC\BIN
20 # - RegSvr32 must also be along the path, often in WINDOWS\SYSTEM
21
22 ###########################################################
23 ############### Parameters 
24 ###########################################################
25
26 DEBUG=1   # 0 for release, 1 for debug
27
28 default: all
29 all: dirs dll client
30
31
32
33 ###########################################################
34 ############### Directories
35 ###########################################################
36 # The current directory is supposed to be something like
37 # ..../Yaz/Win, everything is relative to that
38 ROOTDIR=..   # The home of Yaz
39
40 INCLDIR=$(ROOTDIR)\include  # our includes
41 LIBDIR=$(ROOTDIR)\lib       # We produce .lib, .exp etc there
42 BINDIR=$(ROOTDIR)\bin       # We produce exes and dlls there
43 WINDIR=$(ROOTDIR)\win       # all these Win make things
44 OBJDIR=$(WINDIR)\obj        # where we store intermediate files
45 UNIXDIR=$(ROOTDIR)\unix     # corresponding unix things
46 SRCDIR=$(ROOTDIR)           # for the case we move them under src
47
48 YAZASNDIR=$(SRCDIR)\ASN
49 YAZCOMSTACKDIR=$(SRCDIR)\COMSTACK
50 YAZODRDIR=$(SRCDIR)\ODR
51 YAZUTILDIR=$(SRCDIR)\UTIL
52 YAZRETDIR=$(SRCDIR)\RETRIEVAL
53
54 YAZCLIENTDIR=$(SRCDIR)\CLIENT
55
56 ###########################################################
57 ############### Targets - what to make
58 ###########################################################
59
60
61 DLL=$(BINDIR)\Yaz.dll
62 IMPLIB=$(BINDIR)\Yaz.lib
63 BSCFILE=$(LIBDIR)\Yaz.bsc
64
65 CLIENT=$(BINDIR)\client.exe
66
67 # shortcut names defined here
68 dll : $(DLL)  $(BSCFILE)
69 client: $(CLIENT)
70
71 ###########################################################
72 ############### Compiler and linker options 
73 ###########################################################
74
75
76 ### C and CPP compiler  (the same thing)
77 # Note: $(CPP) has already been defined in the environment
78 # (if you set things up right!)
79
80 COMMON_C_OPTIONS=          \
81   /nologo /W3 /GX /FD /c   \
82   /D "WIN32" /D "_WINDOWS" \
83   /FR"$(OBJDIR)\\"         \
84   /Fo"$(OBJDIR)\\"         \
85   /Fd"$(OBJDIR)\\" 
86
87 #  /Fp"$(OBJDIR)\YazX3950.pch" \
88 #  /D "_WIN32_DCOM" \
89
90 COMMON_C_INCLUDES= \
91   /I"$(SRCDIR)\include"
92
93 #  /I"$(ROOTDIR)" \
94 #  /I"$(OBJDIR)" 
95
96 DEBUG_C_OPTIONS=  \
97   /D "_DEBUG"      \
98   /MD  /Od /YX  
99  
100 RELEASE_C_OPTIONS=  \
101   /D "NDEBUG"        \
102   /MDd /O2 /Gm /ZI 
103
104
105 ### The RC compiler (resource files)
106 RSC=rc.exe
107 COMMON_RC_OPTIONS= /l 0x406 /i"$(ROOTDIR)" 
108 DEBUG_RC_OPTIONS=/d "_DEBUG"
109 RELEASE_RC_OPTIONS=/d "NDEBUG"
110
111
112 ### Linker options
113 LINK=link.exe
114
115 DLL_LINK_LIBS= kernel32.lib user32.lib   gdi32.lib   winspool.lib \
116            comdlg32.lib advapi32.lib shell32.lib ole32.lib    \
117            oleaut32.lib uuid.lib     odbc32.lib  odbccp32.lib \
118            wsock32.lib 
119
120
121 #odbccp32.lib yaz.lib /nologo /subsystem:console /incremental:no /pdb:".\Debug/client.pdb" /debug /machine:I386 /out:".\Debug/client.exe" /libpath:"..\debug" 
122
123 COMMON_LNK_OPTIONS= /nologo \
124                     /subsystem:windows \
125                     /incremental:no \
126                     /machine:i386 
127                                         
128 DEBUG_LNK_OPTIONS= /debug \
129                    /incremental:no 
130
131 RELEASE_LNK_OPTIONS=  /pdb:none
132
133 DLL_LINK_OPTIONS= /dll
134 CLIENT_LINK_OPTIONS = /subsystem:console
135
136
137 ### BSC compiler options
138
139 BSCMAKE=bscmake.exe
140
141
142 COMMON_BSC_OPTIONS= /nologo /o "$(BSCFILE)" /n
143 DEBUG_BSC_OPTIONS=
144 RELEASE_BSC_OPTIONS=
145
146 # Final opt variables
147 !if $(DEBUG)
148 COPT=   $(COMMON_C_OPTIONS)   $(DEBUG_C_OPTIONS)     $(COMMON_C_INCLUDES)
149 MTLOPT= $(COMMON_MTL_OPTIONS) $(DEBUG_MTL_OPTIONS)
150 RCOPT=  $(COMMON_RC_OPTIONS)  $(DEBUG_RC_OPTIONS)
151 LNKOPT= $(COMMON_LNK_OPTIONS) $(DEBUG_LNK_OPTIONS)   $(LNK_LIBS)
152 BSCOPT= $(COMMON_BSC_OPTIONS) $(DEBUG_BSC_OPTIONS)
153
154 !else
155 COPT=   $(COMMON_C_OPTIONS)   $(RELEASE_C_OPTIONS)   $(COMMON_C_INCLUDES) 
156 MTLOPT= $(COMMON_MTL_OPTIONS) $(RELEASE_MTL_OPTIONS)
157 RCOPT=  $(COMMON_RC_OPTIONS)  $(RELEASE_RC_OPTIONS)
158 LNKOPT= $(COMMON_LNK_OPTIONS) $(RELEASE_LNK_OPTIONS) $(LNK_LIBS)
159 BSCOPT= $(COMMON_BSC_OPTIONS) $(RELEASE_BSC_OPTIONS)
160 !endif
161
162
163
164 ###########################################################
165 ###############  Source and object modules
166 ###########################################################
167
168 # The resource files
169
170 RCFILE=$(SRCDIR)\compmak.rc
171 # Horrible Hack: The resfile contains just one line, pointing
172 # to the component.tlb file (which is created by the idl compiler)
173 # Devstudio wants that file to live in YazX3950, this makefile in
174 # win/obj. So we need to RC files!
175
176 RESFILE=$(OBJDIR)\component.res
177
178
179 # The def file
180 #DEF_FILE= $(ROOTDIR)\component.def 
181
182
183
184 # Note: Ordinary source files are not specified here at 
185 # all, make finds them in suitable dirs. The object modules
186 # need to be specified, though
187
188 YAZ_CLIENT_OBJS= \
189    $(OBJDIR)\client.obj
190
191 YAZ_ASN_OBJS= \
192    $(OBJDIR)\diagbib1.obj \
193    $(OBJDIR)\proto.obj \
194    $(OBJDIR)\prt-acc.obj \
195    $(OBJDIR)\prt-add.obj \
196    $(OBJDIR)\prt-arc.obj \
197    $(OBJDIR)\prt-dat.obj \
198    $(OBJDIR)\prt-dia.obj \
199    $(OBJDIR)\prt-esp.obj \
200    $(OBJDIR)\prt-exd.obj \
201    $(OBJDIR)\prt-exp.obj \
202    $(OBJDIR)\prt-ext.obj \
203    $(OBJDIR)\prt-grs.obj \
204    $(OBJDIR)\prt-rsc.obj \
205    $(OBJDIR)\prt-univ.obj \
206    $(OBJDIR)\zget.obj 
207
208 YAZ_COMSTACK_OBJS= \
209    $(OBJDIR)\comstack.obj \
210    $(OBJDIR)\tcpip.obj \
211    $(OBJDIR)\waislen.obj 
212
213 YAZ_ODR_OBJS= \
214    $(OBJDIR)\ber_any.obj \
215    $(OBJDIR)\ber_bit.obj \
216    $(OBJDIR)\ber_bool.obj \
217    $(OBJDIR)\ber_int.obj \
218    $(OBJDIR)\ber_len.obj \
219    $(OBJDIR)\ber_null.obj \
220    $(OBJDIR)\ber_oct.obj \
221    $(OBJDIR)\ber_oid.obj \
222    $(OBJDIR)\ber_tag.obj \
223    $(OBJDIR)\dumpber.obj \
224    $(OBJDIR)\odr.obj \
225    $(OBJDIR)\odr_any.obj \
226    $(OBJDIR)\odr_bit.obj \
227    $(OBJDIR)\odr_bool.obj \
228    $(OBJDIR)\odr_choice.obj \
229    $(OBJDIR)\odr_cons.obj \
230    $(OBJDIR)\odr_enum.obj \
231    $(OBJDIR)\odr_int.obj \
232    $(OBJDIR)\odr_mem.obj \
233    $(OBJDIR)\odr_null.obj \
234    $(OBJDIR)\odr_oct.obj \
235    $(OBJDIR)\odr_oid.obj \
236    $(OBJDIR)\odr_priv.obj \
237    $(OBJDIR)\odr_seq.obj \
238    $(OBJDIR)\odr_tag.obj \
239    $(OBJDIR)\odr_use.obj \
240    $(OBJDIR)\odr_util.obj 
241
242 YAZ_UTIL_OBJS= \
243    $(OBJDIR)\atoin.obj \
244    $(OBJDIR)\dmalloc.obj \
245    $(OBJDIR)\log.obj \
246    $(OBJDIR)\logrpn.obj \
247    $(OBJDIR)\marcdisp.obj \
248    $(OBJDIR)\nmem.obj \
249    $(OBJDIR)\nmemsdup.obj \
250    $(OBJDIR)\oid.obj \
251    $(OBJDIR)\options.obj \
252    $(OBJDIR)\pquery.obj \
253    $(OBJDIR)\query.obj \
254    $(OBJDIR)\readconf.obj \
255    $(OBJDIR)\tpath.obj \
256    $(OBJDIR)\wrbuf.obj \
257    $(OBJDIR)\xmalloc.obj \
258    $(OBJDIR)\yaz-ccl.obj \
259    $(OBJDIR)\yaz-util.obj 
260
261 YAZ_RET_OBJS= \
262    $(OBJDIR)\d1_absyn.obj\
263    $(OBJDIR)\d1_attset.obj\
264    $(OBJDIR)\d1_doespec.obj\
265    $(OBJDIR)\d1_espec.obj\
266    $(OBJDIR)\d1_expout.obj\
267    $(OBJDIR)\d1_grs.obj\
268    $(OBJDIR)\d1_handle.obj\
269    $(OBJDIR)\d1_map.obj\
270    $(OBJDIR)\d1_marc.obj\
271    $(OBJDIR)\d1_prtree.obj\
272    $(OBJDIR)\d1_read.obj\
273    $(OBJDIR)\d1_soif.obj\
274    $(OBJDIR)\d1_sumout.obj\
275    $(OBJDIR)\d1_sutrs.obj\
276    $(OBJDIR)\d1_tagset.obj\
277    $(OBJDIR)\d1_varset.obj\
278    $(OBJDIR)\d1_write.obj
279
280 YAZ_OBJS= \
281    $(YAZ_ASN_OBJS) \
282    $(YAZ_COMSTACK_OBJS) \
283    $(YAZ_ODR_OBJS) \
284    $(YAZ_UTIL_OBJS) \
285    $(YAZ_RET_OBJS)
286
287 DLL_OBJS= $(YAZ_OBJS)
288
289
290 ###########################################################
291 ############### Compiling 
292 ###########################################################
293
294 # Note: This defines where to look for the necessary
295 # source files. Funny way of doing it, but it works.
296
297 # DLL sources
298 {$(SRCDIR)}.cpp{$(OBJDIR)}.obj:
299         @$(CPP) @<<
300         $(COPT) $<
301 <<
302
303 # Yaz client
304 {$(YAZCLIENTDIR)}.c{$(OBJDIR)}.obj:
305         @$(CPP) @<<  
306       /D"_CONSOLE"
307         $(COPT) $< 
308 <<
309
310
311 # Various YAZ source directories
312 {$(YAZASNDIR)}.c{$(OBJDIR)}.obj:
313         @$(CPP) @<<  
314         $(COPT) $< 
315 <<
316
317 {$(YAZCOMSTACKDIR)}.c{$(OBJDIR)}.obj:
318         @$(CPP) @<<  
319         $(COPT) $< 
320 <<
321
322 {$(YAZODRDIR)}.c{$(OBJDIR)}.obj:
323         @$(CPP) @<<  
324         $(COPT) $< 
325 <<
326
327 {$(YAZUTILDIR)}.c{$(OBJDIR)}.obj:
328         @$(CPP) @<<  
329         $(COPT) $< 
330 <<
331
332 {$(YAZRETDIR)}.c{$(OBJDIR)}.obj:
333         @$(CPP) @<<  
334         $(COPT) $< 
335 <<
336
337
338 ### Resource file
339 $(RESFILE): $(RCFILE) $(IDLGENERATED)
340         $(RSC) $(RCOPT) /fo"$(RESFILE)" $(RCFILE) 
341
342
343 ###########################################################
344 ############### Linking
345 ###########################################################
346
347
348 $(DLL) $(IMPLIB): "$(BINDIR)" $(DLL_OBJS) 
349         $(LINK) @<<
350             $(LNKOPT) 
351                 $(DLL_LINK_LIBS) 
352                 $(DLL_LINK_OPTIONS)
353                 $(DLL_OBJS) 
354                 /out:$(DLL) 
355                 /implib:$(IMPLIB)
356             /pdb:"$(LIBDIR)/yaz.pdb" 
357             /map:"$(LIBDIR)/yaz.map"  
358 <<
359
360 $(CLIENT) : "$(BINDIR)" $(YAZ_CLIENT_OBJS) 
361         $(LINK) @<<
362             $(LNKOPT) 
363                 $(CLIENT_LINK_OPTIONS)
364                 $(LINK_LIBS) 
365                 $(IMPLIB)
366                 $(YAZ_CLIENT_OBJS) 
367                 /out:$(CLIENT) 
368 <<
369
370
371
372 #       regsvr32 /s /c "$(DLL)" 
373 #               /def:$(DEF_FILE)
374
375
376 ## Linking the debug info database (or what ever this is...)
377 $(BSCFILE): $(DLL_OBJS)
378         $(BSCMAKE) $(BSCOPT) $(OBJDIR)\*.sbr
379
380
381 #       @echo OPT=$(LNKOPT)
382 #       @echo LIB=$(LINKLIBS)
383 #       @echo OBJ=$(DLL_OBJS)
384 #       @echo DEF=$(DEF_FILE)
385
386 ###########################################################
387 ############### Special operations
388 ###########################################################
389
390
391 ############## clean
392 clean:
393         deltree /y "$(OBJDIR)/*.*"
394
395
396 ########### check directories and create if needed
397 dirs: $(OBJDIR) $(WINDIR) $(LIBDIR) $(BINDIR)
398
399 $(OBJDIR) $(WINDIR) $(LIBDIR) $(BINDIR) :
400         if not exist "$@/$(NUL)" mkdir "$@"
401
402 ### test target while debugging makefile...
403 foo:  $(RESFILE)
404         echo Ok
405
406 ###########################################################
407 ############### Explicit dependencies
408 ###########################################################
409
410 $(OBJDIR)/client.obj: $(IDLGENERATED)
411
412
413
414
415