@ -1,536 +0,0 @@ |
|||||
// __ __ _ _ _ _ ______ _______ |
|
||||
// | \/ | | | | | | \ | | ____|__ __| |
|
||||
// | \ / | __ _| |_| |__ | \| | |__ | | |
|
||||
// | |\/| |/ _` | __| '_ \ | . ` | __| | | |
|
||||
// | | | | (_| | |_| | | |_| |\ | |____ | | |
|
||||
// |_| |_|\__,_|\__|_| |_(_)_| \_|______| |_| |
|
||||
// |
|
||||
// Math.NET Numerics - https://numerics.mathdotnet.com |
|
||||
// Copyright (c) Math.NET - Open Source MIT/X11 License |
|
||||
// |
|
||||
// Build Framework using FAKE (http://fsharp.github.io/FAKE) |
|
||||
// |
|
||||
|
|
||||
module BuildFramework |
|
||||
|
|
||||
#I "../packages/build/FAKE/tools" |
|
||||
#r "../packages/build/FAKE/tools/FakeLib.dll" |
|
||||
|
|
||||
open FSharp.Core |
|
||||
open Fake |
|
||||
open Fake.ReleaseNotesHelper |
|
||||
open System |
|
||||
open System.IO |
|
||||
|
|
||||
let rootDir = Path.GetFullPath (Path.Combine (__SOURCE_DIRECTORY__ + "/../")) |
|
||||
Environment.CurrentDirectory <- rootDir |
|
||||
trace rootDir |
|
||||
|
|
||||
|
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
// .Net SDK |
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
|
|
||||
|
|
||||
let dotnet workingDir command = |
|
||||
let properties = |
|
||||
[ |
|
||||
] |
|
||||
let suffix = properties |> List.map (fun (name, value) -> sprintf """ /p:%s="%s" /nr:false """ name value) |> String.concat "" |
|
||||
DotNetCli.RunCommand |
|
||||
(fun c -> { c with WorkingDir = workingDir}) |
|
||||
(command + suffix) |
|
||||
|
|
||||
let dotnetWeak workingDir command = |
|
||||
let properties = |
|
||||
[ |
|
||||
yield "StrongName", "False" |
|
||||
] |
|
||||
let suffix = properties |> List.map (fun (name, value) -> sprintf """ /p:%s="%s" /nr:false """ name value) |> String.concat "" |
|
||||
DotNetCli.RunCommand |
|
||||
(fun c -> { c with WorkingDir = workingDir }) |
|
||||
(command + suffix) |
|
||||
|
|
||||
let dotnetStrong workingDir command = |
|
||||
let properties = |
|
||||
[ |
|
||||
yield "StrongName", "True" |
|
||||
] |
|
||||
let suffix = properties |> List.map (fun (name, value) -> sprintf """ /p:%s="%s" /nr:false """ name value) |> String.concat "" |
|
||||
DotNetCli.RunCommand |
|
||||
(fun c -> { c with WorkingDir = workingDir}) |
|
||||
(command + suffix) |
|
||||
|
|
||||
|
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
// Header |
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
|
|
||||
let header = ReadFile(__SOURCE_DIRECTORY__ </> __SOURCE_FILE__) |> Seq.take 10 |> Seq.map (fun s -> s.Substring(2)) |> toLines |
|
||||
|
|
||||
type Release = |
|
||||
{ RepoKey: string |
|
||||
Title: string |
|
||||
AssemblyVersion: string |
|
||||
PackageVersion: string |
|
||||
ReleaseNotes: string |
|
||||
ReleaseNotesFile: string } |
|
||||
|
|
||||
type ZipPackage = |
|
||||
{ Id: string |
|
||||
Release: Release |
|
||||
Title: string } |
|
||||
|
|
||||
type NuGetPackage = |
|
||||
{ Id: string |
|
||||
Release: Release } |
|
||||
|
|
||||
type VisualStudioProject = |
|
||||
{ AssemblyName: string |
|
||||
ProjectFile: string |
|
||||
OutputDir: string |
|
||||
Release: Release |
|
||||
NuGetPackages: NuGetPackage list } |
|
||||
|
|
||||
type NativeVisualStudioProject = |
|
||||
{ BinaryName: string |
|
||||
ProjectFile: string |
|
||||
OutputDir: string |
|
||||
Release: Release |
|
||||
NuGetPackages: NuGetPackage list } |
|
||||
|
|
||||
type NativeBashScriptProject = |
|
||||
{ BinaryName: string |
|
||||
BashScriptFile: string |
|
||||
OutputDir: string |
|
||||
Release: Release |
|
||||
NuGetPackages: NuGetPackage list } |
|
||||
|
|
||||
type Project = |
|
||||
| VisualStudio of VisualStudioProject |
|
||||
| NativeVisualStudio of NativeVisualStudioProject |
|
||||
| NativeBashScript of NativeBashScriptProject |
|
||||
|
|
||||
type Solution = |
|
||||
{ Key: string |
|
||||
SolutionFile: string |
|
||||
Projects: Project list |
|
||||
Release: Release |
|
||||
ZipPackages: ZipPackage list |
|
||||
OutputDir: string |
|
||||
OutputLibDir: string |
|
||||
OutputLibStrongNameDir: string |
|
||||
OutputZipDir: string |
|
||||
OutputNuGetDir: string } |
|
||||
|
|
||||
type NuGetSpecification = |
|
||||
{ NuGet: NuGetPackage |
|
||||
NuSpecFile: string |
|
||||
Title: string } |
|
||||
|
|
||||
|
|
||||
let release repoKey title releaseNotesFile : Release = |
|
||||
let info = LoadReleaseNotes releaseNotesFile |
|
||||
let buildPart = "0" |
|
||||
let assemblyVersion = info.AssemblyVersion + "." + buildPart |
|
||||
let packageVersion = info.NugetVersion |
|
||||
let notes = info.Notes |> List.map (fun l -> l.Replace("*","").Replace("`","")) |> toLines |
|
||||
{ Release.RepoKey = repoKey |
|
||||
Title = title |
|
||||
AssemblyVersion = assemblyVersion |
|
||||
PackageVersion = packageVersion |
|
||||
ReleaseNotes = notes |
|
||||
ReleaseNotesFile = releaseNotesFile } |
|
||||
|
|
||||
let zipPackage packageId title release = |
|
||||
{ ZipPackage.Id = packageId |
|
||||
Title = title |
|
||||
Release = release } |
|
||||
|
|
||||
let nugetPackage packageId release = |
|
||||
{ NuGetPackage.Id = packageId |
|
||||
Release = release } |
|
||||
|
|
||||
let project assemblyName projectFile nuGetPackages = |
|
||||
{ VisualStudioProject.AssemblyName = assemblyName |
|
||||
ProjectFile = projectFile |
|
||||
OutputDir = (Path.GetDirectoryName projectFile) </> "bin" </> "Release" |
|
||||
NuGetPackages = nuGetPackages |
|
||||
Release = nuGetPackages |> List.map (fun p -> p.Release) |> List.distinct |> List.exactlyOne } |
|
||||
|> Project.VisualStudio |
|
||||
|
|
||||
let nativeProject binaryName projectFile nuGetPackages = |
|
||||
{ NativeVisualStudioProject.BinaryName = binaryName |
|
||||
ProjectFile = projectFile |
|
||||
OutputDir = (Path.GetDirectoryName projectFile) </> "bin" </> "Release" |
|
||||
NuGetPackages = nuGetPackages |
|
||||
Release = nuGetPackages |> List.map (fun p -> p.Release) |> List.distinct |> List.exactlyOne } |
|
||||
|> Project.NativeVisualStudio |
|
||||
|
|
||||
let nativeBashScriptProject binaryName bashScriptFile nuGetPackages = |
|
||||
{ NativeBashScriptProject.BinaryName = binaryName |
|
||||
BashScriptFile = bashScriptFile |
|
||||
OutputDir = (Path.GetDirectoryName bashScriptFile) </> "bin" </> "Release" |
|
||||
NuGetPackages = nuGetPackages |
|
||||
Release = nuGetPackages |> List.map (fun p -> p.Release) |> List.distinct |> List.exactlyOne } |
|
||||
|> Project.NativeBashScript |
|
||||
|
|
||||
|
|
||||
let projectOutputDir = function |
|
||||
| VisualStudio p -> p.OutputDir |
|
||||
| NativeVisualStudio p -> p.OutputDir |
|
||||
| NativeBashScript p -> p.OutputDir |
|
||||
|
|
||||
let projectRelease = function |
|
||||
| VisualStudio p -> p.Release |
|
||||
| NativeVisualStudio p -> p.Release |
|
||||
| NativeBashScript p -> p.Release |
|
||||
|
|
||||
let projectNuGetPackages = function |
|
||||
| VisualStudio p -> p.NuGetPackages |
|
||||
| NativeVisualStudio p -> p.NuGetPackages |
|
||||
| NativeBashScript p -> p.NuGetPackages |
|
||||
|
|
||||
let solution key solutionFile projects zipPackages = |
|
||||
{ Solution.Key = key |
|
||||
SolutionFile = solutionFile |
|
||||
Projects = projects |
|
||||
ZipPackages = zipPackages |
|
||||
Release = List.concat [ projects |> List.map projectRelease; zipPackages |> List.map (fun p -> p.Release) ] |> List.distinct |> List.exactlyOne |
|
||||
OutputDir = "out" </> key |
|
||||
OutputLibDir = "out" </> key </> "Lib" |
|
||||
OutputLibStrongNameDir = "out" </> key </> "Lib-StrongName" |
|
||||
OutputZipDir = "out" </> key </> "Zip" |
|
||||
OutputNuGetDir = "out" </> key </> "NuGet" } |
|
||||
|
|
||||
let traceHeader (releases:Release list) = |
|
||||
trace header |
|
||||
let titleLength = releases |> List.map (fun r -> r.Title.Length) |> List.max |
|
||||
for release in releases do |
|
||||
trace ([ " "; release.Title.PadRight titleLength; " v"; release.PackageVersion ] |> String.concat "") |
|
||||
trace "" |
|
||||
dotnet rootDir "--info" |
|
||||
trace "" |
|
||||
|
|
||||
|
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
// PREPARE |
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
|
|
||||
let patchVersionInAssemblyInfo path (release:Release) = |
|
||||
BulkReplaceAssemblyInfoVersions path (fun f -> |
|
||||
{ f with |
|
||||
AssemblyVersion = release.AssemblyVersion |
|
||||
AssemblyFileVersion = release.AssemblyVersion |
|
||||
AssemblyInformationalVersion = release.PackageVersion }) |
|
||||
|
|
||||
let private regexes_sl = new System.Collections.Generic.Dictionary<string, System.Text.RegularExpressions.Regex>() |
|
||||
let private getRegexSingleLine pattern = |
|
||||
match regexes_sl.TryGetValue pattern with |
|
||||
| true, regex -> regex |
|
||||
| _ -> (new System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.Singleline)) |
|
||||
let regex_replace_singleline pattern (replacement : string) text = (getRegexSingleLine pattern).Replace(text, replacement) |
|
||||
|
|
||||
let patchVersionInResource path (release:Release) = |
|
||||
ReplaceInFile |
|
||||
(regex_replace @"\d+\.\d+\.\d+\.\d+" release.AssemblyVersion |
|
||||
>> regex_replace @"\d+,\d+,\d+,\d+" (replace "." "," release.AssemblyVersion)) |
|
||||
path |
|
||||
|
|
||||
let patchVersionInProjectFile (project:Project) = |
|
||||
match project with |
|
||||
| VisualStudio p -> |
|
||||
let semverSplit = p.Release.PackageVersion.IndexOf('-') |
|
||||
let prefix = if semverSplit <= 0 then p.Release.PackageVersion else p.Release.PackageVersion.Substring(0, semverSplit) |
|
||||
let suffix = if semverSplit <= 0 then "" else p.Release.PackageVersion.Substring(semverSplit+1) |
|
||||
ReplaceInFile |
|
||||
(regex_replace """\<PackageVersion\>.*\</PackageVersion\>""" (sprintf """<PackageVersion>%s</PackageVersion>""" p.Release.PackageVersion) |
|
||||
>> regex_replace """\<Version\>.*\</Version\>""" (sprintf """<Version>%s</Version>""" p.Release.PackageVersion) |
|
||||
>> regex_replace """\<AssemblyVersion\>.*\</AssemblyVersion\>""" (sprintf """<AssemblyVersion>%s</AssemblyVersion>""" p.Release.AssemblyVersion) |
|
||||
>> regex_replace """\<FileVersion\>.*\</FileVersion\>""" (sprintf """<FileVersion>%s</FileVersion>""" p.Release.AssemblyVersion) |
|
||||
>> regex_replace """\<VersionPrefix\>.*\</VersionPrefix\>""" (sprintf """<VersionPrefix>%s</VersionPrefix>""" prefix) |
|
||||
>> regex_replace """\<VersionSuffix\>.*\</VersionSuffix\>""" (sprintf """<VersionSuffix>%s</VersionSuffix>""" suffix) |
|
||||
>> regex_replace_singleline """\<PackageReleaseNotes\>.*\</PackageReleaseNotes\>""" (sprintf """<PackageReleaseNotes>%s</PackageReleaseNotes>""" (p.Release.ReleaseNotes.Replace("<","<").Replace(">",">")))) |
|
||||
p.ProjectFile |
|
||||
| NativeVisualStudio _ -> () |
|
||||
| NativeBashScript _ -> () |
|
||||
|
|
||||
|
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
// BUILD |
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
|
|
||||
let clean (solution:Solution) = dotnet rootDir (sprintf "clean %s --configuration Release --verbosity minimal" solution.SolutionFile) |
|
||||
|
|
||||
let restoreWeak (solution:Solution) = dotnetWeak rootDir (sprintf "restore %s --verbosity minimal" solution.SolutionFile) |
|
||||
let restoreStrong (solution:Solution) = dotnetStrong rootDir (sprintf "restore %s --verbosity minimal" solution.SolutionFile) |
|
||||
|
|
||||
let buildWeak (solution:Solution) = dotnetWeak rootDir (sprintf "build %s --configuration Release --no-incremental --no-restore --verbosity minimal" solution.SolutionFile) |
|
||||
let buildStrong (solution:Solution) = dotnetStrong rootDir (sprintf "build %s --configuration Release --no-incremental --no-restore --verbosity minimal" solution.SolutionFile) |
|
||||
|
|
||||
let packWeak (solution:Solution) = dotnetWeak rootDir (sprintf "pack %s --configuration Release --no-restore --verbosity minimal" solution.SolutionFile) |
|
||||
let packStrong (solution:Solution) = dotnetStrong rootDir (sprintf "pack %s --configuration Release --no-restore --verbosity minimal" solution.SolutionFile) |
|
||||
|
|
||||
let packProjectWeak = function |
|
||||
| VisualStudio p -> dotnetWeak rootDir (sprintf "pack %s --configuration Release --no-restore --no-build" p.ProjectFile) |
|
||||
| _ -> failwith "Project type not supported" |
|
||||
let packProjectStrong = function |
|
||||
| VisualStudio p -> dotnetStrong rootDir (sprintf "pack %s --configuration Release --no-restore --no-build" p.ProjectFile) |
|
||||
| _ -> failwith "Project type not supported" |
|
||||
|
|
||||
//let buildConfig config subject = MSBuild "" (if hasBuildParam "incremental" then "Build" else "Rebuild") [ "Configuration", config ] subject |> ignore |
|
||||
//let build subject = buildConfig "Release" subject |
|
||||
//let buildSigned subject = buildConfig "Release-Signed" subject |
|
||||
let buildConfig32 config subject = MSBuild "" (if hasBuildParam "incremental" then "Build" else "Rebuild") [("Configuration", config); ("Platform","Win32")] subject |> ignore |
|
||||
let buildConfig64 config subject = MSBuild "" (if hasBuildParam "incremental" then "Build" else "Rebuild") [("Configuration", config); ("Platform","x64")] subject |> ignore |
|
||||
|
|
||||
|
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
// COLLECT |
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
|
|
||||
let collectBinaries (solution:Solution) = |
|
||||
solution.Projects |> List.iter (function |
|
||||
| VisualStudio project -> CopyDir solution.OutputLibDir project.OutputDir (fun n -> n.Contains(project.AssemblyName + ".dll") || n.Contains(project.AssemblyName + ".pdb") || n.Contains(project.AssemblyName + ".xml")) |
|
||||
| _ -> failwith "Project type not supported") |
|
||||
|
|
||||
let collectBinariesSN (solution:Solution) = |
|
||||
solution.Projects |> List.iter (function |
|
||||
| VisualStudio project -> CopyDir solution.OutputLibStrongNameDir project.OutputDir (fun n -> n.Contains(project.AssemblyName + ".dll") || n.Contains(project.AssemblyName + ".pdb") || n.Contains(project.AssemblyName + ".xml")) |
|
||||
| _ -> failwith "Project type not supported") |
|
||||
|
|
||||
let collectNuGetPackages (solution:Solution) = |
|
||||
solution.Projects |> List.iter (function |
|
||||
| VisualStudio project -> CopyDir solution.OutputNuGetDir project.OutputDir (fun n -> n.EndsWith(".nupkg")) |
|
||||
| _ -> failwith "Project type not supported") |
|
||||
|
|
||||
|
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
// TEST |
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
|
|
||||
let test testsDir testsProj framework = |
|
||||
dotnet testsDir (sprintf "run -p %s --configuration Release --framework %s --no-restore --no-build" testsProj framework) |
|
||||
|
|
||||
|
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
// PACKAGES |
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
|
|
||||
let provideLicense path = |
|
||||
ReadFileAsString "LICENSE.md" |
|
||||
|> ConvertTextToWindowsLineBreaks |
|
||||
|> ReplaceFile (path </> "license.txt") |
|
||||
|
|
||||
let provideReadme title (release:Release) path = |
|
||||
String.concat Environment.NewLine [header; " " + title; ""; ReadFileAsString release.ReleaseNotesFile] |
|
||||
|> ConvertTextToWindowsLineBreaks |
|
||||
|> ReplaceFile (path </> "readme.txt") |
|
||||
|
|
||||
|
|
||||
// SIGN |
|
||||
|
|
||||
let sign fingerprint timeserver (solution: Solution) = |
|
||||
let files = solution.Projects |> Seq.collect (function |
|
||||
| VisualStudio project -> !! (project.OutputDir + "/**/" + project.AssemblyName + ".dll") |
|
||||
| _ -> failwith "Project type not supported") |
|
||||
let fileArgs = files |> Seq.map (sprintf "\"%s\"") |> String.concat " " |
|
||||
let optionsArgs = sprintf """/v /fd sha256 /sha1 "%s" /tr "%s" /td sha256""" fingerprint timeserver |
|
||||
let arguments = sprintf """sign %s %s""" optionsArgs fileArgs |
|
||||
let result = |
|
||||
ExecProcess (fun info -> |
|
||||
info.FileName <- findToolInSubPath "signtool.exe" """C:\Program Files (x86)\Windows Kits\10\bin\x64""" |
|
||||
info.Arguments <- arguments) TimeSpan.MaxValue |
|
||||
if result <> 0 then |
|
||||
failwithf "Error during SignTool call " |
|
||||
|
|
||||
let signNuGet fingerprint timeserver (solutions: Solution list) = |
|
||||
CleanDir "obj/NuGet" |
|
||||
solutions |
|
||||
|> Seq.collect (fun solution -> !! (solution.OutputNuGetDir </> "*.nupkg")) |
|
||||
|> Seq.distinct |
|
||||
|> Seq.iter (fun file -> |
|
||||
let args = sprintf """sign "%s" -HashAlgorithm SHA256 -TimestampHashAlgorithm SHA256 -CertificateFingerprint "%s" -Timestamper "%s""" (FullName file) fingerprint timeserver |
|
||||
let result = |
|
||||
ExecProcess (fun info -> |
|
||||
info.FileName <- "packages/build/NuGet.CommandLine/tools/NuGet.exe" |
|
||||
info.WorkingDirectory <- FullName "obj/NuGet" |
|
||||
info.Arguments <- args) (TimeSpan.FromMinutes 10.) |
|
||||
if result <> 0 then failwith "Error during NuGet sign.") |
|
||||
DeleteDir "obj/NuGet" |
|
||||
|
|
||||
|
|
||||
// ZIP |
|
||||
|
|
||||
let zip (package:ZipPackage) zipDir filesDir filesFilter = |
|
||||
CleanDir "obj/Zip" |
|
||||
let workPath = "obj/Zip/" + package.Id |
|
||||
CopyDir workPath filesDir filesFilter |
|
||||
provideLicense workPath |
|
||||
provideReadme (sprintf "%s v%s" package.Title package.Release.PackageVersion) package.Release workPath |
|
||||
Zip "obj/Zip/" (zipDir </> sprintf "%s-%s.zip" package.Id package.Release.PackageVersion) !! (workPath + "/**/*.*") |
|
||||
DeleteDir "obj/Zip" |
|
||||
|
|
||||
|
|
||||
// NUGET |
|
||||
|
|
||||
let updateNuspec (nuget:NuGetPackage) outPath spec = |
|
||||
{ spec with ToolPath = "packages/build/NuGet.CommandLine/tools/NuGet.exe" |
|
||||
OutputPath = outPath |
|
||||
WorkingDir = "obj/NuGet" |
|
||||
Version = nuget.Release.PackageVersion |
|
||||
ReleaseNotes = nuget.Release.ReleaseNotes |
|
||||
Publish = false } |
|
||||
|
|
||||
let nugetPackManually (solution:Solution) (packages:NuGetSpecification list) = |
|
||||
CleanDir "obj/NuGet" |
|
||||
for pack in packages do |
|
||||
provideLicense "obj/NuGet" |
|
||||
provideReadme (sprintf "%s v%s" pack.Title pack.NuGet.Release.PackageVersion) pack.NuGet.Release "obj/NuGet" |
|
||||
NuGet (updateNuspec pack.NuGet solution.OutputNuGetDir) pack.NuSpecFile |
|
||||
CleanDir "obj/NuGet" |
|
||||
DeleteDir "obj/NuGet" |
|
||||
|
|
||||
|
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
// Documentation |
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
|
|
||||
let provideDocExtraFiles extraDocs (releases:Release list) = |
|
||||
for (fileName, docName) in extraDocs do CopyFile ("docs/content" </> docName) fileName |
|
||||
let menu = releases |> List.map (fun r -> sprintf "[%s](%s)" r.Title (r.ReleaseNotesFile |> replace "RELEASENOTES" "ReleaseNotes" |> replace ".md" ".html")) |> String.concat " | " |
|
||||
for release in releases do |
|
||||
String.concat Environment.NewLine |
|
||||
[ "# " + release.Title + " Release Notes" |
|
||||
menu |
|
||||
"" |
|
||||
ReadFileAsString release.ReleaseNotesFile ] |
|
||||
|> ReplaceFile ("docs/content" </> (release.ReleaseNotesFile |> replace "RELEASENOTES" "ReleaseNotes")) |
|
||||
|
|
||||
let buildDocumentationTarget fsiargs target = |
|
||||
trace (sprintf "Building documentation (%s), this could take some time, please wait..." target) |
|
||||
let fakePath = "packages" </> "build" </> "FAKE" </> "tools" </> "FAKE.exe" |
|
||||
let fakeStartInfo script workingDirectory args fsiargs environmentVars = |
|
||||
(fun (info: System.Diagnostics.ProcessStartInfo) -> |
|
||||
info.FileName <- System.IO.Path.GetFullPath fakePath |
|
||||
info.Arguments <- sprintf "%s --fsiargs -d:FAKE %s \"%s\"" args fsiargs script |
|
||||
info.WorkingDirectory <- workingDirectory |
|
||||
let setVar k v = |
|
||||
info.EnvironmentVariables.[k] <- v |
|
||||
for (k, v) in environmentVars do |
|
||||
setVar k v |
|
||||
setVar "MSBuild" msBuildExe |
|
||||
setVar "GIT" Git.CommandHelper.gitPath |
|
||||
setVar "FSI" fsiPath) |
|
||||
let executeFAKEWithOutput workingDirectory script fsiargs envArgs = |
|
||||
let exitCode = |
|
||||
ExecProcessWithLambdas |
|
||||
(fakeStartInfo script workingDirectory "" fsiargs envArgs) |
|
||||
TimeSpan.MaxValue false ignore ignore |
|
||||
System.Threading.Thread.Sleep 1000 |
|
||||
exitCode |
|
||||
let exit = executeFAKEWithOutput "docs/tools" "build-docs.fsx" fsiargs ["target", target] |
|
||||
if exit <> 0 then |
|
||||
failwith "Generating documentation failed" |
|
||||
() |
|
||||
|
|
||||
let generateDocs fail local = |
|
||||
let args = if local then "" else "--define:RELEASE" |
|
||||
try |
|
||||
buildDocumentationTarget args "Default" |
|
||||
traceImportant "Documentation generated" |
|
||||
with |
|
||||
| e when not fail -> |
|
||||
failwith "Generating documentation failed" |
|
||||
|
|
||||
|
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
// Publishing |
|
||||
// Requires permissions; intended only for maintainers |
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
|
|
||||
let publishReleaseTag title prefix (release:Release) = |
|
||||
// inspired by Deedle/tpetricek |
|
||||
let tagName = prefix + "v" + release.PackageVersion |
|
||||
let tagMessage = String.concat Environment.NewLine [title + " v" + release.PackageVersion; ""; release.ReleaseNotes ] |
|
||||
let cmd = sprintf """tag -a %s -m "%s" """ tagName tagMessage |
|
||||
Git.CommandHelper.runSimpleGitCommand "." cmd |> printfn "%s" |
|
||||
let _, remotes, _ = Git.CommandHelper.runGitCommand "." "remote -v" |
|
||||
let main = remotes |> Seq.find (fun s -> s.Contains("(push)") && s.Contains("mathnet/mathnet-" + release.RepoKey)) |
|
||||
let remoteName = main.Split('\t').[0] |
|
||||
Git.Branches.pushTag "." remoteName tagName |
|
||||
|
|
||||
let publishNuGet (solutions: Solution list) = |
|
||||
CleanDir "obj/NuGet" |
|
||||
let rec impl trials (file:string) = |
|
||||
trace ("NuGet Push: " + System.IO.Path.GetFileName(file) + ".") |
|
||||
try |
|
||||
let args = sprintf """push "%s" -Source https://api.nuget.org/v3/index.json -T 900""" (FullName file) |
|
||||
let result = |
|
||||
ExecProcess (fun info -> |
|
||||
info.FileName <- "packages/build/NuGet.CommandLine/tools/NuGet.exe" |
|
||||
info.WorkingDirectory <- FullName "obj/NuGet" |
|
||||
info.Arguments <- args) (TimeSpan.FromMinutes 10.) |
|
||||
if result <> 0 then failwith "Error during NuGet push." |
|
||||
with exn -> |
|
||||
if trials > 0 then impl (trials-1) file |
|
||||
else () |
|
||||
solutions |
|
||||
|> Seq.collect (fun solution -> !! (solution.OutputNuGetDir </> "*.nupkg")) |
|
||||
|> Seq.distinct |
|
||||
|> Seq.iter (impl 3) |
|
||||
DeleteDir "obj/NuGet" |
|
||||
|
|
||||
let publishDocs (release:Release) = |
|
||||
let repo = "../web-mathnet-" + release.RepoKey |
|
||||
Git.Branches.pull repo "origin" "gh-pages" |
|
||||
CopyRecursive "out/docs" repo true |> printfn "%A" |
|
||||
Git.Staging.StageAll repo |
|
||||
Git.Commit.Commit repo (sprintf "%s: %s docs update" release.Title release.PackageVersion) |
|
||||
Git.Branches.pushBranch repo "origin" "gh-pages" |
|
||||
|
|
||||
let publishApi (release:Release) = |
|
||||
let repo = "../web-mathnet-" + release.RepoKey |
|
||||
Git.Branches.pull repo "origin" "gh-pages" |
|
||||
CleanDir (repo + "/api") |
|
||||
CopyRecursive "out/api" (repo + "/api") true |> printfn "%A" |
|
||||
Git.Staging.StageAll repo |
|
||||
Git.Commit.Commit repo (sprintf "%s: %s api update" release.Title release.PackageVersion) |
|
||||
Git.Branches.pushBranch repo "origin" "gh-pages" |
|
||||
|
|
||||
let publishNuGetToArchive (package:NuGetPackage) archivePath nupkgFile = |
|
||||
let tempDir = Path.GetTempPath() </> Path.GetRandomFileName() |
|
||||
let archiveDir = archivePath </> package.Id </> package.Release.PackageVersion |
|
||||
CleanDirs [tempDir; archiveDir] |
|
||||
nupkgFile |> CopyFile archiveDir |
|
||||
use sha512 = System.Security.Cryptography.SHA512.Create() |
|
||||
let hash = File.ReadAllBytes nupkgFile |> sha512.ComputeHash |> Convert.ToBase64String |
|
||||
File.WriteAllText ((archiveDir </> (Path.GetFileName(nupkgFile) + ".sha512")), hash) |
|
||||
ZipHelper.Unzip tempDir nupkgFile |
|
||||
!! (tempDir </> "*.nuspec") |> Copy archiveDir |
|
||||
DeleteDir tempDir |
|
||||
|
|
||||
let publishArchiveManual title zipOutPath nugetOutPath (zipPackages:ZipPackage list) (nugetPackages:NuGetPackage list) = |
|
||||
let archivePath = (environVarOrFail "MathNetReleaseArchive") </> title |
|
||||
if directoryExists archivePath |> not then failwith "Release archive directory does not exists. Safety Check failed." |
|
||||
for zipPackage in zipPackages do |
|
||||
let zipFile = zipOutPath </> sprintf "%s-%s.zip" zipPackage.Id zipPackage.Release.PackageVersion |
|
||||
if FileSystemHelper.fileExists zipFile then |
|
||||
zipFile |> CopyFile (archivePath </> "Zip") |
|
||||
for nugetPackage in nugetPackages do |
|
||||
let nupkgFile = nugetOutPath </> sprintf "%s.%s.nupkg" nugetPackage.Id nugetPackage.Release.PackageVersion |
|
||||
if FileSystemHelper.fileExists nupkgFile then |
|
||||
trace nupkgFile |
|
||||
publishNuGetToArchive nugetPackage (archivePath </> "NuGet") nupkgFile |
|
||||
let symbolsFile = nugetOutPath </> sprintf "%s.%s.symbols.nupkg" nugetPackage.Id nugetPackage.Release.PackageVersion |
|
||||
if FileSystemHelper.fileExists symbolsFile then |
|
||||
symbolsFile |> CopyFile (archivePath </> "Symbols") |
|
||||
|
|
||||
let publishArchive (solution:Solution) = |
|
||||
let zipOutPath = solution.OutputZipDir |
|
||||
let nugetOutPath = solution.OutputNuGetDir |
|
||||
let zipPackages = solution.ZipPackages |
|
||||
let nugetPackages = solution.Projects |> List.collect projectNuGetPackages |> List.distinct |
|
||||
publishArchiveManual solution.Release.Title zipOutPath nugetOutPath zipPackages nugetPackages |
|
||||
|
|
||||
let publishArchives (solutions: Solution list) = solutions |> List.iter publishArchive |
|
||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
@ -0,0 +1,133 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en"> |
||||
|
|
||||
|
<head> |
||||
|
<meta charset="utf-8"> |
||||
|
<title>{{fsdocs-page-title}}</title> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> |
||||
|
<meta name="author" content="{{fsdocs-authors}}"> |
||||
|
|
||||
|
<link rel="stylesheet" id="theme_link" href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/4.6.0/materia/bootstrap.min.css"> |
||||
|
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script> |
||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script> |
||||
|
|
||||
|
<script type="text/javascript" async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-MML-AM_CHTML"></script> |
||||
|
|
||||
|
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico"> |
||||
|
<link type="text/css" rel="stylesheet" href="{{root}}content/navbar-{{fsdocs-navbar-position}}.css" /> |
||||
|
<link type="text/css" rel="stylesheet" href="{{root}}content/fsdocs-{{fsdocs-theme}}.css" /> |
||||
|
<link type="text/css" rel="stylesheet" href="{{root}}content/fsdocs-custom.css" /> |
||||
|
<script type="text/javascript" src="{{root}}content/fsdocs-tips.js"></script> |
||||
|
<!-- HTML5 shim, for IE6-8 support of HTML5 elements --> |
||||
|
<!--[if lt IE 9]> |
||||
|
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> |
||||
|
<![endif]--> |
||||
|
<!-- BEGIN SEARCH BOX: this adds support for the search box --> |
||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/JavaScript-autoComplete/1.0.4/auto-complete.css" /> |
||||
|
<!-- END SEARCH BOX: this adds support for the search box --> |
||||
|
{{fsdocs-watch-script}} |
||||
|
</head> |
||||
|
|
||||
|
<body> |
||||
|
<nav class="navbar navbar-expand-md navbar-light bg-secondary {{fsdocs-navbar-position}}" id="fsdocs-nav"> |
||||
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation"> |
||||
|
<span class="navbar-toggler-icon"></span> |
||||
|
</button> |
||||
|
<div class="collapse navbar-collapse navbar-nav-scroll" id="navbarsExampleDefault"> |
||||
|
<a href="{{fsdocs-logo-link}}"><img id="fsdocs-logo" src="{{fsdocs-logo-src}}" /></a> |
||||
|
<!-- BEGIN SEARCH BOX: this adds support for the search box --> |
||||
|
<div id="header"> |
||||
|
<div class="searchbox" id="fsdocs-searchbox"> |
||||
|
<label for="search-by"> |
||||
|
<i class="fas fa-search"></i> |
||||
|
</label> |
||||
|
<input data-search-input="" id="search-by" type="search" placeholder="Search..." /> |
||||
|
<span data-search-clear=""> |
||||
|
<i class="fas fa-times"></i> |
||||
|
</span> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- END SEARCH BOX: this adds support for the search box --> |
||||
|
<ul class="navbar-nav"> |
||||
|
<li class="nav-header">Math.NET Numerics</li> |
||||
|
<li class="nav-item"><a class="nav-link" href="Packages.html">NuGet & Binaries</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="ReleaseNotes.html">Release Notes</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="https://github.com/mathnet/mathnet-numerics/blob/master/LICENSE.md">MIT License</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="Compatibility.html">Platform Support</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="https://numerics.mathdotnet.com/api/">Class Reference</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="https://github.com/mathnet/mathnet-numerics/issues">Issues & Bugs</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="Users.html">Who is using Math.NET?</a></li> |
||||
|
|
||||
|
<li class="nav-header">Contributing</li> |
||||
|
<li class="nav-item"><a class="nav-link" href="Contributors.html">Contributors</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="Contributing.html">Contributing</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="Build.html">Build & Tools</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="https://github.com/mathnet/mathnet-numerics/discussions/categories/ideas">Your Ideas</a></li> |
||||
|
|
||||
|
<li class="nav-header">Getting Help</li> |
||||
|
<li class="nav-item"><a class="nav-link" href="https://discuss.mathdotnet.com/c/numerics">Discuss</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="https://stackoverflow.com/questions/tagged/mathdotnet">Stack Overflow</a></li> |
||||
|
|
||||
|
<li class="nav-header">Getting Started</li> |
||||
|
<l class="nav-item"i><a class="nav-link" href="/">Getting started</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="Constants.html">Constants</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="Matrix.html">Matrices and Vectors</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="Euclid.html">Euclid & Number Theory</a></li> |
||||
|
<li class="nav-item">Combinatorics</li> |
||||
|
|
||||
|
<li class="nav-header">Evaluation</li> |
||||
|
<li class="nav-item"><a class="nav-link" href="Functions.html">Special Functions</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="Integration.html">Integration</a></li> |
||||
|
|
||||
|
<li class="nav-header">Statistics/Probability</li> |
||||
|
<li class="nav-item"><a class="nav-link" href="DescriptiveStatistics.html">Descriptive Statistics</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="Probability.html">Probability Distributions</a></li> |
||||
|
|
||||
|
<li class="nav-header">Generation</li> |
||||
|
<li class="nav-item"><a class="nav-link" href="Generate.html">Generating Data</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="Random.html">Random Numbers</a></li> |
||||
|
|
||||
|
<li class="nav-header">Solving Equations</li> |
||||
|
<li class="nav-item"><a class="nav-link" href="LinearEquations.html">Linear Equation Systems</a></li> |
||||
|
|
||||
|
<li class="nav-header">Optimization</li> |
||||
|
<li class="nav-item"><a class="nav-link" href="Distance.html">Distance Metrics</a></li> |
||||
|
|
||||
|
<li class="nav-header">Curve Fitting</li> |
||||
|
<li class="nav-item"><a class="nav-link" href="Regression.html">Regression</a></li> |
||||
|
|
||||
|
<li class="nav-header">Native Providers</li> |
||||
|
<li class="nav-item"><a class="nav-link" href="MKL.html">Intel MKL</a></li> |
||||
|
|
||||
|
<li class="nav-header">Working Together</li> |
||||
|
<li class="nav-item"><a class="nav-link" href="CSV.html">Delimited Text Files (CSV)</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="MatrixMarket.html">NIST MatrixMarket</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="MatlabFiles.html">MATLAB</a></li> |
||||
|
<li class="nav-item"><a class="nav-link" href="IFSharpNotebook.html">IF# Notebook</a></li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
</nav> |
||||
|
<div class="container"> |
||||
|
<div class="masthead"> |
||||
|
<h3 class="muted"> |
||||
|
<a href="https://www.mathdotnet.com">Math.NET Project</a> | |
||||
|
<a href="https://numerics.mathdotnet.com">Math.NET Numerics</a> | |
||||
|
<a href="https://github.com/mathnet/mathnet-numerics">GitHub</a> |
||||
|
</h3> |
||||
|
</div> |
||||
|
<hr /> |
||||
|
<div class="container" id="fsdocs-content"> |
||||
|
{{fsdocs-content}} |
||||
|
{{fsdocs-tooltips}} |
||||
|
</div> |
||||
|
<!-- BEGIN SEARCH BOX: this adds support for the search box --> |
||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/JavaScript-autoComplete/1.0.4/auto-complete.css" /> |
||||
|
<script type="text/javascript">var fsdocs_search_baseurl = '{{root}}';</script> |
||||
|
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.8/lunr.min.js"></script> |
||||
|
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/JavaScript-autoComplete/1.0.4/auto-complete.min.js"></script> |
||||
|
<script type="text/javascript" src="{{root}}content/fsdocs-search.js"></script> |
||||
|
<!-- END SEARCH BOX: this adds support for the search box --> |
||||
|
</div> |
||||
|
</body> |
||||
|
|
||||
|
</html> |
||||
|
After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
@ -1,95 +0,0 @@ |
|||||
// -------------------------------------------------------------------------------------- |
|
||||
// Builds the documentation from `.fsx` and `.md` files in the 'docs/content' directory |
|
||||
// (the generated documentation is stored in the 'docs/output' directory) |
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
|
|
||||
// Binaries that have XML documentation (in a corresponding generated XML file) |
|
||||
let referenceBinaries = [ "MathNet.Numerics.dll"; "MathNet.Numerics.FSharp.dll" ] |
|
||||
// Web site location for the generated documentation |
|
||||
let website = "https://numerics.mathdotnet.com" |
|
||||
let githubLink = "https://github.com/mathnet/mathnet-numerics" |
|
||||
|
|
||||
// Specify more information about your project |
|
||||
let info = |
|
||||
[ "project-name", "Math.NET Numerics" |
|
||||
"project-author", "Christoph Ruegg, Marcus Cuda, Jurgen Van Gael" |
|
||||
"project-summary", "Math.NET Numerics, providing methods and algorithms for numerical computations in science, engineering and every day use. .Net 4, .Net 3.5, SL5, Win8, WP8, PCL 47 and 136, Mono, Xamarin Android/iOS." |
|
||||
"project-github", githubLink |
|
||||
"project-nuget", "https://nuget.org/packages/MathNet.Numerics" ] |
|
||||
|
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
// For typical project, no changes are needed below |
|
||||
// -------------------------------------------------------------------------------------- |
|
||||
|
|
||||
#load "../../packages/build/FSharp.Formatting/FSharp.Formatting.fsx" |
|
||||
#r "../../packages/build/FAKE/tools/NuGet.Core.dll" |
|
||||
#r "../../packages/build/FAKE/tools/FakeLib.dll" |
|
||||
|
|
||||
open Fake |
|
||||
open System |
|
||||
open System.IO |
|
||||
open Fake.FileHelper |
|
||||
open FSharp.Literate |
|
||||
open FSharp.MetadataFormat |
|
||||
|
|
||||
// When called from 'build.fsx', use the public project URL as <root> |
|
||||
// otherwise, use the current 'output' directory. |
|
||||
#if RELEASE |
|
||||
let root = website |
|
||||
#else |
|
||||
let root = "file://" + (__SOURCE_DIRECTORY__ @@ "../../out/docs") |
|
||||
#endif |
|
||||
|
|
||||
// Paths with template/source/output locations |
|
||||
let top = __SOURCE_DIRECTORY__ @@ "../../" |
|
||||
let bin = __SOURCE_DIRECTORY__ @@ "../../out/lib/Net40" |
|
||||
let content = __SOURCE_DIRECTORY__ @@ "../content" |
|
||||
let output = __SOURCE_DIRECTORY__ @@ "../../out/docs" |
|
||||
let files = __SOURCE_DIRECTORY__ @@ "../files" |
|
||||
let templates = __SOURCE_DIRECTORY__ @@ "templates" |
|
||||
let formatting = __SOURCE_DIRECTORY__ @@ "../../packages/build/FSharp.Formatting/" |
|
||||
let docTemplate = formatting @@ "templates/docpage.cshtml" |
|
||||
|
|
||||
// Where to look for *.csproj templates (in this order) |
|
||||
let layoutRoots = |
|
||||
[ templates |
|
||||
formatting @@ "templates" |
|
||||
formatting @@ "templates/reference" ] |
|
||||
|
|
||||
// Copy static files and CSS + JS from F# Formatting |
|
||||
let copyFiles() = |
|
||||
CopyRecursive files output true |> Log "Copying file: " |
|
||||
ensureDirectory (output @@ "content") |
|
||||
CopyRecursive (formatting @@ "styles") (output @@ "content") true |
|
||||
|> Log "Copying styles and scripts: " |
|
||||
|
|
||||
// Build API reference from XML comments |
|
||||
let buildReference () = |
|
||||
CleanDir (output @@ "reference") |
|
||||
let binaries = |
|
||||
referenceBinaries |
|
||||
|> List.map (fun lib-> bin @@ lib) |
|
||||
MetadataFormat.Generate |
|
||||
( binaries, output @@ "reference", layoutRoots, |
|
||||
parameters = ("root", root)::info, |
|
||||
sourceRepo = githubLink @@ "tree/master", |
|
||||
sourceFolder = __SOURCE_DIRECTORY__ @@ ".." @@ "..", |
|
||||
publicOnly = true, libDirs = [bin] ) |
|
||||
|
|
||||
|
|
||||
// Build documentation from `fsx` and `md` files in `docs/content` |
|
||||
let buildDocumentation() = |
|
||||
let subdirs = Directory.EnumerateDirectories(content, "*", SearchOption.AllDirectories) |
|
||||
for dir in Seq.append [content] subdirs do |
|
||||
let sub = if dir.Length > content.Length then dir.Substring(content.Length + 1) else "." |
|
||||
Literate.ProcessDirectory |
|
||||
( dir, docTemplate, output @@ sub, replacements = ("root", root)::info, |
|
||||
layoutRoots = layoutRoots, |
|
||||
references = false, |
|
||||
lineNumbers = true, |
|
||||
generateAnchors = true ) |
|
||||
|
|
||||
|
|
||||
// Generate |
|
||||
copyFiles() |
|
||||
buildDocumentation() |
|
||||
@ -1,5 +0,0 @@ |
|||||
group Build |
|
||||
FSharp.Formatting |
|
||||
Microsoft.AspNet.Razor |
|
||||
RazorEngine |
|
||||
FSharp.Compiler.Service |
|
||||
@ -1,142 +0,0 @@ |
|||||
<!DOCTYPE html> |
|
||||
<html lang="en"> |
|
||||
<head> |
|
||||
<meta charset="utf-8"/> |
|
||||
<title>@Title</title> |
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> |
|
||||
<meta name="description" content="@Description"/> |
|
||||
<meta name="author" content="@Properties["project-author"]"/> |
|
||||
|
|
||||
<script src="https://code.jquery.com/jquery-1.8.0.js"></script> |
|
||||
<script src="https://code.jquery.com/ui/1.8.23/jquery-ui.js"></script> |
|
||||
<script src="https://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.1/js/bootstrap.min.js"></script> |
|
||||
<link href="https://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.1/css/bootstrap-combined.min.css" rel="stylesheet"/> |
|
||||
|
|
||||
<link type="text/css" rel="stylesheet" href="@Root/content/style.css" /> |
|
||||
<style> |
|
||||
#main table:not(.pre) { |
|
||||
border: 1px solid #dddddd; |
|
||||
max-width: 100%; |
|
||||
border-style: solid; |
|
||||
border-width: 1px; |
|
||||
border-color: gray; |
|
||||
border-collapse: collapse; |
|
||||
border-right-width: 1px; |
|
||||
border-bottom-width: 1px; |
|
||||
margin-top: 15px; |
|
||||
margin-bottom: 25px; |
|
||||
} |
|
||||
#main table:not(.pre) th, #main table:not(.pre) td { |
|
||||
border: 1px solid #dddddd; |
|
||||
padding: 6px; |
|
||||
} |
|
||||
#main table:not(.pre) th p, #main table:not(.pre) td p { |
|
||||
margin-bottom: 5px; |
|
||||
} |
|
||||
</style> |
|
||||
<script type="text/javascript" src="@Root/content/tips.js"></script> |
|
||||
<!-- HTML5 shim, for IE6-8 support of HTML5 elements --> |
|
||||
<!--[if lt IE 9]> |
|
||||
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> |
|
||||
<![endif]--> |
|
||||
|
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> |
|
||||
</head> |
|
||||
<body> |
|
||||
<div class="container"> |
|
||||
<div class="masthead"> |
|
||||
<ul class="nav nav-pills pull-right"> |
|
||||
<li><a href="https://www.mathdotnet.com">Math.NET Project</a></li> |
|
||||
<li><a href="https://numerics.mathdotnet.com">Math.NET Numerics</a></li> |
|
||||
<li><a href="https://github.com/mathnet/mathnet-numerics">GitHub</a></li> |
|
||||
</ul> |
|
||||
<h3 class="muted">Math.NET Numerics</h3> |
|
||||
</div> |
|
||||
<hr /> |
|
||||
<div class="row"> |
|
||||
<div class="span9" id="main"> |
|
||||
@RenderBody() |
|
||||
</div> |
|
||||
<div class="span3"> |
|
||||
<ul class="nav nav-list" id="menu"> |
|
||||
|
|
||||
<li class="nav-header">Math.NET Numerics</li> |
|
||||
<li><a href="@Root/Packages.html">NuGet & Binaries</a></li> |
|
||||
<li><a href="@Root/ReleaseNotes.html">Release Notes</a></li> |
|
||||
<li><a href="@Root/License.html">MIT License</a></li> |
|
||||
<li><a href="@Root/Compatibility.html">Platform Support</a></li> |
|
||||
<li><a href="https://numerics.mathdotnet.com/api/">Class Reference</a></li> |
|
||||
<li><a href="https://github.com/mathnet/mathnet-numerics/issues">Issues & Bugs</a></li> |
|
||||
<li><a href="@Root/Users.html">Who is using Math.NET?</a></li> |
|
||||
|
|
||||
<li class="nav-header">Contributing</li> |
|
||||
<li><a href="@Root/Contributors.html">Contributors</a></li> |
|
||||
<li><a href="@Root/Contributing.html">Contributing</a></li> |
|
||||
<li><a href="@Root/Build.html">Build & Tools</a></li> |
|
||||
<li><a href="http://feedback.mathdotnet.com/forums/2060-math-net-numerics">Your Ideas</a></li> |
|
||||
|
|
||||
<li class="nav-header">Getting Help</li> |
|
||||
<li><a href="https://discuss.mathdotnet.com/c/numerics">Discuss</a></li> |
|
||||
<li><a href="https://stackoverflow.com/questions/tagged/mathdotnet">Stack Overflow</a></li> |
|
||||
|
|
||||
<li class="nav-header">Getting Started</li> |
|
||||
<li><a href="@Root/">Getting started</a></li> |
|
||||
<li><a href="@Root/Constants.html">Constants</a></li> |
|
||||
<li>Floating-Point Numbers</li> |
|
||||
<li>Arbitrary Precision Numbers</li> |
|
||||
<li>Complex Numbers</li> |
|
||||
<li><a href="@Root/Matrix.html">Matrices and Vectors</a></li> |
|
||||
<li><a href="@Root/Euclid.html">Euclid & Number Theory</a></li> |
|
||||
<li>Combinatorics</li> |
|
||||
|
|
||||
<li class="nav-header">Evaluation</li> |
|
||||
<li><a href="@Root/Functions.html">Special Functions</a></li> |
|
||||
<li>Differentiation</li> |
|
||||
<li><a href="@Root/Integration.html">Integration</a></li> |
|
||||
|
|
||||
<li class="nav-header">Statistics/Probability</li> |
|
||||
<li><a href="@Root/DescriptiveStatistics.html">Descriptive Statistics</a></li> |
|
||||
<li><a href="@Root/Probability.html">Probability Distributions</a></li> |
|
||||
|
|
||||
<li class="nav-header">Generation</li> |
|
||||
<li><a href="@Root/Generate.html">Generating Data</a></li> |
|
||||
<li><a href="@Root/Random.html">Random Numbers</a></li> |
|
||||
|
|
||||
<li class="nav-header">Transformation</li> |
|
||||
<li>Fourier Transform (FFT)</li> |
|
||||
<li>Filtering & DSP</li> |
|
||||
<li>Window Functions</li> |
|
||||
|
|
||||
<li class="nav-header">Solving Equations</li> |
|
||||
<li><a href="@Root/LinearEquations.html">Linear Equation Systems</a></li> |
|
||||
<li>Nonlinear Root Finding</li> |
|
||||
|
|
||||
<li class="nav-header">Optimization</li> |
|
||||
<li>Linear Least Squares</li> |
|
||||
<li>Nonlinear Optimization</li> |
|
||||
<li><a href="@Root/Distance.html">Distance Metrics</a></li> |
|
||||
|
|
||||
<li class="nav-header">Curve Fitting</li> |
|
||||
<li><a href="@Root/Regression.html">Regression</a></li> |
|
||||
<li>Interpolation</li> |
|
||||
<li>Fourier Approximation</li> |
|
||||
|
|
||||
<li class="nav-header">Native Providers</li> |
|
||||
<li><a href="@Root/MKL.html">Intel MKL</a></li> |
|
||||
|
|
||||
<li class="nav-header">Working Together</li> |
|
||||
<li><a href="@Root/CSV.html">Delimited Text Files (CSV)</a></li> |
|
||||
<li><a href="@Root/MatrixMarket.html">NIST MatrixMarket</a></li> |
|
||||
<li><a href="@Root/MatlabFiles.html">MATLAB</a></li> |
|
||||
<li><a href="@Root/IFSharpNotebook.html">IF# Notebook</a></li> |
|
||||
<li>FsLab & Deedle</li> |
|
||||
<li>Microsoft Excel</li> |
|
||||
<li>numl.net machine learning</li> |
|
||||
<li>R-project</li> |
|
||||
|
|
||||
</ul> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
</body> |
|
||||
</html> |
|
||||
@ -1,16 +1,7 @@ |
|||||
using System.Reflection; |
using System.Runtime.InteropServices; |
||||
using System.Runtime.InteropServices; |
|
||||
using MathNet.Numerics.UnitTests; |
using MathNet.Numerics.UnitTests; |
||||
|
|
||||
[assembly: AssemblyTitle("Math.NET Numerics Unit Tests")] |
|
||||
[assembly: AssemblyCompany("Math.NET Project")] |
|
||||
[assembly: AssemblyProduct("Math.NET Numerics")] |
|
||||
[assembly: AssemblyCopyright("Copyright (c) Math.NET Project")] |
|
||||
[assembly: ComVisible(false)] |
[assembly: ComVisible(false)] |
||||
[assembly: Guid("04157581-63f3-447b-a277-83c6e69126a4")] |
[assembly: Guid("04157581-63f3-447b-a277-83c6e69126a4")] |
||||
|
|
||||
[assembly: AssemblyVersion("5.0.0.0")] |
|
||||
[assembly: AssemblyFileVersion("5.0.0.0")] |
|
||||
[assembly: AssemblyInformationalVersion("5.0.0-alpha02")] |
|
||||
|
|
||||
[assembly: UseLinearAlgebraProvider] |
[assembly: UseLinearAlgebraProvider] |
||||
|
|||||