@@ -106,20 +106,34 @@ def add_optimization_flags(self):
106
106
"""
107
107
108
108
env = os .environ .copy ()
109
- if not setupext .config .getboolean ('libs' , 'enable_lto' , fallback = True ):
110
- return env
111
109
if sys .platform == 'win32' :
112
110
return env
113
-
114
- cppflags = []
115
- if 'CPPFLAGS' in os .environ :
116
- cppflags .append (os .environ ['CPPFLAGS' ])
117
- cxxflags = []
118
- if 'CXXFLAGS' in os .environ :
119
- cxxflags .append (os .environ ['CXXFLAGS' ])
120
- ldflags = []
121
- if 'LDFLAGS' in os .environ :
122
- ldflags .append (os .environ ['LDFLAGS' ])
111
+ enable_lto = setupext .config .getboolean ('libs' , 'enable_lto' ,
112
+ fallback = None )
113
+
114
+ def prepare_flags (name , enable_lto ):
115
+ """
116
+ Prepare *FLAGS from the environment.
117
+
118
+ If set, return them, and also check whether LTO is disabled in each
119
+ one, raising an error if Matplotlib config explicitly enabled LTO.
120
+ """
121
+ if name in os .environ :
122
+ if '-fno-lto' in os .environ [name ]:
123
+ if enable_lto is True :
124
+ raise ValueError ('Configuration enable_lto=True, but '
125
+ '{0} contains -fno-lto' .format (name ))
126
+ enable_lto = False
127
+ return [os .environ [name ]], enable_lto
128
+ return [], enable_lto
129
+
130
+ _ , enable_lto = prepare_flags ('CFLAGS' , enable_lto ) # Only check lto.
131
+ cppflags , enable_lto = prepare_flags ('CPPFLAGS' , enable_lto )
132
+ cxxflags , enable_lto = prepare_flags ('CXXFLAGS' , enable_lto )
133
+ ldflags , enable_lto = prepare_flags ('LDFLAGS' , enable_lto )
134
+
135
+ if enable_lto is False :
136
+ return env
123
137
124
138
if has_flag (self .compiler , '-fvisibility=hidden' ):
125
139
for ext in self .extensions :
0 commit comments