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# For example;
55#
56#   nmake -f Makefile.win PREFIX=C:\APR buildall checkall installall clean
57#
58
59!IF EXIST("aprutil.sln") && ([devenv /help > NUL 2>&1] == 0) \
60    && !defined(USEMAK) && !defined(USEDSW)
61USESLN=1
62USEMAK=0
63USEDSW=0
64!ELSEIF EXIST("aprutil.mak") && !defined(USEDSW)
65USESLN=0
66USEMAK=1
67USEDSW=0
68!ELSE
69USESLN=0
70USEMAK=0
71USEDSW=1
72!ENDIF
73
74PREFIX=..\apr-dist
75
76!IF [$(COMSPEC) /c cl /nologo /? \
77	| $(SystemRoot)\System32\find.exe "x64" >NUL ] == 0
78ARCH=x64 Release
79!ELSE
80ARCH=Win32 Release
81!ENDIF
82
83APR_PATH=..\apr
84API_PATH=..\apr-iconv
85APU_PATH=..\apr-util
86
87!MESSAGE ARCH        = $(ARCH)
88!MESSAGE APR_PATH    = $(APR_PATH)
89!MESSAGE API_PATH    = $(API_PATH)  (apr-iconv)
90!MESSAGE APU_PATH    = $(APU_PATH)  (apr-util)
91!MESSAGE PREFIX      = $(PREFIX)  (install path)
92!MESSAGE DBD_LIST    = $(DBD_LIST)
93!MESSAGE DBM_LIST    = $(DBM_LIST)
94!MESSAGE CRYPTO_LIST = $(CRYPTO_LIST)
95
96# Utility and Translation things, nothing here for the user
97#
98!IF "$(ARCH)" == "Win32 Release"
99SLNARCH=Release|Win32
100ARCHPATH=Release
101LIBSPATH=LibR
102ARCHOSPATH=Release
103LIBSOSPATH=LibR
104!ELSEIF "$(ARCH)" == "Win32 Debug"
105SLNARCH=Debug|Win32
106ARCHPATH=Debug
107LIBSPATH=LibD
108ARCHOSPATH=Debug
109LIBSOSPATH=LibD
110!ELSEIF "$(ARCH)" == "Win32 Release9x"
111SLNARCH=Release9x|Win32
112ARCHPATH=Release
113LIBSPATH=LibR
114ARCHOSPATH=9x\Release
115LIBSOSPATH=9x\LibR
116!ELSEIF "$(ARCH)" == "Win32 Debug9x"
117SLNARCH=Debug9x|Win32
118ARCHPATH=Debug
119LIBSPATH=LibD
120ARCHOSPATH=9x\Debug
121LIBSOSPATH=9x\LibD
122!ELSEIF "$(ARCH)" == "x64 Release"
123SLNARCH=Release|x64
124ARCHPATH=x64\Release
125LIBSPATH=x64\LibR
126ARCHOSPATH=x64\Release
127LIBSOSPATH=x64\LibR
128!ELSEIF "$(ARCH)" == "x64 Debug"
129SLNARCH=Debug|x64
130ARCHPATH=x64\Debug
131LIBSPATH=x64\LibD
132ARCHOSPATH=x64\Debug
133LIBSOSPATH=x64\LibD
134!ENDIF
135
136!IFNDEF MAKEOPT
137# Only default the behavior if MAKEOPT= is omitted
138!IFDEF _NMAKE_VER
139# Microsoft NMake options
140MAKEOPT=-nologo
141!ELSEIF "$(MAKE)" == "make"
142# Borland make options?  Not really supported (yet)
143MAKEOPT=-s -N
144!ENDIF
145!ENDIF
146
147
148# Sanity Checks
149#
150!IF !EXIST("$(APR_PATH)\apr.dsp") || !EXIST("$(API_PATH)\apriconv.dsp") \
151 || !EXIST("$(APU_PATH)\aprutil.dsp")
152!MESSAGE Please check out or download and unpack the Apache Portability Runtime
153!MESSAGE sources (apr, apr-iconv and apr-util) under a single parent dir,
154!MESSAGE or provide APR_PATH, API_PATH and APU_PATH (all relative to each other,
155!MESSAGE or all absolute paths).
156!MESSAGE Apache cannot build without these libraries!
157!MESSAGE 
158!ERROR Need apr and apr-iconv alongside apr-util to build!
159!ENDIF
160
161
162all: buildall checkall
163
164# To help win32 pick up the locations where they don't fall in the usual
165# path locations.  This may not be completely effective for USESLN/USEDSP
166# oriented builds, just yet
167#
168LIB=$(APR_PATH)\$(ARCHOSPATH);$(APR_PATH)\$(LIBSOSPATH);$(API_PATH)\$(ARCHPATH);$(API_PATH)\$(LIBSPATH);$(APU_PATH)\$(ARCHPATH);$(APU_PATH)\$(LIBSPATH);$(LIB)
169INCLUDE=$(APR_PATH)\include;$(API_PATH)\include;$(INCLUDE)
170
171!IF $(USEMAK) == 1
172
173clean:
174	$(MAKE) $(MAKEOPT) -f Makefile.win ARCH="$(ARCH)" \
175		CTARGET=CLEAN buildall
176
177buildall:
178	cd $(APR_PATH)
179	 $(MAKE) $(MAKEOPT) -f apr.mak         CFG="apr - $(ARCH)" RECURSE=0 $(CTARGET)
180	 $(MAKE) $(MAKEOPT) -f libapr.mak      CFG="libapr - $(ARCH)" RECURSE=0 $(CTARGET)
181	 cd build
182	  $(MAKE) $(MAKEOPT) -f aprapp.mak    CFG="aprapp - $(ARCH)" RECURSE=0 $(CTARGET)
183	  $(MAKE) $(MAKEOPT) -f libaprapp.mak CFG="libaprapp - $(ARCH)" RECURSE=0 $(CTARGET)
184	 cd ..
185	cd $(API_PATH)
186	 $(MAKE) $(MAKEOPT) -f apriconv.mak    CFG="apriconv - $(ARCH)" RECURSE=0 $(CTARGET)
187	 $(MAKE) $(MAKEOPT) -f libapriconv.mak CFG="libapriconv - $(ARCH)" RECURSE=0 $(CTARGET)
188!IF "$(CTARGET)" == "CLEAN"
189	 $(MAKE) $(MAKEOPT) -f build\modules.mk.win clean \
190		BUILD_MODE="$(ARCH)" BIND_MODE=shared API_SOURCE=.
191!ELSE
192	 cd ccs
193	  $(MAKE) $(MAKEOPT) -f Makefile.win all \
194		BUILD_MODE="$(ARCH)" BIND_MODE=shared
195	 cd ..\ces
196	  $(MAKE) $(MAKEOPT) -f Makefile.win all \
197		BUILD_MODE="$(ARCH)" BIND_MODE=shared
198	 cd ..
199!ENDIF
200	cd $(APU_PATH)\xml\expat\lib
201	 $(MAKE) $(MAKEOPT) -f xml.mak         CFG="xml - $(ARCH)" RECURSE=0 $(CTARGET)
202	cd ..\..\..
203	 $(MAKE) $(MAKEOPT) -f aprutil.mak     CFG="aprutil - $(ARCH)" RECURSE=0 $(CTARGET)
204	 $(MAKE) $(MAKEOPT) -f libaprutil.mak  CFG="libaprutil - $(ARCH)" RECURSE=0 $(CTARGET)
205	cd ldap
206	 $(MAKE) $(MAKEOPT) -f apr_ldap.mak    CFG="apr_ldap - $(ARCH)" RECURSE=0 $(CTARGET)
207	cd ..
208	cd dbd
209	  for %d in (odbc $(DBD_LIST)) do \
210	    $(MAKE) $(MAKEOPT) -f apr_dbd_%d.mak CFG="apr_dbd_%d - $(ARCH)" RECURSE=0 $(CTARGET)
211	cd ..
212	cd dbm
213	  for %d in ($(DBM_LIST) x) do if not %d == x \
214	    $(MAKE) $(MAKEOPT) -f apr_dbm_%d.mak CFG="apr_dbm_%d - $(ARCH)" RECURSE=0 $(CTARGET)
215	cd ..
216	cd crypto
217	  for %d in ($(CRYPTO_LIST) x) do if not %d == x \
218	    $(MAKE) $(MAKEOPT) -f apr_crypto_%d.mak CFG="apr_crypto_%d - $(ARCH)" RECURSE=0 $(CTARGET)
219	cd ..
220
221!ELSEIF $(USESLN) == 1
222
223clean:
224	-for %d in (odbc $(DBD_LIST)) do \
225	  devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apr_dbd_%d
226	-for %d in ($(DBM_LIST) x) do if not %d == x \
227	  devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apr_dbm_%d
228	-for %d in ($(CRYPTO_LIST) x) do if not %d == x \
229	  devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apr_crypto_%d
230	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apr_ldap
231	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project libaprutil
232	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project aprutil
233	cd $(API_PATH)
234	  -$(MAKE) $(MAKEOPT) -f build\modules.mk.win clean \
235		BUILD_MODE="$(ARCH)" BIND_MODE=shared API_SOURCE=.
236	cd $(APU_PATH)
237	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project libapriconv
238	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apriconv
239	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project libaprapp
240	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project aprapp
241	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project libapr
242	-devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apr
243
244buildall:
245	devenv aprutil.sln /useenv /build "$(SLNARCH)" /project aprapp
246	devenv aprutil.sln /useenv /build "$(SLNARCH)" /project libaprapp
247	devenv aprutil.sln /useenv /build "$(SLNARCH)" /project aprutil
248	devenv aprutil.sln /useenv /build "$(SLNARCH)" /project libaprutil
249	devenv aprutil.sln /useenv /build "$(SLNARCH)" /project apr_ldap
250	for %d in (odbc $(DBD_LIST)) do \
251	  devenv aprutil.sln /useenv /build "$(SLNARCH)" /project apr_dbd_%d
252	for %d in ($(DBM_LIST) x) do if not %d == x \
253	  devenv aprutil.sln /useenv /build "$(SLNARCH)" /project apr_dbm_%d
254	for %d in ($(CRYPTO_LIST) x) do if not %d == x \
255	  devenv aprutil.sln /useenv /build "$(SLNARCH)" /project apr_crypto_%d
256
257!ELSE
258#	$(USEDSP) == 1
259
260clean:
261	-for %d in (odbc $(DBD_LIST)) do \
262	  msdev aprutil.dsw /USEENV /MAKE "apr_dbd_%d - $(ARCH)" /CLEAN
263	-for %d in ($(DBM_LIST) x) do if not %d == x \
264	  msdev aprutil.dsw /USEENV /MAKE "apr_dbm_%d - $(ARCH)" /CLEAN
265	-for %d in ($(CRYPTO_LIST) x) do if not %d == x \
266	  msdev aprutil.dsw /USEENV /MAKE "apr_crypto_%d - $(ARCH)" /CLEAN
267	-msdev aprutil.dsw /USEENV /MAKE "apr_ldap - $(ARCH)" /CLEAN
268	-msdev aprutil.dsw /USEENV /MAKE "libaprutil - $(ARCH)" /CLEAN
269	-msdev aprutil.dsw /USEENV /MAKE "aprutil - $(ARCH)" /CLEAN
270	cd $(API_PATH)
271	 $(MAKE) $(MAKEOPT) -f build\modules.mk.win clean \
272		BUILD_MODE="$(ARCH)" BIND_MODE=shared API_SOURCE=.
273	cd $(APU_PATH)
274	-msdev aprutil.dsw /USEENV /MAKE "libapriconv - $(ARCH)" /CLEAN
275	-msdev aprutil.dsw /USEENV /MAKE "apriconv - $(ARCH)" /CLEAN
276	-msdev aprutil.dsw /USEENV /MAKE "libaprapp - $(ARCH)" /CLEAN
277	-msdev aprutil.dsw /USEENV /MAKE "aprapp - $(ARCH)" /CLEAN
278	-msdev aprutil.dsw /USEENV /MAKE "libapr - $(ARCH)" /CLEAN
279	-msdev aprutil.dsw /USEENV /MAKE "apr - $(ARCH)" /CLEAN
280
281buildall:
282	@msdev aprutil.dsw /USEENV /MAKE "aprapp - $(ARCH)"
283	@msdev aprutil.dsw /USEENV /MAKE "aprutil - $(ARCH)"
284	@msdev aprutil.dsw /USEENV /MAKE "libaprapp - $(ARCH)"
285	@msdev aprutil.dsw /USEENV /MAKE "libaprutil - $(ARCH)"
286	@msdev aprutil.dsw /USEENV /MAKE "apr_ldap - $(ARCH)"
287	@for %d in (odbc $(DBD_LIST)) do \
288	  msdev aprutil.dsw /USEENV /MAKE "apr_dbd_%d - $(ARCH)"
289	@for %d in ($(DBM_LIST) x) do if not %d == x \
290	  msdev aprutil.dsw /USEENV /MAKE "apr_dbm_%d - $(ARCH)"
291	@for %d in ($(CRYPTO_LIST) x) do if not %d == x \
292	  msdev aprutil.dsw /USEENV /MAKE "apr_crypto_%d - $(ARCH)"
293
294!ENDIF
295
296
297checkapr:
298	cd $(APR_PATH)\test
299	 $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=static \
300		OUTDIR=$(LIBSOSPATH) check
301	 $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=dynamic \
302		OUTDIR=$(ARCHOSPATH) check
303	 cd ..
304	cd $(APU_PATH)
305
306checkapu:
307	cd $(APU_PATH)
308	cd test
309	 $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=static \
310		OUTDIR=$(LIBSPATH) APROUTDIR=$(LIBSOSPATH) \
311		APR_PATH=..\$(APR_PATH) API_PATH=..\$(API_PATH) check
312	 $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=dynamic \
313		OUTDIR=$(ARCHPATH) APROUTDIR=$(ARCHOSPATH) \
314		APR_PATH=..\$(APR_PATH) API_PATH=..\$(API_PATH) check
315	cd ..
316
317checkall: checkapr checkapu
318
319
320install:
321	echo Y >.y
322	echo A >.A
323	@if NOT EXIST "$(PREFIX)\." mkdir "$(PREFIX)"
324	@if NOT EXIST "$(PREFIX)\bin\." mkdir "$(PREFIX)\bin"
325	@if NOT EXIST "$(PREFIX)\bin\iconv\." mkdir "$(PREFIX)\bin\iconv"
326	@if NOT EXIST "$(PREFIX)\include\." mkdir "$(PREFIX)\include"
327	@if NOT EXIST "$(PREFIX)\lib\." mkdir "$(PREFIX)\lib"
328	copy CHANGES "$(PREFIX)\CHANGES.txt" <.y
329	copy LICENSE "$(PREFIX)\LICENSE.txt" <.y
330	copy NOTICE  "$(PREFIX)\NOTICE.txt"  <.y
331	xcopy $(APR_PATH)\include\*.h		"$(PREFIX)\include\" /d < .a
332	xcopy $(APU_PATH)\include\*.h		"$(PREFIX)\include\" /d < .a
333	copy $(APR_PATH)\$(LIBSOSPATH)\apr-1.lib	"$(PREFIX)\lib\" <.y
334	copy $(APR_PATH)\$(LIBSOSPATH)\apr-1.pdb	"$(PREFIX)\lib\" <.y
335	copy $(APU_PATH)\$(LIBSPATH)\aprutil-1.lib	"$(PREFIX)\lib\" <.y
336	copy $(APU_PATH)\$(LIBSPATH)\aprutil-1.pdb	"$(PREFIX)\lib\" <.y
337	copy $(APR_PATH)\$(ARCHOSPATH)\libapr-1.lib	"$(PREFIX)\lib\" <.y
338	copy $(APR_PATH)\$(ARCHOSPATH)\libapr-1.exp	"$(PREFIX)\lib\" <.y
339	copy $(APU_PATH)\$(ARCHPATH)\libaprutil-1.lib	"$(PREFIX)\lib\" <.y
340	copy $(APU_PATH)\$(ARCHPATH)\libaprutil-1.exp	"$(PREFIX)\lib\" <.y
341	copy $(APR_PATH)\$(ARCHOSPATH)\libapr-1.dll	"$(PREFIX)\bin\" <.y
342	copy $(APR_PATH)\$(ARCHOSPATH)\libapr-1.pdb	"$(PREFIX)\bin\" <.y
343	copy $(API_PATH)\$(ARCHPATH)\libapriconv-1.dll	"$(PREFIX)\bin\" <.y
344	copy $(API_PATH)\$(ARCHPATH)\libapriconv-1.pdb	"$(PREFIX)\bin\" <.y
345	copy $(APU_PATH)\$(ARCHPATH)\libaprutil-1.dll	"$(PREFIX)\bin\" <.y
346	copy $(APU_PATH)\$(ARCHPATH)\libaprutil-1.pdb	"$(PREFIX)\bin\" <.y
347	copy $(APU_PATH)\ldap\$(ARCHPATH)\apr_ldap-1.dll "$(PREFIX)\bin\" <.y
348	copy $(APU_PATH)\ldap\$(ARCHPATH)\apr_ldap-1.pdb "$(PREFIX)\bin\" <.y
349	for %d in (odbc $(DBD_LIST)) do ( \
350	  copy $(APU_PATH)\dbd\$(ARCHPATH)\apr_dbd_%d-1.dll "$(PREFIX)\bin\" <.y && \
351	  copy $(APU_PATH)\dbd\$(ARCHPATH)\apr_dbd_%d-1.pdb "$(PREFIX)\bin\" <.y \
352	)
353	for %d in ($(DBM_LIST) x) do if not %d == x ( \
354	  copy $(APU_PATH)\dbm\$(ARCHPATH)\apr_dbm_%d-1.dll "$(PREFIX)\bin\" <.y && \
355	  copy $(APU_PATH)\dbm\$(ARCHPATH)\apr_dbm_%d-1.pdb "$(PREFIX)\bin\" <.y \
356	)
357	for %d in ($(CRYPTO_LIST) x) do if not %d == x ( \
358	  copy $(APU_PATH)\crypto\$(ARCHPATH)\apr_crypto_%d-1.dll "$(PREFIX)\bin\" <.y && \
359	  copy $(APU_PATH)\crypto\$(ARCHPATH)\apr_crypto_%d-1.pdb "$(PREFIX)\bin\" <.y \
360	)
361	xcopy $(API_PATH)\$(ARCHPATH)\iconv\*.so  "$(PREFIX)\bin\iconv\" /d < .a
362	xcopy $(API_PATH)\$(ARCHPATH)\iconv\*.pdb "$(PREFIX)\bin\iconv\" /d < .a
363	del .y
364	del .a
365
366