@@ -102,18 +102,25 @@ pub fn find(build: &mut Build) {
102102 let mut cfg = cc:: Build :: new ( ) ;
103103 cfg. cargo_metadata ( false ) . opt_level ( 2 ) . warnings ( false ) . debug ( false ) . cpp ( true )
104104 . target ( & target) . host ( & build. build ) ;
105- if let Some ( cxx) = config. and_then ( |c| c. cxx . as_ref ( ) ) {
105+
106+ let cxx_configured = if let Some ( cxx) = config. and_then ( |c| c. cxx . as_ref ( ) ) {
106107 cfg. compiler ( cxx) ;
108+ true
107109 } else {
108- set_compiler ( & mut cfg, Language :: CPlusPlus , target, config, build) ;
110+ set_compiler ( & mut cfg, Language :: CPlusPlus , target, config, build)
111+ } ;
112+
113+ if cxx_configured {
114+ let compiler = cfg. get_compiler ( ) ;
115+ build. cxx . insert ( target, compiler) ;
109116 }
110- let compiler = cfg. get_compiler ( ) ;
111- build. cxx . insert ( target, compiler) ;
112117
113118 build. verbose ( & format ! ( "CC_{} = {:?}" , & target, build. cc( target) ) ) ;
114119 build. verbose ( & format ! ( "CFLAGS_{} = {:?}" , & target, cflags) ) ;
115- build. verbose ( & format ! ( "CXX_{} = {:?}" , & target, build. cxx( target) ) ) ;
116- build. verbose ( & format ! ( "CXXFLAGS_{} = {:?}" , & target, cflags) ) ;
120+ if let Ok ( cxx) = build. cxx ( target) {
121+ build. verbose ( & format ! ( "CXX_{} = {:?}" , & target, cxx) ) ;
122+ build. verbose ( & format ! ( "CXXFLAGS_{} = {:?}" , & target, cflags) ) ;
123+ }
117124 if let Some ( ar) = ar {
118125 build. verbose ( & format ! ( "AR_{} = {:?}" , & target, ar) ) ;
119126 build. ar . insert ( target, ar) ;
@@ -125,7 +132,7 @@ fn set_compiler(cfg: &mut cc::Build,
125132 compiler : Language ,
126133 target : Interned < String > ,
127134 config : Option < & Target > ,
128- build : & Build ) {
135+ build : & Build ) -> bool {
129136 match & * target {
130137 // When compiling for android we may have the NDK configured in the
131138 // config.toml in which case we look there. Otherwise the default
@@ -138,6 +145,7 @@ fn set_compiler(cfg: &mut cc::Build,
138145 . replace ( "thumbv7" , "arm" ) ;
139146 let compiler = format ! ( "{}-{}" , target, compiler. clang( ) ) ;
140147 cfg. compiler ( ndk. join ( "bin" ) . join ( compiler) ) ;
148+ return true ;
141149 }
142150 }
143151
@@ -147,32 +155,35 @@ fn set_compiler(cfg: &mut cc::Build,
147155 let c = cfg. get_compiler ( ) ;
148156 let gnu_compiler = compiler. gcc ( ) ;
149157 if !c. path ( ) . ends_with ( gnu_compiler) {
150- return
158+ return false ;
151159 }
152160
153161 let output = output ( c. to_command ( ) . arg ( "--version" ) ) ;
154162 let i = match output. find ( " 4." ) {
155163 Some ( i) => i,
156- None => return ,
164+ None => return false ,
157165 } ;
158166 match output[ i + 3 ..] . chars ( ) . next ( ) . unwrap ( ) {
159167 '0' ..= '6' => { }
160- _ => return ,
168+ _ => return false ,
161169 }
162170 let alternative = format ! ( "e{}" , gnu_compiler) ;
163171 if Command :: new ( & alternative) . output ( ) . is_ok ( ) {
164172 cfg. compiler ( alternative) ;
173+ return true ;
165174 }
166175 }
167176
168177 "mips-unknown-linux-musl" => {
169178 if cfg. get_compiler ( ) . path ( ) . to_str ( ) == Some ( "gcc" ) {
170179 cfg. compiler ( "mips-linux-musl-gcc" ) ;
180+ return true ;
171181 }
172182 }
173183 "mipsel-unknown-linux-musl" => {
174184 if cfg. get_compiler ( ) . path ( ) . to_str ( ) == Some ( "gcc" ) {
175185 cfg. compiler ( "mipsel-linux-musl-gcc" ) ;
186+ return true ;
176187 }
177188 }
178189
@@ -181,12 +192,14 @@ fn set_compiler(cfg: &mut cc::Build,
181192 let guess = root. join ( "bin/musl-gcc" ) ;
182193 if guess. exists ( ) {
183194 cfg. compiler ( guess) ;
195+ return true ;
184196 }
185197 }
186198 }
187199
188200 _ => { }
189201 }
202+ false
190203}
191204
192205/// The target programming language for a native compiler.
0 commit comments