optional functionality or specify prerequisites, may change from
release to release as feedback is received from users and bugs and
limitations are resolved.
This can be used with Apache httpd
2.4.x by copying the following files from
httpd trunk (in Subversion) into the
2.4.x source tree:
Important: Refer to the "Known Bugs and Limitations" section for further
It is beyond the scope of this document to document or explain
how to utilize the various cmake features, such as different
build backends or provisions for finding support libraries.
Please refer to the cmake documentation for additional information
that applies to building any project with cmake.
The following tools must be in PATH:
* cmake, version 2.8 or later
* If the WITH_MODULES feature is used: awk
* If using a command-line compiler: compiler and linker and related tools
(Refer to the cmake documentation for more information.)
The following support libraries are mandatory:
+ Either APR 2.0-dev (trunk) or APR
1.4.x and APR-Util
1.5.x. + When building APR (but not APR-Util), specify the build option
APR_INSTALL_PRIVATE_H so that non-standard files required for building
Apache httpd are installed.
+ Additional APR settings affect httpd but are not mandatory, such as
Certain optional features of APR 2.0-dev (trunk) or APR-Util
1.5.xallow some optional features of httpd to be enabled. For example,
APU_HAVE_CRYPTO is required for mod_session_crypto.
Additional support libraries allow some optional features of httpd to be
* libxml2 (
e.g., mod_proxy_html)
* openssl (mod_ssl and https support for ab)
1. cd to a clean directory for building (
i.e., don't build in your
2. Make sure cmake and Perl are in PATH. Additionally, some backends
require compile tools in PATH. (Hint: "Visual Studio Command Prompt")
In the unlikely event that you use -DWITH_MODULES, described below, make
3. cmake -G "some backend, like 'NMake Makefiles'"
-DENABLE_MODULES=A|I|O|a|i
Alternately, you can use the cmake-gui and update settings in the GUI.
PCRE_INCLUDE_DIR, PCRE_LIBRARIES, APR_INCLUDE_DIR, APR_LIBRARIES:
cmake doesn't bundle FindXXX for these packages, so the crucial
information has to be specified in this manner if they aren't found
in their default location.
These will have to be specified only if PCRE is installed to a different
directory than httpd, or if debug *and* release builds of PCRE were
installed there and you want to control which is used. (Currently the
build will use
pcred.lib (debug) if it is found in the default location
and not overridden with -DPCRE_LIBRARIES.)
These will have to be specified if APR[-Util] was installed to a
different directory than httpd.
When building with APR trunk (future APR
2.x, with integrated APR-Util),
APR+APR-Util
1.x vs. APR trunk will be detected automatically if they
are installed to the same location as httpd.
APR-Util
1.x has an optional LDAP library. If APR-Util has LDAP enabled
and httpd's mod_ldap and mod_authnz_ldap are being used, include the
path to the LDAP library in the APR_LIBRARIES setting. (If APR and
APR-Util are found in the default location, the LDAP library will be
included if it is present.
LIBXML2_ICONV_INCLUDE_DIR, LIBXML2_ICONV_LIBRARIES
If using a module that requires libxml2 *and* the build of libxml2 requires
iconv, set these variables to allow iconv includes and libraries to be
CMAKE_C_FLAGS_RELEASE, _DEBUG, _RELWITHDEBINFO, _MINSIZEREL
For NMake Makefiles the choices are at least DEBUG, RELEASE,
RELWITHDEBINFO, and MINSIZEREL
Other backends make have other selections.
Each module has a default setting which can be overridden with one of
A build and Activate module
a build and Activate module IFF prereqs are available; if
prereqs are unavailable, don't build it
I build module but leave it Inactive (commented-out
i build module but leave it Inactive IFF prereqs are
available; if prereqs are unavailable, don't build it
Examples: -DENABLE_ACCESS_COMPAT=O
This changes the *minimum* enablement of all modules to the specified
value (one of A, a, I, i, O, as described under ENABLE_foo above).
The ranking of enablement from lowest to highest is O, i, I, a, A.
If a specific module has a higher rank enablement setting, either from
a built-in default or from -DENABLE_foo, ENABLE_MODULES won't affect
that module. However, if a specific module has a lower-rank enablement
setting, presumably from a built-in default, the value of ENABLE_MODULES
will be used for that module.
Explanations for possible values:
-DENABLE_MODULES=a build and activate all possible modules,
ignoring any with missing prereqs
(doesn't affect modules with A for ENABLE_foo)
-DENABLE_MODULES=i build but leave inactive all possible
modules, ignoring any with missing
(doesn't affect modules with A, a, or I for
-DENABLE_MODULES=O no impact, since all modules are either
already disabled or have a higher setting
-DENABLE_MODULES=A build and activate all possible modules,
failing the build if any module is missing
-DENABLE_MODULES=I similar to -DENABLE_MODULES=A
(doesn't affect modules with A or a for
Comma-separated paths to single file modules to statically linked into
the autoconf-based build. Key differences: The modpath (
e.g.,
"generators") isn't provided or used, and the copy of the module
source being built is automatically updated when it changes.
See also EXTRA_INCLUDE_DIRS.
List of additional directories to search for .h files. This may
be necessary when including third-party modules in the httpd build
Port numbers for substitution into default .conf files. (The defaults
If .pdb files are generated for debugging, install them.
The .pdb files are generally needed for debugging low-level code
problems. If they aren't installed, they are still available in the
build directory for use by alternate packaging implementations or when
debugging on the build machine.
Install the Apache HTTP Server manual.
This could be turned off when developing changes in order to speed up
4. Build using the chosen generator (
e.g., "nmake install" for cmake's "NMake
Running the server and support programs
---------------------------------------
This build system does not copy binaries such as dlls from other projects
into the httpd install location. Without taking some precautions, httpd
and support programs can fail to start or modules can fail to load because
a support library can't be found in PATH or in the directory of the httpd
This can be resolved in several different ways:
* Install httpd and the various support libraries to a common install
prefix so that support libraries and httpd programs are installed in
the same bin directory and are found without setting PATH.
* Update PATH to include the bin directories of all necessary support
Depending on where PATH is set, it may not affect starting httpd as
* Maintain a script which combines required binaries into a common
location, such as the httpd installion bin directory, and use that
script after building or otherwise installing or updating support
* AVOID THE USE of any unrepeatable process of copying dll files around
from different install locations until something starts working. The
result is that when you later update a support library to pick up a
security fix, httpd will likely continue to use the old, vulnerable
Known Bugs and Limitations
--------------------------
* no standard script or makefile is provided to tie together the builds
of httpd and support libraries in a manner suitable for typical users
* no logic to find support libraries or otherwise build these modules:
+ mod_socache_dc (requires distcache), mod_serf (requires serf)
+ additionally, mod_lbmethod_rr and mod_firehose don't compile on Windows
* ApacheMonitor has a build error and is disabled
* CGI examples aren't installed
*
mod_dav.lib and any similar libraries aren't installed, nor are any .exp
files (though I'm not sure that is a problem)
* module enablement defaults are not in sync with the autoconf-based build
* no support for static support library builds; unclear if that is a
requirement; if so: taking PCRE as an example, we'd need to detect that it
is static and then turn on PCRE_STATIC for the libhttpd build
* Many httpd features have not been tested with this build.
* Developers need to examine the existing Windows build in great detail and see
what is missing from the cmake-based build, whether a feature or some build
* Any feedback you can provide on your experiences with this build will be