diff options
-rw-r--r-- | Help/generator/Visual Studio 15 2017.rst (renamed from Help/generator/Visual Studio 15.rst) | 12 | ||||
-rw-r--r-- | Help/manual/cmake-generators.7.rst | 2 | ||||
-rw-r--r-- | Help/release/3.7.rst | 6 | ||||
-rw-r--r-- | Modules/UseSWIG.cmake | 7 | ||||
-rw-r--r-- | Source/CMakeVersion.cmake | 2 | ||||
-rw-r--r-- | Source/cmGlobalVisualStudio15Generator.cxx | 11 | ||||
-rw-r--r-- | Source/cmake.cxx | 2 | ||||
-rw-r--r-- | Source/kwsys/CMakeLists.txt | 15 | ||||
-rw-r--r-- | Source/kwsys/ConsoleBuf.hxx.in | 71 |
9 files changed, 76 insertions, 52 deletions
diff --git a/Help/generator/Visual Studio 15.rst b/Help/generator/Visual Studio 15 2017.rst index 2eb9052..a88f8bc 100644 --- a/Help/generator/Visual Studio 15.rst +++ b/Help/generator/Visual Studio 15 2017.rst @@ -1,7 +1,7 @@ -Visual Studio 15 ----------------- +Visual Studio 15 2017 +--------------------- -Generates Visual Studio 15 project files. +Generates Visual Studio 15 (VS 2017) project files. The :variable:`CMAKE_GENERATOR_PLATFORM` variable may be set to specify a target platform name (architecture). @@ -9,16 +9,16 @@ to specify a target platform name (architecture). For compatibility with CMake versions prior to 3.1, one may specify a target platform name optionally at the end of this generator name: -``Visual Studio 15 Win64`` +``Visual Studio 15 2017 Win64`` Specify target platform ``x64``. -``Visual Studio 15 ARM`` +``Visual Studio 15 2017 ARM`` Specify target platform ``ARM``. Toolset Selection ^^^^^^^^^^^^^^^^^ -The ``v141`` toolset that comes with Visual Studio 15 is selected by +The ``v141`` toolset that comes with Visual Studio 15 2017 is selected by default. The :variable:`CMAKE_GENERATOR_TOOLSET` option may be set, perhaps via the :manual:`cmake(1)` ``-T`` option, to specify another toolset. diff --git a/Help/manual/cmake-generators.7.rst b/Help/manual/cmake-generators.7.rst index 3df3a81..a37c65b 100644 --- a/Help/manual/cmake-generators.7.rst +++ b/Help/manual/cmake-generators.7.rst @@ -82,7 +82,7 @@ Visual Studio Generators /generator/Visual Studio 11 2012 /generator/Visual Studio 12 2013 /generator/Visual Studio 14 2015 - /generator/Visual Studio 15 + /generator/Visual Studio 15 2017 Other Generators ^^^^^^^^^^^^^^^^ diff --git a/Help/release/3.7.rst b/Help/release/3.7.rst index 3b8ade6..4c51af4 100644 --- a/Help/release/3.7.rst +++ b/Help/release/3.7.rst @@ -31,9 +31,9 @@ Generators This is equivalent to ``cd sub/dir; make {test,install,package}`` with :ref:`Makefile Generators`. -* The :generator:`Visual Studio 15` generator was added. This is - experimental and based on Preview 5 because this version of VS - has not been released. +* The :generator:`Visual Studio 15 2017` generator was added. This is + experimental and based on "Visual Studio 2017 RC" because this version + of VS has not been released. * :ref:`Visual Studio Generators` for VS 2010 and above learned to place ``.natvis`` source files into VS project files properly. diff --git a/Modules/UseSWIG.cmake b/Modules/UseSWIG.cmake index c5912f8..651f9f1 100644 --- a/Modules/UseSWIG.cmake +++ b/Modules/UseSWIG.cmake @@ -57,7 +57,8 @@ set(SWIG_CXX_EXTENSION "cxx") set(SWIG_EXTRA_LIBRARIES "") -set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py") +set(SWIG_PYTHON_EXTRA_FILE_EXTENSIONS ".py") +set(SWIG_JAVA_EXTRA_FILE_EXTENSIONS ".java" "JNI.java") # # For given swig module initialize variables associated with it @@ -123,9 +124,9 @@ macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile) endif () endif() - foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION}) + foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSIONS}) set(${outfiles} ${${outfiles}} - "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}") + "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}${it}") endforeach() endmacro() diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index 3086639..1144390 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -1,5 +1,5 @@ # CMake version number components. set(CMake_VERSION_MAJOR 3) set(CMake_VERSION_MINOR 7) -set(CMake_VERSION_PATCH 20161129) +set(CMake_VERSION_PATCH 20161130) #set(CMake_VERSION_RC 1) diff --git a/Source/cmGlobalVisualStudio15Generator.cxx b/Source/cmGlobalVisualStudio15Generator.cxx index 19b48df..091a03e 100644 --- a/Source/cmGlobalVisualStudio15Generator.cxx +++ b/Source/cmGlobalVisualStudio15Generator.cxx @@ -8,16 +8,19 @@ #include "cmMakefile.h" #include "cmVS141CLFlagTable.h" -static const char vs15generatorName[] = "Visual Studio 15"; +static const char vs15generatorName[] = "Visual Studio 15 2017"; // Map generator name without year to name with year. static const char* cmVS15GenName(const std::string& name, std::string& genName) { if (strncmp(name.c_str(), vs15generatorName, - sizeof(vs15generatorName) - 1) != 0) { + sizeof(vs15generatorName) - 6) != 0) { return 0; } - const char* p = name.c_str() + sizeof(vs15generatorName) - 1; + const char* p = name.c_str() + sizeof(vs15generatorName) - 6; + if (cmHasLiteralPrefix(p, " 2017")) { + p += 5; + } genName = std::string(vs15generatorName) + p; return p; } @@ -52,7 +55,7 @@ public: virtual void GetDocumentation(cmDocumentationEntry& entry) const { entry.Name = std::string(vs15generatorName) + " [arch]"; - entry.Brief = "Generates Visual Studio 15 project files. " + entry.Brief = "Generates Visual Studio 2017 project files. " "Optional [arch] can be \"Win64\" or \"ARM\"."; } diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 59290ff..733e0e4 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -1457,7 +1457,7 @@ void cmake::CreateDefaultGlobalGenerator() const char* GeneratorName; }; static VSVersionedGenerator const vsGenerators[] = { - { "15.0", "Visual Studio 15" }, // + { "15.0", "Visual Studio 15 2017" }, // { "14.0", "Visual Studio 14 2015" }, // { "12.0", "Visual Studio 12 2013" }, // { "11.0", "Visual Studio 11 2012" }, // diff --git a/Source/kwsys/CMakeLists.txt b/Source/kwsys/CMakeLists.txt index a2d313c..b8a9a6b 100644 --- a/Source/kwsys/CMakeLists.txt +++ b/Source/kwsys/CMakeLists.txt @@ -67,12 +67,15 @@ # written. CMAKE_MINIMUM_REQUIRED(VERSION 2.6.3 FATAL_ERROR) -IF(POLICY CMP0025) - CMAKE_POLICY(SET CMP0025 NEW) -ENDIF() -IF(POLICY CMP0056) - CMAKE_POLICY(SET CMP0056 NEW) -ENDIF() +FOREACH(p + CMP0025 # CMake 3.0, Compiler id for Apple Clang is now AppleClang. + CMP0056 # CMake 3.2, Honor link flags in try_compile() source-file signature. + CMP0063 # CMake 3.3, Honor visibility properties for all target types. + ) + IF(POLICY ${p}) + CMAKE_POLICY(SET ${p} NEW) + ENDIF() +ENDFOREACH() SET(CMAKE_LEGACY_CYGWIN_WIN32 0) #----------------------------------------------------------------------------- diff --git a/Source/kwsys/ConsoleBuf.hxx.in b/Source/kwsys/ConsoleBuf.hxx.in index 717462e..c45a351 100644 --- a/Source/kwsys/ConsoleBuf.hxx.in +++ b/Source/kwsys/ConsoleBuf.hxx.in @@ -147,42 +147,47 @@ protected: return Traits::eof(); } if (m_isConsoleInput) { - wchar_t wbuffer[128]; + // ReadConsole doesn't tell if there's more input available + // don't support reading more characters than this + wchar_t wbuffer[8192]; DWORD charsRead; - if (::ReadConsoleW(m_hInput, wbuffer, - (sizeof(wbuffer) / sizeof(wbuffer[0])) - 1, - &charsRead, NULL) == 0 || + if (ReadConsoleW(m_hInput, wbuffer, + (sizeof(wbuffer) / sizeof(wbuffer[0])), &charsRead, + NULL) == 0 || charsRead == 0) { _setg(true); return Traits::eof(); } - wbuffer[charsRead] = L'\0'; - setBuffer(wbuffer, m_ibuffer); + setBuffer(std::wstring(wbuffer, charsRead), m_ibuffer); } else { - std::wstring totalBuffer; std::wstring wbuffer; - char buffer[128]; + std::string strbuffer; DWORD bytesRead; - while (::ReadFile(m_hInput, buffer, - (sizeof(buffer) / sizeof(buffer[0])) - 1, &bytesRead, - NULL) == 0) { - if (::GetLastError() == ERROR_MORE_DATA) { - buffer[bytesRead] = '\0'; - if (decodeInputBuffer(buffer, wbuffer)) { - totalBuffer += wbuffer; - continue; - } + LARGE_INTEGER size; + if (GetFileSizeEx(m_hInput, &size) == 0) { + _setg(true); + return Traits::eof(); + } + char* buffer = new char[size.LowPart]; + while (ReadFile(m_hInput, buffer, size.LowPart, &bytesRead, NULL) == + 0) { + if (GetLastError() == ERROR_MORE_DATA) { + strbuffer += std::string(buffer, bytesRead); + continue; } _setg(true); + delete[] buffer; return Traits::eof(); } - buffer[bytesRead] = '\0'; - if (!decodeInputBuffer(buffer, wbuffer)) { + if (bytesRead > 0) { + strbuffer += std::string(buffer, bytesRead); + } + delete[] buffer; + if (!decodeInputBuffer(strbuffer, wbuffer)) { _setg(true); return Traits::eof(); } - totalBuffer += wbuffer; - setBuffer(totalBuffer, m_ibuffer); + setBuffer(wbuffer, m_ibuffer); } _setg(); } @@ -315,6 +320,10 @@ private: } bool encodeOutputBuffer(const std::wstring wbuffer, std::string& buffer) { + if (wbuffer.size() == 0) { + buffer = std::string(); + return true; + } const int length = WideCharToMultiByte(m_activeOutputCodepage, 0, wbuffer.c_str(), (int)wbuffer.size(), NULL, 0, NULL, NULL); @@ -329,23 +338,31 @@ private: delete[] buf; return success; } - bool decodeInputBuffer(const char* buffer, std::wstring& wbuffer) + bool decodeInputBuffer(const std::string buffer, std::wstring& wbuffer) { + int length = int(buffer.length()); + if (length == 0) { + wbuffer = std::wstring(); + return true; + } int actualCodepage = m_activeInputCodepage; const char BOM_UTF8[] = { char(0xEF), char(0xBB), char(0xBF) }; - if (std::memcmp(buffer, BOM_UTF8, sizeof(BOM_UTF8)) == 0) { + const char* data = buffer.data(); + const size_t BOMsize = sizeof(BOM_UTF8); + if (length >= BOMsize && std::memcmp(data, BOM_UTF8, BOMsize) == 0) { // PowerShell uses UTF-8 with BOM for pipes actualCodepage = CP_UTF8; - buffer += sizeof(BOM_UTF8); + data += BOMsize; + length -= BOMsize; } const int wlength = - MultiByteToWideChar(actualCodepage, 0, buffer, -1, NULL, 0); + MultiByteToWideChar(actualCodepage, 0, data, length, NULL, 0); wchar_t* wbuf = new wchar_t[wlength]; const bool success = - MultiByteToWideChar(actualCodepage, 0, buffer, -1, wbuf, wlength) > 0 + MultiByteToWideChar(actualCodepage, 0, data, length, wbuf, wlength) > 0 ? true : false; - wbuffer = wbuf; + wbuffer = std::wstring(wbuf, wlength); delete[] wbuf; return success; } |