mirror of
https://github.com/reactos/CMake.git
synced 2025-01-31 08:52:21 +00:00
string: Add new HEX sub-command
This commit is contained in:
parent
952945813c
commit
5395bf05eb
@ -36,6 +36,7 @@ Synopsis
|
||||
|
||||
`Generation`_
|
||||
string(`ASCII`_ <number>... <out-var>)
|
||||
string(`HEX`_ <string> <out-var>)
|
||||
string(`CONFIGURE`_ <string> <out-var> [...])
|
||||
string(`MAKE_C_IDENTIFIER`_ <string> <out-var>)
|
||||
string(`RANDOM`_ [<option>...] <out-var>)
|
||||
@ -355,6 +356,16 @@ Generation
|
||||
|
||||
Convert all numbers into corresponding ASCII characters.
|
||||
|
||||
.. _HEX:
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
string(HEX <string> <output_variable>)
|
||||
|
||||
Convert each byte in the input ``<string>`` to its hexadecimal representation
|
||||
and store the concatenated hex digits in the ``<output_variable>``. Letters in
|
||||
the output (``a`` through ``f``) are in lowercase.
|
||||
|
||||
.. _CONFIGURE:
|
||||
|
||||
.. code-block:: cmake
|
||||
|
5
Help/release/dev/string-hex.rst
Normal file
5
Help/release/dev/string-hex.rst
Normal file
@ -0,0 +1,5 @@
|
||||
string-hex
|
||||
----------
|
||||
|
||||
* The :command:`string` command learned a new ``HEX`` sub-command, which
|
||||
converts strings into their hexadecimal representation.
|
@ -124,6 +124,27 @@ bool HandleAsciiCommand(std::vector<std::string> const& args,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HandleHexCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
if (args.size() != 3) {
|
||||
status.SetError("Incorrect number of arguments");
|
||||
return false;
|
||||
}
|
||||
auto const& instr = args[1];
|
||||
auto const& outvar = args[2];
|
||||
std::string output(instr.size() * 2, ' ');
|
||||
|
||||
std::string::size_type hexIndex = 0;
|
||||
for (auto const& c : instr) {
|
||||
sprintf(&output[hexIndex], "%.2x", static_cast<unsigned char>(c) & 0xFF);
|
||||
hexIndex += 2;
|
||||
}
|
||||
|
||||
status.GetMakefile().AddDefinition(outvar, output);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HandleConfigureCommand(std::vector<std::string> const& args,
|
||||
cmExecutionStatus& status)
|
||||
{
|
||||
@ -936,6 +957,7 @@ bool cmStringCommand(std::vector<std::string> const& args,
|
||||
{ "TOUPPER"_s, HandleToUpperCommand },
|
||||
{ "COMPARE"_s, HandleCompareCommand },
|
||||
{ "ASCII"_s, HandleAsciiCommand },
|
||||
{ "HEX"_s, HandleHexCommand },
|
||||
{ "CONFIGURE"_s, HandleConfigureCommand },
|
||||
{ "LENGTH"_s, HandleLengthCommand },
|
||||
{ "APPEND"_s, HandleAppendCommand },
|
||||
|
20
Tests/RunCMake/string/Hex.cmake
Normal file
20
Tests/RunCMake/string/Hex.cmake
Normal file
@ -0,0 +1,20 @@
|
||||
function(assert_strequal input actual expected)
|
||||
if(NOT expected STREQUAL actual)
|
||||
message(SEND_ERROR "Output did not match expected\nInput string:\n ${input}\nExpected:\n ${expected}\nActual:\n ${actual}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
set(_input1 "The quick brown fox jumps over the lazy dog.")
|
||||
string(HEX "${_input1}" _result1)
|
||||
assert_strequal("${_input1}" "${_result1}" "54686520717569636b2062726f776e20666f78206a756d7073206f76657220746865206c617a7920646f672e")
|
||||
|
||||
set(_input2 "Hello world!")
|
||||
string(HEX "${_input2}" _result2)
|
||||
assert_strequal("${_input2}" "${_result2}" "48656c6c6f20776f726c6421")
|
||||
|
||||
set(_input3 "Ash nazg durbatulûk\nAsh nazg gimbatul\nAsh nazg thrakatulûk\nAgh burzum-ishi krimpatul")
|
||||
string(HEX "${_input3}" _result3)
|
||||
assert_strequal("${_input3}" "${_result3}" "417368206e617a6720647572626174756cc3bb6b0a417368206e617a672067696d626174756c0a417368206e617a6720746872616b6174756cc3bb6b0a416768206275727a756d2d69736869206b72696d706174756c")
|
||||
|
||||
string(HEX "" _result_empty)
|
||||
assert_strequal("" "${_result_empty}" "")
|
1
Tests/RunCMake/string/HexNotEnoughArgs-result.txt
Normal file
1
Tests/RunCMake/string/HexNotEnoughArgs-result.txt
Normal file
@ -0,0 +1 @@
|
||||
1
|
4
Tests/RunCMake/string/HexNotEnoughArgs-stderr.txt
Normal file
4
Tests/RunCMake/string/HexNotEnoughArgs-stderr.txt
Normal file
@ -0,0 +1,4 @@
|
||||
^CMake Error at HexNotEnoughArgs\.cmake:[0-9]+ \(string\):
|
||||
string Incorrect number of arguments
|
||||
Call Stack \(most recent call first\):
|
||||
CMakeLists\.txt:3 \(include\)$
|
1
Tests/RunCMake/string/HexNotEnoughArgs.cmake
Normal file
1
Tests/RunCMake/string/HexNotEnoughArgs.cmake
Normal file
@ -0,0 +1 @@
|
||||
string(HEX "Hello world!")
|
1
Tests/RunCMake/string/HexTooManyArgs-result.txt
Normal file
1
Tests/RunCMake/string/HexTooManyArgs-result.txt
Normal file
@ -0,0 +1 @@
|
||||
1
|
4
Tests/RunCMake/string/HexTooManyArgs-stderr.txt
Normal file
4
Tests/RunCMake/string/HexTooManyArgs-stderr.txt
Normal file
@ -0,0 +1,4 @@
|
||||
^CMake Error at HexTooManyArgs\.cmake:[0-9]+ \(string\):
|
||||
string Incorrect number of arguments
|
||||
Call Stack \(most recent call first\):
|
||||
CMakeLists\.txt:3 \(include\)$
|
1
Tests/RunCMake/string/HexTooManyArgs.cmake
Normal file
1
Tests/RunCMake/string/HexTooManyArgs.cmake
Normal file
@ -0,0 +1 @@
|
||||
string(HEX "Hello world!" _output bad)
|
@ -37,3 +37,7 @@ run_cmake(UTF-32LE)
|
||||
run_cmake(Repeat)
|
||||
run_cmake(RepeatNoArgs)
|
||||
run_cmake(RepeatNegativeCount)
|
||||
|
||||
run_cmake(Hex)
|
||||
run_cmake(HexTooManyArgs)
|
||||
run_cmake(HexNotEnoughArgs)
|
||||
|
Loading…
x
Reference in New Issue
Block a user