Keep Server Online
  
If you find the Apache Lounge, the downloads and overall help useful, please express your satisfaction with a donation.
  
or
  
 
  
A donation makes a contribution towards the costs, the time and effort that's going in this site and building.
  
Thank You! Steffen
  
Your donations will help to keep this site alive and well, and continuing building binaries. Apache Lounge is not sponsored.
 |    |   
 | 
     Topic: HOWTO: Building Apache 2.4.x for Windows x64 using CMake | 
 |   
| Author | 
  | 
 
idblew
 
 
  Joined: 14 Nov 2014 Posts: 10 Location: Melbourne, Australia
  | 
 Posted: Fri 27 Mar '15 2:40    Post subject: HOWTO: Building Apache 2.4.x for Windows x64 using CMake | 
     | 
 
  | 
 
An updated version you can find at https://www.apachelounge.com/viewtopic.php?p=39755
 
 
 
Having struggled to get a build working using the Visual Studio 2013 IDE, and not wanting to rely on the WIN32 sources kindly provided by Gregg, I set about defining a process which worked using stock source packages and with minimal fuss.
 
 
Please see below the process I now use, based on the efforts of WangMaster in http://www.apachelounge.com/viewtopic.php?t=6421
 
 
Software Requirements:
 
Visual Studio 2013 (I use the Community Edition)
 
ActivePerl for Windows (64-bit, currently using 5.20.1.2000)
 
CMake for Windows (currently using 3.1.3)
 
GNU Awk for Windows (currently using 3.1.6-1)
 
Netwide Assembler (NASM) (currently using 2.11.06) 
 
Source Code Packages (I don't use ZLIB for Apache or OpenSSL, or LUA/LIBXML2/EXPAT, therefore these are not included in the process):
 
httpd-2.4.12.tar.gz
 
apr-1.5.1.tar.gz
 
apr-util.1.5.4.tar.gz
 
openssl-1.0.2a.tar.gz (yes it works with 1.0.2a!)
 
pcre-8.36.tar.gz
 
 
 
Process:
 
- Extract all packages into their separate folders in your preferred source tree (e.g. C:\Development\Apache24\src)
 
 
 - Create custom build folders for Apache, PCRE, APR and APR-Util in your preferred build folder (e.g. C:\Development\Apache24\build)
 
 
 - Your folder structure should resemble the below:
 
 
 
  	  | Code: | 	 		  C:\Development
 
   └ Apache24
 
      ├ src
 
      │   ├ apr-1.5.1
 
      │   ├ apr-util-1.5.4
 
      │   ├ httpd-2.4.12
 
      │   ├ openssl-1.0.2a
 
      │   └ pcre-8.36
 
      │
 
      └ build
 
         ├ apr
 
         ├ apr-util
 
         ├ httpd
 
         └ pcre | 	  
 
 
Make the following file changes so that ApacheMonitor gets built (without the Manifest error):
 
 
C:\Development\Apache24\src\httpd-2.4.12\CMakeLists.txt
 
Uncomment the section to build the ApacheMonitor utility (lines 769-775)
 
  	  | Code: | 	 		  # getting duplicate manifest error with ApacheMonitor
 
ADD_EXECUTABLE(ApacheMonitor support/win32/ApacheMonitor.c support/win32/ApacheMonitor.rc)
 
SET(install_targets ${install_targets} ApacheMonitor)
 
SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/ApacheMonitor.pdb)
 
SET_TARGET_PROPERTIES(ApacheMonitor PROPERTIES WIN32_EXECUTABLE TRUE)
 
SET_TARGET_PROPERTIES(ApacheMonitor PROPERTIES COMPILE_FLAGS "-DAPP_FILE -DLONG_NAME=ApacheMonitor -DBIN_NAME=ApacheMonitor.exe / ${EXTRA_COMPILE_FLAGS}")
 
TARGET_LINK_LIBRARIES(ApacheMonitor ${EXTRA_LIBS} ${HTTPD_SYSTEM_LIBS} comctl32 wtsapi32) | 	  
 
C:\Development\Apache24\src\httpd-2.4.12\support\win32\ApacheMonitor.rc
 
Comment out the line that includes ApacheMonitor.manifest (line 29)
 
 	  | Code: | 	 		  | //CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST  "ApacheMonitor.manifest" | 	  
 
 
 
From the Start menu, launch the VS2013 x64 Native Tools Command Prompt found under Visual Studio 2013->Visual Studio Tools.  Alternatively from a Windows Command Prompt run the following command:
 
 
 	  | Code: | 	 		  | call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" amd64 | 	  
 
 
Navigate into the build sub-folder for PCRE, run CMAKE to generate a suitable Makefile, then compile and install
 
 
 	  | Code: | 	 		  cd /D C:\Development\Apache24\build\pcre
 
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=C:\Apache24 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_SHARED_LIBS=ON -DPCRE_BUILD_TESTS=OFF -DPCRE_BUILD_PCRECPP=OFF -DPCRE_BUILD_PCREGREP=OFF -DPCRE_SUPPORT_PCREGREP_JIT=OFF -DPCRE_SUPPORT_UTF=ON -DPCRE_SUPPORT_UNICODE_PROPERTIES=ON -DPCRE_NEWLINE=CRLF -DINSTALL_MSVC_PDB=OFF ..\..\src\pcre-8.36
 
nmake
 
nmake install | 	  
 
 
Navigate into the source sub-folder for OpenSSL, configure the build environment for compiling with NASM, then compile and install
 
 
 	  | Code: | 	 		  cd /D C:\Development\Apache24\src\openssl-1.0.2a
 
perl Configure VC-WIN64A --prefix=C:\Apache24 --openssldir=C:\Apache24\conf enable-camellia no-idea no-mdc2 no-ssl2 no-ssl3 no-zlib
 
ms\do_win64a.bat
 
nmake /f ms\ntdll.mak
 
nmake /f ms\ntdll.mak install | 	  
 
 
Navigate into the build sub-folder for APR, run CMAKE to generate a suitable Makefile, then compile and install
 
 
 	  | Code: | 	 		  cd /D C:\Development\Apache24\build\apr
 
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=C:\Apache24 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DMIN_WINDOWS_VER=0x0600 -DAPR_HAVE_IPV6=ON -DAPR_INSTALL_PRIVATE_H=ON -DAPR_BUILD_TESTAPR=OFF -DINSTALL_PDB=OFF ..\..\src\apr-1.5.1
 
nmake
 
nmake install | 	  
 
 
Navigate into the build sub-folder for APR-Util, run CMAKE to generate a suitable Makefile, then compile and install
 
 
 	  | Code: | 	 		  cd /D C:\Development\Apache24\build\apr-util
 
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=C:\Apache24 -DOPENSSL_ROOT_DIR=C:\Apache24 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DAPU_HAVE_CRYPTO=ON -DAPR_BUILD_TESTAPR=OFF -DINSTALL_PDB=OFF ..\..\src\apr-util-1.5.4
 
nmake
 
nmake install | 	  
 
 
Navigate into the build sub-folder for Apache, run CMAKE to generate a suitable Makefile, then compile and install
 
 
 	  | Code: | 	 		  cd /D C:\Development\Apache24\build\httpd
 
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=C:\Apache24 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_MODULES=i -DINSTALL_PDB=OFF ..\..\src\httpd-2.4.12
 
nmake
 
nmake install | 	  
 
 
Finally, confirm everything is working
 
 
 	  | Code: | 	 		  cd /D C:\Apache24\bin
 
openssl version
 
httpd -V | 	  
 
 
I hope that others who have struggled find this useful.  Please feel free to suggest any improvements to the process.
 
 
Ian | 
 
  | 
 
| Back to top | 
 | 
 
idblew
 
 
  Joined: 14 Nov 2014 Posts: 10 Location: Melbourne, Australia
  | 
 Posted: Fri 27 Mar '15 9:53    Post subject:  | 
     | 
 
  | 
 
If you also require the various text files in the folder C:\Apache24 for completeness, bearing in mind the CMAKE routine omits these, you can use the following batch file (currently only supports OpenSSL and PCRE).
 
 
 	  | Code: | 	 		  @ECHO OFF
 
 
set INSTALLDIR=C:\Apache24
 
set SRCDIR=C:\Development\Apache24\src
 
echo.
 
 
:: Get Apache Version
 
for /f "tokens=5" %%a in ('%INSTALLDIR%\bin\httpd -v ^| find "version"') do ( set APACHEVER=%%a )
 
for /f "tokens=2 delims=^/" %%a in ('echo %APACHEVER:~0,-1%') do ( set APACHEVER=%%a )
 
set APACHEVER=%APACHEVER:~0,-1%
 
echo Apache Version: %APACHEVER%
 
 
:: Get OpenSSL Version
 
for /f "tokens=2" %%a in ('%INSTALLDIR%\bin\openssl version') do ( SET OPENSSLVER=%%a )
 
set OPENSSLVER=%OPENSSLVER:~0,-1%
 
echo OpenSSL Version: %OPENSSLVER%
 
 
:: Get PCRE Version
 
for /f "tokens=3" %%a in ('findstr PCRE_MAJOR %INSTALLDIR%\include\pcre.h') do ( SET PCREMAJORVER=%%a )
 
for /f "tokens=3" %%a in ('findstr PCRE_MINOR %INSTALLDIR%\include\pcre.h') do ( SET PCREMINORVER=%%a )
 
set PCREVER=%PCREMAJORVER:~0,-1%.%PCREMINORVER:~0,-1%
 
echo PCRE Version: %PCREVER%
 
 
echo.
 
 
:: Copy ABOUT_APACHE.txt
 
echo ABOUT_APACHE.txt
 
copy %SRCDIR%\httpd-%APACHEVER%\ABOUT_APACHE %INSTALLDIR%\ABOUT_APACHE.txt > nul
 
 
:: Copy CHANGES.txt
 
echo CHANGES.txt
 
copy %SRCDIR%\httpd-%APACHEVER%\CHANGES %INSTALLDIR%\CHANGES.txt > nul
 
 
:: Copy INSTALL.txt
 
echo INSTALL.txt
 
copy %SRCDIR%\httpd-%APACHEVER%\INSTALL %INSTALLDIR%\INSTALL.txt > nul
 
 
:: Copy README.txt
 
echo README.txt
 
copy %SRCDIR%\httpd-%APACHEVER%\README %INSTALLDIR%\README.txt > nul
 
 
:: Copy/Update NOTICE.txt
 
echo NOTICE.txt
 
copy %SRCDIR%\httpd-%APACHEVER%\NOTICE %INSTALLDIR%\NOTICE.txt > nul
 
echo. >> %INSTALLDIR%\NOTICE.txt
 
echo Regular expression support is provided by the PCRE library package, >> %INSTALLDIR%\NOTICE.txt
 
echo which is open source software, written by Philip Hazel, and copyright >> %INSTALLDIR%\NOTICE.txt
 
echo by the University of Cambridge, England. The original software is >> %INSTALLDIR%\NOTICE.txt
 
echo available from >> %INSTALLDIR%\NOTICE.txt
 
echo   ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ >> %INSTALLDIR%\NOTICE.txt
 
echo. >> %INSTALLDIR%\NOTICE.txt
 
echo This binary distribution includes cryptographic software written by >> %INSTALLDIR%\NOTICE.txt
 
echo Eric Young (eay@cryptsoft.com), software written by Tim Hudson >> %INSTALLDIR%\NOTICE.txt
 
echo (tjh@cryptsoft.com), and software developed by the OpenSSL Project >> %INSTALLDIR%\NOTICE.txt
 
echo for use in the OpenSSL Toolkit ^<http://www.openssl.org/^>. >> %INSTALLDIR%\NOTICE.txt
 
 
:: Copy/Update LICENCE.txt
 
echo LICENCE.txt
 
copy %SRCDIR%\httpd-%APACHEVER%\LICENSE %INSTALLDIR%\LICENSE.txt > nul
 
echo. >> %INSTALLDIR%\LICENSE.txt
 
echo For the pcre.dll component: >> %INSTALLDIR%\LICENSE.txt
 
echo. >> %INSTALLDIR%\LICENSE.txt
 
findstr /B /V End %SRCDIR%\pcre-%PCREVER%\LICENCE >> %INSTALLDIR%\LICENSE.txt
 
echo END OF PCRE LICENSE >> %INSTALLDIR%\LICENSE.txt
 
echo. >> %INSTALLDIR%\LICENSE.txt
 
echo For the libeay32.dll, ssleay32.dll and openssl.exe components: >> %INSTALLDIR%\LICENSE.txt
 
echo. >> %INSTALLDIR%\LICENSE.txt
 
type %SRCDIR%\openssl-%OPENSSLVER%\LICENSE >> %INSTALLDIR%\LICENSE.txt
 
 
:: Create OPENSSL-NEWS.txt
 
echo OPENSSL-NEWS.txt
 
echo. > %INSTALLDIR%\OPENSSL-NEWS.txt
 
echo  Apache HTTP Server 2.4 Limited OpenSSL Distribution >> %INSTALLDIR%\OPENSSL-NEWS.txt
 
echo. >> %INSTALLDIR%\OPENSSL-NEWS.txt
 
echo  This binary distribution includes the minimal components of OpenSSL required >> %INSTALLDIR%\OPENSSL-NEWS.txt
 
echo  to support mod_ssl for Apache HTTP Server version 2.4 (details are listed >> %INSTALLDIR%\OPENSSL-NEWS.txt
 
echo  in OPENSSL-README.txt.)  For the complete list of CHANGES to this and later >> %INSTALLDIR%\OPENSSL-NEWS.txt
 
echo  versions of OpenSSL, please refer to the definative source, >> %INSTALLDIR%\OPENSSL-NEWS.txt
 
echo  ^<http://www.openssl.org/news/changelog.html^>, or see the CHANGES file in the >> %INSTALLDIR%\OPENSSL-NEWS.txt
 
echo  full binary or source distribution package from ^<http://www.openssl.org/^>. >> %INSTALLDIR%\OPENSSL-NEWS.txt
 
echo. >> %INSTALLDIR%\OPENSSL-NEWS.txt
 
echo  These OpenSSL binaries were built for distribution from the U.S. without >> %INSTALLDIR%\OPENSSL-NEWS.txt
 
echo  support for the patented encryption methods IDEA, MDC-2 or RC5. >> %INSTALLDIR%\OPENSSL-NEWS.txt
 
echo. >> %INSTALLDIR%\OPENSSL-NEWS.txt
 
echo -------------------------------------------------------------------------------- >> %INSTALLDIR%\OPENSSL-NEWS.txt
 
echo.>> %INSTALLDIR%\OPENSSL-NEWS.txt
 
copy %INSTALLDIR%\OPENSSL-NEWS.txt + %SRCDIR%\openssl-%OPENSSLVER%\NEWS %INSTALLDIR%\OPENSSL-NEWS.txt > nul
 
 
:: Create OPENSSL-README.txt
 
echo OPENSSL-README.txt
 
echo. > %INSTALLDIR%\OPENSSL-README.txt
 
echo  Apache HTTP Server 2.4 Limited OpenSSL Distribution >> %INSTALLDIR%\OPENSSL-README.txt
 
echo. >> %INSTALLDIR%\OPENSSL-README.txt
 
echo  This binary installation of OpenSSL is a limited distribution of the >> %INSTALLDIR%\OPENSSL-README.txt
 
echo  files derived from the OpenSSL project: >> %INSTALLDIR%\OPENSSL-README.txt
 
echo. >> %INSTALLDIR%\OPENSSL-README.txt
 
echo    LICENSE.txt (includes openssl LICENSE) >> %INSTALLDIR%\OPENSSL-README.txt
 
echo    OPENSSL-NEWS.txt >> %INSTALLDIR%\OPENSSL-README.txt
 
echo    OPENSSL-README.txt >> %INSTALLDIR%\OPENSSL-README.txt
 
echo    conf\openssl.cnf >> %INSTALLDIR%\OPENSSL-README.txt
 
echo    bin\libeay32.dll >> %INSTALLDIR%\OPENSSL-README.txt
 
echo    bin\ssleay32.dll >> %INSTALLDIR%\OPENSSL-README.txt
 
echo    bin\openssl.exe >> %INSTALLDIR%\OPENSSL-README.txt
 
echo. >> %INSTALLDIR%\OPENSSL-README.txt
 
echo  These are the minimal libraries and tools required to use mod_ssl as >> %INSTALLDIR%\OPENSSL-README.txt
 
echo  distributed with Apache HTTP Server version 2.4.  No library link files, >> %INSTALLDIR%\OPENSSL-README.txt
 
echo  headers or sources are distributed with this binary distribution.  Please >> %INSTALLDIR%\OPENSSL-README.txt
 
echo  refer to the ^<http://www.openssl.org/^> site for complete source or binary >> %INSTALLDIR%\OPENSSL-README.txt
 
echo  distributions. >> %INSTALLDIR%\OPENSSL-README.txt
 
echo. >> %INSTALLDIR%\OPENSSL-README.txt
 
echo  These OpenSSL binaries were built for distribution from the U.S. without >> %INSTALLDIR%\OPENSSL-README.txt
 
echo  support for the patented encryption methods IDEA, MDC-2 or RC5. >> %INSTALLDIR%\OPENSSL-README.txt
 
echo. >> %INSTALLDIR%\OPENSSL-README.txt
 
echo  The Apache HTTP Project only supports the binary distribution of these files >> %INSTALLDIR%\OPENSSL-README.txt
 
echo  and development of the mod_ssl module.  We cannot provide support assistance >> %INSTALLDIR%\OPENSSL-README.txt
 
echo  for using or configuring the OpenSSL package or these modules.  Please refer >> %INSTALLDIR%\OPENSSL-README.txt
 
echo  all installation and configuration questions to the appropriate forum, >> %INSTALLDIR%\OPENSSL-README.txt
 
echo  such as the user supported lists, ^<http://httpd.apache.org/userslist.html^> >> %INSTALLDIR%\OPENSSL-README.txt
 
echo  the Apache HTTP Server user's list or ^<http://www.openssl.org/support/^> the >> %INSTALLDIR%\OPENSSL-README.txt
 
echo  OpenSSL support page. >> %INSTALLDIR%\OPENSSL-README.txt
 
echo. >> %INSTALLDIR%\OPENSSL-README.txt
 
echo -------------------------------------------------------------------------------- >> %INSTALLDIR%\OPENSSL-README.txt
 
echo. >> %INSTALLDIR%\OPENSSL-README.txt
 
copy OPENSSL-README.txt + %SRCDIR%\openssl-%OPENSSLVER%\README %INSTALLDIR%\OPENSSL-README.txt > nul
 
 | 	  
 
 
I haven't put in any validation or error handling, but it's a start.   | 
 
  | 
 
| Back to top | 
 | 
 
fwagner
 
 
  Joined: 21 Aug 2008 Posts: 3
 
  | 
 Posted: Tue 28 Apr '15 9:18    Post subject: Re: HOWTO: Building Apache 2.4.x for Windows x64 using CMake | 
     | 
 
  | 
 
Hello,
 
 
thank you for your howto. Based in your work I have created a powershell build script that automatically download the required tools and sources.
 
 
you can find the project on bitbucket:
 
http://bitbucket.org/wagnersolutions/apache-2.4-build-windows
 
 
Best Regards,
 
Frank Wagner | 
 
  | 
 
| Back to top | 
 | 
 
skmyna
 
 
  Joined: 03 Oct 2015 Posts: 1 Location: India
  | 
 | 
 
| Back to top | 
 | 
 
satsharm
 
 
  Joined: 27 Jun 2017 Posts: 3 Location: India,Bangalore
  | 
 Posted: Tue 27 Jun '17 12:52    Post subject: Apache Compilation for Windows x64 | 
     | 
 
  | 
 
I have dependency on the below modules for building Apache 2.4.x windows x64 using the Visual Studio 2013 IDE:
 
 
pcre
 
lua
 
openssl
 
zlib
 
libxml2
 
nghttp2
 
httpd
 
apr
 
apr-util
 
apr-iconv
 
 
Please help me to compile the above modules and build the Apache.
 
 
Best Regards,
 
Satish | 
 
  | 
 
| Back to top | 
 | 
 
 
 
 
 | 
 
 
 |  
 
 |  
  |   
 |