Files
transmission/release/windows/build-qt5.ps1
Charles Kerr d177f9f903 test: add unit tests for Prefs (#8112)
* fix: hicpp-use-auto,modernize-use-auto

* refactor: make Prefs::getKey() a static method

refactor: make Prefs::isCore() a static method

refactor: make Prefs::type() a static method

* refactor: Application takes a Prefs& arg, not a std::unique_ptr<Prefs> arg

* fix: bugprone-exception-escape

save settings by calling prefs.save() from main()

* refactor: load settings by calling prefs.load() from main()

* refactor: use preferred declaration order in Prefs

* fixup! fix: bugprone-exception-escape

* refactor: add Prefs::current_values()

* refactor: clean up namespace use in Prefs.cc

* feat: add QString, QDateTime serializers

* test: add scaffolding for testing Qt code

test: add tests for Prefs

* refactor: remove unused #includes

* build: add clang-tidy rules to tests/qt/

* refactor: clean up the new test code a little

* chore: add missing copyright statement

* ci: ensure Qt6Test is installed

build: check for QTest when ENABLE_TESTS + ENABLE_QT are ON

* fixup! feat: add QString, QDateTime serializers

* fix: Wswitch warning

* build: do not disable tests in release/windows/build-qt5.psl, build-qt6.psl

* ci: set QT_QPA_PLATFORM for running new Qt tests

* test: build cleanly in Qt 5.15

* fixup! fixup! feat: add QString, QDateTime serializers

fix QDateTime serializer on macOS

* fixup! ci: set QT_QPA_PLATFORM for running new Qt tests

install xcb-util-cursor on alpine
2026-01-11 19:23:00 -06:00

96 lines
3.5 KiB
PowerShell

#!/usr/bin/env pwsh
$global:Qt5Version = '5.15.17'
$global:Qt5Deps = @(
'DBus'
'OpenSsl'
'Zlib'
)
function global:Build-Qt5([string] $PrefixDir, [string] $Arch, [string] $DepsPrefixDir) {
$Filename = "qt-everywhere-opensource-src-${Qt5Version}.zip" # tar.xz has some names truncated (e.g. .../double-conversion.h -> .../double-conv)
$Url = "https://qt.mirror.constant.com/archive/qt/$($Qt5Version -replace '\.\d+$', '')/${Qt5Version}/single/${Filename}"
$ArchiveBase = "qt-everywhere-src-${Qt5Version}"
$UnpackFlags = @(
(Join-Path $ArchiveBase qtactiveqt '*')
(Join-Path $ArchiveBase qtbase '*')
(Join-Path $ArchiveBase qtsvg '*')
(Join-Path $ArchiveBase qttools '*')
(Join-Path $ArchiveBase qttranslations '*')
(Join-Path $ArchiveBase qtwinextras '*')
(Join-Path $ArchiveBase .gitmodules)
(Join-Path $ArchiveBase configure.bat)
(Join-Path $ArchiveBase configure.json)
(Join-Path $ArchiveBase qt.pro)
)
$SourceDir = Invoke-DownloadAndUnpack $Url $Filename $UnpackFlags $ArchiveBase
$BuildDir = Join-Path $SourceDir .build
$ConfigOptions = @(
'-platform'; 'win32-msvc'
'-mp'
'-opensource'
'-confirm-license'
'-prefix'; $PrefixDir
'-release'
'-force-debug-info'
'-dbus'
'-ssl'
'-openssl'
'-system-zlib'
'-qt-pcre'
'-qt-libpng'
'-qt-libjpeg'
'-no-opengl'
'-no-direct2d'
'-no-freetype'
'-no-harfbuzz'
'-no-sql-db2'
'-no-sql-ibase'
'-no-sql-mysql'
'-no-sql-oci'
'-no-sql-odbc'
'-no-sql-psql'
'-no-sql-sqlite'
'-no-sql-sqlite2'
'-no-sql-tds'
'-nomake'; 'examples'
'-I'; (Join-Path $DepsPrefixDir include)
'-L'; (Join-Path $DepsPrefixDir lib)
)
if ($env:LDFLAGS) {
# Patch to add our linker flags, mainly /PDBALTPATH
Edit-TextFile (Join-Path $SourceDir qtbase mkspecs win32-msvc qmake.conf) '(^QMAKE_CXXFLAGS\b.*)' "`$1`nQMAKE_LFLAGS += ${env:LDFLAGS}"
}
# No need in GUI tools
Edit-TextFile (Join-Path $SourceDir qttools src src.pro) 'qtHaveModule[(]gui[)]' 'qtHaveModule(hughey)'
Edit-TextFile (Join-Path $SourceDir qttools src src.pro) 'qtHaveModule[(]widgets[)]' 'qtHaveModule(digits)'
Edit-TextFile (Join-Path $SourceDir qttools src linguist linguist.pro) 'qtHaveModule[(]widgets[)]' 'qtHaveModule(digits)'
Invoke-NativeCommand cmake -E remove_directory $BuildDir
$env:PATH = @(
(Join-Path $PrefixDir bin)
(Join-Path $DepsPrefixDir bin)
(Join-Path $BuildDir qtbase lib)
$env:PATH
) -join [System.IO.Path]::PathSeparator
New-Item -Path $BuildDir -ItemType Directory -ErrorAction Ignore | Out-Null
Push-Location -Path $BuildDir
Invoke-VcEnvCommand (Join-Path $SourceDir configure) @ConfigOptions
Invoke-VcEnvCommand jom
Invoke-VcEnvCommand jom install
Pop-Location
# install target doesn't copy PDBs for release DLLs
Get-Childitem -Path (Join-Path $BuildDir qtbase lib) | `
ForEach-Object { if ($_ -is [System.IO.DirectoryInfo] -or $_.Name -like '*.pdb') { Copy-Item -Path $_.FullName -Destination (Join-Path $PrefixDir lib) -Filter '*.pdb' -Recurse -Force } }
Get-Childitem -Path (Join-Path $BuildDir qtbase plugins) | `
ForEach-Object { if ($_ -is [System.IO.DirectoryInfo] -or $_.Name -like '*.pdb') { Copy-Item -Path $_.FullName -Destination (Join-Path $PrefixDir plugins) -Filter '*.pdb' -Recurse -Force } }
}