@@ -2199,7 +2199,7 @@ type TcConfigBuilder =
2199
2199
mutable productNameForBannerText: string
2200
2200
/// show the MS (c) notice, e.g. with help or fsi?
2201
2201
mutable showBanner: bool
2202
-
2202
+
2203
2203
/// show times between passes?
2204
2204
mutable showTimes: bool
2205
2205
mutable showLoadedAssemblies: bool
@@ -2229,7 +2229,7 @@ type TcConfigBuilder =
2229
2229
mutable emitDebugInfoInQuotations: bool
2230
2230
2231
2231
mutable exename: string option
2232
-
2232
+
2233
2233
// If true - the compiler will copy FSharp.Core.dll along the produced binaries
2234
2234
mutable copyFSharpCore: CopyFSharpCoreFlag
2235
2235
@@ -2390,9 +2390,24 @@ type TcConfigBuilder =
2390
2390
noConditionalErasure = false
2391
2391
pathMap = PathMap.empty
2392
2392
langVersion = LanguageVersion( " default" )
2393
- dependencyProvider = new DependencyProvider()
2393
+ dependencyProvider = Unchecked.defaultof < DependencyProvider>
2394
2394
}
2395
2395
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
+
2396
2411
static member CreateNew ( legacyReferenceResolver , defaultFSharpBinariesDir , reduceMemoryUsage , implicitIncludeDir ,
2397
2412
isInteractive , isInvalidationSupported , defaultCopyFSharpCore , tryGetMetadataSnapshot ) =
2398
2413
@@ -2401,17 +2416,20 @@ type TcConfigBuilder =
2401
2416
if ( String.IsNullOrEmpty defaultFSharpBinariesDir) then
2402
2417
failwith " Expected a valid defaultFSharpBinariesDir"
2403
2418
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
2415
2433
2416
2434
member tcConfigB.ResolveSourceFile ( m , nm , pathLoadedFrom ) =
2417
2435
use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter
@@ -4964,10 +4982,13 @@ let ProcessMetaCommandsFromInput
4964
4982
if not canHaveScriptMetaCommands then
4965
4983
errorR( HashReferenceNotAllowedInNonScript m)
4966
4984
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)
4971
4992
4972
4993
match args with
4973
4994
| [ path] ->
@@ -5257,10 +5278,13 @@ module ScriptPreprocessClosure =
5257
5278
match packageManagerLines with
5258
5279
| [] -> ()
5259
5280
| (_, _, 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)
5264
5288
5265
5289
match origTcConfig.packageManagerLines |> Map.tryFind packageManagerKey with
5266
5290
| Some oldDependencyManagerLines when oldDependencyManagerLines = packageManagerLines -> ()
@@ -5273,22 +5297,23 @@ module ScriptPreprocessClosure =
5273
5297
| dependencyManager ->
5274
5298
let inline snd3 ( _ , b , _ ) = b
5275
5299
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 ->
5278
5303
// Resolution produced no errors
5279
- if not ( Seq.isEmpty additionalIncludeFolders ) then
5304
+ if not ( Seq.isEmpty result.Roots ) then
5280
5305
let tcConfigB = tcConfig.CloneOfOriginalBuilder
5281
- for folder in additionalIncludeFolders do
5306
+ for folder in result.Roots do
5282
5307
tcConfigB.AddIncludePath( m, folder, " " )
5283
5308
tcConfigB.packageManagerLines <- tcConfigB.packageManagerLines |> Map.map( fun _ l -> l |> List.map( fun ( _ , p , m ) -> true , p, m))
5284
5309
tcConfig <- TcConfig.Create( tcConfigB, validate= false )
5285
- for script in generatedScripts do
5310
+ for script in result.SourceFiles do
5286
5311
let scriptText = File.ReadAllText script
5287
5312
loadScripts.Add script |> ignore
5288
5313
let iSourceText = SourceText.ofString scriptText
5289
5314
yield ! loop ( ClosureSource( script, m, iSourceText, true ))
5290
5315
5291
- | false , _, _, _ ->
5316
+ | false ->
5292
5317
// Resolution produced errors update packagerManagerLines entries to note these failure
5293
5318
// failed resolutions will no longer be considered
5294
5319
let tcConfigB = tcConfig.CloneOfOriginalBuilder
0 commit comments