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
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)
APR 2.0 also provides a number of utility functions and library
compatibility interfaces. These were formerly part of APR-util,
a seperate utility library in version 1 releases. These include;
Hashing and UUID services
Multiple SQL DBD client interfaces
Multiple flat-database DBM client interfaces
Typesafe function Hooks abstraction
MemCache interface
Date parsing rourtines
Resource Lists
Thread Pools
Queues
Relocatable Memory Management functions
String filename-style pattern matching
URI Parsing
Charset translation (iconv based)
XML parsing (expat based)
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!
Database Providers
Interfaces for copy-left licensed MySQL and gdbm DBD drivers, and
Berkeley DB DBM all ship as part of the distribution. To avoid licensing
incompatibilities, these are not built by default. To enable support,
the corresponding use the –with-{provider} option, but be aware that
these licenses may introduce licensing implications for your compiled code.
Similarly, the bindings for propritary drivers such as Oracle must also be
explicitly enabled.
Whenever distributing apr-util in combination with database client
drivers, always review the license requirements of all components.
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.;
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;
Make sure that “C++ CMake tools for Windows” component is installed.
Use Visual Studio Open Folder command to open APR source code directory.
Use Build command to build APR
Please refer to README.cmake for more information about CMake options.
Generating Test Coverage information with gcc
If you want to generate test coverage data, use the following steps:
./buildconf
CFLAGS=”–coverage -fprofile-abs-path” LDFLAGS=”–coverage” ./configure
make
cd test
make
./testall
cd ..
make gcov
Cryptographic Software Notice
This distribution includes cryptographic software. The country in
which you currently reside may have restrictions on the import,
possession, use, and/or re-export to another country, of
encryption software. BEFORE using any encryption software, please
check your country’s laws, regulations and policies concerning the
import, possession, or use, and re-export of encryption software, to
see if this is permitted. See http://www.wassenaar.org/ for more
information.
The U.S. Government Department of Commerce, Bureau of Industry and
Security (BIS), has classified this software as Export Commodity
Control Number (ECCN) 5D002.C.1, which includes information security
software using or performing cryptographic functions with asymmetric
algorithms. The form and manner of this Apache Software Foundation
distribution makes it eligible for export under the License Exception
ENC Technology Software Unrestricted (TSU) exception (see the BIS
Export Administration Regulations, Section 740.13) for both object
code and source code.
The following provides more details on the included cryptographic
software:
APR provides an abstract interface for symmetrical cryptographic
functions that make use of a general-purpose encryption library,
such as OpenSSL, NSS, or the operating system’s platform-specific
facilities. This interface is known as the apr_crypto interface,
with implementation beneath the /crypto directory.
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:
To give a brief overview, the primary core subsystems of APR 1.3 include the following:
APR 2.0 also provides a number of utility functions and library compatibility interfaces. These were formerly part of APR-util, a seperate utility library in version 1 releases. These include;
For a more complete list, please refer to the following URLs:
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:
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!
Database Providers
Interfaces for copy-left licensed MySQL and gdbm DBD drivers, and Berkeley DB DBM all ship as part of the distribution. To avoid licensing incompatibilities, these are not built by default. To enable support, the corresponding use the –with-{provider} option, but be aware that these licenses may introduce licensing implications for your compiled code. Similarly, the bindings for propritary drivers such as Oracle must also be explicitly enabled.
Whenever distributing apr-util in combination with database client drivers, always review the license requirements of all components.
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-.tar.bz2 rpmbuild -ts apr-util-.tar.bz2
Run the following to create RPMs (or build from the SRPMs):
rpmbuild -tb apr-.tar.bz2 rpmbuild -tb apr-util-.tar.bz2
Resolve dependencies as appropriate.
Configuring and Building APR on Windows
APR uses CMake to build on Windows.
Using command line: cmake -B out/build -G Ninja -DCMAKE_INSTALL_PREFIX=out/install cmake –build out/build cmake –install out/build
Using Visual Studio:
Please refer to README.cmake for more information about CMake options.
Generating Test Coverage information with gcc
If you want to generate test coverage data, use the following steps:
./buildconf CFLAGS=”–coverage -fprofile-abs-path” LDFLAGS=”–coverage” ./configure make cd test make ./testall cd .. make gcov
Cryptographic Software Notice
This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country’s laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See http://www.wassenaar.org/ for more information.
The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this Apache Software Foundation distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code.
The following provides more details on the included cryptographic software:
APR provides an abstract interface for symmetrical cryptographic functions that make use of a general-purpose encryption library, such as OpenSSL, NSS, or the operating system’s platform-specific facilities. This interface is known as the apr_crypto interface, with implementation beneath the /crypto directory.