Browse Source

Build: refactoring

pull/469/head
Christoph Ruegg 10 years ago
parent
commit
9a0f9680a6
  1. 65
      build.fsx
  2. 64
      build/build-framework.fsx

65
build.fsx

@ -33,11 +33,12 @@ open BuildFramework
// VERSION OVERVIEW
let numericsRelease = release "RELEASENOTES.md"
let mklRelease = release "RELEASENOTES-MKL.md"
let cudaRelease = release "RELEASENOTES-CUDA.md"
let openBlasRelease = release "RELEASENOTES-OpenBLAS.md"
let dataRelease = release "RELEASENOTES-Data.md"
let numericsRelease = release "Math.NET Numerics" "RELEASENOTES.md"
let mklRelease = release "MKL Provider" "RELEASENOTES-MKL.md"
let cudaRelease = release "CUDA Provider" "RELEASENOTES-CUDA.md"
let openBlasRelease = release "OpenBLAS Provider" "RELEASENOTES-OpenBLAS.md"
let dataRelease = release "Data Extensions" "RELEASENOTES-Data.md"
let releases = [ numericsRelease; mklRelease; openBlasRelease; dataRelease ] // skip cuda
trace (sprintf " Math.NET Numerics v%s" numericsRelease.PackageVersion)
trace (sprintf " Math.NET Numerics MKL Provider v%s" mklRelease.PackageVersion)
@ -58,11 +59,10 @@ let tags = "math numeric statistics probability integration interpolation regres
let numericsPack =
{ Id = "MathNet.Numerics"
Version = numericsRelease.PackageVersion
Release = numericsRelease
Title = "Math.NET Numerics"
Summary = summary
Description = description + support
ReleaseNotes = numericsRelease.ReleaseNotes
Tags = tags
Authors = [ "Christoph Ruegg"; "Marcus Cuda"; "Jurgen Van Gael" ]
FsLoader = false
@ -130,16 +130,14 @@ let fsharpSignedPack =
let coreBundle =
{ Id = numericsPack.Id
Version = numericsRelease.PackageVersion
Release = numericsRelease
Title = numericsPack.Title
ReleaseNotesFile = "RELEASENOTES.md"
Packages = [ numericsPack; fsharpPack ] }
let coreSignedBundle =
{ Id = numericsSignedPack.Id
Version = numericsRelease.PackageVersion
Release = numericsRelease
Title = numericsSignedPack.Title
ReleaseNotesFile = "RELEASENOTES.md"
Packages = [ numericsSignedPack; fsharpSignedPack ] }
@ -147,11 +145,10 @@ let coreSignedBundle =
let mklWinPack =
{ Id = "MathNet.Numerics.MKL.Win"
Version = mklRelease.PackageVersion
Release = mklRelease
Title = "Math.NET Numerics - MKL Native Provider for Windows (x64 and x86)"
Summary = ""
Description = "Intel MKL native libraries for Math.NET Numerics on Windows."
ReleaseNotes = mklRelease.ReleaseNotes
Tags = "math numeric statistics probability integration interpolation linear algebra matrix fft native mkl"
Authors = [ "Christoph Ruegg"; "Marcus Cuda"; "Jurgen Van Gael" ]
FsLoader = false
@ -183,11 +180,10 @@ let mklWin64Pack =
let mklLinuxPack =
{ Id = "MathNet.Numerics.MKL.Linux"
Version = mklRelease.PackageVersion
Release = mklRelease
Title = "Math.NET Numerics - MKL Native Provider for Linux (x64 and x86)"
Summary = ""
Description = "Intel MKL native libraries for Math.NET Numerics on Linux."
ReleaseNotes = mklRelease.ReleaseNotes
Tags = "math numeric statistics probability integration interpolation linear algebra matrix fft native mkl"
Authors = [ "Christoph Ruegg"; "Marcus Cuda"; "Jurgen Van Gael" ]
FsLoader = false
@ -219,16 +215,14 @@ let mklLinux64Pack =
let mklWinBundle =
{ Id = "MathNet.Numerics.MKL.Win"
Version = mklRelease.PackageVersion
Release = mklRelease
Title = "Math.NET Numerics MKL Native Provider for Windows"
ReleaseNotesFile = "RELEASENOTES-MKL.md"
Packages = [ mklWinPack; mklWin32Pack; mklWin64Pack ] }
let mklLinuxBundle =
{ Id = "MathNet.Numerics.MKL.Linux"
Version = mklRelease.PackageVersion
Release = mklRelease
Title = "Math.NET Numerics MKL Native Provider for Linux"
ReleaseNotesFile = "RELEASENOTES-MKL.md"
Packages = [ mklLinuxPack; mklLinux32Pack; mklLinux64Pack ] }
@ -236,11 +230,10 @@ let mklLinuxBundle =
let cudaWinPack =
{ Id = "MathNet.Numerics.CUDA.Win"
Version = cudaRelease.PackageVersion
Release = cudaRelease
Title = "Math.NET Numerics - CUDA Native Provider for Windows (x64)"
Summary = ""
Description = "Nvidia CUDA native libraries for Math.NET Numerics."
ReleaseNotes = cudaRelease.ReleaseNotes
Tags = "math numeric statistics probability integration interpolation linear algebra matrix fft native cuda gpu"
Authors = [ "Matthew A Johnson"; "Christoph Ruegg" ]
FsLoader = false
@ -254,9 +247,8 @@ let cudaWinPack =
let cudaWinBundle =
{ Id = "MathNet.Numerics.CUDA.Win"
Version = cudaRelease.PackageVersion
Release = cudaRelease
Title = "Math.NET Numerics CUDA Native Provider for Windows"
ReleaseNotesFile = "RELEASENOTES-CUDA.md"
Packages = [ cudaWinPack ] }
@ -264,11 +256,10 @@ let cudaWinBundle =
let openBlasWinPack =
{ Id = "MathNet.Numerics.OpenBLAS.Win"
Version = openBlasRelease.PackageVersion
Release = openBlasRelease
Title = "Math.NET Numerics - OpenBLAS Native Provider for Windows (x64 and x86)"
Summary = ""
Description = "OpenBLAS native libraries for Math.NET Numerics."
ReleaseNotes = openBlasRelease.ReleaseNotes
Tags = "math numeric statistics probability integration interpolation linear algebra matrix fft native openblas"
Authors = [ "Kuan Bartel"; "Christoph Ruegg"; "Marcus Cuda" ]
FsLoader = false
@ -288,9 +279,8 @@ let openBlasWinPack =
let openBlasWinBundle =
{ Id = "MathNet.Numerics.OpenBLAS.Win"
Version = openBlasRelease.PackageVersion
Release = openBlasRelease
Title = "Math.NET Numerics OpenBLAS Native Provider for Windows"
ReleaseNotesFile = "RELEASENOTES-OpenBLAS.md"
Packages = [ openBlasWinPack ] }
@ -298,11 +288,10 @@ let openBlasWinBundle =
let dataTextPack =
{ Id = "MathNet.Numerics.Data.Text"
Version = dataRelease.PackageVersion
Release = dataRelease
Title = "Math.NET Numerics - Text Data I/O Extensions"
Summary = ""
Description = "Text Data Input/Output Extensions for Math.NET Numerics, the numerical foundation of the Math.NET project, aiming to provide methods and algorithms for numerical computations in science, engineering and every day use."
ReleaseNotes = dataRelease.ReleaseNotes
Tags = "math numeric data text csv tsv json xml"
Authors = [ "Christoph Ruegg"; "Marcus Cuda" ]
FsLoader = false
@ -315,11 +304,10 @@ let dataTextPack =
let dataMatlabPack =
{ Id = "MathNet.Numerics.Data.Matlab"
Version = dataRelease.PackageVersion
Release = dataRelease
Title = "Math.NET Numerics - MATLAB Data I/O Extensions"
Summary = ""
Description = "MathWorks MATLAB Data Input/Output Extensions for Math.NET Numerics, the numerical foundation of the Math.NET project, aiming to provide methods and algorithms for numerical computations in science, engineering and every day use."
ReleaseNotes = dataRelease.ReleaseNotes
Tags = "math numeric data matlab"
Authors = [ "Christoph Ruegg"; "Marcus Cuda" ]
FsLoader = false
@ -332,9 +320,8 @@ let dataMatlabPack =
let dataBundle =
{ Id = "MathNet.Numerics.Data"
Version = dataRelease.PackageVersion
Release = dataRelease
Title = "Math.NET Numerics Data Extensions"
ReleaseNotesFile = "RELEASENOTES-Data.md"
Packages = [ dataTextPack; dataMatlabPack ] }
@ -530,20 +517,14 @@ let extraDocs =
"CONTRIBUTING.md", "Contributing.md"
"CONTRIBUTORS.md", "Contributors.md" ]
let releaseNotesDocs =
[ "RELEASENOTES.md", "ReleaseNotes.md", "Release Notes"
"RELEASENOTES-Data.md", "ReleaseNotes-Data.md", "Data Extensions Release Notes"
"RELEASENOTES-MKL.md", "ReleaseNotes-MKL.md", "MKL Native Provider Release Notes"
"RELEASENOTES-OpenBLAS.md", "ReleaseNotes-OpenBLAS.md", "OpenBLAS Native Provider Release Notes" ]
Target "Docs" (fun _ ->
provideDocExtraFiles extraDocs releaseNotesDocs
provideDocExtraFiles extraDocs releases
generateDocs true false)
Target "DocsDev" (fun _ ->
provideDocExtraFiles extraDocs releaseNotesDocs
provideDocExtraFiles extraDocs releases
generateDocs true true)
Target "DocsWatch" (fun _ ->
provideDocExtraFiles extraDocs releaseNotesDocs
provideDocExtraFiles extraDocs releases
use watcher = new FileSystemWatcher(DirectoryInfo("docs/content").FullName, "*.*")
watcher.EnableRaisingEvents <- true
watcher.Changed.Add(fun e -> generateDocs false true)

64
build/build-framework.fsx

@ -16,6 +16,7 @@ module BuildFramework
#I "../packages/build/FAKE/tools"
#r "../packages/build/FAKE/tools/FakeLib.dll"
open FSharp.Core
open Fake
open Fake.DocuHelper
open Fake.AssemblyInfoFile
@ -31,19 +32,19 @@ trace Environment.CurrentDirectory
let header = ReadFile(__SOURCE_DIRECTORY__ </> __SOURCE_FILE__) |> Seq.take 10 |> Seq.map (fun s -> s.Substring(2)) |> toLines
trace header
type BundleRelease =
{ ReleaseNotesFile: string
type Release =
{ Title: string
AssemblyVersion: string
PackageVersion: string
ReleaseNotes: string }
ReleaseNotes: string
ReleaseNotesFile: string }
type Package =
{ Id: string
Version: string
Release: Release
Title: string
Summary: string
Description: string
ReleaseNotes: string
Tags: string
FsLoader: bool
Authors: string list
@ -52,21 +53,21 @@ type Package =
type Bundle =
{ Id: string
Version: string
Release: Release
Title: string
ReleaseNotesFile: string
Packages: Package list }
let release releaseNotesFile : BundleRelease =
let release 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
{ ReleaseNotesFile = releaseNotesFile
{ Title = title
AssemblyVersion = assemblyVersion
PackageVersion = packageVersion
ReleaseNotes = notes }
ReleaseNotes = notes
ReleaseNotesFile = releaseNotesFile }
// --------------------------------------------------------------------------------------
@ -87,14 +88,14 @@ let libpcl328 = "lib/portable-net4+sl5+netcore45+wpa81+wp8+MonoAndroid1+MonoTouc
// PREPARE
// --------------------------------------------------------------------------------------
let patchVersionInAssemblyInfo path (release:BundleRelease) =
let patchVersionInAssemblyInfo path (release:Release) =
BulkReplaceAssemblyInfoVersions path (fun f ->
{ f with
AssemblyVersion = release.AssemblyVersion
AssemblyFileVersion = release.AssemblyVersion
AssemblyInformationalVersion = release.PackageVersion })
let patchVersionInResource path (release:BundleRelease) =
let patchVersionInResource path (release:Release) =
ReplaceInFile
(regex_replace @"\d+\.\d+\.\d+\.\d+" release.AssemblyVersion
>> regex_replace @"\d+,\d+,\d+,\d+" (replace "." "," release.AssemblyVersion))
@ -143,8 +144,8 @@ let provideLicense path =
|> ConvertTextToWindowsLineBreaks
|> ReplaceFile (path </> "license.txt")
let provideReadme title releasenotes path =
String.concat Environment.NewLine [header; " " + title; ""; ReadFileAsString releasenotes]
let provideReadme title (release:Release) path =
String.concat Environment.NewLine [header; " " + title; ""; ReadFileAsString release.ReleaseNotesFile]
|> ConvertTextToWindowsLineBreaks
|> ReplaceFile (path </> "readme.txt")
@ -165,7 +166,7 @@ let provideFsIfSharpLoader path =
let provideZipExtraFiles path (bundle:Bundle) =
provideLicense path
provideReadme (sprintf "%s v%s" bundle.Title bundle.Version) bundle.ReleaseNotesFile path
provideReadme (sprintf "%s v%s" bundle.Title bundle.Release.PackageVersion) bundle.Release path
if bundle.Packages |> List.exists (fun p -> p.FsLoader) then
let includes = [ for root in [ ""; "../"; "../../" ] -> sprintf "#I \"%sNet40\"" root ]
provideFsLoader includes path
@ -173,12 +174,12 @@ let provideZipExtraFiles path (bundle:Bundle) =
let provideNuGetExtraFiles path (bundle:Bundle) (pack:Package) =
provideLicense path
provideReadme (sprintf "%s v%s" pack.Title pack.Version) bundle.ReleaseNotesFile path
provideReadme (sprintf "%s v%s" pack.Title pack.Release.PackageVersion) bundle.Release path
if pack.FsLoader then
let includes = [ for root in [ ""; "../"; "../../"; "../../../" ] do
for package in bundle.Packages do
yield sprintf "#I \"%spackages/%s/lib/net40/\"" root package.Id
yield sprintf "#I \"%spackages/%s.%s/lib/net40/\"" root package.Id package.Version ]
yield sprintf "#I \"%spackages/%s.%s/lib/net40/\"" root package.Id package.Release.PackageVersion ]
provideFsLoader includes path
provideFsIfSharpLoader path
@ -189,7 +190,7 @@ let zip zipDir filesDir filesFilter (bundle:Bundle) =
let workPath = "obj/Zip/" + bundle.Id
CopyDir workPath filesDir filesFilter
provideZipExtraFiles workPath bundle
Zip "obj/Zip/" (zipDir </> sprintf "%s-%s.zip" bundle.Id bundle.Version) !! (workPath + "/**/*.*")
Zip "obj/Zip/" (zipDir </> sprintf "%s-%s.zip" bundle.Id bundle.Release.PackageVersion) !! (workPath + "/**/*.*")
CleanDir "obj/Zip"
// NUGET
@ -198,8 +199,8 @@ let updateNuspec (pack:Package) outPath symbols updateFiles spec =
{ spec with ToolPath = "packages/build/NuGet.CommandLine/tools/NuGet.exe"
OutputPath = outPath
WorkingDir = "obj/NuGet"
Version = pack.Version
ReleaseNotes = pack.ReleaseNotes
Version = pack.Release.PackageVersion
ReleaseNotes = pack.Release.ReleaseNotes
Project = pack.Id
Title = pack.Title
Summary = pack.Summary
@ -211,7 +212,7 @@ let updateNuspec (pack:Package) outPath symbols updateFiles spec =
Files = updateFiles pack.Files
Publish = false }
let nugetPack bundle outPath =
let nugetPack (bundle:Bundle) outPath =
CleanDir "obj/NuGet"
for pack in bundle.Packages do
provideNuGetExtraFiles "obj/NuGet" bundle pack
@ -226,7 +227,7 @@ let nugetPack bundle outPath =
NuGet (updateNuspec pack outPath NugetSymbolPackage.None (withLicenseReadme >> withoutSymbolsSources)) "build/MathNet.Numerics.nuspec"
CleanDir "obj/NuGet"
let nugetPackExtension bundle outPath =
let nugetPackExtension (bundle:Bundle) outPath =
CleanDir "obj/NuGet"
for pack in bundle.Packages do
provideNuGetExtraFiles "obj/NuGet" bundle pack
@ -239,15 +240,16 @@ let nugetPackExtension bundle outPath =
// Documentation
// --------------------------------------------------------------------------------------
let provideDocExtraFiles extraDocs releaseNotesDocs =
let provideDocExtraFiles extraDocs (releases:Release list) =
for (fileName, docName) in extraDocs do CopyFile ("docs/content" </> docName) fileName
for (fileName, docName, title) in releaseNotesDocs do
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
[ "# " + title
"[Math.NET Numerics](ReleaseNotes.html) | [Data Extensions](ReleaseNotes-Data.html) | [MKL Native Provider](ReleaseNotes-MKL.html) | [OpenBLAS Native Provider](ReleaseNotes-OpenBLAS.html)"
[ "# " + release.Title + " Release Notes"
menu
""
ReadFileAsString fileName ]
|> ReplaceFile ("docs/content" </> docName)
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)
@ -291,7 +293,7 @@ let generateDocs fail local =
// Requires permissions; intended only for maintainers
// --------------------------------------------------------------------------------------
let publishReleaseTag title prefix (release:BundleRelease) =
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 ]
@ -324,7 +326,7 @@ let publishMirrors () =
Git.CommandHelper.runSimpleGitCommand repo "remote update" |> printfn "%s"
Git.CommandHelper.runSimpleGitCommand repo "push mirrors" |> printfn "%s"
let publishDocs (release:BundleRelease) =
let publishDocs (release:Release) =
let repo = "../mathnet-websites"
Git.Branches.pull repo "origin" "master"
CopyRecursive "out/docs" "../mathnet-websites/numerics" true |> printfn "%A"
@ -332,7 +334,7 @@ let publishDocs (release:BundleRelease) =
Git.Commit.Commit repo (sprintf "Numerics: %s docs update" release.PackageVersion)
Git.Branches.pushBranch repo "origin" "master"
let publishApi (release:BundleRelease) =
let publishApi (release:Release) =
let repo = "../mathnet-websites"
Git.Branches.pull repo "origin" "master"
CleanDir "../mathnet-websites/numerics/api"

Loading…
Cancel
Save