1 # Makefile.win for Win32 APR + APR-iconv + APR-util
5 # buildall - compile everything
6 # checkall - run APR + APR-util regression tests
7 # install - compile everything
8 # clean - mop up everything
10 # You can override the build mechanism, choose only one;
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
16 # Define ARCH to your desired preference (your PATH must point
17 # to the correct compiler tools!) Choose only one;
19 # ARCH="Win32 Release"
21 # ARCH="Win32 Release9x"
22 # ARCH="Win32 Debug9x"
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.
31 # APR_PATH=..\apr-1.3.0
32 # API_PATH=..\apr-iconv-1.3.0
33 # APU_PATH=..\apr-util-1.3.0
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.
40 # DBD_LIST="sqlite3 pgsql oracle mysql freetds"
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.
49 # Provide a CRYPTO_LIST argument after configuring LIB and INCLUDE with
50 # the SDK paths of the corresponding cryptographic support libraries.
52 # CRYPTO_LIST="nss openssl"
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.)
59 # XML_PARSER="libexpat"
63 # nmake -f Makefile.win PREFIX=C:\APR buildall checkall installall clean
66 !IF EXIST("aprutil.sln") && ([devenv /help > NUL 2>&1] == 0) \
67 && !defined(USEMAK) && !defined(USEDSW)
71 !ELSEIF EXIST("aprutil.mak") && !defined(USEDSW)
83 !IF EXIST("..\openssl")
84 !IF EXIST("..\openssl\libcrypto.lib")
85 SSLOPT=_HAVE_OSSL110=1
89 # Legacy default (and unwise alternative) for libapr-1.dll is libexpatMT
91 !IF "$(XML_PARSER)" == "libexpat"
92 XMLOPT=XML_PARSER=$(XML_PARSER)
94 XMLOPT=XML_PARSER=$(XML_PARSER) XML_OPTIONS="/D XML_STATIC"
97 !IF [$(COMSPEC) /c cl /nologo /? \
98 | $(SystemRoot)\System32\find.exe "x64" >NUL ] == 0
105 API_PATH=..\apr-iconv
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)
117 # Utility and Translation things, nothing here for the user
119 !IF "$(ARCH)" == "Win32 Release"
120 SLNARCH=Release|Win32
125 !ELSEIF "$(ARCH)" == "Win32 Debug"
131 !ELSEIF "$(ARCH)" == "Win32 Release9x"
132 SLNARCH=Release9x|Win32
135 ARCHOSPATH=9x\Release
137 !ELSEIF "$(ARCH)" == "Win32 Debug9x"
138 SLNARCH=Debug9x|Win32
143 !ELSEIF "$(ARCH)" == "x64 Release"
147 ARCHOSPATH=x64\Release
149 !ELSEIF "$(ARCH)" == "x64 Debug"
158 # Only default the behavior if MAKEOPT= is omitted
160 # Microsoft NMake options
162 !ELSEIF "$(MAKE)" == "make"
163 # Borland make options? Not really supported (yet)
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!
179 !ERROR Need apr and apr-iconv alongside apr-util to build!
183 all: buildall checkall
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
189 LIB=$(APR_PATH)\$(ARCHOSPATH);$(APR_PATH)\$(LIBSOSPATH);$(API_PATH)\$(ARCHPATH);$(API_PATH)\$(LIBSPATH);$(APU_PATH)\$(ARCHPATH);$(APU_PATH)\$(LIBSPATH);$(LIB)
190 INCLUDE=$(APR_PATH)\include;$(API_PATH)\include;$(INCLUDE)
195 $(MAKE) $(MAKEOPT) -f Makefile.win ARCH="$(ARCH)" \
196 CTARGET=CLEAN buildall
200 $(MAKE) $(MAKEOPT) -f apr.mak CFG="apr - $(ARCH)" RECURSE=0 $(CTARGET)
201 $(MAKE) $(MAKEOPT) -f libapr.mak CFG="libapr - $(ARCH)" RECURSE=0 $(CTARGET)
203 $(MAKE) $(MAKEOPT) -f aprapp.mak CFG="aprapp - $(ARCH)" RECURSE=0 $(CTARGET)
204 $(MAKE) $(MAKEOPT) -f libaprapp.mak CFG="libaprapp - $(ARCH)" RECURSE=0 $(CTARGET)
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=.
214 $(MAKE) $(MAKEOPT) -f Makefile.win all \
215 BUILD_MODE="$(ARCH)" BIND_MODE=shared
217 $(MAKE) $(MAKEOPT) -f Makefile.win all \
218 BUILD_MODE="$(ARCH)" BIND_MODE=shared
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)
225 $(MAKE) $(MAKEOPT) -f apr_ldap.mak CFG="apr_ldap - $(ARCH)" RECURSE=0 $(CTARGET)
228 for %d in (odbc $(DBD_LIST)) do \
229 $(MAKE) $(MAKEOPT) -f apr_dbd_%d.mak CFG="apr_dbd_%d - $(ARCH)" RECURSE=0 $(CTARGET)
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)
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)
240 !ELSEIF $(USESLN) == 1
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
253 -$(MAKE) $(MAKEOPT) -f build\modules.mk.win clean \
254 BUILD_MODE="$(ARCH)" BIND_MODE=shared API_SOURCE=.
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
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
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
290 $(MAKE) $(MAKEOPT) -f build\modules.mk.win clean \
291 BUILD_MODE="$(ARCH)" BIND_MODE=shared API_SOURCE=.
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
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)"
318 $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=static \
319 OUTDIR=$(LIBSOSPATH) check
320 $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=dynamic \
321 OUTDIR=$(ARCHOSPATH) check
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
336 checkall: checkapr checkapu
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 \
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 \
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 \
380 xcopy $(API_PATH)\$(ARCHPATH)\iconv\*.so "$(PREFIX)\bin\iconv\" /d < .a
381 xcopy $(API_PATH)\$(ARCHPATH)\iconv\*.pdb "$(PREFIX)\bin\iconv\" /d < .a