168 lines
5.5 KiB
Plaintext
168 lines
5.5 KiB
Plaintext
|
Apache Portable Runtime Library (APR)
|
||
|
-------------------------------------
|
||
|
|
||
|
The Apache Portable Runtime Library provides a predictable and
|
||
|
consistent interface to underlying platform-specific
|
||
|
implementations, with an API to which software developers may code
|
||
|
and be assured of predictable if not identical behavior regardless
|
||
|
of the platform on which their software is built, relieving them of
|
||
|
the need to code special-case conditions to work around or take
|
||
|
advantage of platform-specific deficiencies or features.
|
||
|
|
||
|
APR and its companion libraries are implemented entirely in C
|
||
|
and provide a common programming interface across a wide variety
|
||
|
of operating system platforms without sacrificing performance.
|
||
|
Currently supported platforms include:
|
||
|
|
||
|
UNIX variants
|
||
|
Windows
|
||
|
Netware
|
||
|
Mac OS X
|
||
|
OS/2
|
||
|
|
||
|
To give a brief overview, the primary core
|
||
|
subsystems of APR 1.3 include the following:
|
||
|
|
||
|
Atomic operations
|
||
|
Dynamic Shared Object loading
|
||
|
File I/O
|
||
|
Locks (mutexes, condition variables, etc)
|
||
|
Memory management (high performance allocators)
|
||
|
Memory-mapped files
|
||
|
Multicast Sockets
|
||
|
Network I/O
|
||
|
Shared memory
|
||
|
Thread and Process management
|
||
|
Various data structures (tables, hashes, priority queues, etc)
|
||
|
|
||
|
For a more complete list, please refer to the following URLs:
|
||
|
|
||
|
http://apr.apache.org/docs/apr/modules.html
|
||
|
|
||
|
Users of APR 0.9 should be aware that migrating to the APR 1.x
|
||
|
programming interfaces may require some adjustments; APR 1.x is
|
||
|
neither source nor binary compatible with earlier APR 0.9 releases.
|
||
|
Users of APR 1.x can expect consistent interfaces and binary backwards
|
||
|
compatibility throughout the entire APR 1.x release cycle, as defined
|
||
|
in our versioning rules:
|
||
|
|
||
|
http://apr.apache.org/versioning.html
|
||
|
|
||
|
APR is already used extensively by the Apache HTTP Server
|
||
|
version 2 and the Subversion revision control system, to
|
||
|
name but a few. We list all known projects using APR at
|
||
|
http://apr.apache.org/projects.html -- so please let us know
|
||
|
if you find our libraries useful in your own projects!
|
||
|
|
||
|
|
||
|
Using a Subversion Checkout on Unix
|
||
|
===================================
|
||
|
|
||
|
If you are building APR from SVN, you need to perform a prerequisite
|
||
|
step. You must have autoconf, libtool and python installed for this
|
||
|
to work. The prerequisite is simply;
|
||
|
|
||
|
./buildconf
|
||
|
|
||
|
If you are building APR from a distribution tarball, buildconf is
|
||
|
already run for you, and you do not need autoconf, libtool or python
|
||
|
installed or to run buildconf unless you have patched APR's buildconf
|
||
|
inputs (such as configure.in, build.conf, virtually any file within
|
||
|
the build/ tree, or you add or remove source files).
|
||
|
|
||
|
Remember when updating from svn that you must rerun ./buildconf again
|
||
|
to effect any changes made to the build schema in your fresh update.
|
||
|
|
||
|
|
||
|
Configuring and Building APR on Unix
|
||
|
====================================
|
||
|
|
||
|
Simply;
|
||
|
|
||
|
./configure --prefix=/desired/path/of/apr
|
||
|
make
|
||
|
make test
|
||
|
make install
|
||
|
|
||
|
Configure has additional options, ./configure --help will offer you
|
||
|
those choices. You may also add CC=compiler CFLAGS="compiler flags"
|
||
|
etc. prior to the ./configure statement (on the same line). Please
|
||
|
be warned, some flags must be passed as part of the CC command,
|
||
|
itself, in order for autoconf to make the right determinations. Eg.;
|
||
|
|
||
|
CC="gcc -m64" ./configure --prefix=/desired/path/of/apr
|
||
|
|
||
|
will inform APR that you are compiling to a 64 bit CPU, and autoconf
|
||
|
must consider that when setting up all of APR's internal and external
|
||
|
type declarations.
|
||
|
|
||
|
For more verbose output from testall, you may wish to invoke testall
|
||
|
with the flag;
|
||
|
|
||
|
cd test
|
||
|
./testall -v
|
||
|
|
||
|
|
||
|
Building APR RPM files on Linux
|
||
|
===============================
|
||
|
|
||
|
Run the following to create SRPMs:
|
||
|
|
||
|
rpmbuild -ts apr-<version>.tar.bz2
|
||
|
rpmbuild -ts apr-util-<version>.tar.bz2
|
||
|
|
||
|
Run the following to create RPMs (or build from the SRPMs):
|
||
|
|
||
|
rpmbuild -tb apr-<version>.tar.bz2
|
||
|
rpmbuild -tb apr-util-<version>.tar.bz2
|
||
|
|
||
|
Resolve dependencies as appropriate.
|
||
|
|
||
|
|
||
|
Configuring and Building APR on Windows
|
||
|
=======================================
|
||
|
|
||
|
Using Visual Studio, you can build and run the test validation of APR.
|
||
|
The Makefile.win make file has a bunch of documentation about it's
|
||
|
options, but a trivial build is simply;
|
||
|
|
||
|
nmake -f Makefile.win
|
||
|
nmake -f Makefile.win PREFIX=c:\desired\path\of\apr install
|
||
|
|
||
|
Note you must manually modify the include\apr.hw file before you
|
||
|
build to change default options, see the #define APR_HAS_... or the
|
||
|
#define APR_HAVE_... statements. Be careful, many of these aren't
|
||
|
appropriate to be modified. The most common change is
|
||
|
|
||
|
#define APR_HAVE_IPV6 1
|
||
|
|
||
|
rather than 0 if this build of APR will be used strictly on machines
|
||
|
with the IPv6 adapter support installed.
|
||
|
|
||
|
It's trivial to include the apr.dsp (for a static library) or the
|
||
|
libapr.dsp (for a dynamic library) in your own build project, or you
|
||
|
can load apr.dsw in Visual Studio 2002 (.NET) or later, which will
|
||
|
convert these for you into apr.sln and associated .vcproj files.
|
||
|
|
||
|
When using APR as a dynamic library, nothing special is required,
|
||
|
simply link to libapr.lib. To use it as a static library, simply
|
||
|
define APR_DECLARE_STATIC before you include any apr header files
|
||
|
in your source, and link to apr.lib instead.
|
||
|
|
||
|
|
||
|
Generating Test Coverage information with gcc
|
||
|
=============================================
|
||
|
|
||
|
If you want to generate test coverage data, use the following steps:
|
||
|
|
||
|
./buildconf
|
||
|
CFLAGS="-fprofile-arcs -ftest-coverage" ./configure
|
||
|
make
|
||
|
cd test
|
||
|
make
|
||
|
./testall
|
||
|
cd ..
|
||
|
make gcov
|
||
|
|
||
|
|