1048d83fc2
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>
171 lines
7.7 KiB
Plaintext
171 lines
7.7 KiB
Plaintext
#
|
|
# W A R N I N G
|
|
# -------------
|
|
#
|
|
# This file is not part of the Qt API. It exists purely as an
|
|
# implementation detail. It may change from version to version
|
|
# without notice, or even be removed.
|
|
#
|
|
# We mean it.
|
|
#
|
|
|
|
QMAKE_DIR_REPLACE_SANE += DESTDIR
|
|
CONFIG -= debug_and_release_target
|
|
|
|
DEFINES *= QT_NO_NARROWING_CONVERSIONS_IN_CONNECT
|
|
|
|
qtConfig(c++11): CONFIG += c++11 strict_c++
|
|
qtConfig(c++14): CONFIG += c++14
|
|
qtConfig(c++1z): CONFIG += c++1z
|
|
qtConfig(c++2a): CONFIG += c++2a
|
|
qtConfig(c99): CONFIG += c99
|
|
qtConfig(c11): CONFIG += c11
|
|
qtConfig(separate_debug_info): CONFIG += separate_debug_info
|
|
qtConfig(stack-protector-strong): CONFIG += stack_protector_strong
|
|
contains(TEMPLATE, .*lib) {
|
|
# module and plugins
|
|
unix:qtConfig(reduce_relocations): CONFIG += bsymbolic_functions
|
|
}
|
|
contains(TEMPLATE, .*lib)|contains(TEMPLATE, aux) {
|
|
!isEmpty(_QMAKE_SUPER_CACHE_): \
|
|
rplbase = $$dirname(_QMAKE_SUPER_CACHE_)/[^/][^/]*
|
|
else: \
|
|
rplbase = $$MODULE_BASE_OUTDIR
|
|
host_build {
|
|
qqt_libdir = \$\$\$\$[QT_HOST_LIBS]
|
|
qt_libdir = $$[QT_HOST_LIBS]
|
|
} else {
|
|
qqt_libdir = \$\$\$\$[QT_INSTALL_LIBS]
|
|
qt_libdir = $$[QT_INSTALL_LIBS]
|
|
}
|
|
contains(QMAKE_DEFAULT_LIBDIRS, $$qt_libdir) {
|
|
lib_replace0.match = $$rplbase/lib/
|
|
lib_replace0.replace = $$qqt_libdir/
|
|
lib_replace0.CONFIG = path
|
|
QMAKE_PRL_INSTALL_REPLACE += lib_replace0
|
|
lib_replace.match = "[^ ']*$$rplbase/lib"
|
|
lib_replace.replace =
|
|
} else {
|
|
lib_replace.match = $$rplbase/lib
|
|
lib_replace.replace = $$qqt_libdir
|
|
}
|
|
lib_replace.CONFIG = path
|
|
QMAKE_PRL_INSTALL_REPLACE += lib_replace
|
|
!equals(qt_libdir, $$rplbase/lib) {
|
|
qtlibdir_replace.match = $$qt_libdir
|
|
qtlibdir_replace.replace = $$qqt_libdir
|
|
qtlibdir_replace.CONFIG = path
|
|
QMAKE_PRL_INSTALL_REPLACE += qtlibdir_replace
|
|
}
|
|
}
|
|
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()
|
|
|
|
# Extra warnings for Qt non-example code, to ensure cleanliness of the sources.
|
|
# The block below may turn these warnings into errors for some Qt targets.
|
|
# -Wdate-time: warn if we use __DATE__ or __TIME__ (we want to be able to reproduce the exact same binary)
|
|
# -Wvla: use of variable-length arrays (an extension to C++)
|
|
clang {
|
|
clang_ver = $${QT_CLANG_MAJOR_VERSION}.$${QT_CLANG_MINOR_VERSION}
|
|
apple_ver = $${QT_APPLE_CLANG_MAJOR_VERSION}.$${QT_APPLE_CLANG_MINOR_VERSION}
|
|
versionAtLeast(clang_ver, 3.5): \
|
|
QMAKE_CXXFLAGS_WARN_ON += -Wdate-time
|
|
|
|
versionAtLeast(clang_ver, 3.6)|versionAtLeast(apple_ver, 6.3): \
|
|
QMAKE_CXXFLAGS_WARN_ON += -Winconsistent-missing-override
|
|
|
|
darwin {
|
|
QMAKE_CXXFLAGS_WARN_ON += \
|
|
-Wobjc-interface-ivars \
|
|
-Wobjc-method-access \
|
|
-Wobjc-multiple-method-names
|
|
|
|
# Clang/LLVM 5.0 and Xcode 9.0 introduced unguarded availability warnings.
|
|
# The same construct has been a hard error in Swift from the very beginning.
|
|
versionAtLeast(clang_ver, 5.0)|versionAtLeast(apple_ver, 9.0): \
|
|
QMAKE_CXXFLAGS_WARN_ON += \
|
|
-Werror=unguarded-availability \
|
|
-Werror=unguarded-availability-new \
|
|
-Werror=unsupported-availability-guard
|
|
}
|
|
} else: gcc:!intel_icc {
|
|
QMAKE_CXXFLAGS_WARN_ON += -Wvla
|
|
# GCC 5 fixed -Wmissing-field-initializers for when there are no initializers
|
|
lessThan(QT_GCC_MAJOR_VERSION, 5): QMAKE_CXXFLAGS_WARN_ON += -Wno-missing-field-initializers
|
|
# GCC 5 introduced -Wdate-time
|
|
greaterThan(QT_GCC_MAJOR_VERSION, 4): QMAKE_CXXFLAGS_WARN_ON += -Wdate-time
|
|
# GCC 6 introduced these
|
|
greaterThan(QT_GCC_MAJOR_VERSION, 5): QMAKE_CXXFLAGS_WARN_ON += -Wshift-overflow=2 -Wduplicated-cond
|
|
# GCC 7 has a lot of false positives relating to this, so disable completely
|
|
greaterThan(QT_GCC_MAJOR_VERSION, 6): QMAKE_CXXFLAGS_WARN_ON += -Wno-stringop-overflow
|
|
# GCC 9 introduced -Wformat-overflow in -Wall, but it is buggy:
|
|
greaterThan(QT_GCC_MAJOR_VERSION, 8): QMAKE_CXXFLAGS_WARN_ON += -Wno-format-overflow
|
|
}
|
|
|
|
warnings_are_errors:warning_clean {
|
|
# If the module declares that it has does its clean-up of warnings, enable -Werror.
|
|
# This setting is compiler-dependent anyway because it depends on the version of the
|
|
# compiler.
|
|
clang {
|
|
# Apple clang 4.0-4.2,5.0-5.1,6.0-6.4,7.0-7.3,8.0-8.3,9.0-9.2
|
|
# Regular clang 3.x-7.0
|
|
apple_ver = $${QT_APPLE_CLANG_MAJOR_VERSION}.$${QT_APPLE_CLANG_MINOR_VERSION}
|
|
reg_ver = $${QT_CLANG_MAJOR_VERSION}.$${QT_CLANG_MINOR_VERSION}
|
|
contains(apple_ver, "4\\.[012]|5\\.[01]|6\\.[01234]|7\\.[0123]|8\\.[0123]|9\\.[012]")|contains(reg_ver, "[345]\\.|[67]\\.0") {
|
|
QMAKE_CXXFLAGS_WARN_ON += -Werror -Wno-error=\\$${LITERAL_HASH}warnings -Wno-error=deprecated-declarations $$WERROR
|
|
}
|
|
} else:intel_icc:linux {
|
|
# Intel CC 13.0 - 18.0, on Linux only
|
|
ver = $${QT_ICC_MAJOR_VERSION}.$${QT_ICC_MINOR_VERSION}
|
|
linux:contains(ver, "(1[345678]\\.|19\\.0)") {
|
|
# 177: function "entity" was declared but never referenced
|
|
# (too aggressive; ICC reports even for functions created due to template instantiation)
|
|
# 1224: #warning directive
|
|
# 1478: function "entity" (declared at line N) was declared deprecated
|
|
# 1786: function "entity" (declared at line N of "file") was declared deprecated ("message")
|
|
# 1881: argument must be a constant null pointer value
|
|
# (NULL in C++ is usually a literal 0)
|
|
QMAKE_CXXFLAGS_WARN_ON += -Werror -ww177,1224,1478,1786,1881 $$WERROR
|
|
}
|
|
} else:gcc:!clang:!intel_icc:!rim_qcc {
|
|
# GCC 4.6-4.9, 5.x, ...
|
|
ver = $${QT_GCC_MAJOR_VERSION}.$${QT_GCC_MINOR_VERSION}
|
|
contains(ver, "(4\\.[6789]|[5-9]\\..)") {
|
|
QMAKE_CXXFLAGS_WARN_ON += -Werror -Wno-error=cpp -Wno-error=deprecated-declarations $$WERROR
|
|
|
|
# GCC prints this bogus warning, after it has inlined a lot of code
|
|
# error: assuming signed overflow does not occur when assuming that (X + c) < X is always false
|
|
QMAKE_CXXFLAGS_WARN_ON += -Wno-error=strict-overflow
|
|
|
|
# GCC 7 includes -Wimplicit-fallthrough in -Wextra, but Qt is not yet free of implicit fallthroughs.
|
|
greaterThan(QT_GCC_MAJOR_VERSION, 6): QMAKE_CXXFLAGS_WARN_ON += -Wno-error=implicit-fallthrough
|
|
# GCC 9 introduced -Wdeprecated-copy in -Wextra, but we are not clean for it.
|
|
greaterThan(QT_GCC_MAJOR_VERSION, 8): QMAKE_CXXFLAGS_WARN_ON += -Wno-error=deprecated-copy
|
|
# GCC 9 introduced this
|
|
greaterThan(QT_GCC_MAJOR_VERSION, 8): QMAKE_CXXFLAGS_WARN_ON += -Wno-error=redundant-move
|
|
# GCC 9 introduced this
|
|
greaterThan(QT_GCC_MAJOR_VERSION, 8): QMAKE_CXXFLAGS_WARN_ON += -Wno-error=init-list-lifetime
|
|
|
|
# Work-around for bug https://code.google.com/p/android/issues/detail?id=58135
|
|
android: QMAKE_CXXFLAGS_WARN_ON += -Wno-error=literal-suffix
|
|
}
|
|
} else:msvc:!intel_icl {
|
|
# enable for MSVC 2015, MSVC 2017
|
|
contains(MSVC_VER, "1[45].0"): QMAKE_CXXFLAGS_WARN_ON += -WX
|
|
}
|
|
unset(ver)
|
|
}
|
|
|