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)

Reply via email to