WIP on qt6.9-migration

This commit is contained in:
luisangelsm
2025-10-16 21:56:41 +02:00
parent ed41cf9eea
commit 55c99ca9fe
19 changed files with 219 additions and 67 deletions

View File

@ -157,8 +157,8 @@ jobs:
- name: Install dependencies
run: |
pip3 install --break-system-packages aqtinstall
python3 -m aqt install-qt mac desktop 6.3.1 -m qt5compat qtmultimedia qtimageformats
echo "${{ github.workspace }}/6.3.1/macos/bin" >> $GITHUB_PATH
python3 -m aqt install-qt mac desktop 6.9.3 -m qt5compat qtmultimedia qtimageformats qtshadertools
echo "${{ github.workspace }}/6.9.3/macos/bin" >> $GITHUB_PATH
brew install create-dmg
npm install -g appdmg
mkdir -p ${{ github.workspace }}/compressed_archive
@ -423,8 +423,8 @@ jobs:
pip install -U pip
pip install aqtinstall
mkdir C:\Qt
python -m aqt install-qt windows desktop 6.3.1 win64_msvc2019_64 -O c:\Qt -m qt5compat qtmultimedia qtimageformats
dir C:\Qt\6.3.1\msvc2019_64\bin
python -m aqt install-qt windows desktop 6.9.3 win64_msvc2022_64 -O c:\Qt -m qt5compat qtmultimedia qtimageformats qtshadertools
dir C:\Qt\6.9.3\msvc2022_64\bin
choco install -y wget
choco install innosetup
mkdir %GITHUB_WORKSPACE%\compressed_archive
@ -451,8 +451,8 @@ jobs:
- name: Build
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" -vcvars_ver=14.29
set PATH=C:\Qt\6.3.1\msvc2019_64\bin;%PATH%
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
set PATH=C:\Qt\6.9.3\msvc2022_64\bin;%PATH%
set DEFINES_VAR=DEFINES+="BUILD_NUMBER=\\\\\\\"${{ needs.initialization.outputs.build_number }}\\\\\\\""
qmake CONFIG+="7zip" %DEFINES_VAR%
nmake
@ -460,8 +460,8 @@ jobs:
- name: Run tests
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" -vcvars_ver=14.29
set PATH=C:\Qt\6.3.1\msvc2019_64\bin;%PATH%
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
set PATH=C:\Qt\6.9.3\msvc2022_64\bin;%PATH%
nmake check TESTARGS="-maxwarnings 100000"
- name: Upload executables for signing
@ -507,8 +507,8 @@ jobs:
shell: cmd
working-directory: ci/win
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" -vcvars_ver=14.29
set PATH=C:\Qt\6.3.1\msvc2019_64\bin;%PATH%
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
set PATH=C:\Qt\6.9.3\msvc2022_64\bin;%PATH%
.\create_installer.cmd x64 7z ${{ needs.initialization.outputs.build_number }} qt6
- name: Verify installer was created
@ -569,6 +569,137 @@ jobs:
name: windows-x64-qt6-${{ needs.initialization.outputs.build_number }}
path: ci/win/Output/YACReader*.exe
# Windows ARM64 Qt6 build
windows-arm64-qt6:
name: Windows ARM64 (Qt6)
runs-on: windows-2022
needs: [initialization, code-format-validation]
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
architecture: 'x64'
- name: Install dependencies
shell: cmd
run: |
pip install -U pip
pip install aqtinstall
mkdir C:\Qt
python -m aqt install-qt windows desktop 6.9.3 win64_msvc2022_64 -O c:\Qt -m qt5compat qtmultimedia qtimageformats qtshadertools
python -m aqt install-qt windows desktop 6.9.3 win64_msvc2022_arm64_cross_compiled -O c:\Qt -m qt5compat qtmultimedia qtimageformats qtshadertools
dir C:\Qt\6.9.3\msvc2022_arm64\bin
choco install -y wget
choco install innosetup
mkdir %GITHUB_WORKSPACE%\compressed_archive
wget "https://github.com/YACReader/yacreader-7z-deps/blob/main/7z2301-src.7z?raw=true" -O %GITHUB_WORKSPACE%\compressed_archive\7z2301-src.7z
7z x %GITHUB_WORKSPACE%\compressed_archive\7z2301-src.7z -o%GITHUB_WORKSPACE%\compressed_archive\lib7zip
wget "https://aka.ms/vs/17/release/vc_redist.arm64.exe" -O %GITHUB_WORKSPACE%\vc_redist.arm64.exe
- name: Build
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm64
set PATH=C:\Qt\6.9.3\msvc2022_arm64\bin;%PATH%
set DEFINES_VAR=DEFINES+="BUILD_NUMBER=\\\\\\\"${{ needs.initialization.outputs.build_number }}\\\\\\\""
qmake CONFIG+="7zip" %DEFINES_VAR%
nmake
- name: Upload executables for signing
if: github.repository == 'YACReader/yacreader' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop')
uses: actions/upload-artifact@v4
id: upload_executables
with:
name: windows-arm64-qt6-executables-unsigned-${{ needs.initialization.outputs.build_number }}
path: |
release64/YACReader.exe
release64/YACReaderLibrary.exe
release64/YACReaderLibraryServer.exe
- name: Submit to SignPath
if: github.repository == 'YACReader/yacreader' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop')
uses: signpath/github-action-submit-signing-request@v1
with:
api-token: ${{ secrets.SIGNPATH_API_TOKEN }}
organization-id: ${{ secrets.SIGNPATH_ORGANIZATION_ID }}
project-slug: 'yacreader'
signing-policy-slug: 'release-signing'
artifact-configuration-slug: 'zipped-files'
github-artifact-id: ${{ steps.upload_executables.outputs.artifact-id }}
wait-for-completion: true
output-artifact-directory: 'release64/signed'
- name: Replace executables with signed versions
if: github.repository == 'YACReader/yacreader' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop')
shell: pwsh
run: |
Copy-Item "release64/signed/YACReader.exe" "release64/YACReader.exe" -Force
Copy-Item "release64/signed/YACReaderLibrary.exe" "release64/YACReaderLibrary.exe" -Force
Copy-Item "release64/signed/YACReaderLibraryServer.exe" "release64/YACReaderLibraryServer.exe" -Force
Remove-Item -Path "release64/signed" -Recurse -Force -ErrorAction SilentlyContinue
Write-Host "Signed executables are ready for installer creation"
- name: Create installer
shell: cmd
working-directory: ci/win
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" amd64_arm64
set PATH=C:\Qt\6.9.3\msvc2022_64\bin;%PATH%
.\create_installer.cmd arm64 7z ${{ needs.initialization.outputs.build_number }} qt6
- name: Verify installer was created
if: github.repository == 'YACReader/yacreader' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop')
shell: pwsh
run: |
if (-not (Test-Path "ci/win/Output/YACReader*.exe")) {
throw "Installer file was not created"
}
Get-ChildItem "ci/win/Output/YACReader*.exe"
- name: Upload unsigned installer
if: github.repository == 'YACReader/yacreader' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop')
uses: actions/upload-artifact@v4
id: upload_unsigned
with:
name: windows-arm64-qt6-unsigned-${{ needs.initialization.outputs.build_number }}
path: ci/win/Output/YACReader*.exe
- name: Submit to SignPath
if: github.repository == 'YACReader/yacreader' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop')
uses: signpath/github-action-submit-signing-request@v1
with:
api-token: ${{ secrets.SIGNPATH_API_TOKEN }}
organization-id: ${{ secrets.SIGNPATH_ORGANIZATION_ID }}
project-slug: 'yacreader'
signing-policy-slug: 'release-signing'
artifact-configuration-slug: 'zipped-files'
github-artifact-id: ${{ steps.upload_unsigned.outputs.artifact-id }}
wait-for-completion: true
output-artifact-directory: 'ci/win/Output/signed'
- name: Replace with signed installer and cleanup
if: github.repository == 'YACReader/yacreader' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop')
shell: pwsh
working-directory: ci/win/Output
run: |
$signedFiles = Get-ChildItem "signed/YACReader*.exe"
foreach ($file in $signedFiles) {
$destName = $file.Name
Copy-Item $file.FullName $destName -Force
Write-Host "Replaced with signed: $destName"
}
Remove-Item -Path "signed" -Recurse -Force -ErrorAction SilentlyContinue
Write-Host "Cleaned up signed directory"
- name: Upload installer
uses: actions/upload-artifact@v4
with:
name: windows-arm64-qt6-${{ needs.initialization.outputs.build_number }}
path: ci/win/Output/YACReader*.exe
# Windows x86 Qt5 build
windows-x86:
name: Windows x86 (Qt5)
@ -777,6 +908,7 @@ jobs:
- windows-x86
- windows-x64
- windows-x64-qt6
- windows-arm64-qt6
- docker-amd64
- docker-arm64
steps:
@ -890,6 +1022,7 @@ jobs:
- windows-x86
- windows-x64
- windows-x64-qt6
- windows-arm64-qt6
- docker-amd64
- docker-arm64
steps:

View File

@ -202,6 +202,14 @@ int main(int argc, char *argv[])
mwv->openComicFromPath(arglist.at(0));
}
// This forces the style that was being used before Qt6.7. Qt6.7 introduced a new style for Windows 11. The new style seems to have somo known bugs.
// There is a bug in the Windows 11 style that causes checked QToolButton to not have a background color (css doesn't work either).
// So it makes imposible for the user to see if the button is checked or not.
// QTBUG-132443
#if defined(Q_OS_WIN) && QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
QApplication::setStyle("windowsvista");
#endif
#ifdef Q_OS_MACOS
app.setWindow(mwv);
#endif

View File

@ -285,6 +285,14 @@ int main(int argc, char **argv)
app.installEventFilter(mw);
// This forces the style that was being used before Qt6.7. Qt6.7 introduced a new style for Windows 11. The new style seems to have somo known bugs.
// There is a bug in the Windows 11 style that causes checked QToolButton to not have a background color (css doesn't work either).
// So it makes imposible for the user to see if the button is checked or not.
// QTBUG-132443
#if defined(Q_OS_WIN) && QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
QApplication::setStyle("windowsvista");
#endif
int ret = app.exec();
QLOG_INFO() << "YACReaderLibrary closed with exit code :" << ret;

View File

@ -1,5 +1,6 @@
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick
import QtQuick.Controls
import Qt5Compat.GraphicalEffects

View File

@ -1,7 +1,7 @@
import QtQuick 2.15
import QtQuick
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.12
import QtQuick.Controls
import QtQuick.Layouts
import Qt5Compat.GraphicalEffects

View File

@ -1,7 +1,7 @@
import QtQuick 2.15
import QtQuick
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.12
import QtQuick.Controls
import QtQuick.Layouts
import Qt5Compat.GraphicalEffects

View File

@ -1,6 +1,6 @@
import QtQuick 2.15
import QtQuick
import QtQuick.Controls 2.15
import QtQuick.Controls
import com.yacreader.ComicModel 1.0

View File

@ -1,4 +1,4 @@
import QtQuick 2.15
import QtQuick
import Qt5Compat.GraphicalEffects

View File

@ -1,4 +1,4 @@
import QtQuick 2.15
import QtQuick
import Qt5Compat.GraphicalEffects

View File

@ -1,4 +1,4 @@
import QtQuick 2.15
import QtQuick
import Qt5Compat.GraphicalEffects

View File

@ -13,8 +13,8 @@ OutputDir=..\Output
ChangesAssociations=true
SetupIconFile=setup.ico
UninstallDisplayIcon=uninstall.ico
ArchitecturesInstallIn64BitMode=x64
ArchitecturesAllowed=x64
ArchitecturesInstallIn64BitMode={#PLATFORM}
ArchitecturesAllowed={#PLATFORM}
[Registry]
Root: HKCR; SubKey: .cbz; ValueType: string; ValueData: Comic Book (zip); Flags: uninsdeletekey; Tasks: File_association
@ -43,41 +43,36 @@ Source: Qt6Network.dll; DestDir: {app}
Source: Qt6OpenGL.dll; DestDir: {app}
Source: Qt6OpenGLWidgets.dll; DestDir: {app}
Source: Qt6Qml.dll; DestDir: {app}
Source: Qt6QmlLocalStorage.dll; DestDir: {app}
Source: Qt6QmlModels.dll; DestDir: {app}
Source: Qt6QmlMeta.dll; DestDir: {app}
Source: Qt6QmlWorkerScript.dll; DestDir: {app}
Source: Qt6QmlXmlListModel.dll; DestDir: {app}
Source: Qt6Quick.dll; DestDir: {app}
Source: Qt6QuickEffects.dll; DestDir: {app}
Source: Qt6QuickControls2.dll; DestDir: {app}
Source: Qt6QuickControls2Impl.dll; DestDir: {app}
Source: Qt6QuickDialogs2.dll; DestDir: {app}
Source: Qt6QuickDialogs2QuickImpl.dll; DestDir: {app}
Source: Qt6QuickDialogs2Utils.dll; DestDir: {app}
Source: Qt6QuickControls2Basic.dll; DestDir: {app}
Source: Qt6QuickControls2BasicStyleImpl.dll; DestDir: {app}
Source: Qt6QuickControls2Fusion.dll; DestDir: {app}
Source: Qt6QuickControls2FusionStyleImpl.dll; DestDir: {app}
Source: Qt6QuickLayouts.dll; DestDir: {app}
Source: Qt6QuickParticles.dll; DestDir: {app}
Source: Qt6QuickShapes.dll; DestDir: {app}
Source: Qt6QuickTemplates2.dll; DestDir: {app}
Source: Qt6QuickWidgets.dll; DestDir: {app}
Source: Qt6Sql.dll; DestDir: {app}
Source: Qt6Svg.dll; DestDir: {app}
Source: Qt6ShaderTools.dll; DestDir: {app}
;Qt Angle
Source: opengl32sw.dll; DestDir: {app}
Source: D3Dcompiler_47.dll; DestDir: {app}
;Qt QML
Source: QtQml\*; DestDir: {app}\QtQml\; Flags: recursesubdirs
Source: QtQuick\*; DestDir: {app}\QtQuick\; Flags: recursesubdirs
;Qt5 Compat
Source: Qt5Compat\*; DestDir: {app}\Qt5Compat\; Flags: recursesubdirs
Source: opengl32sw.dll; DestDir: {app}; Flags: skipifsourcedoesntexist
Source: D3Dcompiler_47.dll; DestDir: {app}; Flags: skipifsourcedoesntexist
;Qt PlugIns
Source:generic\*; DestDir: {app}\generic\
Source:iconengines\*; DestDir: {app}\iconengines\
Source:imageformats\*; DestDir: {app}\imageformats\
Source:networkinformation\*; DestDir: {app}\networkinformation\
Source:platforms\*; DestDir: {app}\platforms\
Source:qml\*; DestDir: {app}\qml\; Flags: recursesubdirs
Source:qmltooling\*; DestDir: {app}\qmltooling\
Source:sqldrivers\qsqlite.dll; DestDir: {app}\sqldrivers\
Source:styles\*; DestDir: {app}\styles\

View File

@ -2,10 +2,15 @@
SET src_path=..\..\..
IF "%1"=="x64" (
SET exe_path=%src_path%\release64
set ARCH=%1
set COMPRESSION=%2
set BUILD_NUMBER=%3
set QT_VERSION=%4
IF "%ARCH%"=="x64" (
SET exe_path=%src_path%\release64
) ELSE (
SET exe_path=%src_path%\release
SET exe_path=%src_path%\release
)
rmdir /S /Q installer_contents
@ -23,45 +28,45 @@ copy %exe_path%\YACReader.exe .
copy %exe_path%\YACReaderLibrary.exe .
copy %exe_path%\YACReaderLibraryServer.exe .
windeployqt --release YACReader.exe
windeployqt --release --qmldir %src_path%\YACReaderLibrary\qml YACReaderLibrary.exe
windeployqt --release -qml YACReader.exe
windeployqt --release -qml --qmldir %src_path%\YACReaderLibrary\qml YACReaderLibrary.exe
windeployqt YACReaderLibraryServer.exe
mkdir utils
IF "%2"=="7z" (
copy %src_path%\dependencies\7zip\win\%1\7z.dll .\utils\7z.dll
IF "%COMPRESSION%"=="7z" (
copy %src_path%\dependencies\7zip\win\%ARCH%\7z.dll .\utils\7z.dll
) ELSE (
copy %src_path%\dependencies\unarr\win\%1\unarr.dll .
copy %src_path%\dependencies\unarr\win\%ARCH%\unarr.dll .
)
mkdir openssl
copy %src_path%\dependencies\pdfium\win\%ARCH%\pdfium.dll .
copy %src_path%\dependencies\pdfium\win\%1\pdfium.dll .
copy %src_path%\dependencies\openssl\win\%1\* .\openssl\
mkdir openssl
copy %src_path%\dependencies\openssl\win\%ARCH%\* .\openssl\
xcopy %src_path%\release\server .\server /i /e
xcopy %src_path%\release\languages .\languages /i /e
copy %src_path%\vc_redist.%1.exe .
copy %src_path%\vc_redist.%ARCH%.exe .
type %src_path%\common\yacreader_global.h | findstr /R /C:"#define VERSION " > tmp
set /p VERSION= < tmp
set VERSION=%VERSION:#define VERSION "=%
set VERSION=%VERSION:"=%
echo %VERSION%
del
del tmp
if "%1"=="x86" (
type build_installer.iss | findstr /v ArchitecturesInstallIn64BitMode | findstr /v ArchitecturesAllowed > copy_build_installer.iss
type copy_build_installer.iss > build_installer.iss
if "%ARCH%"=="x86" (
type build_installer.iss | findstr /v ArchitecturesInstallIn64BitMode | findstr /v ArchitecturesAllowed > copy_build_installer.iss
type copy_build_installer.iss > build_installer.iss
)
echo "iscc start"
if "%4"=="qt6" (
iscc /DVERSION=%VERSION% /DPLATFORM=%1 /DCOMPRESSED_ARCHIVE_BACKEND=%2 /DBUILD_NUMBER=%3 build_installer_qt6.iss || exit /b
if "%QT_VERSION%"=="qt6" (
iscc /DVERSION=%VERSION% /DPLATFORM=%ARCH% /DCOMPRESSED_ARCHIVE_BACKEND=%COMPRESSION% /DBUILD_NUMBER=%BUILD_NUMBER% build_installer_qt6.iss || exit /b
) else (
iscc /DVERSION=%VERSION% /DPLATFORM=%1 /DCOMPRESSED_ARCHIVE_BACKEND=%2 /DBUILD_NUMBER=%3 build_installer.iss || exit /b
iscc /DVERSION=%VERSION% /DPLATFORM=%ARCH% /DCOMPRESSED_ARCHIVE_BACKEND=%COMPRESSION% /DBUILD_NUMBER=%BUILD_NUMBER% build_installer.iss || exit /b
)
echo "iscc done!"

View File

@ -50,7 +50,7 @@ isEmpty(QMAKE_TARGET.arch) {
QMAKE_TARGET.arch = $$QMAKE_HOST.arch
}
contains(QMAKE_TARGET.arch, arm.*)|contains(QMAKE_TARGET.arch, aarch.*) {
!macx { # Apple silicon supports opengl
!macx:!win32 { # Apple silicon supports opengl (for now lets flag windows as experimental)
CONFIG += no_opengl
message("Building for ARM architecture. Disabling OpenGL coverflow. If you know that your ARM arquitecture supports opengl, please edit config.pri to enable it.")
}

BIN
dependencies/7zip/win/arm64/7z.dll vendored Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -7,12 +7,14 @@ CONFIG(pdfium) {
DEFINES += "USE_PDFIUM"
SOURCES += ../common/pdf_comic.cpp
msvc {
INCLUDEPATH += $$PWD/pdfium/win/public
contains(QMAKE_TARGET.arch, x86_64): {
LIBS += -L$$PWD/pdfium/win/x64 -lpdfium
} else {
LIBS += -L$$PWD/pdfium/win/x86 -lpdfium
}
INCLUDEPATH += $$PWD/pdfium/win/public
contains(QMAKE_TARGET.arch, x86_64): {
LIBS += -L$$PWD/pdfium/win/x64 -lpdfium
} else:contains(QMAKE_TARGET.arch, arm64): {
LIBS += -L$$PWD/pdfium/win/arm64 -lpdfium
} else {
LIBS += -L$$PWD/pdfium/win/x86 -lpdfium
}
}
unix|mingw {
macx {

BIN
dependencies/pdfium/win/arm64/pdfium.dll vendored Normal file

Binary file not shown.

BIN
dependencies/pdfium/win/arm64/pdfium.lib vendored Normal file

Binary file not shown.