1# Makefile.win for Win32 APR + APR-iconv + APR-util
2#
3# Targets are:
4#
5#     buildall - compile everything
6#     checkall - run APR + APR-util regression tests
7#     install  - compile everything
8#     clean    - mop up everything
9#
10# You can override the build mechanism, choose only one;
11#
12#     USEMAK=1 - compile from exported make files
13#     USEDSW=1 - compile from .dsw / .dsp VC6 projects
14#     USESLN=1 - compile from converted .sln / .vcproj VC7+ files
15#
16# Define ARCH to your desired preference (your PATH must point
17# to the correct compiler tools!)  Choose only one;
18#
19#     ARCH="Win32 Release"
20#     ARCH="Win32 Debug"
21#     ARCH="Win32 Release9x"
22#     ARCH="Win32 Debug9x"
23#     ARCH="x64 Release"
24#     ARCH="x64 Debug"
25#
26# Provide the APR_PATH, API_PATH and APU_PATH entirely relative 
27# to one another!  At this time, building the libraries themselves
28# is only expected to work if the defaults (../apr, ../apr-iconv 
29# and ../apr-util) are used, or if they are built with USEMAK=1.
30#
31#     APR_PATH=..\apr-1.3.0
32#     API_PATH=..\apr-iconv-1.3.0
33#     APU_PATH=..\apr-util-1.3.0
34#
35# Provide a DBD_LIST argument after configuring LIB and INCLUDE with
36# the SDK paths of the corresponding client support libraries.
37# ODBC is always built on Windows, so it does not get included in DBD_LIST
38# Note that at this time, none of these are supported on win32, per say.
39#
40#     DBD_LIST="sqlite3 pgsql oracle mysql freetds"
41#
42# Provide a DBM_LIST argument after configuring LIB and INCLUDE with
43# the SDK paths of the corresponding database support libraries.  Right
44# now only db has been configured, gdbm and ndbm require additional study.
45# Note that at this time, none of these are supported on win32, per say.
46#
47#     DBM_LIST="db gdbm"
48#
49# Provide a CRYPTO_LIST argument after configuring LIB and INCLUDE with
50# the SDK paths of the corresponding cryptographic support libraries.
51#
52#     CRYPTO_LIST="nss openssl"
53#
54# Provide the XML_PARSER argument after configuring LIB and INCLUDE with
55# the expat path of the corresponding xml parser, e.g. libexpatMT to choose
56# static, or libexpat (default) to choose the dynamic library for aprutil-1.dll
57# (Static libaprutil-1.lib always presumes libexpatMT with XML_STATIC flag.)
58#
59#     XML_PARSER="libexpat"
60#
61# For example;
62#
63#   nmake -f Makefile.win PREFIX=C:\APR buildall checkall installall clean
64#
65
66!IF EXIST("aprutil.sln") && ([devenv /help > NUL 2>&1] == 0) \
67    && !defined(USEMAK) && !defined(USEDSW)
68USESLN=1
69USEMAK=0
70USEDSW=0
71!ELSEIF EXIST("aprutil.mak") && !defined(USEDSW)
72USESLN=0
73USEMAK=1
74USEDSW=0
75!ELSE
76USESLN=0
77USEMAK=0
78USEDSW=1
79!ENDIF
80
81PREFIX=..\apr-dist
82
83!IF EXIST("..\openssl")
84!IF EXIST("..\openssl\libcrypto.lib")
85SSLOPT=_HAVE_OSSL110=1
86!ENDIF
87!ENDIF
88
89# Legacy default (and unwise alternative) for libapr-1.dll is libexpatMT
90XML_PARSER="libexpat"
91!IF "$(XML_PARSER)" == "libexpat"
92XMLOPT=XML_PARSER=$(XML_PARSER)
93!ELSE
94XMLOPT=XML_PARSER=$(XML_PARSER) XML_OPTIONS="/D XML_STATIC"
95!ENDIF
96
97!IF [$(COMSPEC) /c cl /nologo /? \
98	| $(SystemRoot)\System32\find.exe "x64" >NUL ] == 0
99ARCH=x64 Release
100!ELSE
101ARCH=Win32 Release
102!ENDIF
103
104APR_PATH=..\apr
105API_PATH=..\apr-iconv
106APU_PATH=..\apr-util
107
108!MESSAGE ARCH        = $(ARCH)
109!MESSAGE APR_PATH    = $(APR_PATH)
110!MESSAGE API_PATH    = $(API_PATH)  (apr-iconv)
111!MESSAGE APU_PATH    = $(APU_PATH)  (apr-util)
112!MESSAGE PREFIX      = $(PREFIX)  (install path)
113!MESSAGE DBD_LIST    = $(DBD_LIST)
114!MESSAGE DBM_LIST    = $(DBM_LIST)
115!MESSAGE CRYPTO_LIST = $(CRYPTO_LIST)
116
117# Utility and Translation things, nothing here for the user
118#
119!IF "$(ARCH)" == "Win32 Release"
120SLNARCH=Release|Win32
121ARCHPATH=Release
122LIBSPATH=LibR
123ARCHOSPATH=Release
124LIBSOSPATH=LibR
125!ELSEIF "$(ARCH)" == "Win32 Debug"
126SLNARCH=Debug|Win32
127ARCHPATH=Debug
128LIBSPATH=LibD
129ARCHOSPATH=Debug
130LIBSOSPATH=LibD
131!ELSEIF "$(ARCH)" == "Win32 Release9x"
132SLNARCH=Release9x|Win32
133ARCHPATH=Release
134LIBSPATH=LibR
135ARCHOSPATH=9x\Release
136LIBSOSPATH=9x\LibR
137!ELSEIF "$(ARCH)" == "Win32 Debug9x"
138SLNARCH=Debug9x|Win32
139ARCHPATH=Debug
140LIBSPATH=LibD
141ARCHOSPATH=9x\Debug
142LIBSOSPATH=9x\LibD
143!ELSEIF "$(ARCH)" == "x64 Release"
144SLNARCH=Release|x64
145ARCHPATH=x64\Release
146LIBSPATH=x64\LibR
147ARCHOSPATH=x64\Release
148LIBSOSPATH=x64\LibR
149!ELSEIF "$(ARCH)" == "x64 Debug"
150SLNARCH=Debug|x64
151ARCHPATH=x64\Debug
152LIBSPATH=x64\LibD
153ARCHOSPATH=x64\Debug
154LIBSOSPATH=x64\LibD
155!ENDIF
156
157!IFNDEF MAKEOPT
158# Only default the behavior if MAKEOPT= is omitted
159!IFDEF _NMAKE_VER
160# Microsoft NMake options
161MAKEOPT=-nologo
162!ELSEIF "$(MAKE)" == "make"
163# Borland make options?  Not really supported (yet)
164MAKEOPT=-s -N
165!ENDIF
166!ENDIF
167
168
169# Sanity Checks
170#
171!IF !EXIST("$(APR_PATH)\apr.dsp") || !EXIST("$(API_PATH)\apriconv.dsp") \
172 || !EXIST("$(APU_PATH)\aprutil.dsp")
173!MESSAGE Please check out or download and unpack the Apache Portability Runtime
174!MESSAGE sources (apr, apr-iconv and apr-util) under a single parent dir,
175!MESSAGE or provide APR_PATH, API_PATH and APU_PATH (all relative to each other,
176!MESSAGE or all absolute paths).
177!MESSAGE Apache cannot build without these libraries!
178!MESSAGE 
179!ERROR Need apr and apr-iconv alongside apr-util to build!
180!ENDIF
181
182
183all: buildall checkall
184
185# To help win32 pick up the locations where they don't fall in the usual
186# path locations.  This may not be completely effective for USESLN/USEDSP
187# oriented builds, just yet
188#
189LIB=$(APR_PATH)\$(ARCHOSPATH);$(APR_PATH)\$(LIBSOSPATH);$(API_PATH)\$(ARCHPATH);$(API_PATH)\$(LIBSPATH);$(APU_PATH)\$(ARCHPATH);$(APU_PATH)\$(LIBSPATH);$(LIB)
190INCLUDE=$(APR_PATH)\include;$(API_PATH)\include;$(INCLUDE)
191
192!IF $(USEMAK) == 1
193
194clean:
195	$(MAKE) $(MAKEOPT) -f Makefile.win ARCH="$(ARCH)" \
196		CTARGET=CLEAN buildall
197
198buildall:
199	cd $(APR_PATH)
200	 $(MAKE) $(MAKEOPT) -f apr.mak         CFG="apr - $(ARCH)" RECURSE=0 $(CTARGET)
201	 $(MAKE) $(MAKEOPT) -f libapr.mak      CFG="libapr - $(ARCH)" RECURSE=0 $(CTARGET)
202	 cd build
203	  $(MAKE) $(MAKEOPT) -f aprapp.mak    CFG="aprapp - $(ARCH)" RECURSE=0 $(CTARGET)
204	  $(MAKE) $(MAKEOPT) -f libaprapp.mak CFG="libaprapp - $(ARCH)" RECURSE=0 $(CTARGET)
205	 cd ..
206	cd $(API_PATH)
207	 $(MAKE) $(MAKEOPT) -f apriconv.mak    CFG="apriconv - $(ARCH)" RECURSE=0 $(CTARGET)
208	 $(MAKE) $(MAKEOPT) -f libapriconv.mak CFG="libapriconv - $(ARCH)" RECURSE=0 $(CTARGET)
209!IF "$(CTARGET)" == "CLEAN"
210	 $(MAKE) $(MAKEOPT) -f build\modules.mk.win clean \
211		BUILD_MODE="$(ARCH)" BIND_MODE=shared API_SOURCE=.
212!ELSE
213	 cd ccs
214	  $(MAKE) $(MAKEOPT) -f Makefile.win all \
215		BUILD_MODE="$(ARCH)" BIND_MODE=shared
216	 cd ..\ces
217	  $(MAKE) $(MAKEOPT) -f Makefile.win all \
218		BUILD_MODE="$(ARCH)" BIND_MODE=shared
219	 cd ..
220!ENDIF
221	cd $(APU_PATH)
222	 $(MAKE) $(MAKEOPT) $(SSLOPT) $(XMLOPT) -f aprutil.mak CFG="aprutil - $(ARCH)" RECURSE=0 $(CTARGET)
223	 $(MAKE) $(MAKEOPT) $(SSLOPT) $(XMLOPT) -f libaprutil.mak CFG="libaprutil - $(ARCH)" RECURSE=0 $(CTARGET)
224	cd ldap
225	 $(MAKE) $(MAKEOPT) -f apr_ldap.mak    CFG="apr_ldap - $(ARCH)" RECURSE=0 $(CTARGET)
226	cd ..
227	cd dbd
228	  for %d in (odbc $(DBD_LIST)) do \
229	    $(MAKE) $(MAKEOPT) -f apr_dbd_%d.mak CFG="apr_dbd_%d - $(ARCH)" RECURSE=0 $(CTARGET)
230	cd ..
231	cd dbm
232	  for %d in ($(DBM_LIST) x) do if not %d == x \
233	    $(MAKE) $(MAKEOPT) -f apr_dbm_%d.mak CFG="apr_dbm_%d - $(ARCH)" RECURSE=0 $(CTARGET)
234	cd ..
235	cd crypto
236	  for %d in ($(CRYPTO_LIST) x) do if not %d == x \
237	    $(MAKE) $(MAKEOPT) $(SSLOPT) -f apr_crypto_%d.mak CFG="apr_crypto_%d - $(ARCH)" RECURSE=0 $(CTARGET)
238	cd ..
239
240!ELSEIF $(USESLN) == 1
241
242clean:
243	-for %d in (odbc $(DBD_LIST)) do \
244	  devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apr_dbd_%d
245	-for %d in ($(DBM_LIST) x) do if not %d == x \
246	  devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apr_dbm_%d
247	-for %d in ($(CRYPTO_LIST) x) do if not %d == x \
248	  devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apr_crypto_%d
249	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apr_ldap
250	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project libaprutil
251	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project aprutil
252	cd $(API_PATH)
253	  -$(MAKE) $(MAKEOPT) -f build\modules.mk.win clean \
254		BUILD_MODE="$(ARCH)" BIND_MODE=shared API_SOURCE=.
255	cd $(APU_PATH)
256	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project libapriconv
257	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apriconv
258	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project libaprapp
259	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project aprapp
260	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project libapr
261	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apr
262
263buildall:
264	devenv aprutil.sln /useenv /build "$(SLNARCH)" /project aprapp
265	devenv aprutil.sln /useenv /build "$(SLNARCH)" /project libaprapp
266	devenv aprutil.sln /useenv /build "$(SLNARCH)" /project aprutil
267	devenv aprutil.sln /useenv /build "$(SLNARCH)" /project libaprutil
268	devenv aprutil.sln /useenv /build "$(SLNARCH)" /project apr_ldap
269	for %d in (odbc $(DBD_LIST)) do \
270	  devenv aprutil.sln /useenv /build "$(SLNARCH)" /project apr_dbd_%d
271	for %d in ($(DBM_LIST) x) do if not %d == x \
272	  devenv aprutil.sln /useenv /build "$(SLNARCH)" /project apr_dbm_%d
273	for %d in ($(CRYPTO_LIST) x) do if not %d == x \
274	  devenv aprutil.sln /useenv /build "$(SLNARCH)" /project apr_crypto_%d
275
276!ELSE
277#	$(USEDSP) == 1
278
279clean:
280	-for %d in (odbc $(DBD_LIST)) do \
281	  msdev aprutil.dsw /USEENV /MAKE "apr_dbd_%d - $(ARCH)" /CLEAN
282	-for %d in ($(DBM_LIST) x) do if not %d == x \
283	  msdev aprutil.dsw /USEENV /MAKE "apr_dbm_%d - $(ARCH)" /CLEAN
284	-for %d in ($(CRYPTO_LIST) x) do if not %d == x \
285	  msdev aprutil.dsw /USEENV /MAKE "apr_crypto_%d - $(ARCH)" /CLEAN
286	-msdev aprutil.dsw /USEENV /MAKE "apr_ldap - $(ARCH)" /CLEAN
287	-msdev aprutil.dsw /USEENV /MAKE "libaprutil - $(ARCH)" /CLEAN
288	-msdev aprutil.dsw /USEENV /MAKE "aprutil - $(ARCH)" /CLEAN
289	cd $(API_PATH)
290	 $(MAKE) $(MAKEOPT) -f build\modules.mk.win clean \
291		BUILD_MODE="$(ARCH)" BIND_MODE=shared API_SOURCE=.
292	cd $(APU_PATH)
293	-msdev aprutil.dsw /USEENV /MAKE "libapriconv - $(ARCH)" /CLEAN
294	-msdev aprutil.dsw /USEENV /MAKE "apriconv - $(ARCH)" /CLEAN
295	-msdev aprutil.dsw /USEENV /MAKE "libaprapp - $(ARCH)" /CLEAN
296	-msdev aprutil.dsw /USEENV /MAKE "aprapp - $(ARCH)" /CLEAN
297	-msdev aprutil.dsw /USEENV /MAKE "libapr - $(ARCH)" /CLEAN
298	-msdev aprutil.dsw /USEENV /MAKE "apr - $(ARCH)" /CLEAN
299
300buildall:
301	@msdev aprutil.dsw /USEENV /MAKE "aprapp - $(ARCH)"
302	@msdev aprutil.dsw /USEENV /MAKE "aprutil - $(ARCH)"
303	@msdev aprutil.dsw /USEENV /MAKE "libaprapp - $(ARCH)"
304	@msdev aprutil.dsw /USEENV /MAKE "libaprutil - $(ARCH)"
305	@msdev aprutil.dsw /USEENV /MAKE "apr_ldap - $(ARCH)"
306	@for %d in (odbc $(DBD_LIST)) do \
307	  msdev aprutil.dsw /USEENV /MAKE "apr_dbd_%d - $(ARCH)"
308	@for %d in ($(DBM_LIST) x) do if not %d == x \
309	  msdev aprutil.dsw /USEENV /MAKE "apr_dbm_%d - $(ARCH)"
310	@for %d in ($(CRYPTO_LIST) x) do if not %d == x \
311	  msdev aprutil.dsw /USEENV /MAKE "apr_crypto_%d - $(ARCH)"
312
313!ENDIF
314
315
316checkapr:
317	cd $(APR_PATH)\test
318	 $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=static \
319		OUTDIR=$(LIBSOSPATH) check
320	 $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=dynamic \
321		OUTDIR=$(ARCHOSPATH) check
322	 cd ..
323	cd $(APU_PATH)
324
325checkapu:
326	cd $(APU_PATH)
327	cd test
328		 $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=static \
329		OUTDIR=$(LIBSPATH) APROUTDIR=$(LIBSOSPATH) \
330		APR_PATH=..\$(APR_PATH) API_PATH=..\$(API_PATH) check
331	 $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=dynamic \
332		OUTDIR=$(ARCHPATH) APROUTDIR=$(ARCHOSPATH) \
333		APR_PATH=..\$(APR_PATH) API_PATH=..\$(API_PATH) check
334	cd ..
335
336checkall: checkapr checkapu
337
338
339install:
340	echo Y >.y
341	echo A >.A
342	@if NOT EXIST "$(PREFIX)\." mkdir "$(PREFIX)"
343	@if NOT EXIST "$(PREFIX)\bin\." mkdir "$(PREFIX)\bin"
344	@if NOT EXIST "$(PREFIX)\bin\iconv\." mkdir "$(PREFIX)\bin\iconv"
345	@if NOT EXIST "$(PREFIX)\include\." mkdir "$(PREFIX)\include"
346	@if NOT EXIST "$(PREFIX)\lib\." mkdir "$(PREFIX)\lib"
347	copy CHANGES "$(PREFIX)\CHANGES.txt" <.y
348	copy LICENSE "$(PREFIX)\LICENSE.txt" <.y
349	copy NOTICE  "$(PREFIX)\NOTICE.txt"  <.y
350	xcopy $(APR_PATH)\include\*.h		"$(PREFIX)\include\" /d < .a
351	xcopy $(APU_PATH)\include\*.h		"$(PREFIX)\include\" /d < .a
352	copy $(APR_PATH)\$(LIBSOSPATH)\apr-1.lib	"$(PREFIX)\lib\" <.y
353	copy $(APR_PATH)\$(LIBSOSPATH)\apr-1.pdb	"$(PREFIX)\lib\" <.y
354	copy $(APU_PATH)\$(LIBSPATH)\aprutil-1.lib	"$(PREFIX)\lib\" <.y
355	copy $(APU_PATH)\$(LIBSPATH)\aprutil-1.pdb	"$(PREFIX)\lib\" <.y
356	copy $(APR_PATH)\$(ARCHOSPATH)\libapr-1.lib	"$(PREFIX)\lib\" <.y
357	copy $(APR_PATH)\$(ARCHOSPATH)\libapr-1.exp	"$(PREFIX)\lib\" <.y
358	copy $(APU_PATH)\$(ARCHPATH)\libaprutil-1.lib	"$(PREFIX)\lib\" <.y
359	copy $(APU_PATH)\$(ARCHPATH)\libaprutil-1.exp	"$(PREFIX)\lib\" <.y
360	copy $(APR_PATH)\$(ARCHOSPATH)\libapr-1.dll	"$(PREFIX)\bin\" <.y
361	copy $(APR_PATH)\$(ARCHOSPATH)\libapr-1.pdb	"$(PREFIX)\bin\" <.y
362	copy $(API_PATH)\$(ARCHPATH)\libapriconv-1.dll	"$(PREFIX)\bin\" <.y
363	copy $(API_PATH)\$(ARCHPATH)\libapriconv-1.pdb	"$(PREFIX)\bin\" <.y
364	copy $(APU_PATH)\$(ARCHPATH)\libaprutil-1.dll	"$(PREFIX)\bin\" <.y
365	copy $(APU_PATH)\$(ARCHPATH)\libaprutil-1.pdb	"$(PREFIX)\bin\" <.y
366	copy $(APU_PATH)\ldap\$(ARCHPATH)\apr_ldap-1.dll "$(PREFIX)\bin\" <.y
367	copy $(APU_PATH)\ldap\$(ARCHPATH)\apr_ldap-1.pdb "$(PREFIX)\bin\" <.y
368	for %d in (odbc $(DBD_LIST)) do ( \
369	  copy $(APU_PATH)\dbd\$(ARCHPATH)\apr_dbd_%d-1.dll "$(PREFIX)\bin\" <.y && \
370	  copy $(APU_PATH)\dbd\$(ARCHPATH)\apr_dbd_%d-1.pdb "$(PREFIX)\bin\" <.y \
371	)
372	for %d in ($(DBM_LIST) x) do if not %d == x ( \
373	  copy $(APU_PATH)\dbm\$(ARCHPATH)\apr_dbm_%d-1.dll "$(PREFIX)\bin\" <.y && \
374	  copy $(APU_PATH)\dbm\$(ARCHPATH)\apr_dbm_%d-1.pdb "$(PREFIX)\bin\" <.y \
375	)
376	for %d in ($(CRYPTO_LIST) x) do if not %d == x ( \
377	  copy $(APU_PATH)\crypto\$(ARCHPATH)\apr_crypto_%d-1.dll "$(PREFIX)\bin\" <.y && \
378	  copy $(APU_PATH)\crypto\$(ARCHPATH)\apr_crypto_%d-1.pdb "$(PREFIX)\bin\" <.y \
379	)
380	xcopy $(API_PATH)\$(ARCHPATH)\iconv\*.so  "$(PREFIX)\bin\iconv\" /d < .a
381	xcopy $(API_PATH)\$(ARCHPATH)\iconv\*.pdb "$(PREFIX)\bin\iconv\" /d < .a
382	del .y
383	del .a
384
385