Hi, Here is a small contribution to the APR that enables one to use the Platform SDK to build the APR.
The invocation is quite simple: nmake -f NMAKEmakefile DLL=1 DEBUG=1 Will build the DLL library version of APR. Depending on the CPU it will be build inside: WINNT_I386_DLL_DEBUG or.. WINNT_AMD64_DLL_DEBUG I know it's different from standard Debug/Lib directories, but it gives more options and different CPU/ARCH targets without the need to kill yourself with backups and launching 'msdev /usenenv' all the time :). One other option is to use the TARGETOS nmake -f NMAKEmakefile DLL=1 DEBUG=1 TARGETOS=WIN9X will build the WIN9X_I386_DLL_DEBUG target. Is this make sense? I don't wish to commit anything useless. If It does, I plan to do the same for apr-util and iconv. Regards, Mladen.
# Copyright 2001-2005 The Apache Software Foundation or its licensors, as # applicable. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # ==================================================================== # # NMAKEcommon.inc Master makefile definitions. # This file defines CPU architecture and basic compiler # and linker parameters. # Common params: # CPU Compile for specified CPU. Supported CPU's are: # i386 # AMD64 # IA64 # If not specified it will default to the # PROCESSOR_ARCHITECTURE environment variable # or to the i386 if not specified. # TARGETOS Compile for specified Windows version # WINNT for Windows 2000 and up(default) # WINXP for Windows XP and up # WIN2003 for Windows 2003 and up # Deprecated targets (may not even compile): # NT4 for Windows NT4 and up # WIN9X for Windows 95, 98 and Me # CONFIG Build configuration # RETAIL or RELEASE (default) # DEBUG # TARGET Build application target # EXE Console executable (default) # GUI Windows GUI executable # DLL Dynamic Link Library # LIB Static library # Environment variables used: # CFLAGS Added to the common CFLAGS # CPPFLAGS Added to the common CPPFLAGS # LIBS Added to the common LIBS # INCLUDES Added to the common INCLUDES # # Originally contributed by Mladen Turk <mturk jboss.com> # # ==================================================================== # !IF !DEFINED(CC) || "$(CC)" == "" CC = cl.exe !ENDIF !IF !DEFINED(LINK) || "$(LINK)" == "" LINK = link.exe !ENDIF !IF !DEFINED(RC) || "$(RC)" == "" RC = rc.exe !ENDIF # Read the PROCESSOR_ARCHITECTURE environment value for a CPU type !IF !DEFINED(CPU) || "$(CPU)" == "" !IF "$(PROCESSOR_ARCHITECTURE)" == "" CPU=I386 !ELSE CPU = $(PROCESSOR_ARCHITECTURE) !ENDIF !ENDIF !IF "$(CPU)" == "i386" CPU=I386 !ENDIF !IF "$(CPU)" == "x86" CPU=I386 !ENDIF !IF "$(CPU)" != "I386" !IF "$(CPU)" != "AMD64" !IF "$(CPU)" != "IA64" !ERROR Must specify CPU environment variable (I386, AMD64, IA64) !ENDIF !ENDIF !ENDIF !IF !DEFINED(TARGET) || "$(TARGET)" == "" TARGET=EXE !ENDIF !IF "$(TARGET)" != "EXE" !IF "$(TARGET)" != "GUI" !IF "$(TARGET)" != "DLL" !IF "$(TARGET)" != "LIB" !ERROR Must specify TARGET environment variable (EXE, GUI, DLL, LIB) !ENDIF !ENDIF !ENDIF !ENDIF !IF !DEFINED(TARGETOS) || "$(TARGETOS)" == "" TARGETOS=WINNT !ENDIF !IF "$(TARGETOS)" != "WINNT" !IF "$(TARGETOS)" != "WINXP" !IF "$(TARGETOS)" != "WIN2003" !IF "$(TARGETOS)" != "NT4" !IF "$(TARGETOS)" != "WIN9X" !ERROR Must specify TARGETOS environment variable (WINNT, WINXP, WIN2003, NT4, WIN9X) !ENDIF !ENDIF !ENDIF !ENDIF !ENDIF !IF "$(TARGETOS)" == "WINNT" NMAKE_WINVER = 0x0500 !ELSEIF "$(TARGETOS)" == "WINXP" NMAKE_WINVER = 0x0501 !ELSEIF "$(TARGETOS)" == "WIN2003" NMAKE_WINVER = 0x0502 !ELSEIF "$(TARGETOS)" == "NT4" NMAKE_WINVER = 0x0400 !ENDIF !IF !DEFINED(NMAKE_WINVER) || "$(NMAKE_WINVER)" == "" NMAKE_WINVER = 0x0400 NMAKE_WINNT = -D_WIN95 -D_WIN32_WINDOWS=$(NMAKE_WINVER) !ELSE NMAKE_WINNT = -D_WINNT -D_WIN32_WINNT=$(NMAKE_WINVER) !ENDIF !IF !DEFINED(CONFIG) || "$(CONFIG)" == "" CONFIG=RELEASE !ENDIF !IFDEF RELEASE CONFIG=RELEASE !ENDIF !IFDEF DEBUG CONFIG=DEBUG !ENDIF !IFDEF NODEBUG CONFIG=RELEASE !ENDIF !IF "$(CONFIG)" != "RELEASE" !IF "$(CONFIG)" != "DEBUG" !ERROR Must specify CONFIG environment variable (RELEASE, DEBUG) !ENDIF !ENDIF # Common flags for all platforms CMN_CFLAGS = -c -nologo -DWIN32 -D_WIN32 -D_WINDOWS $(NMAKE_WINNT) !IF "$(CPU)" == "I386" CPU_CFLAGS = -D_X86_=1 -W3 !ELSEIF "$(CPU)" == "AMD64" CPU_CFLAGS = -D_AMD64_=1 -DWIN64 -D_WIN64 -Wp64 -W3 /FIPRE64PRA.H !ELSEIF "$(CPU)" == "IA64" CPU_CFLAGS = -D_IA64_=1 -DWIN64 -D_WIN64 -Wp64 -W3 -Ap64 /FIPRE64PRA.H !ENDIF !IF "$(CONFIG)" == "RELEASE" OPT_CFLAGS = -O2 -Oy- -Zi -DNDEBUG !ELSE OPT_CFLAGS = -Od -Zi -DDEBUG -D_DEBUG !ENDIF !IF "$(CONFIG)" == "RELEASE" CRT_CFLAGS = -D_MT -MD !ELSE CRT_CFLAGS = -D_MT -MDd !ENDIF CFLAGS = $(CMN_CFLAGS) $(CPU_CFLAGS) $(OPT_CFLAGS) $(CRT_CFLAGS) $(CFLAGS) !IF DEFINED(EXTRA_CFLAGS) CFLAGS = $(CFLAGS) $(EXTRA_CFLAGS) !ENDIF # Linker section LIBS = kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ole32.lib shell32.lib rpcrt4.lib $(LIBS) !IF "$(CPU)" == "AMD64" || "$(CPU)" == "IA64" LIBS = $(LIBS) bufferoverflowu.lib !ENDIF !IF DEFINED(EXTRA_LIBS) LIBS = $(LIBS) $(EXTRA_LIBS) !ENDIF COMMON_LFLAGS = /NOLOGO # Always add debugging to the linker OPT_LFLAGS = /INCREMENTAL:NO /DEBUG !IF "$(CONFIG)" == "RELEASE" OPT_LFLAGS = /OPT:REF !ENDIF !IF "$(TARGET)" == "EXE" LFLAGS = $(COMMON_LFLAGS) /SUBSYSTEM:CONSOLE /MACHINE:$(CPU) !ELSEIF "$(TARGET)" == "GUI" LFLAGS = $(COMMON_LFLAGS) /SUBSYSTEM:WINDOWS /MACHINE:$(CPU) !ELSEIF "$(TARGET)" == "DLL" LFLAGS = $(COMMON_LFLAGS) /DLL /SUBSYSTEM:WINDOWS /MACHINE:$(CPU) !ELSEIF "$(TARGET)" == "LIB" LFLAGS = -lib $(COMMON_LFLAGS) !ENDIF !IF DEFINED(EXTRA_LFLAGS) LFLAGS = $(LFLAGS) $(EXTRA_LFLAGS) !ENDIF !IF "$(TARGET)" != "LIB" LFLAGS = $(LFLAGS) $(OPT_LFLAGS) !ENDIF # Resource compiler flags BASE_RCFLAGS=/l 0x409 !IF "$(CONFIG)" == "RELEASE" BASE_RCFLAGS = $(BASE_RCFLAGS) /d "NDEBUG" !ELSE BASE_RCFLAGS = $(BASE_RCFLAGS) /d "_DEBUG" /d "DEBUG" !ENDIF RCFLAGS = $(BASE_RCFLAGS) $(RCFLAGS) # Build Target dir e.g. WINNT_I386_RELEASE_DLL BUILDIR = $(TARGETOS)_$(CPU)_$(TARGET)_$(CONFIG) !IF "$(OS)" == "Windows_NT" CLEANTARGET=if exist "$(BUILDIR)/$(NULL)" rd /s /q $(BUILDIR) !ELSE CLEANTARGET=deltree /y $(BUILDIR) !ENDIF MAKETARGET=if not exist "$(BUILDIR)/$(NULL)" mkdir $(BUILDIR)
# Copyright 2001-2005 The Apache Software Foundation or its licensors, as # applicable. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # ==================================================================== # # NMAKEmakefile Master APR makefile. # Usage: # DLL=1 Build DLL version # DEBUG=1 Build DEBUG version of APR # # Originally contributed by Mladen Turk <mturk jboss.com> # # ==================================================================== # !IFDEF DLL CFLAGS = -DAPR_DECLARE_EXPORT $(CFLAGS) TARGET = DLL !ELSE CFLAGS = -DAPR_DECLARE_STATIC $(CFLAGS) TARGET = LIB !ENDIF !include <build/NMAKEcommon.inc> INCLUDES = -I./include -I./include/arch -I./include/arch/win32 -I./include/arch/unix PDBFLAGS = -Fo$(BUILDIR)\ -Fd$(BUILDIR)\apr_src OBJECTS = \ $(BUILDIR)\apr_atomic.obj \ $(BUILDIR)\dso.obj \ $(BUILDIR)\copy.obj \ $(BUILDIR)\dir.obj \ $(BUILDIR)\fileacc.obj \ $(BUILDIR)\filedup.obj \ $(BUILDIR)\filepath.obj \ $(BUILDIR)\filepath_util.obj \ $(BUILDIR)\filestat.obj \ $(BUILDIR)\filesys.obj \ $(BUILDIR)\flock.obj \ $(BUILDIR)\fullrw.obj \ $(BUILDIR)\mktemp.obj \ $(BUILDIR)\open.obj \ $(BUILDIR)\pipe.obj \ $(BUILDIR)\readwrite.obj \ $(BUILDIR)\seek.obj \ $(BUILDIR)\tempdir.obj \ $(BUILDIR)\proc_mutex.obj \ $(BUILDIR)\thread_cond.obj \ $(BUILDIR)\thread_mutex.obj \ $(BUILDIR)\thread_rwlock.obj \ $(BUILDIR)\apr_pools.obj \ $(BUILDIR)\charset.obj \ $(BUILDIR)\env.obj \ $(BUILDIR)\errorcodes.obj \ $(BUILDIR)\getopt.obj \ $(BUILDIR)\internal.obj \ $(BUILDIR)\misc.obj \ $(BUILDIR)\otherchild.obj \ $(BUILDIR)\rand.obj \ $(BUILDIR)\start.obj \ $(BUILDIR)\utf8.obj \ $(BUILDIR)\version.obj \ $(BUILDIR)\common.obj \ $(BUILDIR)\mmap.obj \ $(BUILDIR)\inet_ntop.obj \ $(BUILDIR)\inet_pton.obj \ $(BUILDIR)\select.obj \ $(BUILDIR)\multicast.obj \ $(BUILDIR)\sendrecv.obj \ $(BUILDIR)\sockaddr.obj \ $(BUILDIR)\sockets.obj \ $(BUILDIR)\sockopt.obj \ $(BUILDIR)\apr_getpass.obj \ $(BUILDIR)\apr_random.obj \ $(BUILDIR)\sha2.obj \ $(BUILDIR)\sha2_glue.obj \ $(BUILDIR)\shm.obj \ $(BUILDIR)\apr_cpystrn.obj \ $(BUILDIR)\apr_fnmatch.obj \ $(BUILDIR)\apr_snprintf.obj \ $(BUILDIR)\apr_strings.obj \ $(BUILDIR)\apr_strnatcmp.obj \ $(BUILDIR)\apr_strtok.obj \ $(BUILDIR)\apr_hash.obj \ $(BUILDIR)\apr_tables.obj \ $(BUILDIR)\proc.obj \ $(BUILDIR)\signals.obj \ $(BUILDIR)\thread.obj \ $(BUILDIR)\threadpriv.obj \ $(BUILDIR)\access.obj \ $(BUILDIR)\time.obj \ $(BUILDIR)\timestr.obj \ $(BUILDIR)\groupinfo.obj \ $(BUILDIR)\userinfo.obj !IFDEF DLL BUILDLIB = $(BUILDIR)\libapr-1.dll BUILDPDB = $(BUILDIR)\libapr-1.pdb BUILDRES = $(BUILDIR)\libapr-1.res !ELSE BUILDLIB = $(BUILDIR)\apr-1.lib !ENDIF all : $(BUILDIR) $(BUILDLIB) $(BUILDIR) : @$(MAKETARGET) {./atomic/win32}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./dso/win32}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./file_io/unix}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./file_io/win32}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./locks/win32}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./memory/unix}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./misc/unix}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./misc/win32}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./mmap/unix}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./mmap/win32}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./network_io/unix}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./network_io/win32}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./passwd}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./poll/unix}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./random/unix}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./shmem/win32}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./strings}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./tables}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./threadproc/win32}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./time/win32}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< {./user/win32}.c{$(BUILDIR)}.obj: $(CC) $(CFLAGS) $(INCLUDES) $(PDBFLAGS) $< $(OBJECTS): ./include/*.h ./include/arch/*.h ./include/arch/win32/*.h ./include/arch/unix/*.h !IFDEF DLL $(BUILDRES): libapr.rc ./include/*.h $(RC) $(RCFLAGS) /i "./include" /d "APR_VERSION_ONLY" /fo $(BUILDRES) libapr.rc $(BUILDLIB): $(BUILDIR) $(OBJECTS) $(BUILDRES) $(LINK) $(LFLAGS) $(OBJECTS) $(BUILDRES) $(LIBS) /pdb:$(BUILDPDB) /out:$(BUILDLIB) !ELSE $(BUILDLIB): $(BUILDIR) $(OBJECTS) $(LINK) $(LFLAGS) $(OBJECTS) /out:$(BUILDLIB) !ENDIF clean: @$(CLEANTARGET)
