File: windows-prepare.ps1

package info (click to toggle)
trac 1.6-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 26,620 kB
  • sloc: python: 81,903; javascript: 2,219; makefile: 561; sh: 92; xml: 12
file content (133 lines) | stat: -rw-r--r-- 4,939 bytes parent folder | download | duplicates (3)
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
$LocalAppData = $env:LocalAppData
$ProgramData = $env:ProgramData
$workspace = $env:GITHUB_WORKSPACE
$arch = $env:MATRIX_ARCH
$vcpkg_root = $Env:VCPKG_INSTALLATION_ROOT
$vcpkg_downloads = "$LocalAppData\vcpkg\downloads"
$vcpkg_triplet = "$arch-windows"
$vcpkg_dir = "$vcpkg_root\installed\$vcpkg_triplet"
$pyver = $env:MATRIX_PYVER
$svnver = $env:MATRIX_SVNVER
$svndir = "$LocalAppData\subversion-$svnver\$arch"
$svnurl = "https://archive.apache.org/dist/subversion/subversion-$svnver.zip"
$svnarc = "$workspace\subversion-$svnver.zip"
$sqlite_name = 'sqlite-amalgamation-3081101'
$sqlite_url = "https://www.sqlite.org/2015/$sqlite_name.zip"
$sqlite_arc = "$workspace\$sqlite_name.zip"
$pydir = "$svndir\python\$pyver"

$venvdir = "$($env:LocalAppData)\venv"
$python = "$($env:pythonLocation)\python.exe"
& $python -m venv $venvdir

$env:PATH = "$svndir\bin;$pydir\bin;$($env:PATH)"
$env:PYTHONPATH = "$pydir\lib;$($env:PYTHONPATH)"

Function Verify-Binary {
    try {
        $svnver_cmd = ((& "$svndir\bin\svn.exe" --version --quiet) `
                       | Out-String).Trim()
    }
    catch {
        $svnver_cmd = ''
        Write-Warning $Error[0]
    }
    if ($svnver_cmd -ne '') {
        Write-Host "Subversion $svnver_cmd"
    }
    else {
        Write-Warning "Subversion unavailable"
    }
    try {
        $cmd = 'import os, svn.core as c; os.write(1, c.SVN_VER_NUMBER)'
        $svnver_py = ((& $python -c $cmd) | Out-String).Trim()
    }
    catch {
        $svnver_py = ''
        Write-Warning $Error[0]
    }
    if ($svnver_py -ne '') {
        Write-Host "Subversion Python bindings $svnver_py"
    }
    else {
        Write-Warning "Subversion Python bindings unavailable"
    }
    return $svnver_cmd -eq $svnver -and $svnver_py -eq $svnver
}

if (-not (Verify-Binary)) {
    Write-Host "Building Subversion Python bindings using $svnurl"

    Push-Location -LiteralPath $vcpkg_root
    & git pull
    Pop-Location
    $vcpkg_opts = @("--downloads-root=$vcpkg_downloads",
                    "--triplet=$vcpkg_triplet")
    $vcpkg_targets = Get-Content -LiteralPath .github\vcpkg.txt
    & vcpkg $vcpkg_opts update
    & vcpkg $vcpkg_opts install $vcpkg_targets
    if ($LASTEXITCODE) {
        Write-Error "vcpkg install exited with $LASTEXITCODE"
        exit 1
    }
    Invoke-WebRequest -Uri $svnurl -OutFile $svnarc
    Invoke-WebRequest -Uri $sqlite_url -OutFile $sqlite_arc
    Expand-Archive -LiteralPath $svnarc -DestinationPath "$workspace"
    Expand-Archive -LiteralPath $sqlite_arc -DestinationPath "$workspace"
    Set-Location -LiteralPath "$workspace\subversion-$svnver"
    # for Subversion 1.14.2 with SWIG 4.1
    & svn diff -c1905173 https://svn.apache.org/repos/asf/subversion/branches/1.14.x/subversion/ `
      | & "C:\Program Files\Git\usr\bin\patch.exe" -d subversion -p0
    & $python gen-make.py --release `
                          --vsnet-version=2019 `
                          "--with-apr=$vcpkg_dir" `
                          "--with-apr-util=$vcpkg_dir" `
                          "--with-zlib=$vcpkg_dir" `
                          "--with-sqlite=$workspace\$sqlite_name" `
                          "--with-py3c=$workspace\py3c"
    if ($LASTEXITCODE) {
        Write-Error "gen-make.py exited with $LASTEXITCODE"
        exit 1
    }
    & msbuild subversion_vcnet.sln `
              -nologo -v:q -m -fl `
              "-t:__ALL__:Rebuild;__SWIG_PYTHON__:Rebuild" `
              "-p:Configuration=Release;Platform=$arch"
    if ($LASTEXITCODE) {
        Write-Error "msbuild subversion_vcnet.sln exited with $LASTEXITCODE"
        exit 1
    }

    $deps = @("$vcpkg_dir\bin\libapr*.dll",
              "$vcpkg_dir\bin\apr_*.dll",
              "$vcpkg_dir\bin\libcrypto-*.dll",
              "$vcpkg_dir\bin\libexpat.dll",
              "$vcpkg_dir\bin\libssl-*.dll",
              "$vcpkg_dir\bin\zlib1.dll")
    Copy-Item -Path $deps -Destination Release

    New-Item -Force -ItemType Directory -Path "$svndir\bin"
    Copy-Item -Path $deps -Destination "$svndir\bin" -Verbose
    Copy-Item -Path @('Release\subversion\svn*\*.exe',
                      'Release\subversion\libsvn_*\*.dll') `
              -Destination "$svndir\bin" `
              -Verbose
    New-Item -Force -ItemType Directory `
             -Path @("$pydir\bin", "$pydir\lib\svn", "$pydir\lib\libsvn")
    $swig_python = 'subversion\bindings\swig\python'
    Copy-Item -Path "Release\$swig_python\libsvn_swig_py\*.dll" `
              -Destination "$pydir\bin" `
              -Verbose
    Copy-Item -Path "$swig_python\svn\*.py" `
              -Destination "$pydir\lib\svn" `
              -Verbose
    Copy-Item -Path @("$swig_python\*.py", "Release\$swig_python\_*.pyd") `
              -Destination "$pydir\lib\libsvn" `
              -Verbose
    & $python -m compileall "$pydir\lib"

    if (-not (Verify-Binary)) {
        exit 1
    }
    Set-Location -LiteralPath $workspace
}