1 commit 99368862e44740ff4fd33760893f04e14f9dbdf1
2 Author: Felix Fietkau <nbd@openwrt.org>
3 Date: Tue Jul 31 00:52:27 2007 +0000
5 Port the mbsd_multi patch from freewrt, which adds -fhonour-copts. This will emit warnings in packages that don't use our target cflags properly
9 This patch brings over a feature from MirBSD:
11 If this option is not given, it's warned (depending
12 on environment variables). This is to catch errors
13 of misbuilt packages which override CFLAGS themselves.
15 This patch was authored by Thorsten Glaser <tg at mirbsd.de>
16 with copyright assignment to the FSF in effect.
18 --- a/gcc/c-family/c-opts.c
19 +++ b/gcc/c-family/c-opts.c
20 @@ -108,6 +108,9 @@ static int class_dump_flags;
21 /* Whether any standard preincluded header has been preincluded. */
22 static bool done_preinclude;
24 +/* Check if a port honours COPTS. */
25 +static int honour_copts = 0;
27 static void handle_OPT_d (const char *);
28 static void set_std_cxx98 (int);
29 static void set_std_cxx11 (int);
30 @@ -456,6 +459,12 @@ c_common_handle_option (size_t scode, co
31 flag_no_builtin = !value;
34 + case OPT_fhonour_copts:
35 + if (c_language == clk_c) {
40 case OPT_fconstant_string_class_:
41 constant_string_class_name = arg;
43 @@ -1084,6 +1093,47 @@ c_common_init (void)
47 + if (c_language == clk_c) {
48 + char *ev = getenv ("GCC_HONOUR_COPTS");
52 + else if ((*ev == '0') || (*ev == '\0'))
54 + else if (*ev == '1')
56 + else if (*ev == '2')
58 + else if (*ev == 's')
61 + warning (0, "unknown GCC_HONOUR_COPTS value, assuming 1");
62 + evv = 1; /* maybe depend this on something like MIRBSD_NATIVE? */
65 + if (honour_copts == 0) {
66 + error ("someone does not honour COPTS at all in lenient mode");
68 + } else if (honour_copts != 1) {
69 + warning (0, "someone does not honour COPTS correctly, passed %d times",
72 + } else if (evv == 2) {
73 + if (honour_copts == 0) {
74 + error ("someone does not honour COPTS at all in strict mode");
76 + } else if (honour_copts != 1) {
77 + error ("someone does not honour COPTS correctly, passed %d times",
81 + } else if (evv == 0) {
82 + if (honour_copts != 1)
83 + inform (0, "someone does not honour COPTS correctly, passed %d times",
91 --- a/gcc/c-family/c.opt
92 +++ b/gcc/c-family/c.opt
93 @@ -1412,6 +1412,9 @@ C++ ObjC++ Optimization Alias(fexception
95 C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
98 +C ObjC C++ ObjC++ RejectNegative
102 Assume normal C execution environment.
105 @@ -1510,6 +1510,9 @@ fguess-branch-probability
106 Common Report Var(flag_guess_branch_prob) Optimization
107 Enable guessing of branch probabilities.
110 +Common RejectNegative
112 ; Nonzero means ignore `#ident' directives. 0 means handle them.
113 ; Generate position-independent code for executables if possible
114 ; On SVR4 targets, it also controls whether or not to emit a
117 @@ -1934,6 +1934,9 @@ common_handle_option (struct gcc_options
118 opts, opts_set, loc, dc);
121 + case OPT_fhonour_copts:
124 case OPT_Wlarger_than_:
125 opts->x_larger_than_size = value;
126 opts->x_warn_larger_than = value != -1;
127 --- a/gcc/doc/invoke.texi
128 +++ b/gcc/doc/invoke.texi
129 @@ -6569,6 +6569,17 @@ This option is only supported for C and
130 @option{-Wall} and by @option{-Wpedantic}, which can be disabled with
131 @option{-Wno-pointer-sign}.
133 +@item -fhonour-copts
134 +@opindex fhonour-copts
135 +If @env{GCC_HONOUR_COPTS} is set to 1, abort if this option is not
136 +given at least once, and warn if it is given more than once.
137 +If @env{GCC_HONOUR_COPTS} is set to 2, abort if this option is not
139 +If @env{GCC_HONOUR_COPTS} is set to 0 or unset, warn if this option
140 +is not given exactly once.
141 +The warning is quelled if @env{GCC_HONOUR_COPTS} is set to @samp{s}.
142 +This flag and environment variable only affect the C language.
144 @item -Wstack-protector
145 @opindex Wstack-protector
146 @opindex Wno-stack-protector