GetCacheVariables.cmake 2.4 KB

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