You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@apr.apache.org by Mladen Turk <mt...@apache.org> on 2005/06/27 20:07:00 UTC

APR nmake makefiles

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.

Re: APR nmake makefiles

Posted by "William A. Rowe, Jr." <wr...@rowe-clan.net>.
At 02:08 PM 7/8/2005, Branko Čibej wrote:
>Mladen Turk wrote:
>>
>>Yes, but why?
>>What does a gen-build.py offers that can not be accomplished
>>without its usage?
>
>Go back and count the times someone had added a file and forgot to update the windows or netware build scripts. Then count the number of people who are actually capable of doing that. I think the gain will be obvious at that point.

I don't think anyone, Mladen or I or someone else is arguing that
Win32/Netware should not be -generated-.

The question is, with what?  What's the most portable solution
that works on the widest range of machines without a whole lot
of hassles for the administrator?

Don't get me wrong, I am a python convert.  But I sure as hell
am not going to install it on virgin HP/UX, AIX, etc for nightly 
snapshot tests until we are certain it's the best solution.  They
are clean for a reason; the replicate a 'joe user's' initial install.

sed and awk are everywhere; some flavor of perl is most everywhere,
while python is a recent addition to this stew.

Of course, it's already installed on all my Win32 boxes :)

Bill  


Re: APR nmake makefiles

Posted by Branko Čibej <br...@xbc.nu>.
Mladen Turk wrote:

> William A. Rowe, Jr. wrote:
>
>> At 12:27 PM 6/28/2005, Mladen Turk wrote:
>>
>>>
>>> Are you guys saying that I would need a python to even
>>> consider to build a APR from the cvs/svn?
>>
>>
>> This is true *today* for everyone except Win32 (and netware?)
>>
>
> Yes, but why?
> What does a gen-build.py offers that can not be accomplished
> without its usage?

Go back and count the times someone had added a file and forgot to 
update the windows or netware build scripts. Then count the number of 
people who are actually capable of doing that. I think the gain will be 
obvious at that point.

-- Brane


Re: APR nmake makefiles

Posted by Mladen Turk <mt...@apache.org>.
William A. Rowe, Jr. wrote:
> At 12:27 PM 6/28/2005, Mladen Turk wrote:
> 
>>
>>Are you guys saying that I would need a python to even
>>consider to build a APR from the cvs/svn?
> 
> This is true *today* for everyone except Win32 (and netware?)
>

Yes, but why?
What does a gen-build.py offers that can not be accomplished
without its usage?

Having perl as a prerequisite is OK on *nix. Having awk on
a windows is not. Having .vbs or .js after XPSP2 is no go
on widows too, because of all those popus while running a
simple script. That's why I admire you move from .awk to
the simple .rc.

Like I said, the *nix build scripts are quite fine, even if
they require the python. But trying to push that to all the
platforms would IMHO lead to nowhere.

If you like something like that, we have a 'ant' build system
for that (that BTW no one uses). And Java is much better
language the Python is. OTOH you will need to download the
50MB for Java + 8MB for ant, compared to 8MB for Python, just
to build a 128K DLL. Quite bizarre, thought, when compared with
a 10K script.

Regards,
Mladen

Re: APR nmake makefiles

Posted by "William A. Rowe, Jr." <wr...@rowe-clan.net>.
At 01:52 PM 6/28/2005, Paul Querna wrote:

>And if it was all in python, it means the Release Manager could build the .zip file for win32 releases all from one environment...

As true of OpenSSL's perl-based system, which doesn't use
autoconf at all <shrug>.

As far as snapshots containing ./configure, ++1.  However it
really doesn't solve the developers issue of svn diff.  There's
no substitute for a checkout.

Bill



Re: APR nmake makefiles

Posted by Paul Querna <pq...@apache.org>.
William A. Rowe, Jr. wrote:
> At 12:27 PM 6/28/2005, Mladen Turk wrote:
> 
>>William A. Rowe, Jr. wrote:
>>
>>
>>> Question; do we want to adopt (finish adopting) svn's build
>>>system coded in python?
>>
>>Are you guys saying that I would need a python to even
>>consider to build a APR from the cvs/svn?
> 
> 
> This is true *today* for everyone except Win32 (and netware?)
> 
> 
>>IMHO that would be a huge step backward.
> 
> 
> It's bit me.  I'm unlikely to be contributing much on HP/UX or
> AIX for the foreseeable future until I reengineer my entire
> build environment.  BSD is not much better, I can't even do
> simple scratch tests on the people.apache.org box.
> 
> Yes we are *strictly* talking about running autoconf; once the
> autoconf is done, ./configure shouldn't require Python (right?)
> But alot of APR users want to live on the bleeding edge, and
> we want to encourage folks to make improvements/submit them
> back, which implies they live and breathe the svn trunk.

In these cases, maybe we should supply snapshots that already have 
configure built? (this is a topic I have hinted at over in HTTPD land 
too.)  Snapshots that don't have ./configure already built are pretty 
much worthless.

And if it was all in python, it means the Release Manager could build 
the .zip file for win32 releases all from one environment...

-Paul

Re: APR nmake makefiles

Posted by "William A. Rowe, Jr." <wr...@rowe-clan.net>.
At 12:27 PM 6/28/2005, Mladen Turk wrote:
>William A. Rowe, Jr. wrote:
>
>>  Question; do we want to adopt (finish adopting) svn's build
>>system coded in python?
>
>Are you guys saying that I would need a python to even
>consider to build a APR from the cvs/svn?

This is true *today* for everyone except Win32 (and netware?)

>IMHO that would be a huge step backward.

It's bit me.  I'm unlikely to be contributing much on HP/UX or
AIX for the foreseeable future until I reengineer my entire
build environment.  BSD is not much better, I can't even do
simple scratch tests on the people.apache.org box.

Yes we are *strictly* talking about running autoconf; once the
autoconf is done, ./configure shouldn't require Python (right?)
But alot of APR users want to live on the bleeding edge, and
we want to encourage folks to make improvements/submit them
back, which implies they live and breathe the svn trunk.

>First of all, the number of files in the APR will unlikely
>go sky-high, so what's wrong with the current build?
>Seems to me that we are over-engineering here.

<nods>

I am trying to discover what the python solution actually solves.
Earlier versions all worked quite lovely imho, although already
quite deep in AC/libtool version dependencies.

We seem to be taking large steps backwards - we are trying to
craft the most portable implementation layer that is efficient
on a wide range of platforms, yet the label gnu/apr is starting
to swim in my head :)

I can't decide which is more efficient; pull us further in this
direction by bringing in the svn solution for win32 (which would
require python to ./configure, IIUC), or look to our OpenSSL
sister group for their perl build system with much fewer 
dependencies and more friendly build tool licenses.

Bill



Re: APR nmake makefiles

Posted by Mladen Turk <mt...@apache.org>.
William A. Rowe, Jr. wrote:
> Mladen;
> 
>   I'd prefer you don't commit this, *yet*.

Well, like said didn't had any intention to commit anything
before some consensus :)

>   Question; do we want to adopt (finish adopting) svn's build
> system coded in python?

Are you guys saying that I would need a python to even
consider to build a APR from the cvs/svn?

IMHO that would be a huge step backward.
First of all, the number of files in the APR will unlikely
go sky-high, so what's wrong with the current build?
Seems to me that we are over-engineering here.


Regards,
Mladen.

Build system, WAS: Re: APR nmake makefiles

Posted by Sander Striker <st...@apache.org>.
William A. Rowe, Jr. wrote:
> Mladen;
> 
>   I'd prefer you don't commit this, *yet*.  I agree the build
> system needs refactoring.  But also believe that more cruft in
> the tree will only confuse users.

I agree.

> And your specific solution does not lend itself to being maintained,
> particularly by the unix hackers in the room :-/

By anyone IMHO.

> Question; do we want to adopt (finish adopting) svn's build
> system coded in python?

I certainly would like to, yes.

> If we can get to a point where .dsp, nmake files, and all the
> rest can even be generated on unix
> (still, a dos-style .zip thrown up on /dist/apr/), this would
> all be goodness.

Yup.


Sander

Re: APR nmake makefiles

Posted by "William A. Rowe, Jr." <wr...@rowe-clan.net>.
Mladen;

  I'd prefer you don't commit this, *yet*.  I agree the build
system needs refactoring.  But also believe that more cruft in
the tree will only confuse users.  And your specific solution
does not lend itself to being maintained, particularly by the
unix hackers in the room :-/

  Question; do we want to adopt (finish adopting) svn's build
system coded in python?  If we can get to a point where .dsp,
nmake files, and all the rest can even be generated on unix
(still, a dos-style .zip thrown up on /dist/apr/), this would
all be goodness.

  I won't have time in the July, but if anyone wants to offer
this up with some docs, I think we could move in that direction.
Especially since I'm much more irritiated by the new python
dependency of unix than I would be for win32.

  So I'll either devote energy to stripping back out all 
the bogus python dependencies in building from svn on unix 
(an obstacle to the non-penguin world), or stack on more 
dependencies on python for win32 :-)

Bill


At 01:07 PM 6/27/2005, Mladen Turk wrote:
>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)