Building Apache 2.2 on Windows

Posted: 2013-12-17 23:03:30

Building Apache 2.2 on/for Windows

Step by step instructions for building Apache 2.2.x with mod_deflate and mod_ssl on Windows using VS.NET 2008 (VC9 to match official PHP 5.3 builds).


1. Download Apache’s httpd-2.2.26 source code and extract as C:\build\httpd-2.2.26

2. Download zlib-1.2.8 source code and openssl-0.9.8y source code and extract into httpd-2.2.26\srclib

3. Rename httpd-2.2.26\srclib\zlib-1.2.8\ and httpd-2.2.26\srclib\openssl-0.9.8y\ to zlib\ and openssl\ (remove the version info from the directory name).

4. Download source code and extract into httpd-2.2.26\srclib

5. Rename httpd-2.2.26\srclib\apr-iconv-1.2.1\ to apr-iconv\ (remove the version info from the directory name).

Build Environment

The build requires the following tools to be installed, and to be in your system’s %PATH% (environmental variable):

1. VS.NET 2008 and Windows SDK 6.1
2. perl – C:\build\Perl
3. nasm – C:\build\nasm
4. Specific GnuWin32 tools: awk (“gawk” renamed to “awk”), bison, flex, sed – C:\build\gnuwin32

Build Apache

1. Open Windows SDK 6.1 cmd.exe (*using 6.1 rather than 7.1 to match official PHP build)
2. SetEnv.cmd /Release /XP /X86
3. “C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat” (*not needed since we are using the SDK’s environment cmd.exe window)
4. set path=%path%;C:\build\gnuwin32;C:\build\nasm
5. + set path variable to include location to perl.exe

6. CD C:\build\httpd-2.2.26
7. perl srclib\apr\build\ (convert line-endings from Linux to Windows style)
8. perl srclib\apr\build\ -2005 (convert DSP files from VC6 to VS2005 format)
9. Open Apache.dsw with VS.NET 2008 to convert ALL to current format (from 2005 to 2008) and to create some *.vcproj files. Then File > Save All. Exit.

10. CD C:\build\httpd-2.2.26\srclib\zlib

11. (*Note – taken from contrib\masmx86\bld_ml32.bat)
(*Note – builds ASM implementations of the functions longest_match() and inflate_fast())
ml /coff /Zi /c /Flmatch686.lst contrib\masmx86\match686.asm
ml /coff /Zi /c /Flinffas32.lst contrib\masmx86\inffas32.asm

12. (*Note – _CRT_SECURE_NO_DEPRECATE and /wd4996 will disable deprecation warnings)
NMAKE -f win32\Makefile.msc LOC=”-D_CRT_SECURE_NO_DEPRECATE /wd4996 -DASMV -DASMINF” OBJA=”match686.obj inffas32.obj”
MT -manifest zlib1.dll.manifest -outputresource:zlib1.dll;2

13. CD C:\build\httpd-2.2.26\srclib\openssl

14. (*Note – IDEA cipher in OpenSSL is patented for commercial use)
(*Note – NASM is preferred over MASM for building OpenSSL)
PERL Configure VC-WIN32 –openssldir=/Wamp/Apache/bin enable-camellia disable-idea
NMAKE -f ms\ntdll.mak

15. CD C:\build\httpd-2.2.26

16. NMAKE -f INSTDIR=C:\Wamp\Apache installr
(*make sure this folder does not exist – that nothing is not already installed there)

17. CD C:\WampDeveloper\Components

18. (*Note – to preserve all PDB files into another folder – 300+ files)
C:\Wamp>xcopy /S Apache\*.pdb Apache-2.2.26-pdb-files\

19. CD C:\Wamp\Apache

20. del /s *.pdb

21. move conf\openssl.cnf bin\

If you are going to run PHP via FCGI (NTS releases of PHP), build mod_fcgid against the above installed Apache package (against C:\Wamp\Apache; not C:\build\httpd-2.2.26).

1. set APACHE2_HOME=C:/Wamp/Apache
2. devenv /useenv mod_fcgid.dsw (*to generate VC6 to VS.NET sln file)
3. Convert ALL. Then File > Save All.
4. Build > Configuration Manager. Solution – Release. Build Solution.
5. Copy C:\build\mod_fcgid-2.3.7\modules\fcgid\Release\ into C:\Wamp\Apache\modules\ dir.
6. Copy C:\build\mod_fcgid-2.3.7\modules\fcgid\Release\mod_fcgid.pdb into C:\Wamp\Apache-2.2.26-pdb-files\modules\ dir.

Extra Database Drivers for Apache

The ODBC driver is included by default on Windows. To add additional database drivers, first ensure that your LIB and INCLUDE environment variables include the directories which contain the .lib and .h files for your database. Add a DBD_LIST to your NMAKE command, which should be be set to a space-separated list of the desired drivers. For example - if MySQL is in C:\MySQL and SQLite is in C:\SQLite: 

SET LIB=%LIB%;C:\MySQL\lib\opt;C:\SQLite
NMAKE -f  INSTDIR=C:\Wamp\Apache DBD_LIST="odbc mysql sqlite3"  installr