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