This page describes the process for building the Windows Native Connector for Windows. This is the native part of the APR/Native connector.
The instructions on this page reference specific versions of numerous tools and dependencies. The versions referenced on this page are known to work. Other versions may work. Where information is available on the suitability (or otherwise) of alternative versions it is provided. All installations use default settings unless explicitly noted otherwise. Non-default settings in italics are provided for completeness but are believed not to impact on the success of the build process. Non-default settings in standard type may, or may not, impact the success of the build process.
Hardware
Known working configurations include:
- VMware virtual machine
60GB HDD
2 processors
2GB RAM
No USB
No sound
Bridged networking
- Others TBD
Operating System
Known working configurations include:
- Windows 7
Static IP address
1600x1200 screen resolution
UTC timezone
- Install VMware Tools
Apply all updates
- Others TBD
Build tools
- Mladen's Custom Microsoft Compiler Toolkit Compilation
Git for windows (http://git-scm.com/) 1.9.4-20140611
https://github.com/mturk/cmsc (cb6be932c8c95a46262a64a89e68aae620dfdcee)
- Windows SDK
- No documentation
- No samples
- Complete set of developer tools
- Windows DDK
- Build environments
- Tools
Compile as per <cmsc-root>/tools/README.txt
Install Perl as per <cmsc-root>/tools/README.txt
- Windows SDK
TortoiseSVN (http://tortoisesvn.net/) 1.8.7 64-bit
- 7-Zip 9.20 64-bit
- JDK 1.7.0_71 64-bit
- Others TBD
Building
While tcnative itself needs to be built last, we unpack it first because there are some patches in the tcnative source distribution that will need to be applied to both APR and OpenSSL. Obtain the tcnative source from one off:
- the win32-src.zip source bundle for the version you wish to build;
- https://svn.apache.org/repos/asf/tomcat/native/
E.g.: To build the latest 1.2.x development build from trunk
c: cd \ svn co https://svn.apache.org/repos/asf/tomcat/native/trunk/ tomcat-native-1.2.x cd tomcat-native-1.2.x\native\srclib\apr
Unpack APR 1.5.1 (I haven't been able to get this to work with APR 1.5.2) source distribution in this directory (C:\tomcat-native-1.2.x\native\srclib\apr).
Apply the apr-enable-ipv6.patch. Note that the patch will apply but depending on exactly which revision you are working with an offset may be required of ~6 lines.
c:\cmsc\setenv.bat /x86
nmake -f NMAKEmakefile BUILD_CPU=x86 APR_DECLARE_STATIC=1 c:\cmsc\setenv.bat /x64 nmake -f NMAKEmakefile BUILD_CPU=x64 APR_DECLARE_STATIC=1 c:\cmsc\setenv.bat /i64 nmake -f NMAKEmakefile BUILD_CPU=i64 APR_DECLARE_STATIC=1 cd ..\openssl
Unpack the OpenSSL 1.0.2e source distribution in this directory (C:\tomcat-native-1.2.x\native\srclib\openssl).
Apply openssl-msvcrt.patch
c:\cmsc\setenv.bat /x86 perl Configure VC-WIN32 ms\do_nasm nmake -f ms\nt.mak move out32 out32-x86 c:\cmsc\setenv.bat /x64 perl Configure VC-WIN64A ms\do_win64a nmake -f ms\nt.mak clean nmake -f ms\nt.mak move out32 out32-x64 c:\cmsc\setenv.bat /i64 perl Configure VC-WIN64I ms\do_win64i nmake -f ms\nt.mak clean nmake -f ms\nt.mak move out32 out32-i64
Keeping the various libraries in versioned directories saves having to rebuild them next time if the version remains unchanged.
cd .. mkdir \deps-x86\apr-1.5.1\include mkdir \deps-x86\apr-1.5.1\lib mkdir \deps-x86\openssl-1.0.2e\include mkdir \deps-x86\openssl-1.0.2e\lib xcopy /E \deps-x86 \deps-x64\ xcopy /E \deps-x86 \deps-i64\ xcopy /E apr\include \deps-x86\apr-1.5.1\include\ xcopy /E apr\include \deps-x64\apr-1.5.1\include\ xcopy /E apr\include \deps-i64\apr-1.5.1\include\ copy apr\WINXP_X86_LIB_RELEASE\apr-1.lib \deps-x86\apr-1.5.1\lib copy apr\WINXP_X64_LIB_RELEASE\apr-1.lib \deps-x64\apr-1.5.1\lib copy apr\WINXP_I64_LIB_RELEASE\apr-1.lib \deps-i64\apr-1.5.1\lib xcopy /E openssl\inc32 \deps-x86\openssl-1.0.2e\include\ xcopy /E openssl\inc32 \deps-x64\openssl-1.0.2e\include\ xcopy /E openssl\inc32 \deps-i64\openssl-1.0.2e\include\ copy openssl\out32-x86\*.lib \deps-x86\openssl-1.0.2e\lib\ copy openssl\out32-x64\*.lib \deps-x64\openssl-1.0.2e\lib\ copy openssl\out32-i64\*.lib \deps-i64\openssl-1.0.2e\lib\ cd .. SET JAVA_HOME=C:\Program Files\Java\jdk1.7.0_71 c:\cmsc\setenv.bat /x86 nmake -f NMAKEMakefile WITH_APR=C:\deps-x86\apr-1.5.1 WITH_OPENSSL=C:\deps-x86\openssl-1.0.2e APR_DECLARE_STATIC=1 ENABLE_OCSP=1 move WINXP_X86_DLL_RELEASE WINXP_X86_OCSP_DLL_RELEASE nmake -f NMAKEMakefile WITH_APR=C:\deps-x86\apr-1.5.1 WITH_OPENSSL=C:\deps-x86\openssl-1.0.2e APR_DECLARE_STATIC=1 c:\cmsc\setenv.bat /x64 nmake -f NMAKEMakefile WITH_APR=C:\deps-x64\apr-1.5.1 WITH_OPENSSL=C:\deps-x64\openssl-1.0.2e APR_DECLARE_STATIC=1 ENABLE_OCSP=1 move WINXP_X64_DLL_RELEASE WINXP_X64_OCSP_DLL_RELEASE nmake -f NMAKEMakefile WITH_APR=C:\deps-x64\apr-1.5.1 WITH_OPENSSL=C:\deps-x64\openssl-1.0.2e APR_DECLARE_STATIC=1 c:\cmsc\setenv.bat /i64 nmake -f NMAKEMakefile WITH_APR=C:\deps-i64\apr-1.5.1 WITH_OPENSSL=C:\deps-i64\openssl-1.0.2e APR_DECLARE_STATIC=1 ENABLE_OCSP=1 move WINXP_I64_DLL_RELEASE WINXP_I64_OCSP_DLL_RELEASE nmake -f NMAKEMakefile WITH_APR=C:\deps-i64\apr-1.5.1 WITH_OPENSSL=C:\deps-i64\openssl-1.0.2e APR_DECLARE_STATIC=1
Tomcat Native Connector DLLs may then be found in C:\tomcat-native-1.2.x\native\WINXP_*_[OCSP_]DLL_RELEASE
Construct the binary distributions
set VER=1.2.0 mkdir tomcat-native-%VER%-win32-bin copy ..\LICENSE tomcat-native-%VER%-win32-bin\ copy ..\NOTICE tomcat-native-%VER%-win32-bin\ copy ..\README.txt tomcat-native-%VER%-win32-bin\ copy srclib\VERSIONS tomcat-native-%VER%-win32-bin\ mkdir tomcat-native-%VER%-win32-bin\bin mkdir tomcat-native-%VER%-win32-bin\bin\i64 mkdir tomcat-native-%VER%-win32-bin\bin\x64 copy srclib\openssl\out32-x86\openssl.exe tomcat-native-%VER%-win32-bin\bin xcopy /E tomcat-native-%VER%-win32-bin tomcat-native-%VER%-ocsp-win32-bin\ copy WINXP_X86_DLL_RELEASE\tcnative-1.dll tomcat-native-%VER%-win32-bin\bin copy WINXP_X86_OCSP_DLL_RELEASE\tcnative-1.dll tomcat-native-%VER%-ocsp-win32-bin\bin copy WINXP_X86_DLL_RELEASE\tcnative-1-src.pdb tomcat-native-%VER%-win32-bin\bin copy WINXP_X86_OCSP_DLL_RELEASE\tcnative-1-src.pdb tomcat-native-%VER%-ocsp-win32-bin\bin copy WINXP_I64_DLL_RELEASE\tcnative-1.dll tomcat-native-%VER%-win32-bin\bin\i64 copy WINXP_I64_OCSP_DLL_RELEASE\tcnative-1.dll tomcat-native-%VER%-ocsp-win32-bin\bin\i64 copy WINXP_X64_DLL_RELEASE\tcnative-1.dll tomcat-native-%VER%-win32-bin\bin\x64 copy WINXP_X64_OCSP_DLL_RELEASE\tcnative-1.dll tomcat-native-%VER%-ocsp-win32-bin\bin\x64 set PATH=%PATH%;%JAVA_HOME%\bin cd tomcat-native-%VER%-win32-bin jar -cMf ..\tomcat-native-%VER%-win32-bin.zip * cd ..\tomcat-native-%VER%-ocsp-win32-bin jar -cMf ..\tomcat-native-%VER%-ocsp-win32-bin.zip *
The Windows binary distributions may then be found in C:\tomcat-native-1.2.x\native\
These need to be signed and hashed before uploading for the release vote.
Beware of typos in the name and contents of hash files for OCSP binaries ("ocsp" vs "oscp"). Such typos happened.
A correct example:
tomcat-native-1.1.32-ocsp-win32-bin.zip.md5
0b0e1e4c77b9b7051fc2c751b70d2880 *tomcat-native-1.1.32-ocsp-win32-bin.zip
tomcat-native-1.1.32-ocsp-win32-bin.zip.sha1
b47f96dd3153d002a529e881b6b8f524cd6e321c *tomcat-native-1.1.32-ocsp-win32-bin.zip