blob: 681a5fc0a391eef8ec2e8b8a9156dc6b8c4f6704 [file] [log] [blame]
<#
This script should install dependencies required for building the Jami
Qt client on windows.
Required components not installed:
- Visual Studio
- build toolchains
- SDKs
- WiX + WiX Visual Studio extension
- Qt + Qt Visual Studio extension
#>
write-host "Installing jami-qt build dependencies for windows…" -ForegroundColor Green
Set-ExecutionPolicy Bypass -Scope Process -Force
$global:installed_packages = $null
Function choco_check_package([String] $package, [String] $version = "") {
# Query a package listing once
if ($null -eq $global:installed_packages) {
write-host "Getting installed package list from Chocolatey…" -ForegroundColor DarkCyan
$global:installed_packages = choco list -lo
}
# Check installed packages
$result = $global:installed_packages | Where-object {
$_.ToLower().StartsWith($package.ToLower())
}
if ($null -eq $result) {
# We don't have the package
write-host $package "not found." -ForegroundColor Yellow
return $false
}
if ("" -eq $version) {
# We have the package and don't care what version it is
write-host $package "found." -ForegroundColor Cyan
return $true
}
# We now check the results for a package of the specified version
$parts = $result.Split(' ')
Foreach ($part in $parts) {
if ($part -eq $version) {
# We have the package of the specified version
write-host $package $version "found." -ForegroundColor Cyan
return $true
}
}
# We don't have the package of the specified version
write-host $package $version "not found." -ForegroundColor Yellow
return $false
}
Function install_chocolatey {
# Install Chocolatey if not installed already
if (!(Test-Path "$($env:ProgramData)\chocolatey\choco.exe")) {
Invoke-Expression ((New-Object System.Net.WebClient).DownloadString("https://chocolatey.org/install.ps1"))
if ( $LASTEXITCODE -eq 0 ) {
write-host "Chocolatey installation succeeded" -ForegroundColor Green
}
else {
write-host "Chocolatey installation failed" -ForegroundColor Red
exit $LASTEXITCODE
}
}
else {
write-host "Chocolatey already installed" -ForegroundColor DarkGreen
}
}
Function choco_install_package([String] $package, [String] $version = "") {
$package_installed = choco_check_package $package $version
if ($true -eq $package_installed) {
return
}
if ("" -ne $version) {
write-host "Installing" $package "@" $version
choco install -fy --allow-downgrade $package --version $version --acceptlicense
}
else {
write-host "Installing" $package
choco install -fy --allow-downgrade $package --acceptlicense
}
if ( $LASTEXITCODE -ne 0 ) {
write-host "Choco Packages Installation Failed" -ForegroundColor Red
exit 1
}
}
Function install_choco_packages($packages) {
Foreach ($i in $packages) {
choco_install_package $i.pkg $i.ver
}
write-host "Choco Packages Installation Succeeded" -ForegroundColor Green
}
Function download_file_to_temp($download_name, $url, $output_name) {
write-host "Downloading $download_name" -ForegroundColor DarkCyan
$output = $env:TEMP + "\$output_name"
(New-Object System.Net.WebClient).DownloadFile($url, $output)
if ( $LASTEXITCODE -eq 0 ) {
write-host "Download $download_name Succeeded" -ForegroundColor Green
}
else {
write-host "Download $download_name Failed" -ForegroundColor Red
exit $LASTEXITCODE
}
}
Function unzip_file_from_temp($unzip_name, $zip_file_name, $unzip_file_output_name) {
write-host "Unzipping $unzip_name" -ForegroundColor DarkCyan
$zip_path = $env:TEMP + "\$zip_file_name"
$unzip_path = $env:TEMP + "\$unzip_file_output_name"
Invoke-Expression("unzip -o $zip_path -d '$unzip_path'") | Out-Null
if ( $LASTEXITCODE -eq 0 ) {
write-host "Unzip $unzip_name Succeeded" -ForegroundColor Green
}
else {
write-host "Unzip $unzip_name Failed" -ForegroundColor Red
exit $LASTEXITCODE
}
}
Function run_batch($batch_cmd, $task_name) {
write-host $task_name -ForegroundColor DarkCyan
Start-Process "cmd.exe" $batch_cmd -Wait -NoNewWindow | Out-Null
if ( $LASTEXITCODE -eq 0 ) {
write-host "$task_name Succeeded" -ForegroundColor Green
}
else {
write-host "$task_name Failed" -ForegroundColor Red
exit $LASTEXITCODE
}
}
Function move_file_from_temp_to_msys64($file_name, $task_name) {
write-host $task_name -ForegroundColor DarkCyan
$file_path = $env:TEMP + "\$file_name"
Move-item -Path $file_path -Destination $msys2_path -Force
if ($LASTEXITCODE -eq 0) {
write-host "$task_name Succeeded" -ForegroundColor Green
}
else {
write-host "$task_name Failed" -ForegroundColor Red
exit $LASTEXITCODE
}
}
Function install_msys2_packages($packages) {
Foreach ($i in $packages) {
Invoke-Expression ("pacman -Q '$i'") | out-null
if ($LASTEXITCODE -eq 0) {
write-host $i "already installed" -ForegroundColor Cyan
continue
}
Invoke-Expression ("pacman -S '$i' --noconfirm")
if ($LASTEXITCODE -ne 0) {
write-host "Pacman Packages Installation Failed" -ForegroundColor Red
exit 1
}
}
write-host "Pacman Packages Installation Succeeded" -ForegroundColor Green
}
# Web installed msys2_64 bit to install make, gcc, perl, diffutils
$msys_packages = @("make", "gcc", "perl", "diffutils")
# Install 7zip, unzip, wget --version 1.19.4, cmake, git --version 2.10.2, pandoc, strawberryperl, msys2
$choco_packages = @(
[pscustomobject]@{pkg = "wget"; ver = "1.19.4" }
[pscustomobject]@{pkg = "git.install"; ver = "2.10.2" }
[pscustomobject]@{pkg = "7zip"; ver = "" }
[pscustomobject]@{pkg = "unzip"; ver = "" }
[pscustomobject]@{pkg = "cmake"; ver = "" }
[pscustomobject]@{pkg = "pandoc"; ver = "" }
[pscustomobject]@{pkg = "strawberryperl"; ver = "" }
[pscustomobject]@{pkg = "msys2"; ver = "" }
)
install_chocolatey
# Check for an existing msys2 install
# Note that choco installs msys2 in C:/tools/
if (!(Test-Path -Path "C:\msys64")) {
$Env:Path += ";C:\tools\msys64\usr\bin"
$msys2_path = "C:\tools\msys64\usr\bin"
if ((Test-Path -Path "C:\tools\msys64")) {
write-host "MSYS2 64 already installed" -ForegroundColor Green
}
else {
$choco_packages.Add([pscustomobject]@{pkg = "msys2"; ver = "" })
}
}
else {
write-host "MSYS2 64 already installed" -ForegroundColor Green
$Env:Path += ";C:\msys64\usr\bin"
$msys2_path = "C:\msys64\usr\bin"
}
install_choco_packages $choco_packages
install_msys2_packages $msys_packages
# Install VSNASM
download_file_to_temp 'VSNASM' "https://github.com/ShiftMediaProject/VSNASM/releases/download/0.8/VSNASM.zip" 'VSNASM.zip'
unzip_file_from_temp 'VSNASM' 'VSNASM.zip' 'VSNASM_UNZIP'
$batch_path = "/c set ISINSTANCE=1 &&" + $env:TEMP + "\VSNASM_UNZIP\install_script.bat"
run_batch $batch_path "Install VSNASM"
# Install VSYASM
download_file_to_temp 'VSYASM' "https://github.com/ShiftMediaProject/VSYASM/releases/download/0.7/VSYASM.zip" 'VSYASM.zip'
unzip_file_from_temp 'VSYASM' 'VSYASM.zip' 'VSYASM_UNZIP'
$batch_path = "/c set ISINSTANCE=1 &&" + $env:TEMP + "\VSYASM_UNZIP\install_script.bat"
run_batch $batch_path "Install VSYASM"
# Install yasm.exe (win64)
download_file_to_temp 'yasm.exe (win64)' "http://www.tortall.net/projects/yasm/releases/yasm-1.3.0-win64.exe" 'yasm.exe'
move_file_from_temp_to_msys64 'yasm.exe' 'Move yasm.exe (win64) to msys64 folder'
# Install gas-preprocessor.pl
download_file_to_temp 'gas-preprocessor.pl' "https://github.com/FFmpeg/gas-preprocessor/blob/master/gas-preprocessor.pl" 'gas-preprocessor.pl'
move_file_from_temp_to_msys64 'gas-preprocessor.pl' 'Move gas-preprocessor.pl to msys64 folder'
write-host "Done" -ForegroundColor Green