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