Version 1.6.43
[pazpar2-moved-to-github.git] / win / makefile
1 # This file is part of Pazpar2.
2 # Copyright (C) Index Data
3 # See the file LICENSE for details.
4
5 DEBUG=0   # 0 for release, 1 for debug
6 USE_MANIFEST = 1 # Can be enabled Visual Studio 2005/2008
7 PACKAGE_NAME=pazpar2
8 PACKAGE_VERSION=1.6.43
9
10 # YAZ
11 YAZ_DIR=..\..\yaz
12
13 # Libxml2 + libxslt + associates
14 ZLIB_DIR=\zlib-1.2.3.win32
15 ICONV_DIR=\iconv-1.9.2.win32
16 LIBXML2_DIR=\libxml2-2.7.6.win32
17 LIBXSLT_DIR=\libxslt-1.1.26.win32
18
19 # ICU
20 HAVE_ICU=1
21 ICU_DIR=c:\icu
22
23 default: all
24
25 all: dirs yaz libxslt pazpar2
26
27 NSIS="c:\program files\nsis\makensis.exe"
28
29 dist: pazpar2.nsi
30         nmake DEBUG=1 clean
31         nmake DEBUG=0 clean
32         nmake DEBUG=0
33         $(NSIS) pazpar2.nsi
34
35 nsis: all
36         $(NSIS) pazpar2.nsi
37
38 nsishelp:
39         $(NSIS)
40
41 # Directories
42 ROOTDIR=..
43
44 BINDIR=$(ROOTDIR)\bin       # We produce exes and dlls there
45 WINDIR=$(ROOTDIR)\win       # all these Win make things
46 SRCDIR=$(ROOTDIR)\src       # for the case we move them under src
47
48 !if $(DEBUG)
49 OBJDIR=$(WINDIR)\dobj
50 !else
51 OBJDIR=$(WINDIR)\obj
52 !endif
53
54 TMPDIR=$(ROOTDIR)\win\tmp
55 TMP=$(TMPDIR)
56
57 PAZPAR2_EXE=$(BINDIR)\pazpar2.exe
58
59 pazpar2: $(PAZPAR2_EXE)
60
61 YAZBINDIR=$(YAZ_DIR)\bin
62 !if $(DEBUG)
63 YAZ_LIB="$(YAZ_DIR)\lib\yaz5d.lib" "$(YAZ_DIR)\lib\yaz_cond5d.lib" 
64 !if $(HAVE_ICU)
65 YAZ_LIB=$(YAZ_LIB) "$(YAZ_DIR)\lib\yaz_icu5d.lib"
66 !endif
67 YAZ_DLL_SOURCE="$(YAZBINDIR)\yaz5d.dll"
68 YAZ_DLL_TARGET="$(BINDIR)\yaz5d.dll"
69 !else
70 YAZ_LIB="$(YAZ_DIR)\lib\yaz5.lib" "$(YAZ_DIR)\lib\yaz_cond5.lib"
71 !if $(HAVE_ICU)
72 YAZ_LIB=$(YAZ_LIB) "$(YAZ_DIR)\lib\yaz_icu5.lib"
73 !endif
74 YAZ_DLL_SOURCE="$(YAZBINDIR)\yaz5.dll"
75 YAZ_DLL_TARGET="$(BINDIR)\yaz5.dll"
76 !endif
77
78 YAZ_DEF=/DYAZ_HAVE_XML2=2 /DYAZ_HAVE_XSLT=1 /I"$(YAZ_DIR)\include"
79
80 # Copy libxslt and associates to our bin directory
81 libxslt: $(BINDIR)\libxslt.dll
82
83 $(BINDIR)\libxslt.dll: "$(LIBXSLT_DIR)\bin\libxslt.dll"
84         copy "$(ICONV_DIR)\bin\iconv.dll" $(BINDIR)
85         copy "$(ZLIB_DIR)\bin\zlib1.dll" $(BINDIR)
86         copy "$(LIBXML2_DIR)\bin\libxml2.dll" $(BINDIR)
87         copy "$(LIBXSLT_DIR)\bin\libxslt.dll" $(BINDIR)
88
89
90 LIBXSLT_DEF= \
91             /I"$(ICONV_DIR)\include" \
92             /I"$(LIBXML2_DIR)\include" \
93             /I"$(LIBXSLT_DIR)\include"
94
95 LIBXSLT_LIB = \
96            "$(ICONV_DIR)\lib\iconv.lib" \
97            "$(LIBXML2_DIR)\lib\libxml2.lib" \
98            "$(LIBXSLT_DIR)\lib\libxslt.lib"
99
100 !if $(HAVE_ICU)
101 ICU_DEF=/DYAZ_HAVE_ICU=1 /I"$(ICU_DIR)\include"
102 ICU_LIB= $(ICU_DIR)\lib\icudt.lib \
103          $(ICU_DIR)\lib\icuin.lib \
104          $(ICU_DIR)\lib\icuuc.lib
105 !else
106 ICU_DEF=/DYAZ_HAVE_ICU=0
107 ICU_LIB=
108 !endif
109
110 COMMON_C_OPTIONS=          \
111   /nologo /W3 /EHsc /FD /c \
112   /D "_CRT_SECURE_NO_DEPRECATE" \
113   /D "PACKAGE_VERSION=\"$(PACKAGE_VERSION)\"" \
114   /D "PACKAGE_NAME=\"$(PACKAGE_NAME)\"" \
115   /D "VERSION=\"$(PACKAGE_VERSION)\"" \
116   $(YAZ_DEF)               \
117   $(ICU_DEF)               \
118   $(LIBXSLT_DEF)           \
119   /D "_WINDOWS"            \
120   /D "WIN32"               \
121   /D "HAVE_WCHAR_H=1"      \
122   /FR"$(OBJDIR)\\"         \
123   /Fo"$(OBJDIR)\\"         \
124   /Fd"$(OBJDIR)\\" 
125
126 COMMON_C_INCLUDES= \
127   /I"$(ROOTDIR)\include"
128
129 DEBUG_C_OPTIONS=  \
130   /D "_DEBUG"      \
131   /MDd  /Od /Zi /Gm
132
133 RELEASE_C_OPTIONS=  \
134   /D "NDEBUG"        \
135   /MD /O2
136
137 # /W3  = warning level
138 # /GX  = Enable exception handling
139 # /FD  = Generate file dependencies (what ever they are)
140 # /c   = compile without linking
141 # /FR  = Generate browse info (.sbr file that gets combined into .bsc)
142 # /Fo  = object file name (or at least path)
143 # /Fd  = debug database name (or path)
144 # /MD  = Runtime library: Multithread DLL
145 # /MDd = Runtime library: Multithread DLL (debug)
146 # /Od  = Disable optimising (debug)
147 # /O2  = Optimize for speed
148 # /Gm  = Minimal rebuild (some cpp class stuff)
149 # /Zi  = Program database for debuggers
150 # /ZI  = Pgm database with special "edit&continue" stuff - not available in C5
151
152
153 ### Linker options
154 LINK=link.exe
155
156 LINK_LIBS= kernel32.lib ws2_32.lib advapi32.lib \
157            $(YAZ_LIB) $(ICU_LIB) $(LIBXSLT_LIB)
158
159 COMMON_LNK_OPTIONS= /nologo /subsystem:windows /machine:i386 /incremental:no
160
161 DEBUG_LNK_OPTIONS= /debug 
162
163 RELEASE_LNK_OPTIONS=
164
165 CLIENT_LINK_OPTIONS = /subsystem:console  
166
167 # Final opt variables
168 !if $(DEBUG)
169 COPT=   $(COMMON_C_OPTIONS)   $(DEBUG_C_OPTIONS)     $(COMMON_C_INCLUDES)
170 RCOPT=  $(COMMON_RC_OPTIONS)  $(DEBUG_RC_OPTIONS)
171 LNKOPT= $(COMMON_LNK_OPTIONS) $(DEBUG_LNK_OPTIONS)   $(LNK_LIBS)
172
173 !else
174 COPT=   $(COMMON_C_OPTIONS)   $(RELEASE_C_OPTIONS)   $(COMMON_C_INCLUDES) 
175 RCOPT=  $(COMMON_RC_OPTIONS)  $(RELEASE_RC_OPTIONS)
176 LNKOPT= $(COMMON_LNK_OPTIONS) $(RELEASE_LNK_OPTIONS) $(LNK_LIBS)
177 !endif
178
179 # Source and object modules
180
181 PAZPAR2_OBJS = \
182    "$(OBJDIR)\getaddrinfo.obj" \
183    "$(OBJDIR)\host.obj" \
184    "$(OBJDIR)\pazpar2.obj" \
185    "$(OBJDIR)\pazpar2_config.obj" \
186    "$(OBJDIR)\http.obj" \
187    "$(OBJDIR)\eventl.obj" \
188    "$(OBJDIR)\http_command.obj" \
189    "$(OBJDIR)\session.obj" \
190    "$(OBJDIR)\record.obj" \
191    "$(OBJDIR)\reclists.obj" \
192    "$(OBJDIR)\relevance.obj" \
193    "$(OBJDIR)\termlists.obj" \
194    "$(OBJDIR)\normalize7bit.obj" \
195    "$(OBJDIR)\database.obj" \
196    "$(OBJDIR)\settings.obj" \
197    "$(OBJDIR)\charsets.obj" \
198    "$(OBJDIR)\client.obj" \
199    "$(OBJDIR)\jenkins_hash.obj" \
200    "$(OBJDIR)\marcmap.obj" \
201    "$(OBJDIR)\marchash.obj" \
202    "$(OBJDIR)\normalize_record.obj" \
203    "$(OBJDIR)\normalize_cache.obj" \
204    "$(OBJDIR)\ppmutex.obj" \
205    "$(OBJDIR)\incref.obj" \
206    "$(OBJDIR)\sel_thread.obj" \
207    "$(OBJDIR)\service_xslt.obj" \
208    "$(OBJDIR)\connection.obj"  \
209    "$(OBJDIR)\facet_limit.obj" 
210
211
212 {$(SRCDIR)}.c{$(OBJDIR)}.obj:
213         $(CPP) $(COPT) $< 
214
215
216 !if $(USE_MANIFEST)
217 MT=mt.exe /nologo
218 !else
219 MT=echo
220 !endif
221
222
223 LINK_PROGRAM = $(LINK) $(LNKOPT) $(CLIENT_LINK_OPTIONS) $(LINK_LIBS)
224
225
226 $(PAZPAR2_EXE) : "$(BINDIR)" $(PAZPAR2_OBJS) $(YAZ_LIB)
227         $(LINK_PROGRAM) $(PAZPAR2_OBJS) /out:$@
228         $(MT) -manifest $@.manifest -outputresource:$@;1
229
230 clean:
231         -del $(BINDIR)\*.exe
232         -del $(TMPDIR)\*.
233         -del $(OBJDIR)\*.OBJ
234
235 dirs: $(OBJDIR) $(WINDIR) $(BINDIR) $(TMPDIR)
236
237 $(OBJDIR) $(WINDIR) $(BINDIR) $(TMPDIR):
238         if not exist "$@/$(NUL)" mkdir "$@"
239
240 yaz: $(YAZ_DLL_TARGET)
241
242 $(YAZ_DLL_TARGET) : $(YAZ_DLL_SOURCE)
243 #       copy "$(YAZBINDIR)\*.dll.manifest" $(BINDIR)
244         copy "$(YAZBINDIR)\*.dll" $(BINDIR)
245