@@ -181,6 +181,7 @@ mod impl_ {
181
181
use std:: fs:: File ;
182
182
use std:: io:: Read ;
183
183
use std:: mem;
184
+ use std:: iter;
184
185
use std:: path:: { Path , PathBuf } ;
185
186
186
187
use Tool ;
@@ -217,6 +218,41 @@ mod impl_ {
217
218
}
218
219
}
219
220
221
+ fn vs16_instances ( ) -> Box < Iterator < Item =PathBuf > > {
222
+ let instances = if let Some ( instances) = vs15_instances ( ) {
223
+ instances
224
+ } else {
225
+ return Box :: new ( iter:: empty ( ) ) ;
226
+ } ;
227
+ Box :: new ( instances. filter_map ( |instance| {
228
+ let instance = instance. ok ( ) ?;
229
+ let installation_name = instance. installation_name ( ) . ok ( ) ?;
230
+ if installation_name. to_str ( ) ?. starts_with ( "VisualStudio/16." ) {
231
+ Some ( PathBuf :: from ( instance. installation_path ( ) . ok ( ) ?) )
232
+ } else {
233
+ None
234
+ }
235
+ } ) )
236
+ }
237
+
238
+ fn find_tool_in_vs16_path ( tool : & str , target : & str ) -> Option < Tool > {
239
+ vs16_instances ( ) . find_map ( |path| {
240
+ let path = path. join ( tool) ;
241
+ if !path. is_file ( ) {
242
+ return None ;
243
+ }
244
+ let mut tool = Tool :: new ( path) ;
245
+ if target. contains ( "x86_64" ) {
246
+ tool. env . push ( ( "Platform" . into ( ) , "X64" . into ( ) ) ) ;
247
+ }
248
+ Some ( tool)
249
+ } )
250
+ }
251
+
252
+ fn find_msbuild_vs16 ( target : & str ) -> Option < Tool > {
253
+ find_tool_in_vs16_path ( r"MSBuild\Current\Bin\MSBuild.exe" , target)
254
+ }
255
+
220
256
// In MSVC 15 (2017) MS once again changed the scheme for locating
221
257
// the tooling. Now we must go through some COM interfaces, which
222
258
// is super fun for Rust.
@@ -662,6 +698,10 @@ mod impl_ {
662
698
663
699
pub fn has_msbuild_version ( version : & str ) -> bool {
664
700
match version {
701
+ "16.0" => {
702
+ find_msbuild_vs16 ( "x86_64-pc-windows-msvc" ) . is_some ( )
703
+ || find_msbuild_vs16 ( "i686-pc-windows-msvc" ) . is_some ( )
704
+ }
665
705
"15.0" => {
666
706
find_msbuild_vs15 ( "x86_64-pc-windows-msvc" ) . is_some ( )
667
707
|| find_msbuild_vs15 ( "i686-pc-windows-msvc" ) . is_some ( )
0 commit comments