blob: ead35895a8b8451d49bdc2e95a23f5d4c7b762a5 [file] [log] [blame]
James Kuszmaulba0ac1a2022-08-12 16:29:30 -07001cmake_policy (PUSH)
2cmake_policy (VERSION 3.3)
3
4include (CMakeParseArguments)
5
6function (get_cache_variables _CACHEVARS)
7 set (_SINGLE)
8 set (_MULTI EXCLUDE)
9 set (_OPTIONS)
10
11 cmake_parse_arguments (_ARGS "${_OPTIONS}" "${_SINGLE}" "${_MULTI}" ${ARGS} ${ARGN})
12
13 get_cmake_property (_VARIABLES VARIABLES)
14
15 set (CACHEVARS)
16
17 foreach (_VAR ${_VARIABLES})
18 if (DEFINED _ARGS_EXCLUDE)
19 if ("${_VAR}" IN_LIST _ARGS_EXCLUDE)
20 continue ()
21 endif ("${_VAR}" IN_LIST _ARGS_EXCLUDE)
22 endif (DEFINED _ARGS_EXCLUDE)
23
24 get_property (_CACHEVARTYPE CACHE ${_VAR} PROPERTY TYPE)
25
26 if ("${_CACHEVARTYPE}" STREQUAL INTERNAL OR
27 "${_CACHEVARTYPE}" STREQUAL STATIC OR
28 "${_CACHEVARTYPE}" STREQUAL UNINITIALIZED)
29 continue ()
30 endif ("${_CACHEVARTYPE}" STREQUAL INTERNAL OR
31 "${_CACHEVARTYPE}" STREQUAL STATIC OR
32 "${_CACHEVARTYPE}" STREQUAL UNINITIALIZED)
33
34 get_property (_CACHEVARVAL CACHE ${_VAR} PROPERTY VALUE)
35
36 if ("${_CACHEVARVAL}" STREQUAL "")
37 continue ()
38 endif ("${_CACHEVARVAL}" STREQUAL "")
39
40 get_property (_CACHEVARDOC CACHE ${_VAR} PROPERTY HELPSTRING)
41
42 # Escape " in values
43 string (REPLACE "\"" "\\\"" _CACHEVARVAL "${_CACHEVARVAL}")
44 # Escape " in help strings
45 string (REPLACE "\"" "\\\"" _CACHEVARDOC "${_CACHEVARDOC}")
46 # Escape ; in values
47 string (REPLACE ";" "\\\;" _CACHEVARVAL "${_CACHEVARVAL}")
48 # Escape ; in help strings
49 string (REPLACE ";" "\\\;" _CACHEVARDOC "${_CACHEVARDOC}")
50 # Escape backslashes in values except those that are followed by a
51 # quote.
52 string (REGEX REPLACE "\\\\([^\"])" "\\\\\\1" _CACHEVARVAL "${_CACHEVARVAL}")
53 # Escape backslashes in values that are followed by a letter to avoid
54 # invalid escape sequence errors.
55 string (REGEX REPLACE "\\\\([a-zA-Z])" "\\\\\\\\1" _CACHEVARVAL "${_CACHEVARVAL}")
56 string (REPLACE "\\\\" "\\\\\\\\" _CACHEVARDOC "${_CACHEVARDOC}")
57
58 if (NOT "${_CACHEVARTYPE}" STREQUAL BOOL)
59 set (_CACHEVARVAL "\"${_CACHEVARVAL}\"")
60 endif (NOT "${_CACHEVARTYPE}" STREQUAL BOOL)
61
62 if (NOT "${_CACHEVARTYPE}" STREQUAL "" AND NOT "${_CACHEVARVAL}" STREQUAL "")
63 set (CACHEVARS "${CACHEVARS}set (${_VAR} ${_CACHEVARVAL} CACHE ${_CACHEVARTYPE} \"${_CACHEVARDOC}\")\n")
64 endif (NOT "${_CACHEVARTYPE}" STREQUAL "" AND NOT "${_CACHEVARVAL}" STREQUAL "")
65 endforeach (_VAR)
66
67 set (${_CACHEVARS} ${CACHEVARS} PARENT_SCOPE)
68endfunction (get_cache_variables)
69
70cmake_policy (POP)