From c8364dfcb358c3453094121e028f515721b7a083 Mon Sep 17 00:00:00 2001 From: Jeff Trawick Date: Thu, 29 Aug 2013 17:59:11 +0000 Subject: [PATCH] move cmake howto/buglist to a separate file, README.cmake add license text to CMakeLists.txt git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1518736 13f79535-47bb-0310-9956-ffa450edef68 --- CMakeLists.txt | 96 +++++------------------------ README.cmake | 160 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 175 insertions(+), 81 deletions(-) create mode 100644 README.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 34713d8750..9f2a2e9926 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,87 +1,21 @@ -PROJECT(HTTPD C) - -# Experimental cmake-based build support for Apache httpd on Windows -# -# General usage: -# 0. Read the todos down below and make sure this is good enough for your -# purposes. -# 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" \ -# d:/path/to/httpdsource -# Alternately, use cmake-gui and update settings in the GUI. -# -# When building with APR trunk (future APR 2.x, with integrated APR-Util), -# specify just libapr-2.lib: -# -# -DAPR_LIBRARIES=d:/path/to/aprinst/lib/libapr-2.lib -# -# Other flags of interest: -# 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 found. -# 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. +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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 # -# 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 +# http://www.apache.org/licenses/LICENSE-2.0 # -# 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 -# I build module but leave it Inactive (commented-out LoadModule) -# i build module but leave it Inactive IFF prereqs are available -# O Omit module completely -# Examples: -DENABLE_MOD_ACCESS_COMPAT="O" (Omit the module) -# -DENABLE_MOD_PROXY_HTML="i" (If the prereqs are found, build it but -# don't activate it in the default .conf.) +# 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. # -# 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. -# -# Port and SSLPort: port numbers for substitution into default .conf files -# Defaults are 80 and 443. -# -# 4. build using chosen backend (e.g., "nmake install") -# -# Todos for Windows build: -# . Support for APR/APU optional features as module prerequisites -# (e.g., APU_HAVE_CRYPTO requirement of mod_session_crypto) -# . Find support libraries: -# + LUA, distcache -# . Modules not yet supported: -# + mod_ldap, mod_authnz_ldap, mod_socache_dc, -# mod_lua, mod_serf, apreq+mod_apreq, mod_session_crypto -# + mod_lbmethod_rr and mod_firehose, which don't compile on Windows -# . Build buildmark.c when httpd.exe is regenerated -# . ab + HAVE_OPENSSL isn't working at all, even for plain -# . ApacheMonitor has a build error -# . install CGI examples -# . install .h files that are in odd places -# . Sync module enablement defaults with autoconf-based build -# . Generally: go through the existing Windows build and see what is missing, whether a -# feature or some build nuance +# Read README.cmake before using this. + +PROJECT(HTTPD C) CMAKE_MINIMUM_REQUIRED(VERSION 2.8) diff --git a/README.cmake b/README.cmake new file mode 100644 index 0000000000..182d4575e2 --- /dev/null +++ b/README.cmake @@ -0,0 +1,160 @@ +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. + + 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") + +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 +* .h files which reside outside of include are not 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. -- 2.40.0