-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.fsx
125 lines (98 loc) · 3.21 KB
/
build.fsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#I @"packages/build/FAKE/tools"
#r @"FakeLib.dll"
open Fake
open Fake.AssemblyInfoFile
open Fake.ReleaseNotesHelper
open Fake.Testing
open System
open System.IO
type Project =
{ Name: string
Summary: string
Guid: string }
let solutionName = "Runestone.FSharp"
let configuration = "Release"
let tags = "runestone, portable executable, pe"
let mainProject =
{ Name = solutionName
Summary = "A tool for analyzing Portable Executable files."
Guid = "b7390b74-05e0-4eef-9739-88c21fe7b6f9" }
let releaseNotes = ReleaseNotesHelper.parseReleaseNotes (File.ReadLines "RELEASE_NOTES.md")
let solutionFile = solutionName + ".sln"
// publishable projects - for generated lib info
let projects = [ mainProject ]
let buildDir = "./bin"
let outputDir = buildDir @@ configuration
let testAssemblies = "bin/**/*Tests*.dll"
let isAppveyorBuild = (environVar >> isNotNullOrEmpty) "APPVEYOR"
let appveyorBuildVersion = sprintf "%s-a%s" releaseNotes.AssemblyVersion (DateTime.UtcNow.ToString "yyMMddHHmm")
let mergeBinaries = false
Target "Clean" (fun () ->
CleanDirs [buildDir]
)
Target "AppveyorBuildVersion" (fun () ->
Shell.Exec("appveyor", sprintf "UpdateBuild -Version \"%s\"" appveyorBuildVersion) |> ignore
)
Target "AssemblyInfo" (fun () ->
List.iter(fun project ->
let filename = "./src" @@ project.Name @@ "AssemblyInfo.fs"
CreateFSharpAssemblyInfo filename
[ Attribute.Title project.Name
Attribute.Product solutionName
Attribute.Description project.Summary
Attribute.Version releaseNotes.AssemblyVersion
Attribute.FileVersion releaseNotes.AssemblyVersion
Attribute.Guid project.Guid ]) projects
)
Target "CopyLicense" (fun _ ->
[ "LICENSE.md" ]
|> CopyTo (outputDir)
)
Target "BuildCapstone" (fun _ ->
!! "/src/capstone_dll/capstone.vcxproj"
|> MSBuildRelease "" "Rebuild"
|> ignore
)
Target "Build" (fun _ ->
!! solutionFile
|> MSBuildRelease outputDir "Rebuild"
|> ignore
)
Target "ILMerge" (fun _ ->
let ilmergePath = "./packages/build/ilmerge/tools/ilmerge.exe"
let targetBinary = solutionName + ".dll"
let mergedLibs =
Directory.GetFiles(outputDir, "*.dll")
|> Set.ofArray
|> Set.remove (outputDir @@ targetBinary)
let mergeFolder = Directory.CreateDirectory (buildDir @@ "merged")
ILMerge
(fun p ->
{ p with
ToolPath = ilmergePath
Libraries = mergedLibs
AllowDuplicateTypes = AllowDuplicateTypes.AllPublicTypes
})
(mergeFolder.FullName @@ targetBinary)
(Path.GetFullPath <| outputDir @@ targetBinary)
)
Target "RunTests" (fun _ ->
!! testAssemblies
|> NUnit3 (fun p ->
{ p with
WorkingDir = Path.GetFullPath (outputDir)
ShadowCopy = false
TimeOut = TimeSpan.FromMinutes 10.
Force32bit=true})
)
Target "All" DoNothing
"Clean"
=?> ("AppveyorBuildVersion", isAppveyorBuild)
==> "AssemblyInfo"
==> "CopyLicense"
==> "Build"
=?>("ILMerge", mergeBinaries)
//==> "RunTests"
==> "All"
let target = getBuildParamOrDefault "target" "All"
RunTargetOrDefault target