THRIFT-3973: Provide some tools to make it easier to build thrift C++ on Windows
Client: C++
This closes #1162
diff --git a/build/wincpp/build-thrift.bat b/build/wincpp/build-thrift.bat
new file mode 100644
index 0000000..ba3e476
--- /dev/null
+++ b/build/wincpp/build-thrift.bat
@@ -0,0 +1,164 @@
+::
+:: Licensed 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.
+::
+
+::
+:: Generates a Visual Studio solution for thrift and then builds it.
+:: Assumes third party libraries have been built or placed already.
+::
+:: Open a Visual Studio Command Prompt of your choosing and then
+:: run this script.
+::
+:: Normally the script will run cmake to generate a solution, then
+:: perform a build, then run tests on the complete thrift library
+:: in release mode.
+::
+:: Flags you can use to change this behavior:
+::
+:: /DEBUG - debug instead of release
+:: /IDE - launch Visual Studio with a path set
+:: up correctly to run tests instead of
+:: performing any other actions, i.e.
+:: implies setting the next three flags
+:: /NOGENERATE - skip cmake generation - useful if you
+:: have already generated a solution and just
+:: want to build
+:: /NOBUILD - skip cmake build - useful if you just
+:: want to generate a solution
+:: /NOTEST - skip ctest execution
+::
+
+@ECHO OFF
+SETLOCAL EnableDelayedExpansion
+
+:: Sets variables for third party versions used in build
+CALL scripts\tpversions.bat || EXIT /B
+
+IF NOT DEFINED PACKAGE_NAME SET PACKAGE_NAME=thrift
+IF NOT DEFINED PACKAGE_VERSION SET PACKAGE_VERSION=dev
+IF NOT DEFINED SOURCE_DIR SET SOURCEDIR=%~dp0%PACKAGE_NAME%
+IF NOT DEFINED WIN3P_ROOT SET WIN3P_ROOT=%~dp0thirdparty
+
+:: Set COMPILER to (vc100 - vc140) depending on the current environment
+CALL scripts\cl_setcompiler.bat || EXIT /B
+
+:: Set ARCH to either win32 or x64 depending on the current environment
+CALL scripts\cl_setarch.bat || EXIT /B
+
+:: Set GENERATOR for CMake depending on the current environment
+CALL scripts\cl_setgenerator.bat || EXIT /B
+
+:: Defaults
+
+IF NOT DEFINED BUILDTYPE SET BUILDTYPE=Release
+SET OPT_IDE=0
+SET OPT_BUILD=1
+SET OPT_GENERATE=1
+SET OPT_TEST=1
+
+:: Apply Flags
+
+IF /I "%1" == "/DEBUG" SET BUILDTYPE=Debug
+IF /I "%2" == "/DEBUG" SET BUILDTYPE=Debug
+IF /I "%3" == "/DEBUG" SET BUILDTYPE=Debug
+IF /I "%1" == "/IDE" SET OPT_IDE=1
+IF /I "%2" == "/IDE" SET OPT_IDE=1
+IF /I "%3" == "/IDE" SET OPT_IDE=1
+IF /I "%1" == "/NOBUILD" SET OPT_BUILD=0
+IF /I "%2" == "/NOBUILD" SET OPT_BUILD=0
+IF /I "%3" == "/NOBUILD" SET OPT_BUILD=0
+IF /I "%1" == "/NOGENERATE" SET OPT_GENERATE=0
+IF /I "%2" == "/NOGENERATE" SET OPT_GENERATE=0
+IF /I "%3" == "/NOGENERATE" SET OPT_GENERATE=0
+IF /I "%1" == "/NOTEST" SET OPT_TEST=0
+IF /I "%2" == "/NOTEST" SET OPT_TEST=0
+IF /I "%3" == "/NOTEST" SET OPT_TEST=0
+
+IF %OPT_IDE% == 1 (
+ SET OPT_GENERATE=0
+ SET OPT_BUILD=0
+ SET OPT_TEST=0
+)
+
+ SET BUILDDIR=%~dp0build\%PACKAGE_NAME%\%PACKAGE_VERSION%\%COMPILER%\%ARCH%\
+ SET OUTDIR=%~dp0dist\%PACKAGE_NAME%-%PACKAGE_VERSION%\%COMPILER%\%ARCH%\%BUILDTYPE%\
+ SET BOOST_LIBDIR=lib%ARCH:~-2,2%-msvc-%COMPILER:~-3,2%.0
+ IF "%BUILDTYPE%" == "Debug" (SET ZLIB_STATIC_SUFFIX=d)
+
+ ECHO/
+ ECHO =========================================================================
+ ECHO Configuration: %PACKAGE_NAME% %PACKAGE_VERSION% %COMPILER%:%ARCH%:%BUILDTYPE% "%GENERATOR%"
+IF DEFINED COMPILERONLY (
+ ECHO COMPILER ONLY
+)
+ ECHO Build Directory: %BUILDDIR%
+ ECHO Install Directory: %OUTDIR%
+ ECHO Source Directory: %SOURCEDIR%
+ ECHO =========================================================================
+ ECHO/
+
+IF %OPT_IDE% == 1 (
+
+ CALL :SETRUNPATH || EXIT /B
+ CALL DEVENV "!BUILDDIR!Apache Thrift.sln" || EXIT /B
+ EXIT /B
+
+)
+
+ MKDIR "%BUILDDIR%"
+ CD "%BUILDDIR%" || EXIT /B
+
+IF %OPT_GENERATE% == 1 (
+
+ CMAKE.EXE %~dp0thrift ^
+ -G"%GENERATOR%" ^
+ -DBISON_EXECUTABLE=%WIN3P_ROOT%\dist\winflexbison\win_bison.exe ^
+ -DBOOST_ROOT=%WIN3P_ROOT%\dist\boost_%TP_BOOST_VERSION% ^
+ -DBOOST_LIBRARYDIR=%WIN3P_ROOT%\dist\boost_%TP_BOOST_VERSION%\%BOOST_LIBDIR% ^
+ -DCMAKE_INSTALL_PREFIX=%OUTDIR% ^
+ -DCMAKE_BUILD_TYPE=%BUILDTYPE% ^
+ -DFLEX_EXECUTABLE=%WIN3P_ROOT%\dist\winflexbison\win_flex.exe ^
+ -DINTTYPES_ROOT=%WIN3P_ROOT%\dist\msinttypes ^
+ -DLIBEVENT_ROOT=%WIN3P_ROOT%\dist\libevent-%TP_LIBEVENT_VERSION%\%COMPILER%\%ARCH%\%BUILDTYPE% ^
+ -DOPENSSL_ROOT_DIR=%WIN3P_ROOT%\dist\openssl-%TP_OPENSSL_VERSION%\%COMPILER%\%ARCH%\%BUILDTYPE%\dynamic ^
+ -DOPENSSL_USE_STATIC_LIBS=OFF ^
+ -DZLIB_LIBRARY=%WIN3P_ROOT%\dist\zlib-%TP_ZLIB_VERSION%\%COMPILER%\%ARCH%\lib\zlib%ZLIB_LIB_SUFFIX%.lib ^
+ -DZLIB_ROOT=%WIN3P_ROOT%\dist\zlib-%TP_ZLIB_VERSION%\%COMPILER%\%ARCH% ^
+ -DWITH_BOOSTTHREADS=ON ^
+ -DWITH_SHARED_LIB=OFF ^
+ -DWITH_STATIC_LIB=ON || EXIT /B
+
+)
+
+IF %OPT_BUILD% == 1 (
+
+ CD %BUILDDIR%
+ CMAKE.EXE --build . --config %BUILDTYPE% --target INSTALL || EXIT /B
+
+)
+
+IF %OPT_TEST% == 1 (
+
+ CALL :SETRUNPATH || EXIT /B
+ CMAKE.EXE --build . --config %BUILDTYPE% --target RUN_TESTS || EXIT /B
+
+)
+
+:SETRUNPATH
+ SET PATH=!PATH!;%WIN3P_ROOT%\dist\boost_%TP_BOOST_VERSION%\%BOOST_LIBDIR%
+ SET PATH=!PATH!;%WIN3P_ROOT%\dist\openssl-%TP_OPENSSL_VERSION%\%COMPILER%\%ARCH%\%BUILDTYPE%\dynamic\bin
+ SET PATH=!PATH!;%WIN3P_ROOT%\dist\zlib-%TP_ZLIB_VERSION%\%COMPILER%\%ARCH%\bin
+ EXIT /B
+
+ENDLOCAL
+EXIT /B