Limit OpenGL deprecation silencing on Apple platform to Qt itself

Apple deprecated the entire OpenGL API in favor of Metal, which
we are aware of, so we don't need to see the warnings when building
Qt.

Instead of applying the silencing globally for all Qt consumers,
both internal and external, we now limit the silencing to Qt itself.
That means user code that explicitly uses any of the deprecated APIs
will see the warnings. Note that this does not apply to merely using
any of the Qt OpenGL APIs. The user has to explicitly use the platform
APIs that have been deprecated.

The warnings need to be disabled on a build system level, so that
that they are passed as -D flags on the command line. If the defines
were done in Qt headers (qguiglobal.h e.g.), they would require the
user to always include this header before any of the Apple headers.

Change-Id: I3f2a2a5211332a059ad4416394251772c677fdcb
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
Tor Arne Vestbø 2020-07-01 13:40:11 +02:00
parent 6ff79478a4
commit 1048d83fc2
5 changed files with 17 additions and 9 deletions

View File

@ -294,11 +294,6 @@ elseif(ANDROID)
endif()
elseif(APPLE)
set(QT_DEFAULT_MKSPEC macx-clang)
if(MACOS)
list(APPEND QT_DEFAULT_PLATFORM_DEFINITIONS GL_SILENCE_DEPRECATION)
elseif(UIKIT)
list(APPEND QT_DEFAULT_PLATFORM_DEFINITIONS GLES_SILENCE_DEPRECATION)
endif()
elseif(EMSCRIPTEN)
set(QT_DEFAULT_MKSPEC wasm-emscripten)
endif()

View File

@ -123,6 +123,16 @@ function(qt_internal_apply_bitcode_flags target)
target_compile_options("${target}" INTERFACE ${bitcode_flags})
endfunction()
# Apple deprecated the entire OpenGL API in favor of Metal, which
# we are aware of, so silence the deprecation warnings in code.
# This does not apply to user-code, which will need to silence
# their own warnings if they use the deprecated APIs explicitly.
if(MACOS)
target_compile_definitions(PlatformCommonInternal INTERFACE GL_SILENCE_DEPRECATION)
elseif(UIKIT)
target_compile_definitions(PlatformCommonInternal INTERFACE GLES_SILENCE_DEPRECATION)
endif()
if(UIKIT)
# Do what mkspecs/features/uikit/default_pre.prf does, aka enable sse2 for
# simulator_and_device_builds.

View File

@ -22,6 +22,4 @@ device.deployment_identifier = $${device.sdk}
QMAKE_LIBS_VULKAN =
DEFINES += GL_SILENCE_DEPRECATION
include(mac.conf)

View File

@ -7,6 +7,4 @@ CONFIG += bitcode reduce_exports shallow_bundle no_qt_rpath
INCLUDEPATH += $$PWD/uikit
DEFINES += GLES_SILENCE_DEPRECATION
include(mac.conf)

View File

@ -62,6 +62,13 @@ contains(TEMPLATE, .*lib)|darwin {
if(!host_build|!cross_compile):qtConfig(reduce_exports): CONFIG += hide_symbols
}
# Apple deprecated the entire OpenGL API in favor of Metal, which
# we are aware of, so silence the deprecation warnings in code.
# This does not apply to user-code, which will need to silence
# their own warnings if they use the deprecated APIs explicitly.
macos: DEFINES += GL_SILENCE_DEPRECATION
uikit: DEFINES += GLES_SILENCE_DEPRECATION
# The remainder of this file must not apply to host tools/libraries,
# as the host compiler's version and capabilities are not checked.
host_build:cross_compile: return()