csharpfftfsharpintegrationinterpolationlinear-algebramathdifferentiationmatrixnumericsrandomregressionstatisticsmathnet
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
4.2 KiB
142 lines
4.2 KiB
// (c) Microsoft Corporation 2005-2009.
|
|
|
|
namespace Microsoft.FSharp.Build
|
|
|
|
open System
|
|
open Microsoft.Build.Framework
|
|
open Microsoft.Build.Utilities
|
|
open Internal.Utilities
|
|
|
|
(**************************************
|
|
MSBuild task for fsyacc
|
|
|
|
options:
|
|
-o <string>: Name the output file.
|
|
-v: Produce a listing file.
|
|
--module <string>: Define the F# module name to host the generated parser.
|
|
--open <string>: Add the given module to the list of those to open in both the generated signature and implementation.
|
|
--ml-compatibility: Support the use of the global state from the 'Parsing' module in MLLib.
|
|
--tokens: Simply tokenize the specification file itself.
|
|
--codepage <int>: Assume input lexer specification file is encoded with the given codepage.
|
|
--help: display this list of options
|
|
-help: display this list of options
|
|
|
|
NOT SUPPORTED:
|
|
-v
|
|
--tokens
|
|
--open
|
|
--module
|
|
|
|
**************************************)
|
|
|
|
type FsYacc() =
|
|
inherit ToolTask()
|
|
|
|
let mutable inputFile : string = null
|
|
let mutable outputFile : string = null
|
|
|
|
let mutable codePage : string = null
|
|
let mutable otherFlags : string = null
|
|
let mutable mlCompat = false
|
|
|
|
let mutable _open : string = null
|
|
let mutable _module : string = null
|
|
|
|
let mutable toolPath : string =
|
|
match FSharpEnvironment.FSharpRunningBinFolder with
|
|
| Some(s) -> s
|
|
| None -> ""
|
|
#if FX_ATLEAST_35
|
|
#else
|
|
let mutable toolExe : string = "fsyacc.exe"
|
|
#endif
|
|
|
|
// [<Required>]
|
|
member this.InputFile
|
|
with get () = inputFile
|
|
and set (x) = inputFile <- x
|
|
|
|
[<Microsoft.Build.Framework.Output>]
|
|
member this.OutputFile
|
|
with get () = outputFile
|
|
and set (x) = outputFile <- x
|
|
|
|
member this.OtherFlags
|
|
with get() = otherFlags
|
|
and set(s) = otherFlags <- s
|
|
|
|
// --codepage <int>: Assume input lexer specification file is encoded with the given codepage.
|
|
member this.CodePage
|
|
with get () = codePage
|
|
and set (x) = codePage <- x
|
|
|
|
// --ml-compatibility: Support the use of the global state from the 'Parsing' module in MLLib.
|
|
member this.MLCompatibility
|
|
with get () = mlCompat
|
|
and set (x) = mlCompat <- x
|
|
|
|
// --open
|
|
member this.Open
|
|
with get () = _open
|
|
and set (x) = _open <- x
|
|
|
|
// --module
|
|
member this.Module
|
|
with get () = _module
|
|
and set (x) = _module <- x
|
|
|
|
// For targeting other versions of fslex.exe, such as "\LKG\" or "\Prototype\"
|
|
member this.ToolPath
|
|
with get () = toolPath
|
|
and set (s) = toolPath <- s
|
|
|
|
#if FX_ATLEAST_35
|
|
#else
|
|
// Name of the .exe to call
|
|
member this.ToolExe
|
|
with get () = toolExe
|
|
and set (s) = toolExe <- s
|
|
#endif
|
|
|
|
// ToolTask methods
|
|
override this.ToolName = "fsyacc.exe"
|
|
|
|
override this.GenerateFullPathToTool() =
|
|
System.IO.Path.Combine(toolPath, this.ToolExe)
|
|
|
|
override this.GenerateCommandLineCommands() =
|
|
|
|
let builder = new CommandLineBuilder()
|
|
|
|
// CodePage
|
|
builder.AppendSwitchIfNotNull("--codepage ", codePage)
|
|
|
|
// ML Compatibility
|
|
if mlCompat then builder.AppendSwitch("--ml-compatibility")
|
|
|
|
// Open
|
|
builder.AppendSwitchIfNotNull("--open ", _open)
|
|
|
|
// Module
|
|
builder.AppendSwitchIfNotNull("--module ", _module)
|
|
|
|
// OutputFile
|
|
builder.AppendSwitchIfNotNull("-o ", outputFile)
|
|
|
|
// OtherFlags - must be second-to-last
|
|
builder.AppendSwitchUnquotedIfNotNull("", otherFlags)
|
|
|
|
builder.AppendSwitchIfNotNull(" ", inputFile)
|
|
|
|
let args = builder.ToString()
|
|
|
|
// when doing simple unit tests using API, no BuildEnginer/Logger is attached
|
|
if this.BuildEngine <> null then
|
|
let eventArgs = { new CustomBuildEventArgs(message=args,helpKeyword="",senderName="") with member x.Equals(y) = false }
|
|
this.BuildEngine.LogCustomEvent(eventArgs)
|
|
|
|
args
|
|
|
|
// Expose this to internal components (for unit testing)
|
|
member internal this.InternalGenerateCommandLineCommands() =
|
|
this.GenerateCommandLineCommands()
|
|
|