@@ -2199,7 +2199,7 @@ type TcConfigBuilder =
21992199      mutable  productNameForBannerText:  string 
22002200      /// show the MS (c) notice, e.g. with help or fsi?  
22012201       mutable  showBanner:  bool 
2202-          
2202+ 
22032203      /// show times between passes?  
22042204       mutable  showTimes:  bool 
22052205      mutable  showLoadedAssemblies:  bool 
@@ -2229,7 +2229,7 @@ type TcConfigBuilder =
22292229       mutable  emitDebugInfoInQuotations:  bool 
22302230
22312231      mutable  exename:  string option 
2232-        
2232+ 
22332233      // If true - the compiler will copy FSharp.Core.dll along the produced binaries 
22342234      mutable  copyFSharpCore:  CopyFSharpCoreFlag 
22352235
@@ -2390,9 +2390,24 @@ type TcConfigBuilder =
23902390          noConditionalErasure =  false 
23912391          pathMap =  PathMap.empty
23922392          langVersion =  LanguageVersion( " default" ) 
2393-           dependencyProvider =  new   DependencyProvider() 
2393+           dependencyProvider =  Unchecked.defaultof < DependencyProvider> 
23942394        } 
23952395
2396+     // Directories to start probing in 
2397+     // Algorithm: 
2398+     //  Search for native libraries using: 
2399+     //  1. Include directories 
2400+     //  2. compilerToolPath directories 
2401+     //  3. reference dll's 
2402+     //  4. The implicit include directory 
2403+     member  private  tcConfigB.nativeProbingRoots   ()  = 
2404+         seq  { 
2405+             yield !  tcConfigB.includes
2406+             yield !  tcConfigB.compilerToolPaths
2407+             yield !  ( tcConfigB.referencedDLLs |>  Seq.map( fun  ref  ->  Path.GetDirectoryName( ref.Text))) 
2408+             yield  tcConfigB.implicitIncludeDir
2409+         }  |>  Seq.distinct
2410+ 
23962411    static member  CreateNew ( legacyReferenceResolver ,  defaultFSharpBinariesDir ,  reduceMemoryUsage ,  implicitIncludeDir , 
23972412                            isInteractive ,  isInvalidationSupported ,  defaultCopyFSharpCore ,  tryGetMetadataSnapshot )  = 
23982413
@@ -2401,17 +2416,20 @@ type TcConfigBuilder =
24012416        if  ( String.IsNullOrEmpty defaultFSharpBinariesDir)  then 
24022417            failwith " Expected a valid defaultFSharpBinariesDir" 
24032418
2404-         {  TcConfigBuilder.Initial with  
2405-             implicitIncludeDir =  implicitIncludeDir
2406-             defaultFSharpBinariesDir =  defaultFSharpBinariesDir
2407-             reduceMemoryUsage =  reduceMemoryUsage
2408-             legacyReferenceResolver =  legacyReferenceResolver
2409-             isInteractive =  isInteractive
2410-             isInvalidationSupported =  isInvalidationSupported
2411-             copyFSharpCore =  defaultCopyFSharpCore
2412-             tryGetMetadataSnapshot =  tryGetMetadataSnapshot
2413-             useFsiAuxLib =  isInteractive
2414-         } 
2419+         let  tcConfigBuilder  = 
2420+             {  TcConfigBuilder.Initial with  
2421+                 implicitIncludeDir =  implicitIncludeDir
2422+                 defaultFSharpBinariesDir =  defaultFSharpBinariesDir
2423+                 reduceMemoryUsage =  reduceMemoryUsage
2424+                 legacyReferenceResolver =  legacyReferenceResolver
2425+                 isInteractive =  isInteractive
2426+                 isInvalidationSupported =  isInvalidationSupported
2427+                 copyFSharpCore =  defaultCopyFSharpCore
2428+                 tryGetMetadataSnapshot =  tryGetMetadataSnapshot
2429+                 useFsiAuxLib =  isInteractive
2430+             } 
2431+         tcConfigBuilder.dependencyProvider <-  new  DependencyProvider( NativeResolutionProbe( tcConfigBuilder.nativeProbingRoots)) 
2432+         tcConfigBuilder
24152433
24162434    member  tcConfigB.ResolveSourceFile ( m ,  nm ,  pathLoadedFrom )  =  
24172435        use  unwindBuildPhase =  PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter
@@ -4964,10 +4982,13 @@ let ProcessMetaCommandsFromInput
49644982                if  not  canHaveScriptMetaCommands then 
49654983                    errorR( HashReferenceNotAllowedInNonScript m) 
49664984
4967-                 let  reportError  errorType error  = 
4968-                     match  errorType with 
4969-                     |  ErrorReportType.Warning ->  warning( Error( error, m)) 
4970-                     |  ErrorReportType.Error ->  errorR( Error( error,  m)) 
4985+                 let  reportError  = 
4986+                     let  report  errorType err msg  = 
4987+                         let  error  =  err,  msg
4988+                         match  errorType with 
4989+                         |  ErrorReportType.Warning ->  warning( Error( error,  m)) 
4990+                         |  ErrorReportType.Error ->  errorR( Error( error,  m)) 
4991+                     ResolvingErrorReport ( report) 
49714992
49724993                match  args with 
49734994                |  [ path]  -> 
@@ -5257,10 +5278,13 @@ module ScriptPreprocessClosure =
52575278                    match  packageManagerLines with 
52585279                    |  []  ->  () 
52595280                    |  (_,  _,  m)::_  -> 
5260-                         let  reportError  errorType error  = 
5261-                              match  errorType with 
5262-                              |  ErrorReportType.Warning ->  warning( Error( error, m)) 
5263-                              |  ErrorReportType.Error ->  errorR( Error( error,  m)) 
5281+                         let  reportError  = 
5282+                             let  report  errorType err msg  = 
5283+                                 let  error  =  err,  msg
5284+                                 match  errorType with 
5285+                                 |  ErrorReportType.Warning ->  warning( Error( error,  m)) 
5286+                                 |  ErrorReportType.Error ->  errorR( Error( error,  m)) 
5287+                             ResolvingErrorReport ( report) 
52645288
52655289                        match  origTcConfig.packageManagerLines |>  Map.tryFind packageManagerKey with 
52665290                        |  Some oldDependencyManagerLines when  oldDependencyManagerLines =  packageManagerLines ->  () 
@@ -5273,22 +5297,23 @@ module ScriptPreprocessClosure =
52735297                            |  dependencyManager -> 
52745298                                let inline  snd3   ( _ ,  b ,  _ )  =  b
52755299                                let  packageManagerTextLines  =  packageManagerLines |>  List.map snd3
5276-                                 match  tcConfig.dependencyProvider.Resolve( dependencyManager,  tcConfig.implicitIncludeDir,  mainFile,  scriptName,  " .fsx" ,  packageManagerTextLines,  reportError,  executionTfm)  with 
5277-                                 |  true ,  _ references,  generatedScripts,  additionalIncludeFolders -> 
5300+                                 let  result  =  tcConfig.dependencyProvider.Resolve( dependencyManager,  " .fsx" ,  packageManagerTextLines,  reportError,  executionTfm,  tcConfig.implicitIncludeDir,  mainFile,  scriptName) 
5301+                                 match  result.Success with 
5302+                                 |  true  -> 
52785303                                    // Resolution produced no errors 
5279-                                     if  not  ( Seq.isEmpty additionalIncludeFolders )  then 
5304+                                     if  not  ( Seq.isEmpty result.Roots )  then 
52805305                                        let  tcConfigB  =  tcConfig.CloneOfOriginalBuilder
5281-                                         for  folder in  additionalIncludeFolders  do  
5306+                                         for  folder in  result.Roots  do  
52825307                                            tcConfigB.AddIncludePath( m,  folder,  " " ) 
52835308                                        tcConfigB.packageManagerLines <-  tcConfigB.packageManagerLines |>  Map.map( fun  _ l  ->  l |>  List.map( fun   ( _ ,  p ,  m )  ->   true ,  p,  m)) 
52845309                                        tcConfig <-  TcConfig.Create( tcConfigB,  validate= false ) 
5285-                                     for  script in  generatedScripts  do 
5310+                                     for  script in  result.SourceFiles  do 
52865311                                        let  scriptText  =  File.ReadAllText script
52875312                                        loadScripts.Add script |>  ignore
52885313                                        let  iSourceText  =  SourceText.ofString scriptText
52895314                                        yield !  loop ( ClosureSource( script,  m,  iSourceText,  true )) 
52905315
5291-                                 |  false ,   _,   _,   _  -> 
5316+                                 |  false  -> 
52925317                                    // Resolution produced errors update packagerManagerLines entries to note these failure 
52935318                                    // failed resolutions will no longer be considered 
52945319                                    let  tcConfigB  =  tcConfig.CloneOfOriginalBuilder
0 commit comments