[antlr4] Fix building with Visual Studio 2017. Resolves #804

This commit is contained in:
Alexander Karatarakis 2017-03-21 20:53:26 -07:00
parent 162a46bac9
commit 5f35979272
3 changed files with 58 additions and 3 deletions

View File

@ -1,3 +1,3 @@
Source: antlr4
Version: 4.6
Version: 4.6-1
Description: ANother Tool for Language Recognition

View File

@ -0,0 +1,52 @@
diff --git a/runtime/src/ANTLRInputStream.h b/runtime/src/ANTLRInputStream.h
index 3d85bed..813451c 100644
--- a/runtime/src/ANTLRInputStream.h
+++ b/runtime/src/ANTLRInputStream.h
@@ -16,7 +16,7 @@ namespace antlr4 {
protected:
/// The data being scanned.
// UTF-32
-#if defined(_MSC_VER) && _MSC_VER == 1900
+#if defined(_MSC_VER) && _MSC_VER >= 1900
i32string _data; // Custom type for VS 2015.
#else
std::u32string _data;
diff --git a/runtime/src/UnbufferedCharStream.h b/runtime/src/UnbufferedCharStream.h
index b489f18..295804c 100644
--- a/runtime/src/UnbufferedCharStream.h
+++ b/runtime/src/UnbufferedCharStream.h
@@ -52,7 +52,7 @@ namespace antlr4 {
/// we keep adding to buffer. Otherwise, <seealso cref="#consume consume()"/> resets so
/// we start filling at index 0 again.
// UTF-32 encoded.
-#if defined(_MSC_VER) && _MSC_VER == 1900
+#if defined(_MSC_VER) && _MSC_VER >= 1900
i32string _data; // Custom type for VS 2015.
#else
std::u32string _data;
diff --git a/runtime/src/antlr4-common.h b/runtime/src/antlr4-common.h
index 197fd6d..8357b3e 100644
--- a/runtime/src/antlr4-common.h
+++ b/runtime/src/antlr4-common.h
@@ -52,7 +52,7 @@
typedef __int32 ssize_t;
#endif
- #if _MSC_VER == 1900
+ #if _MSC_VER >= 1900
// VS 2015 has a known bug when using std::codecvt_utf8<char32_t>
// so we have to temporarily use __int32 instead.
// https://connect.microsoft.com/VisualStudio/feedback/details/1403302/unresolved-external-when-using-codecvt-utf8
diff --git a/runtime/src/support/StringUtils.h b/runtime/src/support/StringUtils.h
index cb751a7..be14bbb 100644
--- a/runtime/src/support/StringUtils.h
+++ b/runtime/src/support/StringUtils.h
@@ -10,7 +10,7 @@
namespace antlrcpp {
// For all conversions utf8 <-> utf32.
// VS 2015 has a bug in std::codecvt_utf8<char32_t> (VS 2013 works fine).
-#if defined(_MSC_VER) && _MSC_VER == 1900
+#if defined(_MSC_VER) && _MSC_VER >= 1900
static std::wstring_convert<std::codecvt_utf8<__int32>, __int32> utfConverter;
#else
static std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> utfConverter;

View File

@ -1,15 +1,17 @@
include(vcpkg_common_functions)
set(VERSION 4.6)
set(SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src/runtime)
vcpkg_download_distfile(ARCHIVE
URLS "http://www.antlr.org/download/antlr4-cpp-runtime-4.6-source.zip"
FILENAME "antlr4-cpp-runtime-4.6-source.zip"
FILENAME "antlr4-cpp-runtime-${VERSION}-source.zip"
SHA512 e123c2227e41ce80da5a3758725a018690ed70a4e10c23da26c966259e6bdafa192f4363f5a7e1181ef9a47bf3cc50d6b0ca7b26c8dd2b19222a7edf54de8de2
)
# license not exist in antlr folder.
vcpkg_download_distfile(LICENSE
URLS https://raw.githubusercontent.com/antlr/antlr4/4.6/LICENSE.txt
URLS https://raw.githubusercontent.com/antlr/antlr4/${VERSION}/LICENSE.txt
FILENAME "antlr4-copyright"
SHA512 c72ae3d5c9f3f07160405b5ca44f01116a9602d82291d6cd218fcc5ec6e8baf985e4baa2acf3d621079585385708bd171c96ef44dd808e60c40a48bc1f56c9ae
)
@ -19,6 +21,7 @@ vcpkg_extract_source_archive(${ARCHIVE})
vcpkg_apply_patches(
SOURCE_PATH ${CURRENT_BUILDTREES_DIR}/src
PATCHES ${CMAKE_CURRENT_LIST_DIR}/crt_mt.patch
${CMAKE_CURRENT_LIST_DIR}/Fix-building-in-Visual-Studio-2017.patch
)
if (${VCPKG_LIBRARY_LINKAGE} STREQUAL static)