blob: 4eef7ff63c8bc1efabb718842b5dd199ca400a20 [file]
@ECHO OFF
REM Copyright 2014-2017 DataStax
REM
REM Licensed under the Apache License, Version 2.0 (the "License");
REM you may not use this file except in compliance with the License.
REM You may obtain a copy of the License at
REM
REM http://www.apache.org/licenses/LICENSE-2.0
REM
REM Unless required by applicable law or agreed to in writing, software
REM distributed under the License is distributed on an "AS IS" BASIS,
REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
REM See the License for the specific language governing permissions and
REM limitations under the License.
REM Enable delayed expansion (multiple var assignments) and local variables
SETLOCAL ENABLEDELAYEDEXPANSION
SET BATCH_DIRECTORY=%~D0%~P0
SET ABSOLUTE_BATCH_DIRECTORY=%~DP0
SET BATCH_FILENAME=%~N0%~X0
REM Exit code constants
SET EXIT_CODE_INVALID_SYSTEM_ARCHITECTURE=1
SET EXIT_CODE_MISSING_VISUAL_STUDIO=2
SET EXIT_CODE_MISSING_BUILD_DEPENDENCY=3
SET EXIT_CODE_INVALID_BUILD_DEPENDENCY_VERSION=4
SET EXIT_CODE_CLONE_FAILED=5
SET EXIT_CODE_BUILD_DEPENDENCY_FAILED=6
SET EXIT_CODE_BUILD_DRIVER_FAILED=7
SET EXIT_CODE_INVALID_VERSION=8
SET EXIT_CODE_PACKAGE_FAILED=9
REM Argument constants
SET ARGUMENT_BUILD_TYPE_DEBUG=--DEBUG
SET ARGUMENT_BUILD_TYPE_RELEASE=--RELEASE
SET ARGUMENT_BUILD_DEPENDENCIES_ONLY=--DEPENDENCIES-ONLY
SET ARGUMENT_DISABLE_CLEAN_BUILD=--DISABLE-CLEAN
SET ARGUMENT_DISABLE_OPENSSL=--DISABLE-OPENSSL
SET ARGUMENT_ENABLE_EXAMPLES=--ENABLE-EXAMPLES
SET ARGUMENT_ENABLE_BUILD_PACKAGES=--ENABLE-PACKAGES
SET ARGUMENT_ENABLE_TESTS=--ENABLE-TESTS
SET ARGUMENT_ENABLE_INTEGRATION_TESTS=--ENABLE-INTEGRATION-TESTS
SET ARGUMENT_ENABLE_UNIT_TESTS=--ENABLE-UNIT-TESTS
SET ARGUMENT_ENABLE_LIBSSH2=--ENABLE-LIBSSH2
SET ARGUMENT_ENABLE_ZLIB=--ENABLE-ZLIB
SET ARGUMENT_GENERATE_SOLUTION=--GENERATE-SOLUTION
SET ARGUMENT_INSTALLATION_DIRECTORY=--INSTALL-DIR
SET ARGUMENT_USE_BOOST_ATOMIC=--USE-BOOST-ATOMIC
SET ARGUMENT_LIBRARY_TYPE_SHARED=--SHARED
SET ARGUMENT_LIBRARY_TYPE_STATIC=--STATIC
SET ARGUMENT_TARGET_ARCHITECTURE_32BIT=--X86
SET ARGUMENT_TARGET_ARCHITECTURE_64BIT=--X64
SET ARGUMENT_TARGET_COMPILER=--TARGET-COMPILER
SET ARGUMENT_HELP=--HELP
REM Option/Value constants
SET ARCHITECTURE_32BIT=32
SET ARCHITECTURE_64BIT=64
SET BUILD_TYPE_DEBUG=DEBUG
SET BUILD_TYPE_RELEASE=RELEASE
SET LIBRARY_TYPE_SHARED=SHARED
SET LIBRARY_TYPE_STATIC=STATIC
SET TRUE=1
SET FALSE=0
SET YES=1
SET NO=2
REM Determine the system architecture (32/64 bit)
SET ARCHITECTURE_REGISTRY_LOCATION_QUERY=HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0
SET ARCHITECTURE_REGISTRY_LOCATION_KEY=Identifier
REG QUERY %ARCHITECTURE_REGISTRY_LOCATION_QUERY% /V %ARCHITECTURE_REGISTRY_LOCATION_KEY% | FIND /I "x86" > NUL && SET SYSTEM_ARCHITECTURE=%ARCHITECTURE_32BIT% || SET SYSTEM_ARCHITECTURE=%ARCHITECTURE_64BIT%
REM Dependency executable constants
SET CMAKE=cmake.exe
SET "DOWNLOAD_URL_CMAKE=http://www.cmake.org/download"
SET GIT=git.exe
SET "DOWNLOAD_URL_GIT=http://git-scm.com/downloads"
SET PERL=perl.exe
SET "DOWNLOAD_URL_PERL=https://www.perl.org/get.html#win32"
SET PYTHON=python.exe
SET "DOWNLOAD_URL_PYTHON=https://www.python.org/downloads/"
SET DEVENV=devenv.exe
SET MSBUILD=msbuild.exe
SET NMAKE=nmake.exe
SET "DOWNLOAD_URL_VISUAL_STUDIO=https://go.microsoft.com/fwlink/?LinkId=615464&clcid=0x409"
SET ZIP=7z.exe
SET "DOWNLOAD_URL_ZIP=http://www.7-zip.org/download.html"
REM Minimum version build dependency constants
SET MINIMUM_VERSION_REQUIRED_CMAKE=3.4.0
SET MINIMUM_VERSION_REQUIRED_PYTHON=2.7.0
REM Build constants
SET BUILD_DIRECTORY=build
SET "ABSOLUTE_BUILD_DIRECTORY=%BATCH_DIRECTORY%\%BUILD_DIRECTORY%"
SET BUILD_PACKAGE_PREFIX=cassandra-cpp-driver
SET DRIVER_DRIVER_DIRECTORY=driver
SET PACKAGES_DIRECTORY=packages
SET "ABSOLUTE_PACKAGES_DIRECTORY=%ABSOLUTE_BUILD_DIRECTORY%\%PACKAGES_DIRECTORY%"
REM Build dependency constants
SET DEPENDENCIES_DIRECTORY=dependencies
SET "ABSOLUTE_DEPENDENCIES_DIRECTORY=%ABSOLUTE_BUILD_DIRECTORY%\%DEPENDENCIES_DIRECTORY%"
SET DEPENDENCIES_SOURCE_DIRECTORY=src
SET DEPENDENCIES_LIBRARIES_DIRECTORY=libs
SET BOOST_REPOSITORY_URL=https://github.com/boostorg/
SET BOOST_DIRECTORY=boost
SET BOOST_BRANCH_TAG_VERSION=boost-1.63.0
SET LIBUV_REPOSITORY_URL=https://github.com/libuv/libuv.git
SET LIBUV_DIRECTORY=libuv
SET LIBUV_BRANCH_TAG_VERSION=v1.11.0
SET LIBUV_PACKAGE_VERSION=1.11.0
SET GYP_REPOSITORY_URL=https://chromium.googlesource.com/external/gyp.git
SET LIBSSH2_REPOSITORY_URL=https://github.com/libssh2/libssh2.git
SET LIBSSH2_DIRECTORY=libssh2
SET LIBSSH2_BRANCH_TAG_VERSION=libssh2-1.8.0
SET LIBSSH2_PACKAGE_VERSION=1.8.0
SET OPENSSL_REPOSITORY_URL=https://github.com/openssl/openssl.git
SET OPENSSL_DIRECTORY=openssl
SET OPENSSL_BRANCH_TAG_VERSION=OpenSSL_1_0_2k
SET OPENSSL_PACKAGE_VERSION=1.0.2k
SET ZLIB_REPOSITORY_URL=https://github.com/madler/zlib.git
SET ZLIB_DIRECTORY=zlib
SET ZLIB_BRANCH_TAG_VERSION=v1.2.11
REM Library directory constants
SET LIBRARY_INCLUDE_DIRECTORY=include
SET LIBRARY_BINARY_DIRECTORY=lib
SET LIBRARY_RUNTIME_DIRECTORY=bin
SET "ABSOLUTE_DRIVER_LIBRARY_DIRECTORY=%ABSOLUTE_BUILD_DIRECTORY%\%LIBRARY_BINARY_DIRECTORY%"
SET "ABSOLUTE_DEPENDENCIES_LIBRARIES_DIRECTORY=%ABSOLUTE_DEPENDENCIES_DIRECTORY%\%DEPENDENCIES_LIBRARIES_DIRECTORY%"
SET "ABSOLUTE_LIBUV_LIBRARY_DIRECTORY=%ABSOLUTE_DEPENDENCIES_LIBRARIES_DIRECTORY%\%LIBUV_DIRECTORY%"
SET "ABSOLUTE_LIBSSH2_LIBRARY_DIRECTORY=%ABSOLUTE_DEPENDENCIES_LIBRARIES_DIRECTORY%\%LIBSSH2_DIRECTORY%"
SET "ABSOLUTE_OPENSSL_LIBRARY_DIRECTORY=%ABSOLUTE_DEPENDENCIES_LIBRARIES_DIRECTORY%\%OPENSSL_DIRECTORY%"
SET "ABSOLUTE_ZLIB_LIBRARY_DIRECTORY=%ABSOLUTE_DEPENDENCIES_LIBRARIES_DIRECTORY%\%ZLIB_DIRECTORY%"
REM Log filename constants
SET LOG_DIRECTORY=log
SET "ABSOLUTE_LOG_DIRECTORY=%ABSOLUTE_BUILD_DIRECTORY%\%LOG_DIRECTORY%"
SET "LOG_BOOST_CLONE=%ABSOLUTE_LOG_DIRECTORY%\boost.log"
SET "LOG_DRIVER_BUILD=%ABSOLUTE_LOG_DIRECTORY%\driver.log"
SET "LOG_LIBUV_BUILD=%ABSOLUTE_LOG_DIRECTORY%\libuv.log"
SET "LOG_LIBSSH2_BUILD=%ABSOLUTE_LOG_DIRECTORY%\libssh2.log"
SET "LOG_OPENSSL_BUILD=%ABSOLUTE_LOG_DIRECTORY%\openssl.log"
SET "LOG_PACKAGE_BUILD=%ABSOLUTE_LOG_DIRECTORY%\package.log"
SET "LOG_ZLIB_BUILD=%ABSOLUTE_LOG_DIRECTORY%\zlib.log"
REM Build defaults (can be updated via command line)
SET BUILD_TYPE=%BUILD_TYPE_RELEASE%
SET BUILD_DEPENDENCIES_ONLY=%FALSE%
SET ENABLE_BUILD_PACKAGES=%FALSE%
SET ENABLE_CLEAN_BUILD=%TRUE%
SET ENABLE_EXAMPLES=%FALSE%
SET ENABLE_OPENSSL=%TRUE%
SET ENABLE_TESTS=%FALSE%
SET ENABLE_INTEGRATION_TESTS=%FALSE%
SET ENABLE_UNIT_TESTS=%FALSE%
SET ENABLE_LIBSSH2=%FALSE%
SET ENABLE_ZLIB=%FALSE%
SET GENERATE_SOLUTION=%FALSE%
SET LIBRARY_TYPE=%LIBRARY_TYPE_SHARED%
SET TARGET_ARCHITECTURE=%SYSTEM_ARCHITECTURE%
SET USE_BOOST_ATOMIC=%FALSE%
SET ARGUMENT_IS_TEST=%FALSE%
SET IS_TESTING_ENABLED=%FALSE%
REM Parse command line arguments
:ARGUMENT_LOOP
IF NOT [%1] == [] (
REM Get the current argument
CALL :UPPERCASE %1 ARGUMENT
SHIFT
REM Build type (debug/release)
IF "!ARGUMENT!" == "!ARGUMENT_BUILD_TYPE_DEBUG!" (
SET BUILD_TYPE=!BUILD_TYPE_DEBUG!
)
IF "!ARGUMENT!" == "!ARGUMENT_BUILD_TYPE_RELEASE!" (
SET BUILD_TYPE=!BUILD_TYPE_RELEASE!
)
REM Library type
IF "!ARGUMENT!" == "!ARGUMENT_LIBRARY_TYPE_SHARED!" (
SET LIBRARY_TYPE=!LIBRARY_TYPE_SHARED!
)
IF "!ARGUMENT!" == "!ARGUMENT_LIBRARY_TYPE_STATIC!" (
SET LIBRARY_TYPE=!LIBRARY_TYPE_STATIC!
)
REM Target architecture (32/64 bit)
IF "!ARGUMENT!" == "!ARGUMENT_TARGET_ARCHITECTURE_32BIT!" (
SET TARGET_ARCHITECTURE=!ARCHITECTURE_32BIT!
)
IF "!ARGUMENT!" == "!ARGUMENT_TARGET_ARCHITECTURE_64BIT!" (
REM Ensure the 64-bit build would be able to proceed
IF NOT !SYSTEM_ARCHITECTURE! EQU !ARCHITECTURE_64BIT! (
ECHO Invalid System Architecture: Unable to build 64-bit project on 32-bit OS
EXIT /B !EXIT_CODE_INVALID_SYSTEM_ARCHITECTURE!
)
SET TARGET_ARCHITECTURE=!ARCHITECTURE_64BIT!
)
REM Target compiler (VS/Windows SDK)
IF "!ARGUMENT!" == "!ARGUMENT_TARGET_COMPILER!" (
REM Make sure the compiler is valid
IF [%2] == [] (
ECHO Invalid Compiler: Visual Studio/Windows SDK version must be supplied
EXIT /B !EXIT_CODE_MISSING_VISUAL_STUDIO!
) ELSE (
REM Get the compiler version to use
CALL :UPPERCASE %2 TARGET_COMPILER_VERSION
SHIFT
REM Ensure the targeted compiler is valid
IF NOT "!TARGET_COMPILER_VERSION!" == "100" (
IF NOT "!TARGET_COMPILER_VERSION!" == "110" (
IF NOT "!TARGET_COMPILER_VERSION!" == "120" (
IF NOT "!TARGET_COMPILER_VERSION!" == "140" (
IF NOT "!TARGET_COMPILER_VERSION!" == "WINSDK" (
ECHO Invalid Compiler Version: 100, 110, 120, 140, or WINSDK must be supplied
EXIT /B !EXIT_CODE_MISSING_VISUAL_STUDIO!
)
)
)
)
)
)
)
REM Enable build of examples
IF "!ARGUMENT!" == "!ARGUMENT_ENABLE_EXAMPLES!" (
SET ENABLE_EXAMPLES=!TRUE!
)
REM Enable package build
IF "!ARGUMENT!" == "!ARGUMENT_ENABLE_BUILD_PACKAGES!" (
SET ENABLE_BUILD_PACKAGES=!TRUE!
REM Make sure the version information exists
IF [%2] == [] (
ECHO Invalid Version: Version must be supplied when enabling packages
EXIT /B !EXIT_CODE_INVALID_VERSION!
) ELSE (
REM Get the version information
SET "BUILD_PACKAGE_VERSION=%2"
SHIFT
)
)
REM Enable testing (enable test type (all, integration, or unit)
IF "!ARGUMENT!" == "!ARGUMENT_ENABLE_TESTS!" (
SET ARGUMENT_IS_TEST=!TRUE!
SET ENABLE_TESTS=!TRUE!
)
IF "!ARGUMENT!" == "!ARGUMENT_ENABLE_INTEGRATION_TESTS!" (
SET ARGUMENT_IS_TEST=!TRUE!
SET ENABLE_INTEGRATION_TESTS=!TRUE!
)
IF "!ARGUMENT!" == "!ARGUMENT_ENABLE_UNIT_TESTS!" (
SET ARGUMENT_IS_TEST=!TRUE!
SET ENABLE_UNIT_TESTS=!TRUE!
)
IF !ARGUMENT_IS_TEST! EQU == !TRUE! (
REM Ensure testing type hasn't been previously established
IF !IS_TESTING_ENABLED! EQU !FALSE! (
REM Indicate testing is enabled
SET IS_TESTING_ENABLED=!TRUE!
REM Make sure the Boost root directory exists
IF [%2] == [] (
ECHO Invalid Boost Root Directory: Location of Boost must be supplied
EXIT /B !EXIT_CODE_MISSING_BUILD_DEPENDENCY!
) ELSE (
REM Get the Boost root directory
SET "BOOST_ROOT_DIRECTORY=%2"
IF NOT EXIST "!BOOST_ROOT_DIRECTORY!" (
ECHO Invalid Boost Root Directory: Location does not exist [%2]
EXIT /B !EXIT_CODE_MISSING_BUILD_DEPENDENCY!
)
SHIFT
)
REM Reset the argument flag
SET ARGUMENT_IS_TEST=!FALSE!
) ELSE (
REM Determine which tests were previously parsed
ECHO Testing Already Indicated: Indicate one type [all, integration, or unit]
)
)
REM Enable libssh2 (clone and build)
IF "!ARGUMENT!" == "!ARGUMENT_ENABLE_LIBSSH2!" (
SET ENABLE_LIBSSH2=!TRUE!
)
REM Enable zlib (clone and build)
IF "!ARGUMENT!" == "!ARGUMENT_ENABLE_ZLIB!" (
SET ENABLE_ZLIB=!TRUE!
)
REM Enable dependency only build(s)
IF "!ARGUMENT!" == "!ARGUMENT_BUILD_DEPENDENCIES_ONLY!" (
SET BUILD_DEPENDENCIES_ONLY=!TRUE!
)
REM Disable clean build
IF "!ARGUMENT!" == "!ARGUMENT_DISABLE_CLEAN_BUILD!" (
SET ENABLE_CLEAN_BUILD=!FALSE!
)
REM Disable OpenSSL (clone and build)
IF "!ARGUMENT!" == "!ARGUMENT_DISABLE_OPENSSL!" (
SET ENABLE_OPENSSL=!FALSE!
)
REM Generate Visual Studio solution (no build)
IF "!ARGUMENT!" == "!ARGUMENT_GENERATE_SOLUTION!" (
SET GENERATE_SOLUTION=!TRUE!
)
REM Update installation directory for the driver
IF "!ARGUMENT!" == "!ARGUMENT_INSTALLATION_DIRECTORY!" (
REM Make sure the installation directory is available
IF [%2] == [] (
ECHO Invalid Installation Directory: Directory must be supplied
EXIT /B !EXIT_CODE_MISSING_BUILD_DEPENDENCY!
) ELSE (
REM Get the driver installation directory
SET "DRIVER_INSTALLATION_DIRECTORY=%2"
SHIFT
)
)
REM Enable the use of Boost atomic library (header only)
IF "!ARGUMENT!" == "!ARGUMENT_USE_BOOST_ATOMIC!" (
SET USE_BOOST_ATOMIC=!TRUE!
)
REM Help message
IF "!ARGUMENT!" == "!ARGUMENT_HELP!" (
CALL :DISPLAYHELP 0
EXIT /B
)
REM Continue to loop through the command line arguments
GOTO :ARGUMENT_LOOP
)
REM Ensure OpenSSL is enabled if libssh2 or integration tests are enabled
IF !ENABLE_OPENSSL! EQU !FALSE! (
IF !ENABLE_LIBSSH2! EQU !TRUE! (
SET ENABLE_OPENSSL=!TRUE!
ECHO OpenSSL is Required for libssh2: Enabling OpenSSL
)
)
IF !ENABLE_OPENSSL! EQU !FALSE! (
IF !ENABLE_TESTS! EQU !TRUE! SET ENABLE_OPENSSL=!TRUE!
IF !ENABLE_INTEGRATION_TESTS! EQU !TRUE! SET ENABLE_OPENSSL=!TRUE!
IF !ENABLE_OPENSSL! EQU !TRUE! (
ECHO OpenSSL is Required for Integration Tests: Enabling OpenSSL
)
)
REM Ensure static builds are enabled and packages are disabled (if tests)
IF !IS_TESTING_ENABLED! EQU !TRUE! (
REM Force static for static linking
SET LIBRARY_TYPE=!LIBRARY_TYPE_STATIC!
REM Determine if package build should be disabled
IF !ENABLE_BUILD_PACKAGES! EQU !TRUE! (
ECHO Disabling Package Build: !ARGUMENT_ENABLE_TESTS! overrides packages
SET ENABLE_BUILD_PACKAGES=!FALSE!
)
)
REM Determine if zlib should be enabled
IF !ENABLE_ZLIB! EQU !TRUE! (
SET ENABLE_ZLIB_IS_VALID=!FALSE!
IF !ENABLE_LIBSSH! EQU !TRUE! SET ENABLE_ZLIB_IS_VALID=!TRUE!
IF !ENABLE_OPENSSL! EQU !TRUE! SET ENABLE_ZLIB_IS_VALID=!TRUE!
SET ENABLE_ZLIB=!ENABLE_ZLIB_IS_VALID!
)
REM Determine Visual Studio Version(s) available
SET "VISUAL_STUDIO_INTERNAL_VERSIONS=140 120 110 100"
SET "VISUAL_STUDIO_INTERNAL_SHORTHAND_VERSIONS=14 12 11 10"
SET "VISUAL_STUDIO_VERSIONS=2015 2013 2012 2010"
SET INDEX=0
SET TARGET_COMPILER_VERSION_FOUND=!FALSE!
FOR %%A IN (!VISUAL_STUDIO_INTERNAL_VERSIONS!) DO (
SET /A INDEX+=1
IF DEFINED VS%%ACOMNTOOLS (
SET "AVAILABLE_VISUAL_STUDIO_VERSIONS=!AVAILABLE_VISUAL_STUDIO_VERSIONS! !INDEX!"
REM Determine if targeted version can be detected
IF NOT "!TARGET_COMPILER_VERSION!" == "WINSDK" (
IF %%A EQU !TARGET_COMPILER_VERSION! (
REM Indicate the compiler was found and set the user choice
SET TARGET_COMPILER_VERSION_FOUND=!TRUE!
SET USER_CHOICE_ENTRY=!INDEX!
)
)
)
)
REM Find all available versions of Visual Studio
SET FOUND_VISUAL_STUDIO_INTERNAL_VERSIONS=
FOR /F "TOKENS=1,2 DELIMS==" %%A IN ('SET VS') DO (
SET EXTRACT_VISUAL_STUDIO_INTERNAL_VERSION=%%A
SET EXTRACT_VISUAL_STUDIO_INTERNAL_VERSION=!EXTRACT_VISUAL_STUDIO_INTERNAL_VERSION:VS=!
SET EXTRACT_VISUAL_STUDIO_INTERNAL_VERSION=!EXTRACT_VISUAL_STUDIO_INTERNAL_VERSION:COMNTOOLS=!
SET "FOUND_VISUAL_STUDIO_INTERNAL_VERSIONS=!FOUND_VISUAL_STUDIO_INTERNAL_VERSIONS! !EXTRACT_VISUAL_STUDIO_INTERNAL_VERSION!"
)
SET "FOUND_VISUAL_STUDIO_INTERNAL_VERSIONS=!FOUND_VISUAL_STUDIO_INTERNAL_VERSIONS:~1!"
REM Remove versions of Visual Studio that are not applicable for C/C++ driver
FOR %%A IN (!FOUND_VISUAL_STUDIO_INTERNAL_VERSIONS!) DO (
REM Ensure the other versions of VSXXXCOMNTOOLS are undefined (unset)
SET KEEP_VISUAL_STUDIO_VERSION=!FALSE!
FOR %%B IN (!VISUAL_STUDIO_INTERNAL_VERSIONS!) DO (
IF %%A EQU %%B SET KEEP_VISUAL_STUDIO_VERSION=!TRUE!
)
IF !KEEP_VISUAL_STUDIO_VERSION! EQU !FALSE! SET VS%%ACOMNTOOLS=
)
REM Determine Windows SDK Version(s) available
SET "WINDOWS_SDK_VERSIONS=v7.1 v8.0 v8.1"
IF DEFINED WindowsSDKDir (
IF DEFINED WindowsSDKVersionOverride (
CALL :GETVALUE WindowsSDKVersionOverride WINDOWS_SDK_VERSION
SET INDEX=0
FOR %%A IN (!WINDOWS_SDK_VERSIONS!) DO (
SET /A INDEX+=1
CALL :GETARRAYELEMENT WINDOWS_SDK_VERSIONS !INDEX! CHECK_WINDOWS_SDK_VERSION
IF "!WINDOWS_SDK_VERSION!" == "!CHECK_WINDOWS_SDK_VERSION!" (
SET WINDOWS_SDK_FOUND=!TRUE!
REM Determine if targeted version can be detected
IF "!TARGET_COMPILER_VERSION!" == "WINSDK" (
SET TARGET_COMPILER_VERSION_FOUND=!TRUE!
)
)
)
)
)
REM Determine if targeted compiler was detected
IF NOT "!TARGET_COMPILER_VERSION!" == "" (
IF !TARGET_COMPILER_VERSION_FOUND! EQU !FALSE! (
ECHO Could Not Detect Compiler: !TARGET_COMPILER_VERSION! is not installed
)
)
REM Determine the number of Visual Studio (and/or Windows SDK) version(s)
set NUMBER_OF_VERSIONS=0
FOR %%A IN (!AVAILABLE_VISUAL_STUDIO_VERSIONS!) DO (
SET /A NUMBER_OF_VERSIONS+=1
)
IF DEFINED WINDOWS_SDK_FOUND SET /A NUMBER_OF_VERSIONS+=1
REM Determine if build can proceed
IF !NUMBER_OF_VERSIONS! EQU 0 (
ECHO Visual Studio Not Found: Install Visual Studio 2010 - 2015 to complete build
ECHO !DOWNLOAD_URL_VISUAL_STUDIO!
CHOICE /N /T 15 /D N /M "Would you like to download Visual Studio 2015 Express now?"
IF !ERRORLEVEL! EQU !YES! START !DOWNLOAD_URL_VISUAL_STUDIO!
EXIT /B !EXIT_CODE_MISSING_VISUAL_STUDIO!
)
REM Ensure additional build dependencies are installed
CALL :GETFULLPATH "!CMAKE!" CMAKE_FOUND
IF NOT DEFINED CMAKE_FOUND (
ECHO CMake Not Found in PATH: CMake v!MINIMUM_VERSION_REQUIRED_CMAKE! is required to complete build
ECHO !DOWNLOAD_URL_CMAKE!
CHOICE /N /T 15 /D N /M "Would you like to download CMake now?"
IF !ERRORLEVEL! EQU !YES! START !DOWNLOAD_URL_CMAKE!
EXIT /B !EXIT_CODE_MISSING_BUILD_DEPENDENCY!
) ELSE (
FOR /F "TOKENS=1,2,3* DELIMS= " %%A IN ('!CMAKE! --version') DO IF NOT DEFINED CMAKE_VERSION SET CMAKE_VERSION=%%C
CALL :COMPAREVERSION !CMAKE_VERSION! !MINIMUM_VERSION_REQUIRED_CMAKE!
IF !ERRORLEVEL! EQU -1 (
ECHO Invalid CMake Version Found: CMake v!MINIMUM_VERSION_REQUIRED_CMAKE! is required to complete build
ECHO !DOWNLOAD_URL_CMAKE!
CHOICE /N /T 15 /D N /M "Would you like to download CMake now?"
IF !ERRORLEVEL! EQU !YES! START !DOWNLOAD_URL_CMAKE!
EXIT /B !EXIT_CODE_INVALID_BUILD_DEPENDENCY_VERSION!
)
)
CALL :GETFULLPATH "!GIT!" GIT_FOUND
IF NOT DEFINED GIT_FOUND (
ECHO Git Not Found in PATH: Git is required to complete build
ECHO !DOWNLOAD_URL_GIT!
CHOICE /N /T 15 /D N /M "Would you like to download Git now?"
IF !ERRORLEVEL! EQU !YES! START !DOWNLOAD_URL_GIT!
EXIT /B !EXIT_CODE_MISSING_BUILD_DEPENDENCY!
)
CALL :GETFULLPATH "!PERL!" PERL_FOUND
IF NOT DEFINED PERL_FOUND (
REM Perl is only required for building/configuring OpenSSL
IF !ENABLE_OPENSSL! EQU !TRUE! (
ECHO Perl Not Found in PATH: Perl is required to complete build
ECHO !DOWNLOAD_URL_PERL!
CHOICE /N /T 15 /D N /M "Would you like to download Perl now?"
IF !ERRORLEVEL! EQU !YES! START !DOWNLOAD_URL_PERL!
EXIT /B !EXIT_CODE_MISSING_BUILD_DEPENDENCY!
)
)
CALL :GETFULLPATH "!PYTHON!" PYTHON_FOUND
IF NOT DEFINED PYTHON_FOUND (
ECHO Python Not Found in PATH: Python v!MINIMUM_VERSION_REQUIRED_PYTHON! is required to complete build
ECHO !DOWNLOAD_URL_PYTHON!
CHOICE /N /T 15 /D N /M "Would you like to download Python now?"
IF !ERRORLEVEL! EQU !YES! START !DOWNLOAD_URL_PYTHON!
EXIT /B !EXIT_CODE_MISSING_BUILD_DEPENDENCY!
) ELSE (
FOR /F "TOKENS=1,2* DELIMS= " %%A IN ('!PYTHON! --version 2^>^&1') DO IF NOT DEFINED PYTHON_VERSION SET PYTHON_VERSION=%%B
CALL :COMPAREVERSION !PYTHON_VERSION! !MINIMUM_VERSION_REQUIRED_PYTHON!
IF !ERRORLEVEL! EQU -1 (
ECHO Invalid Python Version Found: Python v!MINIMUM_VERSION_REQUIRED_PYTHON! is required to complete build
ECHO !DOWNLOAD_URL_PYTHON!
CHOICE /N /T 15 /D N /M "Would you like to download Python now?"
IF !ERRORLEVEL! EQU !YES! START !DOWNLOAD_URL_PYTHON!
EXIT /B !EXIT_CODE_INVALID_BUILD_DEPENDENCY_VERSION!
)
REM Python v3.x does not work properly with GYP (libuv build dependency)
CALL :COMPAREVERSION !PYTHON_VERSION! 3.0.0
IF !ERRORLEVEL! GEQ 0 (
ECHO Invalid Python Version Found: Python v3.x is not supported
ECHO !DOWNLOAD_URL_PYTHON!
CHOICE /N /T 15 /D N /M "Would you like to download Python now?"
IF !ERRORLEVEL! EQU !YES! START !DOWNLOAD_URL_PYTHON!
EXIT /B !EXIT_CODE_INVALID_BUILD_DEPENDENCY_VERSION!
)
)
REM Determine if we should allow the user to choose compiler version
IF "!ENABLE_BUILD_PACKAGES!" == "!FALSE!" (
IF !NUMBER_OF_VERSIONS! GTR 1 (
REM Display discovered Visual Studio versions for selection
SET INDEX=0
SET SELECTION_OPTIONS=
FOR %%A IN (!AVAILABLE_VISUAL_STUDIO_VERSIONS!) DO (
SET /A INDEX+=1
SET "SELECTION_OPTIONS=!SELECTION_OPTIONS!!INDEX!"
CALL :GETARRAYELEMENT VISUAL_STUDIO_VERSIONS %%A VISUAL_STUDIO_VERSION
ECHO !INDEX!^) Visual Studio !VISUAL_STUDIO_VERSION!
)
REM Display discovered Windows SDK version for selection
IF DEFINED WINDOWS_SDK_FOUND (
SET /A INDEX+=1
SET "SELECTION_OPTIONS=!SELECTION_OPTIONS!!INDEX!"
SET WINDOWS_SDK_SELECTION_OPTION=!INDEX!
ECHO !INDEX!^) Windows SDK !WINDOWS_SDK_VERSION!
)
REM Add the exit option
ECHO E^) Exit
SET "SELECTION_OPTIONS=!SELECTION_OPTIONS!E"
REM Determine if the targeted compiler should be used
IF !TARGET_COMPILER_VERSION_FOUND! EQU !TRUE! (
REM Make selection choice for the user
IF "!TARGET_COMPILER_VERSION!" == "WINSDK" SET USER_CHOICE_ENTRY=!WINDOWS_SDK_SELECTION_OPTION!
ECHO Please Select a Compiler: !USER_CHOICE_ENTRY!
) ELSE (
REM Present selection to the user
CHOICE /C !SELECTION_OPTIONS! /N /T 60 /D E /M "Please Select a Compiler:"
IF !ERRORLEVEL! GTR !NUMBER_OF_VERSIONS! (
EXIT /B
)
SET USER_CHOICE_ENTRY=!ERRORLEVEL!
)
ECHO.
REM Determine the selection
IF !USER_CHOICE_ENTRY! NEQ !WINDOWS_SDK_SELECTION_OPTION! (
CALL :GETARRAYELEMENT AVAILABLE_VISUAL_STUDIO_VERSIONS !USER_CHOICE_ENTRY! USER_SELECTION
CALL :GETARRAYELEMENT VISUAL_STUDIO_INTERNAL_VERSIONS !USER_SELECTION! VISUAL_STUDIO_INTERNAL_VERSION
CALL :GETARRAYELEMENT VISUAL_STUDIO_INTERNAL_SHORTHAND_VERSIONS !USER_SELECTION! VISUAL_STUDIO_INTERNAL_SHORTHAND_VERSION
CALL :GETARRAYELEMENT VISUAL_STUDIO_VERSIONS !USER_SELECTION! VISUAL_STUDIO_VERSION
REM Ensure the other versions of VSXXXCOMNTOOLS are undefined (unset)
FOR %%A IN (!VISUAL_STUDIO_INTERNAL_VERSIONS!) DO (
IF NOT %%A EQU !VISUAL_STUDIO_INTERNAL_VERSION! SET VS%%ACOMNTOOLS=
)
REM Ensure the Windows SDK version is undefined (unset)
IF DEFINED WindowsSDKDir SET WindowsSDKDir=
) ELSE (
SET WINDOWS_SDK_SELECTED=!TRUE!
)
) ELSE (
IF NOT DEFINED WINDOWS_SDK_FOUND (
CALL :GETARRAYELEMENT VISUAL_STUDIO_INTERNAL_VERSIONS !AVAILABLE_VISUAL_STUDIO_VERSIONS! VISUAL_STUDIO_INTERNAL_VERSION
CALL :GETARRAYELEMENT VISUAL_STUDIO_INTERNAL_SHORTHAND_VERSIONS !AVAILABLE_VISUAL_STUDIO_VERSIONS! VISUAL_STUDIO_INTERNAL_SHORTHAND_VERSION
CALL :GETARRAYELEMENT VISUAL_STUDIO_VERSIONS !AVAILABLE_VISUAL_STUDIO_VERSIONS! VISUAL_STUDIO_VERSION
) ELSE (
SET WINDOWS_SDK_SELECTED=!TRUE!
)
)
REM Ensure the environment is setup correctly; if Windows SDK build environment
IF DEFINED WINDOWS_SDK_FOUND (
CALL :CONFIGUREWINDOWSSDKENVIRONMENT !BUILD_TYPE! !TARGET_ARCHITECTURE!
)
REM Setup the Visual Studio environment for compiling
IF NOT DEFINED WINDOWS_SDK_SELECTED (
CALL :CONFIGUREVISUALSTUDIOENVIRONMENT !VISUAL_STUDIO_INTERNAL_VERSION! !TARGET_ARCHITECTURE!
)
CALL :GETFULLPATH "!DEVENV!" DEVENV_FOUND
CALL :GETFULLPATH "!MSBUILD!" MSBUILD_FOUND
CALL :GETFULLPATH "!NMAKE!" NMAKE_FOUND
REM Determine if Boost Atomic is required
IF !BUILD_DEPENDENCIES_ONLY! EQU !TRUE! SET USE_BOOST_ATOMIC=!FALSE!
REM Display summary of build options
ECHO Build Type: !BUILD_TYPE!
ECHO Clean Build: !ENABLE_CLEAN_BUILD!
ECHO Dependencies Only: !BUILD_DEPENDENCIES_ONLY!
ECHO Examples Enabled: !ENABLE_EXAMPLES!
ECHO Library Type: !LIBRARY_TYPE!
ECHO OpenSSL Enabled: !ENABLE_OPENSSL!
ECHO Tests Enabled: !ENABLE_TESTS!
ECHO Integration Tests Enabled: !ENABLE_INTEGRATION_TESTS!
ECHO Unit Tests Enabled: !ENABLE_UNIT_TESTS!
ECHO libssh2 Enabled: !ENABLE_LIBSSH2!
ECHO zlib Enabled: !ENABLE_ZLIB!
ECHO Generate Solution !GENERATE_SOLUTION!
ECHO Target Architecture: !TARGET_ARCHITECTURE!
ECHO Use Boost Atomic: !USE_BOOST_ATOMIC!
IF NOT DEFINED WINDOWS_SDK_SELECTED (
ECHO Visual Studio: !VISUAL_STUDIO_VERSION!
) ELSE (
ECHO Windows SDK: !WINDOWS_SDK_VERSION!
)
ECHO.
) ELSE (
REM Ensure package properties are set (ignore commandline arguments)
SET BUILD_TYPE=!BUILD_TYPE_RELEASE!
SET ENABLE_CLEAN_BUILD=!TRUE!
SET ENABLE_EXAMPLES=!FALSE!
SET ENABLE_OPENSSL=!TRUE!
SET ENABLE_TESTS=!FALSE!
SET ENABLE_INTEGRATION_TESTS=!FALSE!
SET ENABLE_UNIT_TESTS=!FALSE!
SET ENABLE_ZLIB=!FALSE!
SET GENERATE_SOLUTION=!FALSE!
IF !BUILD_DEPENDENCIES_ONLY! EQU !FALSE! (
SET USE_BOOST_ATOMIC=!TRUE!
SET ENABLE_LIBSSH2=!FALSE!
)
REM Add common 7-zip locations to system path
SET "PATH=!PATH!;!PROGRAMFILES!\7-zip;!PROGRAMFILES(X86)!\7-zip"
REM Check for 7-zip to perform package installation
CALL :GETFULLPATH "!ZIP!" ZIP_FOUND
IF NOT DEFINED ZIP_FOUND (
ECHO 7-zip Not Found in PATH: 7-zip is required to build packages
ECHO !DOWNLOAD_URL_ZIP!
CHOICE /N /T 15 /D N /M "Would you like to download 7-zip now?"
IF !ERRORLEVEL! EQU !YES! START !DOWNLOAD_URL_ZIP!
EXIT /B !EXIT_CODE_MISSING_BUILD_DEPENDENCY!
)
)
REM Determine if the build should be cleaned
IF !ENABLE_CLEAN_BUILD! EQU !TRUE! (
CALL :CLEANDIRECTORY "!ABSOLUTE_BUILD_DIRECTORY!" "Cleaning build directory"
ECHO.
)
REM Prepare the build directories
IF NOT EXIST "!ABSOLUTE_BUILD_DIRECTORY!" MKDIR "!ABSOLUTE_BUILD_DIRECTORY!"
IF NOT EXIST "!ABSOLUTE_DEPENDENCIES_DIRECTORY!" MKDIR "!ABSOLUTE_DEPENDENCIES_DIRECTORY!"
IF NOT EXIST "!ABSOLUTE_LOG_DIRECTORY!" MKDIR "!ABSOLUTE_LOG_DIRECTORY!"
REM Move to the dependencies directory
PUSHD "!ABSOLUTE_DEPENDENCIES_DIRECTORY!" > NUL
ECHO Cloning Library Dependencies
REM Determine if Boost atomic dependency is required
IF !USE_BOOST_ATOMIC! EQU !TRUE! (
REM Determine if Boost atomic should be cloned
IF !IS_TESTING_ENABLED! EQU !FALSE! (
REM Clone Boost atomic and checkout the appropriate tag
ECHO Gathering Boost atomic ^(and dependencies^) !BOOST_BRANCH_TAG_VERSION! > "!LOG_BOOST_CLONE!"
ECHO | SET /P=Gathering Boost atomic ^(and dependencies^) !BOOST_BRANCH_TAG_VERSION! ...
SET "BOOST_ATOMIC_DEPENDENCIES=atomic assert config mpl preprocessor static_assert type_traits"
IF NOT EXIST "!ABSOLUTE_DEPENDENCIES_DIRECTORY!\!DEPENDENCIES_SOURCE_DIRECTORY!\!BOOST_DIRECTORY!\include" MKDIR "!ABSOLUTE_DEPENDENCIES_DIRECTORY!\!DEPENDENCIES_SOURCE_DIRECTORY!\!BOOST_DIRECTORY!\include"
REM Store current Visual Studio tools environment variables
FOR %%A IN (!BOOST_ATOMIC_DEPENDENCIES!) DO (
!GIT! clone --depth 1 --branch !BOOST_BRANCH_TAG_VERSION! --single-branch !BOOST_REPOSITORY_URL!/%%A "!DEPENDENCIES_SOURCE_DIRECTORY!\!BOOST_DIRECTORY!\%%A" >> "!LOG_BOOST_CLONE!" 2>&1
IF !ERRORLEVEL! EQU 0 (
XCOPY /E /Y "!ABSOLUTE_DEPENDENCIES_DIRECTORY!\!DEPENDENCIES_SOURCE_DIRECTORY!\!BOOST_DIRECTORY!\%%A\include" "!ABSOLUTE_DEPENDENCIES_DIRECTORY!\!DEPENDENCIES_SOURCE_DIRECTORY!\!BOOST_DIRECTORY!\include" >> "!LOG_BOOST_CLONE!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !LOG_BOOST_CLONE! for more details
EXIT /B !EXIT_CODE_CHECKOUT_FAILED!
)
) ELSE (
ECHO FAILED!
ECHO See !LOG_BOOST_CLONE! for more details
EXIT /B !EXIT_CODE_CLONE_FAILED!
)
)
ECHO done.
)
)
REM Clone libuv and checkout the appropriate tag
IF NOT EXIST "!DEPENDENCIES_SOURCE_DIRECTORY!\!LIBUV_DIRECTORY!" (
ECHO Cloning libuv !LIBUV_BRANCH_TAG_VERSION! > "!LOG_LIBUV_BUILD!"
ECHO | SET /P=Cloning libuv !LIBUV_BRANCH_TAG_VERSION! ...
!GIT! clone --depth 1 --branch !LIBUV_BRANCH_TAG_VERSION! --single-branch !LIBUV_REPOSITORY_URL! "!DEPENDENCIES_SOURCE_DIRECTORY!\!LIBUV_DIRECTORY!" >> "!LOG_LIBUV_BUILD!" 2>&1
IF !ERRORLEVEL! EQU 0 (
ECHO done.
REM Clone GYP (libuv dependency) to correctly use googlesource URL
ECHO. >> "!LOG_LIBUV_BUILD!"
ECHO Cloning gyp >> "!LOG_LIBUV_BUILD!"
ECHO | SET /P=Cloning gyp ...
!GIT! clone --depth 1 --single-branch !GYP_REPOSITORY_URL! "!DEPENDENCIES_SOURCE_DIRECTORY!\!LIBUV_DIRECTORY!\build\gyp" >> "!LOG_LIBUV_BUILD!" 2>&1
IF !ERRORLEVEL! EQU 0 (
ECHO done.
) ELSE (
ECHO FAILED!
ECHO See !LOG_LIBUV_BUILD! for more details
EXIT /B !EXIT_CODE_CLONE_FAILED!
)
) ELSE (
ECHO FAILED!
ECHO See !LOG_LIBUV_BUILD! for more details
EXIT /B !EXIT_CODE_CLONE_FAILED!
)
)
REM Clone zlib (libssh2 dependency) and checkout the appropriate tag
IF !ENABLE_ZLIB! EQU !TRUE! (
IF NOT EXIST "!DEPENDENCIES_SOURCE_DIRECTORY!\!ZLIB_DIRECTORY!" (
ECHO Cloning zlib !ZLIB_BRANCH_TAG_VERSION! > "!LOG_ZLIB_BUILD!"
ECHO | SET /P=Cloning zlib !ZLIB_BRANCH_TAG_VERSION! ...
!GIT! clone --depth 1 --branch !ZLIB_BRANCH_TAG_VERSION! --single-branch !ZLIB_REPOSITORY_URL! "!DEPENDENCIES_SOURCE_DIRECTORY!\!ZLIB_DIRECTORY!" >> "!LOG_ZLIB_BUILD!" 2>&1
IF !ERRORLEVEL! EQU 0 (
ECHO done.
) ELSE (
ECHO FAILED!
ECHO See !LOG_ZLIB_BUILD! for more details
EXIT /B !EXIT_CODE_CLONE_FAILED!
)
)
)
REM Determine if libssh2 should be cloned
IF !ENABLE_LIBSSH2! EQU !TRUE! (
REM Clone libssh2
IF NOT EXIST "!DEPENDENCIES_SOURCE_DIRECTORY!\!LIBSSH2_DIRECTORY!" (
ECHO Cloning libssh2 !LIBSSH2_BRANCH_TAG_VERSION! > "!LOG_LIBSSH2_BUILD!"
ECHO | SET /P=Cloning libssh2 !LIBSSH2_BRANCH_TAG_VERSION! ...
!GIT! clone --depth 1 --branch !LIBSSH2_BRANCH_TAG_VERSION! --single-branch !LIBSSH2_REPOSITORY_URL! "!DEPENDENCIES_SOURCE_DIRECTORY!\!LIBSSH2_DIRECTORY!" >> "!LOG_LIBSSH2_BUILD!" 2>&1
IF !ERRORLEVEL! EQU 0 (
ECHO done.
) ELSE (
ECHO FAILED!
ECHO See !LOG_LIBSSH2_BUILD! for more details
EXIT /B !EXIT_CODE_CLONE_FAILED!
)
)
)
REM Determine is OpenSSL should be cloned
IF !ENABLE_OPENSSL! EQU !TRUE! (
REM Clone OpenSSL and checkout the appropriate tag
IF NOT EXIST "!DEPENDENCIES_SOURCE_DIRECTORY!\!OPENSSL_DIRECTORY!" (
ECHO Cloning OpenSSL !OPENSSL_BRANCH_TAG_VERSION! > "!LOG_OPENSSL_BUILD!"
ECHO | SET /P=Cloning OpenSSL !OPENSSL_BRANCH_TAG_VERSION! ...
!GIT! clone --depth 1 --branch !OPENSSL_BRANCH_TAG_VERSION! --single-branch !OPENSSL_REPOSITORY_URL! "!DEPENDENCIES_SOURCE_DIRECTORY!\!OPENSSL_DIRECTORY!" >> "!LOG_OPENSSL_BUILD!" 2>&1
IF !ERRORLEVEL! EQU 0 (
ECHO done.
) ELSE (
ECHO FAILED!
ECHO See !LOG_OPENSSL_BUILD! for more details
EXIT /B !EXIT_CODE_CLONE_FAILED!
)
)
)
REM Move back to working directory
POPD
REM Determine if the packages are being built
ECHO.
IF "!ENABLE_BUILD_PACKAGES!" == "!FALSE!" (
ECHO Building Library Dependencies
REM Determine if libuv needs to be built
IF NOT EXIST "!ABSOLUTE_LIBUV_LIBRARY_DIRECTORY!" (
SET IS_WINDOWS_SDK_ENABLED=!FALSE!
IF DEFINED WINDOWS_SDK_SELECTED SET IS_WINDOWS_SDK_ENABLED=!TRUE!
CALL :BUILDLIBUV "!ABSOLUTE_DEPENDENCIES_DIRECTORY!\!DEPENDENCIES_SOURCE_DIRECTORY!\!LIBUV_DIRECTORY!" "!ABSOLUTE_LIBUV_LIBRARY_DIRECTORY!" !TARGET_ARCHITECTURE! !LIBRARY_TYPE! !IS_WINDOWS_SDK_ENABLED! !FALSE! "!LOG_LIBUV_BUILD!"
IF !ERRORLEVEL! NEQ 0 EXIT /B !ERRORLEVEL!
)
REM Determine if zlib needs to be built
IF !ENABLE_ZLIB! EQU !TRUE! (
IF NOT EXIST "!ABSOLUTE_ZLIB_LIBRARY_DIRECTORY!" (
CALL :BUILDZLIB "!ABSOLUTE_DEPENDENCIES_DIRECTORY!\!DEPENDENCIES_SOURCE_DIRECTORY!\!ZLIB_DIRECTORY!" "!ABSOLUTE_ZLIB_LIBRARY_DIRECTORY!" "!LOG_ZLIB_BUILD!"
IF !ERRORLEVEL! NEQ 0 EXIT /B !ERRORLEVEL!
)
) ELSE (
REM Indicate zlib is disabled
SET ABSOLUTE_ZLIB_LIBRARY_DIRECTORY=
)
REM Determine is OpenSSL should be built
IF !ENABLE_OPENSSL! EQU !TRUE! (
REM Determine if OpenSSL needs to be built
IF NOT EXIST "!ABSOLUTE_OPENSSL_LIBRARY_DIRECTORY!" (
REM Determine if OpenSSL should be built with zlib support
CALL :BUILDOPENSSL "!ABSOLUTE_DEPENDENCIES_DIRECTORY!\!DEPENDENCIES_SOURCE_DIRECTORY!\!OPENSSL_DIRECTORY!" "!ABSOLUTE_OPENSSL_LIBRARY_DIRECTORY!" "!ABSOLUTE_ZLIB_LIBRARY_DIRECTORY!" !TARGET_ARCHITECTURE! !LIBRARY_TYPE! !FALSE! "!LOG_OPENSSL_BUILD!"
IF !ERRORLEVEL! NEQ 0 EXIT /B !ERRORLEVEL!
)
) ELSE (
REM Indicate OpenSSL is disabled
SET ABSOLUTE_OPENSSL_LIBRARY_DIRECTORY=
)
REM Determine is libssh2 should be built
IF !ENABLE_LIBSSH2! EQU !TRUE! (
REM Determine if libssh2 needs to be built
IF NOT EXIST "!ABSOLUTE_LIBSSH2_LIBRARY_DIRECTORY!" (
CALL :BUILDLIBSSH2 "!ABSOLUTE_DEPENDENCIES_DIRECTORY!\!DEPENDENCIES_SOURCE_DIRECTORY!\!LIBSSH2_DIRECTORY!" "!ABSOLUTE_LIBSSH2_LIBRARY_DIRECTORY!" "!ABSOLUTE_OPENSSL_LIBRARY_DIRECTORY!" "!ABSOLUTE_ZLIB_LIBRARY_DIRECTORY!" !TARGET_ARCHITECTURE! !VISUAL_STUDIO_INTERNAL_SHORTHAND_VERSION! !FALSE! "!LOG_LIBSSH2_BUILD!"
IF !ERRORLEVEL! NEQ 0 EXIT /B !ERRORLEVEL!
)
) ELSE (
REM Indicate libssh2 is disabled
SET ABSOLUTE_LIBSSH2_LIBRARY_DIRECTORY=
)
REM Determine if driver should be built
IF !BUILD_DEPENDENCIES_ONLY! EQU !FALSE! (
ECHO.
ECHO Building Driver
REM Determine if the driver needs to be built
SET DRIVER_INSTALLATION_DIRECTORY_OVERRIDDEN=!TRUE!
IF "!DRIVER_INSTALLATION_DIRECTORY!" == "" (
SET "DRIVER_INSTALLATION_DIRECTORY=!ABSOLUTE_DRIVER_LIBRARY_DIRECTORY!"
SET DRIVER_INSTALLATION_DIRECTORY_OVERRIDDEN=!FALSE!
)
IF NOT EXIST "!DRIVER_INSTALLATION_DIRECTORY!" (
SET BOOST_DEPENDENCY_SOURCE_DIRECTORY=
IF !USE_BOOST_ATOMIC! EQU !TRUE! SET "BOOST_DEPENDENCY_SOURCE_DIRECTORY=!ABSOLUTE_DEPENDENCIES_DIRECTORY!\!DEPENDENCIES_SOURCE_DIRECTORY!\!BOOST_DIRECTORY!"
CALL :BUILDDRIVER "!ABSOLUTE_BATCH_DIRECTORY!" "!ABSOLUTE_BUILD_DIRECTORY!\!DRIVER_DRIVER_DIRECTORY!" "!DRIVER_INSTALLATION_DIRECTORY!" "!ABSOLUTE_LIBUV_LIBRARY_DIRECTORY!" "!ABSOLUTE_OPENSSL_LIBRARY_DIRECTORY!" "!ABSOLUTE_ZLIB_LIBRARY_DIRECTORY!" "!BOOST_ROOT_DIRECTORY!" "!ABSOLUTE_LIBSSH2_LIBRARY_DIRECTORY!" !BUILD_TYPE! !TARGET_ARCHITECTURE! !LIBRARY_TYPE! !VISUAL_STUDIO_INTERNAL_SHORTHAND_VERSION! !ENABLE_EXAMPLES! !ENABLE_TESTS! !ENABLE_INTEGRATION_TESTS! !ENABLE_UNIT_TESTS! !GENERATE_SOLUTION! "!BOOST_DEPENDENCY_SOURCE_DIRECTORY!" "!LOG_DRIVER_BUILD!"
IF !ERRORLEVEL! NEQ 0 EXIT /B !ERRORLEVEL!
)
REM Determine if dependencies should be copied
IF !DRIVER_INSTALLATION_DIRECTORY_OVERRIDDEN! EQU !TRUE! (
IF EXIST "!DRIVER_INSTALLATION_DIRECTORY!\..\" (
ECHO | SET /P=Installing cpp-driver dependencies ...
XCOPY /E /Y "!ABSOLUTE_DEPENDENCIES_LIBRARIES_DIRECTORY!" "!DRIVER_INSTALLATION_DIRECTORY!\..\" >> "!LOG_DRIVER_BUILD!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !LOG_DRIVER_BUILD! for more details
)
ECHO done.
)
)
REM Display success message with location to built driver library
ECHO.
IF !DRIVER_GENERATE_SOLUTION! EQU !TRUE! (
ECHO Visual Studio !VISUAL_STUDIO_INTERNAL_SHORTHAND_VERSION! solution has been successfully generated
ECHO !ABSOLUTE_BUILD_DIRECTORY!\!DRIVER_DRIVER_DIRECTORY!\cassandra.sln
) ELSE (
ECHO Driver has been successfully built [!TARGET_ARCHITECTURE!-bit !BUILD_TYPE!]
ECHO !DRIVER_INSTALLATION_DIRECTORY!
)
) ELSE (
REM Display success message with location to built dependencies
ECHO.
ECHO Dependencies have been successfully built [!TARGET_ARCHITECTURE!-bit !BUILD_TYPE!]
ECHO !ABSOLUTE_DEPENDENCIES_DIRECTORY!
)
) ELSE (
REM Ensure the Windows SDK version is undefined (unset)
IF DEFINED WindowsSDKDir SET WindowsSDKDir=
REM Store current Visual Studio tools environment variables
FOR %%A IN (!VISUAL_STUDIO_INTERNAL_VERSIONS!) DO (
SET "STORED_VS%%ACOMNTOOLS=!VS%%ACOMNTOOLS!"
)
REM Iterate through all available Visual Studio versions
SET INDEX=0
SET "STORED_PATH=!PATH!"
FOR %%A IN (!AVAILABLE_VISUAL_STUDIO_VERSIONS!) DO (
SET /A INDEX+=1
CALL :GETARRAYELEMENT VISUAL_STUDIO_VERSIONS %%A VISUAL_STUDIO_VERSION
CALL :GETARRAYELEMENT AVAILABLE_VISUAL_STUDIO_VERSIONS !INDEX! USER_SELECTION
CALL :GETARRAYELEMENT VISUAL_STUDIO_INTERNAL_VERSIONS !USER_SELECTION! VISUAL_STUDIO_INTERNAL_VERSION
CALL :GETARRAYELEMENT VISUAL_STUDIO_INTERNAL_SHORTHAND_VERSIONS !USER_SELECTION! VISUAL_STUDIO_INTERNAL_SHORTHAND_VERSION
CALL :GETARRAYELEMENT VISUAL_STUDIO_VERSIONS !USER_SELECTION! VISUAL_STUDIO_VERSION
REM Determine if both 32 and 64-bit targets can be built
SET AVAILABLE_TARGET_ARCHITECTURES=!ARCHITECTURE_32BIT!
IF !SYSTEM_ARCHITECTURE! EQU !ARCHITECTURE_64BIT! (
SET "AVAILABLE_TARGET_ARCHITECTURES=!AVAILABLE_TARGET_ARCHITECTURES! !ARCHITECTURE_64BIT!"
)
REM Ensure the other versions of VSXXXCOMNTOOLS are undefined (unset)
FOR %%B IN (!VISUAL_STUDIO_INTERNAL_VERSIONS!) DO (
SET VS%%BCOMNTOOLS=
IF %%B EQU !VISUAL_STUDIO_INTERNAL_VERSION! SET "VS%%BCOMNTOOLS=!STORED_VS%%BCOMNTOOLS!"
)
REM Iterate through all available target architectures
FOR %%C IN (!AVAILABLE_TARGET_ARCHITECTURES!) DO (
REM Setup the Visual Studio environment
CALL :CONFIGUREVISUALSTUDIOENVIRONMENT !VISUAL_STUDIO_INTERNAL_VERSION! %%C
CALL :GETFULLPATH "!DEVENV!" DEVENV_FOUND
CALL :GETFULLPATH "!MSBUILD!" MSBUILD_FOUND
CALL :GETFULLPATH "!NMAKE!" NMAKE_FOUND
REM Create the base installation locations
SET DRIVER_PACKAGE_INSTALLATION_DIRECTORY=win%%C\msvc!VISUAL_STUDIO_INTERNAL_VERSION!
SET DEPENDENCY_PACKAGE_INSTALLATION_DIRECTORY=!DRIVER_PACKAGE_INSTALLATION_DIRECTORY!\!DEPENDENCIES_DIRECTORY!
SET "ABSOLUTE_DRIVER_PACKAGE_INSTALLATION_DIRECTORY=!ABSOLUTE_PACKAGES_DIRECTORY!\!DRIVER_PACKAGE_INSTALLATION_DIRECTORY!"
REM Iterate through shared and static builds
FOR %%D IN (!LIBRARY_TYPE_SHARED! !LIBRARY_TYPE_STATIC!) DO (
REM Display summary of build options
ECHO Building %%D Visual Studio !VISUAL_STUDIO_VERSION! Win%%C Package
REM Create the installation locations
CALL :LOWERCASE %%D LOWERCASE_LIBRARY_TYPE
SET DEPENDENCY_PACKAGE_LIBUV_INSTALLATION_DIRECTORY=!DEPENDENCY_PACKAGE_INSTALLATION_DIRECTORY!\!LIBUV_DIRECTORY!\!LOWERCASE_LIBRARY_TYPE!
SET DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY=!DEPENDENCY_PACKAGE_INSTALLATION_DIRECTORY!\!OPENSSL_DIRECTORY!\!LOWERCASE_LIBRARY_TYPE!
SET "ABSOLUTE_DEPENDENCY_PACKAGE_LIBUV_INSTALLATION_DIRECTORY=!ABSOLUTE_PACKAGES_DIRECTORY!\!DEPENDENCY_PACKAGE_LIBUV_INSTALLATION_DIRECTORY!"
SET "ABSOLUTE_DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY=!ABSOLUTE_PACKAGES_DIRECTORY!\!DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY!"
REM Build the dependencies and driver
CALL :BUILDLIBUV "!ABSOLUTE_DEPENDENCIES_DIRECTORY!\!DEPENDENCIES_SOURCE_DIRECTORY!\!LIBUV_DIRECTORY!" "!ABSOLUTE_DEPENDENCY_PACKAGE_LIBUV_INSTALLATION_DIRECTORY!" %%C %%D !FALSE! !TRUE! "!LOG_LIBUV_BUILD!"
IF !ERRORLEVEL! NEQ 0 EXIT /B !ERRORLEVEL!
CALL :BUILDOPENSSL "!ABSOLUTE_DEPENDENCIES_DIRECTORY!\!DEPENDENCIES_SOURCE_DIRECTORY!\!OPENSSL_DIRECTORY!" "!ABSOLUTE_DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY!" "" %%C %%D !TRUE! "!LOG_OPENSSL_BUILD!"
IF !ERRORLEVEL! NEQ 0 EXIT /B !ERRORLEVEL!
IF !BUILD_DEPENDENCIES_ONLY! EQU !FALSE! (
IF EXIST "!ABSOLUTE_BUILD_DIRECTORY!\!DRIVER_DRIVER_DIRECTORY!" CALL :CLEANDIRECTORY "!ABSOLUTE_BUILD_DIRECTORY!\!DRIVER_DRIVER_DIRECTORY!" "Cleaning driver library directory"
SET BOOST_DEPENDENCY_SOURCE_DIRECTORY=
IF !VISUAL_STUDIO_VERSION! EQU 2010 SET "BOOST_DEPENDENCY_SOURCE_DIRECTORY=!ABSOLUTE_DEPENDENCIES_DIRECTORY!\!DEPENDENCIES_SOURCE_DIRECTORY!\!BOOST_DIRECTORY!"
CALL :BUILDDRIVER "!ABSOLUTE_BATCH_DIRECTORY!" "!ABSOLUTE_BUILD_DIRECTORY!\!DRIVER_DRIVER_DIRECTORY!" "!ABSOLUTE_DRIVER_PACKAGE_INSTALLATION_DIRECTORY!" "!ABSOLUTE_DEPENDENCY_PACKAGE_LIBUV_INSTALLATION_DIRECTORY!" "!ABSOLUTE_DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY!" "" "" "" !BUILD_TYPE_RELEASE! %%C %%D !VISUAL_STUDIO_INTERNAL_SHORTHAND_VERSION! !FALSE! !FALSE! !FALSE! !FALSE! !GENERATE_SOLUTION! "!BOOST_DEPENDENCY_SOURCE_DIRECTORY!" "!LOG_DRIVER_BUILD!"
IF !ERRORLEVEL! NEQ 0 EXIT /B !ERRORLEVEL!
)
REM Build libssh2 (static) as well for dependency only builds
IF !ENABLE_LIBSSH2! EQU !TRUE! (
IF "%%D" == "!LIBRARY_TYPE_STATIC!" (
SET DEPENDENCY_PACKAGE_LIBSSH2_INSTALLATION_DIRECTORY=!DEPENDENCY_PACKAGE_INSTALLATION_DIRECTORY!\!LIBSSH2_DIRECTORY!
SET "ABSOLUTE_DEPENDENCY_PACKAGE_LIBSSH2_INSTALLATION_DIRECTORY=!ABSOLUTE_PACKAGES_DIRECTORY!\!DEPENDENCY_PACKAGE_LIBSSH2_INSTALLATION_DIRECTORY!"
CALL :BUILDLIBSSH2 "!ABSOLUTE_DEPENDENCIES_DIRECTORY!\!DEPENDENCIES_SOURCE_DIRECTORY!\!LIBSSH2_DIRECTORY!" "!ABSOLUTE_DEPENDENCY_PACKAGE_LIBSSH2_INSTALLATION_DIRECTORY!" "!ABSOLUTE_DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY!" "" %%C !VISUAL_STUDIO_INTERNAL_SHORTHAND_VERSION! !TRUE! "!LOG_LIBSSH2_BUILD!"
IF !ERRORLEVEL! NEQ 0 EXIT /B !ERRORLEVEL!
)
)
REM Clean-up the dependency packages
IF NOT EXIST "!ABSOLUTE_DEPENDENCY_PACKAGE_LIBUV_INSTALLATION_DIRECTORY!\..\!LIBRARY_INCLUDE_DIRECTORY!" MOVE /Y "!ABSOLUTE_DEPENDENCY_PACKAGE_LIBUV_INSTALLATION_DIRECTORY!\!LIBRARY_INCLUDE_DIRECTORY!" "!ABSOLUTE_DEPENDENCY_PACKAGE_LIBUV_INSTALLATION_DIRECTORY!\..\!LIBRARY_INCLUDE_DIRECTORY!" >> "!LOG_PACKAGE_BUILD!" 2>&1
IF EXIST "!ABSOLUTE_DEPENDENCY_PACKAGE_LIBUV_INSTALLATION_DIRECTORY!\!LIBRARY_INCLUDE_DIRECTORY!" RMDIR /S /Q "!ABSOLUTE_DEPENDENCY_PACKAGE_LIBUV_INSTALLATION_DIRECTORY!\!LIBRARY_INCLUDE_DIRECTORY!" >> "!LOG_PACKAGE_BUILD!" 2>&1
IF NOT EXIST "!ABSOLUTE_DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY!\..\!LIBRARY_INCLUDE_DIRECTORY!" MOVE /Y "!ABSOLUTE_DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY!\!LIBRARY_INCLUDE_DIRECTORY!" "!ABSOLUTE_DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY!\..\!LIBRARY_INCLUDE_DIRECTORY!" >> "!LOG_PACKAGE_BUILD!" 2>&1
IF NOT EXIST "!ABSOLUTE_DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY!\openssl.cnf" MOVE /Y "!ABSOLUTE_DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY!\openssl.cnf" "!ABSOLUTE_DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY!" >> "!LOG_PACKAGE_BUILD!" 2>&1
IF EXIST "!ABSOLUTE_DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY!\!LIBRARY_INCLUDE_DIRECTORY!" RMDIR /S /Q "!ABSOLUTE_DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY!\!LIBRARY_INCLUDE_DIRECTORY!" >> "!LOG_PACKAGE_BUILD!" 2>&1
IF EXIST "!ABSOLUTE_DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY!\openssl.cnf" ERASE /S /Q "!ABSOLUTE_DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY!\openssl.cnf" >> "!LOG_PACKAGE_BUILD!" 2>&1
REM Copy distribution files into packages
IF NOT EXIST "!ABSOLUTE_DEPENDENCY_PACKAGE_LIBUV_INSTALLATION_DIRECTORY!\..\LICENSE" COPY /Y "!ABSOLUTE_DEPENDENCIES_DIRECTORY!\!DEPENDENCIES_SOURCE_DIRECTORY!\!LIBUV_DIRECTORY!\LICENSE" "!ABSOLUTE_DEPENDENCY_PACKAGE_LIBUV_INSTALLATION_DIRECTORY!\.." >> "!LOG_PACKAGE_BUILD!" 2>&1
IF NOT EXIST "!ABSOLUTE_DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY!\..\LICENSE" COPY /Y "!ABSOLUTE_DEPENDENCIES_DIRECTORY!\!DEPENDENCIES_SOURCE_DIRECTORY!\!OPENSSL_DIRECTORY!\LICENSE" "!ABSOLUTE_DEPENDENCY_PACKAGE_OPENSSL_INSTALLATION_DIRECTORY!\.." >> "!LOG_PACKAGE_BUILD!" 2>&1
IF !BUILD_DEPENDENCIES_ONLY! EQU !FALSE! (
IF NOT EXIST "!ABSOLUTE_DRIVER_PACKAGE_INSTALLATION_DIRECTORY!\CHANGELOG.md" COPY /Y "!ABSOLUTE_BATCH_DIRECTORY!\CHANGELOG.md" "!ABSOLUTE_DRIVER_PACKAGE_INSTALLATION_DIRECTORY!" >> "!LOG_PACKAGE_BUILD!" 2>&1
IF NOT EXIST "!ABSOLUTE_DRIVER_PACKAGE_INSTALLATION_DIRECTORY!\LICENSE.txt" COPY /Y "!ABSOLUTE_BATCH_DIRECTORY!\LICENSE.txt" "!ABSOLUTE_DRIVER_PACKAGE_INSTALLATION_DIRECTORY!" >> "!LOG_PACKAGE_BUILD!" 2>&1
IF NOT EXIST "!ABSOLUTE_DRIVER_PACKAGE_INSTALLATION_DIRECTORY!\README.md" COPY /Y "!ABSOLUTE_BATCH_DIRECTORY!\README.md" "!ABSOLUTE_DRIVER_PACKAGE_INSTALLATION_DIRECTORY!" >> "!LOG_PACKAGE_BUILD!" 2>&1
)
REM Skip a line on the display
ECHO.
)
REM Build the zip packages for the current target architecture and Visual Studio version
IF !BUILD_DEPENDENCIES_ONLY! EQU !FALSE! (
ECHO | SET /P=Building the driver package for Win%%C MSVC!VISUAL_STUDIO_INTERNAL_VERSION! ...
ECHO !ZIP! a -tzip !ABSOLUTE_PACKAGES_DIRECTORY!\!BUILD_PACKAGE_PREFIX!-!BUILD_PACKAGE_VERSION!-win%%C-msvc!VISUAL_STUDIO_INTERNAL_VERSION!.zip -r !ABSOLUTE_DRIVER_PACKAGE_INSTALLATION_DIRECTORY!\ -xr^^!!DEPENDENCIES_DIRECTORY! >> "!LOG_PACKAGE_BUILD!"
!ZIP! a -tzip "!ABSOLUTE_PACKAGES_DIRECTORY!\!BUILD_PACKAGE_PREFIX!-!BUILD_PACKAGE_VERSION!-win%%C-msvc!VISUAL_STUDIO_INTERNAL_VERSION!.zip" -r "!ABSOLUTE_DRIVER_PACKAGE_INSTALLATION_DIRECTORY!\*" -xr^^!!DEPENDENCIES_DIRECTORY! >> "!LOG_PACKAGE_BUILD!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !LOG_PACKAGE_BUILD! for more details
EXIT /B !EXIT_CODE_PACKAGE_FAILED!
)
ECHO done.
)
ECHO | SET /P=Building the libuv package for Win%%C MSVC!VISUAL_STUDIO_INTERNAL_VERSION! ...
ECHO !ZIP! a -tzip "!ABSOLUTE_PACKAGES_DIRECTORY!\libuv-!LIBUV_PACKAGE_VERSION!-win%%C-msvc!VISUAL_STUDIO_INTERNAL_VERSION!.zip" -r !ABSOLUTE_DRIVER_PACKAGE_INSTALLATION_DIRECTORY!\!DEPENDENCIES_DIRECTORY!\!LIBUV_DIRECTORY!\ >> "!LOG_PACKAGE_BUILD!"
!ZIP! a -tzip "!ABSOLUTE_PACKAGES_DIRECTORY!\libuv-!LIBUV_PACKAGE_VERSION!-win%%C-msvc!VISUAL_STUDIO_INTERNAL_VERSION!.zip" -r "!ABSOLUTE_DRIVER_PACKAGE_INSTALLATION_DIRECTORY!\!DEPENDENCIES_DIRECTORY!\!LIBUV_DIRECTORY!\*" >> "!LOG_PACKAGE_BUILD!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !LOG_PACKAGE_BUILD! for more details
EXIT /B !EXIT_CODE_PACKAGE_FAILED!
)
ECHO done.
ECHO | SET /P=Building the OpenSSL package for Win%%C MSVC!VISUAL_STUDIO_INTERNAL_VERSION! ...
ECHO !ZIP! a -tzip !ABSOLUTE_PACKAGES_DIRECTORY!\openssl-!OPENSSL_PACKAGE_VERSION!-win%%C-msvc!VISUAL_STUDIO_INTERNAL_VERSION!.zip -r !ABSOLUTE_DRIVER_PACKAGE_INSTALLATION_DIRECTORY!\!OPENSSL_DIRECTORY!\ >> "!LOG_PACKAGE_BUILD!"
!ZIP! a -tzip "!ABSOLUTE_PACKAGES_DIRECTORY!\openssl-!OPENSSL_PACKAGE_VERSION!-win%%C-msvc!VISUAL_STUDIO_INTERNAL_VERSION!.zip" -r "!ABSOLUTE_DRIVER_PACKAGE_INSTALLATION_DIRECTORY!\!DEPENDENCIES_DIRECTORY!\!OPENSSL_DIRECTORY!\*" >> "!LOG_PACKAGE_BUILD!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !LOG_PACKAGE_BUILD! for more details
EXIT /B !EXIT_CODE_PACKAGE_FAILED!
)
ECHO done.
IF !ENABLE_LIBSSH2! EQU !TRUE! (
ECHO | SET /P=Building the libssh2 package for Win%%C MSVC!VISUAL_STUDIO_INTERNAL_VERSION! ...
ECHO !ZIP! a -tzip "!ABSOLUTE_PACKAGES_DIRECTORY!\libssh2-!LIBSSH2_PACKAGE_VERSION!-win%%C-msvc!VISUAL_STUDIO_INTERNAL_VERSION!.zip" -r !ABSOLUTE_DRIVER_PACKAGE_INSTALLATION_DIRECTORY!\!DEPENDENCIES_DIRECTORY!\!LIBSSH2_DIRECTORY!\ >> "!LOG_PACKAGE_BUILD!"
!ZIP! a -tzip "!ABSOLUTE_PACKAGES_DIRECTORY!\libssh2-!LIBSSH2_PACKAGE_VERSION!-win%%C-msvc!VISUAL_STUDIO_INTERNAL_VERSION!.zip" -r "!ABSOLUTE_DRIVER_PACKAGE_INSTALLATION_DIRECTORY!\!DEPENDENCIES_DIRECTORY!\!LIBSSH2_DIRECTORY!\*" >> "!LOG_PACKAGE_BUILD!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !LOG_PACKAGE_BUILD! for more details
EXIT /B !EXIT_CODE_PACKAGE_FAILED!
)
ECHO done.
)
ECHO.
REM Reset the system PATH
SET "PATH=!STORED_PATH!"
)
)
)
REM Disable delayed expansion
ENDLOCAL
REM Exit the batch operation (Ensures below functions are skipped)
EXIT /B
REM Convert a string to uppercase
REM
REM @param string String to convert to uppercase
REM @param return Uppercase converted string
:UPPERCASE [string] [return]
SET "UPPERCASE_ALPHABET=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
SET RETURN=%~1
FOR %%A IN (!UPPERCASE_ALPHABET!) DO SET RETURN=!RETURN:%%A=%%A!
SET %2=!RETURN!
GOTO:EOF
REM Convert a string to lowercase
REM
REM @param string String to convert to lowercase
REM @param return Lowercase converted string
:LOWERCASE [string] [return]
SET "LOWERCASE_ALPHABET=a b c d e f g h i j k l m n o p q r s t u v w x y z"
SET RETURN=%~1
FOR %%A IN (!LOWERCASE_ALPHABET!) DO SET RETURN=!RETURN:%%A=%%A!
SET %2=!RETURN!
GOTO:EOF
REM Display the help message and exit with error code
:DISPLAYHELP
CALL :UPPERCASE !BATCH_FILENAME! BATCH_FILENAME_UPPERCASE
ECHO Usage: !BATCH_FILENAME_UPPERCASE! [OPTION...]
ECHO.
ECHO !ARGUMENT_BUILD_TYPE_DEBUG! Enable debug build
ECHO !ARGUMENT_BUILD_TYPE_RELEASE! Enable release build ^(default^)
ECHO !ARGUMENT_DISABLE_CLEAN_BUILD! Disable clean build
ECHO !ARGUMENT_BUILD_DEPENDENCIES_ONLY! Build dependencies only
ECHO !ARGUMENT_TARGET_COMPILER! [version] 140, 120, 110, 100, or WINSDK
ECHO !ARGUMENT_DISABLE_OPENSSL! Disable OpenSSL support
ECHO !ARGUMENT_ENABLE_EXAMPLES! Enable example builds
ECHO !ARGUMENT_ENABLE_BUILD_PACKAGES! [version] Enable package generation
ECHO !ARGUMENT_ENABLE_ZLIB! Enable zlib
ECHO !ARGUMENT_GENERATE_SOLUTION! Generate Visual Studio solution
ECHO !ARGUMENT_INSTALLATION_DIRECTORY! [install-dir] Override installation directory
ECHO !ARGUMENT_LIBRARY_TYPE_SHARED! Build shared library ^(default^)
ECHO !ARGUMENT_LIBRARY_TYPE_STATIC! Build static library
IF !SYSTEM_ARCHITECTURE! EQU !ARCHITECTURE_32BIT! (
ECHO !ARGUMENT_TARGET_ARCHITECTURE_32BIT! Target 32-bit build ^(default^)
ECHO !ARGUMENT_TARGET_ARCHITECTURE_64BIT! Target 64-bit build
) ELSE (
ECHO !ARGUMENT_TARGET_ARCHITECTURE_32BIT! Target 32-bit build
ECHO !ARGUMENT_TARGET_ARCHITECTURE_64BIT! Target 64-bit build ^(default^)
)
ECHO !ARGUMENT_USE_BOOST_ATOMIC! Use Boost atomic
ECHO.
ECHO Testing Arguments
ECHO.
ECHO !ARGUMENT_ENABLE_TESTS!
ECHO [boost-root-dir] Enable test builds
ECHO !ARGUMENT_ENABLE_INTEGRATION_TESTS!
ECHO [boost-root-dir] Enable integration tests build
ECHO !ARGUMENT_ENABLE_UNIT_TESTS!
ECHO [boost-root-dir] Enable unit tests build
ECHO !ARGUMENT_ENABLE_LIBSSH2! Enable libssh2 ^(remote server testing^)
ECHO.
ECHO !ARGUMENT_HELP! Display this message
EXIT /B
REM Get an element from an array
REM
REM @param array Global array to iterate through
REM @param index Index to retrieve
REM @param return Variable to assign retrieved value
:GETARRAYELEMENT [array] [index] [return]
FOR /F "TOKENS=%~2" %%A IN ("!%~1!") DO SET %~3=%%A
EXIT /B
REM Get a value from a key=value pair in an environment variable
REM
REM @param pair Key/Value pair to parse
REM @param return Value parsed from key/value pair
:GETVALUE [pair] [return]
FOR /F "TOKENS=1,2* DELIMS==" %%A IN ('SET %~1') DO SET %~2=%%B
EXIT /B
REM Get full path for a given executable in the system PATH
REM
REM @param executable Executable to search for in PATH
REM @param return Full path with executable
:GETFULLPATH [executable] [return]
FOR %%A IN ("%~1") DO SET %~2=%%~$PATH:A
EXIT /B
REM Compare two version numbers
REM
REM @param version-one Version to compare against another version number
REM @param version-two Version to compare against another version number
REM @return 1 if version-one > version-two
REM 0 if version-one == version-two
REM -1 if version-one < version-two
:COMPAREVERSION [version-one] [version-two]
CALL :GETVERSIONINFORMATION %~1 VERSION_ONE_MAJOR VERSION_ONE_MINOR VERSION_ONE_PATCH
CALL :GETVERSIONINFORMATION %~2 VERSION_TWO_MAJOR VERSION_TWO_MINOR VERSION_TWO_PATCH
IF !VERSION_ONE_MAJOR! GTR !VERSION_TWO_MAJOR! EXIT /B 1
IF !VERSION_ONE_MAJOR! LSS !VERSION_TWO_MAJOR! EXIT /B -1
IF NOT DEFINED VERSION_ONE_MINOR IF NOT DEFINED VERSION_TWO_MINOR EXIT /B 0
IF !VERSION_ONE_MINOR! GTR !VERSION_TWO_MINOR! EXIT /B 1
IF !VERSION_ONE_MINOR! LSS !VERSION_TWO_MINOR! EXIT /B -1
IF NOT DEFINED VERSION_ONE_PATCH IF NOT DEFINED VERSION_TWO_PATCH EXIT /B 0
IF !VERSION_ONE_PATCH! GTR !VERSION_TWO_PATCH! EXIT /B 1
IF !VERSION_ONE_PATCH! LSS !VERSION_TWO_PATCH! EXIT /B -1
EXIT /B 0
REM Get version breakdown [major.minor.patch]
REM
REM @param version String representing the full version
REM @param return-major Major version number parsed from version
REM @param return-minor Minor version number parsed from version
REM @param return-patch Patch version number parsed from version
:GETVERSIONINFORMATION [version] [return-major] [return-minor] [return-patch]
FOR /F "TOKENS=1,2,3* DELIMS=." %%A IN ("%~1") DO (
SET %~2=%%A
SET %~3=%%B
SET %~4=%%C
)
EXIT /B
REM Configure the Windows SDK environment
REM
REM @param build-type Debug or release
REM @param target-architecture 32 or 64-bit
:CONFIGUREWINDOWSSDKENVIRONMENT [build-type] [target-architecture]
REM Ensure Windows SDK environment is configured correctly
IF "%~1" == "!BUILD_TYPE_DEBUG!" CALL SetEnv /Debug > NUL 2>&1
IF "%~1" == "!BUILD_TYPE_RELEASE!" CALL SetEnv /Release > NUL 2>&1
IF "%~2" == "!ARCHITECTURE_32BIT!" CALL SetEnv /x86 > NUL 2>&1
IF "%~2" == "!ARCHITECTURE_64BIT!" CALL SetEnv /x64 > NUL 2>&1
EXIT /B
REM Configure Visual Studio environment
REM
REM @param internal-version Visual Studio internal version (e.b 100, 110,
REM 120, 140, WINSDK)
REM @param target-architecture 32 or 64-bit
:CONFIGUREVISUALSTUDIOENVIRONMENT [internal-version] [target-architecture]
SET VISUAL_STUDIO_ENVIRONMENT_VARIABLE=VS%~1COMNTOOLS
CALL :GETVALUE !VISUAL_STUDIO_ENVIRONMENT_VARIABLE! VISUAL_STUDIO_COMMON_TOOLS_DIRECTORY
IF %~2 EQU !ARCHITECTURE_32BIT! (
IF NOT EXIST "!VISUAL_STUDIO_COMMON_TOOLS_DIRECTORY!\vsvars32.bat" (
ECHO Unable to Setup 32-bit Build Environment: !VISUAL_STUDIO_COMMON_TOOLS_DIRECTORY!\vsvars32.bat is missing
EXIT /B !EXIT_CODE_MISSING_VISUAL_STUDIO!
)
CALL "!VISUAL_STUDIO_COMMON_TOOLS_DIRECTORY!\vsvars32.bat"
) ELSE (
IF NOT EXIST "!VISUAL_STUDIO_COMMON_TOOLS_DIRECTORY!\..\..\VC\bin\x86_amd64\vcvarsx86_amd64.bat" (
ECHO Unable to Setup 64-bit Build Environment: !VISUAL_STUDIO_COMMON_TOOLS_DIRECTORY!\..\..\VC\bin\x86_amd64\vcvarsx86_amd64.bat is missing
EXIT /B !EXIT_CODE_MISSING_VISUAL_STUDIO!
)
CALL "!VISUAL_STUDIO_COMMON_TOOLS_DIRECTORY!\..\..\VC\bin\x86_amd64\vcvarsx86_amd64.bat"
)
EXIT /B
REM Clean/Delete a directory
REM
REM @param directory Directory to clean
REM @param message Message to display during clean
:CLEANDIRECTORY [directory] [message]
IF EXIST "%~1" (
ECHO | SET /P=%~2 ...
RMDIR /S /Q "%~1" > NUL 2>&1
IF NOT EXIST "%~1" (
ECHO done.
) ELSE (
ECHO not fully cleaned ... directory is in use.
)
)
EXIT /B
REM Shorten a directory/path
REM
REM @param directory Directory to shorten
REM @parem return-directory Shortened directory
:SHORTENPATH [directory] [return-directory]
FOR %%A IN ("%~1") DO SET %~2=%%~SA
EXIT /B
REM Build the libuv library
REM
REM @param source-directory Location of libuv source
REM @param install-directory Location to install libuv library
REM @param target-architecture 32 or 64-bit
REM @param library-type Shared or static
REM @param is-windows-sdk True if building with Windows SDK; false otherwise
REM @param is-clean-after-install True if clean should be performed after
REM install; false otherwise
REM @param log-filename Absolute path and filename for log output
:BUILDLIBUV [source-directory] [install-directory] [target-architecture] [library-type] [is-windows-sdk-build] [is-clean-after-install] [log-filename]
REM Create library variables from arguments
SET "LIBUV_SOURCE_DIRECTORY=%~1"
SHIFT
SET "LIBUV_INSTALL_DIRECTORY=%~1"
SHIFT
SET LIBUV_TARGET_ARCHITECTURE=%~1
SHIFT
SET "LIBUV_LIBRARY_TYPE=%~1"
SHIFT
SET LIBUV_IS_WINDOWS_SDK_BUILD=%~1
SHIFT
SET LIBUV_IS_CLEAN_AFTER_INSTALL=%~1
SHIFT
SET "LIBUV_LOG_FILENAME=%~1"
REM Build libuv dependency
ECHO Building libuv
PUSHD "!LIBUV_SOURCE_DIRECTORY!" > NUL
IF !LIBUV_TARGET_ARCHITECTURE! EQU !ARCHITECTURE_32BIT! (
SET LIBUV_TARGET_ARCHITECTURE=x86
SET LIBUV_VC_TARGET_ARCHITECTURE=Win32
) ELSE (
SET LIBUV_TARGET_ARCHITECTURE=x64
SET LIBUV_VC_TARGET_ARCHITECTURE=x64
)
IF "!LIBUV_LIBRARY_TYPE!" == "!LIBRARY_TYPE_SHARED!" (
SET LIBUV_LIBRARY_TYPE=shared
) ELSE (
SET LIBUV_LIBRARY_TYPE=static
)
ECHO | SET /P=Configuring libuv ...
REM Modify the libuv build script to ensure proper Visual Studio detection
SET LIBUV_VCBUILD_SCRIPT=vcbuild.bat
IF "!LIBUV_IS_WINDOWS_SDK_BUILD!" == "!FALSE!" (
SET LIBUV_VCBUILD_SCRIPT=vcbuild-modified.bat
TYPE vcbuild.bat | FINDSTR /V /C:"if defined WindowsSDKDir goto select-target" | FINDSTR /V /C:"if defined VCINSTALLDIR goto select-target" > !LIBUV_VCBUILD_SCRIPT!
)
REM Handle long PATH issues that can be manifested by calling vcvarsall.bat
IF DEFINED INCLUDE (
SET "STORED_INCLUDE=!INCLUDE!"
SET INCLUDE=
)
IF DEFINED LIB (
SET "STORED_LIB=!LIB!"
SET LIB=
)
IF DEFINED LIBPATH (
SET "STORED_LIBPATH=!LIBPATH!"
SET LIBPATH=
)
IF DEFINED STORED_PATH (
SET BEFORE_BATCH_CALL_PATH=!PATH!
SET PATH=!STORED_PATH!
)
ECHO !LIBUV_VCBUILD_SCRIPT! release nobuild !LIBUV_TARGET_ARCHITECTURE! !LIBUV_LIBRARY_TYPE! >> "!LIBUV_LOG_FILENAME!"
CALL !LIBUV_VCBUILD_SCRIPT! release nobuild !LIBUV_TARGET_ARCHITECTURE! !LIBUV_LIBRARY_TYPE! >> "!LIBUV_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !LIBUV_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DEPENDENCY_FAILED!
)
ECHO done.
REM Restore PATH (if necessary)
IF DEFINED STORED_INCLUDE (
SET "INCLUDE=!STORED_INCLUDE!"
SET STORED_INCLUDE=
)
IF DEFINED STORED_LIB (
SET "LIB=!STORED_LIB!"
SET STORED_LIB=
)
IF DEFINED STORED_LIBPATH (
SET "LIBPATH=!STORED_LIBPATH!"
SET STORED_LIBPATH=
)
IF DEFINED BEFORE_BATCH_CALL_PATH (
SET "PATH=!BEFORE_BATCH_CALL_PATH!"
SET BEFORE_BATCH_CALL_PATH=
)
ECHO | SET /P=Building libuv ...
ECHO !MSBUILD! uv.sln /T:libuv /P:Configuration=Release /P:Platform=!LIBUV_VC_TARGET_ARCHITECTURE! /CLP:NoSummary;NoItemAndPropertyList;Verbosity=minimal /NOLOGO >> "!LIBUV_LOG_FILENAME!"
!MSBUILD! uv.sln /T:libuv /P:Configuration=Release /P:Platform=!LIBUV_VC_TARGET_ARCHITECTURE! /CLP:NoSummary;NoItemAndPropertyList;Verbosity=minimal /NOLOGO >> "!LIBUV_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !LIBUV_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DEPENDENCY_FAILED!
)
ECHO done.
ECHO | SET /P=Installing libuv ...
MKDIR "!LIBUV_INSTALL_DIRECTORY!\!LIBRARY_INCLUDE_DIRECTORY!"
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !LIBUV_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DEPENDENCY_FAILED!
)
XCOPY /E /Y include "!LIBUV_INSTALL_DIRECTORY!\!LIBRARY_INCLUDE_DIRECTORY!" >> "!LIBUV_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !LIBUV_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DEPENDENCY_FAILED!
)
MKDIR "!LIBUV_INSTALL_DIRECTORY!\!LIBRARY_BINARY_DIRECTORY!"
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !LIBUV_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DEPENDENCY_FAILED!
)
XCOPY /E /Y Release\lib "!LIBUV_INSTALL_DIRECTORY!\!LIBRARY_BINARY_DIRECTORY!" >> "!LIBUV_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
REM Try again in the other location libuv likes to put files
XCOPY /Y Release\*.* "!LIBUV_INSTALL_DIRECTORY!\!LIBRARY_BINARY_DIRECTORY!" >> "!LIBUV_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !LIBUV_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DEPENDENCY_FAILED!
)
)
ECHO done.
IF "!LIBUV_IS_CLEAN_AFTER_INSTALL!" == "!TRUE!" (
ECHO | SET /P=Cleaning libuv build ...
ECHO !MSBUILD! uv.sln /T:Clean /P:Configuration=Release /P:Platform=!LIBUV_VC_TARGET_ARCHITECTURE! /CLP:NoSummary;NoItemAndPropertyList;Verbosity=minimal /NOLOGO >> "!LIBUV_LOG_FILENAME!"
!MSBUILD! uv.sln /T:Clean /P:Configuration=Release /P:Platform=!LIBUV_VC_TARGET_ARCHITECTURE! /CLP:NoSummary;NoItemAndPropertyList;Verbosity=minimal /NOLOGO >> "!LIBUV_LOG_FILENAME!" 2>&1
IF EXIST Release RMDIR /S /Q Release >> "!LIBUV_LOG_FILENAME!" 2>&1
ECHO done.
)
POPD
EXIT /B
REM Build OpenSSL library
REM
REM @param source-directory Location of OpenSSL source
REM @param install-directory Location to install OpenSSL library
REM @param zlib-library-directory Library directory for zlib; empty string
REM indicates zlib disabled
REM @param target-architecture 32 or 64-bit
REM @param library-type Shared or static
REM @param is-clean-after-install True if clean should be performed after
REM install; false otherwise
REM @param log-filename Absolute path and filename for log output
:BUILDOPENSSL [source-directory] [install-directory] [zlib-library-directory] [target-architecture] [library-type] [is-clean-after-install] [log-filename]
REM Create library variables from arguments
SET "OPENSSL_SOURCE_DIRECTORY=%~1"
SHIFT
SET "OPENSSL_INSTALL_DIRECTORY=%~1"
SHIFT
SET "DEPENDENCY_ZLIB_LIBRARY_DIRECTORY=%~1"
SHIFT
SET OPENSSL_TARGET_ARCHITECTURE=%~1
SHIFT
SET "OPENSSL_LIBRARY_TYPE=%~1"
SHIFT
SET OPENSSL_IS_CLEAN_AFTER_INSTALL=%~1
SHIFT
SET "OPENSSL_LOG_FILENAME=%~1"
REM Build OpenSSL dependency
ECHO Building OpenSSL
PUSHD "!OPENSSL_SOURCE_DIRECTORY!" > NUL
ECHO | SET /P=Configuring OpenSSL ...
SET "OPENSSL_CONFIGURE_OPTIONS=Configure"
IF !OPENSSL_TARGET_ARCHITECTURE! EQU !ARCHITECTURE_32BIT! (
SET "OPENSSL_CONFIGURE_OPTIONS=!OPENSSL_CONFIGURE_OPTIONS! VC-WIN32 no-asm"
) ELSE (
SET "OPENSSL_CONFIGURE_OPTIONS=!OPENSSL_CONFIGURE_OPTIONS! VC-WIN64A"
)
IF NOT "!DEPENDENCY_ZLIB_LIBRARY_DIRECTORY!" == "" (
REM Determine which zlib library to use (shared or static)
SET DEPENDENCY_ZLIB_LIBRARY_FILENAME=zlib.lib
IF "!OPENSSL_LIBRARY_TYPE!" == "!LIBRARY_TYPE_STATIC!" SET DEPENDENCY_ZLIB_LIBRARY_FILENAME=zlibstatic.lib
REM Add the zlib configuration options
CALL :SHORTENPATH "!DEPENDENCY_ZLIB_LIBRARY_DIRECTORY!" SHORTENED_DEPENDENCY_ZLIB_LIBRARY_DIRECTORY
SET "OPENSSL_CONFIGURE_OPTIONS=!OPENSSL_CONFIGURE_OPTIONS! zlib --with-zlib-include=^"!SHORTENED_DEPENDENCY_ZLIB_LIBRARY_DIRECTORY!\!LIBRARY_INCLUDE_DIRECTORY!^" --with-zlib-lib=^"!SHORTENED_DEPENDENCY_ZLIB_LIBRARY_DIRECTORY!\!LIBRARY_BINARY_DIRECTORY!\!DEPENDENCY_ZLIB_LIBRARY_FILENAME!^""
)
CALL :SHORTENPATH "!OPENSSL_INSTALL_DIRECTORY!" SHORTENED_OPENSSL_INSTALL_DIRECTORY
!PERL! !OPENSSL_CONFIGURE_OPTIONS! enable-static-engine --openssldir=!SHORTENED_OPENSSL_INSTALL_DIRECTORY! --prefix=!SHORTENED_OPENSSL_INSTALL_DIRECTORY! >> "!OPENSSL_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !OPENSSL_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DEPENDENCY_FAILED!
)
ECHO done.
ECHO | SET /P=Building OpenSSL ...
IF !OPENSSL_TARGET_ARCHITECTURE! EQU !ARCHITECTURE_32BIT! (
CALL ms\do_ms.bat >> "!OPENSSL_LOG_FILENAME!" 2>&1
) ELSE (
CALL ms\do_win64a.bat >> "!OPENSSL_LOG_FILENAME!" 2>&1
)
IF "!OPENSSL_LIBRARY_TYPE!" == "!LIBRARY_TYPE_SHARED!" (
SET OPENSSL_MAKEFILE=ms\ntdll.mak
) ELSE (
SET OPENSSL_MAKEFILE=ms\nt.mak
)
!NMAKE! /F !OPENSSL_MAKEFILE! >> "!OPENSSL_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !OPENSSL_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DEPENDENCY_FAILED!
)
ECHO done.
ECHO | SET /P=Installing OpenSSL ...
!NMAKE! /F !OPENSSL_MAKEFILE! install >> "!OPENSSL_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !OPENSSL_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DEPENDENCY_FAILED!
)
ECHO done.
IF !OPENSSL_IS_CLEAN_AFTER_INSTALL! EQU !TRUE! (
ECHO | SET /P=Cleaning OpenSSL build ...
!NMAKE! /F !OPENSSL_MAKEFILE! clean >> "!OPENSSL_LOG_FILENAME!" 2>&1
ECHO done.
)
POPD
EXIT /B
REM Build zlib library
REM
REM @param source-directory Location of zlib source
REM @param install-directory Location to install zlib library
REM @param log-filename Absolute path and filename for log output
:BUILDZLIB [source-directory] [install-directory] [log-filename]
REM Create library variables from arguments
SET "ZLIB_SOURCE_DIRECTORY=%~1"
SHIFT
SET "ZLIB_INSTALL_DIRECTORY=%~1"
SHIFT
SET "ZLIB_LOG_FILENAME=%~1"
REM Build zlib dependency
ECHO Building zlib
PUSHD "!ZLIB_SOURCE_DIRECTORY!" > NUL
IF NOT EXIST build MKDIR build
PUSHD build > NUL
ECHO | SET /P=Configuring zlib ...
!CMAKE! -G "NMake Makefiles" -DCMAKE_C_FLAGS_RELEASE="/MT /NDEBUG" -DCMAKE_INSTALL_PREFIX="!ZLIB_INSTALL_DIRECTORY!" -DCMAKE_BUILD_TYPE=!BUILD_TYPE_RELEASE! .. >> "!ZLIB_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !ZLIB_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DEPENDENCY_FAILED!
)
ECHO done.
ECHO | SET /P=Building zlib ...
!CMAKE! --build . --config !BUILD_TYPE_RELEASE! >> "!ZLIB_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See!ZLIB_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DEPENDENCY_FAILED!
)
ECHO done.
ECHO | SET /P=Installing zlib ...
!CMAKE! --build . --config !BUILD_TYPE_RELEASE! --target install\fast >> "!ZLIB_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !ZLIB_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DEPENDENCY_FAILED!
)
ECHO done.
POPD
POPD
EXIT /B
REM Build libssh2 library
REM
REM @param source-directory Location of libssh2 source
REM @param install-directory Location to install libssh2 library
REM @param openssl-library-directory Library directory for OpenSSL
REM @param zlib-library-directory Library directory for zlib; empty string
REM indicates zlib disabled
REM @param target-architecture 32 or 64-bit
REM @param visual-studio-version Shortened Visual Studio version; empty
REM string indicates Windows SDK build
REM @param is-clean-after-install True if clean should be performed after
REM install; false otherwise
REM @param log-filename Absolute path and filename for log output
:BUILDLIBSSH2 [source-directory] [install-directory] [openssl-library-directory] [zlib-library-directory] [target-architecture] [visual-studio-version] [is-clean-after-install] [log-filename]
REM Create library variables from arguments
SET "LIBSSH2_SOURCE_DIRECTORY=%~1"
SHIFT
SET "LIBSSH2_INSTALL_DIRECTORY=%~1"
SHIFT
SET "DEPENDENCY_OPENSSL_LIBRARY_DIRECTORY=%~1"
SHIFT
SET "DEPENDENCY_ZLIB_LIBRARY_DIRECTORY=%~1"
SHIFT
SET "LIBSSH2_TARGET_ARCHITECTURE=%~1"
SHIFT
SET "LIBSSH2_VISUAL_STUDIO_VERSION=%~1"
SHIFT
SET LIBSSH2_IS_CLEAN_AFTER_INSTALL=%~1
SHIFT
SET "LIBSSH2_LOG_FILENAME=%~1"
REM Build libssh2 dependency
IF NOT EXIST "!LIBSSH2_SOURCE_DIRECTORY!\build" MKDIR "!LIBSSH2_SOURCE_DIRECTORY!\build"
PUSHD "!LIBSSH2_SOURCE_DIRECTORY!\build" > NUL
ECHO | SET /P=Configuring libssh2 ...
IF NOT "!LIBSSH2_VISUAL_STUDIO_VERSION!" == "" (
SET "LIBSSH2_CMAKE_COMMAND_LINE=-G ^"Visual Studio !LIBSSH2_VISUAL_STUDIO_VERSION!"
IF !LIBSSH2_TARGET_ARCHITECTURE! EQU !ARCHITECTURE_64BIT! (
SET "LIBSSH2_CMAKE_COMMAND_LINE=!LIBSSH2_CMAKE_COMMAND_LINE! Win64"
)
SET "LIBSSH2_CMAKE_COMMAND_LINE=!LIBSSH2_CMAKE_COMMAND_LINE!^""
)
SET "LIBSSH2_CMAKE_COMMAND_LINE=!LIBSSH2_CMAKE_COMMAND_LINE! -DCMAKE_BUILD_TYPE=!BUILD_TYPE_RELEASE! -DCMAKE_INSTALL_PREFIX=^"!LIBSSH2_INSTALL_DIRECTORY!^" -DBUILD_SHARED_LIBS=OFF -DBUILD_EXAMPLES=OFF -DBUILD_TESTING=OFF -DOPENSSL_ROOT_DIR=^"!DEPENDENCY_OPENSSL_LIBRARY_DIRECTORY!^""
IF NOT "!DEPENDENCY_ZLIB_LIBRARY_DIRECTORY!" == "" (
SET "LIBSSH2_CMAKE_COMMAND_LINE=!LIBSSH2_CMAKE_COMMAND_LINE! -DENABLE_ZLIB_COMPRESSION=ON -DZLIB_ROOT=^"!DEPENDENCY_ZLIB_LIBRARY_DIRECTORY!^""
)
ECHO !CMAKE! !LIBSSH2_CMAKE_COMMAND_LINE! "!LIBSSH2_SOURCE_DIRECTORY!" >> "!LIBSSH2_LOG_FILENAME!" 2>&1
!CMAKE! !LIBSSH2_CMAKE_COMMAND_LINE! "!LIBSSH2_SOURCE_DIRECTORY!" >> "!LIBSSH2_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !LIBSSH2_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DEPENDENCY_FAILED!
)
ECHO done.
ECHO | SET /P=Building libssh2 ...
!CMAKE! --build . --config !BUILD_TYPE_RELEASE! >> "!LIBSSH2_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !LIBSSH2_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DEPENDENCY_FAILED!
)
ECHO done.
ECHO | SET /P=Installing libssh2 ...
!CMAKE! --build . --config !BUILD_TYPE_RELEASE! --target install >> "!LIBSSH2_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !LIBSSH2_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DEPENDENCY_FAILED!
)
ECHO done.
IF !LIBSSH2_IS_CLEAN_AFTER_INSTALL! EQU !TRUE! (
ECHO | SET /P=Cleaning libssh2 build ...
DEL /S /Q * >> "!LIBSSH2_LOG_FILENAME!" 2>&1
ECHO done.
)
POPD
EXIT /B
REM Build the driver library
REM
REM @param source-directory Location of driver source
REM @param build-directory Location of driver build directory
REM @param install-directory Location to install driver library
REM @param libuv-library-directory Library directory for libuv
REM @param openssl-library-directory Library directory for OpenSSL; empty
REM string indicates OpenSSL disabled
REM @param zlib-library-directory Library directory for zlib; empty string
REM indicates zlib is not required
REM @param boost-library-directory Library directory for Boost; empty string
REM indicates tests are disabled
REM @param libssh2-library-directory Library directory for libssh2; empty
REM string indicates tests are disabled
REM @param build-type Debug or release
REM @param target-architecture 32 or 64-bit
REM @param library-type Shared or static
REM @param visual-studio-version Shortened Visual Studio version; empty
REM string indicates Windows SDK build
REM @param build-examples True to build examples; false otherwise
REM @param build-test True to build tests; false otherwise
REM @param build-integration-test True to build integration tests; false
REM otherwise
REM @param build-unit-test True to build unit tests; false otherwise
REM @param generate-solution True to generate visual studio solution file;
REM false to perform build using NMake
REM @param boost-atomic-directory Library directory for atomic; empty string
REM indicates Boost atomic is not being used
REM @param log-filename Absolute path and filename for log output
:BUILDDRIVER [source-directory] [build-directory] [install-directory] [libuv-library-directory] [openssl-library-directory] [zlib-library-directory] [boost-library-directory] [libssh2-library-directory] [build-type] [target-architecture] [library-type] [visual-studio-version] [build-examples] [build-tests] [build-integration-tests] [build-unit-tests] [generate-solution] [boost-atomic-directory] [log-filename]
REM Create driver variables from arguments
SET "DRIVER_SOURCE_DIRECTORY=%~1"
SHIFT
SET "DRIVER_BUILD_DIRECTORY=%~1"
SHIFT
SET "DRIVER_INSTALL_DIRECTORY=%~1"
SHIFT
SET "DRIVER_LIBUV_LIBRARY_DIRECTORY=%~1"
SHIFT
SET "DRIVER_OPENSSL_LIBRARY_DIRECTORY=%~1"
SHIFT
SET "DRIVER_ZLIB_LIBRARY_DIRECTORY=%~1"
SHIFT
SET "TESTS_BOOST_LIBRARY_DIRECTORY=%~1"
SHIFT
SET "TESTS_LIBSSH2_LIBRARY_DIRECTORY=%~1"
SHIFT
SET "DRIVER_BUILD_TYPE=%~1"
SHIFT
SET "DRIVER_TARGET_ARCHITECTURE=%~1"
SHIFT
SET "DRIVER_LIBRARY_TYPE=%~1"
SHIFT
SET "DRIVER_VISUAL_STUDIO_VERSION=%~1"
SHIFT
SET "DRIVER_BUILD_EXAMPLES=%~1"
SHIFT
SET "DRIVER_BUILD_TESTS=%~1"
SHIFT
SET "DRIVER_BUILD_INTEGRATION_TESTS=%~1"
SHIFT
SET "DRIVER_BUILD_UNIT_TESTS=%~1"
SHIFT
SET "DRIVER_GENERATE_SOLUTION=%~1"
SHIFT
SET "DRIVER_BOOST_DEPENDENCY_SOURCE_DIRECTORY=%~1"
SHIFT
SET "DRIVER_LOG_FILENAME=%~1"
REM Build the driver
IF NOT EXIST "!DRIVER_BUILD_DIRECTORY!" MKDIR "!DRIVER_BUILD_DIRECTORY!"
PUSHD "!DRIVER_BUILD_DIRECTORY!" > NUL
IF !DRIVER_GENERATE_SOLUTION! EQU !TRUE! (
ECHO | SET /P=Generating driver solution ...
) ELSE (
ECHO | SET /P=Configuring driver ...
)
IF NOT "!DRIVER_VISUAL_STUDIO_VERSION!" == "" (
SET "DRIVER_CMAKE_COMMAND_LINE=-G ^"Visual Studio !DRIVER_VISUAL_STUDIO_VERSION!"
IF !DRIVER_TARGET_ARCHITECTURE! EQU !ARCHITECTURE_64BIT! (
SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! Win64"
)
SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE!^""
)
IF !DRIVER_BUILD_EXAMPLES! EQU !TRUE! (
SET DRIVER_BUILD_EXAMPLES=ON
) ELSE (
SET DRIVER_BUILD_EXAMPLES=OFF
)
SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! -DCASS_MULTICORE_COMPILATION=ON -DCMAKE_INSTALL_PREFIX=^"!DRIVER_INSTALL_DIRECTORY!^" -DCMAKE_BUILD_TYPE=!DRIVER_BUILD_TYPE! -DCASS_BUILD_EXAMPLES=!DRIVER_BUILD_EXAMPLES! -DLIBUV_ROOT_DIR=^"!DRIVER_LIBUV_LIBRARY_DIRECTORY!^""
IF NOT "!DRIVER_OPENSSL_LIBRARY_DIRECTORY!" == "" (
SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! -DCASS_USE_OPENSSL=ON -DOPENSSL_ROOT_DIR=^"!DRIVER_OPENSSL_LIBRARY_DIRECTORY!^""
) ELSE (
SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! -DCASS_USE_OPENSSL=OFF"
)
IF NOT "!DRIVER_ZLIB_LIBRARY_DIRECTORY!" == "" (
SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! -DCASS_USE_ZLIB=ON -DZLIB_ROOT_DIR=^"!DRIVER_ZLIB_LIBRARY_DIRECTORY!^""
) ELSE (
SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! -DCASS_USE_ZLIB=OFF"
)
IF "!DRIVER_LIBRARY_TYPE!" == "!LIBRARY_TYPE_SHARED!" (
SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! -DCASS_BUILD_STATIC=OFF"
SET DRIVER_VISUAL_STUDIO_TARGETS=cassandra
) ELSE (
SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! -DCASS_BUILD_STATIC=ON -DCASS_USE_STATIC_LIBS=ON"
SET DRIVER_VISUAL_STUDIO_TARGETS=cassandra_static
)
IF !DRIVER_BUILD_TESTS! EQU !TRUE! SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! -DCASS_BUILD_TESTS=ON"
IF !DRIVER_BUILD_INTEGRATION_TESTS! EQU !TRUE! SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! -DCASS_BUILD_INTEGRATION_TESTS=ON"
IF !DRIVER_BUILD_UNIT_TESTS! EQU !TRUE! SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! -DCASS_BUILD_UNIT_TESTS=ON"
IF NOT "!TESTS_BOOST_LIBRARY_DIRECTORY!" == "" (
REM Determine if using Boost distributed or include/lib binaries
SET "BOOST_DISTRIBUTION_ROOT_DIRECTORY=!TESTS_BOOST_LIBRARY_DIRECTORY!"
SET "BOOST_DISTRIBUTION_INCLUDE_DIRECTORY=!BOOST_DISTRIBUTION_ROOT_DIRECTORY!"
SET "BOOST_DISTRIBUTION_LIBRARY_DIRECTORY=!BOOST_DISTRIBUTION_ROOT_DIRECTORY!\lib!DRIVER_TARGET_ARCHITECTURE!-msvc-!DRIVER_VISUAL_STUDIO_VERSION!.0"
IF NOT EXIST "!BOOST_DISTRIBUTION_LIBRARY_DIRECTORY!" (
SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! -DBOOST_ROOT_DIR=^"!TESTS_BOOST_LIBRARY_DIRECTORY!^""
) ELSE (
SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! -DBOOST_ROOT=^"!BOOST_DISTRIBUTION_ROOT_DIRECTORY!^" -DBOOST_INCLUDEDIR=^"!BOOST_DISTRIBUTION_INCLUDE_DIRECTORY!^" -DBOOST_LIBRARYDIR=^"!BOOST_DISTRIBUTION_LIBRARY_DIRECTORY!^""
)
)
IF NOT "!TESTS_LIBSSH2_LIBRARY_DIRECTORY!" == "" (
SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! -DCASS_USE_LIBSSH2=ON -DLIBSSH2_ROOT_DIR=^"!TESTS_LIBSSH2_LIBRARY_DIRECTORY!^""
) ELSE (
SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! -DCASS_USE_LIBSSH2=OFF"
)
IF NOT "!DRIVER_BOOST_DEPENDENCY_SOURCE_DIRECTORY!" == "" (
SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! -DCASS_USE_BOOST_ATOMIC=ON"
IF "!TESTS_BOOST_LIBRARY_DIRECTORY!" == "" (
SET "DRIVER_CMAKE_COMMAND_LINE=!DRIVER_CMAKE_COMMAND_LINE! -DBOOST_ROOT_DIR=^"!DRIVER_BOOST_DEPENDENCY_SOURCE_DIRECTORY!^""
)
)
ECHO !CMAKE! !DRIVER_CMAKE_COMMAND_LINE! "!DRIVER_SOURCE_DIRECTORY!" >> "!DRIVER_LOG_FILENAME!" 2>&1
!CMAKE! !DRIVER_CMAKE_COMMAND_LINE! "!DRIVER_SOURCE_DIRECTORY!" >> "!DRIVER_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !DRIVER_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DRIVER_FAILED!
)
ECHO done.
IF !DRIVER_GENERATE_SOLUTION! EQU !TRUE! (
POPD
EXIT /B
)
ECHO | SET /P=Building driver ...
!CMAKE! --build . --config !DRIVER_BUILD_TYPE! >> "!DRIVER_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !DRIVER_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DRIVER_FAILED!
)
ECHO done.
ECHO | SET /P=Installing driver ...
!CMAKE! --build . --config !DRIVER_BUILD_TYPE! --target install >> "!DRIVER_LOG_FILENAME!" 2>&1
IF NOT !ERRORLEVEL! EQU 0 (
ECHO FAILED!
ECHO See !DRIVER_LOG_FILENAME! for more details
EXIT /B !EXIT_CODE_BUILD_DRIVER_FAILED!
)
ECHO done.
POPD
EXIT /B