Files
Matthew Woehlke 72e7305c3e Diagnostics: Handle CMAKE_{WARN,ERROR}_DEPRECATED
Update documentation for aforementioned variables, as their use is
deprecated under the new diagnostic system. Introduce a policy which
reintroduces their use to control specific deprecation diagnostics if
the policy is not NEW.

Note that this means there is NO synchronization between the variables
and the new diagnostic state.
2026-05-07 11:07:27 -04:00

73 lines
2.3 KiB
CMake

cmake_policy(SET CMP0218 NEW)
function(expect NAME ACTUAL EXPECTED)
if(NOT "${ACTUAL}" STREQUAL "${EXPECTED}")
message(SEND_ERROR "${NAME} is '${ACTUAL}'; should be '${EXPECTED}'")
endif()
endfunction()
if(DEFINED CMAKE_WARN_DEPRECATED)
message(SEND_ERROR "CMAKE_WARN_DEPRECATED should not be defined")
endif()
if(DEFINED CMAKE_ERROR_DEPRECATED)
message(SEND_ERROR "CMAKE_ERROR_DEPRECATED should not be defined")
endif()
cmake_diagnostic(GET CMD_DEPRECATED action)
if(NOT "${action}" STREQUAL "WARN")
message(SEND_ERROR "CMD_DEPRECATED is ${action}; should be WARN")
endif()
# -----------------------------------------------------------------------------
# Setting CMAKE_WARN_DEPRECATED should have no effect on CMD_DEPRECATED
block()
set(CMAKE_WARN_DEPRECATED OFF)
cmake_diagnostic(GET CMD_DEPRECATED action)
if(NOT "${action}" STREQUAL "WARN")
message(SEND_ERROR "CMD_DEPRECATED is ${action}; should be WARN")
endif()
endblock()
# -----------------------------------------------------------------------------
# Setting CMAKE_ERROR_DEPRECATED should have no effect on CMD_DEPRECATED
block()
set(CMAKE_ERROR_DEPRECATED ON)
cmake_diagnostic(GET CMD_DEPRECATED action)
if(NOT "${action}" STREQUAL "WARN")
message(SEND_ERROR "CMD_DEPRECATED is ${action}; should be WARN")
endif()
endblock()
# -----------------------------------------------------------------------------
# Changing CMD_DEPRECATED should have no effect on variables
block()
cmake_diagnostic(SET CMD_DEPRECATED IGNORE)
if(DEFINED CMAKE_WARN_DEPRECATED)
message(SEND_ERROR "CMAKE_WARN_DEPRECATED should not be defined")
endif()
if(DEFINED CMAKE_ERROR_DEPRECATED)
message(SEND_ERROR "CMAKE_ERROR_DEPRECATED should not be defined")
endif()
expect(CMAKE_WARN_DEPRECATED "${CMAKE_WARN_DEPRECATED}" "")
expect(CMAKE_ERROR_DEPRECATED "${CMAKE_ERROR_DEPRECATED}" "")
cmake_diagnostic(SET CMD_DEPRECATED SEND_ERROR)
if(DEFINED CMAKE_WARN_DEPRECATED)
message(SEND_ERROR "CMAKE_WARN_DEPRECATED should not be defined")
endif()
if(DEFINED CMAKE_ERROR_DEPRECATED)
message(SEND_ERROR "CMAKE_ERROR_DEPRECATED should not be defined")
endif()
expect(CMAKE_WARN_DEPRECATED "${CMAKE_WARN_DEPRECATED}" "")
expect(CMAKE_ERROR_DEPRECATED "${CMAKE_ERROR_DEPRECATED}" "")
endblock()