Repository: miurahr/aqtinstall
Pull request #878 (2025-01-06 11:53:57)

Add support for commercial versions of Qt 
> [!IMPORTANT]
> Need testers with a commercial license of Qt, [click here to see how to try this PR and help us greatly](#testers)
### Adds `install-qt-commercial` enabling the installation of commercial versions of Qt. It also enables open-source users to download Qt through the official Qt online installer.

```console
python -m aqt install-qt-commercial <target> <arch> <version> [--outputdir <path>] [--user <email> --password <pw>]
```

This command will download the official Qt installer, and translate `aqtinstall` commands you are used to into the arguments the official installer needs. It will automatically accept all licenses, the installation is unattended.

It requires authentication, or it will fail, **even if you use it to download open-source versions**.  
### To authenticate:
- It first looks into the folder of your OS where the file `qtaccount.ini` can be:
  - Windows: `C:\Users\<username>\AppData\Roaming\Qt\qtaccount.ini`
  - Linux: `/home/<username>/.local/share/Qt/qtaccount.ini`
  - MacOS: `/Users/<username>/Library/Application Support/Qt/qtaccount.ini`  
  
  This file is automatically created when you use the `MaintenanceTool` binary and log in using the GUI. You can simply copy the file that you have locally on your CI server, it will work accross platforms. Just treat it as a password. Refer to [this page](https://doc.qt.io/qt-6/get-and-install-qt-cli.html#providing-login-information) for more details.  
- It will also check the value of the environment variable `QT_INSTALLER_JWT_TOKEN` and use the token if provided.
- If neither are present, you will need to provide `--user <email> --password <password>`. 
  Note that if `--user` and `--password` are provided, they will supersede the `qtaccount.ini` and the JWT token account. 

### Advanced configuration details
This installer will only be able to install Qt for the OS running the command: so you can only install a Windows version of Qt if you run it on Windows. This seems to be a limitation of the official Qt online installer. 

Note that the installer will fail if the target directory is not empty. You can change the target install directory by providing `--outputdir <path>`.

By default, the tool will auto answer various options. You can change those default values by passing parameters to `install-qt-commercial`. See [this](https://doc.qt.io/qt-6/get-and-install-qt-cli.html#message-identifiers-for-auto-answer) for more details.
```bash
--operation_does_not_exist_error # OperationDoesNotExistError: Abort, Ignore. Default: Ignore
--overwrite_target_dir           # OverwriteTargetDirectory: Yes, No. Default: No
--stop_processes_for_updates     # stopProcessesForUpdates: Retry, Ignore, Cancel. Default: Cancel
--installation_error_with_cancel # installationErrorWithCancel: Retry, Ignore, Cancel. Default: Cancel
--installation_error_with_ignore # installationErrorWithIgnore: Retry, Ignore. Default: Ignore
--associate_common_filetypes     # AssociateCommonFiletypes: Yes, No. Default: Yes
--telemetry                      # telemetry-question: Yes, No. Default: No
```

### Work remaining
- Handle addons, extensions, modules: thanks to the backend of aqt, this is a much easier job than it appears
- Add more checks in the testsuite
- Add a CI test
- Find someone with a Qt commercial license to confirm it works on commercial versions
- I am working in parallel on [a PR](https://github.com/jurplel/install-qt-action/pull/272) that enables the use of commercial versions for the `install-qt-action`. It already works but is limited by my progress on this PR for now. You can check the fork [here](https://github.com/Kidev/install-qt-action). You can also check [a workflow run where Qt was successfully installed](https://github.com/Kidev/QtQuick3D-Tools/actions/runs/12662600852/job/35287782839#step:6:1) using the `use-commercial` feature. The build did not succeed because there are no support for modules yet. The job used in the workflow is:

```yml
- name: Install Qt
  uses: Kidev/install-qt-action@v4.3.0
  with:
    version: '6.8.1'
    target: 'desktop'
    arch: 'linux_gcc_64'
    aqtsource: 'git+https://github.com/Kidev/aqtinstall.git@install_qt_commercial'
    use-commercial: true
    user: ${{ secrets.QT_USERNAME }}
    password: ${{ secrets.QT_PASSWORD }}
```
For reference, this is equivalent to running the following command using Qt's online installer: 
```bash
qt-unified-linux-x64-online.run --email ******** --pw ******** --root /home/runner/work/Qt --accept-licenses --accept-obligations --confirm-command --auto-answer OperationDoesNotExistError=Ignore,OverwriteTargetDirectory=No,stopProcessesForUpdates=Cancel,installationErrorWithCancel=Cancel,installationErrorWithIgnore=Ignore,AssociateCommonFiletypes=Yes,telemetry-question=No install qt.qt6.681.linux_gcc_64
```

### CLI Usage example
```console
kidev:~$ aqt install-qt-commercial desktop linux_gcc_64 6.8.1 --outputdir /tmp/qt
```
<details>
<summary><b>Click to see the full output</b></summary>

```console
kidev:~$ python -m aqt install-qt-commercial desktop linux_gcc_64 6.8.1 --outputdir /tmp/qt
INFO    : aqtinstall(aqt) v0.1.dev1863 on Python 3.13.1 [CPython GCC 14.2.1 20240910]
INFO    : Downloading Qt online installer to /tmp/qt_install_azy54x57/qt-unified-linux-x64-online.run
INFO    : Starting Qt installation
INFO    : Running: /tmp/qt_install_azy54x57/qt-unified-linux-x64-online.run --root /tmp/qt --accept-licenses --accept-obligations --confirm-command --auto-answer OperationDoesNotExistError=Ignore,OverwriteTargetDirectory=No,stopProcessesForUpdates=Cancel,installationErrorWithCancel=Cancel,installationErrorWithIgnore=Ignore,AssociateCommonFiletypes=Yes,telemetry-question=No install qt.qt6.681.linux_gcc_64
[0] Arguments: /tmp/qt_install_azy54x57/qt-unified-linux-x64-online.run, --root, /tmp/qt, --accept-licenses, --accept-obligations, --confirm-command, --auto-answer, OperationDoesNotExistError=Ignore,OverwriteTargetDirectory=No,stopProcessesForUpdates=Cancel,installationErrorWithCancel=Cancel,installationErrorWithIgnore=Ignore,AssociateCommonFiletypes=Yes,telemetry-question=No, install, qt.qt6.681.linux_gcc_64
[1] Operations sanity check succeeded.
[1] Using metadata cache from "/home/kidev/.cache/qt-unified-linux-online"
[1] Found 427 cached items.
[1] Reading Qt Account settings from disk: "/home/kidev/.local/share/Qt/qtaccount.ini"
[1] QtAccount information:
[1] Login completed: false
[1] Email: "*******@gmail.com"
[1] Total number of licenses: 0
[1] Account type: 3
[502] Login completed to Qt Account: "*******@gmail.com"
[743] Warning: No licenses found. Continuing open source installation.
[743] Saving licenses to file: "/home/kidev/.local/share/Qt/qtlicenses.ini"
[743] Saving Qt Account settings to file: "/home/kidev/.local/share/Qt/qtaccount.ini"
[821] "Installation preconditions ok, installation can proceed!" [ "success" ]
[2949] Open Source obligations accepted by user.
[2950] Fetching latest update information...
[3008] Loaded from cache 151/152. Downloading remaining 1/152.
[3008] Retrieving information from remote repositories...
[3373] Loading component scripts...
[3388] telemetry-question : Contribute to Qt Development : Help us improve Qt and Qt Creator by allowing tracking of pseudonymous usage data in Qt Creator. The tracking can be disabled at any time. Read the Qt Company data collection privacy statement https://www.qt.io/terms-conditions/#privacy. Yes|No
[3388] Automatic answer for "telemetry-question": "No"
[3477] License "CMake license agreement" accepted by user.
[3477] License "GPLv3 with Qt Company GPL Exception License Agreement" accepted by user.
[3477] License "Ninja license agreement" accepted by user.
[3477] License "Qt Installer LGPL License Agreement" accepted by user.
[3477] Loading component scripts...
[3477] Warning: QFont::setPixelSize: Pixel size <= 0 (-1)
[3477] Selected components without dependencies:
qtdesignstudio 
qt 
qtcreator 
qt.tools.maintenance 
qt.tools.qtcreator 
Components added as dependency for "qt.license.gplv3except":
qt.license.acceptance 
Components added as dependency for "qt.tools.qtdesignstudio":
qt.license.gplv3except 
Components that have resolved dependencies:
qt.tools.qtdesignstudio 
Components added as dependency for "qt.tools":
qt.license.thirdparty 
qt.license.lgpl 
Components added as dependency for "qt.qt6.681.doc":
qt.tools 
Components added as dependency for "qt.qt6.681":
qt.qt6.681.doc 
qt.qt6.681.examples 
Components that have resolved dependencies:
qt.qt6.681 
qt.qt6.681.linux_gcc_64 
qt.tools.cmake 
qt.tools.ninja 
qt.tools.qtcreator_gui
[3477] Installation space required: "4.11 GB" Temporary space required: "1.19 GB" Local repository size: "0.00 bytes"
[3477] Cache is on a different volume than the installation directory. Cache volume mount point: "/" Free space available: "359.75 GB" Install volume mount point: "/tmp" Free space available: "46.57 GB"
[3477] Installation will use 3.86 GB of disk space.
[3477] Saving uuid for: "*******@gmail.com"
[3477] Updating resource file: /tmp/qt/update.rcc
[3477] backup  operation: Mkdir
[3477] 	- arguments: /tmp/qt
[3477] Done
[3478] perform  operation: Mkdir
[3478] 	- arguments: /tmp/qt
[3478] Done
[3478] Preparing the installation...
[3478] Install size: 18 components
[3478] Downloading packages...
[3478] Downloading archive "4.8.1-202409230636tqtc-installer-framework-Linux-RHEL_8_6-GCC-Linux-RHEL_8_6-X86_64-QtInstaller.7z.sha1" for component Qt Maintenance Tool.
[3751] Downloading archive "4.8.1-202409230636tqtc-installer-framework-Linux-RHEL_8_6-GCC-Linux-RHEL_8_6-X86_64-QtInstaller.7z" for component Qt Maintenance Tool.
[4360] Downloading archive "4.8.1-202409230636QtIcon.7z.sha1" for component Qt Maintenance Tool.
[4641] Downloading archive "4.8.1-202409230636QtIcon.7z" for component Qt Maintenance Tool.
[4986] Downloading archive "4.8.1-202409230636installer-changelog.7z.sha1" for component Qt Maintenance Tool.
[5327] Downloading archive "4.8.1-202409230636installer-changelog.7z" for component Qt Maintenance Tool.
[5602] Downloading archive "4.8.1-202409230636installer-resource.7z.sha1" for component Qt Maintenance Tool.
[5879] Downloading archive "4.8.1-202409230636installer-resource.7z" for component Qt Maintenance Tool.
[6223] Downloading archive "15.0.0-0-202411270845qtcreator_sdktool.7z.sha1" for component SDKTool.
[6405] Downloading archive "15.0.0-0-202411270845qtcreator_sdktool.7z" for component SDKTool.
[6737] Downloading archive "4.6.2-0-202411010923designstudio_base.7z.sha1" for component Qt Design Studio 4.6.2.
[7017] Downloading archive "4.6.2-0-202411010923designstudio_base.7z" for component Qt Design Studio 4.6.2.
[7651] Downloading archive "4.6.2-0-202411010923docs.7z.sha1" for component Qt Design Studio 4.6.2.
[7924] Downloading archive "4.6.2-0-202411010923docs.7z" for component Qt Design Studio 4.6.2.
[8986] Downloading archive "4.6.2-0-202411010923effect_bundle.7z.sha1" for component Qt Design Studio 4.6.2.
[9268] Downloading archive "4.6.2-0-202411010923effect_bundle.7z" for component Qt Design Studio 4.6.2.
[9726] Downloading archive "4.6.2-0-202411010923qt6_design_studio_reduced_version.7z.sha1" for component Qt Design Studio 4.6.2.
[9998] Downloading archive "4.6.2-0-202411010923qt6_design_studio_reduced_version.7z" for component Qt Design Studio 4.6.2.
[12342] Downloading archive "4.6.2-0-202411010923qt6_qmlpuppet.7z.sha1" for component Qt Design Studio 4.6.2.
[12610] Downloading archive "4.6.2-0-202411010923qt6_qmlpuppet.7z" for component Qt Design Studio 4.6.2.
[13021] Downloading archive "4.6.2-0-202411010923qtcreator.7z.sha1" for component Qt Design Studio 4.6.2.
[13297] Downloading archive "4.6.2-0-202411010923qtcreator.7z" for component Qt Design Studio 4.6.2.
[14842] Downloading archive "4.6.2-0-202411010923qtcreator_sdktool.7z.sha1" for component Qt Design Studio 4.6.2.
[15122] Downloading archive "4.6.2-0-202411010923qtcreator_sdktool.7z" for component Qt Design Studio 4.6.2.
[15555] Downloading archive "4.6.2-0-202411010923content.7z.sha1" for component Qt Design Studio 4.6.2.
[15832] Downloading archive "4.6.2-0-202411010923content.7z" for component Qt Design Studio 4.6.2.
[16119] Downloading archive "1.0.0-1Licenses.7z.sha1" for component Qt 3rd Party Licenses.
[16415] Downloading archive "1.0.0-1Licenses.7z" for component Qt 3rd Party Licenses.
[16759] Downloading archive "6.8.1-0-202411221531qt5-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[17034] Downloading archive "6.8.1-0-202411221531qt5-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[17456] Downloading archive "6.8.1-0-202411221531qdoc-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[17726] Downloading archive "6.8.1-0-202411221531qdoc-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[18119] Downloading archive "6.8.1-0-202411221531qmake-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[18401] Downloading archive "6.8.1-0-202411221531qmake-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[18788] Downloading archive "6.8.1-0-202411221531qtassistant-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[19068] Downloading archive "6.8.1-0-202411221531qtassistant-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[19492] Downloading archive "6.8.1-0-202411221531qtconcurrent-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[19771] Downloading archive "6.8.1-0-202411221531qtconcurrent-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[20157] Downloading archive "6.8.1-0-202411221531qtcmake-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[20439] Downloading archive "6.8.1-0-202411221531qtcmake-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[20810] Downloading archive "6.8.1-0-202411221531qtcore-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[21086] Downloading archive "6.8.1-0-202411221531qtcore-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[21590] Downloading archive "6.8.1-0-202411221531qtdbus-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[21865] Downloading archive "6.8.1-0-202411221531qtdbus-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[22258] Downloading archive "6.8.1-0-202411221531qtdesigner-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[22528] Downloading archive "6.8.1-0-202411221531qtdesigner-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[22974] Downloading archive "6.8.1-0-202411221531qtdistancefieldgenerator-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[23248] Downloading archive "6.8.1-0-202411221531qtdistancefieldgenerator-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[23626] Downloading archive "6.8.1-0-202411221531qtdoc-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[23910] Downloading archive "6.8.1-0-202411221531qtdoc-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[24469] Downloading archive "6.8.1-0-202411221531qtgui-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[24743] Downloading archive "6.8.1-0-202411221531qtgui-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[25227] Downloading archive "6.8.1-0-202411221531qthelp-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[25512] Downloading archive "6.8.1-0-202411221531qthelp-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[25914] Downloading archive "6.8.1-0-202411221531qtlabsplatform-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[26199] Downloading archive "6.8.1-0-202411221531qtlabsplatform-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[26622] Downloading archive "6.8.1-0-202411221531qtlinguist-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[26891] Downloading archive "6.8.1-0-202411221531qtlinguist-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[27310] Downloading archive "6.8.1-0-202411221531qtnetwork-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[27590] Downloading archive "6.8.1-0-202411221531qtnetwork-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[28011] Downloading archive "6.8.1-0-202411221531qtopengl-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[28278] Downloading archive "6.8.1-0-202411221531qtopengl-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[28692] Downloading archive "6.8.1-0-202411221531qtplatformintegration-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[28966] Downloading archive "6.8.1-0-202411221531qtplatformintegration-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[29324] Downloading archive "6.8.1-0-202411221531qtprintsupport-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[29599] Downloading archive "6.8.1-0-202411221531qtprintsupport-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[29988] Downloading archive "6.8.1-0-202411221531qtqml-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[30258] Downloading archive "6.8.1-0-202411221531qtqml-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[30698] Downloading archive "6.8.1-0-202411221531qtqmlcore-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[30973] Downloading archive "6.8.1-0-202411221531qtqmlcore-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[31338] Downloading archive "6.8.1-0-202411221531qtqmlmodels-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[31628] Downloading archive "6.8.1-0-202411221531qtqmlmodels-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[32011] Downloading archive "6.8.1-0-202411221531qtqmltest-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[32279] Downloading archive "6.8.1-0-202411221531qtqmltest-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[32642] Downloading archive "6.8.1-0-202411221531qtqmlworkerscript-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[32912] Downloading archive "6.8.1-0-202411221531qtqmlworkerscript-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[33259] Downloading archive "6.8.1-0-202411221531qtqmlxmllistmodel-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[33547] Downloading archive "6.8.1-0-202411221531qtqmlxmllistmodel-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[33902] Downloading archive "6.8.1-0-202411221531qtquick-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[34180] Downloading archive "6.8.1-0-202411221531qtquick-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[34853] Downloading archive "6.8.1-0-202411221531qtquickcontrols-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[35128] Downloading archive "6.8.1-0-202411221531qtquickcontrols-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[35619] Downloading archive "6.8.1-0-202411221531qtquickdialogs-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[35890] Downloading archive "6.8.1-0-202411221531qtquickdialogs-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[36314] Downloading archive "6.8.1-0-202411221531qtsql-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[36591] Downloading archive "6.8.1-0-202411221531qtsql-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[37023] Downloading archive "6.8.1-0-202411221531qtsvg-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[37298] Downloading archive "6.8.1-0-202411221531qtsvg-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[37685] Downloading archive "6.8.1-0-202411221531qttestlib-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[37954] Downloading archive "6.8.1-0-202411221531qttestlib-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[38341] Downloading archive "6.8.1-0-202411221531qtuitools-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[38611] Downloading archive "6.8.1-0-202411221531qtuitools-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[39019] Downloading archive "6.8.1-0-202411221531qtwidgets-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[39302] Downloading archive "6.8.1-0-202411221531qtwidgets-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[39959] Downloading archive "6.8.1-0-202411221531qtxml-documentation.tar.xz.sha1" for component Qt 6.8.1 Documentation.
[40235] Downloading archive "6.8.1-0-202411221531qtxml-documentation.tar.xz" for component Qt 6.8.1 Documentation.
[40629] Downloading archive "6.8.1-0-202411221531qtbase-examples-6.8.1.7z.sha1" for component Qt 6.8.1 Examples.
[40907] Downloading archive "6.8.1-0-202411221531qtbase-examples-6.8.1.7z" for component Qt 6.8.1 Examples.
[41366] Downloading archive "6.8.1-0-202411221531qtdeclarative-examples-6.8.1.7z.sha1" for component Qt 6.8.1 Examples.
[41638] Downloading archive "6.8.1-0-202411221531qtdeclarative-examples-6.8.1.7z" for component Qt 6.8.1 Examples.
[42165] Downloading archive "6.8.1-0-202411221531qtdoc-examples-6.8.1.7z.sha1" for component Qt 6.8.1 Examples.
[42448] Downloading archive "6.8.1-0-202411221531qtdoc-examples-6.8.1.7z" for component Qt 6.8.1 Examples.
[43228] Downloading archive "6.8.1-0-202411221531qttools-examples-6.8.1.7z.sha1" for component Qt 6.8.1 Examples.
[43502] Downloading archive "6.8.1-0-202411221531qttools-examples-6.8.1.7z" for component Qt 6.8.1 Examples.
[43923] Downloading archive "6.8.1-0-202411221531sha1s.txt.7z.sha1" for component Qt 6.8.1.
[44198] Downloading archive "6.8.1-0-202411221531sha1s.txt.7z" for component Qt 6.8.1.
[44469] Downloading archive "6.8.1-0-202411221531qtbase-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha1" for component Desktop.
[44749] Downloading archive "6.8.1-0-202411221531qtbase-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z" for component Desktop.
[45401] Downloading archive "6.8.1-0-202411221531qtsvg-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha1" for component Desktop.
[45709] Downloading archive "6.8.1-0-202411221531qtsvg-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z" for component Desktop.
[46098] Downloading archive "6.8.1-0-202411221531qtdeclarative-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha1" for component Desktop.
[46368] Downloading archive "6.8.1-0-202411221531qtdeclarative-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z" for component Desktop.
[47943] Downloading archive "6.8.1-0-202411221531qttools-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha1" for component Desktop.
[48220] Downloading archive "6.8.1-0-202411221531qttools-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z" for component Desktop.
[48990] Downloading archive "6.8.1-0-202411221531qttranslations-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha1" for component Desktop.
[49260] Downloading archive "6.8.1-0-202411221531qttranslations-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z" for component Desktop.
[49692] Downloading archive "6.8.1-0-202411221531qtwayland-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z.sha1" for component Desktop.
[49965] Downloading archive "6.8.1-0-202411221531qtwayland-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z" for component Desktop.
[50381] Downloading archive "6.8.1-0-202411221531icu-linux-Rhel8.6-x86_64.7z.sha1" for component Desktop.
[50661] Downloading archive "6.8.1-0-202411221531icu-linux-Rhel8.6-x86_64.7z" for component Desktop.
[51174] Downloading archive "3.29.3-202405151154linux64_x86_cmake_tools.7z.sha1" for component CMake 3.29.3.
[51441] Downloading archive "3.29.3-202405151154linux64_x86_cmake_tools.7z" for component CMake 3.29.3.
[52223] Downloading archive "1.12.0-202405151040linux64_ninja.7z.sha1" for component Ninja 1.12.0.
[52499] Downloading archive "1.12.0-202405151040linux64_ninja.7z" for component Ninja 1.12.0.
[52883] Downloading archive "15.0.0-0-202411271056qtcreator.7z.sha1" for component Qt Creator 15.0.0.
[53150] Downloading archive "15.0.0-0-202411271056qtcreator.7z" for component Qt Creator 15.0.0.
[55064] Qt Creator settings do not exist at old location, not moving.
[55084] Creating qt.conf files for: /tmp/qt/6.8.1/gcc_64
[55084] Writing qt.conf file to: /tmp/qt/6.8.1/gcc_64/bin/qt.conf
[55084] Writing qt.conf file to: /tmp/qt/6.8.1/gcc_64/libexec/qt.conf
[55085] Preparing to unpack components...
[55087] backup qt.tools.maintenance concurrent operation: Extract
[55087] 	- arguments: installer://qt.tools.maintenance/4.8.1-202409230636tqtc-installer-framework-Linux-RHEL_8_6-GCC-Linux-RHEL_8_6-X86_64-QtInstaller.7z, /tmp/qt
[55087] Started
[55087] backup qt.qt6.681.doc concurrent operation: Extract
[55087] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qdoc-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55087] Started
[55087] backup qt.qt6.681.doc concurrent operation: Extract
[55087] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qt5-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55087] Started
[55087] backup qt.qt6.681.doc concurrent operation: Extract
[55087] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtplatformintegration-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55087] Started
[55087] backup qt.qt6.681.doc concurrent operation: Extract
[55087] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtassistant-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55087] Started
[55087] backup qt.tools.qtdesignstudio concurrent operation: Extract
[55087] 	- arguments: installer://qt.tools.qtdesignstudio/4.6.2-0-202411010923qt6_design_studio_reduced_version.7z, /tmp/qt/Tools/QtDesignStudio
[55087] Started
[55087] backup qt.tools.qtdesignstudio concurrent operation: Extract
[55087] 	- arguments: installer://qt.tools.qtdesignstudio/4.6.2-0-202411010923content.7z, /tmp/qt
[55087] Started
[55087] backup qt.qt6.681.doc concurrent operation: Extract
[55087] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtcmake-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55087] Started
[55087] backup qt.tools.qtdesignstudio concurrent operation: Extract
[55087] 	- arguments: installer://qt.tools.qtdesignstudio/4.6.2-0-202411010923qt6_qmlpuppet.7z, /tmp/qt/Tools/QtDesignStudio/qt6_design_studio_reduced_version
[55087] Started
[55087] backup qt.qt6.681.doc concurrent operation: Extract
[55087] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtconcurrent-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55087] Started
[55087] backup qt.tools.maintenance concurrent operation: Extract
[55087] 	- arguments: installer://qt.tools.maintenance/4.8.1-202409230636installer-resource.7z, /tmp/qt
[55087] Started
[55087] backup qt.qt6.681.doc concurrent operation: Extract
[55087] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtcore-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55087] Started
[55087] backup qt.tools.qtdesignstudio concurrent operation: Extract
[55087] 	- arguments: installer://qt.tools.qtdesignstudio/4.6.2-0-202411010923qtcreator.7z, /tmp/qt/Tools/QtDesignStudio
[55087] Started
[55087] backup qt.qt6.681.doc concurrent operation: Extract
[55087] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtdbus-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55087] Started
[55087] backup qt.tools.qtdesignstudio concurrent operation: Extract
[55087] 	- arguments: installer://qt.tools.qtdesignstudio/4.6.2-0-202411010923designstudio_base.7z, /tmp/qt/Tools/QtDesignStudio
[55087] Started
[55087] backup qt.qt6.681.doc concurrent operation: Extract
[55087] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtdesigner-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55087] Started
[55087] backup qt.tools.qtdesignstudio concurrent operation: Extract
[55087] 	- arguments: installer://qt.tools.qtdesignstudio/4.6.2-0-202411010923qtcreator_sdktool.7z, /tmp/qt/Tools/QtDesignStudio/bin
[55087] Started
[55087] backup qt.qt6.681.doc concurrent operation: Extract
[55087] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtdistancefieldgenerator-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55087] Started
[55087] backup qt.tools.qtdesignstudio concurrent operation: Extract
[55087] 	- arguments: installer://qt.tools.qtdesignstudio/4.6.2-0-202411010923docs.7z, /tmp/qt/Tools/QtDesignStudio/share/doc/qtcreator
[55087] Started
[55087] backup qt.qt6.681.doc concurrent operation: Extract
[55087] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtdoc-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55087] Started
[55087] backup qt.license.thirdparty concurrent operation: Extract
[55087] 	- arguments: installer://qt.license.thirdparty/1.0.0-1Licenses.7z, /tmp/qt
[55087] Started
[55087] backup qt.qt6.681.doc concurrent operation: Extract
[55087] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtgui-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55087] Started
[55087] backup qt.tools.maintenance concurrent operation: Extract
[55087] 	- arguments: installer://qt.tools.maintenance/4.8.1-202409230636installer-changelog.7z, /tmp/qt
[55087] Started
[55087] backup qt.qt6.681.doc concurrent operation: Extract
[55087] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qthelp-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55087] Started
[55087] backup qt.tools.qtdesignstudio concurrent operation: Extract
[55088] 	- arguments: installer://qt.tools.qtdesignstudio/4.6.2-0-202411010923effect_bundle.7z, /tmp/qt/Tools/QtDesignStudio
[55088] Started
[55088] backup qt.qt6.681.doc concurrent operation: Extract
[55088] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtlabsplatform-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55088] Started
[55088] backup qt.tools.qtcreator concurrent operation: Extract
[55088] 	- arguments: installer://qt.tools.qtcreator/15.0.0-0-202411270845qtcreator_sdktool.7z, /tmp/qt/Tools/sdktool/libexec/qtcreator
[55088] Started
[55088] backup qt.qt6.681.doc concurrent operation: Extract
[55088] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtlinguist-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55088] Started
[55088] backup qt.qt6.681.doc concurrent operation: Extract
[55088] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qmake-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55088] Started
[55088] backup qt.qt6.681.doc concurrent operation: Extract
[55088] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtnetwork-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55088] Started
[55088] backup qt.tools.maintenance concurrent operation: Extract
[55088] 	- arguments: installer://qt.tools.maintenance/4.8.1-202409230636QtIcon.7z, /tmp/qt
[55088] Started
[55088] backup qt.qt6.681.doc concurrent operation: Extract
[55088] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtopengl-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55088] Started
[55088] backup qt.qt6.681.doc concurrent operation: Extract
[55088] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtprintsupport-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55088] Started
[55088] backup qt.qt6.681.doc concurrent operation: Extract
[55088] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtqml-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55088] Started
[55089] backup qt.qt6.681.doc concurrent operation: Extract
[55089] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtqmlcore-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55089] Started
[55089] backup qt.qt6.681.doc concurrent operation: Extract
[55089] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtqmlmodels-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55089] Started
[55089] backup qt.qt6.681.doc concurrent operation: Extract
[55089] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtqmltest-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55089] Started
[55090] backup qt.qt6.681.doc concurrent operation: Extract
[55090] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtqmlworkerscript-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55090] Started
[55090] backup qt.qt6.681.doc concurrent operation: Extract
[55090] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtqmlxmllistmodel-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55090] Started
[55091] backup qt.qt6.681.doc concurrent operation: Extract
[55091] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtquick-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55091] Started
[55091] backup qt.qt6.681.doc concurrent operation: Extract
[55091] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtquickcontrols-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55091] Started
[55092] backup qt.qt6.681.doc concurrent operation: Extract
[55092] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtquickdialogs-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55092] Started
[55092] backup qt.qt6.681.doc concurrent operation: Extract
[55092] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtsql-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55092] Started
[55092] backup qt.qt6.681.doc concurrent operation: Extract
[55092] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtsvg-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55092] Started
[55092] backup qt.qt6.681.doc concurrent operation: Extract
[55092] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qttestlib-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55092] Started
[55093] backup qt.qt6.681.doc concurrent operation: Extract
[55093] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtuitools-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55093] Started
[55093] backup qt.qt6.681.doc concurrent operation: Extract
[55093] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtwidgets-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55093] Started
[55093] backup qt.qt6.681.doc concurrent operation: Extract
[55093] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtxml-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[55093] Started
[55094] backup qt.qt6.681.examples concurrent operation: Extract
[55094] 	- arguments: installer://qt.qt6.681.examples/6.8.1-0-202411221531qtbase-examples-6.8.1.7z, /tmp/qt/Examples/Qt-6.8.1
[55094] Started
[55094] backup qt.qt6.681.examples concurrent operation: Extract
[55094] 	- arguments: installer://qt.qt6.681.examples/6.8.1-0-202411221531qtdeclarative-examples-6.8.1.7z, /tmp/qt/Examples/Qt-6.8.1
[55094] Started
[55096] backup qt.qt6.681.examples concurrent operation: Extract
[55096] 	- arguments: installer://qt.qt6.681.examples/6.8.1-0-202411221531qtdoc-examples-6.8.1.7z, /tmp/qt/Examples/Qt-6.8.1
[55096] Started
[55096] backup qt.qt6.681.examples concurrent operation: Extract
[55096] 	- arguments: installer://qt.qt6.681.examples/6.8.1-0-202411221531qttools-examples-6.8.1.7z, /tmp/qt/Examples/Qt-6.8.1
[55096] Started
[55096] backup qt.qt6.681 concurrent operation: Extract
[55096] 	- arguments: installer://qt.qt6.681/6.8.1-0-202411221531sha1s.txt.7z, /tmp/qt/6.8.1
[55096] Started
[55096] backup qt.qt6.681.linux_gcc_64 concurrent operation: Extract
[55096] 	- arguments: installer://qt.qt6.681.linux_gcc_64/6.8.1-0-202411221531icu-linux-Rhel8.6-x86_64.7z, /tmp/qt/6.8.1/gcc_64/lib
[55096] Started
[55097] backup qt.qt6.681.linux_gcc_64 concurrent operation: Extract
[55097] 	- arguments: installer://qt.qt6.681.linux_gcc_64/6.8.1-0-202411221531qtbase-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z, /tmp/qt/6.8.1/gcc_64
[55097] Started
[55097] backup qt.qt6.681.linux_gcc_64 concurrent operation: Extract
[55097] 	- arguments: installer://qt.qt6.681.linux_gcc_64/6.8.1-0-202411221531qtdeclarative-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z, /tmp/qt/6.8.1/gcc_64
[55097] Started
[55097] backup qt.qt6.681.linux_gcc_64 concurrent operation: Extract
[55097] 	- arguments: installer://qt.qt6.681.linux_gcc_64/6.8.1-0-202411221531qtsvg-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z, /tmp/qt/6.8.1/gcc_64
[55097] Started
[55097] backup qt.qt6.681.linux_gcc_64 concurrent operation: Extract
[55097] 	- arguments: installer://qt.qt6.681.linux_gcc_64/6.8.1-0-202411221531qttools-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z, /tmp/qt/6.8.1/gcc_64
[55097] Started
[55098] backup qt.qt6.681.linux_gcc_64 concurrent operation: Extract
[55098] 	- arguments: installer://qt.qt6.681.linux_gcc_64/6.8.1-0-202411221531qttranslations-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z, /tmp/qt/6.8.1/gcc_64
[55098] Started
[55098] backup qt.qt6.681.linux_gcc_64 concurrent operation: Extract
[55098] 	- arguments: installer://qt.qt6.681.linux_gcc_64/6.8.1-0-202411221531qtwayland-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z, /tmp/qt/6.8.1/gcc_64
[55098] Started
[55098] backup qt.tools.cmake concurrent operation: Extract
[55098] 	- arguments: installer://qt.tools.cmake/3.29.3-202405151154linux64_x86_cmake_tools.7z, /tmp/qt
[55098] Started
[55098] backup qt.tools.ninja concurrent operation: Extract
[55098] 	- arguments: installer://qt.tools.ninja/1.12.0-202405151040linux64_ninja.7z, /tmp/qt
[55098] Started
[55099] backup qt.tools.qtcreator_gui concurrent operation: Extract
[55099] 	- arguments: installer://qt.tools.qtcreator_gui/15.0.0-0-202411271056qtcreator.7z, /tmp/qt/Tools/QtCreator
[55099] Started
[59381] Unpacking components...
[59381] perform qt.tools.qtdesignstudio concurrent operation: Extract
[59381] 	- arguments: installer://qt.tools.qtdesignstudio/4.6.2-0-202411010923qt6_design_studio_reduced_version.7z, /tmp/qt/Tools/QtDesignStudio
[59381] Started
[59381] perform qt.qt6.681.linux_gcc_64 concurrent operation: Extract
[59381] 	- arguments: installer://qt.qt6.681.linux_gcc_64/6.8.1-0-202411221531qtdeclarative-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z, /tmp/qt/6.8.1/gcc_64
[59381] Started
[59381] perform qt.tools.qtcreator_gui concurrent operation: Extract
[59381] 	- arguments: installer://qt.tools.qtcreator_gui/15.0.0-0-202411271056qtcreator.7z, /tmp/qt/Tools/QtCreator
[59381] Started
[59381] perform qt.tools.qtdesignstudio concurrent operation: Extract
[59381] 	- arguments: installer://qt.tools.qtdesignstudio/4.6.2-0-202411010923qtcreator.7z, /tmp/qt/Tools/QtDesignStudio
[59381] Started
[59381] perform qt.tools.qtdesignstudio concurrent operation: Extract
[59381] 	- arguments: installer://qt.tools.qtdesignstudio/4.6.2-0-202411010923docs.7z, /tmp/qt/Tools/QtDesignStudio/share/doc/qtcreator
[59381] Started
[59381] perform qt.qt6.681.examples concurrent operation: Extract
[59381] 	- arguments: installer://qt.qt6.681.examples/6.8.1-0-202411221531qtdoc-examples-6.8.1.7z, /tmp/qt/Examples/Qt-6.8.1
[59381] Started
[59381] perform qt.tools.cmake concurrent operation: Extract
[59381] 	- arguments: installer://qt.tools.cmake/3.29.3-202405151154linux64_x86_cmake_tools.7z, /tmp/qt
[59381] Started
[59381] perform qt.qt6.681.linux_gcc_64 concurrent operation: Extract
[59381] 	- arguments: installer://qt.qt6.681.linux_gcc_64/6.8.1-0-202411221531qttools-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z, /tmp/qt/6.8.1/gcc_64
[59381] Started
[59381] perform qt.qt6.681.linux_gcc_64 concurrent operation: Extract
[59381] 	- arguments: installer://qt.qt6.681.linux_gcc_64/6.8.1-0-202411221531qtbase-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z, /tmp/qt/6.8.1/gcc_64
[59381] Started
[59381] perform qt.qt6.681.doc concurrent operation: Extract
[59381] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtquick-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59381] Started
[59381] perform qt.tools.qtdesignstudio concurrent operation: Extract
[59381] 	- arguments: installer://qt.tools.qtdesignstudio/4.6.2-0-202411010923designstudio_base.7z, /tmp/qt/Tools/QtDesignStudio
[59381] Started
[59381] perform qt.qt6.681.doc concurrent operation: Extract
[59381] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtwidgets-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59381] Started
[59381] perform qt.tools.maintenance concurrent operation: Extract
[59381] 	- arguments: installer://qt.tools.maintenance/4.8.1-202409230636tqtc-installer-framework-Linux-RHEL_8_6-GCC-Linux-RHEL_8_6-X86_64-QtInstaller.7z, /tmp/qt
[59381] Started
[59381] perform qt.qt6.681.linux_gcc_64 concurrent operation: Extract
[59381] 	- arguments: installer://qt.qt6.681.linux_gcc_64/6.8.1-0-202411221531icu-linux-Rhel8.6-x86_64.7z, /tmp/qt/6.8.1/gcc_64/lib
[59381] Started
[59381] perform qt.qt6.681.examples concurrent operation: Extract
[59381] 	- arguments: installer://qt.qt6.681.examples/6.8.1-0-202411221531qtbase-examples-6.8.1.7z, /tmp/qt/Examples/Qt-6.8.1
[59381] Started
[59381] perform qt.qt6.681.doc concurrent operation: Extract
[59381] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtdesigner-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59381] Started
[59381] perform qt.qt6.681.doc concurrent operation: Extract
[59381] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtqml-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59381] Started
[59381] perform qt.qt6.681.doc concurrent operation: Extract
[59381] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtlinguist-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59381] Started
[59381] perform qt.qt6.681.doc concurrent operation: Extract
[59381] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtdoc-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59381] Started
[59381] perform qt.qt6.681.doc concurrent operation: Extract
[59381] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtnetwork-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59381] Started
[59381] perform qt.qt6.681.doc concurrent operation: Extract
[59381] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtquickcontrols-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59381] Started
[59381] perform qt.qt6.681.linux_gcc_64 concurrent operation: Extract
[59381] 	- arguments: installer://qt.qt6.681.linux_gcc_64/6.8.1-0-202411221531qttranslations-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z, /tmp/qt/6.8.1/gcc_64
[59381] Started
[59381] perform qt.tools.qtdesignstudio concurrent operation: Extract
[59381] 	- arguments: installer://qt.tools.qtdesignstudio/4.6.2-0-202411010923qt6_qmlpuppet.7z, /tmp/qt/Tools/QtDesignStudio/qt6_design_studio_reduced_version
[59381] Started
[59381] perform qt.qt6.681.doc concurrent operation: Extract
[59381] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtcore-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59381] Started
[59381] perform qt.qt6.681.doc concurrent operation: Extract
[59382] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtgui-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59382] Started
[59382] perform qt.qt6.681.doc concurrent operation: Extract
[59382] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtsql-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59382] Started
[59382] perform qt.tools.qtdesignstudio concurrent operation: Extract
[59382] 	- arguments: installer://qt.tools.qtdesignstudio/4.6.2-0-202411010923qtcreator_sdktool.7z, /tmp/qt/Tools/QtDesignStudio/bin
[59382] Started
[59382] perform qt.qt6.681.doc concurrent operation: Extract
[59382] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtopengl-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59382] Started
[59382] perform qt.qt6.681.doc concurrent operation: Extract
[59382] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtassistant-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59382] Started
[59382] perform qt.qt6.681.examples concurrent operation: Extract
[59382] 	- arguments: installer://qt.qt6.681.examples/6.8.1-0-202411221531qtdeclarative-examples-6.8.1.7z, /tmp/qt/Examples/Qt-6.8.1
[59382] Started
[59382] perform qt.tools.qtdesignstudio concurrent operation: Extract
[59382] 	- arguments: installer://qt.tools.qtdesignstudio/4.6.2-0-202411010923effect_bundle.7z, /tmp/qt/Tools/QtDesignStudio
[59382] Started
[59382] perform qt.tools.qtcreator concurrent operation: Extract
[59382] 	- arguments: installer://qt.tools.qtcreator/15.0.0-0-202411270845qtcreator_sdktool.7z, /tmp/qt/Tools/sdktool/libexec/qtcreator
[59382] Started
[59456] perform qt.qt6.681.examples concurrent operation: Extract
[59456] 	- arguments: installer://qt.qt6.681.examples/6.8.1-0-202411221531qttools-examples-6.8.1.7z, /tmp/qt/Examples/Qt-6.8.1
[59456] Started
[59458] perform qt.qt6.681.linux_gcc_64 concurrent operation: Extract
[59458] 	- arguments: installer://qt.qt6.681.linux_gcc_64/6.8.1-0-202411221531qtwayland-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z, /tmp/qt/6.8.1/gcc_64
[59458] Started
[59462] perform qt.qt6.681.doc concurrent operation: Extract
[59462] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtlabsplatform-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59462] Started
[59463] perform qt.qt6.681.doc concurrent operation: Extract
[59463] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtprintsupport-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59463] Started
[59463] perform qt.qt6.681.doc concurrent operation: Extract
[59463] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qmake-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59463] Started
[59472] perform qt.qt6.681.doc concurrent operation: Extract
[59472] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtxml-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59472] Started
[59473] perform qt.qt6.681.doc concurrent operation: Extract
[59473] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtdbus-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59473] Started
[59478] perform qt.qt6.681.doc concurrent operation: Extract
[59478] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtquickdialogs-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59478] Started
[59480] perform qt.qt6.681.doc concurrent operation: Extract
[59480] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qthelp-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59480] Started
[59484] perform qt.qt6.681.doc concurrent operation: Extract
[59484] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qdoc-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59484] Started
[59484] perform qt.qt6.681.doc concurrent operation: Extract
[59484] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qttestlib-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59484] Started
[59485] perform qt.qt6.681.linux_gcc_64 concurrent operation: Extract
[59485] 	- arguments: installer://qt.qt6.681.linux_gcc_64/6.8.1-0-202411221531qtsvg-Linux-RHEL_8_10-GCC-Linux-RHEL_8_10-X86_64.7z, /tmp/qt/6.8.1/gcc_64
[59485] Started
[59485] perform qt.qt6.681.doc concurrent operation: Extract
[59485] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtuitools-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59485] Started
[59486] perform qt.qt6.681.doc concurrent operation: Extract
[59486] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtconcurrent-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59486] Started
[59489] perform qt.qt6.681.doc concurrent operation: Extract
[59489] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qt5-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59489] Started
[59491] perform qt.qt6.681.doc concurrent operation: Extract
[59491] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtdistancefieldgenerator-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59491] Started
[59492] perform qt.qt6.681.doc concurrent operation: Extract
[59492] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtqmlmodels-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59492] Started
[59492] perform qt.tools.ninja concurrent operation: Extract
[59492] 	- arguments: installer://qt.tools.ninja/1.12.0-202405151040linux64_ninja.7z, /tmp/qt
[59492] Started
[59492] perform qt.qt6.681.doc concurrent operation: Extract
[59492] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtsvg-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59492] Started
[59494] perform qt.qt6.681.doc concurrent operation: Extract
[59494] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtcmake-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59494] Started
[59495] perform qt.qt6.681.doc concurrent operation: Extract
[59495] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtqmltest-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59495] Started
[59496] perform qt.qt6.681.doc concurrent operation: Extract
[59496] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtqmlcore-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59496] Started
[59496] perform qt.qt6.681.doc concurrent operation: Extract
[59496] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtplatformintegration-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59496] Started
[59496] perform qt.qt6.681.doc concurrent operation: Extract
[59496] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtqmlxmllistmodel-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59496] Started
[59497] perform qt.qt6.681.doc concurrent operation: Extract
[59497] 	- arguments: installer://qt.qt6.681.doc/6.8.1-0-202411221531qtqmlworkerscript-documentation.tar.xz, /tmp/qt/Docs/Qt-6.8.1
[59497] Started
[59498] perform qt.tools.maintenance concurrent operation: Extract
[59498] 	- arguments: installer://qt.tools.maintenance/4.8.1-202409230636installer-resource.7z, /tmp/qt
[59498] Started
[59498] perform qt.license.thirdparty concurrent operation: Extract
[59498] 	- arguments: installer://qt.license.thirdparty/1.0.0-1Licenses.7z, /tmp/qt
[59498] Started
[59498] perform qt.tools.maintenance concurrent operation: Extract
[59498] 	- arguments: installer://qt.tools.maintenance/4.8.1-202409230636QtIcon.7z, /tmp/qt
[59498] Started
[59498] perform qt.tools.maintenance concurrent operation: Extract
[59498] 	- arguments: installer://qt.tools.maintenance/4.8.1-202409230636installer-changelog.7z, /tmp/qt
[59498] Started
[59499] perform qt.qt6.681 concurrent operation: Extract
[59499] 	- arguments: installer://qt.qt6.681/6.8.1-0-202411221531sha1s.txt.7z, /tmp/qt/6.8.1
[59499] Started
[59499] perform qt.tools.qtdesignstudio concurrent operation: Extract
[59499] 	- arguments: installer://qt.tools.qtdesignstudio/4.6.2-0-202411010923content.7z, /tmp/qt
[59499] Started
[64460] Installing component Qt Maintenance Tool
[64460] backup qt.tools.maintenance operation: InstallIcons
[64460] 	- arguments: /tmp/qt/icons
[64460] Done
[64460] perform qt.tools.maintenance operation: InstallIcons
[64460] 	- arguments: /tmp/qt/icons
[64462] Done
[64462] backup qt.tools.maintenance operation: CreateDesktopEntry
[64462] 	- arguments: Qt-MaintenanceTool.desktop, Type=Application
Exec=/tmp/qt/MaintenanceTool
Path=/tmp/qt
Name=Qt Maintenance Tool
GenericName=Install or uninstall Qt components.
Icon=QtIcon
Terminal=false
Categories=Development;Qt;
[64462] Done
[64462] perform qt.tools.maintenance operation: CreateDesktopEntry
[64462] 	- arguments: Qt-MaintenanceTool.desktop, Type=Application
Exec=/tmp/qt/MaintenanceTool
Path=/tmp/qt
Name=Qt Maintenance Tool
GenericName=Install or uninstall Qt components.
Icon=QtIcon
Terminal=false
Categories=Development;Qt;
[64462] Done
[64462] Installing component SDKTool
[64462] backup qt.tools.qtcreator operation: Settings
[64462] 	- arguments: path=/tmp/qt//Tools/sdktool/share/qtcreator/QtProject/QtCreator.ini, method=set, key=Updater/MaintenanceTool, value=/tmp/qt/MaintenanceTool
[64462] Done
[64462] perform qt.tools.qtcreator operation: Settings
[64462] 	- arguments: path=/tmp/qt//Tools/sdktool/share/qtcreator/QtProject/QtCreator.ini, method=set, key=Updater/MaintenanceTool, value=/tmp/qt/MaintenanceTool
[64462] Done
[64462] backup qt.tools.qtcreator operation: Settings
[64462] 	- arguments: path=/tmp/qt//Tools/sdktool/share/qtcreator/QtProject/QtCreator.ini, method=add_array_value, key=Plugins/ForceEnabled, value=UpdateInfo
[64462] Done
[64462] perform qt.tools.qtcreator operation: Settings
[64462] 	- arguments: path=/tmp/qt//Tools/sdktool/share/qtcreator/QtProject/QtCreator.ini, method=add_array_value, key=Plugins/ForceEnabled, value=UpdateInfo
[64462] Done
[64463] Installing component License GPL3-EXCEPT
[64463] backup qt.license.gplv3except operation: License
[64463] 	- arguments:
[64463] Done
[64463] perform qt.license.gplv3except operation: License
[64463] 	- arguments:
[64463] Done
[64463] Installing component Qt Design Studio 4.6.2
[64463] backup qt.tools.qtdesignstudio operation: Settings
[64463] 	- arguments: path=/tmp/qt//Tools/sdktool/share/qtcreator/QtProject/QtCreator.ini, method=add_array_value, key=Help/InstalledDocumentation, value=/tmp/qt//Tools/QtDesignStudio/share/doc/qtcreator
[64463] Done
[64463] perform qt.tools.qtdesignstudio operation: Settings
[64463] 	- arguments: path=/tmp/qt//Tools/sdktool/share/qtcreator/QtProject/QtCreator.ini, method=add_array_value, key=Help/InstalledDocumentation, value=/tmp/qt//Tools/QtDesignStudio/share/doc/qtcreator
[64463] Done
[64463] backup qt.tools.qtdesignstudio operation: Settings
[64463] 	- arguments: path=/tmp/qt//Tools/sdktool/share/qtcreator/QtProject/QtCreator.ini, method=add_array_value, key=Help/InstalledExamples, value=Qt Design Studio|/tmp/qt//Tools/QtDesignStudio/share/doc/qtcreator|/tmp/qt//Tools/QtDesignStudio/share/qtcreator//examples
[64463] Done
[64463] perform qt.tools.qtdesignstudio operation: Settings
[64463] 	- arguments: path=/tmp/qt//Tools/sdktool/share/qtcreator/QtProject/QtCreator.ini, method=add_array_value, key=Help/InstalledExamples, value=Qt Design Studio|/tmp/qt//Tools/QtDesignStudio/share/doc/qtcreator|/tmp/qt//Tools/QtDesignStudio/share/qtcreator//examples
[64463] Done
[64463] backup qt.tools.qtdesignstudio operation: Settings
[64463] 	- arguments: path=/tmp/qt//Tools/sdktool/share/qtcreator/QtProject/QtCreator.ini, method=set, key=QML/Designer/DesignStudioInstallation, value=/tmp/qt/Tools/QtDesignStudio/bin/qtdesignstudio
[64463] Done
[64463] perform qt.tools.qtdesignstudio operation: Settings
[64463] 	- arguments: path=/tmp/qt//Tools/sdktool/share/qtcreator/QtProject/QtCreator.ini, method=set, key=QML/Designer/DesignStudioInstallation, value=/tmp/qt/Tools/QtDesignStudio/bin/qtdesignstudio
[64463] Done
[64463] backup qt.tools.qtdesignstudio operation: Settings
[64463] 	- arguments: path=/tmp/qt//Tools/QtDesignStudio/share/qtcreator/QtProject/QtDesignStudio.ini, method=set, key=Updater/MaintenanceTool, value=/tmp/qt/MaintenanceTool
[64463] Done
[64463] perform qt.tools.qtdesignstudio operation: Settings
[64463] 	- arguments: path=/tmp/qt//Tools/QtDesignStudio/share/qtcreator/QtProject/QtDesignStudio.ini, method=set, key=Updater/MaintenanceTool, value=/tmp/qt/MaintenanceTool
[64463] Done
[64463] backup qt.tools.qtdesignstudio operation: Settings
[64463] 	- arguments: path=/tmp/qt//Tools/QtDesignStudio/share/qtcreator/QtProject/QtDesignStudio.ini, method=add_array_value, key=Plugins/ForceEnabled, value=UpdateInfo
[64463] Done
[64463] perform qt.tools.qtdesignstudio operation: Settings
[64463] 	- arguments: path=/tmp/qt//Tools/QtDesignStudio/share/qtcreator/QtProject/QtDesignStudio.ini, method=add_array_value, key=Plugins/ForceEnabled, value=UpdateInfo
[64464] Done
[64464] backup qt.tools.qtdesignstudio operation: Execute
[64464] 	- arguments: /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, addTC, --id, ProjectExplorer.ToolChain.Custom:{9799e31f-e3d0-47cb-8bc1-1d0806d0ed23}, --language, C, --name, mock C compiler, --abi, x86-linux-generic-elf-64bit, --path, not_existing, ProjectExplorer.CustomToolChain.TargetAbi, QString:x86-linux-generic-elf-64bit, UNDOEXECUTE, {0,2}, /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, rmTC, --id, ProjectExplorer.ToolChain.Custom:{9799e31f-e3d0-47cb-8bc1-1d0806d0ed23}
[64464] Done
[64464] perform qt.tools.qtdesignstudio operation: Execute
[64464] 	- arguments: /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, addTC, --id, ProjectExplorer.ToolChain.Custom:{9799e31f-e3d0-47cb-8bc1-1d0806d0ed23}, --language, C, --name, mock C compiler, --abi, x86-linux-generic-elf-64bit, --path, not_existing, ProjectExplorer.CustomToolChain.TargetAbi, QString:x86-linux-generic-elf-64bit, UNDOEXECUTE, {0,2}, /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, rmTC, --id, ProjectExplorer.ToolChain.Custom:{9799e31f-e3d0-47cb-8bc1-1d0806d0ed23}
[64464] /tmp/qt//Tools/QtDesignStudio/bin/sdktool" started, arguments: "-s /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio addTC --id ProjectExplorer.ToolChain.Custom:{9799e31f-e3d0-47cb-8bc1-1d0806d0ed23} --language C --name mock C compiler --abi x86-linux-generic-elf-64bit --path not_existing ProjectExplorer.CustomToolChain.TargetAbi QString:x86-linux-generic-elf-64bit
[64466] Done
[64466] backup qt.tools.qtdesignstudio operation: Execute
[64466] 	- arguments: /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, addTC, --id, ProjectExplorer.ToolChain.Custom:{c702c2f1-69f7-41b6-a4b1-77569d527e28}, --language, Cxx, --name, mock C++ compiler, --abi, x86-linux-generic-elf-64bit, --path, not_existing, ProjectExplorer.CustomToolChain.TargetAbi, QString:x86-linux-generic-elf-64bit, UNDOEXECUTE, {0,2}, /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, rmTC, --id, ProjectExplorer.ToolChain.Custom:{c702c2f1-69f7-41b6-a4b1-77569d527e28}
[64466] Done
[64466] perform qt.tools.qtdesignstudio operation: Execute
[64466] 	- arguments: /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, addTC, --id, ProjectExplorer.ToolChain.Custom:{c702c2f1-69f7-41b6-a4b1-77569d527e28}, --language, Cxx, --name, mock C++ compiler, --abi, x86-linux-generic-elf-64bit, --path, not_existing, ProjectExplorer.CustomToolChain.TargetAbi, QString:x86-linux-generic-elf-64bit, UNDOEXECUTE, {0,2}, /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, rmTC, --id, ProjectExplorer.ToolChain.Custom:{c702c2f1-69f7-41b6-a4b1-77569d527e28}
[64466] /tmp/qt//Tools/QtDesignStudio/bin/sdktool" started, arguments: "-s /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio addTC --id ProjectExplorer.ToolChain.Custom:{c702c2f1-69f7-41b6-a4b1-77569d527e28} --language Cxx --name mock C++ compiler --abi x86-linux-generic-elf-64bit --path not_existing ProjectExplorer.CustomToolChain.TargetAbi QString:x86-linux-generic-elf-64bit
[64467] Done
[64467] backup qt.tools.qtdesignstudio operation: Execute
[64467] 	- arguments: /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, addQt, --id, qt.tools.qtdesignstudio_qt6, --name, Designer specialized Qt %{Qt:Version}, --type, Qt4ProjectManager.QtVersion.Desktop, --qmake, /tmp/qt/Tools/QtDesignStudio/qt6_design_studio_reduced_version/bin/qmake, overrideFeatures, QString:QtStudio, UNDOEXECUTE, {0,2}, /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, rmQt, --id, qt.tools.qtdesignstudio_qt6
[64467] Done
[64467] perform qt.tools.qtdesignstudio operation: Execute
[64467] 	- arguments: /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, addQt, --id, qt.tools.qtdesignstudio_qt6, --name, Designer specialized Qt %{Qt:Version}, --type, Qt4ProjectManager.QtVersion.Desktop, --qmake, /tmp/qt/Tools/QtDesignStudio/qt6_design_studio_reduced_version/bin/qmake, overrideFeatures, QString:QtStudio, UNDOEXECUTE, {0,2}, /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, rmQt, --id, qt.tools.qtdesignstudio_qt6
[64467] /tmp/qt//Tools/QtDesignStudio/bin/sdktool" started, arguments: "-s /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio addQt --id qt.tools.qtdesignstudio_qt6 --name Designer specialized Qt %{Qt:Version} --type Qt4ProjectManager.QtVersion.Desktop --qmake /tmp/qt/Tools/QtDesignStudio/qt6_design_studio_reduced_version/bin/qmake overrideFeatures QString:QtStudio
[64468] Done
[64468] backup qt.tools.qtdesignstudio operation: Execute
[64469] 	- arguments: /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, addKit, --id, {63f87550-2541-4163-9631-08b7fea781da}, --name, Desktop Qt %{Qt:Version}, --devicetype, Desktop, --qt, qt.tools.qtdesignstudio_qt6, --Ctoolchain, ProjectExplorer.ToolChain.Custom:{9799e31f-e3d0-47cb-8bc1-1d0806d0ed23}, --Cxxtoolchain, ProjectExplorer.ToolChain.Custom:{c702c2f1-69f7-41b6-a4b1-77569d527e28}, UNDOEXECUTE, {0,2}, /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, rmKit, --id, {63f87550-2541-4163-9631-08b7fea781da}
[64469] Done
[64469] perform qt.tools.qtdesignstudio operation: Execute
[64469] 	- arguments: /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, addKit, --id, {63f87550-2541-4163-9631-08b7fea781da}, --name, Desktop Qt %{Qt:Version}, --devicetype, Desktop, --qt, qt.tools.qtdesignstudio_qt6, --Ctoolchain, ProjectExplorer.ToolChain.Custom:{9799e31f-e3d0-47cb-8bc1-1d0806d0ed23}, --Cxxtoolchain, ProjectExplorer.ToolChain.Custom:{c702c2f1-69f7-41b6-a4b1-77569d527e28}, UNDOEXECUTE, {0,2}, /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, rmKit, --id, {63f87550-2541-4163-9631-08b7fea781da}
[64469] /tmp/qt//Tools/QtDesignStudio/bin/sdktool" started, arguments: "-s /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio addKit --id {63f87550-2541-4163-9631-08b7fea781da} --name Desktop Qt %{Qt:Version} --devicetype Desktop --qt qt.tools.qtdesignstudio_qt6 --Ctoolchain ProjectExplorer.ToolChain.Custom:{9799e31f-e3d0-47cb-8bc1-1d0806d0ed23} --Cxxtoolchain ProjectExplorer.ToolChain.Custom:{c702c2f1-69f7-41b6-a4b1-77569d527e28}
[64470] Done
[64470] backup qt.tools.qtdesignstudio operation: Execute
[64470] 	- arguments: /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, addKit, --id, {fcfcb7a6-2c80-4785-b1a9-02d08953be61}, --name, Android device, --devicetype, Android.Device.Type, --qt, qt.tools.qtdesignstudio_qt6, --Ctoolchain, ProjectExplorer.ToolChain.Custom:{9799e31f-e3d0-47cb-8bc1-1d0806d0ed23}, --Cxxtoolchain, ProjectExplorer.ToolChain.Custom:{c702c2f1-69f7-41b6-a4b1-77569d527e28}, UNDOEXECUTE, {0,2}, /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, rmKit, --id, {fcfcb7a6-2c80-4785-b1a9-02d08953be61}
[64470] Done
[64470] perform qt.tools.qtdesignstudio operation: Execute
[64470] 	- arguments: /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, addKit, --id, {fcfcb7a6-2c80-4785-b1a9-02d08953be61}, --name, Android device, --devicetype, Android.Device.Type, --qt, qt.tools.qtdesignstudio_qt6, --Ctoolchain, ProjectExplorer.ToolChain.Custom:{9799e31f-e3d0-47cb-8bc1-1d0806d0ed23}, --Cxxtoolchain, ProjectExplorer.ToolChain.Custom:{c702c2f1-69f7-41b6-a4b1-77569d527e28}, UNDOEXECUTE, {0,2}, /tmp/qt//Tools/QtDesignStudio/bin/sdktool, -s, /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio, rmKit, --id, {fcfcb7a6-2c80-4785-b1a9-02d08953be61}
[64470] /tmp/qt//Tools/QtDesignStudio/bin/sdktool" started, arguments: "-s /tmp/qt//Tools/QtDesignStudio/share/qtcreator//QtProject/qtdesignstudio addKit --id {fcfcb7a6-2c80-4785-b1a9-02d08953be61} --name Android device --devicetype Android.Device.Type --qt qt.tools.qtdesignstudio_qt6 --Ctoolchain ProjectExplorer.ToolChain.Custom:{9799e31f-e3d0-47cb-8bc1-1d0806d0ed23} --Cxxtoolchain ProjectExplorer.ToolChain.Custom:{c702c2f1-69f7-41b6-a4b1-77569d527e28}
[64472] Done
[64472] backup qt.tools.qtdesignstudio operation: SimpleMoveFile
[64472] 	- arguments: /tmp/qt/README.txt, /tmp/qt/Tools/QtDesignStudio/README.txt
[64472] Done
[64472] perform qt.tools.qtdesignstudio operation: SimpleMoveFile
[64472] 	- arguments: /tmp/qt/README.txt, /tmp/qt/Tools/QtDesignStudio/README.txt
[64472] Done
[64473] Installing component Qt License LGPL
[64473] backup qt.license.lgpl operation: License
[64473] 	- arguments:
[64473] Done
[64473] perform qt.license.lgpl operation: License
[64473] 	- arguments:
[64473] Done
[64473] Installing component Qt 6.8.1 Documentation
[64473] backup qt.qt6.681.doc operation: Settings
[64473] 	- arguments: path=/tmp/qt//Tools/sdktool/share/qtcreator/QtProject/QtCreator.ini, method=add_array_value, key=Help/InstalledDocumentation, value=/tmp/qt/Docs/Qt-6.8.1/
[64473] Done
[64473] perform qt.qt6.681.doc operation: Settings
[64473] 	- arguments: path=/tmp/qt//Tools/sdktool/share/qtcreator/QtProject/QtCreator.ini, method=add_array_value, key=Help/InstalledDocumentation, value=/tmp/qt/Docs/Qt-6.8.1/
[64473] Done
[64473] Installing component Qt 6.8.1 Examples
[64473] backup qt.qt6.681.examples operation: Settings
[64473] 	- arguments: path=/tmp/qt//Tools/sdktool/share/qtcreator/QtProject/QtCreator.ini, method=add_array_value, key=Help/InstalledExamples, value=Qt6 6.8.1|/tmp/qt/Docs/Qt-6.8.1|/tmp/qt/Examples/Qt-6.8.1/
[64473] Done
[64473] perform qt.qt6.681.examples operation: Settings
[64473] 	- arguments: path=/tmp/qt//Tools/sdktool/share/qtcreator/QtProject/QtCreator.ini, method=add_array_value, key=Help/InstalledExamples, value=Qt6 6.8.1|/tmp/qt/Docs/Qt-6.8.1|/tmp/qt/Examples/Qt-6.8.1/
[64473] Done
[64474] Installing component Desktop
[64474] backup qt.qt6.681.linux_gcc_64 operation: ConsumeOutput
[64474] 	- arguments: qt.qt6.681.linux_gcc_64_qmakeoutput, /tmp/qt/6.8.1/gcc_64/bin/qmake, -query
[64474] Done
[64474] perform qt.qt6.681.linux_gcc_64 operation: ConsumeOutput
[64474] 	- arguments: qt.qt6.681.linux_gcc_64_qmakeoutput, /tmp/qt/6.8.1/gcc_64/bin/qmake, -query
[64477] Done
[64477] backup qt.qt6.681.linux_gcc_64 operation: QtPatch
[64477] 	- arguments: linux, /tmp/qt/6.8.1/gcc_64, qt5-no-bin-patch, QmakeOutputInstallerKey=qt.qt6.681.linux_gcc_64_qmakeoutput
[64477] Done
[64477] perform qt.qt6.681.linux_gcc_64 operation: QtPatch
[64477] 	- arguments: linux, /tmp/qt/6.8.1/gcc_64, qt5-no-bin-patch, QmakeOutputInstallerKey=qt.qt6.681.linux_gcc_64_qmakeoutput
[64488] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Xml.pc'
[64488] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Widgets.pc'
[64488] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Test.pc'
[64488] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Sql.pc'
[64488] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6PrintSupport.pc'
[64488] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Platform.pc'
[64488] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6OpenGLWidgets.pc'
[64488] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6OpenGL.pc'
[64488] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Network.pc'
[64488] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Gui.pc'
[64488] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6DBus.pc'
[64488] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Core.pc'
[64488] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Concurrent.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickWidgets.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickVectorImage.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickTest.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickTemplates2.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickLayouts.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickDialogs2Utils.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickDialogs2QuickImpl.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickDialogs2.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2UniversalStyleImpl.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2Universal.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2MaterialStyleImpl.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2Material.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2Impl.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2ImagineStyleImpl.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2Imagine.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2FusionStyleImpl.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2Fusion.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2FluentWinUI3StyleImpl.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2BasicStyleImpl.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2Basic.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Quick.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlXmlListModel.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlWorkerScript.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlNetwork.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlModels.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlMeta.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlLocalStorage.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlIntegration.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlCore.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlCompiler.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlAssetDownloader.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Qml.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6LabsWavefrontMesh.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6LabsSharedImage.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6LabsSettings.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6LabsQmlModels.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6LabsPlatform.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6LabsFolderListModel.pc'
[64492] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6LabsAnimation.pc'
[64493] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6SvgWidgets.pc'
[64493] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Svg.pc'
[64493] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6UiTools.pc'
[64493] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6UiPlugin.pc'
[64493] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Linguist.pc'
[64493] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Help.pc'
[64493] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Designer.pc'
[64494] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6WaylandClient.pc'
[64495] Done
[64495] backup qt.qt6.681.linux_gcc_64 operation: Execute
[64495] 	- arguments: /tmp/qt//Tools/sdktool/libexec/qtcreator/sdktool, addQt, --id, qt.qt6.681.linux_gcc_64, --name, Qt %{Qt:Version}, --type, Qt4ProjectManager.QtVersion.Desktop, --qmake, /tmp/qt/6.8.1/gcc_64/bin/qmake, UNDOEXECUTE, {0,2}, /tmp/qt//Tools/sdktool/libexec/qtcreator/sdktool, rmQt, --id, qt.qt6.681.linux_gcc_64
[64495] Done
[64495] perform qt.qt6.681.linux_gcc_64 operation: Execute
[64495] 	- arguments: /tmp/qt//Tools/sdktool/libexec/qtcreator/sdktool, addQt, --id, qt.qt6.681.linux_gcc_64, --name, Qt %{Qt:Version}, --type, Qt4ProjectManager.QtVersion.Desktop, --qmake, /tmp/qt/6.8.1/gcc_64/bin/qmake, UNDOEXECUTE, {0,2}, /tmp/qt//Tools/sdktool/libexec/qtcreator/sdktool, rmQt, --id, qt.qt6.681.linux_gcc_64
[64495] /tmp/qt//Tools/sdktool/libexec/qtcreator/sdktool" started, arguments: "addQt --id qt.qt6.681.linux_gcc_64 --name Qt %{Qt:Version} --type Qt4ProjectManager.QtVersion.Desktop --qmake /tmp/qt/6.8.1/gcc_64/bin/qmake
[64496] Done
[64497] backup qt.qt6.681.linux_gcc_64 operation: Execute
[64497] 	- arguments: /tmp/qt//Tools/sdktool/libexec/qtcreator/sdktool, addKit, --id, qt.qt6.681.linux_gcc_64_kit, --name, Desktop Qt %{Qt:Version}, --Ctoolchain, x86-linux-generic-elf-64bit, --Cxxtoolchain, x86-linux-generic-elf-64bit, --qt, qt.qt6.681.linux_gcc_64, --debuggerengine, 1, --devicetype, Desktop, UNDOEXECUTE, {0,2}, /tmp/qt//Tools/sdktool/libexec/qtcreator/sdktool, rmKit, --id, qt.qt6.681.linux_gcc_64_kit
[64497] Done
[64497] perform qt.qt6.681.linux_gcc_64 operation: Execute
[64497] 	- arguments: /tmp/qt//Tools/sdktool/libexec/qtcreator/sdktool, addKit, --id, qt.qt6.681.linux_gcc_64_kit, --name, Desktop Qt %{Qt:Version}, --Ctoolchain, x86-linux-generic-elf-64bit, --Cxxtoolchain, x86-linux-generic-elf-64bit, --qt, qt.qt6.681.linux_gcc_64, --debuggerengine, 1, --devicetype, Desktop, UNDOEXECUTE, {0,2}, /tmp/qt//Tools/sdktool/libexec/qtcreator/sdktool, rmKit, --id, qt.qt6.681.linux_gcc_64_kit
[64497] /tmp/qt//Tools/sdktool/libexec/qtcreator/sdktool" started, arguments: "addKit --id qt.qt6.681.linux_gcc_64_kit --name Desktop Qt %{Qt:Version} --Ctoolchain x86-linux-generic-elf-64bit --Cxxtoolchain x86-linux-generic-elf-64bit --qt qt.qt6.681.linux_gcc_64 --debuggerengine 1 --devicetype Desktop
[64498] Done
[64498] backup qt.qt6.681.linux_gcc_64 operation: QtPatch
[64498] 	- arguments: linux, /tmp/qt/6.8.1/gcc_64, QmakeOutputInstallerKey=qt.qt6.681.linux_gcc_64_qmakeoutput, oldQtPath=/home/qt/work/install, qt5-no-bin-patch
[64498] Done
[64498] perform qt.qt6.681.linux_gcc_64 operation: QtPatch
[64498] 	- arguments: linux, /tmp/qt/6.8.1/gcc_64, QmakeOutputInstallerKey=qt.qt6.681.linux_gcc_64_qmakeoutput, oldQtPath=/home/qt/work/install, qt5-no-bin-patch
[64508] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Xml.pc'
[64508] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Widgets.pc'
[64508] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Test.pc'
[64508] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Sql.pc'
[64508] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6PrintSupport.pc'
[64508] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Platform.pc'
[64508] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6OpenGLWidgets.pc'
[64508] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6OpenGL.pc'
[64508] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Network.pc'
[64508] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Gui.pc'
[64508] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6DBus.pc'
[64508] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Core.pc'
[64508] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Concurrent.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickWidgets.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickVectorImage.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickTest.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickTemplates2.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickLayouts.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickDialogs2Utils.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickDialogs2QuickImpl.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickDialogs2.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2UniversalStyleImpl.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2Universal.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2MaterialStyleImpl.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2Material.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2Impl.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2ImagineStyleImpl.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2Imagine.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2FusionStyleImpl.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2Fusion.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2FluentWinUI3StyleImpl.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2BasicStyleImpl.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2Basic.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QuickControls2.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Quick.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlXmlListModel.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlWorkerScript.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlNetwork.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlModels.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlMeta.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlLocalStorage.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlIntegration.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlCore.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlCompiler.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6QmlAssetDownloader.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Qml.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6LabsWavefrontMesh.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6LabsSharedImage.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6LabsSettings.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6LabsQmlModels.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6LabsPlatform.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6LabsFolderListModel.pc'
[64512] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6LabsAnimation.pc'
[64513] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6SvgWidgets.pc'
[64513] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Svg.pc'
[64514] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6UiTools.pc'
[64514] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6UiPlugin.pc'
[64514] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Linguist.pc'
[64514] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Help.pc'
[64514] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6Designer.pc'
[64514] QtPatchOperation::getFilteredContent match: '/tmp/qt/6.8.1/gcc_64/lib/pkgconfig/Qt6WaylandClient.pc'
[64515] Done
[64515] backup qt.qt6.681.linux_gcc_64 operation: Settings
[64515] 	- arguments: path=/tmp/qt/6.8.1/gcc_64/bin/qt.conf, method=set, key=Paths/Prefix, value=..
[64515] Done
[64515] perform qt.qt6.681.linux_gcc_64 operation: Settings
[64515] 	- arguments: path=/tmp/qt/6.8.1/gcc_64/bin/qt.conf, method=set, key=Paths/Prefix, value=..
[64515] Done
[64515] backup qt.qt6.681.linux_gcc_64 operation: Settings
[64515] 	- arguments: path=/tmp/qt/6.8.1/gcc_64/bin/qt.conf, method=set, key=Paths/Examples, value=../../Examples/Qt-6.8.1
[64515] Done
[64515] perform qt.qt6.681.linux_gcc_64 operation: Settings
[64515] 	- arguments: path=/tmp/qt/6.8.1/gcc_64/bin/qt.conf, method=set, key=Paths/Examples, value=../../Examples/Qt-6.8.1
[64515] Done
[64515] backup qt.qt6.681.linux_gcc_64 operation: Settings
[64515] 	- arguments: path=/tmp/qt/6.8.1/gcc_64/bin/qt.conf, method=set, key=Paths/Documentation, value=../../Docs/Qt-6.8.1
[64515] Done
[64515] perform qt.qt6.681.linux_gcc_64 operation: Settings
[64515] 	- arguments: path=/tmp/qt/6.8.1/gcc_64/bin/qt.conf, method=set, key=Paths/Documentation, value=../../Docs/Qt-6.8.1
[64515] Done
[64515] backup qt.qt6.681.linux_gcc_64 operation: Settings
[64515] 	- arguments: path=/tmp/qt/6.8.1/gcc_64/libexec/qt.conf, method=set, key=Paths/Prefix, value=..
[64515] Done
[64515] perform qt.qt6.681.linux_gcc_64 operation: Settings
[64515] 	- arguments: path=/tmp/qt/6.8.1/gcc_64/libexec/qt.conf, method=set, key=Paths/Prefix, value=..
[64515] Done
[64516] backup qt.qt6.681.linux_gcc_64 operation: Settings
[64516] 	- arguments: path=/tmp/qt/6.8.1/gcc_64/libexec/qt.conf, method=set, key=Paths/Examples, value=../../Examples/Qt-6.8.1
[64516] Done
[64516] perform qt.qt6.681.linux_gcc_64 operation: Settings
[64516] 	- arguments: path=/tmp/qt/6.8.1/gcc_64/libexec/qt.conf, method=set, key=Paths/Examples, value=../../Examples/Qt-6.8.1
[64516] Done
[64516] backup qt.qt6.681.linux_gcc_64 operation: Settings
[64516] 	- arguments: path=/tmp/qt/6.8.1/gcc_64/libexec/qt.conf, method=set, key=Paths/Documentation, value=../../Docs/Qt-6.8.1
[64516] Done
[64516] perform qt.qt6.681.linux_gcc_64 operation: Settings
[64516] 	- arguments: path=/tmp/qt/6.8.1/gcc_64/libexec/qt.conf, method=set, key=Paths/Documentation, value=../../Docs/Qt-6.8.1
[64516] Done
[64516] backup qt.qt6.681.linux_gcc_64 operation: LineReplace
[64516] 	- arguments: /tmp/qt/6.8.1/gcc_64/mkspecs/qconfig.pri, QT_EDITION =, QT_EDITION = OpenSource
[64516] Done
[64516] perform qt.qt6.681.linux_gcc_64 operation: LineReplace
[64516] 	- arguments: /tmp/qt/6.8.1/gcc_64/mkspecs/qconfig.pri, QT_EDITION =, QT_EDITION = OpenSource
[64516] Done
[64516] backup qt.qt6.681.linux_gcc_64 operation: LineReplace
[64516] 	- arguments: /tmp/qt/6.8.1/gcc_64/mkspecs/qconfig.pri, QT_LICHECK = licheck64, QT_LICHECK =
[64516] Done
[64516] perform qt.qt6.681.linux_gcc_64 operation: LineReplace
[64516] 	- arguments: /tmp/qt/6.8.1/gcc_64/mkspecs/qconfig.pri, QT_LICHECK = licheck64, QT_LICHECK =
[64516] Done
[64516] Installing component CMake 3.29.3
[64516] backup qt.tools.cmake operation: Execute
[64516] 	- arguments: /tmp/qt//Tools/sdktool/libexec/qtcreator/sdktool, addCMake, --id, qt.tools.cmake, --name, CMake 3.29.3 (Qt), --path, /tmp/qt/Tools/CMake//bin/cmake, UNDOEXECUTE, /tmp/qt//Tools/sdktool/libexec/qtcreator/sdktool, rmCMake, --id, qt.tools.cmake
[64516] Done
[64516] perform qt.tools.cmake operation: Execute
[64516] 	- arguments: /tmp/qt//Tools/sdktool/libexec/qtcreator/sdktool, addCMake, --id, qt.tools.cmake, --name, CMake 3.29.3 (Qt), --path, /tmp/qt/Tools/CMake//bin/cmake, UNDOEXECUTE, /tmp/qt//Tools/sdktool/libexec/qtcreator/sdktool, rmCMake, --id, qt.tools.cmake
[64516] /tmp/qt//Tools/sdktool/libexec/qtcreator/sdktool" started, arguments: "addCMake --id qt.tools.cmake --name CMake 3.29.3 (Qt) --path /tmp/qt/Tools/CMake//bin/cmake
[64517] Done
[64517] backup qt.tools.cmake operation: License
[64517] 	- arguments:
[64518] Done
[64518] perform qt.tools.cmake operation: License
[64518] 	- arguments:
[64518] Done
[64518] Installing component Ninja 1.12.0
[64518] backup qt.tools.ninja operation: Settings
[64518] 	- arguments: path=/tmp/qt//Tools/sdktool/share/qtcreator/QtProject/QtCreator.ini, method=add_array_value, key=CMakeSpecificSettings/NinjaPath, value=/tmp/qt/Tools/Ninja//ninja
[64518] Done
[64518] perform qt.tools.ninja operation: Settings
[64518] 	- arguments: path=/tmp/qt//Tools/sdktool/share/qtcreator/QtProject/QtCreator.ini, method=add_array_value, key=CMakeSpecificSettings/NinjaPath, value=/tmp/qt/Tools/Ninja//ninja
[64518] Done
[64518] backup qt.tools.ninja operation: License
[64518] 	- arguments:
[64518] Done
[64518] perform qt.tools.ninja operation: License
[64518] 	- arguments:
[64518] Done
[64518] Installing component Qt Creator 15.0.0
[64518] backup qt.tools.qtcreator_gui operation: InstallIcons
[64518] 	- arguments: /tmp/qt/Tools/QtCreator/share/icons
[64518] Done
[64518] perform qt.tools.qtcreator_gui operation: InstallIcons
[64518] 	- arguments: /tmp/qt/Tools/QtCreator/share/icons
[64521] Done
[64521] backup qt.tools.qtcreator_gui operation: CreateDesktopEntry
[64521] 	- arguments: org.qt-project.qtcreator.desktop, Type=Application
Exec="/tmp/qt/Tools/QtCreator/bin/qtcreator" %F
Name=Qt Creator
GenericName=The IDE of choice for Qt development.
Icon=QtProject-qtcreator
StartupWMClass=qtcreator
Terminal=false
Categories=Development;IDE;Qt;
MimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.qt.qmakeprofile;application/vnd.qt.xml.resource;text/x-qml;text/x-qt.qml;text/x-qt.qbs;
[64521] Done
[64521] perform qt.tools.qtcreator_gui operation: CreateDesktopEntry
[64521] 	- arguments: org.qt-project.qtcreator.desktop, Type=Application
Exec="/tmp/qt/Tools/QtCreator/bin/qtcreator" %F
Name=Qt Creator
GenericName=The IDE of choice for Qt development.
Icon=QtProject-qtcreator
StartupWMClass=qtcreator
Terminal=false
Categories=Development;IDE;Qt;
MimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.qt.qmakeprofile;application/vnd.qt.xml.resource;text/x-qml;text/x-qt.qml;text/x-qt.qbs;
[64521] Done
[64521] Got a replacement installer base binary: "/tmp/qt/installerbase"
[64521] Writing maintenance tool: "/tmp/qt/MaintenanceTool.new"
[64521] Writing maintenance tool.
[64553] Wrote permissions for maintenance tool.
[64557] Wrote the binary with the new replacement.
[64561] Removed installer base binary "/tmp/qt/installerbase" after updating the maintenance tool.
[64567] Maintenance tool hard restart: false.
[64567] Installation finished!
[64569] Components installed successfully
INFO    : Qt installation completed successfully
```

</details>

---

## <a id="testers" />If you own a Qt commercial license
> [!IMPORTANT]
> **If you do have a commercial license, please help us testing! You can easily try this PR in 5mn. You just need to install [Git](https://git-scm.com/downloads) and [Python 3.11+](https://www.python.org/downloads/release/python-3131/). Then simply enter the following commands in your console, line by line, and it should download Qt 5.15.3 for your OS: if it does, please report it. And if it fails, please report the errors you get**    
> - **Windows** (`Win+R`, then type `cmd` and press `Enter` to open the console)
> ```powershell
> git clone git@github.com:Kidev/aqtinstall.git
> cd aqtinstall
> git checkout install_qt_commercial
> python -m venv .venv
> .\.venv\Scripts\activate.bat
> .\.venv\Scripts\Activate.ps1 #use this line instead of the previous one if you use PowerShell
> pip install .
> python -m aqt install-qt-commercial desktop win64_msvc2019_64 5.15.3 --user <email> --password <pw> --outputdir 'c:\Qttest'
>   ```
>
> - **Linux** 
> ```bash
> git clone git@github.com:Kidev/aqtinstall.git
> cd aqtinstall
> git checkout install_qt_commercial
> python -m venv .venv
> source .venv/bin/activate
> pip install .
> python -m aqt install-qt-commercial desktop gcc_64 5.15.3 --user <email> --password <pw> --outputdir /tmp/Qttest
> ```
>
> The parameters `user` and `password` are not required if you already used Qt's MaintenanceTool GUI on your machine. If you did not, simply replace `<email>` by your email or Qt username, and `<pw>` by your Qt password. 
> `outputdir` is only needed if you have errors when trying to install in the default Qt path for your OS
> I do not have a paid Qt license, so I can only test it on open-source versions, but it should work as well on paid version since I'm directly using the Qt installer as intended.  

Kidev: > These permissions `0o700` are widely permissive and grant access to more people than may be necessary.
Well I need to read, write and execute a file, this is the most restrictive I can be...

> Detected subprocess function 'check_call' without a static string
I check that the string is amongst a list of validated strings, don't really know what I can do to improve safety more than this.

If anyone has any idea how to fix the issues with Codacy, I'll be happy to listen!

Otherwise it works for the part that I can test. If you have a paid Qt version, please let me know if it works!
Kidev: > [!NOTE] 
> With current settings, I cannot complete `Codacy Static Code Analysis` because I need to execute a process (the Qt installer) with dynamic parameters (the requested version...). I tried to use `subprocess`, to split the binary (that can be static) and the args (that cannot), I even tried `execv`, but Codacy always throws a critical annotation.

Otherwise, everything else works well, and I added tests.
pzhlkj6612: 👍 Nice job! With this feature, the functionality of aqtinstall will be more completed!

I think this can also help @ddalcino's aqt list-qt server: https://github.com/ddalcino/aqt-list-server/blob/3ae82fa442453563063a3ea95adc0e4c4261831b/src/App.tsx#L180-L195
pzhlkj6612: > I really thought that this would work, as the binary is static and cannot be tampered with in any way, but not even that is accepted by Codacy

https://github.com/miurahr/aqtinstall/blob/7917b2d725f56e8ceb6ba17b41ea0571506c7320/aqt/installer.py#L213-L217

https://github.com/miurahr/aqtinstall/blob/7917b2d725f56e8ceb6ba17b41ea0571506c7320/aqt/updater.py#L99

Hmm, how did those lines get accepted...? I don't think they are fully "static".
Kidev: > 👍 Nice job! With this feature, the functionality of aqtinstall will be more completed!
> 
> I think this can also help @ddalcino's aqt list-qt server: https://github.com/ddalcino/aqt-list-server/blob/3ae82fa442453563063a3ea95adc0e4c4261831b/src/App.tsx#L180-L195

Thanks ! Indeed it may, the goal of this feature is to allow direct access to the Qt installer, breaking all the potential limitations the Qt team may bring to third parties, while still benefiting from the aqtinstall syntax and tools

And yes indeed, in fact [you can check here all the issues reported for the project](https://app.codacy.com/gh/miurahr/aqtinstall/issues/current), there are other critical ones. I think it's due to the fact that Codacy was added recently. Coupled with the fact that it must be configured on their website and not using a config file on the repo, and that is why I cannot get passed this fail for now
Kidev: Well I relapsed, and wasted some more time. Now I'm 100% certain there is no way aroound this. I installed Codacy on my fork and honestly it felt like this was done to push their premium plan. The solution hinted at on the site is either mentioning a function that do not exist, or serving AI slop looping between two opposite solutions that just change what the other did in a AI fueled loop.
My solution: @miurahr please in your interface, go to https://app.codacy.com/gh/miurahr/aqtinstall/patterns and disable semgrep
![image](https://github.com/user-attachments/assets/4ee61f43-bbf5-450a-a2ae-f2dac38ce466)

ddalcino: > 👍 Nice job! With this feature, the functionality of aqtinstall will be more completed!

I agree. I haven't tested this, but I imagine this will fix a lot of the issues we have with patching new releases, etc. This new command is a huge improvement.

> I think this can also help @ddalcino's aqt list-qt server: https://github.com/ddalcino/aqt-list-server/blob/3ae82fa442453563063a3ea95adc0e4c4261831b/src/App.tsx#L180-L195

It is helpful. Not sure I have the bandwidth to fix it at the moment though.

> My solution: @miurahr please in your interface, go to https://app.codacy.com/gh/miurahr/aqtinstall/patterns and disable semgrep

IMHO, I disagree. I think it's better to just accept that these issues are false positives, and merge the PR anyway. There's probably still some value to be had from keeping the semgrep tool enabled; it just shouldn't be a blocker to merging this.

Personally, I think the more worrying CI report is this one:
> [coverage/coveralls](https://coveralls.io/builds/71628253) — Coverage decreased (-1.2%) to 89.619%

Large coverage decreases like this can make the project a lot harder to maintain successfully. I'm not in charge, but if I were, I would ask you to add tests to get the coverage decrease as close to 0% as possible. I'd also ask for one Azure Pipeline build job, just to prove that the new command can built a sample Qt project successfully. I think one is enough for now.
pzhlkj6612: > The solution hinted at on the site is either mentioning a function that do not exist, or serving AI slop solutions, looping between two opposite solutions that just change what the other did in a very gas lighting way.

The platform does provide solution, but useless? Well, AI-ish stuff again...

> > My solution: @miurahr please in your interface, go to https://app.codacy.com/gh/miurahr/aqtinstall/patterns and disable semgrep
> 
> IMHO, I disagree. I think it's better to just accept that these issues are false positives, and merge the PR anyway. There's probably still some value to be had from keeping the semgrep tool enabled; it just shouldn't be a blocker to merging this.

I agree. Humans are working with tools.
ddalcino: > Note there will still be a warning for this case, but it won't trigger a CI failure. Maybe I'm oversensitive to those, very likely even. But removing some of those overly pedantic/punitive code patterns would make Codacy much more useful in its reports.

> Also note that this one change makes the critical issues on Codacy drop from 46 to 12. And the remaining ones can really be considered as such, and it feels much more managable to handle.

Oh! I didn't see this part. If we still get the warnings after turning off semgrep, maybe it's ok to turn it off. I retract my objection.
Kidev: > Large coverage decreases like this can make the project a lot harder to maintain successfully. I'm not in charge, but if I were, I would ask you to add tests to get the coverage decrease as close to 0% as possible. I'd also ask for one Azure Pipeline build job, just to prove that the new command can built a sample Qt project successfully. I think one is enough for now.

I agree, but guess why it decreased? Because I had add so many branches just to prove to one CI tool that I was a good boy. And testing all those cases is impossible unless you have an army with you. Now that I'm done with it, I fixed my tests and it's all fine once again. I agree it's just a tool, but don't underestimate the effect of hundreds of red error lines on a tired dev morale
miurahr: The feature proposed has an independence with other aqt installer features.
It seems better to have its own python file such as `commercial.py` in my sense.

> This command will download the official Qt installer, and translate aqtinstall commands you are used to into the arguments the official installer needs. It will automatically accept all licenses, the installation is unattended.

I agree the approach. It provides a consistency with install-qt command to help users, and support users to run unattended installation.
Kidev: > The feature proposed has an independence with other aqt installer features.
> 
> It seems better to have its own python file such as `commercial.py` in my sense.
> 
> 
> 
> > This command will download the official Qt installer, and translate aqtinstall commands you are used to into the arguments the official installer needs. It will automatically accept all licenses, the installation is unattended.
> 
> 
> 
> I agree the approach. It provides a consistency with install-qt command to help users, and support users to run unattended installation.

It was my first way of doing it, in a new commercial.py file. However I had issues with the import of other aqt modules not being available yet or something like this. So I went for the easy way to do it and put it all in install.py. But yea at the very least the CommercialInstaller class should live in its own file 
miurahr: > > The feature proposed has an independence with other aqt installer features.
> > It seems better to have its own python file such as `commercial.py` in my sense.
> It was my first way of doing it, in a new commercial.py file. However I had issues with the import of other aqt modules not being available yet or something like this. So I went for the easy way to do it and put it all in install.py. But yea at the very least the CommercialInstaller class should live in its own file

OK, Lets merge here as is. When someone want to refactor classes, it will have a chance to get its own file.

miurahr: > Important
> 
> **Everything works well, and I added tests**. It still lacks supports for specific addons right now, I'm working on it.
> 
> Note
> 
> With current settings, I cannot complete `Codacy Static Code Analysis` because I need to execute a process (the Qt installer) with dynamic parameters (the requested version...). I will stop trying to fix this for now as I'm stuck. I tried to use `subprocess`, to split the binary (that can be static) and the args (that cannot), it did not work.
> 
> ```python
> subprocess.run(["qt-unified-linux-x64-online.run"].extend(arguments), shell=False, check=True, cwd=working_dir)
> ```
> 
> ![image](https://private-user-images.githubusercontent.com/1204936/400971075-d8c49f74-a4bd-41c4-9468-a034bfc3617b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzY1NTUyMzUsIm5iZiI6MTczNjU1NDkzNSwicGF0aCI6Ii8xMjA0OTM2LzQwMDk3MTA3NS1kOGM0OWY3NC1hNGJkLTQxYzQtOTQ2OC1hMDM0YmZjMzYxN2IucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDExMSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAxMTFUMDAyMjE1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZmI2NTEwODFlZmM1OWQ2MzE3NTk3OGQ0NWMyNGNmZDg5OTViYWE0YjBiMzBhZTMyNDBiZTYxYWU4ZTJhMGVlZiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.xP-FsreFP7vFmCBVn-3sUJDSpDjS2g-t-MdS0DHW5MA)
> 
> I even tried the old school fork/exec way using `execv`, with the binary explicitly static, but not even that is accepted by Codacy
> 
> ```python
> os.execv("qt-unified-linux-x64-online.run", ["qt-unified-linux-x64-online.run"] + arguments)
> ```
> 
> ![image](https://private-user-images.githubusercontent.com/1204936/400971258-e417f9a0-5d8a-428b-8cce-f06cd642c300.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzY1NTUyMzUsIm5iZiI6MTczNjU1NDkzNSwicGF0aCI6Ii8xMjA0OTM2LzQwMDk3MTI1OC1lNDE3ZjlhMC01ZDhhLTQyOGItOGNjZS1mMDZjZDY0MmMzMDAucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDExMSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAxMTFUMDAyMjE1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MDBkODVlZTQ5N2I4NDk4M2M1MTg2MWJjOTA4YmY1ZDk4ZGY1NjZmZGY0MTM3YTUzZGNjNjBiNmUxMDcxNmQ3MiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.2QXvoVtZz9TdXBnKgK-_N_QO34L788sgovZX5-Yx8r0)

I try to update a codacy check criteria and gate standard.
It should pass here in the new configuration.
Kidev: > > > The feature proposed has an independence with other aqt installer features.
> > > It seems better to have its own python file such as `commercial.py` in my sense.
> > > It was my first way of doing it, in a new commercial.py file. However I had issues with the import of other aqt modules not being available yet or something like this. So I went for the easy way to do it and put it all in install.py. But yea at the very least the CommercialInstaller class should live in its own file
> 
> OK, Lets merge here as is. When someone want to refactor classes, it will have a chance to get its own file.

Careful there still is no way to install some modules. I'm on it
Kidev: Ok I am adding the parameter `--override` for poweruser. This makes it possible to bypass all possible limitations of the current aqtinstall commercial installer, and just rawdog the CLI yourself
```console
kidev:~$ python -m aqt install-qt-commercial --override "--root /home/kidev/override_test --accept-licenses --accept-obligations --confirm-command --auto-answer OperationDoesNotExistError=Ignore,OverwriteTargetDirectory=No,stopProcessesForUpdates=Cancel,installationErrorWithCancel=Cancel,installationErrorWithIgnore=Ignore,AssociateCommonFiletypes=Yes,telemetry-question=No install qt.qt6.681.linux_gcc_64" 
```
Kidev: You could also do useful things like
```
kidev:~$ python -m aqt install-qt-commercial --override --root /home/kidev/override_test --accept-licenses --accept-obligations --confirm-command --default-answer search qt.qt6.681
INFO    : aqtinstall(aqt) v0.1.dev1867 on Python 3.13.1 [CPython GCC 14.2.1 20240910]
INFO    : Downloading Qt installer to /tmp/qt_install_4kjtb709/qt-unified-linux-x64-online.run
INFO    : Running: /tmp/qt_install_4kjtb709/qt-unified-linux-x64-online.run --root /home/kidev/override_test --accept-licenses --accept-obligations --confirm-command --default-answer search qt.qt6.681
...
[2134] Searching aliases with regular expression: "qt.qt6.681"
[2136] No matching package aliases found.
[2136] Searching packages with regular expression: "qt.qt6.681"
[2136] Fetching latest update information...
[2368] Loaded from cache 422/422. Downloading remaining 0/422.
[2499] Loading component scripts...
<?xml version="1.0"?>
<availablepackages>
    <package name="qt.qt6.681.addons.qtquick3dphysics" displayname="Qt Quick 3D Physics" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtpositioning" displayname="Qt Positioning" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qt3d" displayname="Qt 3D" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtserialbus" displayname="Qt Serial Bus" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtconnectivity" displayname="Qt Connectivity" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qthttpserver" displayname="Qt HTTP Server" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtdatavis3d" displayname="Qt Data Visualization" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qt5compat" displayname="Qt 5 Compatibility Module" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.src" displayname="Sources" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtmultimedia" displayname="Qt Multimedia" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtsensors" displayname="Qt Sensors" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.wasm_multithread" displayname="WebAssembly (multi-threaded)" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtquicktimeline" displayname="Qt Quick Timeline" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.debug_info" displayname="Qt Debug Information Files" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtwebchannel" displayname="Qt WebChannel" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtwebsockets" displayname="Qt WebSockets" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtcharts" displayname="Qt Charts" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtshadertools" displayname="Qt Shader Tools" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtremoteobjects" displayname="Qt Remote Objects" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtquick3d" displayname="Qt Quick 3D" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtlocation" displayname="Qt Location (TP)" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.linux_gcc_64" displayname="Desktop" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtwebview" displayname="Qt WebView" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681" displayname="Qt 6.8.1" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtlottie" displayname="Qt Lottie Animation" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtgrpc" displayname="Qt Protobuf and Qt GRPC" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtnetworkauth" displayname="Qt Network Authorization" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtimageformats" displayname="Qt Image Formats" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons" displayname="Additional Libraries" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtvirtualkeyboard" displayname="Qt Virtual Keyboard" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.wasm_singlethread" displayname="WebAssembly (single-threaded)" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtserialport" displayname="Qt Serial Port" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.qtwaylandcompositor" displayname="Qt Wayland Compositor" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.android" displayname="Android" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtscxml" displayname="Qt State Machines" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtlanguageserver" displayname="Qt Language Server" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtspeech" displayname="Qt Speech" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtgraphs" displayname="Qt Graphs" version="6.8.1-0-202411221531"/>
    <package name="qt.qt6.681.addons.qtquickeffectmaker" displayname="Qt Quick Effect Maker" version="6.8.1-0-202411221531"/>
</availablepackages>
INFO    : Qt installation completed successfully
```
Kidev: Major progress. Modules are available, but that required a few things. Note that --override remains, and its behavior almost did not change. Indeed, it is still entirely possible to use to call the installer binary directly. However now, if you do not add all the boilerplate flags to it, it will add it automatically. Those flags are also no longer paramters, but configs inside settings.ini:
```ini
[qtcommercial]
# Timeout for Qt installer operations (in seconds)
installer_timeout = 3600

# Auto-answer settings for Qt installer
operation_does_not_exist_error = Ignore
overwrite_target_directory = No
stop_processes_for_updates = Cancel
installation_error_with_cancel = Cancel
installation_error_with_ignore = Ignore
associate_common_filetypes = Yes
telemetry = No

# Cache path for Qt installer files
cache_path = ~/.cache/aqt/qtcommercial
```

You may have noticed the cache path setting. It is where aqt will save its cached module list. Since they do not change, it's perfect for caching. To get their content, aqt will call the search option of the official Qt installer, parse and save the content of that call. The next times, it wont search again. It is maybe possible to pull all those .json files and to distribute it with aqt. Undecided for now, @miurahr your call

So, now you can use the --modules parameter. Like this:
```console
kidev:~$ python -m aqt install-qt-commercial desktop linux_gcc_64 6.8.1 --outputdir /tmp/qt --modules qtquick3d
```
Kidev: Entirely implemented. It's now possible to install everything from the Qt commercial installer. For example:
```console
# Will install Qt for linux_gcc_64, with sources, with QtQuick3D and with wasm support
kidev:~$ aqt install-qt-commercial desktop linux_gcc_64 6.8.1 --outputdir ./Qt --modules qtquick3d src wasm_multithread
```
Kidev: Add `list-qt-commercial` to be able to use the search option of the official installer. It works quite well, you can just pass it anything you want to search, like `gcc_64 6.8.1` or `6.8.1 qtquick3d` and it'll find you the packages. I may improve the formatting to make it easier to use
```console
kidev:~$ aqt list-qt-commercial 6.8.1
```
Kidev: Adding some more coverage, probably a Azure test too, and then I'll update the first post to be up to date
Kidev: I went back to using `subprocess.run` directly: the other 'solution' was just to dodge the CI but it was dumb, it only made the code unclear and hacky. Moreover, it caused issues on some systems where the temporary script creation failed
Kidev: You can see an [example using my version of the workflow](https://github.com/Kidev/QtQuick3D-Tools/actions/runs/12982377381/job/36202105138#step:6:57)  
It uses [my version of `install-qt-action` (v4.4.2)](https://github.com/marketplace/actions/install-qt-edited) while [this PR](https://github.com/jurplel/install-qt-action/pull/272) is not merged  
It also relies on this PR

You can use it right now yourself like this, until this PR is merged:
```yaml
- name: Install Qt
  uses: Kidev/install-qt-action@v4.4.2
  with:
    version: '6.8.1'
    target: 'desktop'
    arch: 'linux_gcc_64'
    aqtsource: 'git+https://github.com/Kidev/aqtinstall.git@install_qt_commercial'
    use-commercial: true
    user: ${{ secrets.QT_USERNAME }}
    password: ${{ secrets.QT_PASSWORD }}
    modules: 'qtquick3d'
```

Patch:
diff --git a/.gitignore b/.gitignore
index 264a123..5df3509 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,5 @@ Qt/
 .eggs
 qtaccount.ini
 .pytest_cache
+.run/
+.python-version
diff --git a/aqt/commercial.py b/aqt/commercial.py
new file mode 100644
index 0000000..e144f79
--- /dev/null
+++ b/aqt/commercial.py
@@ -0,0 +1,362 @@
+import json
+import os
+from dataclasses import dataclass
+from logging import Logger, getLogger
+from pathlib import Path
+from typing import List, Optional
+
+import requests
+from defusedxml import ElementTree
+
+from aqt.exceptions import DiskAccessNotPermitted
+from aqt.helper import Settings, get_os_name, get_qt_account_path, get_qt_installer_name, safely_run, safely_run_save_output
+from aqt.metadata import Version
+
+
+@dataclass
+class QtPackageInfo:
+    name: str
+    displayname: str
+    version: str
+
+
+class QtPackageManager:
+    def __init__(
+        self, arch: str, version: Version, target: str, username: Optional[str] = None, password: Optional[str] = None
+    ):
+        self.arch = arch
+        self.version = version
+        self.target = target
+        self.cache_dir = self._get_cache_dir()
+        self.packages: List[QtPackageInfo] = []
+        self.username = username
+        self.password = password
+
+    def _get_cache_dir(self) -> Path:
+        """Create and return cache directory path."""
+        base_cache = Settings.qt_installer_cache_path
+        cache_path = os.path.join(base_cache, self.target, self.arch, str(self.version))
+        Path(cache_path).mkdir(parents=True, exist_ok=True)
+        return Path(cache_path)
+
+    def _get_cache_file(self) -> Path:
+        """Get the cache file path."""
+        return self.cache_dir / "packages.json"
+
+    def _save_to_cache(self) -> None:
+        """Save packages information to cache."""
+        cache_data = [{"name": pkg.name, "displayname": pkg.displayname, "version": pkg.version} for pkg in self.packages]
+
+        with open(self._get_cache_file(), "w") as f:
+            json.dump(cache_data, f, indent=2)
+
+    def _load_from_cache(self) -> bool:
+        """Load packages information from cache if available."""
+        cache_file = self._get_cache_file()
+        if not cache_file.exists():
+            return False
+
+        try:
+            with open(cache_file, "r") as f:
+                cache_data = json.load(f)
+                self.packages = [
+                    QtPackageInfo(name=pkg["name"], displayname=pkg["displayname"], version=pkg["version"])
+                    for pkg in cache_data
+                ]
+            return True
+        except (json.JSONDecodeError, KeyError):
+            return False
+
+    def _parse_packages_xml(self, xml_content: str) -> None:
+        """Parse packages XML content and extract package information using defusedxml."""
+        try:
+            # Use defusedxml.ElementTree to safely parse the XML content
+            root = ElementTree.fromstring(xml_content)
+            self.packages = []
+
+            # Find all package elements using XPath-like expression
+            # Note: defusedxml supports a subset of XPath
+            for pkg in root.findall(".//package"):
+                name = pkg.get("name", "")
+                displayname = pkg.get("displayname", "")
+                version = pkg.get("version", "")
+
+                if all([name, displayname, version]):  # Ensure all required attributes are present
+                    self.packages.append(QtPackageInfo(name=name, displayname=displayname, version=version))
+        except ElementTree.ParseError as e:
+            raise RuntimeError(f"Failed to parse package XML: {e}")
+
+    def _get_version_string(self) -> str:
+        """Get formatted version string for package names."""
+        return f"{self.version.major}{self.version.minor}{self.version.patch}"
+
+    def _get_base_package_name(self) -> str:
+        """Get the base package name for the current configuration."""
+        version_str = self._get_version_string()
+        return f"qt.qt{self.version.major}.{version_str}"
+
+    def gather_packages(self, installer_path: str) -> None:
+        """Gather package information using qt installer search command."""
+        if self._load_from_cache():
+            return
+
+        version_str = self._get_version_string()
+        base_package = f"qt.qt{self.version.major}.{version_str}"
+
+        cmd = [
+            installer_path,
+            "--accept-licenses",
+            "--accept-obligations",
+            "--confirm-command",
+            "--default-answer",
+            "search",
+            base_package,
+        ]
+
+        if self.username and self.password:
+            cmd.extend(["--email", self.username, "--pw", self.password])
+
+        try:
+            output = safely_run_save_output(cmd, Settings.qt_installer_timeout)
+
+            # Handle both string and CompletedProcess outputs
+            output_text = output.stdout if hasattr(output, "stdout") else str(output)
+
+            # Extract the XML portion from the output
+            xml_start = output_text.find("<availablepackages>")
+            xml_end = output_text.find("</availablepackages>") + len("</availablepackages>")
+
+            if xml_start != -1 and xml_end != -1:
+                xml_content = output_text[xml_start:xml_end]
+                self._parse_packages_xml(xml_content)
+                self._save_to_cache()
+            else:
+                # Log the actual output for debugging
+                logger = getLogger("aqt.helper")
+                logger.debug(f"Installer output: {output_text}")
+                raise RuntimeError("Failed to find package information in installer output")
+
+        except Exception as e:
+            raise RuntimeError(f"Failed to get package information: {str(e)}")
+
+    def get_install_command(self, modules: Optional[List[str]], temp_dir: str) -> List[str]:
+        """Generate installation command based on requested modules."""
+        package_name = f"{self._get_base_package_name()}.{self.arch}"
+        cmd = ["install", package_name]
+
+        # No modules requested, return base package only
+        if not modules:
+            return cmd
+
+        # Ensure package cache exists
+        self.gather_packages(temp_dir)
+
+        if "all" in modules:
+            # Find all addon and direct module packages
+            for pkg in self.packages:
+                if f"{self._get_base_package_name()}.addons." in pkg.name or pkg.name.startswith(
+                    f"{self._get_base_package_name()}."
+                ):
+                    module_name = pkg.name.split(".")[-1]
+                    if module_name != self.arch:  # Skip the base package
+                        cmd.append(pkg.name)
+        else:
+            # Add specifically requested modules that exist in either format
+            for module in modules:
+                addon_name = f"{self._get_base_package_name()}.addons.{module}"
+                direct_name = f"{self._get_base_package_name()}.{module}"
+
+                # Check if either package name exists
+                matching_pkg = next(
+                    (pkg.name for pkg in self.packages if pkg.name == addon_name or pkg.name == direct_name), None
+                )
+
+                if matching_pkg:
+                    cmd.append(matching_pkg)
+
+        return cmd
+
+
+class CommercialInstaller:
+    """Qt Commercial installer that handles module installation and package management."""
+
+    def __init__(
+        self,
+        target: str,
+        arch: Optional[str],
+        version: Optional[str],
+        username: Optional[str] = None,
+        password: Optional[str] = None,
+        output_dir: Optional[str] = None,
+        logger: Optional[Logger] = None,
+        base_url: str = "https://download.qt.io",
+        override: Optional[list[str]] = None,
+        modules: Optional[List[str]] = None,
+        no_unattended: bool = False,
+    ):
+        self.override = override
+        self.target = target
+        self.arch = arch or ""
+        self.version = Version(version) if version else Version("0.0.0")
+        self.username = username
+        self.password = password
+        self.output_dir = output_dir
+        self.logger = logger or getLogger(__name__)
+        self.base_url = base_url
+        self.modules = modules
+        self.no_unattended = no_unattended
+
+        # Set OS-specific properties
+        self.os_name = get_os_name()
+        self._installer_filename = get_qt_installer_name()
+        self.qt_account = get_qt_account_path()
+        self.package_manager = QtPackageManager(self.arch, self.version, self.target, self.username, self.password)
+
+    @staticmethod
+    def get_auto_answers() -> str:
+        """Get auto-answer options from settings."""
+        settings_map = {
+            "OperationDoesNotExistError": Settings.qt_installer_operationdoesnotexisterror,
+            "OverwriteTargetDirectory": Settings.qt_installer_overwritetargetdirectory,
+            "stopProcessesForUpdates": Settings.qt_installer_stopprocessesforupdates,
+            "installationErrorWithCancel": Settings.qt_installer_installationerrorwithcancel,
+            "installationErrorWithIgnore": Settings.qt_installer_installationerrorwithignore,
+            "AssociateCommonFiletypes": Settings.qt_installer_associatecommonfiletypes,
+            "telemetry-question": Settings.qt_installer_telemetry,
+        }
+
+        answers = []
+        for key, value in settings_map.items():
+            answers.append(f"{key}={value}")
+
+        return ",".join(answers)
+
+    @staticmethod
+    def build_command(
+        installer_path: str,
+        override: Optional[List[str]] = None,
+        username: Optional[str] = None,
+        password: Optional[str] = None,
+        output_dir: Optional[str] = None,
+        no_unattended: bool = False,
+    ) -> List[str]:
+        """Build the installation command with proper safeguards."""
+        cmd = [installer_path]
+
+        # Add unattended flags unless explicitly disabled
+        if not no_unattended:
+            cmd.extend(["--accept-licenses", "--accept-obligations", "--confirm-command"])
+
+        if override:
+            # When using override, still include unattended flags unless disabled
+            cmd.extend(override)
+            return cmd
+
+        # Add authentication if provided
+        if username and password:
+            cmd.extend(["--email", username, "--pw", password])
+
+        # Add output directory if specified
+        if output_dir:
+            cmd.extend(["--root", str(Path(output_dir).resolve())])
+
+        # Add auto-answer options from settings
+        auto_answers = CommercialInstaller.get_auto_answers()
+        if auto_answers:
+            cmd.extend(["--auto-answer", auto_answers])
+
+        return cmd
+
+    def install(self) -> None:
+        """Run the Qt installation process."""
+        if (
+            not self.qt_account.exists()
+            and not (self.username and self.password)
+            and not os.environ.get("QT_INSTALLER_JWT_TOKEN")
+        ):
+            raise RuntimeError(
+                "No Qt account credentials found. Provide username and password or ensure qtaccount.ini exists."
+            )
+
+        # Check output directory if specified
+        if self.output_dir:
+            output_path = Path(self.output_dir) / str(self.version)
+            if output_path.exists():
+                if Settings.qt_installer_overwritetargetdirectory.lower() == "yes":
+                    self.logger.warning(f"Target directory {output_path} exists - removing as overwrite is enabled")
+                    try:
+                        import shutil
+
+                        shutil.rmtree(output_path)
+                    except (OSError, PermissionError) as e:
+                        raise DiskAccessNotPermitted(f"Failed to remove existing target directory {output_path}: {str(e)}")
+                else:
+                    msg = (
+                        f"Target directory {output_path} already exists. "
+                        "Set overwrite_target_directory='Yes' in settings.ini to overwrite, or select another directory."
+                    )
+                    raise DiskAccessNotPermitted(msg)
+
+        # Setup cache directory
+        cache_path = Path(Settings.qt_installer_cache_path)
+        cache_path.mkdir(parents=True, exist_ok=True)
+
+        import shutil
+
+        temp_dir = Settings.qt_installer_temp_path
+        temp_path = Path(temp_dir)
+        if temp_path.exists():
+            shutil.rmtree(temp_dir)
+        temp_path.mkdir(parents=True, exist_ok=True)
+        installer_path = temp_path / self._installer_filename
+
+        self.logger.info(f"Downloading Qt installer to {installer_path}")
+        self.download_installer(installer_path, Settings.qt_installer_timeout)
+
+        try:
+            cmd = []
+            if self.override:
+                cmd = self.build_command(str(installer_path), override=self.override, no_unattended=self.no_unattended)
+            else:
+                # Initialize package manager and gather packages
+                self.package_manager.gather_packages(str(installer_path))
+
+                base_cmd = self.build_command(
+                    str(installer_path.absolute()),
+                    username=self.username,
+                    password=self.password,
+                    output_dir=self.output_dir,
+                    no_unattended=self.no_unattended,
+                )
+
+                cmd = [
+                    *base_cmd,
+                    *self.package_manager.get_install_command(self.modules, temp_dir),
+                ]
+
+            self.logger.info(f"Running: {cmd}")
+
+            safely_run(cmd, Settings.qt_installer_timeout)
+        except Exception as e:
+            self.logger.error(f"Installation failed with exit code {e.__str__()}")
+            raise
+        finally:
+            self.logger.info("Qt installation completed successfully")
+
+    def download_installer(self, target_path: Path, timeout: int) -> None:
+        url = f"{self.base_url}/official_releases/online_installers/{self._installer_filename}"
+        try:
+            response = requests.get(url, stream=True, timeout=timeout)
+            response.raise_for_status()
+
+            with open(target_path, "wb") as f:
+                for chunk in response.iter_content(chunk_size=8192):
+                    f.write(chunk)
+            if self.os_name != "windows":
+                os.chmod(target_path, 0o500)
+        except Exception as e:
+            raise RuntimeError(f"Failed to download installer: {e}")
+
+    def _get_package_name(self) -> str:
+        qt_version = f"{self.version.major}{self.version.minor}{self.version.patch}"
+        return f"qt.qt{self.version.major}.{qt_version}.{self.arch}"
diff --git a/aqt/helper.py b/aqt/helper.py
index 2a790a0..92976ac 100644
--- a/aqt/helper.py
+++ b/aqt/helper.py
@@ -24,6 +24,8 @@ import logging.config
 import os
 import posixpath
 import secrets
+import shutil
+import subprocess
 import sys
 from configparser import ConfigParser
 from logging import Handler, getLogger
@@ -48,6 +50,64 @@ from aqt.exceptions import (
 )
 
 
+def get_os_name() -> str:
+    system = sys.platform.lower()
+    if system == "darwin":
+        return "mac"
+    if system == "linux":
+        return "linux"
+    if system in ("windows", "win32"):  # Accept both windows and win32
+        return "windows"
+    raise ValueError(f"Unsupported operating system: {system}")
+
+
+def get_qt_local_folder_path() -> Path:
+    os_name = get_os_name()
+    if os_name == "windows":
+        appdata = os.environ.get("APPDATA", str(Path.home() / "AppData" / "Roaming"))
+        return Path(appdata) / "Qt"
+    if os_name == "mac":
+        return Path.home() / "Library" / "Application Support" / "Qt"
+    return Path.home() / ".local" / "share" / "Qt"
+
+
+def get_qt_account_path() -> Path:
+    return get_qt_local_folder_path() / "qtaccount.ini"
+
+
+def get_qt_installer_name() -> str:
+    installer_dict = {
+        "windows": "qt-unified-windows-x64-online.exe",
+        "mac": "qt-unified-macOS-x64-online.dmg",
+        "linux": "qt-unified-linux-x64-online.run",
+    }
+    return installer_dict[get_os_name()]
+
+
+def get_qt_installer_path() -> Path:
+    return get_qt_local_folder_path() / get_qt_installer_name()
+
+
+def get_default_local_cache_path() -> Path:
+    os_name = get_os_name()
+    if os_name == "windows":
+        appdata = os.environ.get("APPDATA", str(Path.home() / "AppData" / "Roaming"))
+        return Path(appdata) / "aqt" / "cache"
+    if os_name == "mac":
+        return Path.home() / "Library" / "Application Support" / "aqt" / "cache"
+    return Path.home() / ".local" / "share" / "aqt" / "cache"
+
+
+def get_default_local_temp_path() -> Path:
+    os_name = get_os_name()
+    if os_name == "windows":
+        appdata = os.environ.get("APPDATA", str(Path.home() / "AppData" / "Roaming"))
+        return Path(appdata) / "aqt" / "tmp"
+    if os_name == "mac":
+        return Path.home() / "Library" / "Application Support" / "aqt" / "tmp"
+    return Path.home() / ".local" / "share" / "aqt" / "tmp"
+
+
 def _get_meta(url: str) -> requests.Response:
     return requests.get(url + ".meta4")
 
@@ -344,24 +404,41 @@ class SettingsClass:
         "_lock": Lock(),
     }
 
+    def __init__(self) -> None:
+        self.config: Optional[ConfigParser]
+        self._lock: Lock
+        self._initialize()
+
     def __new__(cls, *p, **k):
         self = object.__new__(cls, *p, **k)
         self.__dict__ = cls._shared_state
         return self
 
-    def __init__(self) -> None:
-        self.config: Optional[ConfigParser]
-        self._lock: Lock
+    def _initialize(self) -> None:
+        """Initialize configuration if not already initialized."""
         if self.config is None:
             with self._lock:
                 if self.config is None:
                     self.config = MyConfigParser()
                     self.configfile = os.path.join(os.path.dirname(__file__), "settings.ini")
                     self.loggingconf = os.path.join(os.path.dirname(__file__), "logging.ini")
+                    self.config.read(self.configfile)
+
+                    logging.info(f"Cache folder: {self.qt_installer_cache_path}")
+                    logging.info(f"Temp folder: {self.qt_installer_temp_path}")
+                    if Path(self.qt_installer_temp_path).exists():
+                        shutil.rmtree(self.qt_installer_temp_path)
+
+    def _get_config(self) -> ConfigParser:
+        """Safe getter for config that ensures it's initialized."""
+        self._initialize()
+        assert self.config is not None
+        return self.config
 
     def load_settings(self, file: Optional[Union[str, TextIO]] = None) -> None:
         if self.config is None:
             return
+
         if file is not None:
             if isinstance(file, str):
                 result = self.config.read(file)
@@ -377,6 +454,24 @@ class SettingsClass:
             with open(self.configfile, "r") as f:
                 self.config.read_file(f)
 
+    @property
+    def qt_installer_cache_path(self) -> str:
+        """Path for Qt installer cache."""
+        config = self._get_config()
+        # If no cache_path or blank, return default without modifying config
+        if not config.has_option("qtcommercial", "cache_path") or config.get("qtcommercial", "cache_path").strip() == "":
+            return str(get_default_local_cache_path())
+        return config.get("qtcommercial", "cache_path")
+
+    @property
+    def qt_installer_temp_path(self) -> str:
+        """Path for Qt installer cache."""
+        config = self._get_config()
+        # If no cache_path or blank, return default without modifying config
+        if not config.has_option("qtcommercial", "temp_path") or config.get("qtcommercial", "temp_path").strip() == "":
+            return str(get_default_local_temp_path())
+        return config.get("qtcommercial", "temp_path")
+
     @property
     def archive_download_location(self):
         return self.config.get("aqt", "archive_download_location", fallback=".")
@@ -473,6 +568,58 @@ class SettingsClass:
         """
         return self.config.getint("aqt", "min_module_size", fallback=41)
 
+    # Qt Commercial Installer properties
+    @property
+    def qt_installer_timeout(self) -> int:
+        """Timeout for Qt commercial installer operations in seconds."""
+        return self._get_config().getint("qtcommercial", "installer_timeout", fallback=3600)
+
+    @property
+    def qt_installer_operationdoesnotexisterror(self) -> str:
+        """Handle OperationDoesNotExistError in Qt installer."""
+        return self._get_config().get("qtcommercial", "operation_does_not_exist_error", fallback="Ignore")
+
+    @property
+    def qt_installer_overwritetargetdirectory(self) -> str:
+        """Handle overwriting target directory in Qt installer."""
+        return self._get_config().get("qtcommercial", "overwrite_target_directory", fallback="No")
+
+    @property
+    def qt_installer_stopprocessesforupdates(self) -> str:
+        """Handle stopping processes for updates in Qt installer."""
+        return self._get_config().get("qtcommercial", "stop_processes_for_updates", fallback="Cancel")
+
+    @property
+    def qt_installer_installationerrorwithcancel(self) -> str:
+        """Handle installation errors with cancel option in Qt installer."""
+        return self._get_config().get("qtcommercial", "installation_error_with_cancel", fallback="Cancel")
+
+    @property
+    def qt_installer_installationerrorwithignore(self) -> str:
+        """Handle installation errors with ignore option in Qt installer."""
+        return self._get_config().get("qtcommercial", "installation_error_with_ignore", fallback="Ignore")
+
+    @property
+    def qt_installer_associatecommonfiletypes(self) -> str:
+        """Handle file type associations in Qt installer."""
+        return self._get_config().get("qtcommercial", "associate_common_filetypes", fallback="Yes")
+
+    @property
+    def qt_installer_telemetry(self) -> str:
+        """Handle telemetry settings in Qt installer."""
+        return self._get_config().get("qtcommercial", "telemetry", fallback="No")
+
+    @property
+    def qt_installer_unattended(self) -> bool:
+        """Control whether to use unattended installation flags."""
+        return self._get_config().getboolean("qtcommercial", "unattended", fallback=True)
+
+    def qt_installer_cleanup(self) -> None:
+        """Control whether to use unattended installation flags."""
+        import shutil
+
+        shutil.rmtree(self.qt_installer_temp_path)
+
 
 Settings = SettingsClass()
 
@@ -482,3 +629,18 @@ def setup_logging(env_key="LOG_CFG"):
     if config is not None and os.path.exists(config):
         Settings.loggingconf = config
     logging.config.fileConfig(Settings.loggingconf)
+
+
+def safely_run(cmd: List[str], timeout: int) -> None:
+    try:
+        subprocess.run(cmd, shell=False, timeout=timeout)
+    except Exception:
+        raise
+
+
+def safely_run_save_output(cmd: List[str], timeout: int) -> Any:
+    try:
+        result = subprocess.run(cmd, shell=False, capture_output=True, text=True, timeout=timeout)
+        return result
+    except Exception:
+        raise
diff --git a/aqt/installer.py b/aqt/installer.py
index f1aa730..ccd515a 100644
--- a/aqt/installer.py
+++ b/aqt/installer.py
@@ -42,6 +42,7 @@ from typing import List, Optional, Tuple, cast
 
 import aqt
 from aqt.archives import QtArchives, QtPackage, SrcDocExamplesArchives, ToolArchives
+from aqt.commercial import CommercialInstaller
 from aqt.exceptions import (
     AqtException,
     ArchiveChecksumError,
@@ -59,8 +60,11 @@ from aqt.helper import (
     Settings,
     downloadBinaryFile,
     get_hash,
+    get_os_name,
+    get_qt_installer_name,
     retry_on_bad_connection,
     retry_on_errors,
+    safely_run_save_output,
     setup_logging,
 )
 from aqt.metadata import ArchiveId, MetadataFactory, QtRepoProperty, SimpleSpec, Version, show_list, suggested_follow_up
@@ -124,9 +128,20 @@ class CommonInstallArgParser(BaseArgumentParser):
 class InstallArgParser(CommonInstallArgParser):
     """Install-qt arguments and options"""
 
+    override: Optional[List[str]]
     arch: Optional[str]
     qt_version: str
     qt_version_spec: str
+    version: Optional[str]
+    user: Optional[str]
+    password: Optional[str]
+    operation_does_not_exist_error: str
+    overwrite_target_dir: str
+    stop_processes_for_updates: str
+    installation_error_with_cancel: str
+    installation_error_with_ignore: str
+    associate_common_filetypes: str
+    telemetry: str
 
     modules: Optional[List[str]]
     archives: Optional[List[str]]
@@ -657,6 +672,47 @@ class Cli:
         )
         show_list(meta)
 
+    def run_install_qt_commercial(self, args: InstallArgParser) -> None:
+        """Execute commercial Qt installation"""
+        self.show_aqt_version()
+
+        if args.override:
+            commercial_installer = CommercialInstaller(
+                target="",  # Empty string as placeholder
+                arch="",
+                version=None,
+                logger=self.logger,
+                base_url=args.base if args.base is not None else Settings.baseurl,
+                override=args.override,
+                no_unattended=not Settings.qt_installer_unattended,
+            )
+        else:
+            if not all([args.target, args.arch, args.version]):
+                raise CliInputError("target, arch, and version are required")
+
+            commercial_installer = CommercialInstaller(
+                target=args.target,
+                arch=args.arch,
+                version=args.version,
+                username=args.user,
+                password=args.password,
+                output_dir=args.outputdir,
+                logger=self.logger,
+                base_url=args.base if args.base is not None else Settings.baseurl,
+                no_unattended=not Settings.qt_installer_unattended,
+                modules=args.modules,
+            )
+
+        try:
+            commercial_installer.install()
+            Settings.qt_installer_cleanup()
+        except DiskAccessNotPermitted:
+            # Let DiskAccessNotPermitted propagate up without additional logging
+            raise
+        except Exception as e:
+            self.logger.error(f"Commercial installation failed: {str(e)}")
+            raise
+
     def show_help(self, args=None):
         """Display help message"""
         self.parser.print_help()
@@ -667,7 +723,7 @@ class Cli:
         py_build = platform.python_compiler()
         return f"aqtinstall(aqt) v{aqt.__version__} on Python {py_version} [{py_impl} {py_build}]"
 
-    def show_aqt_version(self, args=None):
+    def show_aqt_version(self, args: Optional[list[str]] = None) -> None:
         """Display version information"""
         self.logger.info(self._format_aqt_version())
 
@@ -750,6 +806,134 @@ class Cli:
         )
         self._set_common_options(install_tool_parser)
 
+    def _set_install_qt_commercial_parser(self, install_qt_commercial_parser: argparse.ArgumentParser) -> None:
+        install_qt_commercial_parser.set_defaults(func=self.run_install_qt_commercial)
+
+        # Create mutually exclusive group for override vs standard parameters
+        exclusive_group = install_qt_commercial_parser.add_mutually_exclusive_group()
+        exclusive_group.add_argument(
+            "--override",
+            nargs=argparse.REMAINDER,
+            help="Will ignore all other parameters and use everything after this parameter as "
+            "input for the official Qt installer",
+        )
+
+        # Make standard arguments optional when override is used by adding a custom action
+        class ConditionalRequiredAction(argparse.Action):
+            def __call__(self, parser, namespace, values, option_string=None) -> None:
+                if not hasattr(namespace, "override") or not namespace.override:
+                    setattr(namespace, self.dest, values)
+
+        install_qt_commercial_parser.add_argument(
+            "target",
+            nargs="?",
+            choices=["desktop", "android", "ios"],
+            help="Target platform",
+            action=ConditionalRequiredAction,
+        )
+        install_qt_commercial_parser.add_argument(
+            "arch", nargs="?", help="Target architecture", action=ConditionalRequiredAction
+        )
+        install_qt_commercial_parser.add_argument("version", nargs="?", help="Qt version", action=ConditionalRequiredAction)
+
+        install_qt_commercial_parser.add_argument(
+            "--user",
+            help="Qt account username",
+        )
+        install_qt_commercial_parser.add_argument(
+            "--password",
+            help="Qt account password",
+        )
+        install_qt_commercial_parser.add_argument(
+            "--modules",
+            nargs="*",
+            help="Add modules",
+        )
+        self._set_common_options(install_qt_commercial_parser)
+
+    def _make_list_qt_commercial_parser(self, subparsers: argparse._SubParsersAction) -> None:
+        """Creates a subparser for listing Qt commercial packages"""
+        list_parser = subparsers.add_parser(
+            "list-qt-commercial",
+            formatter_class=argparse.RawDescriptionHelpFormatter,
+            epilog="Examples:\n"
+            "$ aqt list-qt-commercial                 # list all available packages\n"
+            "$ aqt list-qt-commercial gcc_64          # search for specific archs\n"
+            "$ aqt list-qt-commercial 6.8.1           # search for specific versions\n"
+            "$ aqt list-qt-commercial qtquick3d       # search for specific packages\n"
+            "$ aqt list-qt-commercial gcc_64 6.8.1    # search for multiple terms at once\n",
+        )
+        list_parser.add_argument(
+            "search_terms",
+            nargs="*",
+            help="Optional search terms to pass to the installer search command. If not provided, lists all packages",
+        )
+        list_parser.set_defaults(func=self.run_list_qt_commercial)
+
+    def run_list_qt_commercial(self, args) -> None:
+        """Execute Qt commercial package listing"""
+        self.show_aqt_version()
+
+        # Create temporary directory to download installer
+        import shutil
+        from pathlib import Path
+
+        temp_dir = Settings.qt_installer_temp_path
+        temp_path = Path(temp_dir)
+        if temp_path.exists():
+            shutil.rmtree(temp_dir)
+        temp_path.mkdir(parents=True, exist_ok=True)
+
+        # Get installer based on OS
+        installer_filename = get_qt_installer_name()
+        installer_path = temp_path / installer_filename
+
+        try:
+            # Download installer
+            self.logger.info(f"Downloading Qt installer to {installer_path}")
+            base_url = Settings.baseurl
+            url = f"{base_url}/official_releases/online_installers/{installer_filename}"
+            import requests
+
+            response = requests.get(url, stream=True, timeout=Settings.qt_installer_timeout)
+            response.raise_for_status()
+
+            with open(installer_path, "wb") as f:
+                for chunk in response.iter_content(chunk_size=8192):
+                    f.write(chunk)
+
+            if get_os_name() != "windows":
+                os.chmod(installer_path, 0o500)
+
+            # Build search command
+            cmd = [
+                str(installer_path),
+                "--accept-licenses",
+                "--accept-obligations",
+                "--confirm-command",
+                "search",
+                "" if not args.search_terms else " ".join(args.search_terms),
+            ]
+
+            # Run search and display output
+            output = safely_run_save_output(cmd, Settings.qt_installer_timeout)
+
+            # Process and print the output properly
+            if output.stdout:
+                # Print the actual output with proper newlines
+                print(output.stdout)
+
+                # If there are any errors, print them as warnings
+                if output.stderr:
+                    for line in output.stderr.splitlines():
+                        self.logger.warning(line)
+
+        except Exception as e:
+            self.logger.error(f"Failed to list Qt commercial packages: {e}")
+        finally:
+            # Clean up
+            Settings.qt_installer_cleanup()
+
     def _warn_on_deprecated_command(self, old_name: str, new_name: str) -> None:
         self.logger.warning(
             f"The command '{old_name}' is deprecated and marked for removal in a future version of aqt.\n"
@@ -764,6 +948,7 @@ class Cli:
         )
 
     def _make_all_parsers(self, subparsers: argparse._SubParsersAction) -> None:
+        """Creates all command parsers and adds them to the subparsers"""
 
         def make_parser_it(cmd: str, desc: str, set_parser_cmd, formatter_class):
             kwargs = {"formatter_class": formatter_class} if formatter_class else {}
@@ -798,13 +983,22 @@ class Cli:
             if cmd_type != "src":
                 parser.add_argument("-m", "--modules", action="store_true", help="Print list of available modules")
 
+        # Create install command parsers
         make_parser_it("install-qt", "Install Qt.", self._set_install_qt_parser, argparse.RawTextHelpFormatter)
         make_parser_it("install-tool", "Install tools.", self._set_install_tool_parser, None)
+        make_parser_it(
+            "install-qt-commercial",
+            "Install Qt commercial.",
+            self._set_install_qt_commercial_parser,
+            argparse.RawTextHelpFormatter,
+        )
         make_parser_sde("install-doc", "Install documentation.", self.run_install_doc, False)
         make_parser_sde("install-example", "Install examples.", self.run_install_example, False)
         make_parser_sde("install-src", "Install source.", self.run_install_src, True, is_add_modules=False)
 
+        # Create list command parsers
         self._make_list_qt_parser(subparsers)
+        self._make_list_qt_commercial_parser(subparsers)
         self._make_list_tool_parser(subparsers)
         make_parser_list_sde("list-doc", "List documentation archives available (use with install-doc)", "doc")
         make_parser_list_sde("list-example", "List example archives available (use with install-example)", "examples")
@@ -948,14 +1142,13 @@ class Cli:
         )
         list_parser.set_defaults(func=self.run_list_tool)
 
-    def _make_common_parsers(self, subparsers: argparse._SubParsersAction):
+    def _make_common_parsers(self, subparsers: argparse._SubParsersAction) -> None:
         help_parser = subparsers.add_parser("help")
         help_parser.set_defaults(func=self.show_help)
-        #
         version_parser = subparsers.add_parser("version")
         version_parser.set_defaults(func=self.show_aqt_version)
 
-    def _set_common_options(self, subparser):
+    def _set_common_options(self, subparser: argparse.ArgumentParser) -> None:
         subparser.add_argument(
             "-O",
             "--outputdir",
@@ -1236,7 +1429,8 @@ def run_installer(
         listener.stop()
 
 
-def init_worker_sh():
+def init_worker_sh() -> None:
+    """Initialize worker signal handling"""
     signal.signal(signal.SIGINT, signal.SIG_IGN)
 
 
@@ -1248,7 +1442,7 @@ def installer(
     archive_dest: Path,
     settings_ini: str,
     keep: bool,
-):
+) -> None:
     """
     Installer function to download archive files and extract it.
     It is called through multiprocessing.Pool()
diff --git a/aqt/settings.ini b/aqt/settings.ini
index 3641e00..7512433 100644
--- a/aqt/settings.ini
+++ b/aqt/settings.ini
@@ -1,32 +1,45 @@
 [DEFAULTS]
 
 [aqt]
-concurrency: 4
-baseurl: https://download.qt.io
-7zcmd: 7z
-print_stacktrace_on_error: False
-always_keep_archives: False
-archive_download_location: .
-min_module_size: 41
+concurrency : 4
+baseurl : https://download.qt.io
+7zcmd : 7z
+print_stacktrace_on_error : False
+always_keep_archives : False
+archive_download_location : .
+min_module_size : 41
 
 [requests]
-connection_timeout: 3.5
-response_timeout: 30
-max_retries_on_connection_error: 5
-retry_backoff: 0.1
-max_retries_on_checksum_error: 5
-max_retries_to_retrieve_hash: 5
-hash_algorithm: sha256
-INSECURE_NOT_FOR_PRODUCTION_ignore_hash: False
+connection_timeout : 3.5
+response_timeout : 30
+max_retries_on_connection_error : 5
+retry_backoff : 0.1
+max_retries_on_checksum_error : 5
+max_retries_to_retrieve_hash : 5
+hash_algorithm : sha256
+INSECURE_NOT_FOR_PRODUCTION_ignore_hash : False
+
+[qtcommercial]
+unattended : True
+installer_timeout : 1800
+operation_does_not_exist_error : Ignore
+overwrite_target_directory : Yes
+stop_processes_for_updates : Ignore
+installation_error_with_cancel : Ignore
+installation_error_with_ignore : Ignore
+associate_common_filetypes : Yes
+telemetry : No
+cache_path :
+temp_dir :
 
 [mirrors]
-trusted_mirrors:
+trusted_mirrors :
     https://download.qt.io
-blacklist:
+blacklist :
     http://mirrors.ocf.berkeley.edu
     http://mirrors.tuna.tsinghua.edu.cn
     http://mirrors.geekpie.club
-fallbacks:
+fallbacks :
     https://qtproject.mirror.liquidtelecom.com/
     https://mirrors.aliyun.com/qt/
     https://mirrors.ustc.edu.cn/qtproject/
@@ -44,7 +57,7 @@ fallbacks:
     https://qt.mirror.constant.com/
 
 [kde_patches]
-patches:
+patches :
     0001-toolchain.prf-Use-vswhere-to-obtain-VS-installation-.patch
     0002-Fix-allocated-memory-of-QByteArray-returned-by-QIODe.patch
     0003-Update-CLDR-to-v37-adding-Nigerian-Pidgin-as-a-new-l.patch
@@ -240,4 +253,4 @@ patches:
     0193-Remove-the-unnecessary-template-parameter-from-the-c.patch
     0194-Fix-memory-leak-when-using-small-caps-font.patch
     0195-Make-sure-_q_printerChanged-is-called-even-if-only-p.patch
-    0196-fix-Alt-shortcut-on-non-US-layouts.patch
+    0196-fix-Alt-shortcut-on-non-US-layouts.patch
\ No newline at end of file


Test patch:
diff --git a/tests/test_cli.py b/tests/test_cli.py
index fe38e4f..a6577f9 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -1,3 +1,4 @@
+import platform
 import re
 import sys
 from pathlib import Path
@@ -15,8 +16,9 @@ from aqt.metadata import MetadataFactory, SimpleSpec, Version
 def expected_help(actual, prefix=None):
     expected = (
         "usage: aqt [-h] [-c CONFIG]\n"
-        "           {install-qt,install-tool,install-doc,install-example,install-src,"
-        "list-qt,list-tool,list-doc,list-example,list-src,help,version}\n"
+        "           {install-qt,install-tool,install-qt-commercial,install-doc,install-example,"
+        "install-src,"
+        "list-qt,list-qt-commercial,list-tool,list-doc,list-example,list-src,help,version}\n"
         "           ...\n"
         "\n"
         "Another unofficial Qt Installer.\n"
@@ -32,7 +34,8 @@ def expected_help(actual, prefix=None):
         "  install-* subcommands are commands that install components\n"
         "  list-* subcommands are commands that show available components\n"
         "\n"
-        "  {install-qt,install-tool,install-doc,install-example,install-src,list-qt,"
+        "  {install-qt,install-tool,install-qt-commercial,install-doc,install-example,"
+        "install-src,list-qt,list-qt-commercial,"
         "list-tool,list-doc,list-example,list-src,help,version}\n"
         "                        Please refer to each help message by using '--help' "
         "with each subcommand\n",
@@ -520,3 +523,29 @@ def test_get_autodesktop_dir_and_arch_non_android(
             ), "Expected autodesktop install message."
         elif expect["instruct"]:
             assert any("You can install" in line for line in err_lines), "Expected install instruction message."
+
+
+@pytest.mark.parametrize(
+    "cmd, expected_arch, expected_err",
+    [
+        pytest.param(
+            "install-qt-commercial desktop {} 6.8.0",
+            {"windows": "win64_msvc2022_64", "linux": "linux_gcc_64", "mac": "clang_64"},
+            "No Qt account credentials found. Either provide --user and --password or",
+        ),
+    ],
+)
+def test_cli_login_qt_commercial(capsys, monkeypatch, cmd, expected_arch, expected_err):
+    """Test commercial Qt installation command"""
+    # Detect current platform
+    current_platform = platform.system().lower()
+    arch = expected_arch[current_platform]
+    cmd = cmd.format(arch)
+
+    cli = Cli()
+    cli._setup_settings()
+    result = cli.run(cmd.split())
+
+    _, err = capsys.readouterr()
+    assert str(err).find(expected_err)
+    assert not result == 0
diff --git a/tests/test_install.py b/tests/test_install.py
index f5becb6..02c0d78 100644
--- a/tests/test_install.py
+++ b/tests/test_install.py
@@ -1676,30 +1676,30 @@ def test_install_qt6_wasm_autodesktop(monkeypatch, capsys, version, str_version,
 
         assert result == 0
 
-        # Check output format
-        out, err = capsys.readouterr()
-        sys.stdout.write(out)
-        sys.stderr.write(err)
-
-        # Use regex that works for all platforms
-        expected_pattern = re.compile(
-            r"^INFO    : aqtinstall\(aqt\) v.*? on Python 3.*?\n"
-            r"INFO    : You are installing the Qt6-WASM version of Qt\n"
-            r"(?:INFO    : Found extension .*?\n)*"
-            r"(?:INFO    : Downloading (?:qt[^\n]*|icu[^\n]*)\n"
-            r"Finished installation of .*?\.7z in \d+\.\d+\n)*"
-            r"(?:INFO    : Patching (?:/tmp/[^/]+|[A-Za-z]:[\\/].*?)/6\.8\.0/wasm_singlethread/bin/(?:qmake|qtpaths)(?:6)?\n)*"
-            r"INFO    : \n"
-            r"INFO    : Autodesktop will now install linux desktop 6\.8\.0 linux_gcc_64 as required by Qt6-WASM\n"
-            r"INFO    : aqtinstall\(aqt\) v.*? on Python 3.*?\n"
-            r"(?:INFO    : Found extension .*?\n)*"
-            r"(?:INFO    : Downloading (?:qt[^\n]*|icu[^\n]*)\n"
-            r"Finished installation of .*?\.7z in \d+\.\d+\n)*"
-            r"INFO    : Finished installation\n"
-            r"INFO    : Time elapsed: \d+\.\d+ second\n$"
-        )
+    # Check output format
+    out, err = capsys.readouterr()
+    sys.stdout.write(out)
+    sys.stderr.write(err)
+
+    # Use regex that works for all platforms
+    expected_pattern = re.compile(
+        r"^INFO    : aqtinstall\(aqt\) v.*? on Python 3.*?\n"
+        r"INFO    : You are installing the Qt6-WASM version of Qt\n"
+        r"(?:INFO    : Found extension .*?\n)*"
+        r"(?:INFO    : Downloading (?:qt[^\n]*|icu[^\n]*)\n"
+        r"Finished installation of .*?\.7z in \d+\.\d+\n)*"
+        r"(?:INFO    : Patching (?:/tmp/[^/]+|[A-Za-z]:[\\/].*?)/6\.8\.0/wasm_singlethread/bin/(?:qmake|qtpaths)(?:6)?\n)*"
+        r"INFO    : \n"
+        r"INFO    : Autodesktop will now install linux desktop 6\.8\.0 linux_gcc_64 as required by Qt6-WASM\n"
+        r"INFO    : aqtinstall\(aqt\) v.*? on Python 3.*?\n"
+        r"(?:INFO    : Found extension .*?\n)*"
+        r"(?:INFO    : Downloading (?:qt[^\n]*|icu[^\n]*)\n"
+        r"Finished installation of .*?\.7z in \d+\.\d+\n)*"
+        r"INFO    : Finished installation\n"
+        r"INFO    : Time elapsed: \d+\.\d+ second\n$"
+    )
 
-        assert expected_pattern.match(err)
+    assert expected_pattern.match(err)
 
 
 @pytest.mark.parametrize(
@@ -2054,3 +2054,104 @@ def test_installer_passes_base_to_metadatafactory(
         sys.stderr.write(err)
 
         assert expect_out.match(err), err
+
+
+class CompletedProcess:
+    def __init__(self, args, returncode):
+        self.args = args
+        self.returncode = returncode
+        self.stdout = None
+        self.stderr = None
+
+
+@pytest.mark.enable_socket
+@pytest.mark.parametrize(
+    "cmd, arch_dict, details, expected_command",
+    [
+        (
+            "install-qt-commercial desktop {} 6.8.0 " "--outputdir ./install-qt-commercial " "--user {} --password {}",
+            {"windows": "win64_msvc2022_64", "linux": "linux_gcc_64", "mac": "clang_64"},
+            ["./install-qt-commercial", "qt6", "680"],
+            "qt-unified-{}-x64-online.run --email ******** --pw ******** --root {} "
+            "--accept-licenses --accept-obligations "
+            "--confirm-command "
+            "--auto-answer OperationDoesNotExistError=Ignore,OverwriteTargetDirectory=No,"
+            "stopProcessesForUpdates=Cancel,installationErrorWithCancel=Cancel,installationErrorWithIgnore=Ignore,"
+            "AssociateCommonFiletypes=Yes,telemetry-question=No install qt.{}.{}.{}",
+        ),
+        (
+            "install-qt-commercial desktop {} 6.8.1 " "--outputdir ./install-qt-commercial " "--user {} --password {}",
+            {"windows": "win64_msvc2022_64", "linux": "linux_gcc_64", "mac": "clang_64"},
+            ["./install-qt-commercial", "qt6", "681"],
+            "qt-unified-{}-x64-online.run --email ******** --pw ******** --root {} "
+            "--accept-licenses --accept-obligations "
+            "--confirm-command "
+            "--auto-answer OperationDoesNotExistError=Ignore,OverwriteTargetDirectory=Yes,"
+            "stopProcessesForUpdates=Cancel,installationErrorWithCancel=Cancel,installationErrorWithIgnore=Ignore,"
+            "AssociateCommonFiletypes=Yes,telemetry-question=No install qt.{}.{}.{}",
+        ),
+    ],
+)
+def test_install_qt_commercial(
+    capsys, monkeypatch, cmd: str, arch_dict: dict[str, str], details: list[str], expected_command: str
+) -> None:
+    """Test commercial Qt installation command"""
+
+    # Mock subprocess.run instead of run_static_subprocess_dynamically
+    def mock_subprocess_run(*args, **kwargs):
+        # This will be called instead of the real subprocess.run
+        return CompletedProcess(args=args[0], returncode=0)
+
+    # Patch subprocess.run directly
+    monkeypatch.setattr("subprocess.run", mock_subprocess_run)
+
+    current_platform = sys.platform.lower()
+    arch = arch_dict[current_platform]
+
+    abs_out = Path(details[0]).absolute()
+
+    formatted_cmd = cmd.format(arch, "vofab76634@gholar.com", "WxK43TdWCTmxsrrpnsWbjPfPXVq3mtLK")
+    formatted_expected = expected_command.format(current_platform, abs_out, *details[1:], arch)
+
+    cli = Cli()
+    cli._setup_settings()
+
+    try:
+        cli.run(formatted_cmd.split())
+    except AttributeError:
+        out = " ".join(capsys.readouterr())
+        assert str(out).find(formatted_expected) >= 0
+
+    def modify_qt_config(content):
+        """
+        Takes content of INI file as string and returns modified content
+        """
+        lines = content.splitlines()
+        in_qt_commercial = False
+        modified = []
+
+        for line in lines:
+            # Check if we're entering qtcommercial section
+            if line.strip() == "[qtcommercial]":
+                in_qt_commercial = True
+
+            # If in qtcommercial section, look for the target line
+            if in_qt_commercial and "overwrite_target_directory : No" in line:
+                line = "overwrite_target_directory : Yes"
+            elif in_qt_commercial and "overwrite_target_directory : Yes" in line:
+                line = "overwrite_target_directory : No"
+
+            modified.append(line)
+
+        return "\n".join(modified)
+
+    script_dir = os.path.dirname(os.path.abspath(__file__))
+    config_path = os.path.join(script_dir, "../aqt/settings.ini")
+
+    with open(config_path, "r") as f:
+        content = f.read()
+
+    modified_content = modify_qt_config(content)
+
+    with open(config_path, "w") as f:
+        f.write(modified_content)
diff --git a/tests/test_list.py b/tests/test_list.py
index fa68aca..edc4f56 100644
--- a/tests/test_list.py
+++ b/tests/test_list.py
@@ -1269,3 +1269,19 @@ def test_find_installed_qt_mingw_dir(expected_result: str, installed_files: List
 
         actual_result = QtRepoProperty.find_installed_desktop_qt_dir(host, base_path, Version(qt_ver))
         assert (actual_result.name if actual_result else None) == expected_result
+
+
+# Test error cases
+@pytest.mark.parametrize(
+    "args, expected_error",
+    [
+        (["list-qt-commercial", "--bad-flag"], "usage: aqt [-h] [-c CONFIG]"),
+    ],
+)
+def test_list_qt_commercial_errors(capsys, args, expected_error):
+    """Test error handling in list-qt-commercial command"""
+    cli = Cli()
+    with pytest.raises(SystemExit):
+        cli.run(args)
+    _, err = capsys.readouterr()
+    assert expected_error in err