Building Apache httpd with the Microsoft Windows 2008 SDK

Windows SDK for Windows Server 2008 and .NET Framework 3.5 contains a command-line compiler suitable for building Apache 2.2.16 on Windows XP or later.

Despite the "2008" name - this freely available SDK is appropriate to use on Windows Server 2003, Windows Server 2008, Windows Vista, and Windows XP.

This SDK contains the Visual C++ 2008 command-line compiler (a.k.a. VC9), the MASM v9.0 assembler, and the Windows libraries needed to build and run Apache.

These are the steps to build Apache 2.2.16 with OpenSSL 0.9.8o (Version 0.9.8 lower-case letter "O") and Zlib 1.2.5 using the VC9 command-line compiler included in this Windows SDK:

Tools Needed to Build httpd

Install the Windows SDK for Windows Server 2008 and .NET Framework 3.5 (approx: 450mb)

Windows 2008 SDK

http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF

Install Perl and several GNU utilities: tar, gzip, wget, and awk. These are tools which are needed to build Apache:

Perl

Any of the Windows binaries at

http://www.perl.org/get.html

will work to build Apache httpd

GNU tar

http://gnuwin32.sourceforge.net/packages/gtar.htm

GNU gzip

http://gnuwin32.sourceforge.net/packages/gzip.htm

GNU wget

http://gnuwin32.sourceforge.net/packages/wget.htm

GNU gawk (awk)

http://gnuwin32.sourceforge.net/packages/gawk.htm

Setup the build environment

Open a command window and set up the development environment:

"C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"

Add Perl and the GNU utilities to your PATH environment variable:

PATH=%PATH%;C:\Perl\bin;C:\Program Files\GnuWin32\bin

Download the source code

Download and extract the Apache httpd version 2.2.16 Windows source (not the Unix source)

WGET http://www.apache.org/dist/httpd/httpd-2.2.16-win32-src.zip

Open httpd-2.2.16-win32-src.zip and extract it, creating a httpd-2.2.16 directory

Download and extract the Zlib version 1.2.5 source into httpd-2.2.16\srclib\zlib

CD   httpd-2.2.16\srclib
WGET http://www.zlib.net/zlib-1.2.5.tar.gz
GZIP -d  zlib-1.2.5.tar.gz
TAR  xf  zlib-1.2.5.tar
RENAME   zlib-1.2.5   zlib

Download and extract the OpenSSL version 0.9.8o source, into httpd-2.2.16\srclib\openssl

CD   httpd-2.2.16\srclib
WGET http://www.openssl.org/source/openssl-0.9.8o.tar.gz
GZIP -d  openssl-0.9.8o.tar.gz
TAR  xf  openssl-0.9.8o.tar
RENAME   openssl-0.9.8o   openssl

Build Zlib

CD  httpd-2.2.16\srclib\zlib
ML /coff /Zi /c contrib\masmx86\inffas32.asm
ML /coff /Zi /c contrib\masmx86\match686.asm
NMAKE -f win32\Makefile.msc  LOC="-D_CRT_SECURE_NO_DEPRECATE /wd4996 -DASMV -DASMINF" OBJA="inffas32.obj match686.obj"
MT -manifest zlib1.dll.manifest -outputresource:zlib1.dll;2

Build OpenSSL

CD  httpd-2.2.16\srclib\openssl
PERL Configure VC-WIN32  enable-camellia  disable-idea
ms\do_masm
NMAKE -f ms\ntdll.mak

Note: The IDEA algorithm is disabled because it is built by default with OpenSSL 0.9.8. The IDEA algorithm is patented for commercial use until January, 2012. Camellia, and the other OpenSSL 0.9.8 algorithms which are built by default, are not (or are no longer) encumbered by patents.

Note: There remain restrictions and prohibitions on the use and distribution of strong cryptography in some parts of the world. OpenSSL includes strong cryptography which may be restricted by local export regulations or other laws.

Build and install Apache httpd

CD  httpd-2.2.16
NMAKE -f Makefile.win installr

This installs Apache 2.2.16 into C:\Apache22. You can add INSTDIR=directory to the NMAKE command to choose a different installation directory. For example: NMAKE -f Makefile.win INSTDIR=D:\Apache2 installr

If you copy Apache to another machine, remember to install the Microsoft Visual C++ 2008 Redistributable Package before running it.

Including Database Drivers with Apache httpd

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 INCLUDE=%INCLUDE%;C:\MySQL\include;C:\SQLite
SET LIB=%LIB%;C:\MySQL\lib\opt;C:\SQLite
NMAKE -f Makefile.win  INSTDIR=D:\Apache2  DBD_LIST="odbc mysql sqlite3"  installr