-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathBuild.ps1
292 lines (232 loc) · 7.87 KB
/
Build.ps1
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
#Requires -Version 3.0
#Requires -Modules Invoke-MsBuild
<#
.SYNOPSIS
Build script for EnVar Plugin for NSIS.
.DESCRIPTION
This script helps to build the plugin and it's distribution
.PARAMETER Step
Optional. Defines one or more build steps to perform.
Remove-Build
Remove the build folders Lib and Obj
Update-Build
Compile the plugin
New-Build
Execute Remove-Build and Update-Build
Remove-Distribution
Remove Data\EnVar-Plugin.zip and the folder Dist
Update-Distribution
Copy the files for the distribution to the folder Dist
New-Distribution
Execute Remove-Distribution and Update-Distribution
Compress-Distribution
Compress the folder Dist to Data\EnVar-Plugin.zip
Test-Plugin
Compiles and runs the test installer
.INPUTS
None.
.OUTPUTS
None.
.EXAMPLE
Bin\Build
Build the plugin and create the distribution.
.EXAMPLE
Bin\Build New-Build
Clean the build folders and compile the plugin.
.EXAMPLE
Bin\Build Compress-Distribution
Create EnVar-Plugin.zip from the Dist folder.
.EXAMPLE
Bin\Build Update-Build, New-Distribution, Compress-Distribution
Compile the plugin, update the Dist folder and create EnVar-Plugin.zip from the
Dist folder.
.LINK
Project home: https://github.com/GsNSIS/EnVar
#>
Param(
[Parameter(
Mandatory=$false,
ValueFromPipeline=$true,
Position=0
)]
[string[]]
$Step
)
function Remove-Build
{
Write-Host "Cleanup build..."
if (Test-Path -Path "$PSScriptRoot\..\Lib") {
Remove-Item -Path "$PSScriptRoot\..\Lib" -Force -Recurse
}
if (Test-Path -Path "$PSScriptRoot\..\Obj") {
Remove-Item -Path "$PSScriptRoot\..\Obj" -Force -Recurse
}
}
function Update-Build
{
Write-Host "Update build..."
$BuildResults = @()
$Configurations = "Release", "Release Unicode"
$Platforms = "x86", "x64"
foreach ($Configuration in $Configurations) {
foreach ($Platform in $Platforms) {
if (($Configuration -notmatch "Unicode") -and ($Platform -eq "x64")) {
Continue
}
Write-Host " - Creating $Configuration for $Platform " -NoNewline
$BuildResult = Invoke-MsBuild "$PSScriptRoot\..\EnVar.sln" -MsBuildParameters "/p:Configuration=`"$Configuration`" /p:Platform=`"$Platform`""
if ($BuildResult.BuildSucceeded) {
Write-Host "succeeded"
} else {
Write-Host "failed"
}
$BuildResults += $BuildResult
}
}
#return $BuildResults
}
function New-Build
{
Remove-Build
Update-Build
}
function Remove-Distribution
{
Write-Host "Cleanup distribution..."
if (Test-Path -Path "$PSScriptRoot\..\Data\EnVar-Plugin.zip") {
Remove-Item -Path "$PSScriptRoot\..\Data\EnVar-Plugin.zip" -Force
}
if (Test-Path -Path "$PSScriptRoot\..\Dist") {
Remove-Item -Path "$PSScriptRoot\..\Dist" -Force -Recurse
}
}
function Update-Distribution
{
Write-Host "Copy source files..."
New-Item -ItemType "directory" -Path "$PSScriptRoot\..\Dist\Contrib\EnVar" -Force | Out-Null
Copy-Item -Path "$PSScriptRoot\..\Src", "$PSScriptRoot\..\EnVar.*" -Destination "$PSScriptRoot\..\Dist\Contrib\EnVar\" -Force -Recurse
Write-Host "Copy doc files..."
New-Item -ItemType "directory" "$PSScriptRoot\..\Dist\Docs\EnVar" -Force | Out-Null
Copy-Item -Path "$PSScriptRoot\..\LICENSE", "$PSScriptRoot\..\README.md" -Destination "$PSScriptRoot\..\Dist\Docs\EnVar\" -Force
Write-Host "Copy example files..."
New-Item -ItemType "directory" "$PSScriptRoot\..\Dist\Examples\EnVar" -Force | Out-Null
Copy-Item "$PSScriptRoot\..\Docs\example.nsi" -Destination "$PSScriptRoot\..\Dist\Examples\EnVar\" -Force
Write-Host "Copy dll files..."
New-Item -ItemType "directory" "$PSScriptRoot\..\Dist\Plugins\amd64-unicode", "$PSScriptRoot\..\Dist\Plugins\x86-ansi", "$PSScriptRoot\..\Dist\Plugins\x86-unicode" -Force | Out-Null
Copy-Item "$PSScriptRoot\..\Lib\Win32\Release\EnVar.dll" -Destination "$PSScriptRoot\..\Dist\Plugins\x86-ansi\" -Force
Copy-Item "$PSScriptRoot\..\Lib\Win32\Release Unicode\EnVar.dll" -Destination "$PSScriptRoot\..\Dist\Plugins\x86-unicode\" -Force
Copy-Item "$PSScriptRoot\..\Lib\x64\Release Unicode\EnVar.dll" -Destination "$PSScriptRoot\..\Dist\Plugins\amd64-unicode\" -Force
}
function New-Distribution
{
Remove-Distribution
Update-Distribution
}
function Compress-Distribution
{
Write-Host "Compress distribution..."
New-Item -ItemType "directory" "$PSScriptRoot\..\Data" -Force | Out-Null
Compress-Archive -Path "$PSScriptRoot\..\Dist\*" -DestinationPath "$PSScriptRoot\..\Data\EnVar-Plugin.zip" -Force
}
function Deploy-Plugin
{
Write-Host "Deploy plugin..."
Copy-Item "$PSScriptRoot\..\Lib\Win32\Release\EnVar.dll" -Destination "${Env:ProgramFiles(x86)}\NSIS\Plugins\x86-ansi\" -Force
Copy-Item "$PSScriptRoot\..\Lib\Win32\Release Unicode\EnVar.dll" -Destination "${Env:ProgramFiles(x86)}\NSIS\Plugins\x86-unicode\" -Force
#Copy-Item "$PSScriptRoot\..\Lib\x64\Release Unicode\EnVar.dll" -Destination "${Env:ProgramFiles(x86)}\NSIS\Plugins\amd64-unicode\" -Force
}
function Build-PluginTest
{
Write-Host "Build PluginTest installer..."
if (Test-Path -Path "$PSScriptRoot\..\Tests\PluginTest.exe") {
Remove-Item -Path "$PSScriptRoot\..\Tests\PluginTest.exe" -Force
}
#$Env:NSISDIR = "$PSScriptRoot\..\Dist"
$build = Start-Process -FilePath "${Env:ProgramFiles(x86)}\NSIS\makensis.exe" -ArgumentList "$PSScriptRoot\..\Tests\PluginTest.nsi" -Wait -PassThru
if ($build.ExitCode -eq 0) {
Write-Host "Build succeeded"
} else {
$ExitCode = $build.ExitCode
Throw "Build failed with $ExitCode"
}
}
function Start-PluginTest
{
Write-Host "Test plugin..."
$result = Start-Process -FilePath "$PSScriptRoot\..\Tests\PluginTest.exe" -ArgumentList "/S" -Wait -PassThru
if ($result.ExitCode -eq 0) {
Write-Host "Tests succeeded"
} else {
$ExitCode = $result.ExitCode
Throw "Tests failed with $ExitCode"
}
}
function Test-Plugin
{
Deploy-Plugin
Build-PluginTest
Start-PluginTest
}
function Write-Usage {
Get-Help $MyInvocation.PSCommandPath -Full
}
#----------------------------------------------------------------------------
# Build Entry Point
#----------------------------------------------------------------------------
#Import-Module "$PSScriptRoot\BuildUtility"
if ($Step.Count -eq 0) {
# Perform default build steps
New-Build
New-Distribution
Compress-Distribution
Test-Plugin
} else {
$StepFailure = $false
# Execute the steps in the user given order
foreach ($SingleStep in $Step) {
switch ($Step)
{
{"Remove-Build" -match $_} {
Remove-Build
}
{"Update-Build" -match $_} {
Update-Build
}
{"New-Build" -match $_} {
New-Build
}
{"Remove-Distribution" -match $_} {
Remove-Distribution
}
{"Update-Distribution" -match $_} {
Update-Distribution
}
{"New-Distribution" -match $_} {
New-Distribution
}
{"Compress-Distribution" -match $_} {
Compress-Distribution
}
{"Deploy-Plugin" -match $_} {
Deploy-Plugin
}
{"Build-PluginTest" -match $_} {
Build-PluginTest
}
{"Start-PluginTest" -match $_} {
Start-PluginTest
}
{"Test-Plugin" -match $_} {
Test-Plugin
}
Default {
$StepFailure = true
Write-Host ("Step '" + $_ + "' is unknown!")
}
}
}
# Show usage if invalid step was provided
if ($StepFailure) {
Write-Usage
}
}