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
|
From 6ac7bf174a803ab74aa7b01d0f59b2b89bb488e7 Mon Sep 17 00:00:00 2001
From: Joey Dumont <joey.dumont@gmail.com>
Date: Tue, 10 May 2022 20:54:05 -0400
Subject: [PATCH] Workaround for Werror=format-security errors in the libcpp
and gcc components.
Both libcpp and the gcc subfolders have fail to compile when the Werror=format-security
flag is present. This patch attempts to to selectively disable this flag by adding
Wno-error=format-security in some build system variables.
In the gcc component, we simply augment the existing --disable-build-format-warnings
option to set -Wno-error=format-security. We also must add this flag to the strict_warn
set of CFLAGS, so that the gcc/c component can pick it up.
In the libcpp component, we add the --disable-build-format-warnings option
to the configure script, and give it the same options as gcc's option.
---
gcc/configure | 4 ++--
gcc/configure.ac | 4 ++--
libcpp/configure | 20 +++++++++++++++++---
libcpp/configure.ac | 8 +++++++-
4 files changed, 28 insertions(+), 8 deletions(-)
diff --git a/gcc/configure b/gcc/configure
index 5ce055771..fbff64a79 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -7080,7 +7080,7 @@ else
fi
if test $enable_build_format_warnings = no; then :
- wf_opt=-Wno-format
+ wf_opt="-Wno-format -Wno-format-security"
else
wf_opt=
fi
@@ -7207,7 +7207,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
strict_warn=
save_CXXFLAGS="$CXXFLAGS"
-for real_option in -Wmissing-format-attribute -Woverloaded-virtual; do
+for real_option in -Wmissing-format-attribute -Woverloaded-virtual $wf_opt; do
# Do the check with the no- prefix removed since gcc silently
# accepts any -Wno-* option on purpose
case $real_option in
diff --git a/gcc/configure.ac b/gcc/configure.ac
index 23bee7010..571e2424a 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -570,7 +570,7 @@ AC_ARG_ENABLE(build-format-warnings,
AS_HELP_STRING([--disable-build-format-warnings],[don't use -Wformat while building GCC]),
[],[enable_build_format_warnings=yes])
AS_IF([test $enable_build_format_warnings = no],
- [wf_opt=-Wno-format],[wf_opt=])
+ [wf_opt=-Wno-format -Wno-format-security],[wf_opt=])
ACX_PROG_CXX_WARNING_OPTS(
m4_quote(m4_do([-W -Wall -Wno-narrowing -Wwrite-strings ],
[-Wcast-qual $wf_opt])),
@@ -580,7 +580,7 @@ ACX_PROG_CC_WARNING_OPTS(
[])), [c_loose_warn])
ACX_PROG_CXX_WARNING_OPTS(
m4_quote(m4_do([-Wmissing-format-attribute ],
- [-Woverloaded-virtual])), [strict_warn])
+ [-Woverloaded-virtual $wf_opt])), [strict_warn])
ACX_PROG_CC_WARNING_OPTS(
m4_quote(m4_do([-Wold-style-definition -Wc++-compat])), [c_strict_warn])
ACX_PROG_CXX_WARNING_ALMOST_PEDANTIC(
diff --git a/libcpp/configure b/libcpp/configure
index 751453902..54e7d017c 100755
--- a/libcpp/configure
+++ b/libcpp/configure
@@ -729,6 +729,7 @@ ac_subst_files=''
ac_user_opts='
enable_option_checking
enable_largefile
+enable_build_format_warnings
enable_werror_always
with_gnu_ld
enable_rpath
@@ -1368,6 +1369,8 @@ Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--disable-largefile omit support for large files
+ --disable-build-format-warnings
+ don't use -Wformat while building GCC
--enable-werror-always enable -Werror despite compiler version
--disable-rpath do not hardcode runtime library paths
--enable-maintainer-mode enable rules only needed by maintainers
@@ -4904,6 +4907,18 @@ fi
# Figure out what compiler warnings we can enable.
# See config/warnings.m4 for details.
+# Check whether --enable-build-format-warnings was given.
+if test "${enable_build_format_warnings+set}" = set; then :
+ enableval=$enable_build_format_warnings;
+else
+ enable_build_format_warnings=yes
+fi
+
+if test $enable_build_format_warnings = no; then :
+ wf_opt="-Wno-format -Wno-format-security"
+else
+ wf_opt=
+fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -4913,8 +4928,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
warn=
save_CFLAGS="$CFLAGS"
-for real_option in -W -Wall -Wno-narrowing -Wwrite-strings \
- -Wmissing-format-attribute; do
+for real_option in -W -Wall -Wno-narrowing -Wwrite-strings -Wmissing-format-attribute $wf_opt; do
# Do the check with the no- prefix removed since gcc silently
# accepts any -Wno-* option on purpose
case $real_option in
@@ -4989,7 +5003,7 @@ else
CFLAGS="$option"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-
+
int
main ()
{
diff --git a/libcpp/configure.ac b/libcpp/configure.ac
index 9b6042518..f1fe3a407 100644
--- a/libcpp/configure.ac
+++ b/libcpp/configure.ac
@@ -30,8 +30,14 @@ AC_SUBST([ETAGS])
# Figure out what compiler warnings we can enable.
# See config/warnings.m4 for details.
+AC_ARG_ENABLE(build-format-warnings,
+ AS_HELP_STRING([--disable-build-format-warnings],[don't use -Wformat while building GCC]),
+ [],[enable_build_format_warnings=yes])
+AS_IF([test $enable_build_format_warnings = no],
+ [wf_opt="-Wno-format -Wno-format-security"],[wf_opt=])
+
ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wno-narrowing -Wwrite-strings \
- -Wmissing-format-attribute], [warn])
+ -Wmissing-format-attribute $wf_opt] , [warn])
ACX_PROG_CC_WARNING_OPTS([-Wstrict-prototypes -Wmissing-prototypes \
-Wold-style-definition -Wc++-compat], [c_warn])
ACX_PROG_CC_WARNING_ALMOST_PEDANTIC([-Wno-long-long])
--
2.36.1
|