README.cmake revision 6500ceb45a2075fad36a0dc5c86a23858bf9c84e
Experimental cmake-based build support for Apache httpd on Microsoft Windows
Status
------
This build support is currently intended only for Microsoft Windows.
This build support is experimental. Specifically,
* It does not support all features of Apache httpd.
* Some components may not be built correctly and/or in a manner
compatible with the previous Windows build support.
* Build interfaces, such as the mechanisms which are used to enable
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:
* CMakeLists.txt
* build/cpR_noreplace.pl
Important: Refer to the "Known Bugs and Limitations" section for further
information.
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.
Prerequisites
-------------
The following tools must be in PATH:
* cmake, version 2.8 or later
* Perl
* 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:
* APR, built with cmake
+ Either APR 2.0-dev (trunk) or APR 1.4.x and APR-Util 1.5.x.
+ When building APR (but not APR-Util 1.5.x), 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
APR_HAVE_IPV6.
* PCRE
Additional support libraries allow optional features of httpd to be enabled:
* libxml2 (e.g., mod_proxy_html)
* openssl (e.g., mod_ssl)
* zlib (e.g., mod_deflate)
How to build
------------
1. cd to a clean directory for building (i.e., don't build in your
source tree)
2. Make sure Perl is in your PATH. Additionally, some backends may want
your compile tools in PATH. (Hint: "Visual Studio Command Prompt")
In the unlikely event that you use -DWITH_MODULES, make sure awk is
in PATH.
3. cmake -G "some backend, like 'NMake Makefiles'"
-DCMAKE_INSTALL_PREFIX=d:/path/to/httpdinst
-DPCRE_INCLUDE_DIR=d:/path/to/pcreinst/include
-DPCRE_LIBRARIES=d:/path/to/pcreinst/lib/pcre[d].lib
-DAPR_INCLUDE_DIR=d:/path/to/aprinst/include
-DAPR_LIBRARIES="d:/path/to/aprinst/lib/libapr-1.lib;d:/path/to/aprinst/lib/libaprutil-1.lib"
-DENABLE_MOD_foo=A|I|O|a|i
d:/path/to/httpdsource
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
When building with APR trunk (future APR 2.x, with integrated APR-Util),
specify just the path to libapr-2.lib:
-DAPR_LIBRARIES=d:/path/to/aprinst/lib/libapr-2.lib
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
used. For example:
-DLIBXML2_ICONV_INCLUDE_DIR=c:\iconv-1.9.2.win32\include
-DLIBXML2_ICONV_LIBRARIES=c:\iconv-1.9.2.win32\lib\iconv.lib
CMAKE_C_FLAGS_RELEASE, _DEBUG, _RELWITHDEBINFO, _MINSIZEREL
CMAKE_BUILD_TYPE
For NMake Makefiles the choices are at least DEBUG, RELEASE,
RELWITHDEBINFO, and MINSIZEREL
Other backends make have other selections.
ENABLE_MOD_foo:
Each module has a default setting which can be overridden with one of
the following values:
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
LoadModule directive)
i build module but leave it Inactive IFF prereqs are
available; if prereqs are unavailable, don't build it
O Omit module completely
Examples: -DENABLE_MOD_ACCESS_COMPAT=O
-DENABLE_MOD_PROXY_HTML=i
WITH_MODULES:
Comma-separated paths to single file modules to statically link into
the server, like the --with-module=modpath:/path/to/mod_foo.c with
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.
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
via WITH_MODULES.
Port and SSLPort: port numbers for substitution into default .conf files.
(The defaults are 80 and 443.)
4. build using chosen backend (e.g., "nmake install")
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
binary.
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
libraries.
Depending on where PATH is set, it may not effect starting httpd as
a service.
* 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
libraries.
* 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
library file.
Known Bugs and Limitations
--------------------------
* no support for APR/APU optional features as module prerequisites (e.g.,
the APU_HAVE_CRYPTO requirement of mod_session_crypto)
* no logic to find support libraries needed by some modules (LUA, distcache)
* no support for these modules:
+ mod_ldap, mod_authnz_ldap, mod_socache_dc, mod_lua, mod_serf,
apreq+mod_apreq, mod_session_crypto
+ additionally, mod_lbmethod_rr and mod_firehose don't compile on Windows
anyway
* buildmark.c isn't necessarily rebuilt when httpd.exe is regenerated
* ab + HAVE_OPENSSL isn't working at all, even for non-SSL
* ApacheMonitor has a build error and is disabled
* CGI examples aren't installed
* module enablement defaults are not in sync with the autoconf-based build
Generally:
* 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
nuance.
* Any feedback you can provide on your experiences with this build will be
helpful.