Add the infrastructure to compile Qt with -Werror
This is enabled only for -developer-builds and only for certain compiler-version combinations that are in a whitelist. It also requires each library, plugin or tool to declare whether it is supposedly clean of warnings. When most targets are clean, we can consider inverting. Change-Id: I17b5c4e45aee5078f9788e846a45d619c144095a Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
This commit is contained in:
parent
0520631b2b
commit
ebfd85a499
18
configure
vendored
18
configure
vendored
@ -2,6 +2,7 @@
|
||||
#############################################################################
|
||||
##
|
||||
## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
## Copyright (C) 2013 Intel Corporation.
|
||||
## Contact: http://www.qt-project.org/legal
|
||||
##
|
||||
## This file is the build configuration utility of the Qt Toolkit.
|
||||
@ -893,6 +894,7 @@ CFG_PCRE=auto
|
||||
QPA_PLATFORM_GUARD=yes
|
||||
CFG_CXX11=auto
|
||||
CFG_DIRECTWRITE=no
|
||||
CFG_WERROR=auto
|
||||
|
||||
# initalize variables used for installation
|
||||
QT_INSTALL_PREFIX=
|
||||
@ -2138,6 +2140,13 @@ while [ "$#" -gt 0 ]; do
|
||||
UNKNOWN_OPT=yes
|
||||
fi
|
||||
;;
|
||||
warnings-are-errors|Werror)
|
||||
if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
|
||||
CFG_WERROR="$VAL"
|
||||
else
|
||||
UNKNOWN_OPT=yes
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
UNKNOWN_OPT=yes
|
||||
;;
|
||||
@ -3296,6 +3305,10 @@ Additional options:
|
||||
* -no-system-proxies .. Do not use system network proxies by default.
|
||||
-system-proxies ..... Use system network proxies by default.
|
||||
|
||||
-no-warnings-are-errors Make warnings be treated normally
|
||||
-warnings-are-errors Make warnings be treated as errors
|
||||
(enabled if -developer-build is active)
|
||||
|
||||
$GBN -no-glib ........... Do not compile Glib support.
|
||||
$GBY -glib .............. Compile Glib support.
|
||||
EOF
|
||||
@ -6098,6 +6111,11 @@ else
|
||||
fi
|
||||
if [ "$CFG_DEV" = "yes" ]; then
|
||||
QT_CONFIG="$QT_CONFIG private_tests"
|
||||
if [ "$CFG_WERROR" != "no" ]; then
|
||||
QMAKE_CONFIG="$QMAKE_CONFIG warnings_are_errors"
|
||||
fi
|
||||
elif [ "$CFG_WERROR" = "yes" ]; then
|
||||
QMAKE_CONFIG="$QMAKE_CONFIG warnings_are_errors"
|
||||
fi
|
||||
|
||||
cat >>"$QTCONFIG.tmp" <<EOF
|
||||
|
@ -18,3 +18,37 @@ contains(TEMPLATE, .*lib) {
|
||||
contains(QT_CONFIG, separate_debug_info): CONFIG += separate_debug_info
|
||||
contains(QT_CONFIG, separate_debug_info_nocopy): CONFIG += separate_debug_info_nocopy
|
||||
}
|
||||
|
||||
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+ or clang 3.1+
|
||||
greaterThan(QT_CLANG_MAJOR_VERSION, 3) | \
|
||||
if(equals(QT_CLANG_MAJOR_VERSION, 3):greaterThan(QT_CLANG_MINOR_VERSION, 1)) | \
|
||||
greaterThan(QT_APPLE_CLANG_MAJOR_VERSION, 3) {
|
||||
QMAKE_CXXFLAGS += -Werror -Wno-error=\\$${LITERAL_HASH}warnings $$WERROR
|
||||
}
|
||||
} else:intel_icc {
|
||||
# Intel CC 13.0+ (a.k.a. Intel Composer XE 2013)
|
||||
greaterThan(QT_ICC_MAJOR_VERSION, 12) {
|
||||
# 177: function "entity" was declared but never referenced
|
||||
# (too aggressive; ICC reports even for functions created due to template instantiation)
|
||||
# 1224: #warning directive
|
||||
# 1881: argument must be a constant null pointer value
|
||||
# (NULL in C++ is usually a literal 0)
|
||||
QMAKE_CXXFLAGS += -Werror -ww177,1224,1881 $$WERROR
|
||||
}
|
||||
} else:gcc {
|
||||
# GCC 4.6+
|
||||
# note: there was no GCC 3.6 and this assumes no one is crazy enough to compile Qt with GCC 2.7
|
||||
greaterThan(QT_GCC_MAJOR_VERSION, 4)|greaterThan(QT_GCC_MINOR_VERSION, 5) {
|
||||
QMAKE_CXXFLAGS += -Werror -Wno-error=cpp $$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 += -Wno-error=strict-overflow
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Copyright (C) 2013 Intel Corporation
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the tools applications of the Qt Toolkit.
|
||||
@ -244,6 +245,7 @@ Configure::Configure(int& argc, char** argv)
|
||||
dictionary[ "CFG_GCC_SYSROOT" ] = "yes";
|
||||
dictionary[ "SLOG2" ] = "no";
|
||||
dictionary[ "SYSTEM_PROXIES" ] = "no";
|
||||
dictionary[ "WERROR" ] = "auto";
|
||||
|
||||
//Only used when cross compiling.
|
||||
dictionary[ "QT_INSTALL_SETTINGS" ] = "/etc/xdg";
|
||||
@ -891,6 +893,11 @@ void Configure::parseCmdLine()
|
||||
dictionary[ "SYSTEM_PROXIES" ] = "no";
|
||||
} else if (configCmdLine.at(i) == "-system-proxies") {
|
||||
dictionary[ "SYSTEM_PROXIES" ] = "yes";
|
||||
} else if (configCmdLine.at(i) == "-warnings-are-errors" ||
|
||||
configCmdLine.at(i) == "-Werror") {
|
||||
dictionary[ "WERROR" ] = "yes";
|
||||
} else if (configCmdLine.at(i) == "-no-warnings-are-errors") {
|
||||
dictionary[ "WERROR" ] = "no";
|
||||
}
|
||||
|
||||
// Work around compiler nesting limitation
|
||||
@ -1347,8 +1354,14 @@ void Configure::parseCmdLine()
|
||||
}
|
||||
|
||||
// Allow tests for private classes to be compiled against internal builds
|
||||
if (dictionary["BUILDDEV"] == "yes")
|
||||
qtConfig += "private_tests";
|
||||
if (dictionary["BUILDDEV"] == "yes") {
|
||||
qtConfig << "private_tests";
|
||||
if (dictionary["WERROR"] != "no")
|
||||
qmakeConfig << "warnings_are_errors";
|
||||
} else {
|
||||
if (dictionary["WERROR"] == "yes")
|
||||
qmakeConfig << "warnings_are_errors";
|
||||
}
|
||||
|
||||
if (dictionary["FORCE_ASSERTS"] == "yes")
|
||||
qtConfig += "force_asserts";
|
||||
@ -1718,6 +1731,8 @@ bool Configure::displayHelp()
|
||||
desc("SYSTEM_PROXIES", "yes", "-system-proxies", "Use system network proxies by default.");
|
||||
desc("SYSTEM_PROXIES", "no", "-no-system-proxies", "Do not use system network proxies by default.\n");
|
||||
|
||||
desc("WERROR", "yes", "-warnings-are-errors", "Make warnings be treated as errors.");
|
||||
desc("WERROR", "no", "-no-warnings-are-errors","Make warnings be treated normally.");
|
||||
|
||||
#if !defined(EVAL)
|
||||
desc( "-qtnamespace <name>", "Wraps all Qt library code in 'namespace name {...}'.");
|
||||
|
Loading…
Reference in New Issue
Block a user