anchor.diff:  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 "DOWNLOAD_URL_VISUAL_STUDIO=https://www.visualstudio.com/thank-you-downloading-visual-studio/?sku=Community&rel=15"
   SET ZIP=7z.exe
   SET "DOWNLOAD_URL_ZIP=http://www.7-zip.org/download.html"
  +SET "VSWHERE=!ABSOLUTE_BATCH_DIRECTORY!\bin\vswhere.exe"
   
   REM Minimum version build dependency constants
   SET MINIMUM_VERSION_REQUIRED_CMAKE=3.4.0
  
positive.code: 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 (
  
negative.code: 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
  