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