aboutsummaryrefslogtreecommitdiff
path: root/ci
diff options
context:
space:
mode:
authorGoaLitiuM <goalitium@kapsi.fi>2018-09-11 20:49:32 +0300
committerGoaLitiuM <goalitium@kapsi.fi>2018-09-21 11:56:31 +0300
commite00bd3666d97bb0190acaba554f10f4527858640 (patch)
tree6562d077ffb29b1fc399d68c58a60c854b68759a /ci
parent9a29496a9b8caad2834e8ab139fbd7affed7d92c (diff)
downloadmeson-e00bd3666d97bb0190acaba554f10f4527858640.zip
meson-e00bd3666d97bb0190acaba554f10f4527858640.tar.gz
meson-e00bd3666d97bb0190acaba554f10f4527858640.tar.bz2
Appveyor: Install DMD compiler and dub packages
[skip ci]
Diffstat (limited to 'ci')
-rw-r--r--ci/install-dmd.ps171
1 files changed, 71 insertions, 0 deletions
diff --git a/ci/install-dmd.ps1 b/ci/install-dmd.ps1
new file mode 100644
index 0000000..fc8226c
--- /dev/null
+++ b/ci/install-dmd.ps1
@@ -0,0 +1,71 @@
+param (
+ [string]$Version = $null
+)
+Set-StrictMode -Version latest
+$ErrorActionPreference = "Stop"
+$ProgressPreference = "SilentlyContinue"
+
+# default installation directory
+$dmd_install = "C:\D"
+$dmd_version_file = "C:\cache\DMD_LATEST"
+
+#echo "Fetching latest DMD version..."
+if (!$Version) {
+ $dmd_latest_url = "http://downloads.dlang.org/releases/LATEST"
+ $retries = 10
+ for ($i = 1; $i -le $retries; $i++) {
+ try {
+ [system.io.directory]::CreateDirectory((Split-Path -parent $dmd_version_file)) > $null
+ Invoke-WebRequest -URI $dmd_latest_url -OutFile $dmd_version_file
+ break
+ } catch [net.WebException] {
+ if ($i -eq $retries) {
+ break
+ }
+ $backoff = (10 * $i) # backoff 10s, 20s, 30s...
+ echo ('{0}: {1}' -f $dmd_latest_url, $_.Exception.Message)
+ echo ('Retrying in {0}s...' -f $backoff)
+ Start-Sleep -m ($backoff * 1000)
+ } catch {
+ throw
+ }
+ }
+ if (Test-Path $dmd_version_file) {
+ $dmd_version = Get-Content -Path $dmd_version_file
+ } else {
+ throw "Failed to resolve latest DMD version"
+ }
+} else {
+ $dmd_version = $Version
+}
+$dmd_url = "http://downloads.dlang.org/releases/2.x/$dmd_version/dmd.$dmd_version.windows.zip"
+$dmd_filename = [System.IO.Path]::GetFileName($dmd_url)
+$dmd_archive = Join-Path ($env:temp) $dmd_filename
+
+#echo "Downloading $dmd_filename..."
+$retries = 10
+for ($i = 1; $i -le $retries; $i++) {
+ try {
+ (New-Object net.webclient).DownloadFile($dmd_url, $dmd_archive)
+ break
+ } catch [net.WebException] {
+ if ($i -eq $retries) {
+ throw # fail on last retry
+ }
+ $backoff = (10 * $i) # backoff 10s, 20s, 30s...
+ echo ('{0}: {1}' -f $dmd_url, $_.Exception.Message)
+ echo ('Retrying in {0}s...' -f $backoff)
+ Start-Sleep -m ($backoff * 1000)
+ }
+}
+
+#echo "Extracting $dmd_filename..."
+Expand-Archive $dmd_archive -Force -DestinationPath $dmd_install
+
+# add to environment path
+#echo "Installing DMD..."
+$dmd_bin = Join-Path $dmd_install "dmd2\windows\bin"
+$Env:Path = $Env:Path + ";" + $dmd_bin
+
+#echo "Testing DMD..."
+& dmd.exe --version 2>&1>$null