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