
ifeq ($(QT_MAC_SDK_NO_VERSION_CHECK),)
    CHECK_SDK_COMMAND = /usr/bin/xcrun --sdk $(EXPORT_QMAKE_MAC_SDK) -show-sdk-version 2>&1
    CURRENT_MAC_SDK_VERSION := $(shell DEVELOPER_DIR=$(EXPORT_QMAKE_XCODE_DEVELOPER_PATH) $(CHECK_SDK_COMMAND))
    ifneq ($(CURRENT_MAC_SDK_VERSION),$(EXPORT_QMAKE_MAC_SDK_VERSION))
        # We don't want to complain about out of date SDK unless the target needs to be remade.
        # This covers use-cases such as running 'make check' after moving the build to a
        # computer without Xcode or with a different Xcode version.
        TARGET_UP_TO_DATE := $(shell QT_MAC_SDK_NO_VERSION_CHECK=1 $(MAKE) --question $(QMAKE_TARGET) && echo 1 || echo 0)
        ifeq ($(TARGET_UP_TO_DATE),0)
            ifneq ($(findstring missing DEVELOPER_DIR path,$(CURRENT_MAC_SDK_VERSION)),)
                $(info The developer dir $(EXPORT_QMAKE_XCODE_DEVELOPER_PATH) is no longer valid.)
            else ifneq ($(findstring SDK "$(EXPORT_QMAKE_MAC_SDK)" cannot be located,$(CURRENT_MAC_SDK_VERSION)),)
                $(info The developer dir $(EXPORT_QMAKE_XCODE_DEVELOPER_PATH) no longer contains the $(EXPORT_QMAKE_MAC_SDK_VERSION) platform SDK.)
            else ifneq ($(CURRENT_MAC_SDK_VERSION),)
                $(info The platform SDK has been changed from version $(EXPORT_QMAKE_MAC_SDK_VERSION) to version $(CURRENT_MAC_SDK_VERSION).)
            else
                $(info Unknown error resolving current platform SDK version.)
            endif
            $(info This requires a fresh build. Please wipe the build directory completely,)
            $(info including any .qmake.stash and .qmake.cache files generated by qmake.)
            $(error ^)
        endif
    endif
endif
