CMakePushCheckState.cmake 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. # This module defines two macros:
  2. # CMAKE_PUSH_CHECK_STATE()
  3. # and
  4. # CMAKE_POP_CHECK_STATE()
  5. # These two macros can be used to save and restore the state of the variables
  6. # CMAKE_REQUIRED_FLAGS, CMAKE_REQUIRED_DEFINITIONS, CMAKE_REQUIRED_LIBRARIES
  7. # and CMAKE_REQUIRED_INCLUDES used by the various Check-files coming with CMake,
  8. # like e.g. check_function_exists() etc.
  9. # The variable contents are pushed on a stack, pushing multiple times is supported.
  10. # This is useful e.g. when executing such tests in a Find-module, where they have to be set,
  11. # but after the Find-module has been executed they should have the same value
  12. # as they had before.
  13. #
  14. # Usage:
  15. # cmake_push_check_state()
  16. # set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -DSOME_MORE_DEF)
  17. # check_function_exists(...)
  18. # cmake_pop_check_state()
  19. #=============================================================================
  20. # Copyright 2006-2011 Alexander Neundorf, <[email protected]>
  21. #
  22. # Distributed under the OSI-approved BSD License (the "License");
  23. # see accompanying file Copyright.txt for details.
  24. #
  25. # This software is distributed WITHOUT ANY WARRANTY; without even the
  26. # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  27. # See the License for more information.
  28. #=============================================================================
  29. # (To distribute this file outside of CMake, substitute the full
  30. # License text for the above reference.)
  31. MACRO(CMAKE_PUSH_CHECK_STATE)
  32. IF(NOT DEFINED _CMAKE_PUSH_CHECK_STATE_COUNTER)
  33. SET(_CMAKE_PUSH_CHECK_STATE_COUNTER 0)
  34. ENDIF()
  35. MATH(EXPR _CMAKE_PUSH_CHECK_STATE_COUNTER "${_CMAKE_PUSH_CHECK_STATE_COUNTER}+1")
  36. SET(_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_INCLUDES})
  37. SET(_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_DEFINITIONS})
  38. SET(_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_LIBRARIES})
  39. SET(_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER} ${CMAKE_REQUIRED_FLAGS})
  40. ENDMACRO(CMAKE_PUSH_CHECK_STATE)
  41. MACRO(CMAKE_POP_CHECK_STATE)
  42. # don't pop more than we pushed
  43. IF("${_CMAKE_PUSH_CHECK_STATE_COUNTER}" GREATER "0")
  44. SET(CMAKE_REQUIRED_INCLUDES ${_CMAKE_REQUIRED_INCLUDES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
  45. SET(CMAKE_REQUIRED_DEFINITIONS ${_CMAKE_REQUIRED_DEFINITIONS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
  46. SET(CMAKE_REQUIRED_LIBRARIES ${_CMAKE_REQUIRED_LIBRARIES_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
  47. SET(CMAKE_REQUIRED_FLAGS ${_CMAKE_REQUIRED_FLAGS_SAVE_${_CMAKE_PUSH_CHECK_STATE_COUNTER}})
  48. MATH(EXPR _CMAKE_PUSH_CHECK_STATE_COUNTER "${_CMAKE_PUSH_CHECK_STATE_COUNTER}-1")
  49. ENDIF()
  50. ENDMACRO(CMAKE_POP_CHECK_STATE)