# from https://github.com/krlmlr/r-appveyor/tree/master/scripts if ( -not(Test-Path Env:\CRAN) ) { $CRAN = "https://cran.rstudio.com" } Else { $CRAN = $env:CRAN } # Found at http://zduck.com/2012/powershell-batch-files-exit-codes/ Function Exec { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=1)] [scriptblock]$Command, [Parameter(Position=1, Mandatory=0)] [string]$ErrorMessage = "Execution of command failed.`n$Command" ) $ErrorActionPreference = "Continue" & $Command 2>&1 | %{ "$_" } if ($LastExitCode -ne 0) { throw "Exec: $ErrorMessage`nExit code: $LastExitCode" } } Function Progress { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=0)] [string]$Message = "" ) $ProgressMessage = '== ' + (Get-Date) + ': ' + $Message Write-Host $ProgressMessage -ForegroundColor Magenta } Function TravisTool { [CmdletBinding()] param ( [Parameter(Position=0, Mandatory=1)] [string[]]$Params ) Exec { bash.exe ../travis-tool.sh $Params } } Function InstallR { [CmdletBinding()] Param() if ( -not(Test-Path Env:\R_VERSION) ) { $version = "patched" } Else { $version = $env:R_VERSION } if ( -not(Test-Path Env:\R_ARCH) ) { $arch = "x64" } Else { $arch = $env:R_ARCH } If ($arch -eq "i386") { $mingw_path = "mingw_32" } Else { $mingw_path = "mingw_64" } Progress ("Version: " + $version) If ($version -eq "devel") { $url_path = "" $version = "devel" } ElseIf (($version -eq "stable") -or ($version -eq "release")) { $url_path = "" $version = $(ConvertFrom-JSON $(Invoke-WebRequest http://rversions.r-pkg.org/r-release-win).Content).version If ($version -eq "3.2.4") { $version = "3.2.4revised" } } ElseIf ($version -eq "patched") { $url_path = "" $version = $(ConvertFrom-JSON $(Invoke-WebRequest http://rversions.r-pkg.org/r-release-win).Content).version + "patched" } ElseIf ($version -eq "oldrel") { $version = $(ConvertFrom-JSON $(Invoke-WebRequest http://rversions.r-pkg.org/r-oldrel).Content).version $url_path = ("old/" + $version + "/") } Else { $url_path = ("old/" + $version + "/") } Progress ("URL path: " + $url_path) $rurl = $CRAN + "/bin/windows/base/" + $url_path + "R-" + $version + "-win.exe" $global:rversion = $version Progress ("Downloading R from: " + $rurl) & "C:\Program Files\Git\mingw64\bin\curl.exe" -s -o ../R-win.exe -L $rurl Progress "Running R installer" Start-Process -FilePath ..\R-win.exe -ArgumentList "/VERYSILENT /DIR=C:\R" -NoNewWindow -Wait $RDrive = "C:" echo "R is now available on drive $RDrive" Progress "Setting PATH" $env:PATH = $RDrive + '\R\bin\' + $arch + ';' + 'C:\Rtools\' + $mingw_path + '\bin;' + 'C:\MinGW\msys\1.0\bin;' + $env:PATH Progress "Testing R installation" Rscript -e "sessionInfo()" } Function InstallRtools40 { $rtoolsurl = $CRAN + "/bin/windows/Rtools/rtools40-x86_64.exe" Progress ("Downloading Rtools40 from: " + $rtoolsurl) & "C:\Program Files\Git\mingw64\bin\curl.exe" -s -o ../rtools40-x86_64.exe -L $rtoolsurl Progress "Running Rtools40 installer" Start-Process -FilePath ..\rtools40-x86_64.exe -ArgumentList /VERYSILENT -NoNewWindow -Wait Progress "Setting PATH" $env:PATH = 'c:\rtools40\usr\bin;c:\rtools40\mingw64\bin;' + $env:PATH } Function InstallRtools { if ( -not(Test-Path Env:\RTOOLS_VERSION) ) { $rtoolsver = '35' } Else { $rtoolsver = $env:RTOOLS_VERSION } $rtoolsurl = $CRAN + "/bin/windows/Rtools/Rtools$rtoolsver.exe" Progress ("Downloading Rtools from: " + $rtoolsurl) & "C:\Program Files\Git\mingw64\bin\curl.exe" -s -o ../Rtools-current.exe -L $rtoolsurl Progress "Running Rtools installer" Start-Process -FilePath ..\Rtools-current.exe -ArgumentList /VERYSILENT -NoNewWindow -Wait $RtoolsDrive = "C:" echo "Rtools is now available on drive $RtoolsDrive" Progress "Setting PATH" if ( -not(Test-Path Env:\GCC_PATH) ) { $gcc_path = "gcc-4.6.3" } Else { $gcc_path = $env:GCC_PATH } $env:PATH = $RtoolsDrive + '\Rtools\bin;' + $RtoolsDrive + '\Rtools\MinGW\bin;' + $RtoolsDrive + '\Rtools\' + $gcc_path + '\bin;' + $env:PATH $env:BINPREF=$RtoolsDrive + '/Rtools/mingw_$(WIN)/bin/' } Function Bootstrap { [CmdletBinding()] Param() Progress "Bootstrap: Start" Progress "Adding GnuWin32 tools to PATH" $env:PATH = "C:\Program Files (x86)\Git\bin;" + $env:PATH Progress "Setting time zone" tzutil /g tzutil /s "GMT Standard Time" tzutil /g InstallR if ((Test-Path "src") -or ($env:USE_RTOOLS -eq "true") -or ($env:USE_RTOOLS -eq "yes")) { if ($rversion.StartsWith("3")) { InstallRtools } Else { InstallRtools40 } } Else { Progress "Skipping download of Rtools because src/ directory is missing." } Progress "Downloading and installing travis-tool.sh" cp "tests\appveyor\travis_tool.sh" "..\travis-tool.sh" # Invoke-WebRequest https://raw.githubusercontent.com/krlmlr/r-appveyor/master/r-travis/scripts/travis-tool.sh -OutFile "..\travis-tool.sh" echo '@bash.exe ../travis-tool.sh %*' | Out-File -Encoding ASCII .\travis-tool.sh.cmd cat .\travis-tool.sh.cmd bash -c "( echo; echo '^travis-tool\.sh\.cmd$' ) >> .Rbuildignore" cat .\.Rbuildignore $env:PATH.Split(";") Progress "Setting R_LIBS_USER" $env:R_LIBS_USER = 'c:\RLibrary\' + $rversion.Substring(0,3) if ( -not(Test-Path $env:R_LIBS_USER) ) { mkdir $env:R_LIBS_USER } Progress "Setting TAR to 'internal'" $env:TAR = 'internal' Progress "Bootstrap: Done" }