summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Help/command/string.rst303
-rw-r--r--Source/CMakeVersion.cmake2
-rw-r--r--Source/cmGlobalGenerator.cxx13
-rw-r--r--Source/kwsys/SystemTools.cxx68
4 files changed, 281 insertions, 105 deletions
diff --git a/Help/command/string.rst b/Help/command/string.rst
index 20f8094..0361c74 100644
--- a/Help/command/string.rst
+++ b/Help/command/string.rst
@@ -1,102 +1,84 @@
string
------
+.. only:: html
+
+ .. contents::
+
String operations.
+Search and Replace
+^^^^^^^^^^^^^^^^^^
+
+FIND
+""""
+
::
- string(REGEX MATCH <regular_expression>
- <output variable> <input> [<input>...])
- string(REGEX MATCHALL <regular_expression>
- <output variable> <input> [<input>...])
- string(REGEX REPLACE <regular_expression>
- <replace_expression> <output variable>
- <input> [<input>...])
- string(REPLACE <match_string>
- <replace_string> <output variable>
- <input> [<input>...])
- string(APPEND <string variable> [<input>...])
- string(CONCAT <output variable> [<input>...])
- string(<MD5|SHA1|SHA224|SHA256|SHA384|SHA512>
- <output variable> <input>)
- string(COMPARE EQUAL <string1> <string2> <output variable>)
- string(COMPARE NOTEQUAL <string1> <string2> <output variable>)
- string(COMPARE LESS <string1> <string2> <output variable>)
- string(COMPARE GREATER <string1> <string2> <output variable>)
- string(ASCII <number> [<number> ...] <output variable>)
- string(CONFIGURE <string1> <output variable>
- [@ONLY] [ESCAPE_QUOTES])
- string(TOUPPER <string1> <output variable>)
- string(TOLOWER <string1> <output variable>)
- string(LENGTH <string> <output variable>)
- string(SUBSTRING <string> <begin> <length> <output variable>)
- string(STRIP <string> <output variable>)
- string(RANDOM [LENGTH <length>] [ALPHABET <alphabet>]
- [RANDOM_SEED <seed>] <output variable>)
string(FIND <string> <substring> <output variable> [REVERSE])
- string(TIMESTAMP <output variable> [<format string>] [UTC])
- string(MAKE_C_IDENTIFIER <input string> <output variable>)
- string(GENEX_STRIP <input string> <output variable>)
- string(UUID <output variable> NAMESPACE <namespace> NAME <name>
- TYPE <MD5|SHA1> [UPPER])
-``REGEX MATCH`` will match the regular expression once and store the match
-in the output variable.
+Return the position where the given substring was found in
+the supplied string. If the ``REVERSE`` flag was used, the command will
+search for the position of the last occurrence of the specified
+substring. If the substring is not found, a position of -1 is returned.
-``REGEX MATCHALL`` will match the regular expression as many times as
-possible and store the matches in the output variable as a list.
+REPLACE
+"""""""
-``REGEX REPLACE`` will match the regular expression as many times as
-possible and substitute the replacement expression for the match in
-the output. The replace expression may refer to paren-delimited
-subexpressions of the match using \1, \2, ..., \9. Note that two
-backslashes (\\1) are required in CMake code to get a backslash
-through argument parsing.
+::
-``REPLACE`` will replace all occurrences of ``match_string`` in the input
+ string(REPLACE <match_string>
+ <replace_string> <output variable>
+ <input> [<input>...])
+
+Replace all occurrences of ``match_string`` in the input
with ``replace_string`` and store the result in the output.
-``APPEND`` will append all the input arguments to the string.
+Regular Expressions
+^^^^^^^^^^^^^^^^^^^
-``CONCAT`` will concatenate all the input arguments together and store
-the result in the named output variable.
+REGEX MATCH
+"""""""""""
-``MD5``, ``SHA1``, ``SHA224``, ``SHA256``, ``SHA384``, and ``SHA512`` will
-compute a cryptographic hash of the input string.
+::
-``COMPARE EQUAL``/``COMPARE NOTEQUAL``/``COMPARE LESS/GREATER`` will
-compare the strings and store true or false in the output variable.
+ string(REGEX MATCH <regular_expression>
+ <output variable> <input> [<input>...])
-``ASCII`` will convert all numbers into corresponding ASCII characters.
+Match the regular expression once and store the match in the output variable.
+All ``<input>`` arguments are concatenated before matching.
-``CONFIGURE`` will transform a string like :command:`configure_file`
-transforms a file.
+REGEX MATCHALL
+""""""""""""""
-``TOUPPER``/``TOLOWER`` will convert string to upper/lower characters.
+::
-``LENGTH`` will return a given string's length.
+ string(REGEX MATCHALL <regular_expression>
+ <output variable> <input> [<input>...])
-``SUBSTRING`` will return a substring of a given string. If length is -1
-the remainder of the string starting at begin will be returned.
-If string is shorter than length then end of string is used instead.
+Match the regular expression as many times as possible and store the matches
+in the output variable as a list.
+All ``<input>`` arguments are concatenated before matching.
-.. note::
- CMake 3.1 and below reported an error if length pointed past
- the end of string.
+REGEX REPLACE
+"""""""""""""
-``STRIP`` will return a substring of a given string with leading and
-trailing spaces removed.
+::
-``RANDOM`` will return a random string of given length consisting of
-characters from the given alphabet. Default length is 5 characters
-and default alphabet is all numbers and upper and lower case letters.
-If an integer ``RANDOM_SEED`` is given, its value will be used to seed the
-random number generator.
+ string(REGEX REPLACE <regular_expression>
+ <replace_expression> <output variable>
+ <input> [<input>...])
-``FIND`` will return the position where the given substring was found in
-the supplied string. If the ``REVERSE`` flag was used, the command will
-search for the position of the last occurrence of the specified
-substring. If the substring is not found, a position of -1 is returned.
+Match the regular expression as many times as possible and substitute the
+replacement expression for the match in the output.
+All ``<input>`` arguments are concatenated before matching.
+
+The replace expression may refer to paren-delimited subexpressions of the
+match using ``\1``, ``\2``, ..., ``\9``. Note that two backslashes (``\\1``)
+are required in CMake code to get a backslash through argument parsing.
+
+Regex Specification
+"""""""""""""""""""
The following characters have special meaning in regular expressions:
@@ -123,10 +105,159 @@ The following characters have special meaning in regular expressions:
``*``, ``+`` and ``?`` have higher precedence than concatenation. ``|``
has lower precedence than concatenation. This means that the regular
-expression "^ab+d$" matches "abbd" but not "ababd", and the regular
-expression "^(ab|cd)$" matches "ab" but not "abd".
+expression ``^ab+d$`` matches ``abbd`` but not ``ababd``, and the regular
+expression ``^(ab|cd)$`` matches ``ab`` but not ``abd``.
+
+Manipulation
+^^^^^^^^^^^^
+
+APPEND
+""""""
+
+::
+
+ string(APPEND <string variable> [<input>...])
+
+Append all the input arguments to the string.
+
+CONCAT
+""""""
+
+::
+
+ string(CONCAT <output variable> [<input>...])
+
+Concatenate all the input arguments together and store
+the result in the named output variable.
+
+TOLOWER
+"""""""
+
+::
+
+ string(TOLOWER <string1> <output variable>)
+
+Convert string to lower characters.
+
+TOUPPER
+"""""""
-``TIMESTAMP`` will write a string representation of the current date
+::
+
+ string(TOUPPER <string1> <output variable>)
+
+Convert string to upper characters.
+
+LENGTH
+""""""
+
+::
+
+ string(LENGTH <string> <output variable>)
+
+Store in an output variable a given string's length.
+
+SUBSTRING
+"""""""""
+
+::
+
+ string(SUBSTRING <string> <begin> <length> <output variable>)
+
+Store in an output variable a substring of a given string. If length is
+``-1`` the remainder of the string starting at begin will be returned.
+If string is shorter than length then end of string is used instead.
+
+.. note::
+ CMake 3.1 and below reported an error if length pointed past
+ the end of string.
+
+STRIP
+"""""
+
+::
+
+ string(STRIP <string> <output variable>)
+
+Store in an output variable a substring of a given string with leading and
+trailing spaces removed.
+
+GENEX_STRIP
+"""""""""""
+
+::
+
+ string(GENEX_STRIP <input string> <output variable>)
+
+Strip any :manual:`generator expressions <cmake-generator-expressions(7)>`
+from the ``input string`` and store the result in the ``output variable``.
+
+Comparison
+^^^^^^^^^^
+
+::
+
+ string(COMPARE EQUAL <string1> <string2> <output variable>)
+ string(COMPARE NOTEQUAL <string1> <string2> <output variable>)
+ string(COMPARE LESS <string1> <string2> <output variable>)
+ string(COMPARE GREATER <string1> <string2> <output variable>)
+
+Compare the strings and store true or false in the output variable.
+
+Hashing
+^^^^^^^
+
+::
+
+ string(<MD5|SHA1|SHA224|SHA256|SHA384|SHA512>
+ <output variable> <input>)
+
+Compute a cryptographic hash of the input string.
+
+Generation
+^^^^^^^^^^
+
+ASCII
+"""""
+
+::
+
+ string(ASCII <number> [<number> ...] <output variable>)
+
+Convert all numbers into corresponding ASCII characters.
+
+CONFIGURE
+"""""""""
+
+::
+
+ string(CONFIGURE <string1> <output variable>
+ [@ONLY] [ESCAPE_QUOTES])
+
+Transform a string like :command:`configure_file` transforms a file.
+
+RANDOM
+""""""
+
+::
+
+ string(RANDOM [LENGTH <length>] [ALPHABET <alphabet>]
+ [RANDOM_SEED <seed>] <output variable>)
+
+Return a random string of given length consisting of
+characters from the given alphabet. Default length is 5 characters
+and default alphabet is all numbers and upper and lower case letters.
+If an integer ``RANDOM_SEED`` is given, its value will be used to seed the
+random number generator.
+
+TIMESTAMP
+"""""""""
+
+::
+
+ string(TIMESTAMP <output variable> [<format string>] [UTC])
+
+Write a string representation of the current date
and/or time to the output variable.
Should the command be unable to obtain a timestamp the output variable
@@ -163,14 +294,22 @@ If no explicit ``<format string>`` is given it will default to:
%Y-%m-%dT%H:%M:%S for local time.
%Y-%m-%dT%H:%M:%SZ for UTC.
-``MAKE_C_IDENTIFIER`` will write a string which can be used as an
-identifier in C.
-``GENEX_STRIP`` will strip any
-:manual:`generator expressions <cmake-generator-expressions(7)>` from the
-``input string`` and store the result in the ``output variable``.
+::
+
+ string(MAKE_C_IDENTIFIER <input string> <output variable>)
+
+Write a string which can be used as an identifier in C.
+
+UUID
+""""
+
+::
+
+ string(UUID <output variable> NAMESPACE <namespace> NAME <name>
+ TYPE <MD5|SHA1> [UPPER])
-``UUID`` creates a univerally unique identifier (aka GUID) as per RFC4122
+Create a univerally unique identifier (aka GUID) as per RFC4122
based on the hash of the combined values of ``<namespace>``
(which itself has to be a valid UUID) and ``<name>``.
The hash algorithm can be either ``MD5`` (Version 3 UUID) or
diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake
index b122777..087db9e 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 3)
-set(CMake_VERSION_PATCH 20150914)
+set(CMake_VERSION_PATCH 20150915)
#set(CMake_VERSION_RC 1)
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index ee1b192..33b04ac 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -433,19 +433,22 @@ cmGlobalGenerator::EnableLanguage(std::vector<std::string>const& languages,
{
#if defined(_WIN32) && !defined(__CYGWIN__)
/* Windows version number data. */
- OSVERSIONINFO osvi;
- ZeroMemory(&osvi, sizeof(osvi));
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ OSVERSIONINFOEXW osviex;
+ ZeroMemory(&osviex, sizeof(osviex));
+ osviex.dwOSVersionInfoSize = sizeof(osviex);
+
#ifdef KWSYS_WINDOWS_DEPRECATED_GetVersionEx
# pragma warning (push)
# pragma warning (disable:4996)
#endif
- GetVersionEx (&osvi);
+ GetVersionExW((OSVERSIONINFOW*)&osviex);
#ifdef KWSYS_WINDOWS_DEPRECATED_GetVersionEx
# pragma warning (pop)
#endif
std::ostringstream windowsVersionString;
- windowsVersionString << osvi.dwMajorVersion << "." << osvi.dwMinorVersion;
+ windowsVersionString << osviex.dwMajorVersion << "."
+ << osviex.dwMinorVersion << "."
+ << osviex.dwBuildNumber;
windowsVersionString.str();
mf->AddDefinition("CMAKE_HOST_SYSTEM_VERSION",
windowsVersionString.str().c_str());
diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx
index 97a1df8..3857e41 100644
--- a/Source/kwsys/SystemTools.cxx
+++ b/Source/kwsys/SystemTools.cxx
@@ -4879,11 +4879,8 @@ std::string SystemTools::GetOperatingSystemNameAndVersion()
OSVERSIONINFOEXA osvi;
BOOL bOsVersionInfoEx;
- // Try calling GetVersionEx using the OSVERSIONINFOEX structure.
- // If that fails, try using the OSVERSIONINFO structure.
-
- ZeroMemory(&osvi, sizeof(OSVERSIONINFOEXA));
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
+ ZeroMemory(&osvi, sizeof(osvi));
+ osvi.dwOSVersionInfoSize = sizeof(osvi);
#ifdef KWSYS_WINDOWS_DEPRECATED_GetVersionEx
# pragma warning (push)
@@ -4893,14 +4890,10 @@ std::string SystemTools::GetOperatingSystemNameAndVersion()
# pragma warning (disable:4996)
# endif
#endif
- bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO *)&osvi);
+ bOsVersionInfoEx = GetVersionExA((OSVERSIONINFOA *)&osvi);
if (!bOsVersionInfoEx)
{
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
- if (!GetVersionEx((OSVERSIONINFO *)&osvi))
- {
- return 0;
- }
+ return 0;
}
#ifdef KWSYS_WINDOWS_DEPRECATED_GetVersionEx
# pragma warning (pop)
@@ -4913,10 +4906,56 @@ std::string SystemTools::GetOperatingSystemNameAndVersion()
case VER_PLATFORM_WIN32_NT:
// Test for the specific product family.
+ if (osvi.dwMajorVersion == 10 && osvi.dwMinorVersion == 0)
+ {
+ if (osvi.wProductType == VER_NT_WORKSTATION)
+ {
+ res += "Microsoft Windows 10";
+ }
+ else
+ {
+ res += "Microsoft Windows Server 2016 family";
+ }
+ }
+
+ if (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 3)
+ {
+ if (osvi.wProductType == VER_NT_WORKSTATION)
+ {
+ res += "Microsoft Windows 8.1";
+ }
+ else
+ {
+ res += "Microsoft Windows Server 2012 R2 family";
+ }
+ }
+
+ if (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 2)
+ {
+ if (osvi.wProductType == VER_NT_WORKSTATION)
+ {
+ res += "Microsoft Windows 8";
+ }
+ else
+ {
+ res += "Microsoft Windows Server 2012 family";
+ }
+ }
+
+ if (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1)
+ {
+ if (osvi.wProductType == VER_NT_WORKSTATION)
+ {
+ res += "Microsoft Windows 7";
+ }
+ else
+ {
+ res += "Microsoft Windows Server 2008 R2 family";
+ }
+ }
if (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0)
{
-#if (_MSC_VER >= 1300)
if (osvi.wProductType == VER_NT_WORKSTATION)
{
res += "Microsoft Windows Vista";
@@ -4925,9 +4964,6 @@ std::string SystemTools::GetOperatingSystemNameAndVersion()
{
res += "Microsoft Windows Server 2008 family";
}
-#else
- res += "Microsoft Windows Vista or Windows Server 2008";
-#endif
}
if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2)
@@ -4956,7 +4992,6 @@ std::string SystemTools::GetOperatingSystemNameAndVersion()
{
// Test for the workstation type.
-#if (_MSC_VER >= 1300)
if (osvi.wProductType == VER_NT_WORKSTATION)
{
if (osvi.dwMajorVersion == 4)
@@ -5028,7 +5063,6 @@ std::string SystemTools::GetOperatingSystemNameAndVersion()
}
}
}
-#endif // Visual Studio 7 and up
}
// Test for specific product on Windows NT 4.0 SP5 and earlier