File: vtkCompilerWarningFlags.cmake

package info (click to toggle)
vtk9 9.5.2%2Bdfsg3-4
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 205,916 kB
  • sloc: cpp: 2,336,565; ansic: 327,116; python: 111,200; yacc: 4,104; java: 3,977; sh: 3,032; xml: 2,771; perl: 2,189; lex: 1,787; makefile: 178; javascript: 165; objc: 153; tcl: 59
file content (170 lines) | stat: -rw-r--r-- 6,800 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# Silence spurious -Wattribute warnings on GCC < 9.1:
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89325
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND
  CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.1)
  target_compile_options(vtkbuild
    INTERFACE
      "$<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:C>:-Wno-attributes>>"
      "$<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:CXX>:-Wno-attributes>>")
endif()

# This module requires CMake 3.19 features (the `CheckCompilerFlag`
# module). Just skip it for older CMake versions.
if (CMAKE_VERSION VERSION_LESS "3.19")
  return ()
endif ()

include(CheckCompilerFlag)

function (vtk_add_flag flag)
  foreach (lang IN LISTS ARGN)
    check_compiler_flag("${lang}" "${flag}" "vtk_have_compiler_flag-${lang}-${flag}")
    if (vtk_have_compiler_flag-${lang}-${flag})
      target_compile_options(vtkbuild
        INTERFACE
          "$<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:${lang}>:${flag}>>")
    endif ()
  endforeach ()
endfunction ()

option(VTK_ENABLE_EXTRA_BUILD_WARNINGS "Enable extra build warnings" OFF)
mark_as_advanced(VTK_ENABLE_EXTRA_BUILD_WARNINGS)

check_compiler_flag(C "-Weverything" vtk_have_compiler_flag_Weverything)
include(CMakeDependentOption)
cmake_dependent_option(VTK_ENABLE_EXTRA_BUILD_WARNINGS_EVERYTHING "Enable *all* warnings (except known problems)" OFF
  "VTK_ENABLE_EXTRA_BUILD_WARNINGS;vtk_have_compiler_flag_Weverything" OFF)
mark_as_advanced(VTK_ENABLE_EXTRA_BUILD_WARNINGS_EVERYTHING)

# MSVC
# Disable flags about `dll-interface` of inherited classes.
vtk_add_flag(-wd4251 CXX)
# Enable C++ stack unwinding and that C functions never throw C++
# exceptions.
vtk_add_flag(-EHsc CXX)

if (VTK_ENABLE_EXTRA_BUILD_WARNINGS_EVERYTHING)
  set(langs C)
  vtk_add_flag(-Wno-pre-c11-compat ${langs})

  set(langs C CXX)
  vtk_add_flag(-Weverything ${langs})

  # Instead of enabling warnings, this mode *disables* warnings.
  vtk_add_flag(-Wno-cast-align ${langs})
  vtk_add_flag(-Wno-cast-function-type-strict ${langs})
  vtk_add_flag(-Wno-cast-qual ${langs})
  vtk_add_flag(-Wno-conversion ${langs})
  vtk_add_flag(-Wno-covered-switch-default ${langs})
  vtk_add_flag(-Wno-declaration-after-statement ${langs})
  vtk_add_flag(-Wno-direct-ivar-access ${langs})
  vtk_add_flag(-Wno-disabled-macro-expansion ${langs})
  vtk_add_flag(-Wno-documentation ${langs})
  vtk_add_flag(-Wno-documentation-unknown-command ${langs})
  vtk_add_flag(-Wno-double-promotion ${langs})
  vtk_add_flag(-Wno-exit-time-destructors ${langs})
  vtk_add_flag(-Wno-extra-semi ${langs})
  vtk_add_flag(-Wno-extra-semi-stmt ${langs})
  vtk_add_flag(-Wno-float-equal ${langs})
  vtk_add_flag(-Wno-format-nonliteral ${langs})
  vtk_add_flag(-Wno-format-pedantic ${langs})
  vtk_add_flag(-Wno-global-constructors ${langs})
  vtk_add_flag(-Wno-long-long ${langs})
  vtk_add_flag(-Wno-missing-noreturn ${langs})
  vtk_add_flag(-Wno-missing-prototypes ${langs})
  vtk_add_flag(-Wno-missing-variable-declarations ${langs})
  vtk_add_flag(-Wno-objc-interface-ivars ${langs})
  vtk_add_flag(-Wno-padded ${langs})
  vtk_add_flag(-Wno-reserved-id-macro ${langs})
  vtk_add_flag(-Wno-shorten-64-to-32 ${langs})
  vtk_add_flag(-Wno-sign-conversion ${langs})
  vtk_add_flag(-Wno-strict-prototypes ${langs})
  vtk_add_flag(-Wno-switch-enum ${langs})
  vtk_add_flag(-Wno-switch-default ${langs})
  vtk_add_flag(-Wno-undef ${langs})
  vtk_add_flag(-Wno-unused-macros ${langs})
  vtk_add_flag(-Wno-vla ${langs})
  vtk_add_flag(-Wno-vla-extension ${langs})
  vtk_add_flag(-Wno-unsafe-buffer-usage ${langs})

  if (CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
    if (VTK_WEBASSEMBLY_THREADS)
      # Remove after https://github.com/WebAssembly/design/issues/1271 is closed
      vtk_add_flag(-Wno-pthreads-mem-growth ${langs})
    endif ()
    if (VTK_WEBASSEMBLY_64_BIT)
      # Remove after wasm64 is no longer experimental in clang.
      vtk_add_flag(-Wno-experimental ${langs})
    endif ()
  endif ()

  set(langs CXX)
  vtk_add_flag(-Wno-c++98-compat-pedantic ${langs})
  vtk_add_flag(-Wno-inconsistent-missing-override ${langs})
  vtk_add_flag(-Wno-old-style-cast ${langs})
  vtk_add_flag(-Wno-return-std-move-in-c++11 ${langs})
  vtk_add_flag(-Wno-signed-enum-bitfield ${langs})
  vtk_add_flag(-Wno-switch-default ${langs})
  vtk_add_flag(-Wno-undefined-func-template ${langs})
  vtk_add_flag(-Wno-unused-member-function ${langs})
  vtk_add_flag(-Wno-weak-template-vtables ${langs})
  vtk_add_flag(-Wno-weak-vtables ${langs})
  vtk_add_flag(-Wno-zero-as-null-pointer-constant ${langs})

  # These should be fixed at some point prior to updating VTK's standard
  # version. See #18585.
  vtk_add_flag(-Wno-deprecated-copy-dtor ${langs})
  vtk_add_flag(-Wno-deprecated-copy ${langs})
elseif (VTK_ENABLE_EXTRA_BUILD_WARNINGS)
  # C flags.
  set(langs C)

  # C++ flags.
  set(langs CXX)
  vtk_add_flag(-Winconsistent-missing-destructor-override ${langs})
  vtk_add_flag(-Wnon-virtual-dtor ${langs})
  vtk_add_flag(-Wpessimizing-move ${langs})
  vtk_add_flag(-Wrange-loop-bind-reference ${langs})
  vtk_add_flag(-Wreorder-ctor ${langs})
  vtk_add_flag(-Wunused-lambda-capture ${langs})
  vtk_add_flag(-Wunused-private-field ${langs})
  vtk_add_flag(-Woverloaded-virtual ${langs})

  # C and C++ flags.
  set(langs C CXX)
  if (NOT MSVC) # MSVC supports Wall but there are just too many to handle
    vtk_add_flag(-Wall ${langs})
  endif ()
  vtk_add_flag(-Wextra ${langs})
  vtk_add_flag(-Wshadow ${langs})
  vtk_add_flag(-Wabsolute-value ${langs})
  vtk_add_flag(-Wlogical-op ${langs})
  vtk_add_flag(-Wsign-compare ${langs})
  vtk_add_flag(-Wunreachable-code ${langs})
  vtk_add_flag(-Wunused-but-set-variable ${langs})
  vtk_add_flag(-Wunused-function ${langs})
  vtk_add_flag(-Wunused-local-typedef ${langs})
  vtk_add_flag(-Wunused-parameter ${langs})
  vtk_add_flag(-Wunused-variable ${langs})

  # Ignored warnings. Should be investigated and false positives reported to
  # GCC and actual bugs fixed.
  vtk_add_flag(-Wno-stringop-overflow ${langs}) # issue 19306
  vtk_add_flag(-Wno-stringop-overread ${langs}) # issue 19307
  # Need overflow checks in various places.
  vtk_add_flag(-Wno-alloc-size-larger-than ${langs}) # issue 19308
  vtk_add_flag(-Wno-free-nonheap-object ${langs}) # issue 19309
  vtk_add_flag(-Wno-maybe-uninitialized ${langs}) # issue 19457
  vtk_add_flag(-Wno-catch-value ${langs}) # issue 19458
  vtk_add_flag(-Wno-array-bounds ${langs}) # issue 19459
  vtk_add_flag(-Wno-missing-field-initializers ${langs}) # issue 19460
  vtk_add_flag(-Wno-cast-function-type ${langs}) # issue 19461
  vtk_add_flag(-Wno-nonnull ${langs}) # issue 19462
  vtk_add_flag(-Wno-strict-aliasing ${langs}) # issue 19463

  # Irrelevant as GCC6 is not supported
  # https://stackoverflow.com/questions/48149323/
  vtk_add_flag(-Wno-psabi ${langs})

  # Fortran flags.
endif ()