diff options
Diffstat (limited to 'project/cmake/scripts/common/ManageString.cmake')
-rw-r--r-- | project/cmake/scripts/common/ManageString.cmake | 314 |
1 files changed, 157 insertions, 157 deletions
diff --git a/project/cmake/scripts/common/ManageString.cmake b/project/cmake/scripts/common/ManageString.cmake index 7321f4cbe3..c9d5f041c3 100644 --- a/project/cmake/scripts/common/ManageString.cmake +++ b/project/cmake/scripts/common/ManageString.cmake @@ -2,8 +2,8 @@ # Defines the following macros: # STRING_TRIM(var str [NOUNQUOTE]) # - Trim a string by removing the leading and trailing spaces, -# just like STRING(STRIP ...) in CMake 2.6 and later. -# This macro is needed as CMake 2.4 does not support STRING(STRIP ..) +# just like string(STRIP ...) in CMake 2.6 and later. +# This macro is needed as CMake 2.4 does not support string(STRIP ..) # This macro also remove quote and double quote marks around the string, # unless NOUNQUOTE is defined. # * Parameters: @@ -35,201 +35,201 @@ # + NOESCAPE_SEMICOLON: (Optional) Do not escape semicolons. # -IF(NOT DEFINED _MANAGE_STRING_CMAKE_) - SET(_MANAGE_STRING_CMAKE_ "DEFINED") +if(NOT DEFINED _MANAGE_STRING_CMAKE_) + set(_MANAGE_STRING_CMAKE_ "DEFINED") - MACRO(STRING_TRIM var str) - SET(${var} "") - IF (NOT "${ARGN}" STREQUAL "NOUNQUOTE") + macro(STRING_TRIM var str) + set(${var} "") + if(NOT "${ARGN}" STREQUAL "NOUNQUOTE") # Need not trim a quoted string. STRING_UNQUOTE(_var "${str}") - IF(NOT _var STREQUAL "") + if(NOT _var STREQUAL "") # String is quoted - SET(${var} "${_var}") - ENDIF(NOT _var STREQUAL "") - ENDIF(NOT "${ARGN}" STREQUAL "NOUNQUOTE") - - IF(${var} STREQUAL "") - SET(_var_1 "${str}") - STRING(REGEX REPLACE "^[ \t\r\n]+" "" _var_2 "${str}" ) - STRING(REGEX REPLACE "[ \t\r\n]+$" "" _var_3 "${_var_2}" ) - SET(${var} "${_var_3}") - ENDIF(${var} STREQUAL "") - ENDMACRO(STRING_TRIM var str) + set(${var} "${_var}") + endif(NOT _var STREQUAL "") + endif(NOT "${ARGN}" STREQUAL "NOUNQUOTE") + + if(${var} STREQUAL "") + set(_var_1 "${str}") + string(REGEX REPLACE "^[ \t\r\n]+" "" _var_2 "${str}" ) + string(REGEX REPLACE "[ \t\r\n]+$" "" _var_3 "${_var_2}" ) + set(${var} "${_var_3}") + endif(${var} STREQUAL "") + endmacro(STRING_TRIM var str) # Internal macro # Variable cannot be escaped here, as variable is already substituted # at the time it passes to this macro. - MACRO(STRING_ESCAPE var str) + macro(STRING_ESCAPE var str) # ';' and '\' are tricky, need to be encoded. # '#' => '#H' # '\' => '#B' # ';' => '#S' - SET(_NOESCAPE_SEMICOLON "") - SET(_NOESCAPE_HASH "") - - FOREACH(_arg ${ARGN}) - IF(${_arg} STREQUAL "NOESCAPE_SEMICOLON") - SET(_NOESCAPE_SEMICOLON "NOESCAPE_SEMICOLON") - ELSEIF(${_arg} STREQUAL "NOESCAPE_HASH") - SET(_NOESCAPE_HASH "NOESCAPE_HASH") - ENDIF(${_arg} STREQUAL "NOESCAPE_SEMICOLON") - ENDFOREACH(_arg) - - IF(_NOESCAPE_HASH STREQUAL "") - STRING(REGEX REPLACE "#" "#H" _ret "${str}") - ELSE(_NOESCAPE_HASH STREQUAL "") - SET(_ret "${str}") - ENDIF(_NOESCAPE_HASH STREQUAL "") - - STRING(REGEX REPLACE "\\\\" "#B" _ret "${_ret}") - IF(_NOESCAPE_SEMICOLON STREQUAL "") - STRING(REGEX REPLACE ";" "#S" _ret "${_ret}") - ENDIF(_NOESCAPE_SEMICOLON STREQUAL "") - SET(${var} "${_ret}") - ENDMACRO(STRING_ESCAPE var str) - - MACRO(STRING_UNESCAPE var str) + set(_NOESCAPE_SEMICOLON "") + set(_NOESCAPE_HASH "") + + foreach(_arg ${ARGN}) + if(${_arg} STREQUAL "NOESCAPE_SEMICOLON") + set(_NOESCAPE_SEMICOLON "NOESCAPE_SEMICOLON") + elseif(${_arg} STREQUAL "NOESCAPE_HASH") + set(_NOESCAPE_HASH "NOESCAPE_HASH") + endif(${_arg} STREQUAL "NOESCAPE_SEMICOLON") + endforeach(_arg) + + if(_NOESCAPE_HASH STREQUAL "") + string(REGEX REPLACE "#" "#H" _ret "${str}") + else(_NOESCAPE_HASH STREQUAL "") + set(_ret "${str}") + endif(_NOESCAPE_HASH STREQUAL "") + + string(REGEX REPLACE "\\\\" "#B" _ret "${_ret}") + if(_NOESCAPE_SEMICOLON STREQUAL "") + string(REGEX REPLACE ";" "#S" _ret "${_ret}") + endif(_NOESCAPE_SEMICOLON STREQUAL "") + set(${var} "${_ret}") + endmacro(STRING_ESCAPE var str) + + macro(STRING_UNESCAPE var str) # '#B' => '\' # '#H' => '#' # '#D' => '$' # '#S' => ';' - SET(_ESCAPE_VARIABLE "") - SET(_NOESCAPE_SEMICOLON "") - SET(_ret "${str}") - FOREACH(_arg ${ARGN}) - IF(${_arg} STREQUAL "NOESCAPE_SEMICOLON") - SET(_NOESCAPE_SEMICOLON "NOESCAPE_SEMICOLON") - ELSEIF(${_arg} STREQUAL "ESCAPE_VARIABLE") - SET(_ESCAPE_VARIABLE "ESCAPE_VARIABLE") - STRING(REGEX REPLACE "#D" "$" _ret "${_ret}") - ENDIF(${_arg} STREQUAL "NOESCAPE_SEMICOLON") - ENDFOREACH(_arg) - - STRING(REGEX REPLACE "#B" "\\\\" _ret "${_ret}") - IF(_NOESCAPE_SEMICOLON STREQUAL "") + set(_ESCAPE_VARIABLE "") + set(_NOESCAPE_SEMICOLON "") + set(_ret "${str}") + foreach(_arg ${ARGN}) + if(${_arg} STREQUAL "NOESCAPE_SEMICOLON") + set(_NOESCAPE_SEMICOLON "NOESCAPE_SEMICOLON") + elseif(${_arg} STREQUAL "ESCAPE_VARIABLE") + set(_ESCAPE_VARIABLE "ESCAPE_VARIABLE") + string(REGEX REPLACE "#D" "$" _ret "${_ret}") + endif(${_arg} STREQUAL "NOESCAPE_SEMICOLON") + endforeach(_arg) + + string(REGEX REPLACE "#B" "\\\\" _ret "${_ret}") + if(_NOESCAPE_SEMICOLON STREQUAL "") # ';' => '#S' - STRING(REGEX REPLACE "#S" "\\\\;" _ret "${_ret}") - ELSE(_NOESCAPE_SEMICOLON STREQUAL "") - STRING(REGEX REPLACE "#S" ";" _ret "${_ret}") - ENDIF(_NOESCAPE_SEMICOLON STREQUAL "") + string(REGEX REPLACE "#S" "\\\\;" _ret "${_ret}") + else(_NOESCAPE_SEMICOLON STREQUAL "") + string(REGEX REPLACE "#S" ";" _ret "${_ret}") + endif(_NOESCAPE_SEMICOLON STREQUAL "") - IF(NOT _ESCAPE_VARIABLE STREQUAL "") + if(NOT _ESCAPE_VARIABLE STREQUAL "") # '#D' => '$' - STRING(REGEX REPLACE "#D" "$" _ret "${_ret}") - ENDIF(NOT _ESCAPE_VARIABLE STREQUAL "") - STRING(REGEX REPLACE "#H" "#" _ret "${_ret}") - SET(${var} "${_ret}") - ENDMACRO(STRING_UNESCAPE var str) + string(REGEX REPLACE "#D" "$" _ret "${_ret}") + endif(NOT _ESCAPE_VARIABLE STREQUAL "") + string(REGEX REPLACE "#H" "#" _ret "${_ret}") + set(${var} "${_ret}") + endmacro(STRING_UNESCAPE var str) - MACRO(STRING_UNQUOTE var str) + macro(STRING_UNQUOTE var str) STRING_ESCAPE(_ret "${str}" ${ARGN}) - IF(_ret MATCHES "^[ \t\r\n]+") - STRING(REGEX REPLACE "^[ \t\r\n]+" "" _ret "${_ret}") - ENDIF(_ret MATCHES "^[ \t\r\n]+") - IF(_ret MATCHES "^\"") + if(_ret MATCHES "^[ \t\r\n]+") + string(REGEX REPLACE "^[ \t\r\n]+" "" _ret "${_ret}") + endif(_ret MATCHES "^[ \t\r\n]+") + if(_ret MATCHES "^\"") # Double quote - STRING(REGEX REPLACE "\"\(.*\)\"[ \t\r\n]*$" "\\1" _ret "${_ret}") - ELSEIF(_ret MATCHES "^'") + string(REGEX REPLACE "\"\(.*\)\"[ \t\r\n]*$" "\\1" _ret "${_ret}") + elseif(_ret MATCHES "^'") # Single quote - STRING(REGEX REPLACE "'\(.*\)'[ \t\r\n]*$" "\\1" _ret "${_ret}") - ELSE(_ret MATCHES "^\"") - SET(_ret "") - ENDIF(_ret MATCHES "^\"") + string(REGEX REPLACE "'\(.*\)'[ \t\r\n]*$" "\\1" _ret "${_ret}") + else(_ret MATCHES "^\"") + set(_ret "") + endif(_ret MATCHES "^\"") # Unencoding STRING_UNESCAPE(${var} "${_ret}" ${ARGN}) - ENDMACRO(STRING_UNQUOTE var str) - - MACRO(STRING_JOIN var delimiter str_list) - SET(_ret "") - FOREACH(_str ${str_list}) - IF(_ret STREQUAL "") - SET(_ret "${_str}") - ELSE(_ret STREQUAL "") - SET(_ret "${_ret}${delimiter}${_str}") - ENDIF(_ret STREQUAL "") - ENDFOREACH(_str ${str_list}) - - FOREACH(_str ${ARGN}) - IF(_ret STREQUAL "") - SET(_ret "${_str}") - ELSE(_ret STREQUAL "") - SET(_ret "${_ret}${delimiter}${_str}") - ENDIF(_ret STREQUAL "") - ENDFOREACH(_str ${str_list}) - SET(${var} "${_ret}") - ENDMACRO(STRING_JOIN var delimiter str_list) - - MACRO(STRING_SPLIT var delimiter str) - SET(_max_tokens "") - SET(_NOESCAPE_SEMICOLON "") - SET(_ESCAPE_VARIABLE "") - FOREACH(_arg ${ARGN}) - IF(${_arg} STREQUAL "NOESCAPE_SEMICOLON") - SET(_NOESCAPE_SEMICOLON "NOESCAPE_SEMICOLON") - ELSEIF(${_arg} STREQUAL "ESCAPE_VARIABLE") - SET(_ESCAPE_VARIABLE "ESCAPE_VARIABLE") - ELSE(${_arg} STREQUAL "NOESCAPE_SEMICOLON") - SET(_max_tokens ${_arg}) - ENDIF(${_arg} STREQUAL "NOESCAPE_SEMICOLON") - ENDFOREACH(_arg) - - IF(NOT _max_tokens) - SET(_max_tokens -1) - ENDIF(NOT _max_tokens) + endmacro(STRING_UNQUOTE var str) + + macro(STRING_JOIN var delimiter str_list) + set(_ret "") + foreach(_str ${str_list}) + if(_ret STREQUAL "") + set(_ret "${_str}") + else(_ret STREQUAL "") + set(_ret "${_ret}${delimiter}${_str}") + endif(_ret STREQUAL "") + endforeach(_str ${str_list}) + + foreach(_str ${ARGN}) + if(_ret STREQUAL "") + set(_ret "${_str}") + else(_ret STREQUAL "") + set(_ret "${_ret}${delimiter}${_str}") + endif(_ret STREQUAL "") + endforeach(_str ${str_list}) + set(${var} "${_ret}") + endmacro(STRING_JOIN var delimiter str_list) + + macro(STRING_SPLIT var delimiter str) + set(_max_tokens "") + set(_NOESCAPE_SEMICOLON "") + set(_ESCAPE_VARIABLE "") + foreach(_arg ${ARGN}) + if(${_arg} STREQUAL "NOESCAPE_SEMICOLON") + set(_NOESCAPE_SEMICOLON "NOESCAPE_SEMICOLON") + elseif(${_arg} STREQUAL "ESCAPE_VARIABLE") + set(_ESCAPE_VARIABLE "ESCAPE_VARIABLE") + else(${_arg} STREQUAL "NOESCAPE_SEMICOLON") + set(_max_tokens ${_arg}) + endif(${_arg} STREQUAL "NOESCAPE_SEMICOLON") + endforeach(_arg) + + if(NOT _max_tokens) + set(_max_tokens -1) + endif(NOT _max_tokens) STRING_ESCAPE(_str "${str}" ${_NOESCAPE_SEMICOLON} ${_ESCAPE_VARIABLE}) STRING_ESCAPE(_delimiter "${delimiter}" ${_NOESCAPE_SEMICOLON} ${_ESCAPE_VARIABLE}) - SET(_str_list "") - SET(_token_count 0) - STRING(LENGTH "${_delimiter}" _de_len) + set(_str_list "") + set(_token_count 0) + string(LENGTH "${_delimiter}" _de_len) - WHILE(NOT _token_count EQUAL _max_tokens) - MATH(EXPR _token_count ${_token_count}+1) - IF(_token_count EQUAL _max_tokens) + while(NOT _token_count EQUAL _max_tokens) + math(EXPR _token_count ${_token_count}+1) + if(_token_count EQUAL _max_tokens) # Last token, no need splitting - SET(_str_list ${_str_list} "${_str}") - ELSE(_token_count EQUAL _max_tokens) + set(_str_list ${_str_list} "${_str}") + else(_token_count EQUAL _max_tokens) # in case encoded characters are delimiters - STRING(LENGTH "${_str}" _str_len) - SET(_index 0) - SET(_token "") - SET(_str_remain "") - MATH(EXPR _str_end ${_str_len}-${_de_len}+1) - SET(_bound "k") - WHILE(_index LESS _str_end) - STRING(SUBSTRING "${_str}" ${_index} ${_de_len} _str_cursor) - IF(_str_cursor STREQUAL _delimiter) + string(LENGTH "${_str}" _str_len) + set(_index 0) + set(_token "") + set(_str_remain "") + math(EXPR _str_end ${_str_len}-${_de_len}+1) + set(_bound "k") + while(_index LESS _str_end) + string(SUBSTRING "${_str}" ${_index} ${_de_len} _str_cursor) + if(_str_cursor STREQUAL _delimiter) # Get the token - STRING(SUBSTRING "${_str}" 0 ${_index} _token) + string(SUBSTRING "${_str}" 0 ${_index} _token) # Get the rest - MATH(EXPR _rest_index ${_index}+${_de_len}) - MATH(EXPR _rest_len ${_str_len}-${_index}-${_de_len}) - STRING(SUBSTRING "${_str}" ${_rest_index} ${_rest_len} _str_remain) - SET(_index ${_str_end}) - ELSE(_str_cursor STREQUAL _delimiter) - MATH(EXPR _index ${_index}+1) - ENDIF(_str_cursor STREQUAL _delimiter) - ENDWHILE(_index LESS _str_end) - - IF(_str_remain STREQUAL "") + math(EXPR _rest_index ${_index}+${_de_len}) + math(EXPR _rest_len ${_str_len}-${_index}-${_de_len}) + string(SUBSTRING "${_str}" ${_rest_index} ${_rest_len} _str_remain) + set(_index ${_str_end}) + else(_str_cursor STREQUAL _delimiter) + math(EXPR _index ${_index}+1) + endif(_str_cursor STREQUAL _delimiter) + endwhile(_index LESS _str_end) + + if(_str_remain STREQUAL "") # Meaning: end of string - LIST(APPEND _str_list "${_str}") - SET(_max_tokens ${_token_count}) - ELSE(_str_remain STREQUAL "") - LIST(APPEND _str_list "${_token}") - SET(_str "${_str_remain}") - ENDIF(_str_remain STREQUAL "") - ENDIF(_token_count EQUAL _max_tokens) - ENDWHILE(NOT _token_count EQUAL _max_tokens) + list(APPEND _str_list "${_str}") + set(_max_tokens ${_token_count}) + else(_str_remain STREQUAL "") + list(APPEND _str_list "${_token}") + set(_str "${_str_remain}") + endif(_str_remain STREQUAL "") + endif(_token_count EQUAL _max_tokens) + endwhile(NOT _token_count EQUAL _max_tokens) # Unencoding STRING_UNESCAPE(${var} "${_str_list}" ${_NOESCAPE_SEMICOLON} ${_ESCAPE_VARIABLE}) - ENDMACRO(STRING_SPLIT var delimiter str) + endmacro(STRING_SPLIT var delimiter str) -ENDIF(NOT DEFINED _MANAGE_STRING_CMAKE_) +endif(NOT DEFINED _MANAGE_STRING_CMAKE_) |