diff options
| author | manuel <manuel@mausz.at> | 2016-03-08 21:02:53 +0100 |
|---|---|---|
| committer | manuel <manuel@mausz.at> | 2016-03-08 21:02:53 +0100 |
| commit | 9fc8b732737f139d3e466510d75668ab45578960 (patch) | |
| tree | 76db9bf5cb8cc869be908a5ed3d6f4cca3e3608a /project/cmake/scripts/common/managestring.cmake | |
| parent | b75e2659df11c23aa921d2eed83c23adc282ed27 (diff) | |
| download | kodi-pvr-build-9fc8b732737f139d3e466510d75668ab45578960.tar.gz kodi-pvr-build-9fc8b732737f139d3e466510d75668ab45578960.tar.bz2 kodi-pvr-build-9fc8b732737f139d3e466510d75668ab45578960.zip | |
sync with upstream
Diffstat (limited to 'project/cmake/scripts/common/managestring.cmake')
| -rw-r--r-- | project/cmake/scripts/common/managestring.cmake | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/project/cmake/scripts/common/managestring.cmake b/project/cmake/scripts/common/managestring.cmake new file mode 100644 index 0000000..7321f4c --- /dev/null +++ b/project/cmake/scripts/common/managestring.cmake | |||
| @@ -0,0 +1,235 @@ | |||
| 1 | # - Collection of String utility macros. | ||
| 2 | # Defines the following macros: | ||
| 3 | # STRING_TRIM(var str [NOUNQUOTE]) | ||
| 4 | # - Trim a string by removing the leading and trailing spaces, | ||
| 5 | # just like STRING(STRIP ...) in CMake 2.6 and later. | ||
| 6 | # This macro is needed as CMake 2.4 does not support STRING(STRIP ..) | ||
| 7 | # This macro also remove quote and double quote marks around the string, | ||
| 8 | # unless NOUNQUOTE is defined. | ||
| 9 | # * Parameters: | ||
| 10 | # + var: A variable that stores the result. | ||
| 11 | # + str: A string. | ||
| 12 | # + NOUNQUOTE: (Optional) do not remove the double quote mark around the string. | ||
| 13 | # | ||
| 14 | # STRING_UNQUOTE(var str) | ||
| 15 | # - Remove double quote marks and quote marks around a string. | ||
| 16 | # If the string is not quoted, then it returns an empty string. | ||
| 17 | # * Parameters: | ||
| 18 | # + var: A variable that stores the result. | ||
| 19 | # + str: A string. | ||
| 20 | # | ||
| 21 | # STRING_JOIN(var delimiter str_list [str...]) | ||
| 22 | # - Concatenate strings, with delimiter inserted between strings. | ||
| 23 | # * Parameters: | ||
| 24 | # + var: A variable that stores the result. | ||
| 25 | # + str_list: A list of string. | ||
| 26 | # + str: (Optional) more string to be join. | ||
| 27 | # | ||
| 28 | # STRING_SPLIT(var delimiter str [NOESCAPE_SEMICOLON]) | ||
| 29 | # - Split a string into a list using a delimiter, which can be in 1 or more | ||
| 30 | # characters long. | ||
| 31 | # * Parameters: | ||
| 32 | # + var: A variable that stores the result. | ||
| 33 | # + delimiter: To separate a string. | ||
| 34 | # + str: A string. | ||
| 35 | # + NOESCAPE_SEMICOLON: (Optional) Do not escape semicolons. | ||
| 36 | # | ||
| 37 | |||
| 38 | IF(NOT DEFINED _MANAGE_STRING_CMAKE_) | ||
| 39 | SET(_MANAGE_STRING_CMAKE_ "DEFINED") | ||
| 40 | |||
| 41 | MACRO(STRING_TRIM var str) | ||
| 42 | SET(${var} "") | ||
| 43 | IF (NOT "${ARGN}" STREQUAL "NOUNQUOTE") | ||
| 44 | # Need not trim a quoted string. | ||
| 45 | STRING_UNQUOTE(_var "${str}") | ||
| 46 | IF(NOT _var STREQUAL "") | ||
| 47 | # String is quoted | ||
| 48 | SET(${var} "${_var}") | ||
| 49 | ENDIF(NOT _var STREQUAL "") | ||
| 50 | ENDIF(NOT "${ARGN}" STREQUAL "NOUNQUOTE") | ||
| 51 | |||
| 52 | IF(${var} STREQUAL "") | ||
| 53 | SET(_var_1 "${str}") | ||
| 54 | STRING(REGEX REPLACE "^[ \t\r\n]+" "" _var_2 "${str}" ) | ||
| 55 | STRING(REGEX REPLACE "[ \t\r\n]+$" "" _var_3 "${_var_2}" ) | ||
| 56 | SET(${var} "${_var_3}") | ||
| 57 | ENDIF(${var} STREQUAL "") | ||
| 58 | ENDMACRO(STRING_TRIM var str) | ||
| 59 | |||
| 60 | # Internal macro | ||
| 61 | # Variable cannot be escaped here, as variable is already substituted | ||
| 62 | # at the time it passes to this macro. | ||
| 63 | MACRO(STRING_ESCAPE var str) | ||
| 64 | # ';' and '\' are tricky, need to be encoded. | ||
| 65 | # '#' => '#H' | ||
| 66 | # '\' => '#B' | ||
| 67 | # ';' => '#S' | ||
| 68 | SET(_NOESCAPE_SEMICOLON "") | ||
| 69 | SET(_NOESCAPE_HASH "") | ||
| 70 | |||
| 71 | FOREACH(_arg ${ARGN}) | ||
| 72 | IF(${_arg} STREQUAL "NOESCAPE_SEMICOLON") | ||
| 73 | SET(_NOESCAPE_SEMICOLON "NOESCAPE_SEMICOLON") | ||
| 74 | ELSEIF(${_arg} STREQUAL "NOESCAPE_HASH") | ||
| 75 | SET(_NOESCAPE_HASH "NOESCAPE_HASH") | ||
| 76 | ENDIF(${_arg} STREQUAL "NOESCAPE_SEMICOLON") | ||
| 77 | ENDFOREACH(_arg) | ||
| 78 | |||
| 79 | IF(_NOESCAPE_HASH STREQUAL "") | ||
| 80 | STRING(REGEX REPLACE "#" "#H" _ret "${str}") | ||
| 81 | ELSE(_NOESCAPE_HASH STREQUAL "") | ||
| 82 | SET(_ret "${str}") | ||
| 83 | ENDIF(_NOESCAPE_HASH STREQUAL "") | ||
| 84 | |||
| 85 | STRING(REGEX REPLACE "\\\\" "#B" _ret "${_ret}") | ||
| 86 | IF(_NOESCAPE_SEMICOLON STREQUAL "") | ||
| 87 | STRING(REGEX REPLACE ";" "#S" _ret "${_ret}") | ||
| 88 | ENDIF(_NOESCAPE_SEMICOLON STREQUAL "") | ||
| 89 | SET(${var} "${_ret}") | ||
| 90 | ENDMACRO(STRING_ESCAPE var str) | ||
| 91 | |||
| 92 | MACRO(STRING_UNESCAPE var str) | ||
| 93 | # '#B' => '\' | ||
| 94 | # '#H' => '#' | ||
| 95 | # '#D' => '$' | ||
| 96 | # '#S' => ';' | ||
| 97 | SET(_ESCAPE_VARIABLE "") | ||
| 98 | SET(_NOESCAPE_SEMICOLON "") | ||
| 99 | SET(_ret "${str}") | ||
| 100 | FOREACH(_arg ${ARGN}) | ||
| 101 | IF(${_arg} STREQUAL "NOESCAPE_SEMICOLON") | ||
| 102 | SET(_NOESCAPE_SEMICOLON "NOESCAPE_SEMICOLON") | ||
| 103 | ELSEIF(${_arg} STREQUAL "ESCAPE_VARIABLE") | ||
| 104 | SET(_ESCAPE_VARIABLE "ESCAPE_VARIABLE") | ||
| 105 | STRING(REGEX REPLACE "#D" "$" _ret "${_ret}") | ||
| 106 | ENDIF(${_arg} STREQUAL "NOESCAPE_SEMICOLON") | ||
| 107 | ENDFOREACH(_arg) | ||
| 108 | |||
| 109 | STRING(REGEX REPLACE "#B" "\\\\" _ret "${_ret}") | ||
| 110 | IF(_NOESCAPE_SEMICOLON STREQUAL "") | ||
| 111 | # ';' => '#S' | ||
| 112 | STRING(REGEX REPLACE "#S" "\\\\;" _ret "${_ret}") | ||
| 113 | ELSE(_NOESCAPE_SEMICOLON STREQUAL "") | ||
| 114 | STRING(REGEX REPLACE "#S" ";" _ret "${_ret}") | ||
| 115 | ENDIF(_NOESCAPE_SEMICOLON STREQUAL "") | ||
| 116 | |||
| 117 | IF(NOT _ESCAPE_VARIABLE STREQUAL "") | ||
| 118 | # '#D' => '$' | ||
| 119 | STRING(REGEX REPLACE "#D" "$" _ret "${_ret}") | ||
| 120 | ENDIF(NOT _ESCAPE_VARIABLE STREQUAL "") | ||
| 121 | STRING(REGEX REPLACE "#H" "#" _ret "${_ret}") | ||
| 122 | SET(${var} "${_ret}") | ||
| 123 | ENDMACRO(STRING_UNESCAPE var str) | ||
| 124 | |||
| 125 | |||
| 126 | MACRO(STRING_UNQUOTE var str) | ||
| 127 | STRING_ESCAPE(_ret "${str}" ${ARGN}) | ||
| 128 | IF(_ret MATCHES "^[ \t\r\n]+") | ||
| 129 | STRING(REGEX REPLACE "^[ \t\r\n]+" "" _ret "${_ret}") | ||
| 130 | ENDIF(_ret MATCHES "^[ \t\r\n]+") | ||
| 131 | IF(_ret MATCHES "^\"") | ||
| 132 | # Double quote | ||
| 133 | STRING(REGEX REPLACE "\"\(.*\)\"[ \t\r\n]*$" "\\1" _ret "${_ret}") | ||
| 134 | ELSEIF(_ret MATCHES "^'") | ||
| 135 | # Single quote | ||
| 136 | STRING(REGEX REPLACE "'\(.*\)'[ \t\r\n]*$" "\\1" _ret "${_ret}") | ||
| 137 | ELSE(_ret MATCHES "^\"") | ||
| 138 | SET(_ret "") | ||
| 139 | ENDIF(_ret MATCHES "^\"") | ||
| 140 | |||
| 141 | # Unencoding | ||
| 142 | STRING_UNESCAPE(${var} "${_ret}" ${ARGN}) | ||
| 143 | ENDMACRO(STRING_UNQUOTE var str) | ||
| 144 | |||
| 145 | MACRO(STRING_JOIN var delimiter str_list) | ||
| 146 | SET(_ret "") | ||
| 147 | FOREACH(_str ${str_list}) | ||
| 148 | IF(_ret STREQUAL "") | ||
| 149 | SET(_ret "${_str}") | ||
| 150 | ELSE(_ret STREQUAL "") | ||
| 151 | SET(_ret "${_ret}${delimiter}${_str}") | ||
| 152 | ENDIF(_ret STREQUAL "") | ||
| 153 | ENDFOREACH(_str ${str_list}) | ||
| 154 | |||
| 155 | FOREACH(_str ${ARGN}) | ||
| 156 | IF(_ret STREQUAL "") | ||
| 157 | SET(_ret "${_str}") | ||
| 158 | ELSE(_ret STREQUAL "") | ||
| 159 | SET(_ret "${_ret}${delimiter}${_str}") | ||
| 160 | ENDIF(_ret STREQUAL "") | ||
| 161 | ENDFOREACH(_str ${str_list}) | ||
| 162 | SET(${var} "${_ret}") | ||
| 163 | ENDMACRO(STRING_JOIN var delimiter str_list) | ||
| 164 | |||
| 165 | MACRO(STRING_SPLIT var delimiter str) | ||
| 166 | SET(_max_tokens "") | ||
| 167 | SET(_NOESCAPE_SEMICOLON "") | ||
| 168 | SET(_ESCAPE_VARIABLE "") | ||
| 169 | FOREACH(_arg ${ARGN}) | ||
| 170 | IF(${_arg} STREQUAL "NOESCAPE_SEMICOLON") | ||
| 171 | SET(_NOESCAPE_SEMICOLON "NOESCAPE_SEMICOLON") | ||
| 172 | ELSEIF(${_arg} STREQUAL "ESCAPE_VARIABLE") | ||
| 173 | SET(_ESCAPE_VARIABLE "ESCAPE_VARIABLE") | ||
| 174 | ELSE(${_arg} STREQUAL "NOESCAPE_SEMICOLON") | ||
| 175 | SET(_max_tokens ${_arg}) | ||
| 176 | ENDIF(${_arg} STREQUAL "NOESCAPE_SEMICOLON") | ||
| 177 | ENDFOREACH(_arg) | ||
| 178 | |||
| 179 | IF(NOT _max_tokens) | ||
| 180 | SET(_max_tokens -1) | ||
| 181 | ENDIF(NOT _max_tokens) | ||
| 182 | |||
| 183 | STRING_ESCAPE(_str "${str}" ${_NOESCAPE_SEMICOLON} ${_ESCAPE_VARIABLE}) | ||
| 184 | STRING_ESCAPE(_delimiter "${delimiter}" ${_NOESCAPE_SEMICOLON} ${_ESCAPE_VARIABLE}) | ||
| 185 | |||
| 186 | SET(_str_list "") | ||
| 187 | SET(_token_count 0) | ||
| 188 | STRING(LENGTH "${_delimiter}" _de_len) | ||
| 189 | |||
| 190 | WHILE(NOT _token_count EQUAL _max_tokens) | ||
| 191 | MATH(EXPR _token_count ${_token_count}+1) | ||
| 192 | IF(_token_count EQUAL _max_tokens) | ||
| 193 | # Last token, no need splitting | ||
| 194 | SET(_str_list ${_str_list} "${_str}") | ||
| 195 | ELSE(_token_count EQUAL _max_tokens) | ||
| 196 | # in case encoded characters are delimiters | ||
| 197 | STRING(LENGTH "${_str}" _str_len) | ||
| 198 | SET(_index 0) | ||
| 199 | SET(_token "") | ||
| 200 | SET(_str_remain "") | ||
| 201 | MATH(EXPR _str_end ${_str_len}-${_de_len}+1) | ||
| 202 | SET(_bound "k") | ||
| 203 | WHILE(_index LESS _str_end) | ||
| 204 | STRING(SUBSTRING "${_str}" ${_index} ${_de_len} _str_cursor) | ||
| 205 | IF(_str_cursor STREQUAL _delimiter) | ||
| 206 | # Get the token | ||
| 207 | STRING(SUBSTRING "${_str}" 0 ${_index} _token) | ||
| 208 | # Get the rest | ||
| 209 | MATH(EXPR _rest_index ${_index}+${_de_len}) | ||
| 210 | MATH(EXPR _rest_len ${_str_len}-${_index}-${_de_len}) | ||
| 211 | STRING(SUBSTRING "${_str}" ${_rest_index} ${_rest_len} _str_remain) | ||
| 212 | SET(_index ${_str_end}) | ||
| 213 | ELSE(_str_cursor STREQUAL _delimiter) | ||
| 214 | MATH(EXPR _index ${_index}+1) | ||
| 215 | ENDIF(_str_cursor STREQUAL _delimiter) | ||
| 216 | ENDWHILE(_index LESS _str_end) | ||
| 217 | |||
| 218 | IF(_str_remain STREQUAL "") | ||
| 219 | # Meaning: end of string | ||
| 220 | LIST(APPEND _str_list "${_str}") | ||
| 221 | SET(_max_tokens ${_token_count}) | ||
| 222 | ELSE(_str_remain STREQUAL "") | ||
| 223 | LIST(APPEND _str_list "${_token}") | ||
| 224 | SET(_str "${_str_remain}") | ||
| 225 | ENDIF(_str_remain STREQUAL "") | ||
| 226 | ENDIF(_token_count EQUAL _max_tokens) | ||
| 227 | ENDWHILE(NOT _token_count EQUAL _max_tokens) | ||
| 228 | |||
| 229 | |||
| 230 | # Unencoding | ||
| 231 | STRING_UNESCAPE(${var} "${_str_list}" ${_NOESCAPE_SEMICOLON} ${_ESCAPE_VARIABLE}) | ||
| 232 | ENDMACRO(STRING_SPLIT var delimiter str) | ||
| 233 | |||
| 234 | ENDIF(NOT DEFINED _MANAGE_STRING_CMAKE_) | ||
| 235 | |||
