Release 1.6.4
[yazpp-moved-to-github.git] / win / makefile
1 # This file is part of the yazpp toolkit
2 # Copyright (C) Index Data
3 # See the file LICENSE for details.
4
5 # Parameters 
6 DEBUG=0   # 0 for release, 1 for debug
7
8 # YAZ
9 YAZ_DIR=..\..\yaz
10
11 default: all
12
13 all: dirs generated dll myclient zclient yaz
14
15 # Directories
16 # The current directory is supposed to be something like
17 # ..../yaz/win, everything is relative to that
18 ROOTDIR=..   # The home of yazpp
19
20 INCLDIR=$(ROOTDIR)\include  # our includes
21 LIBDIR=$(ROOTDIR)\lib       # We produce .lib, .exp etc there
22 BINDIR=$(ROOTDIR)\bin       # We produce exes and dlls there
23 WINDIR=$(ROOTDIR)\win       # all these Win make things
24 SRCDIR=$(ROOTDIR)\src       # for the case we move them under src
25 ZOOMDIR=$(ROOTDIR)\zoom
26
27 !if $(DEBUG)
28 OBJDIR=$(WINDIR)\dobj
29 !else
30 OBJDIR=$(WINDIR)\obj
31 !endif
32
33 TMPDIR=$(ROOTDIR)\win\tmp
34 TMP=$(TMPDIR)
35
36 # Targets - what to make
37
38 !if $(DEBUG)
39 DLL=$(BINDIR)\yazpp6d.dll
40 YAZPP_IMPLIB=$(LIBDIR)\yazpp6d.lib
41 YAZD=yaz5d
42 !else
43 DLL=$(BINDIR)\yazpp6.dll
44 YAZPP_IMPLIB=$(LIBDIR)\yazpp6.lib
45 YAZD=yaz5
46 !endif
47
48 ZCLIENT=$(BINDIR)\zclient.exe
49 MY_CLIENT=$(BINDIR)\yaz-my-client.exe
50
51 # shortcut names defined here
52 dll: $(DLL)
53 zclient: $(ZCLIENT)
54 myclient: $(MY_CLIENT)
55
56 # Compiler and linker options 
57
58 # YAZ includes & libs
59 YAZ_LIB="$(YAZ_DIR)\lib\$(YAZD).lib"
60 YAZ_DEF=/I"$(YAZ_DIR)\include"
61 yaz: $(BINDIR)\$(YAZD).dll 
62
63 $(BINDIR)\$(YAZD).dll: "$(YAZ_DIR)\bin\$(YAZD).dll"
64   copy "$(YAZ_DIR)\bin\$(YAZD).dll" $(BINDIR)
65
66 COMMON_C_OPTIONS=          \
67   /nologo /W3 /EHsc /FD /c \
68   /D "_CRT_SECURE_NO_DEPRECATE" \
69   $(YAZ_DEF)               \
70   /D "_WINDOWS"            \
71   /D "WIN32"               \
72   /D "HAVE_WCHAR_H=1"      \
73   /FR"$(OBJDIR)\\"         \
74   /Fo"$(OBJDIR)\\"         \
75   /Fd"$(OBJDIR)\\" 
76
77 COMMON_C_INCLUDES= \
78   /I"$(ROOTDIR)\include"
79
80 DEBUG_C_OPTIONS=  \
81   /D "_DEBUG"      \
82   /MDd  /Od /Zi /Gm
83
84 RELEASE_C_OPTIONS=  \
85   /D "NDEBUG"        \
86   /MD /O2
87
88 # /W3  = warning level
89 # /GX  = Enable exception handling
90 # /FD  = Generate file dependencies (what ever they are)
91 # /c   = compile without linking
92 # /FR  = Generate browse info (.sbr file that gets combined into .bsc)
93 # /Fo  = object file name (or at least path)
94 # /Fd  = debug database name (or path)
95 # /MD  = Runtime library: Multithread DLL
96 # /MDd = Runtime library: Multithread DLL (debug)
97 # /Od  = Disable optimising (debug)
98 # /O2  = Optimize for speed
99 # /Gm  = Minimal rebuild (some cpp class stuff)
100 # /Zi  = Program database for debuggers
101 # /ZI  = Pgm database with special "edit&continue" stuff - not available in C5
102
103
104 ### Linker options
105 LINK=link.exe
106
107 LINK_LIBS= kernel32.lib advapi32.lib $(YAZ_LIB)
108
109 COMMON_LNK_OPTIONS= /nologo /subsystem:windows /incremental:no $(MTOPT)
110
111 DEBUG_LNK_OPTIONS= /debug 
112
113 RELEASE_LNK_OPTIONS=
114
115 DLL_LINK_OPTIONS= /dll  
116 CLIENT_LINK_OPTIONS = /subsystem:console  
117
118 # Final opt variables
119 !if $(DEBUG)
120 COPT=   $(COMMON_C_OPTIONS)   $(DEBUG_C_OPTIONS)     $(COMMON_C_INCLUDES)
121 LNKOPT= $(COMMON_LNK_OPTIONS) $(DEBUG_LNK_OPTIONS)
122
123 !else
124 COPT=   $(COMMON_C_OPTIONS)   $(RELEASE_C_OPTIONS)   $(COMMON_C_INCLUDES) 
125 LNKOPT= $(COMMON_LNK_OPTIONS) $(RELEASE_LNK_OPTIONS)
126 !endif
127
128 # Source and object modules
129
130 DLL_OBJS = \
131    "$(OBJDIR)\timestat.obj" \
132    "$(OBJDIR)\gdu.obj" \
133    "$(OBJDIR)\gduqueue.obj" \
134    "$(OBJDIR)\limit-connect.obj" \
135    "$(OBJDIR)\pdu-observer.obj" \
136    "$(OBJDIR)\query.obj" \
137    "$(OBJDIR)\socket-observer.obj" \
138    "$(OBJDIR)\z-server.obj" \
139    "$(OBJDIR)\yaz-socket-manager.obj" \
140    "$(OBJDIR)\yaz-pdu-assoc.obj" \
141    "$(OBJDIR)\yaz-z-assoc.obj" \
142    "$(OBJDIR)\yaz-z-query.obj" \
143    "$(OBJDIR)\yaz-ir-assoc.obj" \
144    "$(OBJDIR)\yaz-z-server.obj" \
145    "$(OBJDIR)\yaz-pdu-assoc-thread.obj" \
146    "$(OBJDIR)\yaz-z-server-sr.obj" \
147    "$(OBJDIR)\yaz-z-server-ill.obj" \
148    "$(OBJDIR)\yaz-z-server-update.obj" \
149    "$(OBJDIR)\yaz-z-databases.obj" \
150    "$(OBJDIR)\yaz-z-cache.obj" \
151    "$(OBJDIR)\yaz-cql2rpn.obj" \
152    "$(OBJDIR)\zexcept.obj" \
153    "$(OBJDIR)\zconn.obj" \
154    "$(OBJDIR)\zquery.obj" \
155    "$(OBJDIR)\zrs.obj" \
156    "$(OBJDIR)\zrec.obj"
157
158 MY_CLIENT_OBJS = \
159    "$(OBJDIR)\yaz-my-client.obj"
160
161 ZCLIENT_OBJS = \
162    "$(OBJDIR)\zclient.obj"
163
164 {$(SRCDIR)}.cpp{$(OBJDIR)}.obj:
165         $(CPP) $(COPT) $< 
166
167 {$(ZOOMDIR)}.cpp{$(OBJDIR)}.obj:
168         $(CPP) $(COPT) $< 
169
170 LINK_DLL = $(LINK) $(LNKOPT) $(LINK_LIBS) $(DLL_LINK_OPTIONS)
171 LINK_PROGRAM = $(LINK) $(LNKOPT) $(CLIENT_LINK_OPTIONS) $(LINK_LIBS) $(YAZPP_IMPLIB)
172
173 $(DLL) $(YAZPP_IMPLIB): "$(BINDIR)" $(DLL_OBJS)
174         $(LINK_DLL) $(DLL_OBJS) /out:$@ /implib:"$(YAZPP_IMPLIB)" 
175
176 $(MY_CLIENT) : "$(BINDIR)" $(MY_CLIENT_OBJS) $(YAZPP_IMPLIB)
177         $(LINK_PROGRAM) $(MY_CLIENT_OBJS) /out:$@
178
179 $(ZCLIENT) : "$(BINDIR)" $(ZCLIENT_OBJS) $(YAZPP_IMPLIB)
180         $(LINK_PROGRAM) $(ZCLIENT_OBJS) /out:$@
181
182 generated: $(ZOOMDIR)\zoom.h
183
184 "$(ZOOMDIR)\zoom.h": "$(ZOOMDIR)\master-header"
185         sed "s/^*       /       /; s/^*/ /" < "$(ZOOMDIR)\master-header" >"$(ZOOMDIR)\zoom.h"
186
187 clean:
188         -del $(BINDIR)\*.exe
189         -del $(BINDIR)\*.dll
190         -del $(TMPDIR)\*.
191         -del $(LIBDIR)\*.LIB
192         -del $(OBJDIR)\*.OBJ
193
194 realclean: clean
195         -del $(ZOOMDIR)\zoom.h
196
197 dirs: $(OBJDIR) $(WINDIR) $(LIBDIR) $(BINDIR) $(TMPDIR)
198
199 $(OBJDIR) $(WINDIR) $(LIBDIR) $(BINDIR) $(TMPDIR):
200         if not exist "$@/$(NUL)" mkdir "$@"
201