mirror of
https://github.com/apache/httpd.git
synced 2025-05-28 13:41:30 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@567128 13f79535-47bb-0310-9956-ffa450edef68
464 lines
20 KiB
XML
464 lines
20 KiB
XML
<?xml version="1.0" encoding="UTF-8" ?>
|
|
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
|
|
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
|
|
<!-- $LastChangedRevision$ -->
|
|
|
|
<!--
|
|
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
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
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.
|
|
-->
|
|
|
|
<manualpage metafile="win_compiling.xml.meta">
|
|
<parentdocument href="./">Platform Specific Notes</parentdocument>
|
|
|
|
<title>Compiling Apache for Microsoft Windows</title>
|
|
|
|
<summary>
|
|
|
|
<p>There are many important points before you begin compiling
|
|
Apache. See <a href="windows.html">Using Apache with Microsoft
|
|
Windows</a> before you begin.</p>
|
|
|
|
</summary>
|
|
|
|
<section id="requirements">
|
|
|
|
<title>Requirements</title>
|
|
|
|
<p>Compiling Apache requires the following environment to be
|
|
properly installed:</p>
|
|
|
|
<ul>
|
|
<li>
|
|
<p>Disk Space</p>
|
|
<p>Make sure you have at least 180 MB of free disk space
|
|
available. After installation Apache requires approximately
|
|
70 MB of disk space, plus space for log and cache files,
|
|
which can grow rapidly. The actual disk space requirements
|
|
will vary considerably based on your chosen configuration and
|
|
any third-party modules or libraries, especially when OpenSSL
|
|
is also built. Because many files are text and very easily
|
|
compressed, NTFS filesystem compression cuts these requirements
|
|
in half.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>Microsoft Visual C++ (Microsoft Visual Studio) 6.0 or higher.</p>
|
|
|
|
<p>Apache can be built using the command line tools, or from
|
|
within the Visual Studio IDE Workbench. The command line
|
|
build requires the environment to reflect the <code>PATH</code>,
|
|
<code>INCLUDE</code>, <code>LIB</code> and other variables
|
|
that can be configured with the <code>vcvars32.bat</code> file:</p>
|
|
|
|
<example>
|
|
"c:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32"
|
|
</example>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The Windows Platform SDK for Visual C++ 6.0 (97) or 7.0 (.NET)</p>
|
|
|
|
<p>Apache's APR and APR-util builds require an updated Microsoft
|
|
Windows Platform SDK, from Feb 2003 or later, included in the
|
|
Visual C++ 7.1 (Studio 2003) and later. For command line builds with
|
|
Visual C++ 6.0 or 7.0, the Platform SDK environment is prepared by
|
|
the <code>setenv.bat</code> file:</p>
|
|
<example>
|
|
"c:\Program Files\Platform SDK\setenv.bat"
|
|
</example>
|
|
|
|
<p>The Platform SDK files distributed with Visual C++ 6.0 and
|
|
Visual Studio .NET (2000) are no longer sufficient and cause many
|
|
compilation warnings and linkage errors. Users of Visual C++ 7.1
|
|
(Studio 2003) and later versions (of the full product, not the
|
|
'Visual Studio Express' flavor) may skip this requirement.</p>
|
|
|
|
<p>If using the GUI, either start msdev or devenv with the /setenv
|
|
flag (after invoking setenv.bat), or ensure the paths are correct
|
|
under the Tools -> Options -> (Projects ->) Directories
|
|
menu option. The Platform SDK installer will generally help you
|
|
configure this.</p>
|
|
</li>
|
|
|
|
<li>
|
|
<p>The awk utility (awk, gawk or similar).</p>
|
|
<p>To install Apache within the build system, several files are
|
|
modified using the <code>awk.exe</code> utility. awk was chosen since
|
|
it is a very small download (compared with Perl or WSH/VB) and
|
|
accomplishes the task of modifying configuration files upon
|
|
installation. Brian Kernighan's
|
|
<a href="http://cm.bell-labs.com/cm/cs/who/bwk/"
|
|
>http://cm.bell-labs.com/cm/cs/who/bwk/</a>
|
|
site has a compiled native Win32 binary,
|
|
<a href="http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe"
|
|
>http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe</a> which
|
|
you must save with the name <code>awk.exe</code> rather than
|
|
<code>awk95.exe</code>.</p>
|
|
|
|
<note>If awk.exe is not found, Makefile.win's install target
|
|
will not perform substitutions in the installed .conf files.
|
|
The installed .conf files must then be modified by hand for
|
|
this situation.</note>
|
|
|
|
<p>Note that Developer Studio IDE will only find
|
|
<code>awk.exe</code> from the Executable path specified in the menu
|
|
option Tools -> Options -> (Projects ->) Directories.
|
|
Add the path for <code>awk.exe</code> to this list, and your
|
|
system <code>PATH</code> environment variable, as needed.</p>
|
|
|
|
<note>Also note that if you are using Cygwin tools
|
|
(<a href="http://www.cygwin.com/">http://www.cygwin.com/</a>)
|
|
the awk utility is named <code>gawk.exe</code> and that the file
|
|
<code>awk.exe</code> is really a symlink to the <code>gawk.exe</code>
|
|
file. The Windows command shell does not recognize symlinks, and
|
|
because of this building InstallBin will fail. A workaround is
|
|
to delete <code>awk.exe</code> from the cygwin installation and
|
|
copy <code>gawk.exe</code> to <code>awk.exe</code>. Also note the
|
|
cygwin/mingw ports of gawk 3.0.x were buggy, please upgrade to 3.1.x
|
|
before attempting to use any gawk port.</note>
|
|
</li>
|
|
|
|
<li>
|
|
<p>[Optional] zlib library (for <module>mod_deflate</module>)</p>
|
|
<p>Zlib must be installed into a <code>srclib</code> subdirectory named
|
|
<code>zlib</code>. This must be built in-place. Zlib can be obtained
|
|
from <a href="http://www.zlib.net/">http://www.zlib.net/</a> -- the
|
|
<module>mod_deflate</module> is confirmed to work correctly with
|
|
version 1.2.3.</p>
|
|
|
|
<example>
|
|
nmake -f win32\Makefile.msc<br />
|
|
nmake -f win32\Makefile.msc test
|
|
</example>
|
|
</li>
|
|
|
|
<li>
|
|
<p>[Optional] OpenSSL libraries (for <module>mod_ssl</module>
|
|
and <code>ab.exe</code> with ssl support)</p>
|
|
<p><strong>Caution: there are significant restrictions and
|
|
prohibitions on the use and distribution of strong cryptography
|
|
and patented intellectual property throughout the world.</strong>
|
|
OpenSSL includes strong cryptography controlled by both export
|
|
regulations and domestic law, as well as intellectual property
|
|
protected by patent, in the United States and elsewhere. Neither
|
|
the Apache Software Foundation nor the OpenSSL project can provide
|
|
legal advise regarding possession, use, or distribution of the code
|
|
provided by the OpenSSL project. <strong>Consult your own legal
|
|
counsel, you are responsible for your own actions.</strong></p>
|
|
|
|
<p>OpenSSL must be installed into a <code>srclib</code> subdirectory
|
|
named <code>openssl</code>, obtained from
|
|
<a href="http://www.openssl.org/source/"
|
|
>http://www.openssl.org/source/</a>, in order to compile
|
|
<module>mod_ssl</module> or the abs project (<code>ab.exe</code>
|
|
enabled with SSL support.) To prepare OpenSSL for both
|
|
<code>release</code> and <code>debug</code> builds of Apache, and
|
|
disable the patent protected features in OpenSSL, you might use
|
|
the following build commands:</p>
|
|
|
|
<example>
|
|
perl Configure no-mdc2 no-rc5 no-idea enable-zlib VC-WIN32 -Ipath/to/srclib/zlib<br />
|
|
ms\do_masm.bat<br />
|
|
nmake -f ms\ntdll.mak
|
|
</example>
|
|
|
|
<p>Note: It is not advisable to use zlib-dynamic, as that could
|
|
pose a thread race condition. If building zlib on win32, be sure
|
|
to adjust the resulting ms\ntdll.mak file to link to the full
|
|
path of srclib\zlib\zdll.lib rather than zlib1.lib (that error in
|
|
configuration of OpenSSL through 0.9.8d and earlier reflects older
|
|
zlib 1.1 versions.)</p>
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</section>
|
|
|
|
<section id="commandbuild">
|
|
|
|
<title>Command-Line Build</title>
|
|
|
|
<p>First, unpack the Apache distribution into an appropriate
|
|
directory. Open a command-line prompt and <code>cd</code> to that
|
|
directory.</p>
|
|
|
|
<p>The master Apache makefile instructions are contained in the
|
|
<code>Makefile.win</code> file. To compile Apache on Windows
|
|
NT, simply use one of the following commands to compiled the
|
|
<code>release</code> or <code>debug</code> build, respectively:</p>
|
|
|
|
<example><pre>
|
|
nmake /f Makefile.win _apacher
|
|
|
|
nmake /f Makefile.win _apached
|
|
</pre></example>
|
|
|
|
<p>Either command will compile Apache. The latter will disable
|
|
optimization of the resulting files, making it easier to single
|
|
step the code to find bugs and track down problems.</p>
|
|
|
|
</section>
|
|
|
|
<section id="workspacebuild">
|
|
|
|
<title>Developer Studio Workspace IDE Build</title>
|
|
|
|
<p>Apache can also be compiled using VC++'s Visual Studio
|
|
development environment. To simplify this process, a
|
|
Visual Studio workspace, <code>Apache.dsw</code>, is provided.
|
|
This workspace exposes the entire list of working <code>.dsp</code>
|
|
projects that are required for the complete Apache binary release.
|
|
It includes dependencies between the projects to assure that they
|
|
are built in the appropriate order.</p>
|
|
|
|
<p>Open the <code>Apache.dsw</code> workspace, and select
|
|
<code>InstallBin</code> (<code>Release</code> or <code>Debug</code> build,
|
|
as desired) as the Active Project. <code>InstallBin</code> causes all
|
|
related project to be built, and then invokes <code>Makefile.win</code> to
|
|
move the compiled executables and dlls. You may personalize the
|
|
<code>INSTDIR=</code> choice by changing <code>InstallBin</code>'s Settings,
|
|
General tab, Build command line entry. <code>INSTDIR</code> defaults to the
|
|
<code>/Apache2</code> directory. If you only want a test compile (without
|
|
installing) you may build the <code>BuildBin</code> project instead.</p>
|
|
|
|
<p>The <code>.dsp</code> project files are distributed in Visual
|
|
C++ 6.0 format. Visual C++ 5.0 (97) will recognize them. Visual C++
|
|
7.0 (.net) must convert <code>Apache.dsw</code> plus the <code>.dsp</code>
|
|
files into an <code>Apache.sln</code> plus <code>.msproj</code> files,
|
|
be sure you reconvert the <code>.msproj</code> file if any of the source
|
|
<code>.dsp</code> files change! This is really trivial, just open
|
|
<code>Apache.dsw</code> in the VC++ 7.0 IDE once again.</p>
|
|
|
|
<note>There is a flaw in the .vcproj conversion of .dsp through
|
|
Visual Studio 2005 SP1; devenv.exe will mis-parse the /D flag for RC
|
|
flags containing long quoted /D'efines containing spaces. The command:
|
|
<example>
|
|
perl srclib\apr\build\cvtdsp.pl -2005
|
|
</example>
|
|
will convert the /D flags for RC flags to use an alternate, parseable
|
|
syntax; unfortunately this syntax isn't supported by Visual Studio 97
|
|
or it's exported .mak files. These /D flags are used to pass the long
|
|
description of the mod_apachemodule.so files to their .rc resource
|
|
version-identifier compilations, and replace the use of awk for generating
|
|
.rc files formerly used for Apache 2.0.</note>
|
|
|
|
<p>Visual C++ 7.0 (.net) users should also use the Build
|
|
menu, Configuration Manager dialog to uncheck both the <code>Debug</code>
|
|
and <code>Release</code> Solution modules abs, <module>mod_ssl</module>
|
|
and <module>mod_deflate</module>.
|
|
These modules are built by invoking <code>nmake</code> or the IDE directly
|
|
with the <code>BinBuild</code> target to build those modules conditionally
|
|
if the <code>srclib</code> directories <code>openssl</code> and/or
|
|
<code>zlib</code> exist.</p>
|
|
|
|
<p>Exported <code>.mak</code> files pose a greater hassle, but they are
|
|
required for Visual C++ 5.0 users to build <module>mod_ssl</module>,
|
|
abs (<program>ab</program> with SSL support) and/or
|
|
<module>mod_deflate</module>. VC++ 7.0 (Visual Studio .NET) users
|
|
also benefit, <code>nmake</code> builds were faster than
|
|
<code>binenv</code> builds until the parallel compilation features
|
|
introduced in Visual Studio 2005. Build the entire project from within
|
|
the VC++ 5.0 or 6.0 IDE, preferably with mod_deflate, mod_ssl and abs,
|
|
then use the Project Menu Export for all makefiles (preferably, with
|
|
dependencies.) You must build the projects first in order to create
|
|
all dynamic auto-generated targets, so that dependencies can be parsed
|
|
correctly. Run the following command to fix the paths so they will build
|
|
anywhere:</p>
|
|
|
|
<example>
|
|
perl srclib\apr\build\fixwin32mak.pl
|
|
</example>
|
|
|
|
<p>You must type this command from the <em>top level</em>
|
|
directory of the httpd source tree. Every
|
|
<code>.mak</code> and <code>.dep</code> project file within
|
|
the current directory and below will be corrected, and the
|
|
timestamps adjusted to reflect the <code>.dsp</code>.</p>
|
|
|
|
<p>If you contribute back a patch that revises project files, we
|
|
must commit project files in Visual Studio 6.0 format. Changes
|
|
should be simple, with minimal compilation and linkage flags that
|
|
will be recognized by all VC++ 5.0 through 7.0 environments.</p>
|
|
|
|
</section>
|
|
|
|
<section id="projectcomponents">
|
|
|
|
<title>Project Components</title>
|
|
|
|
<p>The <code>Apache.dsw</code> workspace and <code>makefile.win</code>
|
|
<code>nmake</code> script both build the <code>.dsp</code> projects
|
|
of the Apache server in the following sequence:</p>
|
|
|
|
<ol>
|
|
<li><code>srclib\apr\apr.dsp</code></li>
|
|
|
|
<li><code>srclib\apr\libapr.dsp</code></li>
|
|
|
|
<li><code>srclib\apr-util\uri\gen_uri_delims.dsp</code></li>
|
|
|
|
<li><code>srclib\apr-util\xml\expat\lib\xml.dsp</code></li>
|
|
|
|
<li><code>srclib\apr-util\aprutil.dsp</code></li>
|
|
|
|
<li><code>srclib\apr-util\libaprutil.dsp</code></li>
|
|
|
|
<li><code>srclib\pcre\dftables.dsp</code></li>
|
|
|
|
<li><code>srclib\pcre\pcre.dsp</code></li>
|
|
|
|
<li><code>srclib\pcre\pcreposix.dsp</code></li>
|
|
|
|
<li><code>server\gen_test_char.dsp</code></li>
|
|
|
|
<li><code>libhttpd.dsp</code></li>
|
|
|
|
<li><code>Apache.dsp</code></li>
|
|
</ol>
|
|
|
|
<p>In addition, the <code>modules\</code> subdirectory tree contains
|
|
project files for the majority of the modules.</p>
|
|
|
|
<p>The <code>support\</code> directory contains project files for
|
|
additional programs that are not part of the Apache runtime,
|
|
but are used by the administrator to test Apache and maintain
|
|
password and log files. Windows-specific support projects are
|
|
broken out in the <code>support\win32\</code> directory.</p>
|
|
|
|
<ol>
|
|
<li><code>support\ab.dsp</code></li>
|
|
|
|
<li><code>support\htdigest.dsp</code></li>
|
|
|
|
<li><code>support\htpasswd.dsp</code></li>
|
|
|
|
<li><code>support\logresolve.dsp</code></li>
|
|
|
|
<li><code>support\rotatelogs.dsp</code></li>
|
|
|
|
<li><code>support\win32\ApacheMonitor.dsp</code></li>
|
|
|
|
<li><code>support\win32\wintty.dsp</code></li>
|
|
</ol>
|
|
|
|
<p>Once Apache has been compiled, it needs to be installed in
|
|
its server root directory. The default is the
|
|
<code>\Apache2</code> directory, of the same drive.</p>
|
|
|
|
<p>To build and install all the files into the desired folder
|
|
<em>dir</em> automatically, use one of the following
|
|
<code>nmake</code> commands:</p>
|
|
|
|
<example><pre>
|
|
nmake /f Makefile.win installr INSTDIR=<em>dir</em>
|
|
|
|
nmake /f Makefile.win installd INSTDIR=<em>dir</em>
|
|
</pre></example>
|
|
|
|
<p>The <em>dir</em> argument to <code>INSTDIR</code> gives
|
|
the installation directory; it can be omitted if Apache is
|
|
to be installed into <code>\Apache2</code>.</p>
|
|
|
|
<p>This will install the following:</p>
|
|
|
|
<ul>
|
|
<li><code><em>dir</em>\bin\Apache.exe</code> - Apache
|
|
executable</li>
|
|
|
|
<li><code><em>dir</em>\bin\ApacheMonitor.exe</code> - Service
|
|
monitor taskbar icon utility</li>
|
|
|
|
<li><code><em>dir</em>\bin\htdigest.exe</code> - Digest auth
|
|
password file utility</li>
|
|
|
|
<li><code><em>dir</em>\bin\htdbm.exe</code> - SDBM auth
|
|
database password file utility</li>
|
|
|
|
<li><code><em>dir</em>\bin\htpasswd.exe</code> - Basic auth
|
|
password file utility</li>
|
|
|
|
<li><code><em>dir</em>\bin\logresolve.exe</code> - Log file
|
|
dns name lookup utility</li>
|
|
|
|
<li><code><em>dir</em>\bin\rotatelogs.exe</code> - Log file
|
|
cycling utility</li>
|
|
|
|
<li><code><em>dir</em>\bin\wintty.exe</code> - Console window
|
|
utility</li>
|
|
|
|
<li><code><em>dir</em>\bin\libapr.dll</code> - Apache
|
|
Portable Runtime shared library</li>
|
|
|
|
<li><code><em>dir</em>\bin\libaprutil.dll</code> - Apache
|
|
Utility Runtime shared library</li>
|
|
|
|
<li><code><em>dir</em>\bin\libhttpd.dll</code> - Apache Core
|
|
library</li>
|
|
|
|
<li><code><em>dir</em>\modules\mod_*.so</code> - Loadable
|
|
Apache modules</li>
|
|
|
|
<li><code><em>dir</em>\conf</code> - Configuration
|
|
directory</li>
|
|
|
|
<li><code><em>dir</em>\logs</code> - Empty logging
|
|
directory</li>
|
|
|
|
<li><code><em>dir</em>\include</code> - C language header
|
|
files</li>
|
|
|
|
<li><code><em>dir</em>\lib</code> - Link library files</li>
|
|
</ul>
|
|
|
|
<section id="projectcomponents-warn">
|
|
|
|
<title>Warning about building Apache from the development tree</title>
|
|
|
|
<note>Note only the <code>.dsp</code> files are maintained between <code>release</code>
|
|
builds. The <code>.mak</code> files are NOT regenerated, due to the tremendous
|
|
waste of reviewer's time. Therefore, you cannot rely on the <code>NMAKE</code>
|
|
commands above to build revised <code>.dsp</code> project files unless you
|
|
then export all <code>.mak</code> files yourself from the project. This is
|
|
unnecessary if you build from within the Microsoft
|
|
Developer Studio environment.</note>
|
|
|
|
<note>Also note it is very worthwhile to build the <code>BuildBin</code>
|
|
target project (or the command line <code>_apacher</code> or
|
|
<code>_apached</code> target) prior to exporting the make files.
|
|
Many files are autogenerated in the build process. Only a full
|
|
build provides all of the dependent files required to build proper
|
|
dependency trees for correct build behavior.</note>
|
|
|
|
<p>In order to create distribution <code>.mak</code> files, always
|
|
review the generated <code>.mak</code> (or <code>.dep</code>)
|
|
dependencies for Platform SDK or other garbage, machine specific
|
|
includes. The <code>DevStudio\SharedIDE\bin\</code> (VC5) or
|
|
<code>DevStudio\Common\MSDev98\bin\</code> (VC6) directory contains
|
|
the <code>sysincl.dat</code> file, which must list all exceptions.
|
|
Update this file (including both forward and backslashed paths, such
|
|
as both <code>sys/time.h</code> and <code>sys\time.h</code>) to ignore
|
|
such dependencies. Including local-install paths in a distributed
|
|
<code>.mak</code> file will cause the build to fail completely. And
|
|
don't forget to run <code>srclib/apr/build/fixwin32mak.pl</code> in
|
|
order to fix absolute paths within the <code>.mak</code> files.</p>
|
|
|
|
</section>
|
|
|
|
</section>
|
|
|
|
</manualpage>
|
|
|