You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
5.4 KiB
168 lines
5.4 KiB
5 months ago
|
# Copyright (c) 2010, 2019, Oracle and/or its affiliates. All rights reserved.
|
||
|
#
|
||
|
# This program is free software; you can redistribute it and/or modify
|
||
|
# it under the terms of the GNU General Public License, version 2.0,
|
||
|
# as published by the Free Software Foundation.
|
||
|
#
|
||
|
# This program is also distributed with certain software (including
|
||
|
# but not limited to OpenSSL) that is licensed under separate terms,
|
||
|
# as designated in a particular file or component or in included license
|
||
|
# documentation. The authors of MySQL hereby grant you an additional
|
||
|
# permission to link the program and your derivative works with the
|
||
|
# separately licensed software that they have included with MySQL.
|
||
|
#
|
||
|
# This program is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
# GNU General Public License, version 2.0, for more details.
|
||
|
#
|
||
|
# You should have received a copy of the GNU General Public License
|
||
|
# along with this program; if not, write to the Free Software
|
||
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||
|
|
||
|
MACRO(MY_ADD_C_WARNING_FLAG WARNING_FLAG)
|
||
|
MY_CHECK_C_COMPILER_FLAG("-${WARNING_FLAG}" HAVE_${WARNING_FLAG})
|
||
|
IF(HAVE_${WARNING_FLAG})
|
||
|
STRING_APPEND(MY_C_WARNING_FLAGS " -${WARNING_FLAG}")
|
||
|
ENDIF()
|
||
|
ENDMACRO()
|
||
|
|
||
|
MACRO(MY_ADD_CXX_WARNING_FLAG WARNING_FLAG)
|
||
|
MY_CHECK_CXX_COMPILER_WARNING("-${WARNING_FLAG}" HAS_FLAG)
|
||
|
IF(HAS_FLAG)
|
||
|
STRING_APPEND(MY_CXX_WARNING_FLAGS " -${WARNING_FLAG}")
|
||
|
ENDIF()
|
||
|
ENDMACRO()
|
||
|
|
||
|
#
|
||
|
# Common flags for all versions/compilers
|
||
|
#
|
||
|
|
||
|
# Common warning flags for GCC, G++, Clang and Clang++
|
||
|
SET(MY_WARNING_FLAGS
|
||
|
"-Wall -Wextra -Wformat-security -Wvla -Wundef")
|
||
|
|
||
|
# Gives spurious warnings on 32-bit; see GCC bug 81890.
|
||
|
IF(SIZEOF_VOIDP EQUAL 8)
|
||
|
STRING_APPEND(MY_WARNING_FLAGS " -Wmissing-format-attribute")
|
||
|
ENDIF()
|
||
|
|
||
|
# Clang 6.0 and newer on Windows treat -Wall as -Weverything; use /W4 instead
|
||
|
IF(WIN32_CLANG)
|
||
|
STRING(REPLACE "-Wall -Wextra" "/W4" MY_WARNING_FLAGS "${MY_WARNING_FLAGS}")
|
||
|
ENDIF()
|
||
|
|
||
|
# Common warning flags for GCC and Clang
|
||
|
SET(MY_C_WARNING_FLAGS "${MY_WARNING_FLAGS} -Wwrite-strings")
|
||
|
|
||
|
# Common warning flags for G++ and Clang++
|
||
|
SET(MY_CXX_WARNING_FLAGS "${MY_WARNING_FLAGS} -Woverloaded-virtual -Wcast-qual")
|
||
|
|
||
|
IF(MY_COMPILER_IS_GNU)
|
||
|
# The default =3 given by -Wextra is a bit too strict for our code.
|
||
|
MY_ADD_CXX_WARNING_FLAG("Wimplicit-fallthrough=2")
|
||
|
MY_ADD_C_WARNING_FLAG("Wjump-misses-init")
|
||
|
ENDIF()
|
||
|
|
||
|
#
|
||
|
# Extra flags not supported on all versions/compilers
|
||
|
#
|
||
|
|
||
|
# Only for C++ as C code has some macro usage that is difficult to avoid
|
||
|
IF(MY_COMPILER_IS_GNU)
|
||
|
MY_ADD_CXX_WARNING_FLAG("Wlogical-op")
|
||
|
ENDIF()
|
||
|
|
||
|
# Extra warning flags for Clang
|
||
|
IF(MY_COMPILER_IS_CLANG)
|
||
|
STRING_APPEND(MY_C_WARNING_FLAGS " -Wconditional-uninitialized")
|
||
|
STRING_APPEND(MY_C_WARNING_FLAGS " -Wextra-semi")
|
||
|
STRING_APPEND(MY_C_WARNING_FLAGS " -Wmissing-noreturn")
|
||
|
|
||
|
MY_ADD_C_WARNING_FLAG("Wunreachable-code-break")
|
||
|
MY_ADD_C_WARNING_FLAG("Wunreachable-code-return")
|
||
|
ENDIF()
|
||
|
|
||
|
# Extra warning flags for Clang++
|
||
|
IF(MY_COMPILER_IS_CLANG)
|
||
|
# Disable a few default Clang++ warnings
|
||
|
STRING_APPEND(MY_CXX_WARNING_FLAGS " -Wno-null-conversion")
|
||
|
STRING_APPEND(MY_CXX_WARNING_FLAGS " -Wno-unused-private-field")
|
||
|
|
||
|
STRING_APPEND(MY_CXX_WARNING_FLAGS " -Wconditional-uninitialized")
|
||
|
STRING_APPEND(MY_CXX_WARNING_FLAGS " -Wdeprecated")
|
||
|
STRING_APPEND(MY_CXX_WARNING_FLAGS " -Wextra-semi")
|
||
|
STRING_APPEND(MY_CXX_WARNING_FLAGS " -Wheader-hygiene")
|
||
|
STRING_APPEND(MY_CXX_WARNING_FLAGS " -Wnon-virtual-dtor")
|
||
|
STRING_APPEND(MY_CXX_WARNING_FLAGS " -Wundefined-reinterpret-cast")
|
||
|
|
||
|
MY_ADD_CXX_WARNING_FLAG("Winconsistent-missing-destructor-override")
|
||
|
MY_ADD_CXX_WARNING_FLAG("Wshadow-field")
|
||
|
|
||
|
# Other possible options that give warnings (Clang 6.0):
|
||
|
# -Wabstract-vbase-init
|
||
|
# -Wc++2a-compat
|
||
|
# -Wc++98-compat-pedantic
|
||
|
# -Wcast-align
|
||
|
# -Wclass-varargs
|
||
|
# -Wcomma
|
||
|
# -Wconversion
|
||
|
# -Wcovered-switch-default
|
||
|
# -Wdeprecated-dynamic-exception-spec
|
||
|
# -Wdisabled-macro-expansion
|
||
|
# -Wdocumentation
|
||
|
# -Wdocumentation-pedantic
|
||
|
# -Wdocumentation-unknown-command
|
||
|
# -Wdouble-promotion
|
||
|
# -Wexit-time-destructors
|
||
|
# -Wfloat-equal
|
||
|
# -Wformat-nonliteral
|
||
|
# -Wformat-pedantic
|
||
|
# -Wglobal-constructors
|
||
|
# -Wgnu-anonymous-struct
|
||
|
# -Wgnu-zero-variadic-macro-arguments
|
||
|
# -Wimplicit-fallthrough
|
||
|
# -Wkeyword-macro
|
||
|
# -Wmissing-noreturn
|
||
|
# -Wmissing-prototypes
|
||
|
# -Wmissing-variable-declarations
|
||
|
# -Wnested-anon-types
|
||
|
# -Wnewline-eof
|
||
|
# -Wold-style-cast
|
||
|
# -Wpadded
|
||
|
# -Wpedantic
|
||
|
# -Wrange-loop-analysis
|
||
|
# -Wredundant-parens
|
||
|
# -Wreserved-id-macro
|
||
|
# -Wshadow
|
||
|
# -Wshift-sign-overflow
|
||
|
# -Wsign-conversion
|
||
|
# -Wswitch-enum
|
||
|
# -Wtautological-type-limit-compare
|
||
|
# -Wtautological-unsigned-enum-zero-compare
|
||
|
# -Wundefined-func-template
|
||
|
# -Wunreachable-code
|
||
|
# -Wunreachable-code-break
|
||
|
# -Wunreachable-code-return
|
||
|
# -Wunused-exception-parameter
|
||
|
# -Wunused-macros
|
||
|
# -Wunused-member-function
|
||
|
# -Wunused-template
|
||
|
# -Wused-but-marked-unused
|
||
|
# -Wweak-template-vtables
|
||
|
# -Wweak-vtables
|
||
|
# -Wzero-as-null-pointer-constant
|
||
|
ENDIF()
|
||
|
|
||
|
# Turn on Werror (warning => error) when using maintainer mode.
|
||
|
IF(MYSQL_MAINTAINER_MODE)
|
||
|
STRING_APPEND(MY_C_WARNING_FLAGS " -Werror")
|
||
|
STRING_APPEND(MY_CXX_WARNING_FLAGS " -Werror")
|
||
|
ENDIF()
|
||
|
|
||
|
# Set warning flags for gcc/g++/clang/clang++
|
||
|
IF(MY_COMPILER_IS_GNU_OR_CLANG)
|
||
|
STRING_APPEND(CMAKE_C_FLAGS " ${MY_C_WARNING_FLAGS}")
|
||
|
STRING_APPEND(CMAKE_CXX_FLAGS " ${MY_CXX_WARNING_FLAGS}")
|
||
|
ENDIF()
|